소스 검색

Merge remote-tracking branch 'origin/master'

吴树波 1 주 전
부모
커밋
cbc37e479b
41개의 변경된 파일313개의 추가작업 그리고 73개의 파일을 삭제
  1. 3 1
      fs-admin/src/main/java/com/fs/his/controller/FsStorePaymentController.java
  2. 30 0
      fs-admin/src/main/java/com/fs/web/controller/system/SysConfigController.java
  3. 1 1
      fs-service/src/main/java/com/fs/course/config/CourseConfig.java
  4. 1 1
      fs-service/src/main/java/com/fs/course/param/newfs/FsUserCourseAddCompanyUserParam.java
  5. 62 28
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  6. 18 0
      fs-service/src/main/java/com/fs/his/service/impl/FsChineseMedicineServiceImpl.java
  7. 17 0
      fs-service/src/main/java/com/fs/his/service/impl/FsDiseaseServiceImpl.java
  8. 18 0
      fs-service/src/main/java/com/fs/his/service/impl/FsFamousPrescribeServiceImpl.java
  9. 18 0
      fs-service/src/main/java/com/fs/his/service/impl/FsMedicatedFoodServiceImpl.java
  10. 5 1
      fs-service/src/main/java/com/fs/his/service/impl/FsStorePaymentServiceImpl.java
  11. 16 0
      fs-service/src/main/java/com/fs/his/service/impl/FsVesselServiceImpl.java
  12. 1 1
      fs-service/src/main/java/com/fs/sop/mapper/SopUserLogsMapper.java
  13. 24 10
      fs-service/src/main/java/com/fs/sop/service/impl/SopUserLogsInfoServiceImpl.java
  14. 3 1
      fs-service/src/main/java/com/fs/statis/service/impl/FsStatisSalerWatchServiceImpl.java
  15. 2 0
      fs-service/src/main/resources/application-dev.yml
  16. 3 1
      fs-service/src/main/resources/application-druid-bjczwh.yml
  17. 2 0
      fs-service/src/main/resources/application-druid-bnkc.yml
  18. 3 1
      fs-service/src/main/resources/application-druid-drk-test.yml
  19. 3 1
      fs-service/src/main/resources/application-druid-drk.yml
  20. 2 0
      fs-service/src/main/resources/application-druid-fby.yml
  21. 2 0
      fs-service/src/main/resources/application-druid-hcl.yml
  22. 3 1
      fs-service/src/main/resources/application-druid-hdt.yml
  23. 2 0
      fs-service/src/main/resources/application-druid-hyt.yml
  24. 3 1
      fs-service/src/main/resources/application-druid-hzyy.yml
  25. 2 0
      fs-service/src/main/resources/application-druid-jnmy.yml
  26. 2 0
      fs-service/src/main/resources/application-druid-jzzx-test.yml
  27. 2 0
      fs-service/src/main/resources/application-druid-jzzx.yml
  28. 2 0
      fs-service/src/main/resources/application-druid-kyt.yml
  29. 2 0
      fs-service/src/main/resources/application-druid-myhk-test.yml
  30. 2 0
      fs-service/src/main/resources/application-druid-myhk.yml
  31. 2 0
      fs-service/src/main/resources/application-druid-qdtst.yml
  32. 2 0
      fs-service/src/main/resources/application-druid-sft.yml
  33. 2 0
      fs-service/src/main/resources/application-druid-sxjz.yml
  34. 2 0
      fs-service/src/main/resources/application-druid-syysy.yml
  35. 3 1
      fs-service/src/main/resources/application-druid-whhm.yml
  36. 2 0
      fs-service/src/main/resources/application-druid-xfk.yml
  37. 3 1
      fs-service/src/main/resources/application-druid-xzt.yml
  38. 2 0
      fs-service/src/main/resources/application-druid-zkzh.yml
  39. 23 0
      fs-user-app/src/main/java/com/fs/app/controller/IndexController.java
  40. 13 21
      fs-user-app/src/main/java/com/fs/app/controller/WxH5MpController.java
  41. 5 1
      fs-user-app/src/main/java/com/fs/app/controller/store/IndexScrmController.java

+ 3 - 1
fs-admin/src/main/java/com/fs/his/controller/FsStorePaymentController.java

@@ -11,6 +11,7 @@ import com.fs.his.param.FsStorePaymentParam;
 import com.fs.his.service.IFsExportTaskService;
 import com.fs.his.vo.FsStorePaymentExcelVO;
 import com.fs.his.vo.FsStorePaymentVO;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -38,6 +39,7 @@ import com.fs.common.core.page.TableDataInfo;
  */
 @RestController
 @RequestMapping("/his/storePayment")
+@Slf4j
 public class FsStorePaymentController extends BaseController
 {
     @Autowired
@@ -131,7 +133,7 @@ public class FsStorePaymentController extends BaseController
     @GetMapping(value = "refund/{paymentId}")
     public R refund(@PathVariable("paymentId") Long paymentId)
     {
-
+        log.info("sysUserId: {} 提交退款", getUserId());
         return fsStorePaymentService.refundFsStorePayment(paymentId);
     }
 

+ 30 - 0
fs-admin/src/main/java/com/fs/web/controller/system/SysConfigController.java

@@ -2,6 +2,9 @@ package com.fs.web.controller.system;
 
 import java.util.List;
 
+import cn.hutool.core.util.ObjectUtil;
+import com.fs.common.core.domain.R;
+import com.fs.common.core.redis.RedisCache;
 import com.fs.common.utils.SecurityUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -36,6 +39,8 @@ public class SysConfigController extends BaseController
 {
     @Autowired
     private ISysConfigService configService;
+    @Autowired
+    public RedisCache redisCache;
 
     /**
      * 获取参数配置列表
@@ -150,4 +155,29 @@ public class SysConfigController extends BaseController
         config.setCreateBy(SecurityUtils.getUsername());
         return toAjax(configService.updateConfig(config));
     }
+
+
+    /**
+     * 启用-关闭小程序销售管理
+     * @param bock
+     * @return
+     */
+    @GetMapping("/updateIsTownOn")
+    public R queryIsTownOn(String bock, String appId)
+    {
+        String key = appId+"start_status_001";
+        String start = redisCache.getCacheObject(key);
+        if (ObjectUtil.isNotEmpty(bock)){
+            if (bock.equals("001")){
+                redisCache.setCacheObject(key,bock);
+                return R.ok("调整成功");
+            }else if (bock.equals("002")){
+                redisCache.setCacheObject(key,bock);
+                return R.ok("调整成功");
+            }
+
+        }
+        return R.ok().put("date",start);
+    }
+
 }

+ 1 - 1
fs-service/src/main/java/com/fs/course/config/CourseConfig.java

@@ -23,7 +23,7 @@ public class CourseConfig implements Serializable {
     private String registerDomainName;//注册域名
     private String courseDomainName;//链接域名
     private String miniprogramAppid;//链接域名
-    private Integer rewardType; // 奖励类型 1红包 2积分
+    private Integer rewardType; // 奖励类型 1红包 2积分 3红包+积分
     private Integer redPacketMode;//红包模式 1总公司 2销售公司
     private BigDecimal moneyPri;//充值手续费百分比
     private BigDecimal redPackageMoney;//充值手续费百分比

+ 1 - 1
fs-service/src/main/java/com/fs/course/param/newfs/FsUserCourseAddCompanyUserParam.java

@@ -33,7 +33,7 @@ public class FsUserCourseAddCompanyUserParam implements Serializable {
     @ApiModelProperty(value = "营期id")
     private Long periodId;
 
-    @NotNull(message = "项目id不能为空")
+//    @NotNull(message = "项目id不能为空")
     @ApiModelProperty(value = "项目ID")
     private Long projectId;
     private Integer isOpenCourse;

+ 62 - 28
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -22,6 +22,7 @@ import com.fs.company.domain.CompanyUser;
 import com.fs.company.mapper.CompanyMapper;
 import com.fs.company.mapper.CompanyMoneyLogsMapper;
 import com.fs.company.mapper.CompanyUserMapper;
+import com.fs.company.service.ICompanyService;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.domain.*;
 import com.fs.course.dto.CoursePackageDTO;
@@ -100,14 +101,16 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
 {
     @Value("${cloud_host.company_name}")
     private String signProjectName;
-
+    @Value("${isNewWxMerchant}")
+    private Boolean isNewWxMerchant;
     private static final Logger logger = LoggerFactory.getLogger(FsUserCourseVideoServiceImpl.class);
 
 
     private static final String miniappRealLink = "/pages_course/video.html?course=";
     private static final String REAL_LINK_PREFIX = "/courseH5/pages/course/learning?course=";
     private static final String SHORT_LINK_PREFIX = "/courseH5/pages/course/learning?s=";
-
+    @Autowired
+    ICompanyService companyService;
     @Autowired
     private CompanyMoneyLogsMapper moneyLogsMapper;
     @Autowired
@@ -922,6 +925,13 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             // 积分奖励
             case 2:
                 return sendIntegralReward(param,user, log, config);
+            // 红包+积分
+            case 3:
+                R sendRed = sendRedPacketReward(param, user, log, video, config);
+                if (!Objects.equals(sendRed.get("code"), 200)) {
+                    return sendRed;
+                }
+                return sendIntegralReward(param,user, log, config);
             default:
                 return R.error("参数错误!");
         }
@@ -981,6 +991,13 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             // 积分奖励
             case 2:
                 return sendIntegralReward(param,user, log, config);
+            // 红包+积分
+            case 3:
+                R sendRed = sendRedPacketReward(param, user, log, video, config);
+                if (!Objects.equals(sendRed.get("code"), 200)) {
+                    return sendRed;
+                }
+                return sendIntegralReward(param,user, log, config);
             default:
                 return R.error("参数错误!");
         }
@@ -1191,21 +1208,25 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
 //            if (company.getCourseMiniAppId()==null){
 //                return R.error("销售公司参数错误,未绑定小程序");
 //            }
-            FsUserWx fsUserWx = fsUserWxService.selectByAppIdAndUserId(param.getAppId(),user.getUserId(),1);
-            if (fsUserWx ==null){
-                if (user.getCourseMaOpenId()==null){
-                    logger.error("zyp \n 【转账openId参数错误】:{}", user.getUserId());
-                    return R.error("openId参数错误");
-                }
-                packetParam.setOpenId(user.getCourseMaOpenId());
-                try {
-                    handleFsUserWx(user,param.getAppId());
-                }catch (Exception e){
-                    logger.error("zyp \n 【更新或插入用户与小程序的绑定关系失败】:{}", user.getUserId(),e);
-                }
-
+            if (user.getMpOpenId()!=null&&!isNewWxMerchant){
+                packetParam.setOpenId(user.getMpOpenId());
             }else {
-                packetParam.setOpenId(fsUserWx.getOpenId());
+                FsUserWx fsUserWx = fsUserWxService.selectByAppIdAndUserId(param.getAppId(),user.getUserId(),1);
+                if (fsUserWx ==null){
+                    if (user.getCourseMaOpenId()==null){
+                        logger.error("zyp \n 【转账openId参数错误】:{}", user.getUserId());
+                        return R.error("openId参数错误");
+                    }
+                    packetParam.setOpenId(user.getCourseMaOpenId());
+                    try {
+                        handleFsUserWx(user,param.getAppId());
+                    }catch (Exception e){
+                        logger.error("zyp \n 【更新或插入用户与小程序的绑定关系失败】:{}", user.getUserId(),e);
+                    }
+
+                }else {
+                    packetParam.setOpenId(fsUserWx.getOpenId());
+                }
             }
         }
         //判断服务号配置是否存在
@@ -1228,6 +1249,11 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         //2025.6.19 红包金额为0的时候
         if (amount.compareTo(BigDecimal.ZERO)>0){
 
+            Company company = companyMapper.selectCompanyById(param.getCompanyId());
+            BigDecimal money = company.getMoney();
+            if (money.compareTo(BigDecimal.ZERO)<0) {
+                return R.error("服务商余额不足,请联系群主服务器充值!");
+            }
             // 发送红包
             R sendRedPacket = paymentService.sendRedPacket(packetParam);
             if (sendRedPacket.get("code").equals(200)) {
@@ -1519,14 +1545,6 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
     public ResponseResult<FsUser> isAddCompanyUser(FsUserCourseAddCompanyUserParam param) {
         logger.info("\n 【进入个微-判断是否添加客服】,入参:{}",param);
 
-        // 生成锁的key,使用用户ID和视频ID组合
-        String lockKey = "submit:lock:" + param.getUserId() + ":" + param.getVideoId();
-        // 尝试获取锁,3秒过期
-        boolean locked = redisCache.setIfAbsent(lockKey, "1", 1, TimeUnit.SECONDS);
-
-        if (!locked) {
-            return ResponseResult.fail(504, "请勿重复提交,请等待3秒后重试");
-        }
         //查询用户
        FsUser fsUser = fsUserMapper.selectFsUserById(param.getUserId());
          if (fsUser == null){
@@ -1565,8 +1583,22 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
         //2、如果只绑定了当前销售,需要添加看课记录(正常流程);
         //3、以上都不是,则标识重粉,需要加入关系表,并打上重粉标签
         FsUserCompanyUser userCompanyUser = userCompanyUserService.selectByUserIdAndProjectId(fsUser.getUserId(), param.getProjectId());
+
+        // 添加逻辑:如果存在fs_user表数据,但是又不存在fs_user_company_user表,则表示是以前企微看课的,需要手动绑定
+        if(Objects.isNull(userCompanyUser) && fsUser.getCompanyUserId() == null && fsUser.getIsAddQw() == 1){
+            userCompanyUserService.bindRelationship(fsUser.getUserId(), param.getProjectId(), param.getCompanyId(), param.getCompanyUserId(), 1);
+        }
+
         if(Objects.isNull(userCompanyUser)) {
-            return ResponseResult.fail(BizResponseEnum.DATA_NOT_EXIST, getCompanyUserQRCode(companyUser));
+            Company company = companyService.selectCompanyById(param.getCompanyId());
+            if((companyUser.getIsAllowedAllRegister() !=null && companyUser.getIsAllowedAllRegister() != 1)){
+                return ResponseResult.fail(504,"当前销售禁止绑定会员,请联系销售!");
+            }
+            if (companyUser.getIsNeedRegisterMember() == null || companyUser.getIsNeedRegisterMember() == 1){
+                return ResponseResult.fail(504,"请联系销售发送邀请链接成为会员!");
+            }
+            int defaultStatus = (company != null ? company.getFsUserIsDefaultBlack() : 0) == 1 ? 0 : 1;
+            userCompanyUser = userCompanyUserService.bindRelationship(param.getUserId(), param.getProjectId(), companyUser.getCompanyId(), companyUser.getUserId(), defaultStatus);
         }
 
         // 逻辑调整:如果会员已经绑定了销售,直接提示,不添加重粉数据了-2025年6月16日14点53分
@@ -1607,9 +1639,11 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             return ResponseResult.fail(504, "请观看最新的课程项目");
         }
         // 项目看课数限制
-        Integer logCount = fsUserCourseMapper.selectTodayCourseWatchLogCountByUserIdAndProjectId(param.getUserId(), param.getProjectId());
-        if (Objects.isNull(watchCourseVideo) && logCount > 0) {
-            return ResponseResult.fail(504, "超过项目看课数量限制");
+        if(!"福本源".equals(signProjectName) && !"宽益堂".equals(signProjectName)) {
+            Integer logCount = fsUserCourseMapper.selectTodayCourseWatchLogCountByUserIdAndProjectId(param.getUserId(), param.getProjectId());
+            if (Objects.isNull(watchCourseVideo) && logCount > 0) {
+                return ResponseResult.fail(504, "超过项目看课数量限制");
+            }
         }
 
         //添加判断:该用户是否已经存在此课程的看课记录,并且看课记录的销售id不是传入的销售id

+ 18 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsChineseMedicineServiceImpl.java

@@ -10,6 +10,8 @@ import com.fs.his.param.FsChineseMedicineListUParam;
 import com.fs.his.vo.FsChineseMedicineListUVO;
 import com.fs.his.vo.FsChineseMedicineListVO;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Caching;
 import org.springframework.stereotype.Service;
 import com.fs.his.mapper.FsChineseMedicineMapper;
 import com.fs.his.domain.FsChineseMedicine;
@@ -58,6 +60,7 @@ public class FsChineseMedicineServiceImpl implements IFsChineseMedicineService
      * @return 结果
      */
     @Override
+    @CacheEvict(value = "getChineseMedicineList",allEntries = true)
     public int insertFsChineseMedicine(FsChineseMedicine fsChineseMedicine)
     {
         return fsChineseMedicineMapper.insertFsChineseMedicine(fsChineseMedicine);
@@ -70,6 +73,10 @@ public class FsChineseMedicineServiceImpl implements IFsChineseMedicineService
      * @return 结果
      */
     @Override
+    @Caching(evict = {
+            @CacheEvict(value = "getChineseMedicineList", allEntries = true),
+            @CacheEvict(value = "getChineseMedicineById", key = "#fsChineseMedicine.id")
+    })
     public int updateFsChineseMedicine(FsChineseMedicine fsChineseMedicine)
     {
         return fsChineseMedicineMapper.updateFsChineseMedicine(fsChineseMedicine);
@@ -82,6 +89,11 @@ public class FsChineseMedicineServiceImpl implements IFsChineseMedicineService
      * @return 结果
      */
     @Override
+    @Caching(evict = {
+            @CacheEvict(value = "getChineseMedicineList", allEntries = true),
+            @CacheEvict(value = "getChineseMedicineById",
+                    key = "#ids")
+    })
     public int deleteFsChineseMedicineByIds(Long[] ids)
     {
         return fsChineseMedicineMapper.deleteFsChineseMedicineByIds(ids);
@@ -94,6 +106,11 @@ public class FsChineseMedicineServiceImpl implements IFsChineseMedicineService
      * @return 结果
      */
     @Override
+    @Caching(evict = {
+            @CacheEvict(value = "getChineseMedicineList", allEntries = true),
+            @CacheEvict(value = "getChineseMedicineById",
+                    key = "id")
+    })
     public int deleteFsChineseMedicineById(Long id)
     {
         return fsChineseMedicineMapper.deleteFsChineseMedicineById(id);
@@ -105,6 +122,7 @@ public class FsChineseMedicineServiceImpl implements IFsChineseMedicineService
     }
 
     @Override
+    @CacheEvict(value = "getChineseMedicineList",allEntries = true)
     public String importData(List<FsChineseMedicine> list) {
         if (com.fs.common.utils.StringUtils.isNull(list) || list.size() == 0)
         {

+ 17 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsDiseaseServiceImpl.java

@@ -9,6 +9,8 @@ import com.fs.his.vo.FsDiseaseListUVO;
 import com.fs.his.vo.FsDiseaseListVO;
 import com.fs.his.vo.FsDiseaseVO;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Caching;
 import org.springframework.stereotype.Service;
 import com.fs.his.mapper.FsDiseaseMapper;
 import com.fs.his.domain.FsDisease;
@@ -57,6 +59,7 @@ public class FsDiseaseServiceImpl implements IFsDiseaseService
      * @return 结果
      */
     @Override
+    @CacheEvict(value = "getDiseaseList",allEntries = true)
     public int insertFsDisease(FsDisease fsDisease)
     {
         FsDisease fsDisease1 = fsDiseaseMapper.selectFsDiseaseBydiseaseCode(fsDisease.getDiseaseCode());
@@ -75,6 +78,10 @@ public class FsDiseaseServiceImpl implements IFsDiseaseService
      * @return 结果
      */
     @Override
+    @Caching(evict = {
+            @CacheEvict(value = "getDiseaseList", allEntries = true),
+            @CacheEvict(value = "getDiseaseById", key = "#fsDisease.diseaseId")
+    })
     public int updateFsDisease(FsDisease fsDisease)
     {
         FsDisease fsDisease1 = fsDiseaseMapper.selectFsDiseaseBydiseaseCode(fsDisease.getDiseaseCode());
@@ -93,6 +100,11 @@ public class FsDiseaseServiceImpl implements IFsDiseaseService
      * @return 结果
      */
     @Override
+    @Caching(evict = {
+            @CacheEvict(value = "getDiseaseList", allEntries = true),
+            @CacheEvict(value = "getDiseaseById",
+                    key = "#diseaseIds")
+    })
     public int deleteFsDiseaseByDiseaseIds(Long[] diseaseIds)
     {
         return fsDiseaseMapper.deleteFsDiseaseByDiseaseIds(diseaseIds);
@@ -105,6 +117,11 @@ public class FsDiseaseServiceImpl implements IFsDiseaseService
      * @return 结果
      */
     @Override
+    @Caching(evict = {
+            @CacheEvict(value = "getDiseaseList", allEntries = true),
+            @CacheEvict(value = "getDiseaseById",
+                    key = "diseaseId")
+    })
     public int deleteFsDiseaseByDiseaseId(Long diseaseId)
     {
         return fsDiseaseMapper.deleteFsDiseaseByDiseaseId(diseaseId);

+ 18 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsFamousPrescribeServiceImpl.java

@@ -11,6 +11,8 @@ import com.fs.his.vo.FsFamousPrescribeExecelVO;
 import com.fs.his.vo.FsFamousPrescribeListUVO;
 import com.fs.his.vo.FsFamousPrescribeListVO;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Caching;
 import org.springframework.stereotype.Service;
 import com.fs.his.mapper.FsFamousPrescribeMapper;
 import com.fs.his.domain.FsFamousPrescribe;
@@ -59,6 +61,7 @@ public class FsFamousPrescribeServiceImpl implements IFsFamousPrescribeService
      * @return 结果
      */
     @Override
+    @CacheEvict(value = "getFamousPrescribeList",allEntries = true)
     public int insertFsFamousPrescribe(FsFamousPrescribe fsFamousPrescribe)
     {
         fsFamousPrescribe.setCreateTime(DateUtils.getNowDate());
@@ -72,6 +75,10 @@ public class FsFamousPrescribeServiceImpl implements IFsFamousPrescribeService
      * @return 结果
      */
     @Override
+    @Caching(evict = {
+            @CacheEvict(value = "getFamousPrescribeList", allEntries = true),
+            @CacheEvict(value = "getFamousPrescribeById", key = "#fsFamousPrescribe.id")
+    })
     public int updateFsFamousPrescribe(FsFamousPrescribe fsFamousPrescribe)
     {
         return fsFamousPrescribeMapper.updateFsFamousPrescribe(fsFamousPrescribe);
@@ -84,6 +91,11 @@ public class FsFamousPrescribeServiceImpl implements IFsFamousPrescribeService
      * @return 结果
      */
     @Override
+    @Caching(evict = {
+            @CacheEvict(value = "getFamousPrescribeList", allEntries = true),
+            @CacheEvict(value = "getFamousPrescribeById",
+                    key = "#ids")
+    })
     public int deleteFsFamousPrescribeByIds(Long[] ids)
     {
         return fsFamousPrescribeMapper.deleteFsFamousPrescribeByIds(ids);
@@ -96,6 +108,11 @@ public class FsFamousPrescribeServiceImpl implements IFsFamousPrescribeService
      * @return 结果
      */
     @Override
+    @Caching(evict = {
+            @CacheEvict(value = "getFamousPrescribeList", allEntries = true),
+            @CacheEvict(value = "getFamousPrescribeById",
+                    key = "#id")
+    })
     public int deleteFsFamousPrescribeById(Long id)
     {
         return fsFamousPrescribeMapper.deleteFsFamousPrescribeById(id);
@@ -107,6 +124,7 @@ public class FsFamousPrescribeServiceImpl implements IFsFamousPrescribeService
     }
 
     @Override
+    @CacheEvict(value = "getFamousPrescribeList",allEntries = true)
     public String importData(List<FsFamousPrescribeExecelVO> list) {
         if (com.fs.common.utils.StringUtils.isNull(list) || list.size() == 0)
         {

+ 18 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsMedicatedFoodServiceImpl.java

@@ -11,6 +11,8 @@ import com.fs.his.domain.FsStoreOrder;
 import com.fs.his.param.FsMedicateFoodListUParam;
 import com.fs.his.vo.*;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Caching;
 import org.springframework.stereotype.Service;
 import com.fs.his.mapper.FsMedicatedFoodMapper;
 import com.fs.his.domain.FsMedicatedFood;
@@ -60,6 +62,7 @@ public class FsMedicatedFoodServiceImpl implements IFsMedicatedFoodService
      * @return 结果
      */
     @Override
+    @CacheEvict(value = "getMedicatedFoodList",allEntries = true)
     public int insertFsMedicatedFood(FsMedicatedFood fsMedicatedFood)
     {
         fsMedicatedFood.setCreateTime(DateUtils.getNowDate());
@@ -73,6 +76,10 @@ public class FsMedicatedFoodServiceImpl implements IFsMedicatedFoodService
      * @return 结果
      */
     @Override
+    @Caching(evict = {
+            @CacheEvict(value = "getMedicatedFoodList", allEntries = true),
+            @CacheEvict(value = "getMedicatedFoodById", key = "#fsMedicatedFood.id")
+    })
     public int updateFsMedicatedFood(FsMedicatedFood fsMedicatedFood)
     {
         return fsMedicatedFoodMapper.updateFsMedicatedFood(fsMedicatedFood);
@@ -84,6 +91,11 @@ public class FsMedicatedFoodServiceImpl implements IFsMedicatedFoodService
      * @param ids 需要删除的药膳食疗主键
      * @return 结果
      */
+    @Caching(evict = {
+            @CacheEvict(value = "getMedicatedFoodList", allEntries = true),
+            @CacheEvict(value = "getMedicatedFoodById",
+                    key = "#ids")
+    })
     @Override
     public int deleteFsMedicatedFoodByIds(Long[] ids)
     {
@@ -97,6 +109,11 @@ public class FsMedicatedFoodServiceImpl implements IFsMedicatedFoodService
      * @return 结果
      */
     @Override
+    @Caching(evict = {
+            @CacheEvict(value = "getMedicatedFoodList", allEntries = true),
+            @CacheEvict(value = "getMedicatedFoodById",
+                    key = "id")
+    })
     public int deleteFsMedicatedFoodById(Long id)
     {
         return fsMedicatedFoodMapper.deleteFsMedicatedFoodById(id);
@@ -108,6 +125,7 @@ public class FsMedicatedFoodServiceImpl implements IFsMedicatedFoodService
     }
     @SuppressWarnings("all")
     @Override
+    @CacheEvict(value = "getChineseMedicineList",allEntries = true)
     public String importDataMedicatedFoodExcel(List<FsMedicatedFood> list, boolean updateSupport) {
         if (com.fs.common.utils.StringUtils.isNull(list) || list.size() == 0)
         {

+ 5 - 1
fs-service/src/main/java/com/fs/his/service/impl/FsStorePaymentServiceImpl.java

@@ -508,7 +508,11 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
         request.setAppid(config.getAppId());
         request.setOpenid(param.getOpenId());
 
-        String code = String.valueOf(IdUtil.getSnowflake(0, 0).nextId());
+        String code =  OrderCodeUtils.getOrderSn();
+        if(StringUtils.isEmpty(code)){
+            return R.error("订单生成失败,请重试");
+        }
+//        String code = String.valueOf(IdUtil.getSnowflake(0, 0).nextId());
         request.setOutBillNo("fsCourse" + code);
 
         Integer amount = WxPayUnifiedOrderRequest.yuanToFen(param.getAmount() != null ? param.getAmount().toString() : "0.1");

+ 16 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsVesselServiceImpl.java

@@ -10,6 +10,8 @@ import com.fs.his.vo.FsVesselListUVO;
 import com.fs.his.vo.FsVesselListVO;
 import com.fs.his.vo.OptionsVO;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Caching;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -57,6 +59,7 @@ public class FsVesselServiceImpl implements IFsVesselService
      * @return 结果
      */
     @Override
+    @CacheEvict(value = "getVesselList",allEntries = true)
     public int insertFsVessel(FsVessel fsVessel)
     {
         fsVessel.setCreateTime(DateUtils.getNowDate());
@@ -70,6 +73,10 @@ public class FsVesselServiceImpl implements IFsVesselService
      * @return 结果
      */
     @Override
+    @Caching(evict = {
+            @CacheEvict(value = "getVesselList", allEntries = true),
+            @CacheEvict(value = "getVesselById", key = "#fsVessel.id")
+    })
     public int updateFsVessel(FsVessel fsVessel)
     {
         return fsVesselMapper.updateFsVessel(fsVessel);
@@ -82,6 +89,10 @@ public class FsVesselServiceImpl implements IFsVesselService
      * @return 结果
      */
     @Override
+    @Caching(evict = {
+            @CacheEvict(value = "getVesselList", allEntries = true),
+            @CacheEvict(value = "getVesselById", key = "#ids")
+    })
     public int deleteFsVesselByIds(Long[] ids)
     {
         return fsVesselMapper.deleteFsVesselByIds(ids);
@@ -93,6 +104,10 @@ public class FsVesselServiceImpl implements IFsVesselService
      * @param id 经络管理主键
      * @return 结果
      */
+    @Caching(evict = {
+            @CacheEvict(value = "getVesselList", allEntries = true),
+            @CacheEvict(value = "getVesselById", key = "id")
+    })
     @Override
     public int deleteFsVesselById(Long id)
     {
@@ -105,6 +120,7 @@ public class FsVesselServiceImpl implements IFsVesselService
     }
 
     @Override
+    @CacheEvict(value = "getVesselList",allEntries = true)
     public String importData(List<FsVessel> list) {
         if (com.fs.common.utils.StringUtils.isNull(list) || list.size() == 0)
         {

+ 1 - 1
fs-service/src/main/java/com/fs/sop/mapper/SopUserLogsMapper.java

@@ -115,7 +115,7 @@ public interface SopUserLogsMapper {
     @Select("<script>" +
             "select li.sop_id,li.external_contact_id,li.qw_user_id,li.corp_id,li.external_id,li.external_user_name,li.fs_user_id,ul.start_time,li.is_days_not_study " +
             "from sop_user_logs ul  " +
-            "left join  sop_user_logs_info li on ul.id=li.user_logs_id " +
+            "INNER join  sop_user_logs_info li on ul.id=li.user_logs_id " +
             "        WHERE ul.id IN\n" +
             "        <foreach collection=\"ids\" item=\"id\" open=\"(\" separator=\",\" close=\")\">\n" +
             "            #{id}\n" +

+ 24 - 10
fs-service/src/main/java/com/fs/sop/service/impl/SopUserLogsInfoServiceImpl.java

@@ -744,9 +744,17 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                 return R.error().put("msg","企业微信用户不存在:"+qwUserId);
             }
 
+            if (qwUser.getCompanyUserId() == null) {
+                return R.error().put("msg","企业微信用户不存在未绑定销售-请绑定后重试:"+qwUser.getQwUserName()+"|"+qwUser.getQwUserId());
+            }
+            if (qwUser.getCompanyId() == null) {
+                return R.error().put("msg","企业微信用户不存在未绑定销售公司-请绑定后重试:"+qwUser.getQwUserName()+"|"+qwUser.getQwUserId());
+            }
+
             String companyUserId = String.valueOf(qwUser.getCompanyUserId()).trim();
             String companyId = String.valueOf(qwUser.getCompanyId()).trim();
 
+
             //域名
 //            String domainName = companyUserMapper.selectDomainByUserId(Long.parseLong(companyUserId));
 //            if (StringUtils.isEmpty(domainName)){
@@ -1028,14 +1036,20 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
                 log.error("员工信息用户不存在:" + key.getKey()+",企业id:"+key.getValue());
             }else {
 
-                List<QwSopLogs> sopLogsList = processInsertSopUserLogsInfo(logs, qwUser, param, words, config, qwCompany, finalSort,
-                        finalSendType,miniMap );
+                if (qwUser.getCompanyUserId()!=null && qwUser.getCompanyId()!=null){
+                    List<QwSopLogs> sopLogsList = processInsertSopUserLogsInfo(logs, qwUser, param, words, config, qwCompany, finalSort,
+                            finalSendType,miniMap );
 
-                //批量插入 发送记录
-                if (!sopLogsList.isEmpty()) {
-                    processAndInsertQwSopLogsBySendMsg(sopLogsList);
+                    //批量插入 发送记录
+                    if (!sopLogsList.isEmpty()) {
+                        processAndInsertQwSopLogsBySendMsg(sopLogsList);
+                    }
+
+                }else {
+                    log.error("员工未绑定销售账号 请先绑定 :" + qwUser.getQwUserName()+",账号id:"+qwUser.getQwUserId());
                 }
 
+
             }
 
         });
@@ -1063,12 +1077,12 @@ public class SopUserLogsInfoServiceImpl implements ISopUserLogsInfoService {
         List<QwSopLogs> sopLogsList=new ArrayList<>();
 
         //域名
-        String domainName = companyUserMapper.selectDomainByUserId(qwUser.getCompanyUserId());
-        if (StringUtils.isEmpty(domainName)){
-            domainName = config.getRealLinkDomainName();
-        }
+//        String domainName = companyUserMapper.selectDomainByUserId(qwUser.getCompanyUserId());
+//        if (StringUtils.isEmpty(domainName)){
+//            domainName = config.getRealLinkDomainName();
+//        }
 
-        String finalDomainName = domainName;
+        String finalDomainName = "domainName";
 
         sopUserLogsInfos.forEach(item->{
 

+ 3 - 1
fs-service/src/main/java/com/fs/statis/service/impl/FsStatisSalerWatchServiceImpl.java

@@ -357,7 +357,9 @@ public class FsStatisSalerWatchServiceImpl implements FsStatisSalerWatchService
 
         // 写入企微重粉数和看课重粉数临时表
         List<FsStatisTempFsuser> tempData = fsStatisSalerWatchMapper.querySopRepeatData(date);
-        fsStatisTempFsuserMapper.insertBatch(tempData);
+        if (tempData != null && !tempData.isEmpty()) {
+            fsStatisTempFsuserMapper.insertBatch(tempData);
+        }
         // 生成企微重粉数和看课重粉数
         fsStatisSalerWatchMapper.generateSopData(date);
         // 清空临时表

+ 2 - 0
fs-service/src/main/resources/application-dev.yml

@@ -162,3 +162,5 @@ token:
 openIM:
     secret: openIM123
     userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 3 - 1
fs-service/src/main/resources/application-druid-bjczwh.yml

@@ -148,4 +148,6 @@ rocketmq:
         secret-key: sk2ff1c6b15b74b888 # 替换为实际的 secretKey
 openIM:
     secret: openIM123
-    userID: imAdmin
+    userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 2 - 0
fs-service/src/main/resources/application-druid-bnkc.yml

@@ -149,3 +149,5 @@ rocketmq:
 openIM:
     secret: openIM123
     userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 3 - 1
fs-service/src/main/resources/application-druid-drk-test.yml

@@ -140,4 +140,6 @@ rocketmq:
         secret-key: sk08a7ea1f9f4b0237 # 替换为实际的 secretKey
 openIM:
     secret: openIM123
-    userID: imAdmin
+    userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 3 - 1
fs-service/src/main/resources/application-druid-drk.yml

@@ -140,4 +140,6 @@ rocketmq:
         secret-key: sk08a7ea1f9f4b0237 # 替换为实际的 secretKey
 openIM:
     secret: openIM123
-    userID: imAdmin
+    userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 2 - 0
fs-service/src/main/resources/application-druid-fby.yml

@@ -166,3 +166,5 @@ token:
 openIM:
     secret: openIM123
     userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 2 - 0
fs-service/src/main/resources/application-druid-hcl.yml

@@ -151,3 +151,5 @@ rocketmq:
 openIM:
     secret: op
     userID: im
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 3 - 1
fs-service/src/main/resources/application-druid-hdt.yml

@@ -152,4 +152,6 @@ rocketmq:
         secret-key: aZS4z!88dNndKTfhITzTpTxRrVUShtH3
 openIM:
     secret: openIM123
-    userID: imAdmin
+    userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 2 - 0
fs-service/src/main/resources/application-druid-hyt.yml

@@ -153,3 +153,5 @@ rocketmq:
 openIM:
     secret:
     userID:
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 3 - 1
fs-service/src/main/resources/application-druid-hzyy.yml

@@ -165,4 +165,6 @@ token:
     expireTime: 180
 openIM:
     secret: openIM123
-    userID: imAdmin
+    userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 2 - 0
fs-service/src/main/resources/application-druid-jnmy.yml

@@ -151,3 +151,5 @@ rocketmq:
 openIM:
     secret: openIM123
     userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 2 - 0
fs-service/src/main/resources/application-druid-jzzx-test.yml

@@ -170,3 +170,5 @@ token:
 openIM:
     secret: openIM123
     userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 2 - 0
fs-service/src/main/resources/application-druid-jzzx.yml

@@ -170,3 +170,5 @@ token:
 openIM:
     secret: openIM123
     userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 2 - 0
fs-service/src/main/resources/application-druid-kyt.yml

@@ -145,3 +145,5 @@ rocketmq:
 openIM:
   secret: op
   userID: im
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 2 - 0
fs-service/src/main/resources/application-druid-myhk-test.yml

@@ -153,3 +153,5 @@ rocketmq:
 openIM:
     secret: openIM123
     userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 2 - 0
fs-service/src/main/resources/application-druid-myhk.yml

@@ -153,3 +153,5 @@ rocketmq:
 openIM:
     secret: openIM123
     userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 2 - 0
fs-service/src/main/resources/application-druid-qdtst.yml

@@ -166,3 +166,5 @@ token:
 openIM:
     secret:
     userID:
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 2 - 0
fs-service/src/main/resources/application-druid-sft.yml

@@ -140,3 +140,5 @@ rocketmq:
 openIM:
     secret: openIM123
     userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 2 - 0
fs-service/src/main/resources/application-druid-sxjz.yml

@@ -164,3 +164,5 @@ token:
 openIM:
     secret: openIM123
     userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 2 - 0
fs-service/src/main/resources/application-druid-syysy.yml

@@ -163,3 +163,5 @@ token:
 openIM:
     secret: openIM123
     userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 3 - 1
fs-service/src/main/resources/application-druid-whhm.yml

@@ -140,4 +140,6 @@ rocketmq:
         secret-key: sk08a7ea1f9f4b0237 # 替换为实际的 secretKey
 openIM:
     secret: openIM123
-    userID: imAdmin
+    userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 2 - 0
fs-service/src/main/resources/application-druid-xfk.yml

@@ -151,3 +151,5 @@ rocketmq:
 openIM:
     secret: o
     userID: i
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 3 - 1
fs-service/src/main/resources/application-druid-xzt.yml

@@ -141,4 +141,6 @@ rocketmq:
         secret-key: sk08a7ea1f9f4b0237 # 替换为实际的 secretKey
 openIM:
     secret: openIM123
-    userID: imAdmin
+    userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true

+ 2 - 0
fs-service/src/main/resources/application-druid-zkzh.yml

@@ -142,3 +142,5 @@ cloud_host:
 openIM:
     secret: openIM123
     userID: imAdmin
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: false

+ 23 - 0
fs-user-app/src/main/java/com/fs/app/controller/IndexController.java

@@ -1,6 +1,7 @@
 package com.fs.app.controller;
 
 
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONUtil;
 import com.fs.app.annotation.Login;
 import com.fs.common.core.domain.R;
@@ -149,5 +150,27 @@ public class IndexController extends AppBaseController {
 		return R.ok().put("data",config);
 	}
 
+	/**
+	 * 启用-关闭小程序销售管理
+	 * @param bock
+	 * @return
+	 */
+	@GetMapping("/queryIsTownOn")
+	public R queryIsTownOn(String bock,String appId)
+	{
+		String key = appId+"start_status_001";
+		String start = redisCache.getCacheObject(key);
+		if (ObjectUtil.isNotEmpty(bock)){
+			if (bock.equals("001")){
+				redisCache.setCacheObject(key,bock);
+				return R.ok("调整成功");
+			}else if (bock.equals("002")){
+				redisCache.setCacheObject(key,bock);
+				return R.ok("调整成功");
+			}
+
+		}
+		return R.ok().put("date",start);
+	}
 
 }

+ 13 - 21
fs-user-app/src/main/java/com/fs/app/controller/WxH5MpController.java

@@ -103,26 +103,22 @@ public class WxH5MpController {
             WxOAuth2UserInfo wxMpUser = wxMpService.getOAuth2Service().getUserInfo(wxMpOAuth2AccessToken, null);
 
 
-            //临时的手动和自动 融合
-            if (param.getProjectId() == null || param.getProjectId() == 0L) {
+            // 处理用户信息
+            FsUser user = processUserInfo(wxMpUser, company,companyUser,param);
+
+            // 检查用户是否已绑定其他销售
+            FsUserCompanyUser userCompanyUser = userCompanyUserService.selectByUserIdAndProjectId(user.getUserId(), param.getProjectId());
+            if (Objects.nonNull(userCompanyUser) && !param.getCompanyUserId().equals(userCompanyUser.getCompanyUserId())){
+                return R.error(500, "该用户("+user.getUserId() + ")已成为其他销售会员");
+            }
 
-                // 处理用户信息
-                FsUser user = processUserInfoByCourseLoginByMp(wxMpUser);
-                // 生成token并返回结果
-                return generateLoginResult(user);
+//            // 处理用户与公司的关系
+//            processUserCompanyRelationship(user, param, companyUser, company);
 
-            }else {
-                // 处理用户信息
-                FsUser user = processUserInfo(wxMpUser, company,companyUser,param);
 
-                // 检查用户是否已绑定其他销售
-                FsUserCompanyUser userCompanyUser = userCompanyUserService.selectByUserIdAndProjectId(user.getUserId(), param.getProjectId());
-                if (Objects.nonNull(userCompanyUser) && !param.getCompanyUserId().equals(userCompanyUser.getCompanyUserId())){
-                    return R.error(500, "该用户("+user.getUserId() + ")已成为其他销售会员");
-                }
 
-                return generateLoginResult(user);
-            }
+            // 生成token并返回结果
+            return generateLoginResult(user);
 
 
         } catch (WxErrorException e) {
@@ -197,11 +193,7 @@ public class WxH5MpController {
             newUser.setCreateTime(new Date());
             newUser.setStatus(company != null && company.getFsUserIsDefaultBlack() == 1 ? 0 : 1);
             userService.insertFsUser(newUser);
-            if((companyUser.getIsAllowedAllRegister() == null || companyUser.getIsAllowedAllRegister() == 1)
-                    && companyUser.getIsNeedRegisterMember() != null && companyUser.getIsNeedRegisterMember() != 1){
-                int defaultStatus = (company != null ? company.getFsUserIsDefaultBlack() : 0) == 1 ? 0 : 1;
-                userCompanyUserService.bindRelationship(newUser.getUserId(), param.getProjectId(), companyUser.getCompanyId(), companyUser.getUserId(), defaultStatus);
-            }
+
             return newUser;
         }
     }

+ 5 - 1
fs-user-app/src/main/java/com/fs/app/controller/store/IndexScrmController.java

@@ -16,6 +16,7 @@ import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -120,7 +121,10 @@ public class IndexScrmController extends AppBaseController {
 		map.setIsDel(0);
 		map.setType(1);
 		List<FsStoreCanvasScrm> canvas=storeCanvasService.selectFsStoreCanvasList(map);
-		return R.ok().put("data", canvas.get(0));
+		if (CollectionUtils.isNotEmpty(canvas)){
+			return R.ok().put("data", canvas.get(0));
+		}
+		return R.ok();
 	}