Bladeren bron

Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_scrm_java

caoliqin 3 weken geleden
bovenliggende
commit
f6f44ffa0c

+ 71 - 0
fs-admin/src/main/java/com/fs/api/controller/CompanyAPIController.java

@@ -0,0 +1,71 @@
+package com.fs.api.controller;
+
+import com.fs.api.param.ExpressParam;
+import com.fs.api.param.OrderListParam;
+import com.fs.api.vo.ExpressVO;
+import com.fs.api.vo.OrderListVO;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.R;
+import com.fs.common.exception.CustomException;
+import com.fs.company.domain.Company;
+import com.fs.company.service.ICompanyService;
+import com.fs.store.service.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+
+/**
+ * 订单Controller
+ *
+ * @author fs
+ * @date 2022-03-15
+ */
+@RestController
+@RequestMapping("/api")
+public class CompanyAPIController extends BaseController
+{
+    @Autowired
+    private ICompanyService companyService;
+    @Autowired
+    private IFsStoreOrderService storeOrderService;
+    @Autowired
+    private IFsExpressService expressService;
+
+    private Company checkCompany(HttpServletRequest request){
+        String appId=request.getHeader("appId");
+        String appKey=request.getHeader("appKey");
+        if(appId==null){
+            throw new CustomException("appId不能为空");
+        }
+        if(appKey==null){
+            throw new CustomException("appKey不能为空");
+        }
+        Company company=companyService.selectCompanyByAppId(appId);
+        if(company==null){
+            throw new CustomException("appId不存在");
+        }
+        return company;
+    }
+
+    @GetMapping("/getOrderList")
+    public R getOrderList(OrderListParam param, HttpServletRequest request)
+    {
+        Company company=checkCompany(request);
+        param.setCompanyId(company.getCompanyId());
+        List<OrderListVO> list = storeOrderService.selectCompanyStoreOrderListAPI(param);
+        return R.ok().put("data",list);
+    }
+
+
+    @GetMapping("/getExpressInfo")
+    public R getExpressInfo(ExpressParam param, HttpServletRequest request) {
+        Company company=checkCompany(request);
+        List<ExpressVO> list = expressService.getExpressInfoAPI(param);
+        return R.ok().put("data",list);
+    }
+
+
+
+}

+ 197 - 0
fs-admin/src/main/java/com/fs/api/controller/IndexStatisticsController.java

@@ -0,0 +1,197 @@
+package com.fs.api.controller;
+
+import com.fs.common.core.redis.RedisCache;
+import com.fs.statis.StatisticsRedisConstant;
+import com.fs.statis.dto.*;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import com.fs.common.core.domain.R;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.fs.statis.StatisticsRedisConstant.*;
+
+/**
+ * 首页-统计
+ */
+@RestController
+@RequestMapping("/index/statistics")
+public class IndexStatisticsController {
+    @Autowired
+    private RedisCache redisCache;
+    /**
+     * 分析概览
+     */
+    @PostMapping("/analysisPreview")
+    public R analysisPreview(@RequestBody AnalysisPreviewQueryDTO param){
+        AnalysisPreviewDTO analysisPreviewDTO = null;
+        Integer type = param.getType();
+        Integer userType = param.getUserType();
+
+        if(type == null) {
+            type = 0;
+        }
+
+        if(userType == null) {
+            userType = 0;
+        }
+        analysisPreviewDTO = redisCache.getCacheObject(String.format("%s:%d:%d",DATA_OVERVIEW_DEALER_ANALYSISPREVIEW,type,userType));
+
+        return R.ok().put("data",analysisPreviewDTO);
+    }
+
+
+    /**
+     * 消费余额
+     */
+    @GetMapping("/rechargeComsumption")
+    public R rechargeComsumption(){
+        ConsumptionBalanceDataDTO consumptionBalanceDataDTO = redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_BALANCE);
+
+        return R.ok().put("data", consumptionBalanceDataDTO);
+    }
+
+    /**
+     * 获取统计流量
+     * @return
+     */
+    @GetMapping("/trafficLog")
+    public R getTrafficLog(){
+        TrafficLogDTO trafficLogDTO = redisCache.getCacheObject(DATA_OVERVIEW_TRAFFIC_LOG);
+        return R.ok().put("data",trafficLogDTO);
+    }
+
+    /**
+     * 观看趋势
+     */
+    @PostMapping("/watchEndPlayTrend")
+    public R watchEndPlayTrend(@RequestBody AnalysisPreviewQueryDTO param){
+        Integer type = param.getType();
+        Integer userType = param.getUserType();
+
+        if(type == null) {
+            type = 0;
+        }
+        if(userType == null){
+            userType = 0;
+        }
+        String key = String.format("%s:%d:%d", DATA_OVERVIEW_DEALER_CHARTS, type,userType);
+        List<DeaMemberTopTenDTO> deaMemberTopTenDTOS = redisCache.getCacheObject(key);
+        return R.ok().put("data", deaMemberTopTenDTOS);
+    }
+
+    /**
+     * 经销商会员观看
+     */
+    @PostMapping("/deaMemberTopTen")
+    public R deaMemberTopTen(@RequestBody AnalysisPreviewQueryDTO param){
+        Integer type = param.getType();
+        Integer statisticalType = param.getStatisticalType();
+        Integer userType = param.getUserType();
+
+        if(type == null) {
+            type = 0;
+        }
+        if(userType == null){
+            userType = 0;
+        }
+
+        List<DeaMemberTopTenDTO> deaMemberTopTenDTOS = redisCache.getCacheObject(String.format("%s:%d:%d:%d", CHARTS_MEMBER_TOP_TEN_WATCH, type, statisticalType,userType));
+        if(deaMemberTopTenDTOS == null){
+            deaMemberTopTenDTOS = new ArrayList<>();
+        }
+        return R.ok().put("data", deaMemberTopTenDTOS);
+    }
+
+    /**
+     * 奖励金额top10
+     */
+    @PostMapping("/rewardMoneyTopTen")
+    public R rewardMoneyTopTen(@RequestBody AnalysisPreviewQueryDTO param){
+        Integer type = param.getType();
+        Integer dataType = param.getDataType();
+        Integer userType = param.getUserType();
+
+        List<RewardMoneyTopTenDTO> rewardMoneyTopTenDTOS = redisCache.getCacheObject( String.format("%s:%d:%d:%d", CHARTS_REWARD_MONEY_TOP_TEN, type,dataType,userType));
+        return R.ok().put("data", rewardMoneyTopTenDTOS);
+    }
+
+    /**
+     * 答题红包金额趋势图
+     */
+    @PostMapping("/rewardMoneyTrend")
+    public R rewardMoneyTrend(@RequestBody AnalysisPreviewQueryDTO param){
+        Integer type = param.getType();
+        Integer userType = param.getUserType();
+        List<RewardMoneyTrendDTO> rewardMoneyTrendDTOS = redisCache.getCacheObject( String.format("%s:%d:%d", CHARTS_REWARD_MONEY_TREND, type,userType));
+        return R.ok().put("data", rewardMoneyTrendDTOS);
+    }
+
+    /**
+     * 课程观看top10
+     */
+    @PostMapping("/watchCourseTopTen")
+    public R watchCourseTopTen(@RequestBody AnalysisPreviewQueryDTO param){
+        Integer type = param.getType();
+        String sort = param.getSort();
+        Integer statisticalType = param.getStatisticalType();
+        Integer userType = param.getUserType();
+
+        List<CourseStatsDTO> courseStatsDTOS = redisCache.getCacheObject(String.format("%s:%d:%d:%d:%s", CHARTS_WATCH_TOP_TEN, type,statisticalType,userType,sort));
+        return R.ok().put("data", courseStatsDTOS);
+    }
+
+    /**
+     * 数据概览
+     */
+    @GetMapping("/dealerAggregated")
+    public R dealerAggregated(){
+        DealerAggregatedDTO dealerAggregatedDTO = redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_AGGREGATED);
+
+        return R.ok().put("data",dealerAggregatedDTO);
+    }
+
+    /**
+     * 短信余额
+     */
+    @GetMapping("/smsBalance")
+    public R smsBalance(){
+        Long smsBalance = redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_SMS_BALANCE);
+
+        return R.ok().put("data", smsBalance);
+    }
+
+
+    /**
+     * 授权信息
+     */
+    @GetMapping("/authorizationInfo")
+    public R authorizationInfo(){
+        AuthorizationInfoDTO authorizationInfoDTO = redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_AUTHORIZATION_INFO);
+
+        return R.ok().put("data", authorizationInfoDTO);
+    }
+
+
+    /**
+     * 当月订单数统计
+     * @return
+     */
+    @GetMapping("/thisMonthOrderCount")
+    public R thisMonthOrderCount(){
+        R result = redisCache.getCacheObject(StatisticsRedisConstant.THIS_MONTH_ORDER_COUNT);
+        return result;
+    }
+
+    /**
+     * 当月收益统计
+     * @return
+     */
+
+    @GetMapping("/thisMonthRecvCount")
+    public R thisMonthRecvCount(){
+        R result = redisCache.getCacheObject(StatisticsRedisConstant.THIS_MONTH_RECV_COUNT);
+        return result;
+    }
+}

+ 1 - 1
fs-admin/src/main/resources/application.yml

@@ -6,4 +6,4 @@ server:
 spring:
   profiles:
     active: dev
-    include: common,config-zkzh
+    include: common,config-dev

+ 1 - 1
fs-company/src/main/resources/application.yml

@@ -5,4 +5,4 @@ server:
 spring:
   profiles:
     active: dev
-    include: common,config-zkzh
+    include: common,config-dev

+ 2 - 2
fs-service-system/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -145,6 +145,8 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
 
     @Autowired
     private FsUserCompanyUserMapper fsUserCompanyUserMapper;
+    @Autowired
+    private IFsUserCourseCacheService fsUserCourseCacheService;
 
     /**
      * 查询课堂视频
@@ -539,8 +541,6 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
     }
 
 
-    @Autowired
-    private IFsUserCourseCacheService fsUserCourseCacheService;
     @Transactional
     @Override
     public R getInternetTraffic(FsUserCourseVideoFinishUParam param) {

+ 2 - 0
fs-service-system/src/main/java/com/fs/qw/mapper/QwUserMapper.java

@@ -40,6 +40,8 @@ public interface QwUserMapper extends BaseMapper<QwUser>
 
     @Select("select welcome_text,qw_user_name,qw_user_id from qw_user where id = #{id}")
     public QwUser selectQwUserByIdByWeComeText(@Param("id") Long id);
+    @Select("select * from qw_user where qw_user_id = #{qwUserId} and corp_id = #{corpId} ")
+    public QwUser selectQwUserByIdByWeComeText(@Param("qwUserId") String qwUserId, @Param("corpId") String corpId);
     /**
      * 根据companyUserId查询企微用户
      */

+ 1 - 0
fs-service-system/src/main/java/com/fs/sop/params/SendUserLogsInfoMsgParam.java

@@ -12,6 +12,7 @@ public class SendUserLogsInfoMsgParam {
     private Integer videoId;
     private Integer courseId;
     private Integer courseType;
+    private String[] chatIds;
     private String setting;
     private String sopId;
     private String userIdParam;

+ 0 - 1
fs-service-system/src/main/java/com/fs/sop/service/impl/QwSopTempServiceImpl.java

@@ -508,7 +508,6 @@ public class QwSopTempServiceImpl implements IQwSopTempService
         if(!redSaveList.isEmpty()){
             fsUserCourseVideoRedPackageService.batchSaveCompanyRedPackage(redSaveList);
         }
-
     }
 
     @Override

+ 242 - 133
fs-service-system/src/main/java/com/fs/sop/service/impl/SopUserLogsInfoServiceImpl.java

@@ -3,7 +3,9 @@ package com.fs.sop.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.fs.common.core.domain.R;
+import com.fs.common.exception.base.BaseException;
 import com.fs.common.utils.StringUtils;
+import com.fs.common.utils.date.DateUtil;
 import com.fs.company.mapper.CompanyUserMapper;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.domain.FsCourseDomainName;
@@ -13,12 +15,15 @@ import com.fs.course.domain.FsCourseWatchLog;
 import com.fs.course.mapper.FsCourseDomainNameMapper;
 import com.fs.course.mapper.FsCourseLinkMapper;
 import com.fs.course.mapper.FsCourseWatchLogMapper;
+import com.fs.course.param.FsCourseLinkCreateParam;
 import com.fs.course.service.IFsCourseLinkService;
 import com.fs.fastGpt.domain.FastGptChatReplaceWords;
 import com.fs.fastGpt.mapper.FastGptChatReplaceWordsMapper;
 import com.fs.qw.domain.QwExternalContact;
+import com.fs.qw.domain.QwGroupChat;
 import com.fs.qw.domain.QwUser;
 import com.fs.qw.mapper.QwExternalContactMapper;
+import com.fs.qw.mapper.QwGroupChatMapper;
 import com.fs.qw.mapper.QwGroupChatUserMapper;
 import com.fs.qw.mapper.QwUserMapper;
 import com.fs.qw.service.impl.AsyncSopTestService;
@@ -57,6 +62,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.concurrent.ThreadLocalRandom;
 import java.util.function.Consumer;
+import java.util.stream.Collectors;
 
 import static com.fs.course.utils.LinkUtil.generateRandomStringWithLock;
 
@@ -94,6 +100,11 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
     @Autowired
     private QwUserMapper qwUserMapper;
 
+    @Autowired
+    private QwGroupChatMapper qwGroupChatMapper;
+    @Autowired
+    private IFsCourseLinkService courseLinkService;
+
     @Autowired
     private QwSopMapper qwSopMapper;
 
@@ -358,179 +369,277 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
 
     @Override
     public R sendUserLogsInfoMsg(SendUserLogsInfoMsgParam param) {
-
-        Date createTime=new Date();
-
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         QwSop qwSop = qwSopMapper.selectQwSopById(param.getSopId());
-
         List<FastGptChatReplaceWords> words = fastGptChatReplaceWordsMapper.selectAllFastGptChatReplaceWords();
+        String json = configService.selectConfigByKey("course.config");
+        CourseConfig config = JSON.parseObject(json, CourseConfig.class);
 
-        String[] userKey = param.getUserIdParam().split("\\|");
-        String qwUserId = userKey[0].trim();
-        String companyUserId = userKey[1].trim();
-        String companyId = userKey[2].trim();
+        if (config == null) {
+            return R.error().put("msg","课程默认配置为空,请联系管理员");
+        }
+        List<QwSopLogs> sopLogsList;
+        if(param.getFilterMode() != null && param.getFilterMode() == 2 && param.getChatIds() != null && param.getChatIds().length > 0){
+            List<QwGroupChat> groupList = qwGroupChatMapper.selectQwGroupChatByChatIds(param.getChatIds());
+            sopLogsList = groupList.stream().map(groupChat -> {
+                QwUser qwUser = qwUserMapper.selectQwUserByIdByWeComeText(groupChat.getOwner(), groupChat.getCorpId());
+                QwSopLogs sopLogs = new QwSopLogs();
+
+                sopLogs.setQwUserid(qwUser.getQwUserId());
+                sopLogs.setExternalUserId(groupChat.getChatId());
+                sopLogs.setLogType(2);
+                sopLogs.setContentJson(param.getSetting());
+                sopLogs.setSendStatus(3L);
+                sopLogs.setSendTime(DateUtil.formatLocalDateTime(LocalDateTime.now()));
+                sopLogs.setCompanyId(qwSop.getCompanyId());
+                sopLogs.setReceivingStatus(0L);
+                sopLogs.setSopId(param.getSopId());
+                sopLogs.setCorpId(groupChat.getCorpId());
+                sopLogs.setSort(2);
+                sopLogs.setSendType(6);
+                sopLogs.setExternalUserName(groupChat.getName());
+
+                QwSopCourseFinishTempSetting setting = new QwSopCourseFinishTempSetting();
+
+                List<QwSopCourseFinishTempSetting.Setting> list = JSONArray.parseArray(param.getSetting(), QwSopCourseFinishTempSetting.Setting.class);
+//
+//            List<QwSopCourseFinishTempSetting.Setting> list = parseSettings(param.getSetting());
 
-        QwUser qwUser = qwUserMapper.selectQwUserByIdByWeComeText(Long.valueOf(qwUserId));
+                for (QwSopCourseFinishTempSetting.Setting st : list) {
 
-        if (qwUser == null) {
-            return R.error().put("msg","企业微信用户不存在:"+qwUserId);
-        }
+                    //过滤违禁词
+                    if ("1".equals(st.getContentType())) {
+                        replaceContent(st.getContentType(), st.getValue(), st::setValue, words); // 替换 value
+                    }
+                    //过滤违禁词
+                    if ("3".equals(st.getContentType())) {
+                        replaceContent(st.getContentType(), st.getLinkTitle(), st::setLinkTitle, words); // 替换 linkTitle
+                        replaceContent(st.getContentType(), st.getLinkDescribe(), st::setLinkDescribe, words); // 替换 linkTitle
+                    }
+
+                    switch (st.getContentType()) {
+                        //文字和短链一起
+                        case "1":
+                        case "3":
+                            if ("1".equals(st.getIsBindUrl())) {
+                                FsCourseLinkCreateParam createParam = new FsCourseLinkCreateParam();
+                                createParam.setCourseId(param.getCourseId().longValue());
+                                createParam.setVideoId(param.getVideoId().longValue());
+                                createParam.setCorpId(groupChat.getCorpId());
+                                createParam.setCompanyUserId(qwUser.getCompanyUserId());
+                                createParam.setCompanyId(qwUser.getCompanyId());
+                                createParam.setChatId(groupChat.getChatId());
+                                createParam.setQwUserId(qwUser.getQwUserId());
+                                createParam.setDays(st.getExpiresDays());
+                                R createLink = courseLinkService.createRoomLinkUrl(createParam);
+                                if (createLink.get("code").equals(500)) {
+                                    throw new BaseException("链接生成失败!");
+                                }
+                                String link = (String) createLink.get("url");
+                                if (StringUtils.isNotEmpty(link)) {
+                                    if ("3".equals(st.getContentType())) {
+                                        st.setLinkUrl(link);
+                                    } else {
+                                        String currentValue = st.getValue();
+                                        if (currentValue == null) {
+                                            st.setValue(link);
+                                        } else {
+//                                    setting.setValue(currentValue + "\n" + sortLink);
+                                            st.setValue(currentValue
+                                                    .replaceAll("#销售称呼#", StringUtil.strIsNullOrEmpty(qwUser.getWelcomeText()) ? "" : qwUser.getWelcomeText())
+                                                    + "\n" + link);
+                                        }
+                                    }
+                                } else {
+                                    log.error("生成短链失败,跳过设置 URL。");
+                                }
+                            }
 
+                            break;
+                        //小程序单独
+                        case "4":
+                            String linkByMiniApp = createLinkByMiniApp(st, param.getCorpId(), new Date(), param.getCourseId(), param.getVideoId(),
+                                    qwUser.getQwUserId(), qwUser.getCompanyUserId().toString(), qwUser.getCompanyId().toString(), null, config, null);
+
+                            st.setMiniprogramPage(linkByMiniApp.replaceAll("^[\\s\\u2005]+", ""));
+                            break;
+                    }
+                }
+                setting.setSetting(list);
+                setting.setType(2);
+                setting.setVideoId(param.getVideoId());
+                setting.setCourseId(param.getCourseId());
+                setting.setCourseType(param.getCourseType());
+                sopLogs.setContentJson(JSON.toJSONString(setting));
+                return sopLogs;
+            }).collect(Collectors.toList());
 
-//        List<SopUserLogsInfo> sopUserLogsInfos = sopUserLogsInfoMapper.selectSopUserLogsInfoByIds(param.getIds());
-        SopUserLogsInfoByIdsHasUserIdParam userIdParam=new SopUserLogsInfoByIdsHasUserIdParam();
-        userIdParam.setIds(param.getIds());
-        userIdParam.setIsRegister(param.getIsRegister());
-        userIdParam.setQwUserId(qwUser.getQwUserId());
-        List<SopUserLogsInfo> sopUserLogsInfos;
-        if(param.getFilterMode() == 1){
-            sopUserLogsInfos = sopUserLogsInfoMapper.selectSopUserLogsInfoByIdsHasUserId(userIdParam);
         }else{
-            sopUserLogsInfos = qwGroupChatUserMapper.selectByIdAndRegister(userIdParam);
-        }
-        if(sopUserLogsInfos.isEmpty()){
-            return R.ok();
-        }
-        String json = configService.selectConfigByKey("course.config");
-        CourseConfig config = JSON.parseObject(json, CourseConfig.class);
+            sopLogsList = new ArrayList<>();
+            Date createTime=new Date();
 
-        if (config == null) {
-            return R.error().put("msg","课程默认配置为空,请联系管理员");
-        }
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
 
-        //域名
-        String domainName = companyUserMapper.selectDomainByUserId(Long.parseLong(companyUserId));
-        if (StringUtils.isEmpty(domainName)){
-            domainName = config.getRealLinkDomainName();
-        }
-        String finalDomainName = domainName;
+            String[] userKey = param.getUserIdParam().split("\\|");
+            String qwUserId = userKey[0].trim();
+            String companyUserId = userKey[1].trim();
+            String companyId = userKey[2].trim();
+
+            QwUser qwUser = qwUserMapper.selectQwUserByIdByWeComeText(Long.valueOf(qwUserId));
+
+            if (qwUser == null) {
+                return R.error().put("msg","企业微信用户不存在:"+qwUserId);
+            }
+
+
+//        List<SopUserLogsInfo> sopUserLogsInfos = sopUserLogsInfoMapper.selectSopUserLogsInfoByIds(param.getIds());
+            SopUserLogsInfoByIdsHasUserIdParam userIdParam=new SopUserLogsInfoByIdsHasUserIdParam();
+            userIdParam.setIds(param.getIds());
+            userIdParam.setIsRegister(param.getIsRegister());
+            userIdParam.setQwUserId(qwUser.getQwUserId());
+            List<SopUserLogsInfo> sopUserLogsInfos;
+            if(param.getFilterMode() == 1){
+                sopUserLogsInfos = sopUserLogsInfoMapper.selectSopUserLogsInfoByIdsHasUserId(userIdParam);
+            }else{
+                sopUserLogsInfos = qwGroupChatUserMapper.selectByIdAndRegister(userIdParam);
+            }
+            if(sopUserLogsInfos.isEmpty()){
+                return R.ok();
+            }
+            if (config == null) {
+                return R.error().put("msg","课程默认配置为空,请联系管理员");
+            }
+
+            //域名
+            String domainName = companyUserMapper.selectDomainByUserId(Long.parseLong(companyUserId));
+            if (StringUtils.isEmpty(domainName)){
+                domainName = config.getRealLinkDomainName();
+            }
+            String finalDomainName = domainName;
 
 //        if (StringUtils.isEmpty(config.getMiniprogramPage())){
 //            return R.error().put("msg","课程默认配置小程序路径为空,请联系管理员");
 //        }
 
-        List<QwSopLogs> sopLogsList=new ArrayList<>();
+            sopUserLogsInfos.forEach(item->{
 
-        sopUserLogsInfos.forEach(item->{
+                QwSopLogs sopLogs=new QwSopLogs();
 
-            QwSopLogs sopLogs=new QwSopLogs();
+                sopLogs.setQwUserid(item.getQwUserId());
+                sopLogs.setExternalUserId(item.getExternalContactId());
+                sopLogs.setExternalId(item.getExternalId());
+                sopLogs.setLogType(2);
+                sopLogs.setContentJson(param.getSetting());
+                sopLogs.setSendStatus(3L);
+                sopLogs.setSendTime(sdf.format(new Date()));
+                sopLogs.setCompanyId(qwSop.getCompanyId());
+                sopLogs.setReceivingStatus(0L);
+                sopLogs.setSopId(param.getSopId());
+                sopLogs.setCorpId(item.getCorpId());
+                sopLogs.setFsUserId(item.getFsUserId());
+                sopLogs.setSort(2);
+                sopLogs.setSendType(5);
+                sopLogs.setExternalUserName(item.getExternalUserName());
 
-            sopLogs.setQwUserid(item.getQwUserId());
-            sopLogs.setExternalUserId(item.getExternalContactId());
-            sopLogs.setExternalId(item.getExternalId());
-            sopLogs.setLogType(2);
-            sopLogs.setContentJson(param.getSetting());
-            sopLogs.setSendStatus(3L);
-            sopLogs.setSendTime(sdf.format(new Date()));
-            sopLogs.setCompanyId(qwSop.getCompanyId());
-            sopLogs.setReceivingStatus(0L);
-            sopLogs.setSopId(param.getSopId());
-            sopLogs.setCorpId(item.getCorpId());
-            sopLogs.setFsUserId(item.getFsUserId());
-            sopLogs.setSort(2);
-            sopLogs.setSendType(5);
-            sopLogs.setExternalUserName(item.getExternalUserName());
+                QwExternalContact contact = qwExternalContactMapper.selectQwExternalContactByIdForStageStatus(item.getExternalId());
 
-            QwExternalContact contact = qwExternalContactMapper.selectQwExternalContactByIdForStageStatus(item.getExternalId());
+                QwSopCourseFinishTempSetting setting=new    QwSopCourseFinishTempSetting();
 
-            QwSopCourseFinishTempSetting setting=new    QwSopCourseFinishTempSetting();
-
-            List<QwSopCourseFinishTempSetting.Setting> list = JSONArray.parseArray(param.getSetting(),QwSopCourseFinishTempSetting.Setting.class);
+                List<QwSopCourseFinishTempSetting.Setting> list = JSONArray.parseArray(param.getSetting(),QwSopCourseFinishTempSetting.Setting.class);
 //
 //            List<QwSopCourseFinishTempSetting.Setting> list = parseSettings(param.getSetting());
 
-            for (QwSopCourseFinishTempSetting.Setting st : list) {
+                for (QwSopCourseFinishTempSetting.Setting st : list) {
 
-                //过滤违禁词
-                if ("1".equals(st.getContentType())){
-                    replaceContent(st.getContentType(), st.getValue(), st::setValue, words); // 替换 value
-                }
-                //过滤违禁词
-                if ("3".equals(st.getContentType())){
-                    replaceContent(st.getContentType(), st.getLinkTitle(), st::setLinkTitle, words); // 替换 linkTitle
-                    replaceContent(st.getContentType(), st.getLinkDescribe(), st::setLinkDescribe, words); // 替换 linkTitle
-                }
+                    //过滤违禁词
+                    if ("1".equals(st.getContentType())){
+                        replaceContent(st.getContentType(), st.getValue(), st::setValue, words); // 替换 value
+                    }
+                    //过滤违禁词
+                    if ("3".equals(st.getContentType())){
+                        replaceContent(st.getContentType(), st.getLinkTitle(), st::setLinkTitle, words); // 替换 linkTitle
+                        replaceContent(st.getContentType(), st.getLinkDescribe(), st::setLinkDescribe, words); // 替换 linkTitle
+                    }
 
-                switch (st.getContentType()){
-                    //文字和短链一起
-                    case "1":
-                    case "3":
-                        if ("1".equals(st.getIsBindUrl())) {
+                    switch (st.getContentType()){
+                        //文字和短链一起
+                        case "1":
+                        case "3":
+                            if ("1".equals(st.getIsBindUrl())) {
 
-                            addWatchLogIfNeeded(param.getSopId(), param.getVideoId(), param.getCourseId(),item.getFsUserId(), qwUserId, companyUserId, companyId, item.getExternalId(),param.getStartTime(),createTime );
+                                addWatchLogIfNeeded(param.getSopId(), param.getVideoId(), param.getCourseId(),item.getFsUserId(), qwUserId, companyUserId, companyId, item.getExternalId(),param.getStartTime(),createTime );
 
-                            String sortLink = generateShortLink(st, param.getCorpId(), createTime, param.getCourseId(), param.getVideoId(),
-                                    qwUserId, companyUserId, companyId,finalDomainName, item.getExternalId(),config,contact.getFsUserId());
+                                String sortLink = generateShortLink(st, param.getCorpId(), createTime, param.getCourseId(), param.getVideoId(),
+                                        qwUserId, companyUserId, companyId,finalDomainName, item.getExternalId(),config,contact.getFsUserId());
 
-                            if (StringUtils.isNotEmpty(sortLink)) {
-                                if ("3".equals(st.getContentType())) {
-                                    st.setLinkUrl(sortLink);
-                                } else {
-                                    String currentValue = st.getValue();
-                                    if (currentValue == null) {
-                                        st.setValue(sortLink);
+                                if (StringUtils.isNotEmpty(sortLink)) {
+                                    if ("3".equals(st.getContentType())) {
+                                        st.setLinkUrl(sortLink);
                                     } else {
-                                        st.setValue(currentValue
-                                                .replaceAll("#销售称呼#",StringUtil.strIsNullOrEmpty(qwUser.getWelcomeText())?"":qwUser.getWelcomeText())
-                                                .replaceAll("#客户称呼#",StringUtil.strIsNullOrEmpty(contact.getStageStatus())|| "0".equals(contact.getStageStatus())?"同学":contact.getStageStatus())
-                                                + "\n" + sortLink);
+                                        String currentValue = st.getValue();
+                                        if (currentValue == null) {
+                                            st.setValue(sortLink);
+                                        } else {
+                                            st.setValue(currentValue
+                                                    .replaceAll("#销售称呼#",StringUtil.strIsNullOrEmpty(qwUser.getWelcomeText())?"":qwUser.getWelcomeText())
+                                                    .replaceAll("#客户称呼#",StringUtil.strIsNullOrEmpty(contact.getStageStatus())|| "0".equals(contact.getStageStatus())?"同学":contact.getStageStatus())
+                                                    + "\n" + sortLink);
+                                        }
                                     }
+                                } else {
+                                    log.warn("生成短链失败,跳过设置 URL。");
+                                }
+                            }else {
+                                if ("1".equals(st.getContentType())) {
+                                    st.setValue(st.getValue()
+                                            .replaceAll("#销售称呼#",StringUtil.strIsNullOrEmpty(qwUser.getWelcomeText())?"":qwUser.getWelcomeText())
+                                            .replaceAll("#客户称呼#",StringUtil.strIsNullOrEmpty(contact.getStageStatus()) || "0".equals(contact.getStageStatus())?"同学":contact.getStageStatus()));
                                 }
-                            } else {
-                                log.warn("生成短链失败,跳过设置 URL。");
-                            }
-                        }else {
-                            if ("1".equals(st.getContentType())) {
-                                st.setValue(st.getValue()
-                                        .replaceAll("#销售称呼#",StringUtil.strIsNullOrEmpty(qwUser.getWelcomeText())?"":qwUser.getWelcomeText())
-                                        .replaceAll("#客户称呼#",StringUtil.strIsNullOrEmpty(contact.getStageStatus()) || "0".equals(contact.getStageStatus())?"同学":contact.getStageStatus()));
                             }
-                        }
 
-                        break;
-                    //小程序单独
-                    case "4":
-                        addWatchLogIfNeeded(param.getSopId(), param.getVideoId(), param.getCourseId(),item.getFsUserId(), qwUserId, companyUserId, companyId, item.getExternalId(),param.getStartTime(),createTime );
-
-                        String linkByMiniApp = createLinkByMiniApp(st, param.getCorpId(), createTime, param.getCourseId(), param.getVideoId(),
-                                qwUserId, companyUserId, companyId, item.getExternalId(), config,contact.getFsUserId());
-
-                        st.setMiniprogramPage(linkByMiniApp.replaceAll("^[\\s\\u2005]+", ""));
-                        break;
-                    //app
-                    case "9":
-                        addWatchLogIfNeeded(param.getSopId(), param.getVideoId(), param.getCourseId(),item.getFsUserId(), qwUserId, companyUserId, companyId, item.getExternalId(),param.getStartTime(),createTime );
-
-                        QwCreateLinkByAppVO linkByApp = createLinkByApp(st, param.getCorpId(), createTime, param.getCourseId(), param.getVideoId(),
-                                qwUserId, companyUserId, companyId, item.getExternalId(), config,qwUser.getQwUserName(),contact.getFsUserId());
-                        st.setLinkUrl(linkByApp.getSortLink().replaceAll("^[\\s\\u2005]+", ""));
-                        st.setAppLinkUrl(linkByApp.getAppMsgLink().replaceAll("^[\\s\\u2005]+", ""));
-
-                        break;
-                    //注册链接
-                    case "10":
-                        String url=config.getRegisterDomainName()+registerLink+item.getExternalId();
-                        st.setLinkUrl(url.replaceAll("^[\\s\\u2005]+", ""));
-                        break;
-                    default:
-                        break;
+                            break;
+                        //小程序单独
+                        case "4":
+                            addWatchLogIfNeeded(param.getSopId(), param.getVideoId(), param.getCourseId(),item.getFsUserId(), qwUserId, companyUserId, companyId, item.getExternalId(),param.getStartTime(),createTime );
+
+                            String linkByMiniApp = createLinkByMiniApp(st, param.getCorpId(), createTime, param.getCourseId(), param.getVideoId(),
+                                    qwUserId, companyUserId, companyId, item.getExternalId(), config,contact.getFsUserId());
+
+                            st.setMiniprogramPage(linkByMiniApp.replaceAll("^[\\s\\u2005]+", ""));
+                            break;
+                        //app
+                        case "9":
+                            addWatchLogIfNeeded(param.getSopId(), param.getVideoId(), param.getCourseId(),item.getFsUserId(), qwUserId, companyUserId, companyId, item.getExternalId(),param.getStartTime(),createTime );
+
+                            QwCreateLinkByAppVO linkByApp = createLinkByApp(st, param.getCorpId(), createTime, param.getCourseId(), param.getVideoId(),
+                                    qwUserId, companyUserId, companyId, item.getExternalId(), config,qwUser.getQwUserName(),contact.getFsUserId());
+                            st.setLinkUrl(linkByApp.getSortLink().replaceAll("^[\\s\\u2005]+", ""));
+                            st.setAppLinkUrl(linkByApp.getAppMsgLink().replaceAll("^[\\s\\u2005]+", ""));
 
+                            break;
+                        //注册链接
+                        case "10":
+                            String url=config.getRegisterDomainName()+registerLink+item.getExternalId();
+                            st.setLinkUrl(url.replaceAll("^[\\s\\u2005]+", ""));
+                            break;
+                        default:
+                            break;
+
+                    }
                 }
-            }
 
 
-            setting.setSetting(list);
-            setting.setType(2);
-            setting.setVideoId(param.getVideoId());
-            setting.setCourseId(param.getCourseId());
-            setting.setCourseType(param.getCourseType());
+                setting.setSetting(list);
+                setting.setType(2);
+                setting.setVideoId(param.getVideoId());
+                setting.setCourseId(param.getCourseId());
+                setting.setCourseType(param.getCourseType());
 
-            sopLogs.setContentJson(JSON.toJSONString(setting));
+                sopLogs.setContentJson(JSON.toJSONString(setting));
 
-            sopLogsList.add(sopLogs);
-        });
+                sopLogsList.add(sopLogs);
+            });
 
+        }
         //批量插入 发送记录
         if (!sopLogsList.isEmpty()) {
             processAndInsertQwSopLogsBySendMsg(sopLogsList);

+ 1 - 1
fs-user-app/src/main/java/com/fs/app/controller/AddressController.java

@@ -57,7 +57,7 @@ public class AddressController extends  AppBaseController {
         for (FsCity city : list){
             CityVO cityVO = new CityVO();
             cityVO.setV(city.getCityId());
-            cityVO.setN(city.getName());
+            cityVO.setN(city.getCityName());
             cityVO.setPid(city.getParentId());
             cityVOS.add(cityVO);
         }

+ 42 - 42
fs-user-app/src/main/java/com/fs/app/controller/CommonController.java

@@ -615,48 +615,48 @@ public class CommonController extends AppBaseController {
 	}
 
 
-	@ApiOperation("导入CVS")
-	@PostMapping("importCVS")
-	public R importCVS(@RequestParam("file") MultipartFile file) throws Exception
-	{
-		File csv = new File("c:\\1.cvs");
-		FileUtils.copyInputStreamToFile(file.getInputStream(), csv);
-		BufferedReader br = null;
-		try
-		{
-			br = new BufferedReader(new FileReader(csv));
-		} catch (FileNotFoundException e)
-		{
-			e.printStackTrace();
-		}
-		String line = "";
-		try {
-			Integer index=0;
-			while ((line = br.readLine()) != null)
-			{
-				if(index>0){
-					String[] data=line.split(",");
-					FsCity city=new FsCity();
-					city.setCityId(Long.parseLong(data[0]));
-					city.setParentId(Long.parseLong(data[1]));
-					city.setLevel(Long.parseLong(data[2]));
-					city.setName(data[7]);
-					city.setAreaCode(data[6]);
-					city.setIsShow(1);
-					cityService.insertFsCity(city);
-				}
-
-				System.out.println(line);
-				index++;
-
-			}
-		} catch (IOException e)
-		{
-			e.printStackTrace();
-		}
-
-		return R.ok();
-	}
+//	@ApiOperation("导入CVS")
+//	@PostMapping("importCVS")
+//	public R importCVS(@RequestParam("file") MultipartFile file) throws Exception
+//	{
+//		File csv = new File("c:\\1.cvs");
+//		FileUtils.copyInputStreamToFile(file.getInputStream(), csv);
+//		BufferedReader br = null;
+//		try
+//		{
+//			br = new BufferedReader(new FileReader(csv));
+//		} catch (FileNotFoundException e)
+//		{
+//			e.printStackTrace();
+//		}
+//		String line = "";
+//		try {
+//			Integer index=0;
+//			while ((line = br.readLine()) != null)
+//			{
+//				if(index>0){
+//					String[] data=line.split(",");
+//					FsCity city=new FsCity();
+//					city.setCityId(Long.parseLong(data[0]));
+//					city.setParentId(Long.parseLong(data[1]));
+//					city.setLevel(Long.parseLong(data[2]));
+//					city.setName(data[7]);
+//					city.setAreaCode(data[6]);
+//					city.setIsShow(1);
+//					cityService.insertFsCity(city);
+//				}
+//
+//				System.out.println(line);
+//				index++;
+//
+//			}
+//		} catch (IOException e)
+//		{
+//			e.printStackTrace();
+//		}
+//
+//		return R.ok();
+//	}
 
 
 

+ 1 - 1
fs-user-app/src/main/java/com/fs/app/utils/CityTreeUtil.java

@@ -22,7 +22,7 @@ public class CityTreeUtil {
         for (CityVO res : list) {
             //判断对象是否为根节点
 
-            if (res.getPid() == parentId) {
+            if (Integer.parseInt(res.getPid()) == parentId) {
                 //该节点为根节点,开始递归
 
                 //通过递归为节点设置childList

+ 2 - 2
fs-user-app/src/main/java/com/fs/app/vo/CityVO.java

@@ -13,11 +13,11 @@ import java.util.List;
 public class CityVO implements Serializable {
     private static final long serialVersionUID = 1L;
 
-    private Long v; //id
+    private String v; //id
 
     private String n; //名称
 
-    private Long pid;
+    private String pid;
 
     private List<CityVO> c; //子集
 }