瀏覽代碼

医健宝需求变更,配置加载方式修改

吴树波 4 周之前
父節點
當前提交
a1c407559e
共有 40 個文件被更改,包括 464 次插入138 次删除
  1. 27 3
      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. 7 0
      fs-admin/src/main/java/com/fs/his/controller/FsCompanyController.java
  7. 11 0
      fs-admin/src/main/java/com/fs/his/controller/FsCompanyDeductController.java
  8. 40 0
      fs-admin/src/main/java/com/fs/his/controller/FsCompanyRechargeController.java
  9. 0 20
      fs-admin/src/main/java/com/fs/hisStore/controller/ConfigInitController.java
  10. 0 3
      fs-admin/src/main/java/com/fs/web/controller/system/SysLoginController.java
  11. 20 0
      fs-qw-task/src/main/java/com/fs/app/task/qwTask.java
  12. 6 0
      fs-service/src/main/java/com/fs/company/domain/Company.java
  13. 2 1
      fs-service/src/main/java/com/fs/company/domain/CompanyTrafficRecordLog.java
  14. 3 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyDeductMapper.java
  15. 3 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyMoneyLogsMapper.java
  16. 3 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyRechargeMapper.java
  17. 4 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyTrafficRecordLogMapper.java
  18. 9 8
      fs-service/src/main/java/com/fs/company/mapper/CompanyTrafficRecordMapper.java
  19. 3 0
      fs-service/src/main/java/com/fs/company/param/CompanyMoneyLogsParam.java
  20. 5 0
      fs-service/src/main/java/com/fs/company/param/CompanyTrafficRecordChargeParam.java
  21. 1 0
      fs-service/src/main/java/com/fs/company/param/CompanyTrafficRecordLogQueryParam.java
  22. 1 0
      fs-service/src/main/java/com/fs/company/param/CompanyTrafficRecordQueryParam.java
  23. 50 3
      fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java
  24. 9 8
      fs-service/src/main/java/com/fs/company/service/impl/CompanyTrafficRecordLogServiceImpl.java
  25. 78 35
      fs-service/src/main/java/com/fs/company/service/impl/CompanyTrafficRecordServiceImpl.java
  26. 1 0
      fs-service/src/main/java/com/fs/company/vo/CompanyDeductVO.java
  27. 1 0
      fs-service/src/main/java/com/fs/company/vo/CompanyRechargeVO.java
  28. 1 0
      fs-service/src/main/java/com/fs/course/config/CourseConfig.java
  29. 1 3
      fs-service/src/main/java/com/fs/course/mapper/FsCourseTrafficLogMapper.java
  30. 2 18
      fs-service/src/main/java/com/fs/hisStore/config/MedicalMallConfig.java
  31. 6 2
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreCartScrmServiceImpl.java
  32. 7 2
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductAttrValueScrmServiceImpl.java
  33. 18 4
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductScrmServiceImpl.java
  34. 3 0
      fs-service/src/main/java/com/fs/system/domain/SysDeptConfig.java
  35. 2 0
      fs-service/src/main/java/com/fs/system/domain/SysDeptConfigLog.java
  36. 3 0
      fs-service/src/main/java/com/fs/system/service/ISysDeptConfigService.java
  37. 21 6
      fs-service/src/main/java/com/fs/system/service/impl/SysDeptConfigServiceImpl.java
  38. 6 16
      fs-service/src/main/resources/application-dev-yjb.yml
  39. 37 0
      fs-service/src/main/resources/mapper/company/CompanyTrafficRecordLogMapper.xml
  40. 10 0
      fs-service/src/main/resources/mapper/course/FsCourseTrafficLogMapper.xml

+ 27 - 3
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,6 +68,8 @@ public class IndexStatisticsController {
         if(userType == null) {
             userType = 0;
         }
+        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){
@@ -144,6 +144,8 @@ public class IndexStatisticsController {
     @GetMapping("/rechargeComsumption")
     public R rechargeComsumption(StatisticsDeptCompanyParam param){
         ConsumptionBalanceDataDTO consumptionBalanceDataDTO = new ConsumptionBalanceDataDTO();
+        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){
@@ -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);
     }

+ 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());

+ 0 - 20
fs-admin/src/main/java/com/fs/hisStore/controller/ConfigInitController.java

@@ -1,20 +0,0 @@
-package com.fs.hisStore.controller;
-
-import com.fs.hisStore.config.MedicalMallConfig;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/configInit")
-public class ConfigInitController {
-
-    @Autowired
-    private MedicalMallConfig medicalMallConfig;
-
-    @GetMapping("/initMedicalMallConfig")
-    public void init() {
-        medicalMallConfig.init();
-    }
-}

+ 0 - 3
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;
-
     /**
      * 登录方法
      *

+ 20 - 0
fs-qw-task/src/main/java/com/fs/app/task/qwTask.java

@@ -1,6 +1,9 @@
 package com.fs.app.task;
 
+import com.alibaba.fastjson.JSON;
 import com.fs.app.taskService.*;
+import com.fs.company.service.ICompanyTrafficRecordService;
+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 +14,8 @@ 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.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
@@ -77,6 +82,10 @@ public class qwTask {
 
     @Autowired
     private QwExternalContactRatingMoreSevenDaysService qwExternalContactRatingMoreSevenDaysService;
+    @Autowired
+    private ICompanyTrafficRecordService companyTrafficRecordService;
+    @Autowired
+    private ISysConfigService configService;
 
     /**
      * 定时任务:检查SOP规则时间
@@ -374,4 +383,15 @@ 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);
+        if(medicalMallConfig.isStatics())
+            companyTrafficRecordService.refreshTraffic();
+    }
 }

+ 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;
 }

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

@@ -7,6 +7,7 @@ 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 +21,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 +34,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 +100,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 +154,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 +233,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 +296,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);
     }
     // 绑定小程序

+ 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;
     /**
      * 是否单销售观看(只能在第一次绑定的销售头上看课)
      */

+ 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);
 }

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

@@ -3,19 +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;
 
-@Getter
-@Component
+@Data
 public class MedicalMallConfig {
-
-    @Autowired
-    @JsonIgnore
-    private ConfigUtil configUtil;
     /*
     {"isMedicalMall":"0","statics":"1","isAudit":"0"}
     */
@@ -27,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 = jsonObject.getBoolean("isMedicalMall");
-            this.isStatics = jsonObject.getBoolean("statics");
-            this.isAudit = jsonObject.getBoolean("isAudit");
-            this.isResource = jsonObject.getBoolean("isResource");
-        }
-    }
-
-
 }

+ 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

+ 18 - 4
fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductScrmServiceImpl.java

@@ -39,6 +39,8 @@ 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;
@@ -81,6 +83,8 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
 
     @Autowired
     private ConfigUtil configUtil;
+    @Autowired
+    private ISysConfigService configService;
 
     @Autowired
     @Qualifier("hzOMSErpGoodsServiceImpl")
@@ -95,9 +99,6 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
     @Autowired
     private FsStoreScrmServiceImpl fsStoreScrmService;
 
-    @Autowired
-    private MedicalMallConfig medicalMallConfig;
-
     /**
      * 查询商品
      *
@@ -750,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);
     }
 
@@ -774,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);
     }
 
@@ -1107,7 +1120,8 @@ 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);
     }
 

+ 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));
+    }
 }

+ 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: Ylrz_1q2w3e4r5t6y
                 # 初始连接数
                 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: Ylrz_1q2w3e4r5t6y
                 # 初始连接数
                 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>

+ 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>