Browse Source

Merge remote-tracking branch 'origin/ScrmStores' into ScrmStores

# Conflicts:
#	fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductScrmController.java
#	fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreProductScrmMapper.java
#	fs-service/src/main/java/com/fs/hisStore/service/IFsStoreProductScrmService.java
#	fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductScrmServiceImpl.java
zhangqin 3 weeks ago
parent
commit
75f1f6c792
67 changed files with 879 additions and 210 deletions
  1. 29 5
      fs-admin/src/main/java/com/fs/api/controller/IndexStatisticsController.java
  2. 7 0
      fs-admin/src/main/java/com/fs/company/controller/CompanyController.java
  3. 16 0
      fs-admin/src/main/java/com/fs/company/controller/CompanyMoneyLogsController.java
  4. 21 6
      fs-admin/src/main/java/com/fs/company/controller/CompanyTrafficController.java
  5. 19 0
      fs-admin/src/main/java/com/fs/company/controller/CompanyTrafficLogController.java
  6. 1 1
      fs-admin/src/main/java/com/fs/course/controller/FsCoursePlaySourceConfigController.java
  7. 7 0
      fs-admin/src/main/java/com/fs/his/controller/FsCompanyController.java
  8. 11 0
      fs-admin/src/main/java/com/fs/his/controller/FsCompanyDeductController.java
  9. 40 0
      fs-admin/src/main/java/com/fs/his/controller/FsCompanyRechargeController.java
  10. 10 0
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductScrmController.java
  11. 5 4
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreRecommendScrmController.java
  12. 17 0
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreScrmController.java
  13. 0 6
      fs-admin/src/main/java/com/fs/web/controller/system/SysLoginController.java
  14. 37 0
      fs-qw-task/src/main/java/com/fs/app/controller/CommonController.java
  15. 48 29
      fs-qw-task/src/main/java/com/fs/app/task/qwTask.java
  16. 2 1
      fs-qw-task/src/main/resources/application.yml
  17. 6 0
      fs-service/src/main/java/com/fs/company/domain/Company.java
  18. 2 1
      fs-service/src/main/java/com/fs/company/domain/CompanyTrafficRecordLog.java
  19. 3 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyDeductMapper.java
  20. 3 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyMoneyLogsMapper.java
  21. 3 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyRechargeMapper.java
  22. 4 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyTrafficRecordLogMapper.java
  23. 9 8
      fs-service/src/main/java/com/fs/company/mapper/CompanyTrafficRecordMapper.java
  24. 3 0
      fs-service/src/main/java/com/fs/company/param/CompanyMoneyLogsParam.java
  25. 5 0
      fs-service/src/main/java/com/fs/company/param/CompanyTrafficRecordChargeParam.java
  26. 1 0
      fs-service/src/main/java/com/fs/company/param/CompanyTrafficRecordLogQueryParam.java
  27. 1 0
      fs-service/src/main/java/com/fs/company/param/CompanyTrafficRecordQueryParam.java
  28. 2 0
      fs-service/src/main/java/com/fs/company/service/ICompanyService.java
  29. 73 3
      fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java
  30. 9 8
      fs-service/src/main/java/com/fs/company/service/impl/CompanyTrafficRecordLogServiceImpl.java
  31. 78 35
      fs-service/src/main/java/com/fs/company/service/impl/CompanyTrafficRecordServiceImpl.java
  32. 1 0
      fs-service/src/main/java/com/fs/company/vo/CompanyDeductVO.java
  33. 1 0
      fs-service/src/main/java/com/fs/company/vo/CompanyRechargeVO.java
  34. 1 0
      fs-service/src/main/java/com/fs/course/config/CourseConfig.java
  35. 3 0
      fs-service/src/main/java/com/fs/course/mapper/FsCourseRedPacketLogMapper.java
  36. 1 3
      fs-service/src/main/java/com/fs/course/mapper/FsCourseTrafficLogMapper.java
  37. 1 0
      fs-service/src/main/java/com/fs/course/param/FsCoursePlaySourceConfigCreateParam.java
  38. 1 0
      fs-service/src/main/java/com/fs/course/param/FsCoursePlaySourceConfigEditParam.java
  39. 4 6
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java
  40. 1 0
      fs-service/src/main/java/com/fs/course/vo/FsCoursePlaySourceConfigVO.java
  41. 2 19
      fs-service/src/main/java/com/fs/hisStore/config/MedicalMallConfig.java
  42. 1 1
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreCartScrmMapper.java
  43. 11 0
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreProductScrmMapper.java
  44. 4 2
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreRecommendScrmMapper.java
  45. 14 0
      fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreScrmMapper.java
  46. 2 0
      fs-service/src/main/java/com/fs/hisStore/service/IFsStoreProductScrmService.java
  47. 4 2
      fs-service/src/main/java/com/fs/hisStore/service/IFsStoreRecommendScrmService.java
  48. 5 0
      fs-service/src/main/java/com/fs/hisStore/service/IFsStoreScrmService.java
  49. 6 2
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreCartScrmServiceImpl.java
  50. 7 2
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductAttrValueScrmServiceImpl.java
  51. 114 10
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductScrmServiceImpl.java
  52. 42 8
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreScrmServiceImpl.java
  53. 3 2
      fs-service/src/main/java/com/fs/hisStore/service/impl/IFsStoreRecommendScrmServiceImpl.java
  54. 51 0
      fs-service/src/main/java/com/fs/hisStore/vo/FsStoreRecommendScrmVo.java
  55. 1 1
      fs-service/src/main/java/com/fs/sop/mapper/SopUserLogsMapper.java
  56. 3 0
      fs-service/src/main/java/com/fs/system/domain/SysDeptConfig.java
  57. 2 0
      fs-service/src/main/java/com/fs/system/domain/SysDeptConfigLog.java
  58. 3 0
      fs-service/src/main/java/com/fs/system/service/ISysDeptConfigService.java
  59. 21 6
      fs-service/src/main/java/com/fs/system/service/impl/SysDeptConfigServiceImpl.java
  60. 2 2
      fs-service/src/main/resources/application-config-druid-jnlzjk.yml
  61. 6 16
      fs-service/src/main/resources/application-dev-yjb.yml
  62. 37 0
      fs-service/src/main/resources/mapper/company/CompanyTrafficRecordLogMapper.xml
  63. 4 0
      fs-service/src/main/resources/mapper/course/FsCourseRedPacketLogMapper.xml
  64. 10 0
      fs-service/src/main/resources/mapper/course/FsCourseTrafficLogMapper.xml
  65. 1 1
      fs-service/src/main/resources/mapper/course/FsUserCourseVideoMapper.xml
  66. 34 18
      fs-service/src/main/resources/mapper/hisStore/FsStoreRecommendScrmMapper.xml
  67. 3 2
      fs-user-app/src/main/java/com/fs/app/controller/store/StoreRecommendScrmController.java

+ 29 - 5
fs-admin/src/main/java/com/fs/api/controller/IndexStatisticsController.java

@@ -1,5 +1,6 @@
 package com.fs.api.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.entity.SysDept;
 import com.fs.common.core.redis.RedisCache;
@@ -51,9 +52,6 @@ public class IndexStatisticsController {
 
     @Autowired
     private ICompanyService companyService;
-
-    @Autowired
-    private MedicalMallConfig medicalMallConfig;
     /**
      * 分析概览
      */
@@ -70,7 +68,9 @@ public class IndexStatisticsController {
         if(userType == null) {
             userType = 0;
         }
-        if(medicalMallConfig.isStatics()|| (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
+        SysConfig config = sysConfigService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
+        if(!medicalMallConfig.isStatics()|| (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
             analysisPreviewDTO = redisCache.getCacheObject(String.format("%s:%d:%d",DATA_OVERVIEW_DEALER_ANALYSISPREVIEW,type,userType));
         }else if(param.getCompanyId() != null){
             analysisPreviewDTO = redisCache.getCacheObject(String.format("%s:%d:%d:%d",DATA_OVERVIEW_DEALER_ANALYSISPREVIEW,type,userType,param.getCompanyId()));
@@ -144,7 +144,9 @@ public class IndexStatisticsController {
     @GetMapping("/rechargeComsumption")
     public R rechargeComsumption(StatisticsDeptCompanyParam param){
         ConsumptionBalanceDataDTO consumptionBalanceDataDTO = new ConsumptionBalanceDataDTO();
-        if(medicalMallConfig.isStatics() || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)) {
+        SysConfig config = sysConfigService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
+        if(!medicalMallConfig.isStatics() || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)) {
             consumptionBalanceDataDTO = redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_BALANCE);
         }else if(param.getCompanyId() != null){
             consumptionBalanceDataDTO = redisCache.getCacheObject(String.format("%s:%d",DATA_OVERVIEW_DEALER_BALANCE,param.getCompanyId()));
@@ -179,6 +181,8 @@ public class IndexStatisticsController {
     @GetMapping("/trafficLog")
     public R getTrafficLog(StatisticsDeptCompanyParam  param){
         TrafficLogDTO result = new TrafficLogDTO();
+        SysConfig config = sysConfigService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         if(!medicalMallConfig.isStatics() || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)) {
             result = redisCache.getCacheObject(DATA_OVERVIEW_TRAFFIC_LOG);
             if (!medicalMallConfig.isStatics()) {
@@ -246,6 +250,8 @@ public class IndexStatisticsController {
             userType = 0;
         }
         List<WatchEndPlayTrendDTO> watchEndPlayTrendDTOS;
+        SysConfig config = sysConfigService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         // 参考watchCourseTopTen方法的处理逻辑
         if (!medicalMallConfig.isStatics() || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
             String key = String.format("%s:%d:%d", DATA_OVERVIEW_DEALER_CHARTS, type,userType);
@@ -330,6 +336,8 @@ public class IndexStatisticsController {
             userType = 0;
         }
         List<DeaMemberTopTenDTO> deaMemberTopTenDTOS = new ArrayList<>();
+        SysConfig config = sysConfigService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         // 参考deaMemberTopTen方法处理逻辑
         if (!medicalMallConfig.isStatics() || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
             String key = String.format("%s:%d:%d:%d", CHARTS_MEMBER_TOP_TEN_WATCH, type, statisticalType,userType);
@@ -387,6 +395,8 @@ public class IndexStatisticsController {
         Integer dataType = param.getDataType();
         Integer userType = param.getUserType();
         List<RewardMoneyTopTenDTO> rewardMoneyTopTenDTOS = new ArrayList<>();
+        SysConfig config = sysConfigService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         // 参考rewardMoneyTopTen方法处理逻辑
         if(!medicalMallConfig.isStatics() || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
             String key = String.format("%s:%d:%d:%d", CHARTS_REWARD_MONEY_TOP_TEN, type,dataType,userType);
@@ -441,6 +451,8 @@ public class IndexStatisticsController {
         Integer type = param.getType();
         Integer userType = param.getUserType();
         List<RewardMoneyTrendDTO> rewardMoneyTrendDTOS = new ArrayList<>();
+        SysConfig config = sysConfigService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         // 参考rewardMoneyTrend方法处理逻辑
         if(!medicalMallConfig.isStatics() || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
             String key = String.format("%s:%d:%d", CHARTS_REWARD_MONEY_TREND, type,userType);
@@ -494,6 +506,8 @@ public class IndexStatisticsController {
         Integer statisticalType = param.getStatisticalType();
         Integer userType = param.getUserType();
         List<CourseStatsDTO> courseStatsDTOS;
+        SysConfig config = sysConfigService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         if (!medicalMallConfig.isStatics() || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
             courseStatsDTOS = redisCache.getCacheObject(String.format("%s:%d:%d:%d:%s", CHARTS_WATCH_TOP_TEN, type,statisticalType,userType,sort));
         }else if(param.getCompanyId() != null){
@@ -611,6 +625,8 @@ public class IndexStatisticsController {
     @GetMapping("/dealerAggregated")
     public R dealerAggregated(StatisticsDeptCompanyParam param){
         DealerAggregatedDTO result = new DealerAggregatedDTO();
+        SysConfig config = sysConfigService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         if (!medicalMallConfig.isStatics() || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)) {
             result = redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_AGGREGATED);
         }else if (param.getCompanyId() != null) {
@@ -666,6 +682,8 @@ public class IndexStatisticsController {
      */
     @GetMapping("/smsBalance")
     public R smsBalance(StatisticsDeptCompanyParam param){
+        SysConfig config = sysConfigService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         if (!medicalMallConfig.isStatics() || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
             return R.ok().put("data", redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_SMS_BALANCE));
         }else if(param.getCompanyId() != null){
@@ -692,6 +710,8 @@ public class IndexStatisticsController {
     @GetMapping("/authorizationInfo")
     public R authorizationInfo(StatisticsDeptCompanyParam  param){
         AuthorizationInfoDTO authorizationInfoDTO = new AuthorizationInfoDTO();
+        SysConfig config = sysConfigService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         if (!medicalMallConfig.isStatics() || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
             return R.ok().put("data", redisCache.getCacheObject(StatisticsRedisConstant.DATA_OVERVIEW_DEALER_AUTHORIZATION_INFO));
         }else if(param.getCompanyId() != null){
@@ -728,6 +748,8 @@ public class IndexStatisticsController {
      */
     @GetMapping("/thisMonthOrderCount")
     public R thisMonthOrderCount(StatisticsDeptCompanyParam  param){
+        SysConfig config = sysConfigService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         if (!medicalMallConfig.isStatics() || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
             return redisCache.getCacheObject(StatisticsRedisConstant.THIS_MONTH_ORDER_COUNT);
         }else if(param.getCompanyId() != null){
@@ -759,6 +781,8 @@ public class IndexStatisticsController {
 
     @GetMapping("/thisMonthRecvCount")
     public R thisMonthRecvCount(StatisticsDeptCompanyParam  param){
+        SysConfig config = sysConfigService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         if (!medicalMallConfig.isStatics() || (param.getCompanyId() == null && param.getDeptId() == null) || (param.getCompanyId() == null && param.getDeptId() == 1)){
             return redisCache.getCacheObject(StatisticsRedisConstant.THIS_MONTH_RECV_COUNT);
         }else if(param.getCompanyId() != null){

+ 7 - 0
fs-admin/src/main/java/com/fs/company/controller/CompanyController.java

@@ -119,6 +119,9 @@ public class CompanyController extends BaseController
         if(company.getDeptId() != null){
             company.setDeptId(loginUser.getDeptId());
         }
+        company.setCreateBy(loginUser.getUsername());
+        company.setOldDeptId(loginUser.getDeptId());
+        company.setAdmin(loginUser.isAdmin());
         company.setPassword(SecurityUtils.encryptPassword(company.getPassword()));
         company.setAppId(Md5Utils.hash(company.getUserName()));
         company.setAppKey(Md5Utils.hash(company.getPassword()));
@@ -134,6 +137,9 @@ public class CompanyController extends BaseController
     @PutMapping
     public AjaxResult edit(@RequestBody Company company)
     {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        company.setOldDeptId(loginUser.getDeptId());
+        company.setAdmin(loginUser.isAdmin());
         CompanyUser companyUser = new CompanyUser();
         if (company.getStatus()==0){
             companyUser.setStatus("1");
@@ -154,6 +160,7 @@ public class CompanyController extends BaseController
             }
         }
         company.setUpdateMiniApp(true);
+        company.setPageUpdate(true);
         return toAjax(companyService.updateCompany(company));
     }
 

+ 16 - 0
fs-admin/src/main/java/com/fs/company/controller/CompanyMoneyLogsController.java

@@ -1,12 +1,15 @@
 package com.fs.company.controller;
 
+import cn.hutool.json.JSONUtil;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.model.LoginUser;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.ParseUtils;
 import com.fs.common.utils.SecurityUtils;
+import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.domain.Company;
@@ -22,6 +25,8 @@ import com.fs.company.vo.CompanyMoneyLogsExport1VO;
 import com.fs.company.vo.CompanyMoneyLogsExport2VO;
 import com.fs.company.vo.CompanyMoneyLogsExportVO;
 import com.fs.company.vo.CompanyMoneyLogsVO;
+import com.fs.course.config.CourseConfig;
+import com.fs.framework.web.service.TokenService;
 import com.fs.his.domain.FsExportTask;
 import com.fs.his.domain.FsInquiryOrder;
 import com.fs.his.domain.FsStoreOrder;
@@ -32,6 +37,7 @@ import com.fs.his.service.IFsInquiryOrderService;
 import com.fs.his.service.IFsStoreOrderService;
 import com.fs.his.service.IFsStorePaymentService;
 import com.fs.his.vo.FsStoreOrderExportVO;
+import com.fs.system.service.ISysConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -59,6 +65,10 @@ public class CompanyMoneyLogsController extends BaseController
 
     @Autowired
     private IFsExportTaskService exportTaskService;
+    @Autowired
+    private TokenService tokenService;
+    @Autowired
+    private ISysConfigService configService;
 
     /**
      * 查询企业账户记录列表
@@ -68,6 +78,12 @@ public class CompanyMoneyLogsController extends BaseController
     public TableDataInfo list(CompanyMoneyLogsParam companyMoneyLogs)
     {
         startPage();
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        String json = configService.selectConfigByKey("course.config");
+        CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
+        if(!loginUser.isAdmin() && config.getIsBound() != null && config.getIsBound()){
+            companyMoneyLogs.setDeptId(loginUser.getDeptId());
+        }
         if(!StringUtils.isEmpty(companyMoneyLogs.getCreateTimeRange())){
             companyMoneyLogs.setCreateTimeList(companyMoneyLogs.getCreateTimeRange().split("--"));
         }

+ 21 - 6
fs-admin/src/main/java/com/fs/company/controller/CompanyTrafficController.java

@@ -1,5 +1,7 @@
 package com.fs.company.controller;
 
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.R;
@@ -11,8 +13,11 @@ import com.fs.company.domain.CompanyTrafficRecord;
 import com.fs.company.param.CompanyTrafficRecordChargeParam;
 import com.fs.company.param.CompanyTrafficRecordQueryParam;
 import com.fs.company.service.ICompanyTrafficRecordService;
+import com.fs.course.config.CourseConfig;
 import com.fs.framework.web.service.TokenService;
 import com.fs.hisStore.config.MedicalMallConfig;
+import com.fs.system.domain.SysConfig;
+import com.fs.system.service.ISysConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -32,22 +37,24 @@ public class CompanyTrafficController extends BaseController {
     private TokenService tokenService;
 
     @Autowired
-    private MedicalMallConfig medicalMallConfig;
+    private ISysConfigService configService;
 
     /**
      * 每天扣除流量余额
      * */
-    @Scheduled(cron = "0 1 0 * * ?")
-    public void refreshTraffic(){
-        if(medicalMallConfig.isStatics())
-            companyTrafficRecordService.refreshTraffic();
-    }
+//    @Scheduled(cron = "0 1 0 * * ?")
+//    public void refreshTraffic(){
+//        if(medicalMallConfig.isStatics())
+//            companyTrafficRecordService.refreshTraffic();
+//    }
 
     /**
      * 重启时重新计算并更新公司缓存
      * */
     @PostConstruct
     public void init() {
+        SysConfig config = configService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         if(medicalMallConfig.isStatics())
             companyTrafficRecordService.init();
     }
@@ -60,6 +67,8 @@ public class CompanyTrafficController extends BaseController {
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         companyTrafficRecord.setUserId(loginUser.getUser().getUserId());
         companyTrafficRecord.setUserName(loginUser.getUser().getUserName());
+        companyTrafficRecord.setDeptId(loginUser.getUser().getDeptId());
+        companyTrafficRecord.setIsAdmin(loginUser.isAdmin());
         companyTrafficRecordService.recharge(companyTrafficRecord);
         return R.ok();
     }
@@ -69,6 +78,12 @@ public class CompanyTrafficController extends BaseController {
     @GetMapping(value = "/list")
     public TableDataInfo list(CompanyTrafficRecordQueryParam param) {
         startPage();
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        String json = configService.selectConfigByKey("course.config");
+        CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
+        if(!loginUser.isAdmin() && config.getIsBound() != null && config.getIsBound()){
+            param.setDeptId(loginUser.getDeptId());
+        }
         List<CompanyTrafficRecord> list = companyTrafficRecordService.selectList(param);
         return getDataTable(list);
     }

+ 19 - 0
fs-admin/src/main/java/com/fs/company/controller/CompanyTrafficLogController.java

@@ -1,15 +1,21 @@
 package com.fs.company.controller;
 
+import cn.hutool.json.JSONUtil;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.R;
+import com.fs.common.core.domain.model.LoginUser;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.domain.CompanyTrafficRecordLog;
 import com.fs.company.param.CompanyTrafficRecordLogQueryParam;
 import com.fs.company.service.ICompanyTrafficRecordLogService;
+import com.fs.course.config.CourseConfig;
+import com.fs.framework.web.service.TokenService;
+import com.fs.system.service.ISysConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -23,12 +29,25 @@ public class CompanyTrafficLogController extends BaseController {
     @Autowired
     private ICompanyTrafficRecordLogService companyTrafficRecordLogService;
 
+    @Autowired
+    private TokenService tokenService;
+
+
+    @Autowired
+    private ISysConfigService configService;
+
 
     /** 流量充值记录查询 */
     @PreAuthorize("@ss.hasPermi('company:trafficLog:list')")
     @GetMapping(value = "/list")
     public TableDataInfo list(CompanyTrafficRecordLogQueryParam param) {
         startPage();
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        String json = configService.selectConfigByKey("course.config");
+        CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
+        if(!loginUser.isAdmin() && config.getIsBound() != null && config.getIsBound()){
+            param.setDeptId(loginUser.getDeptId());
+        }
         List<CompanyTrafficRecordLog> list = companyTrafficRecordLogService.selectList(param);
         return getDataTable(list);
     }

+ 1 - 1
fs-admin/src/main/java/com/fs/course/controller/FsCoursePlaySourceConfigController.java

@@ -147,7 +147,7 @@ public class FsCoursePlaySourceConfigController extends BaseController {
         CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
         QueryWrapper<FsCoursePlaySourceConfig> queryWrapper = new QueryWrapper<FsCoursePlaySourceConfig>().eq("is_del", 0);
         if(!loginUser.isAdmin() && config.getIsBound() != null && config.getIsBound()){
-            queryWrapper.eq("create_user_id", loginUser.getUserId()).eq(config.getDept() == null || !config.getDept(), "create_dept_id", loginUser.getDeptId());
+            queryWrapper.eq(config.getDept() == null || !config.getDept(),"create_user_id", loginUser.getUserId()).eq( "create_dept_id", loginUser.getDeptId());
         }
         if(companyId != null){
             queryWrapper.and(e -> e.eq("company_id", companyId).or().isNull("company_id"));

+ 7 - 0
fs-admin/src/main/java/com/fs/his/controller/FsCompanyController.java

@@ -155,6 +155,9 @@ public class FsCompanyController extends BaseController
         if(!loginUser.isAdmin() && config.getIsBound() != null && config.getIsBound()){
             company.setDeptId(loginUser.getDeptId());
         }
+        company.setAdmin(loginUser.isAdmin());
+        company.setOldDeptId(loginUser.getDeptId());
+        company.setCreateBy(loginUser.getUsername());
         return companyService.insertCompany(company);
     }
 
@@ -166,8 +169,12 @@ public class FsCompanyController extends BaseController
     @PutMapping
     public AjaxResult edit(@RequestBody Company company)
     {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        company.setOldDeptId(loginUser.getDeptId());
         company.setMoney(null);
         company.setUpdateMiniApp(true);
+        company.setPageUpdate(true);
+        company.setAdmin(loginUser.isAdmin());
         return toAjax(companyService.updateCompany(company));
     }
 

+ 11 - 0
fs-admin/src/main/java/com/fs/his/controller/FsCompanyDeductController.java

@@ -4,6 +4,7 @@ import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
+import cn.hutool.json.JSONUtil;
 import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.model.LoginUser;
@@ -16,7 +17,9 @@ import com.fs.company.service.ICompanyDeductService;
 import com.fs.company.service.ICompanyMoneyLogsService;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.vo.CompanyDeductVO;
+import com.fs.course.config.CourseConfig;
 import com.fs.framework.web.service.TokenService;
+import com.fs.system.service.ISysConfigService;
 import lombok.Synchronized;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -52,6 +55,8 @@ public class FsCompanyDeductController extends BaseController
     @Autowired
     private ICompanyService companyService;
     @Autowired
+    private ISysConfigService configService;
+    @Autowired
     private ICompanyMoneyLogsService moneyLogsService;
 
     /**
@@ -62,6 +67,12 @@ public class FsCompanyDeductController extends BaseController
     public TableDataInfo list(CompanyDeductVO companyDeduct)
     {
         startPage();
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        String json = configService.selectConfigByKey("course.config");
+        CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
+        if(!loginUser.isAdmin() && config.getIsBound() != null && config.getIsBound()){
+            companyDeduct.setDeptId(loginUser.getDeptId());
+        }
         List<CompanyDeductVO> list = companyDeductService.selectCompanyDeductListVO(companyDeduct);
 
         return getDataTable(list);

+ 40 - 0
fs-admin/src/main/java/com/fs/his/controller/FsCompanyRechargeController.java

@@ -1,10 +1,14 @@
 package com.fs.his.controller;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.model.LoginUser;
+import com.fs.common.exception.base.BaseException;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.domain.Company;
@@ -14,7 +18,14 @@ import com.fs.company.service.ICompanyMoneyLogsService;
 import com.fs.company.service.ICompanyRechargeService;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.vo.CompanyRechargeVO;
+import com.fs.course.config.CourseConfig;
 import com.fs.framework.web.service.TokenService;
+import com.fs.system.domain.SysConfig;
+import com.fs.system.domain.SysDeptConfig;
+import com.fs.system.mapper.SysConfigMapper;
+import com.fs.system.service.ISysConfigService;
+import com.fs.system.service.ISysDeptConfigLogService;
+import com.fs.system.service.ISysDeptConfigService;
 import lombok.Synchronized;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -51,6 +62,14 @@ public class FsCompanyRechargeController extends BaseController
     private ICompanyService companyService;
     @Autowired
     private ICompanyMoneyLogsService moneyLogsService;
+    @Autowired
+    private ISysConfigService configService;
+    @Autowired
+    private SysConfigMapper sysConfigMapper;
+    @Autowired
+    private ISysDeptConfigService sysDeptConfigService;
+    @Autowired
+    private ISysDeptConfigLogService sysDeptConfigLogService;
 
     /**
      * 查询充值管理列表
@@ -60,6 +79,12 @@ public class FsCompanyRechargeController extends BaseController
     public TableDataInfo list(CompanyRechargeVO companyRecharge)
     {
         startPage();
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        String json = configService.selectConfigByKey("course.config");
+        CourseConfig config = JSONUtil.toBean(json, CourseConfig.class);
+        if(!loginUser.isAdmin() && config.getIsBound() != null && config.getIsBound()){
+            companyRecharge.setDeptId(loginUser.getDeptId());
+        }
         List<CompanyRechargeVO> list = companyRechargeService.selectCompanyRechargeListVO(companyRecharge);
         return getDataTable(list);
     }
@@ -152,6 +177,21 @@ public class FsCompanyRechargeController extends BaseController
             moneyLogsService.insertCompanyMoneyLogs(log);
             companyRecharge.setPayTime(new Date());
             companyRecharge.setStatus(1);
+            SysConfig courseConfig = sysConfigMapper.selectConfigByConfigKey("course.config");
+            CourseConfig config = JSON.parseObject(courseConfig.getConfigValue(), CourseConfig.class);
+            if(config.getDeptLimit() != null && config.getDeptLimit() && !loginUser.isAdmin()){
+                SysDeptConfig deptConfig = sysDeptConfigService.getDeptConfig(loginUser.getDeptId());
+                BigDecimal redPackage = deptConfig.getRedPackage();
+                BigDecimal nowMoney = redPackage.subtract(param.getMoney());
+                if(nowMoney.doubleValue() < 0){
+                    throw new BaseException("部门可用红包金额不足无法分配,请联系管理员充值");
+                }
+                deptConfig.setRedPackage(nowMoney);
+                deptConfig.setUpdateBy(loginUser.getUsername());
+                deptConfig.setUpdateTime(new Date());
+                sysDeptConfigLogService.addLog(deptConfig.getDeptId(), 2, 1, param.getMoney().toString(), redPackage.toString(), nowMoney.toString(), loginUser.getUsername(), "充值公司红包");
+                sysDeptConfigService.updateById(deptConfig);
+            }
         }
 
         companyRecharge.setAuditTime(new Date());

+ 10 - 0
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductScrmController.java

@@ -37,6 +37,7 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.http.HttpServletRequest;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 商品Controller
@@ -216,6 +217,15 @@ public class FsStoreProductScrmController extends BaseController
         return R.ok().put("data",list);
     }
 
+    /**
+     * 获取店铺商品表字段
+     * */
+    @GetMapping("/getStoreProductColumns")
+    public R getStoreProductColumns() {
+        List<Map<String, String>> list = fsStoreProductService.getStoreProductColumns();
+        return R.ok().put("data", list);
+    }
+
 
     /**
      * 同步商品到580商城

+ 5 - 4
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreRecommendScrmController.java

@@ -8,6 +8,7 @@ import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.hisStore.domain.FsStoreRecommendScrm;
 import com.fs.hisStore.service.IFsStoreRecommendScrmService;
+import com.fs.hisStore.vo.FsStoreRecommendScrmVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -35,7 +36,7 @@ public class FsStoreRecommendScrmController extends BaseController
     public TableDataInfo list(FsStoreRecommendScrm fsStoreRecommendScrm)
     {
         startPage();
-        List<FsStoreRecommendScrm> list = fsStoreRecommendService.selectFsStoreRecommendScrmList(fsStoreRecommendScrm);
+        List<FsStoreRecommendScrmVo> list = fsStoreRecommendService.selectFsStoreRecommendScrmList(fsStoreRecommendScrm);
         return getDataTable(list);
     }
 
@@ -89,7 +90,7 @@ public class FsStoreRecommendScrmController extends BaseController
     public TableDataInfo validList(FsStoreRecommendScrm fsStoreRecommendScrm)
     {
         startPage();
-        List<FsStoreRecommendScrm> list = fsStoreRecommendService.selectValidRecommendList(fsStoreRecommendScrm);
+        List<FsStoreRecommendScrmVo> list = fsStoreRecommendService.selectValidRecommendList(fsStoreRecommendScrm);
         return getDataTable(list);
     }
 
@@ -101,8 +102,8 @@ public class FsStoreRecommendScrmController extends BaseController
     @GetMapping("/export")
     public AjaxResult export(FsStoreRecommendScrm fsStoreRecommendScrm)
         {
-        List<FsStoreRecommendScrm> list = fsStoreRecommendService.selectFsStoreRecommendScrmList(fsStoreRecommendScrm);
-        ExcelUtil<FsStoreRecommendScrm> util = new ExcelUtil<>(FsStoreRecommendScrm.class);
+        List<FsStoreRecommendScrmVo> list = fsStoreRecommendService.selectFsStoreRecommendScrmList(fsStoreRecommendScrm);
+        ExcelUtil<FsStoreRecommendScrmVo> util = new ExcelUtil<>(FsStoreRecommendScrmVo.class);
         return util.exportExcel(list, "店铺推荐数据");
     }
 }

+ 17 - 0
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreScrmController.java

@@ -17,6 +17,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 店铺管理Controller
@@ -49,6 +50,13 @@ public class FsStoreScrmController extends BaseController
         return getDataTable(list);
     }
 
+    @GetMapping("/listOption")
+    public R listOption(FsStoreScrm fsStore)
+    {
+        List<FsStoreScrm> list = fsStoreService.selectFsStoreListOption(fsStore);
+        return R.ok().put("data", list);
+    }
+
     /**
      * 导出店铺管理列表
      */
@@ -148,4 +156,13 @@ public class FsStoreScrmController extends BaseController
     public R auditLog(@PathVariable Long storeId){
         return R.ok().put("auditLog",storeAuditLogUtil.selectOperLogByMainId(storeId));
     }
+
+    /**
+     * 获取店铺商品表字段
+     * */
+    @GetMapping("/getStoreColumns")
+    public R getStoreProductColumns() {
+        List<Map<String, String>> list = fsStoreService.getStoreColumns();
+        return R.ok().put("data", list);
+    }
 }

+ 0 - 6
fs-admin/src/main/java/com/fs/web/controller/system/SysLoginController.java

@@ -51,9 +51,6 @@ public class SysLoginController
     @Autowired
     private ConfigUtil configUtil;
 
-    @Autowired
-    private MedicalMallConfig medicalMallConfig;
-
     /**
      * 登录方法
      *
@@ -90,9 +87,6 @@ public class SysLoginController
         //药品商城参数
         AjaxResult ajax = AjaxResult.success();
 
-        if(medicalMallConfig!=null){
-            ajax.put("medicalMallConfig", medicalMallConfig);
-        }
         ajax.put("user", user);
         Integer isAdmin = 0;
         if (permissions.contains("*:*:*")){

+ 37 - 0
fs-qw-task/src/main/java/com/fs/app/controller/CommonController.java

@@ -2,18 +2,24 @@ package com.fs.app.controller;
 
 
 import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSON;
 import com.fs.app.taskService.QwExternalContactRatingService;
 import com.fs.app.taskService.SopLogsChatTaskService;
 import com.fs.app.taskService.SopLogsTaskService;
 import com.fs.app.taskService.SopWxLogsService;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.ResponseResult;
+import com.fs.company.service.ICompanyService;
+import com.fs.company.service.ICompanyTrafficRecordService;
+import com.fs.company.vo.RedPacketMoneyVO;
+import com.fs.course.mapper.FsCourseRedPacketLogMapper;
 import com.fs.course.mapper.FsCourseWatchLogMapper;
 import com.fs.course.param.newfs.FsUserCourseAddCompanyUserParam;
 import com.fs.course.service.*;
 import com.fs.his.domain.FsUser;
 import com.fs.his.service.IFsInquiryOrderService;
 import com.fs.his.utils.qrcode.QRCodeUtils;
+import com.fs.hisStore.config.MedicalMallConfig;
 import com.fs.qw.domain.QwCompany;
 import com.fs.qw.mapper.QwExternalContactMapper;
 import com.fs.qw.service.IQwCompanyService;
@@ -26,6 +32,8 @@ import com.fs.sop.mapper.SopUserLogsMapper;
 import com.fs.sop.service.*;
 import com.fs.sop.vo.QwSopLogsDoSendListTVO;
 import com.fs.store.service.IFsUserCourseCountService;
+import com.fs.system.domain.SysConfig;
+import com.fs.system.service.ISysConfigService;
 import io.swagger.annotations.Api;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +44,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Arrays;
 import java.util.List;
@@ -85,6 +94,10 @@ public class CommonController {
     @Autowired
     private IQwSopTempRulesService tempRulesService;
     @Autowired
+    private FsCourseRedPacketLogMapper fsCourseRedPacketLogMapper;
+    @Autowired
+    private ICompanyService companyService;
+    @Autowired
     private IQwSopTempVoiceService qwSopTempVoiceService;
 
     @Autowired
@@ -108,6 +121,10 @@ public class CommonController {
 
     @Autowired
     private IFsCourseLinkService iFsCourseLinkService;
+    @Autowired
+    private ISysConfigService configService;
+    @Autowired
+    private ICompanyTrafficRecordService companyTrafficRecordService;
 
     /**
     * 发官方通连
@@ -298,4 +315,24 @@ public class CommonController {
         }
         return R.ok();
     }
+    @PostMapping("/updateFlow")
+    public R updateFlow(){
+        SysConfig config = configService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
+        log.info("是否更新流量:{}", medicalMallConfig.isStatics());
+        if(medicalMallConfig.isStatics()) {
+            companyTrafficRecordService.refreshTraffic();
+        }
+        return R.ok();
+    }
+    @GetMapping("/updateRedPack")
+    public R updateRedPack(String start , String end    ){
+        LocalDateTime startTime = DateUtil.parseLocalDateTime(start);
+        LocalDateTime endTime = DateUtil.parseLocalDateTime(end);
+        List<RedPacketMoneyVO> redPacketMoneyVOS = fsCourseRedPacketLogMapper.selectFsCourseRedPacketLogHourseByCompany(startTime, endTime);
+        for (RedPacketMoneyVO redPacketMoneyVO : redPacketMoneyVOS) {
+            companyService.subtractCompanyMoneyHourse(redPacketMoneyVO.getMoney(),redPacketMoneyVO.getCompanyId(), startTime.toLocalTime(), endTime.toLocalTime());
+        }
+        return R.ok();
+    }
 }

+ 48 - 29
fs-qw-task/src/main/java/com/fs/app/task/qwTask.java

@@ -1,6 +1,12 @@
 package com.fs.app.task;
 
+import com.alibaba.fastjson.JSON;
 import com.fs.app.taskService.*;
+import com.fs.company.service.ICompanyService;
+import com.fs.company.service.ICompanyTrafficRecordService;
+import com.fs.company.vo.RedPacketMoneyVO;
+import com.fs.course.mapper.FsCourseRedPacketLogMapper;
+import com.fs.hisStore.config.MedicalMallConfig;
 import com.fs.qw.service.IQwExternalErrRetryService;
 import com.fs.qw.service.IQwGroupMsgService;
 import com.fs.qw.service.IQwWorkUserService;
@@ -11,6 +17,9 @@ import com.fs.sop.service.ISopUserLogsService;
 import com.fs.sop.service.impl.QwSopLogsServiceImpl;
 import com.fs.sop.service.impl.QwSopServiceImpl;
 import com.fs.sop.vo.QwSopLogsDoSendListTVO;
+import com.fs.system.domain.SysConfig;
+import com.fs.system.service.ISysConfigService;
+import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
@@ -31,52 +40,28 @@ import java.util.List;
  */
 @Component
 @Slf4j
+@AllArgsConstructor
 public class qwTask {
 
-    @Autowired
     private QwSopServiceImpl qwSopService;
-
-    @Autowired
     private IQwSopLogsService iQwSopLogsService;
-
-    @Autowired
     private QwSopLogsServiceImpl qwSopLogsService;
-
-    @Autowired
     private IQwGroupMsgService qwGroupMsgService;
-
-    @Autowired
     private ISopUserLogsService sopUserLogsService;
-
-    @Autowired
     private SopLogsTaskService sopLogsTaskService;
-
-    @Autowired
     private SopWxLogsService sopWxLogsService;
-
-    @Autowired
+    private FsCourseRedPacketLogMapper fsCourseRedPacketLogMapper;
+    private ICompanyService companyService;
     private SopLogsChatTaskService sopLogsTaskChatService;
-
-    @Autowired
     private IQwExternalErrRetryService errRetryService;
-
-    @Autowired
     private QwExternalContactRatingService qwExternalContactRatingService;
-
-    @Autowired
     private IQwWorkUserService qwWorkUserService;
-
-    @Autowired
     private QwSopLogsMapper qwSopLogsMapper;
-
-    @Autowired
     private IQwSopTagService qwSopTagService;
-
-    @Autowired
     private SopUserLogsInfoByIsDaysNotStudy logsInfoByIsDaysNotStudy;
-
-    @Autowired
     private QwExternalContactRatingMoreSevenDaysService qwExternalContactRatingMoreSevenDaysService;
+    private ICompanyTrafficRecordService companyTrafficRecordService;
+    private ISysConfigService configService;
 
     /**
      * 定时任务:检查SOP规则时间
@@ -374,4 +359,38 @@ public class qwTask {
         long endTimeMillis = System.currentTimeMillis();
         log.info("====== 更新掉所有前一天的所有待发送,耗时 {} 毫秒 ======", (endTimeMillis - startTimeMillis));
     }
+
+    /**
+     * 每天扣除流量余额
+     * */
+    @Scheduled(cron = "0 2 * * * ?")
+    public void refreshTraffic(){
+        SysConfig config = configService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
+        log.info("是否更新流量:{}", medicalMallConfig.isStatics());
+        if(medicalMallConfig.isStatics()) {
+            companyTrafficRecordService.refreshTraffic();
+        }
+    }
+    @Scheduled(cron = "0 3 * * * ?")
+    public void refreshCompanyMoney(){
+        SysConfig config = configService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
+        log.info("是否更新红包:{}", medicalMallConfig.isStatics());
+        if(medicalMallConfig.isStatics()) {
+            LocalDateTime now = LocalDateTime.now();
+            // 获取上一个小时的开始时间
+            LocalDateTime startTime = now.minusHours(1)
+                    .withMinute(0)
+                    .withSecond(0);
+            // 获取上一个小时的结束时间
+            LocalDateTime endTime = startTime
+                    .withMinute(59)
+                    .withSecond(59);
+            List<RedPacketMoneyVO> redPacketMoneyVOS = fsCourseRedPacketLogMapper.selectFsCourseRedPacketLogHourseByCompany(startTime, endTime);
+            for (RedPacketMoneyVO redPacketMoneyVO : redPacketMoneyVOS) {
+                companyService.subtractCompanyMoneyHourse(redPacketMoneyVO.getMoney(),redPacketMoneyVO.getCompanyId(), startTime.toLocalTime(), endTime.toLocalTime());
+            }
+        }
+    }
 }

+ 2 - 1
fs-qw-task/src/main/resources/application.yml

@@ -10,4 +10,5 @@ spring:
 #    active: druid-hcl
 #    active: druid-sxjz
 #    active: druid-hdt
-    active: druid-myhk-test
+#    active: druid-myhk-test
+    active: dev-yjb

+ 6 - 0
fs-service/src/main/java/com/fs/company/domain/Company.java

@@ -135,5 +135,11 @@ public class Company extends BaseEntity
     private Integer maxPadNum;
     /** 所属部门id */
     private Long deptId;
+    @TableField(exist = false)
+    private Long oldDeptId;
+    @TableField(exist = false)
+    private boolean pageUpdate;
+    @TableField(exist = false)
+    private boolean isAdmin;
 
 }

+ 2 - 1
fs-service/src/main/java/com/fs/company/domain/CompanyTrafficRecordLog.java

@@ -1,5 +1,6 @@
 package com.fs.company.domain;
 
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fs.common.annotation.Excel;
@@ -21,7 +22,7 @@ import java.util.Date;
 public class CompanyTrafficRecordLog {
 
     @Excel(name = "id")
-    @TableId
+    @TableId(type = IdType.AUTO)
     private Long id;
     @Excel(name = "公司id")
     private Long companyId;

+ 3 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyDeductMapper.java

@@ -105,6 +105,9 @@ public interface CompanyDeductMapper
             "<if test = 'maps.isAudit != null  '> " +
             "and d.is_audit = #{maps.isAudit}" +
             "</if>" +
+            "<if test = 'maps.deptId != null  '> " +
+            "and c.dept_id = #{maps.deptId}" +
+            "</if>" +
             "<if test = 'maps.createTime != null  '> " +
             "and   DATE(d.create_time) = DATE(#{maps.createTime})" +
             "</if>" +

+ 3 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyMoneyLogsMapper.java

@@ -78,6 +78,9 @@ public interface CompanyMoneyLogsMapper
             "<if test = 'maps.logsType != null  '> " +
             "and l.logs_type = #{maps.logsType}" +
             "</if>" +
+            "<if test = 'maps.deptId != null  '> " +
+            "and c.dept_id = #{maps.deptId}" +
+            "</if>" +
             "<if test = 'maps.businessId != null  '> " +
             "and l.business_id = #{maps.businessId}" +
             "</if>" +

+ 3 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyRechargeMapper.java

@@ -139,6 +139,9 @@ public interface CompanyRechargeMapper
             "<if test = 'maps.rechargeNo != null and maps.rechargeNo !=\"\" '> " +
             "and r.recharge_no = #{maps.rechargeNo}" +
             "</if>" +
+            "<if test = 'maps.deptId != null  '> " +
+            "and c.dept_id = #{maps.deptId}" +
+            "</if>" +
             "<if test = 'maps.status != null  '> " +
             "and r.status = #{maps.status}" +
             "</if>" +

+ 4 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyTrafficRecordLogMapper.java

@@ -2,9 +2,13 @@ package com.fs.company.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.fs.company.domain.CompanyTrafficRecordLog;
+import com.fs.company.param.CompanyTrafficRecordLogQueryParam;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 @Mapper
 public interface CompanyTrafficRecordLogMapper extends BaseMapper<CompanyTrafficRecordLog> {
 
+    List<CompanyTrafficRecordLog> list(CompanyTrafficRecordLogQueryParam record);
 }

+ 9 - 8
fs-service/src/main/java/com/fs/company/mapper/CompanyTrafficRecordMapper.java

@@ -15,14 +15,15 @@ public interface CompanyTrafficRecordMapper extends BaseMapper<CompanyTrafficRec
     @Select("SELECT SUM(ctr.balance) FROM company_traffic_record ctr inner join company c on ctr.company_id = c.company_id and c.dept_id = #{deptId}")
     Long calculateTotalTrafficByDeptId(@Param("deptId") Long deptId);
 
-    @Select({"<script>"+
-                "SELECT ctr.id,c.company_id,c.company_name,ctr.balance from company c " +
-                "LEFT JOIN company_traffic_record ctr on ctr.company_id = c.company_id " +
-                "WHERE c.is_del = 0 "+
-                "<if test = 'maps.companyIds != null'> " +
-                "and c.company_id IN " +
-                "<foreach collection='maps.companyIds'  item='item' index='index'  open='(' separator=',' close=')'> #{item} </foreach> "+
-                "</if> " +
+    @Select({"<script>" +
+            "SELECT ctr.id,c.company_id,c.company_name,ctr.balance from company c " +
+            "LEFT JOIN company_traffic_record ctr on ctr.company_id = c.company_id " +
+            "WHERE c.is_del = 0 " +
+            "<if test='maps.deptId != null'> and c.dept_id = #{maps.deptId}</if> " +
+            "<if test = 'maps.companyIds != null'> " +
+            "and c.company_id IN " +
+            "<foreach collection='maps.companyIds'  item='item' index='index'  open='(' separator=',' close=')'> #{item} </foreach> " +
+            "</if> " +
             "</script>"})
     List<CompanyTrafficRecord> selectListWithUncharged(@Param("maps") CompanyTrafficRecordQueryParam record);
 }

+ 3 - 0
fs-service/src/main/java/com/fs/company/param/CompanyMoneyLogsParam.java

@@ -1,5 +1,6 @@
 package com.fs.company.param;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fs.common.annotation.Excel;
@@ -62,6 +63,8 @@ public class CompanyMoneyLogsParam implements Serializable {
     private String createTimeRange;
 
     private String[] createTimeList;
+    @TableField(exist = false)
+    private Long deptId;
 
 
 

+ 5 - 0
fs-service/src/main/java/com/fs/company/param/CompanyTrafficRecordChargeParam.java

@@ -1,5 +1,6 @@
 package com.fs.company.param;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.fs.company.domain.Company;
 import lombok.Data;
 
@@ -14,6 +15,10 @@ public class CompanyTrafficRecordChargeParam {
     private Long changeTraffic;
     private String remark;
     private Long userId;
+    private Long deptId;
+    @TableField(exist = false)
+    private Boolean isAdmin;
+    @TableField(exist = false)
     private String userName;
 
     /**

+ 1 - 0
fs-service/src/main/java/com/fs/company/param/CompanyTrafficRecordLogQueryParam.java

@@ -13,6 +13,7 @@ public class CompanyTrafficRecordLogQueryParam {
     private Long companyId;
     private List<Long> companyIds;
     private Long userId;
+    private Long deptId;
     private String userName;
     private Integer operationType; // 1-充值 2-扣费
     private Date createTime;

+ 1 - 0
fs-service/src/main/java/com/fs/company/param/CompanyTrafficRecordQueryParam.java

@@ -14,4 +14,5 @@ public class CompanyTrafficRecordQueryParam {
     private Long companyId;
     private List<Long> companyIds;
     private Long createBy;
+    private Long deptId;
 }

+ 2 - 0
fs-service/src/main/java/com/fs/company/service/ICompanyService.java

@@ -1,6 +1,7 @@
 package com.fs.company.service;
 
 import java.math.BigDecimal;
+import java.time.LocalTime;
 import java.util.List;
 
 import com.fs.common.core.domain.R;
@@ -100,6 +101,7 @@ public interface ICompanyService
 
     @Transactional
     void subCompanyMoney(FsStoreOrderScrm order);
+    public void subtractCompanyMoneyHourse(BigDecimal money, Long companyId, LocalTime localTime, LocalTime time);
 
     Company selectCompanyByAppId(String appId);
 

+ 73 - 3
fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java

@@ -1,12 +1,14 @@
 package com.fs.company.service.impl;
 
 import java.math.BigDecimal;
+import java.time.LocalTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.fs.common.core.domain.R;
+import com.fs.common.exception.base.BaseException;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.SecurityUtils;
 import com.fs.common.utils.StringUtils;
@@ -20,6 +22,7 @@ import com.fs.company.vo.CompanyCrmVO;
 import com.fs.company.vo.CompanyNameVO;
 import com.fs.company.vo.CompanyVO;
 import com.fs.company.vo.DeptDataVO;
+import com.fs.course.config.CourseConfig;
 import com.fs.his.config.StoreConfig;
 import com.fs.his.domain.FsInquiryOrder;
 import com.fs.his.domain.FsStoreOrder;
@@ -32,8 +35,11 @@ import com.fs.hisStore.domain.FsStorePaymentScrm;
 import com.fs.hisStore.mapper.FsStoreOrderScrmMapper;
 import com.fs.store.config.CompanyMenuConfig;
 import com.fs.system.domain.SysConfig;
+import com.fs.system.domain.SysDeptConfig;
 import com.fs.system.mapper.SysConfigMapper;
 import com.fs.system.service.ISysConfigService;
+import com.fs.system.service.ISysDeptConfigLogService;
+import com.fs.system.service.ISysDeptConfigService;
 import com.google.gson.Gson;
 import com.hc.openapi.tool.util.ObjectUtils;
 import org.apache.commons.collections4.CollectionUtils;
@@ -95,6 +101,10 @@ public class CompanyServiceImpl implements ICompanyService
 
     @Autowired
     private CompanyUserMapper companyUserMapper;
+    @Autowired
+    private ISysDeptConfigService sysDeptConfigService;
+    @Autowired
+    private ISysDeptConfigLogService sysDeptConfigLogService;
 
     @Override
     public List<OptionsVO> selectAllCompanyList(Long deptId) {
@@ -145,6 +155,22 @@ public class CompanyServiceImpl implements ICompanyService
             return R.error("管理员帐号已存在");
         }
         company.setCreateTime(DateUtils.getNowDate());
+        SysConfig courseConfig = sysConfigMapper.selectConfigByConfigKey("course.config");
+        CourseConfig config = JSON.parseObject(courseConfig.getConfigValue(), CourseConfig.class);
+        if(config.getDeptLimit() != null && config.getDeptLimit() && !company.isAdmin() && company.getMaxPadNum() != null && company.getMaxPadNum() != -1){
+            SysDeptConfig deptConfig = sysDeptConfigService.getDeptConfig(company.getOldDeptId());
+            Integer padNum = company.getMaxPadNum();
+            long first = deptConfig.getPadNumSub() == null ? 0 : deptConfig.getPadNumSub();
+            long subNum = first + padNum;
+            if(deptConfig.getPadNum() < subNum){
+                throw new BaseException("部门可用PAD数量不足无法分配,请联系管理员添加");
+            }
+            deptConfig.setPadNumSub(subNum);
+            deptConfig.setUpdateBy(company.getCreateBy());
+            deptConfig.setUpdateTime(new Date());
+            sysDeptConfigLogService.addLog(deptConfig.getDeptId(), 0, 1, padNum.toString(), first + "", subNum + "", deptConfig.getUpdateBy(), "设置公司PAD");
+            sysDeptConfigService.updateById(deptConfig);
+        }
         if(companyMapper.insertCompany(company)>0){
             //写入帐号信息
             //创建部门
@@ -208,9 +234,9 @@ public class CompanyServiceImpl implements ICompanyService
             try {
                 String json = configService.selectConfigByKey("companymenu.config");
                 if (StringUtils.isNotEmpty(json) && !json.equals("")) {
-                    CompanyMenuConfig config = JSONUtil.toBean(json, CompanyMenuConfig.class);
-                    salesRole.setMenuIds(config.getMenuIds());
-                    if(config.getMenuIds().length > 0){
+                    CompanyMenuConfig config1 = JSONUtil.toBean(json, CompanyMenuConfig.class);
+                    salesRole.setMenuIds(config1.getMenuIds());
+                    if(config1.getMenuIds().length > 0){
                         roleService.insertRole(salesRole);
                     }else {
                         roleService.insertDefaultRole(salesRole);
@@ -271,6 +297,28 @@ public class CompanyServiceImpl implements ICompanyService
         if(company.isUpdateMiniApp()){
             bindMiniApp(company);
         }
+        if(company.isPageUpdate()){
+            SysConfig courseConfig = sysConfigMapper.selectConfigByConfigKey("course.config");
+            CourseConfig config = JSON.parseObject(courseConfig.getConfigValue(), CourseConfig.class);
+            if(config.getDeptLimit() != null && config.getDeptLimit() && !company.isAdmin() && company.getMaxPadNum() != null && company.getMaxPadNum() != -1){
+                Company oldCompany = selectCompanyById(company.getCompanyId());
+                if(oldCompany.getMaxPadNum() == -1){
+                    oldCompany.setMaxPadNum(0);
+                }
+                int changeNum = company.getMaxPadNum() - oldCompany.getMaxPadNum();
+                SysDeptConfig deptConfig = sysDeptConfigService.getDeptConfig(company.getOldDeptId());
+                long first = deptConfig.getPadNumSub() == null ? 0 : deptConfig.getPadNumSub();
+                long subNum = first + changeNum;
+                if(deptConfig.getPadNum() < subNum){
+                    throw new BaseException("部门可用PAD数量不足无法分配,请联系管理员添加");
+                }
+                deptConfig.setPadNumSub(subNum);
+                deptConfig.setUpdateBy(company.getCreateBy());
+                deptConfig.setUpdateTime(new Date());
+                sysDeptConfigLogService.addLog(deptConfig.getDeptId(), 0, 1, changeNum + "", first + "", subNum + "", deptConfig.getUpdateBy(), "修改公司PAD");
+                sysDeptConfigService.updateById(deptConfig);
+            }
+        }
         return companyMapper.updateCompany(company);
     }
     // 绑定小程序
@@ -493,6 +541,28 @@ public class CompanyServiceImpl implements ICompanyService
         }
     }
 
+    @Override
+    @Transactional
+    public void subtractCompanyMoneyHourse(BigDecimal money, Long companyId, LocalTime start, LocalTime end) {
+
+        if(companyId!=null&&companyId>0){
+            Company company=companyMapper.selectCompanyByIdForUpdate(companyId);
+            if(company!=null){
+                logger.info("每个小时扣除红包金额:{}", money);
+                company.setMoney(company.getMoney().subtract(money));
+                companyMapper.updateCompany(company);
+                CompanyMoneyLogs log=new CompanyMoneyLogs();
+                log.setCompanyId(company.getCompanyId());
+                log.setRemark("扣除"+start.getHour()+"点红包金额");
+                log.setMoney(money.multiply(new BigDecimal(-1)));
+                log.setLogsType(15);
+                log.setBalance(company.getMoney());
+                log.setCreateTime(new Date());
+                moneyLogsMapper.insertCompanyMoneyLogs(log);
+            }
+        }
+    }
+
     @Override
     public Company selectCompanyByAppId(String appId) {
         return companyMapper.selectCompanyByAppId(appId);

+ 9 - 8
fs-service/src/main/java/com/fs/company/service/impl/CompanyTrafficRecordLogServiceImpl.java

@@ -21,14 +21,15 @@ public class CompanyTrafficRecordLogServiceImpl extends ServiceImpl<CompanyTraff
 
     @Override
     public List<CompanyTrafficRecordLog> selectList(CompanyTrafficRecordLogQueryParam record) {
-        return baseMapper.selectList(new LambdaQueryWrapper<CompanyTrafficRecordLog>()
-                .eq(record.getCompanyId() != null ,CompanyTrafficRecordLog::getCompanyId, record.getCompanyId())
-                .in(record.getCompanyIds() != null,CompanyTrafficRecordLog::getCompanyId, record.getCompanyIds())
-                .eq(record.getUserId() != null ,CompanyTrafficRecordLog::getUserId, record.getUserId())
-                .eq(record.getOperationType() != null ,CompanyTrafficRecordLog::getOperationType, record.getOperationType())
-                .eq(record.getCreateTime() != null ,CompanyTrafficRecordLog::getCreateTime, record.getCreateTime())
-                .between(record.getCreateTimeStart() != null && record.getCreateTimeEnd() != null,CompanyTrafficRecordLog::getCreateTime, record.getCreateTimeStart(), record.getCreateTimeEnd())
-                .orderByDesc(CompanyTrafficRecordLog::getCreateTime));
+        return baseMapper.list(record);
+//        return baseMapper.selectList(new LambdaQueryWrapper<CompanyTrafficRecordLog>()
+//                .eq(record.getCompanyId() != null ,CompanyTrafficRecordLog::getCompanyId, record.getCompanyId())
+//                .in(record.getCompanyIds() != null,CompanyTrafficRecordLog::getCompanyId, record.getCompanyIds())
+//                .eq(record.getUserId() != null ,CompanyTrafficRecordLog::getUserId, record.getUserId())
+//                .eq(record.getOperationType() != null ,CompanyTrafficRecordLog::getOperationType, record.getOperationType())
+//                .eq(record.getCreateTime() != null ,CompanyTrafficRecordLog::getCreateTime, record.getCreateTime())
+//                .between(record.getCreateTimeStart() != null && record.getCreateTimeEnd() != null,CompanyTrafficRecordLog::getCreateTime, record.getCreateTimeStart(), record.getCreateTimeEnd())
+//                .orderByDesc(CompanyTrafficRecordLog::getCreateTime));
     }
 
     @Override

+ 78 - 35
fs-service/src/main/java/com/fs/company/service/impl/CompanyTrafficRecordServiceImpl.java

@@ -1,9 +1,12 @@
 package com.fs.company.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.common.core.redis.RedisCache;
+import com.fs.common.exception.base.BaseException;
+import com.fs.common.utils.date.DateUtil;
 import com.fs.company.constant.CompanyTrafficConstants;
 import com.fs.company.domain.Company;
 import com.fs.company.domain.CompanyTrafficRecord;
@@ -14,15 +17,22 @@ import com.fs.company.param.CompanyTrafficRecordQueryParam;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyTrafficRecordLogService;
 import com.fs.company.service.ICompanyTrafficRecordService;
+import com.fs.course.config.CourseConfig;
 import com.fs.course.mapper.FsCourseTrafficLogMapper;
 import com.fs.system.domain.SysConfig;
+import com.fs.system.domain.SysDeptConfig;
+import com.fs.system.mapper.SysConfigMapper;
 import com.fs.system.service.ISysConfigService;
+import com.fs.system.service.ISysDeptConfigLogService;
+import com.fs.system.service.ISysDeptConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.time.YearMonth;
 import java.util.Date;
 import java.util.HashMap;
@@ -49,12 +59,18 @@ public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficR
 
     @Autowired
     private FsCourseTrafficLogMapper fsCourseTrafficLogMapper;
+    @Autowired
+    private ISysDeptConfigService sysDeptConfigService;
+    @Autowired
+    private SysConfigMapper sysConfigMapper;
+    @Autowired
+    private ISysDeptConfigLogService sysDeptConfigLogService;
 
     //启动时初始化部门流量缓存
     @Override
     public void init() {
         List<CompanyTrafficRecord> companyTrafficRecords = baseMapper.selectList(new LambdaQueryWrapper<>());
-        Map<Long,Long> deptTrafficMap = new HashMap<>();
+        Map<Long, Long> deptTrafficMap = new HashMap<>();
         for (CompanyTrafficRecord companyTrafficRecord : companyTrafficRecords) {
             // 获取公司ID
             Long companyId = companyTrafficRecord.getCompanyId();
@@ -64,8 +80,9 @@ public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficR
 
             // 公司流量 - 消耗流量
             Long balance = companyTrafficRecord.getBalance();
+            Long traffic = fsCourseTrafficLogMapper.sumTrafficByCompany(companyId);
             //消耗的流量
-            Long totalInternetTraffic = fsCourseTrafficLogMapper.sumTrafficByCompany(companyId) == null?0L:fsCourseTrafficLogMapper.sumTrafficByCompany(companyId);
+            long totalInternetTraffic = traffic == null ? 0L : traffic;
             balance -= totalInternetTraffic;
             //部门流量记录
             Long deptTrafficAdd = (deptTrafficMap.get(deptId) == null ? 0L : deptTrafficMap.get(deptId)) + totalInternetTraffic;
@@ -88,43 +105,49 @@ public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficR
         log.info("【定时更新流量】:{}", "开始");
         List<CompanyTrafficRecord> companyTrafficRecords = baseMapper.selectList(new LambdaQueryWrapper<>());
         for (CompanyTrafficRecord companyTrafficRecord : companyTrafficRecords) {
-            doReduce(companyTrafficRecord,"1");
+            doReduce(companyTrafficRecord);
         }
     }
 
     //通过redis更新表流量并添加扣除日志
-    private void doReduce(CompanyTrafficRecord companyTrafficRecord, String doType) {
-
+    private void doReduce(CompanyTrafficRecord companyTrafficRecord) {
+        LocalDateTime now = LocalDateTime.now();
+        // 获取上一个小时的开始时间
+        LocalDateTime startTime = now.minusHours(1)
+                .withMinute(0)
+                .withSecond(0);
+        // 获取上一个小时的结束时间
+        LocalDateTime endTime = startTime
+                .withMinute(59)
+                .withSecond(59);
         //根据fs_course_traffic_log表获取公司昨天流量
-        Long trafficAmountYesterday = fsCourseTrafficLogMapper.sumTrafficByCompanyYesterday(companyTrafficRecord.getCompanyId());
-        if(trafficAmountYesterday!=null) {
+        Long trafficAmountYesterday = fsCourseTrafficLogMapper.sumTrafficByCompanyYesterday(companyTrafficRecord.getCompanyId(), DateUtil.formatLocalDateTime(startTime), DateUtil.formatLocalDateTime(endTime));
+        if (trafficAmountYesterday != null && trafficAmountYesterday > 0) {
             //判断是否已经更新当天流量
-            CompanyTrafficRecordLog todayRecodeLog =  companyTrafficRecordLogService.selectTodayRecord(companyTrafficRecord.getCompanyId());
-            if(todayRecodeLog != null){
-                return;
-            }
+//            CompanyTrafficRecordLog todayRecodeLog =  companyTrafficRecordLogService.selectTodayRecord(companyTrafficRecord.getCompanyId());
+//            if(todayRecodeLog != null){
+//                return;
+//            }
             long balance = companyTrafficRecord.getBalance() - trafficAmountYesterday;
             companyTrafficRecord.setBalance(balance);
-            log.info("【更新流量】:{}", "部门ID:" + companyTrafficRecord.getDeptId() +"公司ID:" + companyTrafficRecord.getCompanyId() +  "消耗流量:" + trafficAmountYesterday+"剩余流量:"+balance);
-            if (trafficAmountYesterday > 0) {
-                baseMapper.updateById(CompanyTrafficRecord.builder()
-                        .id(companyTrafficRecord.getId())
-                        .balance(balance)
-                        .updateTime(new Date())
-                        .updateBy(1L).build());
-                companyTrafficRecordLogService.save(CompanyTrafficRecordLog.builder()
-                        .balance(balance)
-                        .trafficAmount(trafficAmountYesterday)
-                        .companyId(companyTrafficRecord.getCompanyId())
-                        .createTime(new Date())
-                        .operationType(2)
-                        .userId(1L)//表示amdin
-                        .remark("0".equals(doType)?"重启同步流量":"定时更新扣除流量")
-                        .userName("admin")
-                        .build());
-            }
+            log.info("【更新流量】:{}", "部门ID:" + companyTrafficRecord.getDeptId() + "公司ID:" + companyTrafficRecord.getCompanyId() + "消耗流量:" + trafficAmountYesterday + "剩余流量:" + balance);
+            baseMapper.updateById(CompanyTrafficRecord.builder()
+                    .id(companyTrafficRecord.getId())
+                    .balance(balance)
+                    .updateTime(new Date())
+                    .updateBy(1L).build());
+            companyTrafficRecordLogService.save(CompanyTrafficRecordLog.builder()
+                    .balance(balance)
+                    .trafficAmount(trafficAmountYesterday)
+                    .companyId(companyTrafficRecord.getCompanyId())
+                    .createTime(new Date())
+                    .operationType(2)
+                    .userId(1L)//表示amdin
+                    .remark("定时更新扣除流量")
+                    .userName("定时任务")
+                    .build());
         }
-        init();
+//        init();
     }
 
     @Override
@@ -142,6 +165,21 @@ public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficR
         //充值
         if (record.getOperationType() == 1) {//获取转换后的流量
             Long trafficAmount = trafficConversion(record.getChargeAmount());
+            SysConfig courseConfig = sysConfigMapper.selectConfigByConfigKey("course.config");
+            CourseConfig config = JSON.parseObject(courseConfig.getConfigValue(), CourseConfig.class);
+            if (config.getDeptLimit() != null && config.getDeptLimit() && !record.getIsAdmin()) {
+                SysDeptConfig deptConfig = sysDeptConfigService.getDeptConfig(record.getDeptId());
+                Long flowNum = deptConfig.getFlowNum();
+                long surplus = flowNum - trafficAmount;
+                if (surplus < 0) {
+                    throw new BaseException("部门可用流量不足无法分配,请联系管理员充值");
+                }
+                deptConfig.setFlowNum(surplus);
+                deptConfig.setUpdateBy(record.getUserName());
+                deptConfig.setUpdateTime(new Date());
+                sysDeptConfigLogService.addLog(deptConfig.getDeptId(), 2, 1, trafficAmount.toString(), flowNum.toString(), surplus + "", record.getUserName(), "充值公司流量");
+                sysDeptConfigService.updateById(deptConfig);
+            }
             record.setChangeTraffic(trafficAmount);//用于处理日志
             if (companyRecord != null) {
                 //不是第一次充值  增加流量
@@ -149,6 +187,7 @@ public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficR
                 companyTrafficRecord.setId(companyRecord.getId());
                 companyTrafficRecord.setUpdateTime(new Date());
                 companyTrafficRecord.setUpdateBy(record.getUserId());
+                companyTrafficRecord.setDeptId(record.getDeptId());
                 baseMapper.updateById(companyTrafficRecord);
             } else {
                 companyTrafficRecord.setBalance(trafficAmount);
@@ -157,6 +196,7 @@ public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficR
                 companyTrafficRecord.setCompanyName(record.getCompany().getCompanyName());
                 companyTrafficRecord.setCreateTime(new Date());
                 companyTrafficRecord.setCreateBy(record.getUserId());
+                companyTrafficRecord.setDeptId(record.getDeptId());
                 baseMapper.insert(companyTrafficRecord);
             }
                 /*//扣除
@@ -191,8 +231,10 @@ public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficR
             return false;
         }
     }
+
     /**
      * 更新Redis缓存
+     *
      * @param record               充值参数
      * @param companyTrafficRecord 公司流量记录
      */
@@ -203,27 +245,28 @@ public class CompanyTrafficRecordServiceImpl extends ServiceImpl<CompanyTrafficR
                     companyTrafficRecord.getBalance());
 
             // 部门新增流量
-            calculateTrafficByDeptId(record.getCompany().getDeptId(),companyTrafficRecord.getBalance());
+            calculateTrafficByDeptId(record.getCompany().getDeptId(), companyTrafficRecord.getBalance());
         } else {
             // 抛出异常
             throw new IllegalArgumentException("缓存ID异常");
         }
     }
+
     /**
      * 部门下所有公司流量总和减去使用的流量
      */
-    private void calculateTrafficByDeptId(Long deptId,Long traffic) {
+    private void calculateTrafficByDeptId(Long deptId, Long traffic) {
         redisCache.incr(CompanyTrafficConstants.CACHE_KEY + ":" + deptId, traffic);
     }
 
     /**
      * 部门下所有公司流量总和减去使用的流量
      */
-    private void calculateTotalTrafficByDeptId(Map<Long,Long> deptTrafficMap) {
-        deptTrafficMap.forEach((deptId,totalTraffic) -> {
+    private void calculateTotalTrafficByDeptId(Map<Long, Long> deptTrafficMap) {
+        deptTrafficMap.forEach((deptId, totalTraffic) -> {
             Long total = baseMapper.calculateTotalTrafficByDeptId(deptId);
             redisCache.deleteObject(CompanyTrafficConstants.CACHE_KEY + ":" + deptId);
-            redisCache.incr(CompanyTrafficConstants.CACHE_KEY + ":" + deptId, total-totalTraffic);
+            redisCache.incr(CompanyTrafficConstants.CACHE_KEY + ":" + deptId, total - totalTraffic);
             //删除前天缓存
             redisCache.deleteObject(CompanyTrafficConstants.CACHE_KEY + ":" + deptId + ":" + LocalDate.now().minusDays(2));
             //删除上上月缓存

+ 1 - 0
fs-service/src/main/java/com/fs/company/vo/CompanyDeductVO.java

@@ -21,6 +21,7 @@ public class CompanyDeductVO implements Serializable {
      * ID
      */
     private Long deductId;
+    private Long deptId;
 
     /**
      * 企业ID

+ 1 - 0
fs-service/src/main/java/com/fs/company/vo/CompanyRechargeVO.java

@@ -24,6 +24,7 @@ public class CompanyRechargeVO implements Serializable {
      * ID
      */
     private Long rechargeId;
+    private Long deptId;
 
     /**
      * 企业ID

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

@@ -64,6 +64,7 @@ public class CourseConfig implements Serializable {
     private Boolean isBound;
     private Boolean isAllratingRating;
     private Boolean dept;
+    private Boolean deptLimit;
     /**
      * 是否单销售观看(只能在第一次绑定的销售头上看课)
      */

+ 3 - 0
fs-service/src/main/java/com/fs/course/mapper/FsCourseRedPacketLogMapper.java

@@ -1,6 +1,7 @@
 package com.fs.course.mapper;
 
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.List;
 
 import com.fs.company.vo.RedPacketMoneyVO;
@@ -168,4 +169,6 @@ public interface FsCourseRedPacketLogMapper
 
     @Select("SELECT * FROM fs_course_red_packet_log WHERE status = 0 and create_time > DATE_SUB(NOW(), INTERVAL 2 day) and company_user_id =#{userId}")
     List<FsCourseRedPacketLog> selectFail(@Param("userId") Long userId);
+
+    List<RedPacketMoneyVO> selectFsCourseRedPacketLogHourseByCompany(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
 }

+ 1 - 3
fs-service/src/main/java/com/fs/course/mapper/FsCourseTrafficLogMapper.java

@@ -192,7 +192,5 @@ public interface FsCourseTrafficLogMapper
             "WHERE DATE(T.create_time) = DATE(CURDATE()) AND T.company_id = #{companyId} GROUP BY T.company_id ")
     Long sumTrafficByCompany(Long companyId);
 
-    @Select("SELECT SUM(T.internet_traffic)/1024 AS totalInternetTraffic FROM fs_course_traffic_log T " +
-            "WHERE DATE(T.create_time) = DATE(CURDATE() - INTERVAL 1 DAY) AND T.company_id = #{companyId} GROUP BY T.company_id ")
-    Long sumTrafficByCompanyYesterday(Long companyId);
+    Long sumTrafficByCompanyYesterday(@Param("companyId") Long companyId, @Param("startTime") String startTime, @Param("endTime") String endTime);
 }

+ 1 - 0
fs-service/src/main/java/com/fs/course/param/FsCoursePlaySourceConfigCreateParam.java

@@ -45,4 +45,5 @@ public class FsCoursePlaySourceConfigCreateParam {
 
     @ApiModelProperty("所属公司")
     private Long companyId;
+    private Long createDeptId;
 }

+ 1 - 0
fs-service/src/main/java/com/fs/course/param/FsCoursePlaySourceConfigEditParam.java

@@ -42,4 +42,5 @@ public class FsCoursePlaySourceConfigEditParam {
 
     @ApiModelProperty("所属公司")
     private Long companyId;
+    private Long createDeptId;
 }

+ 4 - 6
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -75,14 +75,12 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.BeansException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.*;
-import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
@@ -852,15 +850,15 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             Long remainingTraffic = updateRedisCache(company, recordedTraffic/1024);
 
             if ("1".equals(configUtil.generateConfigByKey("watch.course.config").getString("doNotPlay")) && remainingTraffic <= 0) {
-                logger.warn("公司ID: {} 流量不足,当前剩余: {}", company.getCompanyId(), remainingTraffic);
+                //logger.warn("公司ID: {} 流量不足,当前剩余: {}", company.getCompanyId(), remainingTraffic);
                 throw new Exception("流量不足");
             }
 
             /*logger.info("异步扣除流量成功 - 公司ID: {}, 扣除流量: {}, 剩余流量: {}",
                     company.getCompanyId(), traffic, remainingTraffic);*/
-        } catch (Exception e) {
-            logger.error("异步扣除流量失败 - 公司ID: {}, 错误信息: {}",
-                    company.getCompanyId(), e.getMessage(), e);
+        } catch (Exception ignored) {
+            /*logger.error("异步扣除流量失败 - 公司ID: {}, 错误信息: {}",
+                    company.getCompanyId(), e.getMessage(), e);*/
         }
     }
 

+ 1 - 0
fs-service/src/main/java/com/fs/course/vo/FsCoursePlaySourceConfigVO.java

@@ -49,4 +49,5 @@ public class FsCoursePlaySourceConfigVO {
     @ApiModelProperty("修改时间")
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime updateTime;
+    private Long createDeptId;
 }

+ 2 - 19
fs-service/src/main/java/com/fs/hisStore/config/MedicalMallConfig.java

@@ -3,20 +3,15 @@ package com.fs.hisStore.config;
 import com.alibaba.fastjson.JSONObject;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fs.his.utils.ConfigUtil;
+import lombok.Data;
 import lombok.Getter;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.PostConstruct;
-import java.util.Objects;
 
-@Getter
-@Component
+@Data
 public class MedicalMallConfig {
-
-    @Autowired
-    @JsonIgnore
-    private ConfigUtil configUtil;
     /*
     {"isMedicalMall":"0","statics":"1","isAudit":"0"}
     */
@@ -28,16 +23,4 @@ public class MedicalMallConfig {
     private boolean isAudit;
     // 资源配置
     private boolean isResource;
-    @PostConstruct
-    public void init() {
-        JSONObject jsonObject = configUtil.generateConfigByKey("medicalMall.func.switch");
-        if (jsonObject != null) {
-            this.isMedicalMall = Objects.equals(jsonObject.getString("isMedicalMall"), "1");
-            this.isStatics = Objects.equals(jsonObject.getString("statics"), "1");
-            this.isAudit = Objects.equals(jsonObject.getString("isAudit"), "1");
-            this.isResource = Objects.equals(jsonObject.getString("isResource"), "1");
-        }
-    }
-
-
 }

+ 1 - 1
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreCartScrmMapper.java

@@ -85,7 +85,7 @@ public interface FsStoreCartScrmMapper
             "</if>" +
             "and c.user_id= #{uid} " +
             "</script>"})
-    List<FsStoreCartVO> selectFsStoreCartListByUid(long uid,@Param("config") MedicalMallConfig config);
+    List<FsStoreCartVO> selectFsStoreCartListByUid(@Param("uid") long uid,@Param("config") MedicalMallConfig config);
     @Delete({"<script>"+
             "delete from fs_store_cart_scrm where id in"+
            "<foreach collection='array' item='id' open='(' separator=',' close=')'>#{id}</foreach>"+

+ 11 - 0
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreProductScrmMapper.java

@@ -1,6 +1,7 @@
 package com.fs.hisStore.mapper;
 
 import java.util.List;
+import java.util.Map;
 
 import com.fs.his.param.FsStoreProductListSParam;
 import com.fs.his.vo.FsStoreProductListSVO;
@@ -399,6 +400,16 @@ public interface FsStoreProductScrmMapper
             "</script>"})
     List<FsStoreProductActivityListVO> selectFsStoreProductByIdsAudit(String productIds,@Param("config") MedicalMallConfig  config);
 
+    @Select("SELECT " +
+            " distinct  " +
+            "    COLUMN_NAME as colName,  " +
+            "    COLUMN_COMMENT  as colComment " +
+            "FROM  " +
+            "    information_schema.COLUMNS  " +
+            "WHERE  " +
+            "    TABLE_NAME = 'fs_store_product_scrm'")
+    List<Map<String, String>> getStoreProductColumns();
+
     @Select({"<script> " +
             "SELECT * FROM fs_store_product_scrm WHERE product_id IN " +
             "<foreach item='item' index='index' collection='productIds' open='(' separator=',' close=')'>" +

+ 4 - 2
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreRecommendScrmMapper.java

@@ -1,6 +1,8 @@
 package com.fs.hisStore.mapper;
 
 import com.fs.hisStore.domain.FsStoreRecommendScrm;
+import com.fs.hisStore.vo.FsStoreRecommendScrmVo;
+
 import java.util.List;
 
 /**
@@ -25,7 +27,7 @@ public interface FsStoreRecommendScrmMapper
      * @param fsStoreRecommendScrm 店铺推荐
      * @return 店铺推荐集合
      */
-    public List<FsStoreRecommendScrm> selectFsStoreRecommendScrmList(FsStoreRecommendScrm fsStoreRecommendScrm);
+    public List<FsStoreRecommendScrmVo> selectFsStoreRecommendScrmList(FsStoreRecommendScrm fsStoreRecommendScrm);
 
     /**
      * 查询有效的推荐店铺列表(根据时间、状态等条件)
@@ -33,7 +35,7 @@ public interface FsStoreRecommendScrmMapper
      * @param fsStoreRecommendScrm 店铺推荐
      * @return 店铺推荐集合
      */
-    public List<FsStoreRecommendScrm> selectValidRecommendList(FsStoreRecommendScrm fsStoreRecommendScrm);
+    public List<FsStoreRecommendScrmVo> selectValidRecommendList(FsStoreRecommendScrm fsStoreRecommendScrm);
 
     /**
      * 新增店铺推荐

+ 14 - 0
fs-service/src/main/java/com/fs/hisStore/mapper/FsStoreScrmMapper.java

@@ -8,6 +8,7 @@ import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 店铺管理Mapper接口
@@ -88,4 +89,17 @@ public interface FsStoreScrmMapper
 //    @Select("select store_id ,store_name,bus_no,bus_name  from fs_store_scrm ")
     @Select("select store_id ,store_name  from fs_store_scrm ")
     List<FsStoreScrmVO> selectFsAllStoreList();
+
+    @Select("SELECT " +
+            " distinct  " +
+            "    COLUMN_NAME as colName,  " +
+            "    COLUMN_COMMENT as colComment " +
+            "FROM  " +
+            "    information_schema.COLUMNS  " +
+            "WHERE  " +
+            "    TABLE_NAME = 'fs_store_scrm'")
+    List<Map<String, String>> getStoreColumns();
+
+    @Select("SELECT store_id,store_name from fs_store_scrm ")
+    List<FsStoreScrm> selectFsStoreListOption(FsStoreScrm fsStore);
 }

+ 2 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreProductScrmService.java

@@ -136,5 +136,7 @@ public interface IFsStoreProductScrmService
 
     List<FsStoreProductActivityListVO> selectFsStoreProductByIdsAudit(String productIds);
 
+    List<Map<String, String>> getStoreProductColumns();
+
     List<FsStoreProductScrm> selectProductByIds(Long[] productIds);
 }

+ 4 - 2
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreRecommendScrmService.java

@@ -1,6 +1,8 @@
 package com.fs.hisStore.service;
 
 import com.fs.hisStore.domain.FsStoreRecommendScrm;
+import com.fs.hisStore.vo.FsStoreRecommendScrmVo;
+
 import java.util.List;
 
 /**
@@ -25,7 +27,7 @@ public interface IFsStoreRecommendScrmService
      * @param fsStoreRecommendScrm 店铺推荐
      * @return 店铺推荐集合
      */
-    public List<FsStoreRecommendScrm> selectFsStoreRecommendScrmList(FsStoreRecommendScrm fsStoreRecommendScrm);
+    public List<FsStoreRecommendScrmVo> selectFsStoreRecommendScrmList(FsStoreRecommendScrm fsStoreRecommendScrm);
 
     /**
      * 查询有效的推荐店铺列表(根据时间、状态等条件)
@@ -33,7 +35,7 @@ public interface IFsStoreRecommendScrmService
      * @param fsStoreRecommendScrm 店铺推荐
      * @return 店铺推荐集合
      */
-    public List<FsStoreRecommendScrm> selectValidRecommendList(FsStoreRecommendScrm fsStoreRecommendScrm);
+    public List<FsStoreRecommendScrmVo> selectValidRecommendList(FsStoreRecommendScrm fsStoreRecommendScrm);
 
     /**
      * 新增店铺推荐

+ 5 - 0
fs-service/src/main/java/com/fs/hisStore/service/IFsStoreScrmService.java

@@ -6,6 +6,7 @@ import com.fs.hisStore.vo.FsStoreRecommendListVO;
 import com.fs.hisStore.vo.FsStoreScrmVO;
 
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -84,4 +85,8 @@ public interface IFsStoreScrmService
     List<FsStoreRecommendListVO> storeRecommendList();
 
     List<FsStoreScrmVO> selectAllStore();
+
+    List<Map<String, String>> getStoreColumns();
+
+    List<FsStoreScrm> selectFsStoreListOption(FsStoreScrm fsStore);
 }

+ 6 - 2
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreCartScrmServiceImpl.java

@@ -2,6 +2,7 @@ package com.fs.hisStore.service.impl;
 
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
 import com.fs.common.core.domain.R;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.DateUtils;
@@ -26,6 +27,8 @@ import com.fs.hisStore.param.FsStoreCartNumParam;
 import com.fs.hisStore.param.FsStoreCartParam;
 import com.fs.hisStore.service.IFsStoreCartScrmService;
 import com.fs.hisStore.vo.FsStoreCartVO;
+import com.fs.system.domain.SysConfig;
+import com.fs.system.service.ISysConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -65,9 +68,8 @@ public class FsStoreCartScrmServiceImpl implements IFsStoreCartScrmService
 
     @Autowired
     private ConfigUtil configUtil;
-
     @Autowired
-    private MedicalMallConfig medicalMallConfig;
+    private ISysConfigService configService;
 
 
 
@@ -204,6 +206,8 @@ public class FsStoreCartScrmServiceImpl implements IFsStoreCartScrmService
 
     @Override
     public List<FsStoreCartVO> selectFsStoreCartListByUid(long uid) {
+        SysConfig config = configService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         return fsStoreCartMapper.selectFsStoreCartListByUid(uid, medicalMallConfig);
     }
 

+ 7 - 2
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductAttrValueScrmServiceImpl.java

@@ -2,6 +2,7 @@ package com.fs.hisStore.service.impl;
 
 import java.util.List;
 
+import com.alibaba.fastjson.JSON;
 import com.fs.hisStore.config.MedicalMallConfig;
 import com.fs.hisStore.param.FsProductAttrValueParam;
 import com.fs.hisStore.param.FsStoreProductAttrValueQueryParam;
@@ -9,6 +10,8 @@ import com.fs.hisStore.param.FsStoreTuiProductAttrValueParam;
 import com.fs.hisStore.vo.FsStoreProductAttrValueQueryVO;
 import com.fs.hisStore.vo.FsStoreProductAttrValueVO;
 import com.fs.hisStore.vo.FsStoreTuiProductAttrValueVO;
+import com.fs.system.domain.SysConfig;
+import com.fs.system.service.ISysConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.fs.hisStore.mapper.FsStoreProductAttrValueScrmMapper;
@@ -28,7 +31,7 @@ public class FsStoreProductAttrValueScrmServiceImpl implements IFsStoreProductAt
     private FsStoreProductAttrValueScrmMapper fsStoreProductAttrValueMapper;
 
     @Autowired
-    private MedicalMallConfig config;
+    private ISysConfigService configService;
 
     /**
      * 查询商品属性值
@@ -119,7 +122,9 @@ public class FsStoreProductAttrValueScrmServiceImpl implements IFsStoreProductAt
 
     @Override
     public List<FsStoreProductAttrValueQueryVO> selectStoreProductAttrValueListQuery(FsStoreProductAttrValueQueryParam param) {
-        return fsStoreProductAttrValueMapper.selectStoreProductAttrValueListQuery(param, config);
+        SysConfig config = configService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
+        return fsStoreProductAttrValueMapper.selectStoreProductAttrValueListQuery(param, medicalMallConfig);
     }
 
     @Override

+ 114 - 10
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductScrmServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fs.hisStore.service.impl;
 
+import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.*;
@@ -10,6 +11,7 @@ import cn.hutool.core.util.ArrayUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.fs.common.BeanCopyUtils;
 import com.fs.common.core.domain.R;
@@ -37,6 +39,9 @@ import com.fs.hisStore.param.FsStoreProductQueryParam;
 import com.fs.hisStore.service.IFsStoreProductAttrValueScrmService;
 import com.fs.hisStore.vo.*;
 import com.fs.statis.dto.ProductAuditDTO;
+import com.fs.system.domain.SysConfig;
+import com.fs.system.service.ISysConfigService;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -54,6 +59,7 @@ import org.springframework.transaction.annotation.Transactional;
  */
 @Service
 @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+@Slf4j
 public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
 {
     @Autowired
@@ -77,6 +83,8 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
 
     @Autowired
     private ConfigUtil configUtil;
+    @Autowired
+    private ISysConfigService configService;
 
     @Autowired
     @Qualifier("hzOMSErpGoodsServiceImpl")
@@ -91,9 +99,6 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
     @Autowired
     private FsStoreScrmServiceImpl fsStoreScrmService;
 
-    @Autowired
-    private MedicalMallConfig medicalMallConfig;
-
     /**
      * 查询商品
      *
@@ -144,13 +149,62 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
     {
         fsStoreProduct.setUpdateTime(DateUtils.getNowDate());
         storeAuditLogUtil.addOperLog(fsStoreProduct.getProductId());
-        //对已上架的商品进行修改需要重新审核
-        if(1 == fsStoreProduct.getIsShow() && "1".equals(fsStoreProduct.getIsAudit())){
-            fsStoreProduct.setIsAudit("0");
+        FsStoreProductScrm oldFsStoreProduct = fsStoreProductMapper.selectFsStoreProductById(fsStoreProduct.getProductId());
+        Boolean isAudit = configUtil.generateConfigByKey("medicalMall.func.switch").getBoolean("isAudit");
+        try {
+            if (isAudit != null && isAudit) {
+                if (oldFsStoreProduct.getIsAudit() != null && "1".equals(oldFsStoreProduct.getIsAudit())) {
+                    Map<String, Object> diff = getDiff(oldFsStoreProduct, fsStoreProduct);
+                    Set<String> diff_columns = diff.keySet();
+                    JSONArray productColumns = configUtil.generateConfigByKey("medicalMall.func.switch").getJSONArray("productColumns");
+                    if(com.fs.common.utils.StringUtils.isNotEmpty(productColumns)){
+                        //判断diff_columns是否在productColumns中,不是则将isAudit设置为0
+                        for (String column : diff_columns) {
+                            if (!productColumns.contains(column)) {
+                                fsStoreProduct.setIsAudit("0");
+                                break;
+                            }
+                        }
+                    }else{
+                        fsStoreProduct.setIsAudit("0");
+                    }
+                }
+            }
+        } catch (IllegalAccessException e) {
+            log.error("获取diff出错", e);
         }
         return fsStoreProductMapper.updateFsStoreProduct(fsStoreProduct);
     }
 
+    public static Map<String, Object> getDiff(Object obj1, Object obj2) throws IllegalAccessException {
+        Map<String, Object> diff = new HashMap<>();
+        if (obj1 == null || obj2 == null || !obj1.getClass().equals(obj2.getClass())) {
+            return diff;
+        }
+
+        Field[] fields = obj1.getClass().getDeclaredFields();
+        for (Field field : fields) {
+            field.setAccessible(true);
+            Object value1 = field.get(obj1);
+            Object value2 = field.get(obj2);
+
+            // BigDecimal类型特殊处理
+            if (value1 instanceof BigDecimal && value2 instanceof BigDecimal) {
+                BigDecimal bd1 = (BigDecimal) value1;
+                BigDecimal bd2 = (BigDecimal) value2;
+                // 使用compareTo方法比较,避免精度问题
+                if (bd1.compareTo(bd2) != 0) {
+                    diff.put(field.getName(), new Object[]{value1, value2});
+                }
+            }
+            // 其他类型使用默认比较
+            else if (!Objects.equals(value1, value2)) {
+                diff.put(field.getName(), new Object[]{value1, value2});
+            }
+        }
+        return diff;
+    }
+
     /**
      * 批量删除商品
      *
@@ -363,9 +417,29 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
             }
         }
         if(param.getProductId() != null && param.getProductId() > 0){
-            //对已上架的商品进行修改需要重新审核
-            if(1 == product.getIsShow() && "1".equals(product.getIsAudit())){
-                product.setIsAudit("0");
+            FsStoreProductScrm oldFsStoreProduct = fsStoreProductMapper.selectFsStoreProductById(product.getProductId());
+            Boolean isAudit = configUtil.generateConfigByKey("medicalMall.func.switch").getBoolean("isAudit");
+            try {
+                if (isAudit != null && isAudit) {
+                    if (oldFsStoreProduct.getIsAudit() != null && "1".equals(oldFsStoreProduct.getIsAudit())) {
+                        Map<String, Object> diff = getDiff(oldFsStoreProduct, product);
+                        Set<String> diff_columns = diff.keySet();
+                        JSONArray productColumns = configUtil.generateConfigByKey("medicalMall.func.switch").getJSONArray("productColumns");
+                        if(com.fs.common.utils.StringUtils.isNotEmpty(productColumns)){
+                            //判断diff_columns是否在productColumns中,不是则将isAudit设置为0
+                            for (String column : diff_columns) {
+                                if (!productColumns.contains(column)) {
+                                    product.setIsAudit("0");
+                                    break;
+                                }
+                            }
+                        }else{
+                            product.setIsAudit("0");
+                        }
+                    }
+                }
+            } catch (IllegalAccessException e) {
+                log.error("获取diff出错", e);
             }
             fsStoreProductMapper.updateFsStoreProduct(product);
             if (param.getSpecType().equals(0)) {
@@ -677,6 +751,8 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
 
     @Override
     public FsStoreProductQueryVO selectFsStoreProductByIdQuery(Long productId,String storeId) {
+        SysConfig config = configService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         return fsStoreProductMapper.selectFsStoreProductByIdQuery(productId,storeId,medicalMallConfig);
     }
 
@@ -701,26 +777,36 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
 
     @Override
     public List<FsStoreProductListQueryVO> selectFsStoreProductNewQuery(int count) {
+        SysConfig config = configService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         return fsStoreProductMapper.selectFsStoreProductNewQuery(count,medicalMallConfig);
     }
 
     @Override
     public List<FsStoreProductListQueryVO> selectFsStoreProductHotQuery(int count) {
+        SysConfig config = configService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         return fsStoreProductMapper.selectFsStoreProductHotQuery(count,medicalMallConfig);
     }
 
     @Override
     public List<FsStoreProductListQueryVO> selectFsStoreProductGoodQuery(int count) {
+        SysConfig config = configService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         return fsStoreProductMapper.selectFsStoreProductGoodQuery(count,medicalMallConfig);
     }
 
     @Override
     public List<FsStoreProductListQueryVO> selectFsStoreProductTuiListQuery() {
+        SysConfig config = configService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         return fsStoreProductMapper.selectFsStoreProductTuiListQuery(medicalMallConfig);
     }
 
     @Override
     public List<FsStoreProductListQueryVO> selectFsStoreProductGoodListQuery() {
+        SysConfig config = configService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         return fsStoreProductMapper.selectFsStoreProductGoodListQuery(medicalMallConfig);
     }
 
@@ -1034,10 +1120,28 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
     }
 
     @Override
-    public List<FsStoreProductActivityListVO> selectFsStoreProductByIdsAudit(String productIds) {
+    public List<FsStoreProductActivityListVO> selectFsStoreProductByIdsAudit(String productIds) {SysConfig config = configService.selectConfigByConfigKey("medicalMall.func.switch");
+        MedicalMallConfig medicalMallConfig = JSON.parseObject(config.getConfigValue(), MedicalMallConfig.class);
         return fsStoreProductMapper.selectFsStoreProductByIdsAudit(productIds,medicalMallConfig);
     }
 
+    @Override
+    public List<Map<String, String>> getStoreProductColumns() {
+        List<Map<String, String> > list = fsStoreProductMapper.getStoreProductColumns();
+        List<Map<String, String>> result = new ArrayList<>();
+        for (Map<String, String> column : list) {
+            Map<String, String> camelCaseColumn = new HashMap<>();
+            String columnName = column.get("colName");
+            String camelCaseName = com.fs.common.utils.StringUtils.toCamelCase(columnName);;
+            camelCaseColumn.put("colName", camelCaseName);
+            camelCaseColumn.put("colComment", column.get("colComment"));
+            result.add(camelCaseColumn);
+        }
+
+        return result;
+    }
+
+
     @Override
     public List<FsStoreProductScrm> selectProductByIds(Long[] productIds) {
         return fsStoreProductMapper.selectProductByIds(productIds);

+ 42 - 8
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreScrmServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fs.hisStore.service.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.DateUtils;
@@ -24,6 +25,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.lang.reflect.Field;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -113,18 +115,17 @@ public class FsStoreScrmServiceImpl implements IFsStoreScrmService
         fsStore.setUpdateTime(DateUtils.getNowDate());
         storeAuditLogUtil.addOperLog(fsStore.getStoreId());
         FsStoreScrm oldFsStore = fsStoreMapper.selectFsStoreByStoreId(fsStore.getStoreId());
-        String isAudit = configUtil.generateConfigByKey("medicalMall.func.switch").getString("isAudit");
+        Boolean isAudit = configUtil.generateConfigByKey("medicalMall.func.switch").getBoolean("isAudit");
         try {
-            if ("1".equals(isAudit)) {
+            if (isAudit != null && isAudit) {
                 if (fsStore.getIsAudit() != null && 1 == fsStore.getIsAudit()) {
                     Map<String, Object> diff = getDiff(oldFsStore, fsStore);
                     Set<String> diff_columns = diff.keySet();
-                    String passColumnStr = configUtil.generateConfigByKey("medicalMall.func.switch").getString("pass_columns");
-                    if(StringUtils.isNotEmpty(passColumnStr)){
-                        List<String> pass_columns = Arrays.asList(passColumnStr.split(","));
-                        //判断diff_columns是否在pass_columns中,不是则将isAudit设置为0
+                    JSONArray storeColumns = configUtil.generateConfigByKey("medicalMall.func.switch").getJSONArray("storeColumns");
+                    if(StringUtils.isNotEmpty(storeColumns)){
+                        //判断diff_columns是否在storeColumns中,不是则将isAudit设置为0
                         for (String column : diff_columns) {
-                            if (!pass_columns.contains(column)) {
+                            if (!storeColumns.contains(column)) {
                                 fsStore.setIsAudit(0);
                                 break;
                             }
@@ -151,7 +152,17 @@ public class FsStoreScrmServiceImpl implements IFsStoreScrmService
             field.setAccessible(true);
             Object value1 = field.get(obj1);
             Object value2 = field.get(obj2);
-            if (!Objects.equals(value1, value2)) {
+            // BigDecimal类型特殊处理
+            if (value1 instanceof BigDecimal && value2 instanceof BigDecimal) {
+                BigDecimal bd1 = (BigDecimal) value1;
+                BigDecimal bd2 = (BigDecimal) value2;
+                // 使用compareTo方法比较,避免精度问题
+                if (bd1.compareTo(bd2) != 0) {
+                    diff.put(field.getName(), new Object[]{value1, value2});
+                }
+            }
+            // 其他类型使用默认比较
+            else if (!Objects.equals(value1, value2)) {
                 diff.put(field.getName(), new Object[]{value1, value2});
             }
         }
@@ -263,5 +274,28 @@ public class FsStoreScrmServiceImpl implements IFsStoreScrmService
         return fsStoreMapper.selectFsAllStoreList();
     }
 
+    @Override
+    public List<Map<String, String>> getStoreColumns() {
+        List<Map<String, String> > list = fsStoreMapper.getStoreColumns();
+        List<Map<String, String>> result = new ArrayList<>();
+
+        for (Map<String, String> column : list) {
+            Map<String, String> camelCaseColumn = new HashMap<>();
+            String columnName = column.get("colName");
+            String camelCaseName = StringUtils.toCamelCase(columnName);
+            camelCaseColumn.put("colName", camelCaseName);
+            camelCaseColumn.put("colComment", column.get("colComment"));
+            result.add(camelCaseColumn);
+        }
+
+        return result;
+    }
+
+    @Override
+    public List<FsStoreScrm> selectFsStoreListOption(FsStoreScrm fsStore) {
+        return fsStoreMapper.selectFsStoreListOption(fsStore);
+    }
+
+
 }
 

+ 3 - 2
fs-service/src/main/java/com/fs/hisStore/service/impl/IFsStoreRecommendScrmServiceImpl.java

@@ -5,6 +5,7 @@ import com.fs.common.utils.DateUtils;
 import com.fs.hisStore.domain.FsStoreRecommendScrm;
 import com.fs.hisStore.mapper.FsStoreRecommendScrmMapper;
 import com.fs.hisStore.service.IFsStoreRecommendScrmService;
+import com.fs.hisStore.vo.FsStoreRecommendScrmVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -41,7 +42,7 @@ public class IFsStoreRecommendScrmServiceImpl implements IFsStoreRecommendScrmSe
      * @return 店铺推荐
      */
     @Override
-    public List<FsStoreRecommendScrm> selectFsStoreRecommendScrmList(FsStoreRecommendScrm fsStoreRecommendScrm) {
+    public List<FsStoreRecommendScrmVo> selectFsStoreRecommendScrmList(FsStoreRecommendScrm fsStoreRecommendScrm) {
         return fsStoreRecommendScrmMapper.selectFsStoreRecommendScrmList(fsStoreRecommendScrm);
     }
 
@@ -52,7 +53,7 @@ public class IFsStoreRecommendScrmServiceImpl implements IFsStoreRecommendScrmSe
      * @return 店铺推荐集合
      */
     @Override
-    public List<FsStoreRecommendScrm> selectValidRecommendList(FsStoreRecommendScrm fsStoreRecommendScrm) {
+    public List<FsStoreRecommendScrmVo> selectValidRecommendList(FsStoreRecommendScrm fsStoreRecommendScrm) {
         return fsStoreRecommendScrmMapper.selectValidRecommendList(fsStoreRecommendScrm);
     }
 

+ 51 - 0
fs-service/src/main/java/com/fs/hisStore/vo/FsStoreRecommendScrmVo.java

@@ -0,0 +1,51 @@
+package com.fs.hisStore.vo;
+
+import com.fs.common.annotation.Excel;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 店铺推荐对象 fs_store_recommend_scrm
+ *
+ * @author fs
+ * @date 2023-06-15
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class FsStoreRecommendScrmVo extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键ID */
+    private Long id;
+
+    /** 店铺ID */
+    private Long storeId;
+
+    /** 店铺名称 */
+    @Excel(name = "店铺名称")
+    private String storeName;
+
+    /** 排序值,数值越小越靠前 */
+    @Excel(name = "排序值")
+    private Integer sortOrder;
+
+    /** 推荐类型(HOT热门,NEW新品,GENERAL普通推荐) */
+    private String recommendType;
+
+    /** 状态(0禁用,1启用) */
+    @Excel(name = "状态", readConverterExp = "0=禁用,1=启用")
+    private Integer status;
+
+    /** 权重值,用于综合排序 */
+    private Integer weight;
+
+    /** 推荐理由 */
+    private String recommendReason;
+
+    /**
+     * 店铺图片
+     * **/
+    private String logoUrl;
+}

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

@@ -113,7 +113,7 @@ public interface SopUserLogsMapper {
 
     @DataSource(DataSourceType.SOP)
     @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 " +
+            "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, li.grade " +
             "from sop_user_logs ul  " +
             "INNER join  sop_user_logs_info li on ul.id=li.user_logs_id " +
             "        WHERE ul.id IN\n" +

+ 3 - 0
fs-service/src/main/java/com/fs/system/domain/SysDeptConfig.java

@@ -3,6 +3,8 @@ package com.fs.system.domain;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.fs.common.annotation.Excel;
@@ -21,6 +23,7 @@ import lombok.EqualsAndHashCode;
 public class SysDeptConfig extends BaseEntity{
 
     /** id */
+    @TableId(type = IdType.AUTO)
     private Long id;
 
     /** 部门ID */

+ 2 - 0
fs-service/src/main/java/com/fs/system/domain/SysDeptConfigLog.java

@@ -1,5 +1,6 @@
 package com.fs.system.domain;
 
+import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.fs.common.annotation.Excel;
 import lombok.Data;
@@ -17,6 +18,7 @@ import lombok.EqualsAndHashCode;
 public class SysDeptConfigLog extends BaseEntity{
 
     /** id */
+    @TableId(type = IdType.AUTO)
     private Long id;
 
     /** 部门ID */

+ 3 - 0
fs-service/src/main/java/com/fs/system/service/ISysDeptConfigService.java

@@ -67,4 +67,7 @@ public interface ISysDeptConfigService extends IService<SysDeptConfig>{
     void addRedMoney(Long deptId, BigDecimal num, LoginUser loginUser);
 
     void addFlowNum(Long deptId, BigDecimal money, LoginUser loginUser);
+
+    SysDeptConfig getDeptConfig(Long deptId, LoginUser loginUser);
+    SysDeptConfig getDeptConfig(Long deptId);
 }

+ 21 - 6
fs-service/src/main/java/com/fs/system/service/impl/SysDeptConfigServiceImpl.java

@@ -6,13 +6,17 @@ import java.time.LocalDate;
 import java.util.Date;
 import java.util.List;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.fs.common.core.domain.model.LoginUser;
 import com.fs.common.utils.DateUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fs.company.service.ICompanyTrafficRecordService;
+import com.fs.system.domain.SysConfig;
+import com.fs.system.mapper.SysConfigMapper;
 import com.fs.system.service.ISysDeptConfigLogService;
 import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.fs.system.mapper.SysDeptConfigMapper;
 import com.fs.system.domain.SysDeptConfig;
@@ -30,7 +34,7 @@ public class SysDeptConfigServiceImpl extends ServiceImpl<SysDeptConfigMapper, S
 
 
     private final ISysDeptConfigLogService sysDeptConfigLogService;
-    private final ICompanyTrafficRecordService companyTrafficRecordService;
+    private final SysConfigMapper sysConfigMapper;
 
     /**
      * 查询部门配置
@@ -113,7 +117,6 @@ public class SysDeptConfigServiceImpl extends ServiceImpl<SysDeptConfigMapper, S
         Long padNum = deptConfig.getPadNum() == null ? 0L : deptConfig.getPadNum();
         deptConfig.setPadNum(num.longValue());
         long n = num - padNum;
-        deptConfig.setPadNumSub((deptConfig.getPadNumSub() == null ? 0L : deptConfig.getPadNumSub()) + n);
         deptConfig.setPadTime(endTime);
         sysDeptConfigLogService.addLog(deptId, 2, n >= 0 ? 0 : 1, num.toString(), padNum.toString(), deptConfig.getPadNum().toString(), loginUser.getUsername(), "");
         updateById(deptConfig);
@@ -136,16 +139,23 @@ public class SysDeptConfigServiceImpl extends ServiceImpl<SysDeptConfigMapper, S
         SysDeptConfig deptConfig = getDeptConfig(deptId, loginUser);
         deptConfig.setUpdateBy(loginUser.getUsername());
         deptConfig.setUpdateTime(new Date());
-        Long l = companyTrafficRecordService.trafficConversion(money.longValue());
+        Long l = trafficConversion(money.longValue());
         long flowNum = deptConfig.getFlowNum() == null ? 0 : deptConfig.getFlowNum();
         deptConfig.setFlowNum(flowNum + l);
         sysDeptConfigLogService.addLog(deptId, 1, 0, l.toString(), flowNum + "", deptConfig.getFlowNum().toString(), loginUser.getUsername(), "");
         updateById(deptConfig);
 
     }
-
-    private SysDeptConfig getDeptConfig(Long deptId, LoginUser loginUser){
-        SysDeptConfig one = getOne(new QueryWrapper<SysDeptConfig>().eq("dept_id", deptId));
+    public Long trafficConversion(Long amount) {
+        SysConfig config = sysConfigMapper.selectConfigByConfigKey("statis.config");
+        JSONObject jsonObject = JSONObject.parseObject(config.getConfigValue());
+        float trafficPrice = jsonObject.getFloatValue("trafficPrice");
+        double trafficGB = amount / trafficPrice;
+        return (long) (trafficGB * 1024 * 1024);
+    }
+    @Override
+    public SysDeptConfig getDeptConfig(Long deptId, LoginUser loginUser){
+        SysDeptConfig one = getDeptConfig(deptId);
         if(one == null){
             one = new SysDeptConfig();
             one.setDeptId(deptId);
@@ -155,4 +165,9 @@ public class SysDeptConfigServiceImpl extends ServiceImpl<SysDeptConfigMapper, S
         }
         return one;
     }
+
+    @Override
+    public SysDeptConfig getDeptConfig(Long deptId){
+        return getOne(new QueryWrapper<SysDeptConfig>().eq("dept_id", deptId));
+    }
 }

+ 2 - 2
fs-service/src/main/resources/application-config-druid-jnlzjk.yml

@@ -37,8 +37,8 @@ wx:
       port: 6379
       timeout: 2000
     configs:
-      - appId: wxce847c8ebe5e62aa # 第一个公众号的appid  //公众号名称:济南联智健康
-        secret: 37f7c5e3b7ff07794343957f7ced8de4 # 公众号的appsecret--济南联智健康
+      - appId: wxd6905bed94e45ef0 # 第一个公众号的appid  //公众号名称:济南联智健康
+        secret: a7a59d1536e9eae16108a5ad627fa4a3 # 公众号的appsecret--济南联智健康
         token: PPKOdAlCoMO # 接口配置里的Token值
         aesKey: Eswa6VjwtVMCcw03qZy6fWllgrv5aytIA1SZPEU0kU2 # 接口配置里的EncodingAESKey值
 aifabu:  #爱链接

+ 6 - 16
fs-service/src/main/resources/application-dev-yjb.yml

@@ -27,25 +27,15 @@ spring:
                 # #连接池最大阻塞等待时间(使用负值表示没有限制)
                 max-wait: -1ms
     datasource:
-        clickhouse:
-            type: com.alibaba.druid.pool.DruidDataSource
-            driverClassName: com.clickhouse.jdbc.ClickHouseDriver
-            url: jdbc:clickhouse://1.14.104.71:8123/sop_test?compress=0&use_server_time_zone=true&use_client_time_zone=false&timezone=Asia/Shanghai
-            username: default
-            password: rt2024
-            initialSize: 10
-            maxActive: 100
-            minIdle: 10
-            maxWait: 6000
         mysql:
             type: com.alibaba.druid.pool.DruidDataSource
             driverClassName: com.mysql.cj.jdbc.Driver
             druid:
                 # 主库数据源
                 master:
-                    url: jdbc:mysql://139.186.77.83:3306/yjb_dev?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-                    username: Rtroot
-                    password: Rtroot
+                    url: jdbc:mysql://nj-cdb-4tbz4oqv.sql.tencentcdb.com:25247/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    username: root
+                    password: Ylrz147..
                 # 初始连接数
                 initialSize: 5
                 # 最小连接池数量
@@ -91,9 +81,9 @@ spring:
             druid:
                 # 主库数据源
                 master:
-                    url: jdbc:mysql://139.186.77.83:3306/his_sop?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-                    username: Rtroot
-                    password: Rtroot
+                  url: jdbc:mysql://nj-cdb-4tbz4oqv.sql.tencentcdb.com:25247/fs_his_sop?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                  username: root
+                  password: Ylrz147..
                 # 初始连接数
                 initialSize: 5
                 # 最小连接池数量

+ 37 - 0
fs-service/src/main/resources/mapper/company/CompanyTrafficRecordLogMapper.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.company.mapper.CompanyTrafficRecordLogMapper">
+
+    <select id="list" resultType="com.fs.company.domain.CompanyTrafficRecordLog">
+        select a.* from company_traffic_record_log a inner join company b on a.company_id = b.company_id
+        <where>
+            <if test="companyId != null">
+                and a.company_id = #{companyId}
+            </if>
+            <if test="companyIds != null">
+                and a.company_id in <foreach collection="companyIds" open="(" separator="," close=")" item="item">#{item}</foreach>
+            </if>
+            <if test="userId != null">
+                and a.user_id = #{userId}
+            </if>
+            <if test="deptId != null">
+                and b.dept_id = #{deptId}
+            </if>
+            <if test="userName != null">
+                AND a.user_name LIKE concat('%',#{userName},'%')
+            </if>
+            <if test="operationType != null">
+                and a.operation_type = #{operationType}
+            </if>
+            <if test="createTimeStart != null">
+                AND a.create_time &gt;= #{createTimeStart}
+            </if>
+            <if test="createTimeEnd != null">
+                AND a.create_time &lt;= #{createTimeEnd}
+            </if>
+        </where>
+        order by create_time desc
+    </select>
+</mapper>

+ 4 - 0
fs-service/src/main/resources/mapper/course/FsCourseRedPacketLogMapper.xml

@@ -174,4 +174,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         inner join fs_user fu on fu.user_id = fcrpl.user_id and date(fu.create_time) = CURDATE()
         where fcrpl.company_user_id = #{companyUserId}
     </select>
+
+    <select id="selectFsCourseRedPacketLogHourseByCompany" resultType="com.fs.company.vo.RedPacketMoneyVO">
+        SELECT a.company_id, SUM(amount) as money  FROM fs_course_red_packet_log a WHERE a.create_time &gt;= #{startTime} AND a.create_time &lt;= #{endTime} GROUP BY a.company_id
+    </select>
 </mapper>

+ 10 - 0
fs-service/src/main/resources/mapper/course/FsCourseTrafficLogMapper.xml

@@ -280,4 +280,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
     </select>
 
+    <select id="sumTrafficByCompanyYesterday" resultType="java.lang.Long">
+        SELECT
+            SUM(a.internet_traffic) / 1024 AS totalInternetTraffic
+        FROM
+            fs_course_traffic_log a
+        WHERE
+        a.company_id = #{companyId}
+        and a.create_time &gt;= #{startTime}
+        AND a.create_time &lt;= #{endTime}
+    </select>
 </mapper>

+ 1 - 1
fs-service/src/main/resources/mapper/course/FsUserCourseVideoMapper.xml

@@ -333,7 +333,7 @@
         AND ccut.course_id = fcpd.course_id
         AND ccut.video_id = fcpd.video_id
         AND ccut.company_user_id = #{params.companyUserId}
-        where course.is_del = 0 and fcp.del_flag = '0' and fcpd.del_flag = '0'
+        where course.is_del = 0 and fcp.del_flag = '0' and fcpd.del_flag = '0' AND fcpd.`status`=1
         <if test="params.companyId != null">
             and FIND_IN_SET(#{params.companyId}, fcp.company_id)
         </if>

+ 34 - 18
fs-service/src/main/resources/mapper/hisStore/FsStoreRecommendScrmMapper.xml

@@ -26,30 +26,46 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select id, store_id, store_name, sort_order, begin_time, end_time, recommend_type, status, weight, recommend_reason, create_by, create_time, update_by, update_time, remark from fs_store_recommend_scrm
     </sql>
 
-    <select id="selectFsStoreRecommendScrmList" parameterType="FsStoreRecommendScrm" resultMap="FsStoreRecommendScrmResult">
-        <include refid="selectFsStoreRecommendScrmVo"/>
+    <select id="selectFsStoreRecommendScrmList" resultType="com.fs.hisStore.vo.FsStoreRecommendScrmVo">
+        SELECT
+        srs.*,
+        ss.logo_url
+        FROM
+        fs_store_recommend_scrm srs
+        LEFT JOIN fs_store_scrm ss ON srs.store_id = ss.store_id
         <where>
-            <if test="storeId != null "> and store_id = #{storeId}</if>
-            <if test="storeName != null  and storeName != ''"> and store_name like concat('%', #{storeName}, '%')</if>
-            <if test="sortOrder != null "> and sort_order = #{sortOrder}</if>
-            <if test="beginTime != null "> and begin_time &gt;= #{beginTime}</if>
-            <if test="endTime != null "> and end_time &lt;= #{endTime}</if>
-            <if test="recommendType != null  and recommendType != ''"> and recommend_type = #{recommendType}</if>
-            <if test="status != null "> and status = #{status}</if>
-            <if test="weight != null "> and weight = #{weight}</if>
+            <if test="storeId != null "> and srs.store_id = #{storeId}</if>
+            <if test="storeName != null  and storeName != ''"> and srs.store_name like concat('%', #{storeName}, '%')</if>
+            <if test="sortOrder != null "> and srs.sort_order = #{sortOrder}</if>
+            <if test="beginTime != null "> and srs.begin_time &gt;= #{beginTime}</if>
+            <if test="endTime != null "> and srs.end_time &lt;= #{endTime}</if>
+            <if test="recommendType != null  and recommendType != ''"> and srs.recommend_type = #{recommendType}</if>
+            <if test="status != null "> and srs.status = #{status}</if>
+            <if test="weight != null "> and srs.weight = #{weight}</if>
         </where>
-        order by sort_order asc, weight desc, create_time desc
+        ORDER BY
+        srs.sort_order ASC,
+        srs.weight DESC,
+        srs.create_time DESC
     </select>
 
-    <select id="selectValidRecommendList" parameterType="FsStoreRecommendScrm" resultMap="FsStoreRecommendScrmResult">
-        <include refid="selectFsStoreRecommendScrmVo"/>
+    <select id="selectValidRecommendList" resultType="com.fs.hisStore.vo.FsStoreRecommendScrmVo">
+        SELECT
+        srs.*,
+        ss.logo_url
+        FROM
+        fs_store_recommend_scrm srs
+        LEFT JOIN fs_store_scrm ss ON srs.store_id = ss.store_id
         <where>
-            status = 1
-            and (begin_time is null or begin_time &lt;= now())
-            and (end_time is null or end_time &gt;= now())
-            <if test="recommendType != null  and recommendType != ''"> and recommend_type = #{recommendType}</if>
+            srs.status = 1
+            and (srs.begin_time is null or srs.begin_time &lt;= now())
+            and (srs.end_time is null or srs.end_time &gt;= now())
+            <if test="recommendType != null  and recommendType != ''"> and srs.recommend_type = #{recommendType}</if>
         </where>
-        order by sort_order asc, weight desc, create_time desc
+        ORDER BY
+        srs.sort_order ASC,
+        srs.weight DESC,
+        srs.create_time DESC
     </select>
 
     <insert id="insertFsStoreRecommendScrm" parameterType="FsStoreRecommendScrm">

+ 3 - 2
fs-user-app/src/main/java/com/fs/app/controller/store/StoreRecommendScrmController.java

@@ -7,6 +7,7 @@ import com.fs.common.annotation.Log;
 import com.fs.common.enums.BusinessType;
 import com.fs.hisStore.domain.FsStoreRecommendScrm;
 import com.fs.hisStore.service.IFsStoreRecommendScrmService;
+import com.fs.hisStore.vo.FsStoreRecommendScrmVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -34,7 +35,7 @@ public class StoreRecommendScrmController extends BaseController
     public TableDataInfo list(FsStoreRecommendScrm fsStoreRecommendScrm)
     {
         startPage();
-        List<FsStoreRecommendScrm> list = fsStoreRecommendService.selectFsStoreRecommendScrmList(fsStoreRecommendScrm);
+        List<FsStoreRecommendScrmVo> list = fsStoreRecommendService.selectFsStoreRecommendScrmList(fsStoreRecommendScrm);
         return getDataTable(list);
     }
 
@@ -88,7 +89,7 @@ public class StoreRecommendScrmController extends BaseController
     public TableDataInfo validList(FsStoreRecommendScrm fsStoreRecommendScrm)
     {
         startPage();
-        List<FsStoreRecommendScrm> list = fsStoreRecommendService.selectValidRecommendList(fsStoreRecommendScrm);
+        List<FsStoreRecommendScrmVo> list = fsStoreRecommendService.selectValidRecommendList(fsStoreRecommendScrm);
         return getDataTable(list);
     }
 }