Browse Source

Merge branch 'refs/heads/master' into master_yzt_20250707

# Conflicts:
#	fs-company/src/main/java/com/fs/company/controller/store/FsStoreOrderController.java
#	fs-service/src/main/java/com/fs/his/mapper/FsPackageMapper.java
#	fs-service/src/main/java/com/fs/his/mapper/FsUserMapper.java
#	fs-store/src/main/java/com/fs/store/controller/store/FsStoreOrderController.java
xdd 6 days ago
parent
commit
943a17eb38
100 changed files with 1326 additions and 220 deletions
  1. 1 0
      fs-admin/src/main/java/com/fs/company/controller/CompanyController.java
  2. 13 0
      fs-admin/src/main/java/com/fs/course/controller/FsCourseProductOrderController.java
  3. 2 1
      fs-admin/src/main/java/com/fs/course/controller/FsUserCoursePeriodController.java
  4. 6 0
      fs-admin/src/main/java/com/fs/his/controller/FsCityController.java
  5. 1 0
      fs-admin/src/main/java/com/fs/his/controller/FsCompanyController.java
  6. 103 0
      fs-admin/src/main/java/com/fs/his/controller/FsFirstDiagnosisController.java
  7. 5 0
      fs-admin/src/main/java/com/fs/his/controller/FsStoreOrderController.java
  8. 3 1
      fs-admin/src/main/java/com/fs/his/controller/FsStorePaymentController.java
  9. 0 1
      fs-admin/src/main/java/com/fs/his/controller/FsStoreProductPackageController.java
  10. 15 2
      fs-admin/src/main/java/com/fs/his/controller/FsUserController.java
  11. 5 0
      fs-admin/src/main/java/com/fs/his/task/Task.java
  12. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsMaterialGroupScrmController.java
  13. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsMaterialScrmController.java
  14. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsMenuScrmController.java
  15. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsPrescribeDrugScrmController.java
  16. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsPrescribeScrmController.java
  17. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsShippingTemplatesFreeScrmController.java
  18. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsShippingTemplatesRegionScrmController.java
  19. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsShippingTemplatesScrmController.java
  20. 2 2
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreActivityScrmController.java
  21. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreAfterSalesItemScrmController.java
  22. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreAfterSalesScrmController.java
  23. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreAfterSalesStatusScrmController.java
  24. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCanvasScrmController.java
  25. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCartScrmController.java
  26. 2 2
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponIssueScrmController.java
  27. 2 2
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponIssueUserScrmController.java
  28. 2 2
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponScrmController.java
  29. 2 2
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponUserScrmController.java
  30. 62 7
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreHealthOrderScrmController.java
  31. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderAuditScrmController.java
  32. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderItemScrmController.java
  33. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderNoticeScrmController.java
  34. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderOfflineItemScrmController.java
  35. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderOfflineScrmController.java
  36. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderPromotionScrmController.java
  37. 26 11
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderScrmController.java
  38. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderStatisticsScrmController.java
  39. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderStatusScrmController.java
  40. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStorePaymentScrmController.java
  41. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductAttrScrmController.java
  42. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductAttrValueScrmController.java
  43. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductCategoryScrmController.java
  44. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductDetailsScrmController.java
  45. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductGroupScrmController.java
  46. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductPackageScrmController.java
  47. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductRelationScrmController.java
  48. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductReplyScrmController.java
  49. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductRuleScrmController.java
  50. 8 5
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductScrmController.java
  51. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductTemplateScrmController.java
  52. 134 0
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreScrmController.java
  53. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreShopScrmController.java
  54. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreShopStaffScrmController.java
  55. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreStatisticsScrmController.java
  56. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreVisitScrmController.java
  57. 50 0
      fs-admin/src/main/java/com/fs/hisStore/controller/SysOperlogScrmController.java
  58. 1 1
      fs-admin/src/main/java/com/fs/hisStore/task/CrmTask.java
  59. 1 1
      fs-admin/src/main/java/com/fs/hisStore/task/ErpTask.java
  60. 92 5
      fs-admin/src/main/java/com/fs/hisStore/task/MallStoreTask.java
  61. 1 1
      fs-admin/src/main/java/com/fs/hisStore/task/stats/FsStatsMemberDailyTask.java
  62. 30 0
      fs-admin/src/main/java/com/fs/web/controller/system/SysConfigController.java
  63. 17 2
      fs-common/src/main/java/com/fs/common/annotation/Log.java
  64. 3 0
      fs-common/src/main/java/com/fs/common/core/redis/RedisCache.java
  65. 1 1
      fs-company-app/src/main/java/com/fs/app/controller/UserController.java
  66. 31 2
      fs-company/src/main/java/com/fs/company/controller/company/CompanyUserController.java
  67. 54 0
      fs-company/src/main/java/com/fs/company/controller/company/FsFirstDiagnosisController.java
  68. 154 0
      fs-company/src/main/java/com/fs/company/controller/course/FsCoursePlaySourceConfigController.java
  69. 2 1
      fs-company/src/main/java/com/fs/company/controller/course/FsUserCoursePeriodController.java
  70. 12 0
      fs-company/src/main/java/com/fs/company/controller/qw/SopUserLogsInfoController.java
  71. 19 2
      fs-company/src/main/java/com/fs/company/controller/store/FsStoreOrderController.java
  72. 10 2
      fs-company/src/main/java/com/fs/company/controller/store/FsUserAddressController.java
  73. 7 0
      fs-company/src/main/java/com/fs/company/controller/store/FsUserController.java
  74. 3 5
      fs-company/src/main/java/com/fs/company/controller/store/FsUserCouponController.java
  75. 1 0
      fs-company/src/main/java/com/fs/framework/config/SecurityConfig.java
  76. 0 59
      fs-company/src/main/java/com/fs/hisStore/controller/FsCityScrmController.java
  77. 31 0
      fs-doctor-app/src/main/java/com/fs/app/controller/DiagnosisController.java
  78. 69 9
      fs-framework/src/main/java/com/fs/framework/aspectj/LogAspect.java
  79. 26 3
      fs-framework/src/main/java/com/fs/framework/manager/factory/AsyncFactory.java
  80. 7 6
      fs-ipad-task/src/main/java/com/fs/app/service/IpadSendServer.java
  81. 15 9
      fs-ipad-task/src/main/java/com/fs/app/task/SendMsg.java
  82. 16 5
      fs-qw-api-msg/src/main/java/com/fs/app/controller/QwMsgController.java
  83. 56 16
      fs-qw-task/src/main/java/com/fs/app/taskService/impl/SopLogsTaskServiceImpl.java
  84. 9 8
      fs-qwhook/src/main/java/com/fs/framework/config/MyBatisConfig.java
  85. 8 0
      fs-service/src/main/java/com/fs/company/domain/Company.java
  86. 1 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyMapper.java
  87. 2 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyUserMapper.java
  88. 6 0
      fs-service/src/main/java/com/fs/company/service/ICompanyService.java
  89. 3 0
      fs-service/src/main/java/com/fs/company/service/ICompanyUserService.java
  90. 79 1
      fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java
  91. 28 5
      fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java
  92. 3 0
      fs-service/src/main/java/com/fs/config/cloud/CloudHostProper.java
  93. 7 1
      fs-service/src/main/java/com/fs/course/config/CourseConfig.java
  94. 3 0
      fs-service/src/main/java/com/fs/course/domain/FsCourseLink.java
  95. 10 0
      fs-service/src/main/java/com/fs/course/domain/FsCoursePlaySourceConfig.java
  96. 3 0
      fs-service/src/main/java/com/fs/course/domain/FsCourseRealLink.java
  97. 1 0
      fs-service/src/main/java/com/fs/course/domain/FsUserCoursePeriodDays.java
  98. 22 0
      fs-service/src/main/java/com/fs/course/dto/FsOrderDeliveryNoteDTO.java
  99. 1 1
      fs-service/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java
  100. 1 0
      fs-service/src/main/java/com/fs/course/mapper/FsUserCoursePeriodDaysMapper.java

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

@@ -132,6 +132,7 @@ public class CompanyController extends BaseController
                 callerService.updateCompanyVoiceCaller(caller);
                 callerService.updateCompanyVoiceCaller(caller);
             }
             }
         }
         }
+        company.setUpdateMiniApp(true);
         return toAjax(companyService.updateCompany(company));
         return toAjax(companyService.updateCompany(company));
     }
     }
 
 

+ 13 - 0
fs-admin/src/main/java/com/fs/course/controller/FsCourseProductOrderController.java

@@ -69,6 +69,19 @@ public class FsCourseProductOrderController extends BaseController
         return util.exportExcel(list, "拍单商品订单数据");
         return util.exportExcel(list, "拍单商品订单数据");
     }
     }
 
 
+    /**
+     * 导出拍单商品订单列表
+     */
+    @PreAuthorize("@ss.hasPermi('course:fsCourseProductOrder:decodeExport')")
+    @Log(title = "拍单商品订单", businessType = BusinessType.EXPORT)
+    @GetMapping("/decodeExport")
+    public AjaxResult decodeExport(FsCourseProductOrderListParam param)
+    {
+        List<FsCourseProductOrderVO> list = fsCourseProductOrderService.selectFsCourseProductOrderDecodePhoneList(param);
+        ExcelUtil<FsCourseProductOrderVO> util = new ExcelUtil<FsCourseProductOrderVO>(FsCourseProductOrderVO.class);
+        return util.exportExcel(list, "拍单商品订单数据");
+    }
+
     /**
     /**
      * 获取拍单商品订单详细信息
      * 获取拍单商品订单详细信息
      */
      */

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

@@ -220,10 +220,11 @@ public class FsUserCoursePeriodController extends BaseController {
     public R periodCourseCount(@RequestBody PeriodCountParam param) {
     public R periodCourseCount(@RequestBody PeriodCountParam param) {
         PageHelper.startPage(param.getPageNum(), param.getPageSize());
         PageHelper.startPage(param.getPageNum(), param.getPageSize());
         List<FsPeriodCountVO> list = fsUserCoursePeriodDaysService.periodCourseCount(param);
         List<FsPeriodCountVO> list = fsUserCoursePeriodDaysService.periodCourseCount(param);
+        long count = fsUserCoursePeriodDaysService.periodCourseByCount(param);
         PageInfo<FsPeriodCountVO> pageInfo = new PageInfo<>(list);
         PageInfo<FsPeriodCountVO> pageInfo = new PageInfo<>(list);
         Map<String, Object> result = new HashMap<>();
         Map<String, Object> result = new HashMap<>();
         result.put("rows", pageInfo.getList());
         result.put("rows", pageInfo.getList());
-        result.put("total", pageInfo.getTotal());
+        result.put("total", count);
         return R.ok(result);
         return R.ok(result);
     }
     }
 
 

+ 6 - 0
fs-admin/src/main/java/com/fs/his/controller/FsCityController.java

@@ -129,4 +129,10 @@ public class FsCityController extends BaseController
         return R.ok().put("data",fsCityService.getCitysArea());
         return R.ok().put("data",fsCityService.getCitysArea());
     }
     }
 
 
+    @GetMapping("/getAllList")
+    public R getAllList(FsCity fsCity)
+    {
+        List<FsCity> list = fsCityService.selectFsCityList(fsCity);
+        return R.ok().put("data",list);
+    }
 }
 }

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

@@ -145,6 +145,7 @@ public class FsCompanyController extends BaseController
     public AjaxResult edit(@RequestBody Company company)
     public AjaxResult edit(@RequestBody Company company)
     {
     {
         company.setMoney(null);
         company.setMoney(null);
+        company.setUpdateMiniApp(true);
         return toAjax(companyService.updateCompany(company));
         return toAjax(companyService.updateCompany(company));
     }
     }
 
 

+ 103 - 0
fs-admin/src/main/java/com/fs/his/controller/FsFirstDiagnosisController.java

@@ -0,0 +1,103 @@
+package com.fs.his.controller;
+
+import java.util.List;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.his.domain.FsFirstDiagnosis;
+import com.fs.his.service.IFsFirstDiagnosisService;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.core.page.TableDataInfo;
+
+/**
+ * 初诊单Controller
+ * 
+ * @author fs
+ * @date 2025-09-01
+ */
+@RestController
+@RequestMapping("/his/fsFirstDiagnosis")
+public class FsFirstDiagnosisController extends BaseController
+{
+    @Autowired
+    private IFsFirstDiagnosisService fsFirstDiagnosisService;
+
+    /**
+     * 查询初诊单列表
+     */
+    @PreAuthorize("@ss.hasPermi('his:fsFirstDiagnosis:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsFirstDiagnosis fsFirstDiagnosis)
+    {
+        startPage();
+        List<FsFirstDiagnosis> list = fsFirstDiagnosisService.selectFsFirstDiagnosisList(fsFirstDiagnosis);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出初诊单列表
+     */
+    @PreAuthorize("@ss.hasPermi('his:fsFirstDiagnosis:export')")
+    @Log(title = "初诊单", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FsFirstDiagnosis fsFirstDiagnosis)
+    {
+        List<FsFirstDiagnosis> list = fsFirstDiagnosisService.selectFsFirstDiagnosisList(fsFirstDiagnosis);
+        ExcelUtil<FsFirstDiagnosis> util = new ExcelUtil<FsFirstDiagnosis>(FsFirstDiagnosis.class);
+        return util.exportExcel(list, "初诊单数据");
+    }
+
+    /**
+     * 获取初诊单详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('his:fsFirstDiagnosis:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(fsFirstDiagnosisService.selectFsFirstDiagnosisById(id));
+    }
+
+    /**
+     * 新增初诊单
+     */
+    @PreAuthorize("@ss.hasPermi('his:fsFirstDiagnosis:add')")
+    @Log(title = "初诊单", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsFirstDiagnosis fsFirstDiagnosis)
+    {
+        return toAjax(fsFirstDiagnosisService.insertFsFirstDiagnosis(fsFirstDiagnosis));
+    }
+
+    /**
+     * 修改初诊单
+     */
+    @PreAuthorize("@ss.hasPermi('his:fsFirstDiagnosis:edit')")
+    @Log(title = "初诊单", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsFirstDiagnosis fsFirstDiagnosis)
+    {
+        return toAjax(fsFirstDiagnosisService.updateFsFirstDiagnosis(fsFirstDiagnosis));
+    }
+
+    /**
+     * 删除初诊单
+     */
+    @PreAuthorize("@ss.hasPermi('his:fsFirstDiagnosis:remove')")
+    @Log(title = "初诊单", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(fsFirstDiagnosisService.deleteFsFirstDiagnosisByIds(ids));
+    }
+}

+ 5 - 0
fs-admin/src/main/java/com/fs/his/controller/FsStoreOrderController.java

@@ -118,6 +118,9 @@ public class FsStoreOrderController extends BaseController
     @Autowired
     @Autowired
     @Qualifier("JSTErpOrderServiceImpl")
     @Qualifier("JSTErpOrderServiceImpl")
     private IErpOrderService jSTOrderService;
     private IErpOrderService jSTOrderService;
+    @Autowired
+    @Qualifier("k9OrderScrmServiceImpl")
+    private IErpOrderService k9OrderService;
 
 
     @Autowired
     @Autowired
     SysConfigMapper sysConfigMapper;
     SysConfigMapper sysConfigMapper;
@@ -486,6 +489,8 @@ public class FsStoreOrderController extends BaseController
                     erpOrderService =  dfOrderService;
                     erpOrderService =  dfOrderService;
                 }else if(erpType == 5){
                 }else if(erpType == 5){
                     erpOrderService=jSTOrderService;
                     erpOrderService=jSTOrderService;
+                }else if(erpType == 6){
+                    erpOrderService=k9OrderService;
                 }
                 }
                 return erpOrderService;
                 return erpOrderService;
 
 

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

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

+ 0 - 1
fs-admin/src/main/java/com/fs/his/controller/FsStoreProductPackageController.java

@@ -153,7 +153,6 @@ public class FsStoreProductPackageController extends BaseController
         JSONArray jsonArray=JSONUtil.parseArray(fsStoreProductPackage.getProductList());
         JSONArray jsonArray=JSONUtil.parseArray(fsStoreProductPackage.getProductList());
         List<StorePackageProductDTO> goodsList=JSONUtil.toList(jsonArray, StorePackageProductDTO.class);
         List<StorePackageProductDTO> goodsList=JSONUtil.toList(jsonArray, StorePackageProductDTO.class);
         fsStoreProductPackage.setProducts(JSONUtil.toJsonStr(goodsList));
         fsStoreProductPackage.setProducts(JSONUtil.toJsonStr(goodsList));
-        fsStoreProductPackage.setCompanyId(0l);
 
 
         return toAjax(fsStoreProductPackageService.insertFsStoreProductPackage(fsStoreProductPackage));
         return toAjax(fsStoreProductPackageService.insertFsStoreProductPackage(fsStoreProductPackage));
     }
     }

+ 15 - 2
fs-admin/src/main/java/com/fs/his/controller/FsUserController.java

@@ -140,8 +140,21 @@ public class FsUserController extends BaseController
     {
     {
         startPage();
         startPage();
         List<FsUserVO> list = fsUserService.selectFsUserVOListByProject(fsUser);
         List<FsUserVO> list = fsUserService.selectFsUserVOListByProject(fsUser);
-        for (FsUserVO vo : list){
-            vo.setPhone(ParseUtils.parsePhone(vo.getPhone()));
+        boolean checkPhone = isCheckPhone();
+        for (FsUserVO fsUserVO : list) {
+            if(fsUserVO.getPhone() != null&&fsUserVO.getPhone()!=""){
+                if (!checkPhone){
+                    if (fsUserVO.getPhone().length()>11){
+                        fsUserVO.setPhone(decryptPhoneMk(fsUserVO.getPhone()));
+                    }else {
+                        fsUserVO.setPhone(fsUserVO.getPhone().replaceAll("(\\d{3})\\d*(\\d{4})", "$1****$2"));
+                    }
+                } else {
+                    if (fsUserVO.getPhone().length()>11) {
+                        fsUserVO.setPhone(decryptPhone(fsUserVO.getPhone()));
+                    }
+                }
+            }
         }
         }
         return getDataTable(list);
         return getDataTable(list);
     }
     }

+ 5 - 0
fs-admin/src/main/java/com/fs/his/task/Task.java

@@ -1091,6 +1091,9 @@ public class Task {
     @Autowired
     @Autowired
     @Qualifier("JSTErpOrderServiceImpl")
     @Qualifier("JSTErpOrderServiceImpl")
     private IErpOrderService jSTOrderService;
     private IErpOrderService jSTOrderService;
+    @Autowired
+    @Qualifier("k9OrderScrmServiceImpl")
+    private IErpOrderService k9OrderService;
 
 
     private IErpOrderService getErpService() {
     private IErpOrderService getErpService() {
         FsSysConfig sysConfig = configUtil.getSysConfig();
         FsSysConfig sysConfig = configUtil.getSysConfig();
@@ -1114,6 +1117,8 @@ public class Task {
                     erpOrderService =  dfOrderService;
                     erpOrderService =  dfOrderService;
                 }else if(erpType == 5){
                 }else if(erpType == 5){
                     erpOrderService=jSTOrderService;
                     erpOrderService=jSTOrderService;
+                }else if(erpType == 6){
+                    erpOrderService=k9OrderService;
                 }
                 }
                 return erpOrderService;
                 return erpOrderService;
 
 

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsMaterialGroupScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsMaterialGroupScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsMaterialScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsMaterialScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsMenuScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsMenuScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsPrescribeDrugScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsPrescribeDrugScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsPrescribeScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsPrescribeScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsShippingTemplatesFreeScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsShippingTemplatesFreeScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsShippingTemplatesRegionScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsShippingTemplatesRegionScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsShippingTemplatesScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsShippingTemplatesScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 2 - 2
fs-admin/src/main/java/com/fs/hisStore/FsStoreActivityScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreActivityScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;
@@ -25,7 +25,7 @@ import java.util.List;
  * @date 2022-11-18
  * @date 2022-11-18
  */
  */
 @RestController
 @RestController
-@RequestMapping("/store/store/storeActivity")
+@RequestMapping("/store/storeActivity")
 public class FsStoreActivityScrmController extends BaseController
 public class FsStoreActivityScrmController extends BaseController
 {
 {
     @Autowired
     @Autowired

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreAfterSalesItemScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreAfterSalesItemScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreAfterSalesScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreAfterSalesScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreAfterSalesStatusScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreAfterSalesStatusScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreCanvasScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCanvasScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreCartScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCartScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 2 - 2
fs-admin/src/main/java/com/fs/hisStore/FsStoreCouponIssueScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponIssueScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;
@@ -22,7 +22,7 @@ import java.util.List;
  * @date 2022-03-15
  * @date 2022-03-15
  */
  */
 @RestController
 @RestController
-@RequestMapping("/store/store/storeCouponIssue")
+@RequestMapping("/store/storeCouponIssue")
 public class FsStoreCouponIssueScrmController extends BaseController
 public class FsStoreCouponIssueScrmController extends BaseController
 {
 {
     @Autowired
     @Autowired

+ 2 - 2
fs-admin/src/main/java/com/fs/hisStore/FsStoreCouponIssueUserScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponIssueUserScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;
@@ -21,7 +21,7 @@ import java.util.List;
  * @date 2022-03-15
  * @date 2022-03-15
  */
  */
 @RestController
 @RestController
-@RequestMapping("/store/store/storeCouponIssueUser")
+@RequestMapping("/store/storeCouponIssueUser")
 public class FsStoreCouponIssueUserScrmController extends BaseController
 public class FsStoreCouponIssueUserScrmController extends BaseController
 {
 {
     @Autowired
     @Autowired

+ 2 - 2
fs-admin/src/main/java/com/fs/hisStore/FsStoreCouponScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;
@@ -26,7 +26,7 @@ import java.util.List;
  * @date 2022-03-15
  * @date 2022-03-15
  */
  */
 @RestController
 @RestController
-@RequestMapping("/store/store/storeCoupon")
+@RequestMapping("/store/storeCoupon")
 public class FsStoreCouponScrmController extends BaseController
 public class FsStoreCouponScrmController extends BaseController
 {
 {
     @Autowired
     @Autowired

+ 2 - 2
fs-admin/src/main/java/com/fs/hisStore/FsStoreCouponUserScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponUserScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;
@@ -23,7 +23,7 @@ import java.util.List;
  * @date 2022-03-15
  * @date 2022-03-15
  */
  */
 @RestController
 @RestController
-@RequestMapping("/store/store/storeCouponUser")
+@RequestMapping("/store/storeCouponUser")
 public class FsStoreCouponUserScrmController extends BaseController
 public class FsStoreCouponUserScrmController extends BaseController
 {
 {
     @Autowired
     @Autowired

+ 62 - 7
fs-admin/src/main/java/com/fs/hisStore/FsStoreHealthOrderScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreHealthOrderScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
@@ -6,11 +6,13 @@ import com.alibaba.fastjson.JSONObject;
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.service.ICompanyMoneyLogsService;
 import com.fs.company.service.ICompanyMoneyLogsService;
+import com.fs.course.dto.FsOrderDeliveryNoteDTO;
 import com.fs.erp.service.IErpOrderService;
 import com.fs.erp.service.IErpOrderService;
 import com.fs.his.service.IFsUserService;
 import com.fs.his.service.IFsUserService;
 import com.fs.hisStore.dto.StoreOrderProductDTO;
 import com.fs.hisStore.dto.StoreOrderProductDTO;
@@ -21,9 +23,8 @@ import com.fs.hisStore.vo.FsStoreOrderItemExportVO;
 import com.fs.hisStore.vo.FsStoreOrderVO;
 import com.fs.hisStore.vo.FsStoreOrderVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -51,6 +52,12 @@ public class FsStoreHealthOrderScrmController extends BaseController {
     @Autowired
     @Autowired
     private ICompanyMoneyLogsService moneyLogsService;
     private ICompanyMoneyLogsService moneyLogsService;
 
 
+    // 允许的文件扩展名
+    private static final String[] ALLOWED_EXCEL_EXTENSIONS = {".xlsx", ".xls"};
+
+    // 最大文件大小(5MB)
+    private static final long MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB
+
     /**
     /**
      * 查询健康商城订单列表
      * 查询健康商城订单列表
      */
      */
@@ -91,7 +98,7 @@ public class FsStoreHealthOrderScrmController extends BaseController {
     @Log(title = "健康商城订单", businessType = BusinessType.EXPORT)
     @Log(title = "健康商城订单", businessType = BusinessType.EXPORT)
     @GetMapping("/healthExport")
     @GetMapping("/healthExport")
     public AjaxResult export1(FsStoreOrderParam param) {
     public AjaxResult export1(FsStoreOrderParam param) {
-        if (param.getBeginTime().equals("") && param.getEndTime().equals("")){
+        if ("".equals(param.getBeginTime()) && "".equals(param.getEndTime())){
             param.setBeginTime(null);
             param.setBeginTime(null);
             param.setEndTime(null);
             param.setEndTime(null);
         }
         }
@@ -130,10 +137,10 @@ public class FsStoreHealthOrderScrmController extends BaseController {
 
 
 
 
     @PreAuthorize("@ss.hasPermi('store:healthStoreOrder:exportItems')")
     @PreAuthorize("@ss.hasPermi('store:healthStoreOrder:exportItems')")
-    @Log(title = "健康商城订单明细导出", businessType = BusinessType.EXPORT)
+    @Log(title = "商城订单明细导出", businessType = BusinessType.EXPORT)
     @GetMapping("/healthExportItems")
     @GetMapping("/healthExportItems")
     public AjaxResult exportItems1(FsStoreOrderParam param) {
     public AjaxResult exportItems1(FsStoreOrderParam param) {
-        if (param.getBeginTime().equals("") && param.getEndTime().equals("")){
+        if ("".equals(param.getBeginTime()) && "".equals(param.getEndTime())){
             param.setBeginTime(null);
             param.setBeginTime(null);
             param.setEndTime(null);
             param.setEndTime(null);
         }
         }
@@ -173,4 +180,52 @@ public class FsStoreHealthOrderScrmController extends BaseController {
         ExcelUtil<FsStoreOrderItemExportVO> util = new ExcelUtil<FsStoreOrderItemExportVO>(FsStoreOrderItemExportVO.class);
         ExcelUtil<FsStoreOrderItemExportVO> util = new ExcelUtil<FsStoreOrderItemExportVO>(FsStoreOrderItemExportVO.class);
         return util.exportExcel(list, "订单明细数据");
         return util.exportExcel(list, "订单明细数据");
     }
     }
+
+    //订单发货批量导入
+    @Log(title = "发货同步导入", businessType = BusinessType.IMPORT)
+    @PostMapping("/importDeliveryNoteExpress")
+    public R importDeliveryNoteExpress(@RequestParam("file") MultipartFile file) {
+        // 1. 检查文件是否为空
+        if (file.isEmpty()) {
+            return R.error("上传的文件不能为空");
+        }
+        // 2. 检查文件大小
+        if (file.getSize() > MAX_FILE_SIZE) {
+            return R.error("文件大小不能超过5MB");
+        }
+        // 3. 检查文件扩展名
+        String fileName = file.getOriginalFilename();
+        if (fileName == null || !isValidExcelFile(fileName)) {
+            return R.error("请上传Excel文件(.xlsx或.xls格式)");
+        }
+
+        ExcelUtil<FsOrderDeliveryNoteDTO> util=new ExcelUtil<>(FsOrderDeliveryNoteDTO.class);
+        try {
+            List<FsOrderDeliveryNoteDTO> dtoList = util.importExcel(file.getInputStream());
+            if(!dtoList.isEmpty()){
+                fsStoreOrderService.importDeliveryNoteExpress(dtoList);
+            }else {
+                R.error("操作失败,导入数据不能小于1条!");
+            }
+        }catch (Exception e){
+            e.getStackTrace();
+        }
+        return R.ok();
+    }
+
+    @GetMapping("/importDeliveryNoteExpressTemplate")
+    public AjaxResult importTemplate() {
+        ExcelUtil<FsOrderDeliveryNoteDTO> util = new ExcelUtil<>(FsOrderDeliveryNoteDTO.class);
+        return util.importTemplateExcel("订单发货导入模板");
+    }
+
+    // 检查文件是否为有效的Excel文件
+    private boolean isValidExcelFile(String fileName) {
+        for (String ext : ALLOWED_EXCEL_EXTENSIONS) {
+            if (fileName.toLowerCase().endsWith(ext)) {
+                return true;
+            }
+        }
+        return false;
+    }
 }
 }

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreOrderAuditScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderAuditScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.AjaxResult;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreOrderItemScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderItemScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreOrderNoticeScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderNoticeScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreOrderOfflineItemScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderOfflineItemScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreOrderOfflineScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderOfflineScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreOrderPromotionScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderPromotionScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;

+ 26 - 11
fs-admin/src/main/java/com/fs/hisStore/FsStoreOrderScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
@@ -84,11 +84,19 @@ public class FsStoreOrderScrmController extends BaseController {
     @Autowired
     @Autowired
     @Qualifier("wdtErpOrderServiceImpl")
     @Qualifier("wdtErpOrderServiceImpl")
     private IErpOrderService wdtOrderService;
     private IErpOrderService wdtOrderService;
-
+    @Autowired
+    @Qualifier("hzOMSErpOrderServiceImpl")
+    private IErpOrderService hzOMSErpOrderService;
+    @Autowired
+    @Qualifier("dfOrderServiceImpl")
+    private IErpOrderService dfOrderService;
     @Autowired
     @Autowired
     @Qualifier("k9OrderScrmServiceImpl")
     @Qualifier("k9OrderScrmServiceImpl")
     private IErpOrderService k9OrderService;
     private IErpOrderService k9OrderService;
     @Autowired
     @Autowired
+    @Qualifier("JSTErpOrderServiceImpl")
+    private IErpOrderService jSTOrderService;
+    @Autowired
     private ConfigUtil configUtil;
     private ConfigUtil configUtil;
     @Autowired
     @Autowired
     private IFsStoreOrderAuditLogScrmService orderAuditLogService;
     private IFsStoreOrderAuditLogScrmService orderAuditLogService;
@@ -102,15 +110,22 @@ public class FsStoreOrderScrmController extends BaseController {
             //判断erp类型
             //判断erp类型
             Integer erpType = erpConfig.getErpType();
             Integer erpType = erpConfig.getErpType();
             if (erpType != null) {
             if (erpType != null) {
-                if (erpType == 1) {
+                if (erpType == 1){
                     //管易
                     //管易
-                    erpOrderService = gyOrderService;
-                } else if (erpType == 2) {
-                    //旺店通
-                    erpOrderService = wdtOrderService;
-                } else if (erpType == 3) {
+                    erpOrderService =  gyOrderService;
+                } else if (erpType == 2){
                     //旺店通
                     //旺店通
-                    erpOrderService = k9OrderService;
+                    erpOrderService =  wdtOrderService;
+                } else if (erpType == 3){
+                    //
+                    erpOrderService =  hzOMSErpOrderService;
+                } else if (erpType == 4){
+                    //代服
+                    erpOrderService =  dfOrderService;
+                }else if(erpType == 5){
+                    erpOrderService=jSTOrderService;
+                }else if(erpType == 6){
+                    erpOrderService=k9OrderService;
                 }
                 }
             }
             }
         }
         }
@@ -217,7 +232,7 @@ public class FsStoreOrderScrmController extends BaseController {
     @Log(title = "订单", businessType = BusinessType.EXPORT)
     @Log(title = "订单", businessType = BusinessType.EXPORT)
     @GetMapping("/export")
     @GetMapping("/export")
     public AjaxResult export(FsStoreOrderParam param) {
     public AjaxResult export(FsStoreOrderParam param) {
-        if (param.getBeginTime().equals("") && param.getEndTime().equals("")){
+        if ("".equals(param.getBeginTime()) && "".equals(param.getEndTime())){
             param.setBeginTime(null);
             param.setBeginTime(null);
             param.setEndTime(null);
             param.setEndTime(null);
         }
         }
@@ -262,7 +277,7 @@ public class FsStoreOrderScrmController extends BaseController {
     @Log(title = "订单明细导出", businessType = BusinessType.EXPORT)
     @Log(title = "订单明细导出", businessType = BusinessType.EXPORT)
     @GetMapping("/exportItems")
     @GetMapping("/exportItems")
     public AjaxResult exportItems(FsStoreOrderParam param) {
     public AjaxResult exportItems(FsStoreOrderParam param) {
-        if (param.getBeginTime().equals("") && param.getEndTime().equals("")){
+        if ("".equals(param.getBeginTime()) && "".equals(param.getEndTime())){
             param.setBeginTime(null);
             param.setBeginTime(null);
             param.setEndTime(null);
             param.setEndTime(null);
         }
         }

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreOrderStatisticsScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderStatisticsScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.baomidou.mybatisplus.extension.api.R;
 import com.baomidou.mybatisplus.extension.api.R;
 import com.fs.hisStore.param.FsStoreOrderStatisticsParam;
 import com.fs.hisStore.param.FsStoreOrderStatisticsParam;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreOrderStatusScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderStatusScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStorePaymentScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStorePaymentScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import cn.hutool.json.JSONUtil;
 import cn.hutool.json.JSONUtil;
 import com.alipay.api.AlipayApiException;
 import com.alipay.api.AlipayApiException;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreProductAttrScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductAttrScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreProductAttrValueScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductAttrValueScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreProductCategoryScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductCategoryScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreProductDetailsScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductDetailsScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreProductGroupScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductGroupScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONUtil;
 import cn.hutool.json.JSONUtil;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreProductPackageScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductPackageScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONUtil;
 import cn.hutool.json.JSONUtil;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreProductRelationScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductRelationScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreProductReplyScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductReplyScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateTime;
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreProductRuleScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductRuleScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import cn.hutool.json.JSONUtil;
 import cn.hutool.json.JSONUtil;
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;

+ 8 - 5
fs-admin/src/main/java/com/fs/hisStore/FsStoreProductScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;
@@ -60,6 +60,7 @@ public class FsStoreProductScrmController extends BaseController
      */
      */
     @PreAuthorize("@ss.hasPermi('store:storeProduct:list')")
     @PreAuthorize("@ss.hasPermi('store:storeProduct:list')")
     @PostMapping("/batchModify")
     @PostMapping("/batchModify")
+    @Log(title = "商品管理", businessType = BusinessType.UPDATE,isStoreLog = true,logParam = {"商品","批量修改商品信息"})
     public R batchModify(@RequestBody ModifyMoreDTO modifyMoreDTO){
     public R batchModify(@RequestBody ModifyMoreDTO modifyMoreDTO){
         fsStoreProductService.batchModify(modifyMoreDTO);
         fsStoreProductService.batchModify(modifyMoreDTO);
         return R.ok();
         return R.ok();
@@ -86,7 +87,7 @@ public class FsStoreProductScrmController extends BaseController
      * 导出商品列表
      * 导出商品列表
      */
      */
     @PreAuthorize("@ss.hasPermi('store:storeProduct:export')")
     @PreAuthorize("@ss.hasPermi('store:storeProduct:export')")
-    @Log(title = "商品", businessType = BusinessType.EXPORT)
+    @Log(title = "商品管理", businessType = BusinessType.EXPORT, isStoreLog = true,logParam = {"商品","导出商品信息"})
     @GetMapping("/export")
     @GetMapping("/export")
     public AjaxResult export(FsStoreProductScrm fsStoreProduct)
     public AjaxResult export(FsStoreProductScrm fsStoreProduct)
     {
     {
@@ -96,7 +97,7 @@ public class FsStoreProductScrmController extends BaseController
     }
     }
 
 
 
 
-    @Log(title = "商品导入", businessType = BusinessType.IMPORT)
+    @Log(title = "商品管理", businessType = BusinessType.IMPORT,isStoreLog = true,logParam = {"商品","商品导入"})
     @PreAuthorize("@ss.hasPermi('store:storeProduct:import')")
     @PreAuthorize("@ss.hasPermi('store:storeProduct:import')")
     @PostMapping("/importData")
     @PostMapping("/importData")
     public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
     public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
@@ -128,7 +129,8 @@ public class FsStoreProductScrmController extends BaseController
     }
     }
 
 
     @PreAuthorize("@ss.hasPermi('store:storeProduct:add')")
     @PreAuthorize("@ss.hasPermi('store:storeProduct:add')")
-    @Log(title = "商品", businessType = BusinessType.INSERT)
+    @Log(title = "商品管理", businessType = BusinessType.INSERT, businessTypeExpression = "#p0.getProductId()>0? T(com.fs.common.enums.BusinessType).UPDATE: T(com.fs.common.enums.BusinessType).INSERT"
+            , isStoreLog = true, logParamExpression = "#p0.getProductId()>0? new String[]{'商品','修改商品'}: new String[]{'商品','新增商品'}")
     @PostMapping(value = "/addOrEdit")
     @PostMapping(value = "/addOrEdit")
     public R addOrEdit(@RequestBody FsStoreProductAddEditParam fsStoreProduct)
     public R addOrEdit(@RequestBody FsStoreProductAddEditParam fsStoreProduct)
     {
     {
@@ -149,7 +151,8 @@ public class FsStoreProductScrmController extends BaseController
      * 删除商品
      * 删除商品
      */
      */
     @PreAuthorize("@ss.hasPermi('store:storeProduct:remove')")
     @PreAuthorize("@ss.hasPermi('store:storeProduct:remove')")
-    @Log(title = "商品", businessType = BusinessType.DELETE)
+    @Log(title = "商品管理", businessType = BusinessType.DELETE,isStoreLog = true,
+            logParamExpression ="#p0.length>1?new String[]{'商品','批量删除商品信息'}: new String[]{'商品','删除商品信息'}" )
 	@DeleteMapping("/{productIds}")
 	@DeleteMapping("/{productIds}")
     public AjaxResult remove(@PathVariable Long[] productIds)
     public AjaxResult remove(@PathVariable Long[] productIds)
     {
     {

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreProductTemplateScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductTemplateScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

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

@@ -0,0 +1,134 @@
+package com.fs.hisStore.controller;
+
+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.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.ParseUtils;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.hisStore.domain.FsStoreScrm;
+import com.fs.his.param.FsStoreAuditParam;
+import com.fs.hisStore.service.IFsStoreScrmService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 店铺管理Controller
+ *
+ * @author fs
+ * @date 2023-06-15
+ */
+@RestController
+@RequestMapping("/store/his/store")
+public class FsStoreScrmController extends BaseController
+{
+    @Autowired
+    private IFsStoreScrmService fsStoreService;
+
+    /**
+     * 查询店铺管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('his:store:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsStoreScrm fsStore)
+    {
+        startPage();
+        List<FsStoreScrm> list = fsStoreService.selectFsStoreList(fsStore);
+        for (FsStoreScrm store : list) {
+            store.setPhone(ParseUtils.parsePhone(store.getPhone()));
+        }
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出店铺管理列表
+     */
+    @PreAuthorize("@ss.hasPermi('his:store:export')")
+    @Log(title = "店铺管理", businessType = BusinessType.EXPORT,logParam = {"店铺","导出店铺信息"},isStoreLog = true)
+    @GetMapping("/export")
+    public AjaxResult export(FsStoreScrm fsStore)
+    {
+        List<FsStoreScrm> list = fsStoreService.selectFsStoreList(fsStore);
+        for (FsStoreScrm store : list) {
+            store.setPhone(ParseUtils.parsePhone(store.getPhone()));
+        }
+        ExcelUtil<FsStoreScrm> util = new ExcelUtil<FsStoreScrm>(FsStoreScrm.class);
+        return util.exportExcel(list, "店铺管理数据");
+    }
+
+    /**
+     * 获取店铺管理详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('his:store:query')")
+    @GetMapping(value = "/{storeId}")
+    public AjaxResult getInfo(@PathVariable("storeId") Long storeId)
+    {
+        FsStoreScrm fsStore = fsStoreService.selectFsStoreByStoreId(storeId);
+        fsStore.setPhone(ParseUtils.parsePhone(fsStore.getPhone()));
+        return AjaxResult.success(fsStore);
+    }
+
+    /**
+     * 新增店铺管理
+     */
+    @PreAuthorize("@ss.hasPermi('his:store:add')")
+    @Log(title = "店铺管理", businessType = BusinessType.INSERT,logParam = {"店铺","新增店铺信息"},isStoreLog = true)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsStoreScrm fsStore)
+    {
+        return toAjax(fsStoreService.insertFsStore(fsStore));
+    }
+
+    /**
+     * 修改店铺管理
+     */
+    @PreAuthorize("@ss.hasPermi('his:store:edit')")
+    @Log(title = "店铺管理", businessType = BusinessType.UPDATE,logParam = {"店铺","修改店铺信息"},isStoreLog = true)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsStoreScrm fsStore)
+    {
+
+        if (fsStore.getPhone()!=null&&fsStore.getPhone().contains("*")){
+            fsStore.setPhone(null);
+        }
+        return toAjax(fsStoreService.updateFsStore(fsStore));
+    }
+
+    /**
+     * 删除店铺管理
+     */
+    @PreAuthorize("@ss.hasPermi('his:store:remove')")
+    @Log(title = "店铺管理", businessType = BusinessType.DELETE,logParam = {"店铺","删除店铺信息"},isStoreLog = true)
+	@DeleteMapping("/{storeIds}")
+    public AjaxResult remove(@PathVariable Long[] storeIds)
+    {
+        return toAjax(fsStoreService.deleteFsStoreByStoreIds(storeIds));
+    }
+
+    /**
+     * 店铺审核
+     */
+    @PreAuthorize("@ss.hasPermi('his:store:audit')")
+    @Log(title = "店铺审核", businessType = BusinessType.UPDATE,logParam = {"店铺","店铺审核"},isStoreLog = true)
+    @PutMapping("/audit")
+    public AjaxResult audit(@RequestBody FsStoreAuditParam fsStore)
+    {
+        return toAjax(fsStoreService.updateFsStoreAudit(fsStore));
+    }
+
+    /**
+     * 重置店铺密码
+     * */
+    @PreAuthorize("@ss.hasPermi('his:store:refresh')")
+    @Log(title = "店铺管理", businessType = BusinessType.UPDATE,logParam = {"店铺","重置店铺密码"},isStoreLog = true)
+    @PutMapping("/refresh/{storeId}")
+    public AjaxResult refresh(Long storeId)
+    {
+        return toAjax(fsStoreService.refreshFsStore(storeId));
+    }
+
+}

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreShopScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreShopScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreShopStaffScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreShopStaffScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreStatisticsScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreStatisticsScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 1 - 1
fs-admin/src/main/java/com/fs/hisStore/FsStoreVisitScrmController.java → fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreVisitScrmController.java

@@ -1,4 +1,4 @@
-package com.fs.hisStore;
+package com.fs.hisStore.controller;
 
 
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;

+ 50 - 0
fs-admin/src/main/java/com/fs/hisStore/controller/SysOperlogScrmController.java

@@ -0,0 +1,50 @@
+package com.fs.hisStore.controller;
+
+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.page.TableDataInfo;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.hisStore.service.ISysOperLogScrmService;
+import com.fs.hisStore.domain.SysOperLogScrm;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 操作日志记录
+ *
+
+ */
+@RestController
+@RequestMapping("/store/operlogScrm")
+public class SysOperlogScrmController extends BaseController
+{
+    private final ISysOperLogScrmService operLogService;
+
+    public SysOperlogScrmController(ISysOperLogScrmService operLogService) {
+        this.operLogService = operLogService;
+    }
+
+    @PreAuthorize("@ss.hasPermi('his:storeLog:export')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysOperLogScrm operLog)
+    {
+        startPage();
+        List<SysOperLogScrm> list = operLogService.selectOperLogList(operLog);
+        return getDataTable(list);
+    }
+
+    @Log(title = "操作日志", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('his:storeLog:export')")
+    @GetMapping("/export")
+    public AjaxResult export(SysOperLogScrm operLog)
+    {
+        List<SysOperLogScrm> list = operLogService.selectOperLogList(operLog);
+        ExcelUtil<SysOperLogScrm> util = new ExcelUtil<>(SysOperLogScrm.class);
+        return util.exportExcel(list, "操作日志");
+    }
+
+}

+ 1 - 1
fs-service/src/main/java/com/fs/task/CrmTask.java → fs-admin/src/main/java/com/fs/hisStore/task/CrmTask.java

@@ -1,4 +1,4 @@
-package com.fs.task;
+package com.fs.hisStore.task;
 
 
 import com.fs.crm.service.ICrmCustomerService;
 import com.fs.crm.service.ICrmCustomerService;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;

+ 1 - 1
fs-service/src/main/java/com/fs/task/ErpTask.java → fs-admin/src/main/java/com/fs/hisStore/task/ErpTask.java

@@ -1,4 +1,4 @@
-package com.fs.task;
+package com.fs.hisStore.task;
 
 
 import com.fs.erp.domain.ErpOrder;
 import com.fs.erp.domain.ErpOrder;
 import com.fs.erp.domain.FsErpFinishPush;
 import com.fs.erp.domain.FsErpFinishPush;

+ 92 - 5
fs-service/src/main/java/com/fs/task/StoreTask.java → fs-admin/src/main/java/com/fs/hisStore/task/MallStoreTask.java

@@ -1,4 +1,4 @@
-package com.fs.task;
+package com.fs.hisStore.task;
 
 
 
 
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
@@ -21,8 +21,8 @@ import com.fs.his.dto.ExpressInfoDTO;
 import com.fs.his.service.IFsExpressService;
 import com.fs.his.service.IFsExpressService;
 import com.fs.his.service.IFsUserService;
 import com.fs.his.service.IFsUserService;
 import com.fs.his.utils.ConfigUtil;
 import com.fs.his.utils.ConfigUtil;
-import com.fs.hisStore.config.FsErpConfig;
 import com.fs.hisStore.domain.*;
 import com.fs.hisStore.domain.*;
+import com.fs.hisStore.dto.DateComparisonConfigDTO;
 import com.fs.hisStore.enums.ShipperCodeEnum;
 import com.fs.hisStore.enums.ShipperCodeEnum;
 import com.fs.hisStore.mapper.FsStoreOrderItemScrmMapper;
 import com.fs.hisStore.mapper.FsStoreOrderItemScrmMapper;
 import com.fs.hisStore.mapper.FsStoreOrderScrmMapper;
 import com.fs.hisStore.mapper.FsStoreOrderScrmMapper;
@@ -35,16 +35,20 @@ import com.fs.pay.service.IPayService;
 import com.fs.store.config.StoreConfig;
 import com.fs.store.config.StoreConfig;
 import com.fs.system.service.ISysConfigService;
 import com.fs.system.service.ISysConfigService;
 import com.fs.ybPay.domain.OrderResult;
 import com.fs.ybPay.domain.OrderResult;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
 import java.text.ParseException;
 import java.text.ParseException;
+import java.time.LocalTime;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 import static com.fs.hisStore.constants.StoreConstants.DELIVERY;
 import static com.fs.hisStore.constants.StoreConstants.DELIVERY;
 
 
@@ -53,8 +57,9 @@ import static com.fs.hisStore.constants.StoreConstants.DELIVERY;
  *
  *
  * @author fs
  * @author fs
  */
  */
+@Slf4j
 @Component("mallStoreTask")
 @Component("mallStoreTask")
-public class StoreTask
+public class MallStoreTask
 {
 {
     @Autowired
     @Autowired
     private RedisTemplate redisTemplate;
     private RedisTemplate redisTemplate;
@@ -68,8 +73,6 @@ public class StoreTask
     private IFsStoreAfterSalesScrmService afterSalesService;
     private IFsStoreAfterSalesScrmService afterSalesService;
     @Autowired
     @Autowired
     private IFsUserService userService;
     private IFsUserService userService;
-
-
     @Autowired
     @Autowired
     private IPayService ybPayService;
     private IPayService ybPayService;
     @Autowired
     @Autowired
@@ -128,6 +131,10 @@ public class StoreTask
     @Qualifier("JSTErpOrderServiceImpl")
     @Qualifier("JSTErpOrderServiceImpl")
     private IErpOrderService jSTOrderService;
     private IErpOrderService jSTOrderService;
 
 
+    @Autowired
+    @Qualifier("k9OrderScrmServiceImpl")
+    private IErpOrderService k9OrderService;
+
     @Autowired
     @Autowired
     private ConfigUtil configUtil;
     private ConfigUtil configUtil;
 
 
@@ -473,6 +480,8 @@ public class StoreTask
                     erpOrderService = dfOrderService;
                     erpOrderService = dfOrderService;
                 } else if (erpType == 5) {
                 } else if (erpType == 5) {
                     erpOrderService = jSTOrderService;
                     erpOrderService = jSTOrderService;
+                }else if (erpType == 6) {
+                    erpOrderService = k9OrderService;
                 }
                 }
             }
             }
         }
         }
@@ -504,4 +513,82 @@ public class StoreTask
         fsUserOnlineStateService.insertUserNotOnline();
         fsUserOnlineStateService.insertUserNotOnline();
     }*/
     }*/
 
 
+    /**
+     * 提醒证件到期任务
+     * */
+    @Autowired
+    private JdbcTemplate jdbcTemplate;
+    public void remindCertValidation() {
+        log.info("提醒店铺证件到期任务执行... 当前时间: {}", LocalTime.now());
+
+        // 从配置表获取需要比较的表和字段
+        List<DateComparisonConfigDTO> tablesToCheck = jdbcTemplate.query(
+                "SELECT table_name, date_column,in_advance,user_column,phone_column,remind_words,platform,cert_type" +
+                        " FROM date_comparison_config",(rs, rowNum)->{
+                    return DateComparisonConfigDTO.builder()
+                            .tableName(rs.getString("table_name"))//表名
+                            .certType(rs.getString("cert_type"))//证件类型
+                            .dateColumn(rs.getString("date_column"))//日期字段
+                            .userColumn(rs.getString("user_column"))//用户字段
+                            .remindWords(rs.getString("remindWords"))//提醒内容
+                            .phoneColumn(rs.getString("phone_column"))//提醒手机
+                            .inAdvance(rs.getInt("inAdvance"))//提前天数
+                            .platform(rs.getString("platform")).build();//平台
+                });
+
+        tablesToCheck.forEach(dto -> {
+            //获取证件失效日期字段小于当前时间加提前天数的用户和电话号码
+            String sql = String.format("SELECT %s , %s " +
+                            "FROM %s " +
+                            "WHERE %s >= DATE_SUB(CURDATE(), INTERVAL %d DAY)",
+                            dto.getUserColumn(),
+                            dto.getPhoneColumn(),
+                            dto.getTableName(),
+                            dto.getDateColumn(),
+                            dto.getInAdvance()
+                            );
+            List<Map<String, Object>> users = jdbcTemplate.queryForList(sql);
+            users.forEach(user -> {
+                String userName = (String) user.get(dto.getUserColumn());
+                String phone = (String) user.get(dto.getPhoneColumn());
+                String remindWords = String.format("【%s平台提示】尊敬的%s用户,店铺%s证件即将到期,请及时处理!",
+                        dto.getPlatform(),
+                        userName,
+                        dto.getCertType());
+                // 使用phone发送remindWords短信
+                // TODO 发送通知
+            });
+        });
+
+    }
+
+    /**
+     * 禁用店铺
+     * */
+    public void disable() {
+        log.info("禁用店铺任务执行... 当前时间: {}", LocalTime.now());
+        // 从配置表获取需要禁用的表和字段
+        List<DateComparisonConfigDTO> toDisable = jdbcTemplate.query(
+                "SELECT table_name, date_column,invalid_expression,status_column" +
+                        " FROM date_comparison_config " +
+                        " WHERE is_do_invalid = '1'",(rs, rowNum)-> DateComparisonConfigDTO.builder()
+                                .tableName(rs.getString("table_name"))//表名
+                                .dateColumn(rs.getString("date_column"))//日期字段
+                                .invalidExpression(rs.getString("invalid_expression"))//失效表达式
+                                .statusColumn(rs.getString("status_column"))//状态字段
+                                .build());
+
+        toDisable.forEach(dto -> {
+            //更新证件失效日期字段小于当前时间的数据
+            String sql = String.format("UPDATE %s " +
+                    "SET %s = %s " +
+                    "WHERE %s < CURDATE()",
+                    dto.getTableName(),
+                    dto.getStatusColumn(),
+                    dto.getInvalidExpression(),
+                    dto.getDateColumn());
+            jdbcTemplate.update(sql);
+        });
+    }
+
 }
 }

+ 1 - 1
fs-service/src/main/java/com/fs/task/stats/FsStatsMemberDailyTask.java → fs-admin/src/main/java/com/fs/hisStore/task/stats/FsStatsMemberDailyTask.java

@@ -1,4 +1,4 @@
-package com.fs.task.stats;
+package com.fs.hisStore.task.stats;
 
 
 import com.fs.statis.service.IFsStatsMemberDailyService;
 import com.fs.statis.service.IFsStatsMemberDailyService;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;

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

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

+ 17 - 2
fs-common/src/main/java/com/fs/common/annotation/Log.java

@@ -7,10 +7,11 @@ import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 import java.lang.annotation.Target;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.enums.OperatorType;
 import com.fs.common.enums.OperatorType;
+import com.fs.common.utils.StringUtils;
 
 
 /**
 /**
  * 自定义操作日志记录注解
  * 自定义操作日志记录注解
- * 
+ *
 
 
  *
  *
  */
  */
@@ -20,7 +21,7 @@ import com.fs.common.enums.OperatorType;
 public @interface Log
 public @interface Log
 {
 {
     /**
     /**
-     * 模块 
+     * 模块
      */
      */
     public String title() default "";
     public String title() default "";
 
 
@@ -38,4 +39,18 @@ public @interface Log
      * 是否保存请求的参数
      * 是否保存请求的参数
      */
      */
     public boolean isSaveRequestData() default true;
     public boolean isSaveRequestData() default true;
+
+    /**
+     * 是否商城日志
+     */
+    public boolean isStoreLog() default false;
+
+    /**
+     * 商城日志传参
+     * */
+    public String[] logParam() default {};
+
+    String businessTypeExpression() default "";
+
+    String logParamExpression() default "";
 }
 }

+ 3 - 0
fs-common/src/main/java/com/fs/common/core/redis/RedisCache.java

@@ -233,4 +233,7 @@ public class RedisCache
     }
     }
 
 
 
 
+    public Boolean setIfAbsent(String key, String value, long timeout, TimeUnit unit) {
+        return redisTemplate.opsForValue().setIfAbsent(key, value, timeout, unit);
+    }
 }
 }

+ 1 - 1
fs-company-app/src/main/java/com/fs/app/controller/UserController.java

@@ -216,7 +216,7 @@ public class UserController extends AppBaseController {
             result.put("perms", perms);
             result.put("perms", perms);
             return R.ok("登录成功").put("data", result);
             return R.ok("登录成功").put("data", result);
         } catch (Exception e) {
         } catch (Exception e) {
-            return R.error("登录异常");
+            return R.error("登录异常:"+e.getMessage());
         }
         }
     }
     }
 
 

+ 31 - 2
fs-company/src/main/java/com/fs/company/controller/company/CompanyUserController.java

@@ -8,6 +8,7 @@ import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.core.page.TableDataInfo;
+import com.fs.common.core.redis.RedisCache;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.PatternUtils;
 import com.fs.common.utils.PatternUtils;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.ServletUtils;
@@ -37,6 +38,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 
 import java.util.*;
 import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -69,6 +71,8 @@ public class CompanyUserController extends BaseController
     private ICompanyUserDelayTimeService companyUserDelayTimeService;
     private ICompanyUserDelayTimeService companyUserDelayTimeService;
     @Autowired
     @Autowired
     private ISysConfigService configService;
     private ISysConfigService configService;
+    @Autowired
+    private RedisCache redisCache;
     /**
     /**
      * 获取用户列表
      * 获取用户列表
      */
      */
@@ -258,9 +262,29 @@ public class CompanyUserController extends BaseController
         if (!PatternUtils.checkPassword(user.getPassword())) {
         if (!PatternUtils.checkPassword(user.getPassword())) {
             return AjaxResult.error("密码格式不正确,需包含字母、数字和特殊字符,长度为 8-20 位");
             return AjaxResult.error("密码格式不正确,需包含字母、数字和特殊字符,长度为 8-20 位");
         }
         }
-        return toAjax(companyUserService.resetUserPwdByUserId(user.getUserId(), SecurityUtils.encryptPassword(user.getPassword())));
+
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+
+        String newPassword = SecurityUtils.encryptPassword(user.getPassword());
+        int i = companyUserService.resetUserPwdByUserId(user.getUserId(), newPassword);
+
+        if (i > 0) {
+            // 更新缓存用户密码
+            loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword));
+            tokenService.setLoginUser(loginUser);
+            cleanFirstLogin(loginUser);
+        }
+
+        return toAjax(i);
     }
     }
 
 
+    /**
+     * 去除首次登录的标志
+     * @param loginUser
+     */
+    private void cleanFirstLogin(LoginUser loginUser) {
+        redisCache.deleteObject("newCompanyUser:" + loginUser.getUser().getCompanyId() + ":" + loginUser.getUser().getUserName());
+    }
     /**
     /**
      * 状态修改
      * 状态修改
      */
      */
@@ -427,5 +451,10 @@ public class CompanyUserController extends BaseController
             return AjaxResult.error("操作失败");
             return AjaxResult.error("操作失败");
         }
         }
     }
     }
-
+    @PostMapping("/common/uploadOSS")
+    public R uploadOSS(@RequestParam("file") MultipartFile file,
+                       @RequestParam("userId") String userId) throws Exception {
+        String url = companyUserService.uploadQrCode(file, userId);
+        return R.ok().put("url", url);
+    }
 }
 }

+ 54 - 0
fs-company/src/main/java/com/fs/company/controller/company/FsFirstDiagnosisController.java

@@ -0,0 +1,54 @@
+package com.fs.company.controller.company;
+
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.his.domain.FsFirstDiagnosis;
+import com.fs.his.service.IFsFirstDiagnosisService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 初诊单Controller
+ */
+@RestController
+@RequestMapping("/his/diagnosis")
+public class FsFirstDiagnosisController extends BaseController {
+
+    @Autowired
+    private IFsFirstDiagnosisService fsFirstDiagnosisService;
+
+    /**
+     * 获取初诊单详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('his:fsFirstDiagnosis:query')")
+    @GetMapping(value = "/{userId}")
+    public AjaxResult getInfo(@PathVariable("userId") Long userId)
+    {
+        return AjaxResult.success(fsFirstDiagnosisService.getByUserId(userId));
+    }
+
+    /**
+     * 新增初诊单
+     */
+    @PreAuthorize("@ss.hasPermi('his:fsFirstDiagnosis:add')")
+    @Log(title = "初诊单", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsFirstDiagnosis fsFirstDiagnosis)
+    {
+        return toAjax(fsFirstDiagnosisService.insertFsFirstDiagnosis(fsFirstDiagnosis));
+    }
+
+    /**
+     * 修改初诊单
+     */
+    @PreAuthorize("@ss.hasPermi('his:fsFirstDiagnosis:edit')")
+    @Log(title = "初诊单", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsFirstDiagnosis fsFirstDiagnosis)
+    {
+        return toAjax(fsFirstDiagnosisService.updateFsFirstDiagnosis(fsFirstDiagnosis));
+    }
+}

+ 154 - 0
fs-company/src/main/java/com/fs/company/controller/course/FsCoursePlaySourceConfigController.java

@@ -0,0 +1,154 @@
+package com.fs.company.controller.course;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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.page.TableDataInfo;
+import com.fs.common.core.redis.RedisCache;
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.bean.BeanUtils;
+import com.fs.course.domain.FsCoursePlaySourceConfig;
+import com.fs.course.param.FsCoursePlaySourceConfigCreateParam;
+import com.fs.course.param.FsCoursePlaySourceConfigEditParam;
+import com.fs.course.service.IFsCoursePlaySourceConfigService;
+import com.fs.course.vo.FsCoursePlaySourceConfigVO;
+import com.fs.framework.security.LoginUser;
+import com.fs.framework.security.SecurityUtils;
+import com.github.pagehelper.PageHelper;
+import lombok.AllArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import java.time.LocalDateTime;
+import java.util.*;
+
+@RestController
+@RequestMapping("/course/playSourceConfig")
+@AllArgsConstructor
+public class FsCoursePlaySourceConfigController extends BaseController {
+
+    private final IFsCoursePlaySourceConfigService fsCoursePlaySourceConfigService;
+    private final RedisCache redisCache;
+
+    @PreAuthorize("@ss.hasPermi('course:playSourceConfig:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(@RequestParam(required = false) String name,
+                              @RequestParam(required = false) String appid,
+                              @RequestParam(required = false, defaultValue = "1") Integer pageNum,
+                              @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
+        Map<String, Object> params = new HashMap<>();
+        params.put("name", name);
+        params.put("appid", appid);
+        params.put("companyId", SecurityUtils.getLoginUser().getCompany().getCompanyId());
+
+        PageHelper.startPage(pageNum, pageSize);
+        List<FsCoursePlaySourceConfigVO> list = fsCoursePlaySourceConfigService.selectCoursePlaySourceConfigVOListByMap(params);
+        return getDataTable(list);
+    }
+
+    @PreAuthorize("@ss.hasPermi('course:playSourceConfig:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable Long id) {
+        FsCoursePlaySourceConfig config = fsCoursePlaySourceConfigService.getById(id);
+        if (Objects.isNull(config)) {
+            return AjaxResult.success(null);
+        }
+
+        FsCoursePlaySourceConfigVO configVO = new FsCoursePlaySourceConfigVO();
+        BeanUtils.copyProperties(config, configVO);
+        return AjaxResult.success(configVO);
+    }
+
+    @PreAuthorize("@ss.hasPermi('course:playSourceConfig:add')")
+    @Log(title = "点播播放源配置", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Valid @RequestBody FsCoursePlaySourceConfigCreateParam param) {
+        Wrapper<FsCoursePlaySourceConfig> queryWrapper = Wrappers.<FsCoursePlaySourceConfig>lambdaQuery()
+                .eq(FsCoursePlaySourceConfig::getAppid, param.getAppid())
+                .eq(FsCoursePlaySourceConfig::getIsDel, 0);
+        if (fsCoursePlaySourceConfigService.count(queryWrapper) > 0) {
+            return AjaxResult.error("appid已存在");
+        }
+
+        FsCoursePlaySourceConfig config = new FsCoursePlaySourceConfig();
+        BeanUtils.copyProperties(param, config);
+
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        config.setCompanyId(loginUser.getCompany().getCompanyId());
+        config.setCompanyUserId(loginUser.getUser().getUserId());
+        config.setIsDel(0);
+        config.setCreateTime(LocalDateTime.now());
+        config.setUpdateTime(LocalDateTime.now());
+        fsCoursePlaySourceConfigService.save(config);
+        return AjaxResult.success();
+    }
+
+    @PreAuthorize("@ss.hasPermi('course:playSourceConfig:edit')")
+    @Log(title = "点播播放源配置", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Valid @RequestBody FsCoursePlaySourceConfigEditParam param) {
+        FsCoursePlaySourceConfig config = fsCoursePlaySourceConfigService.getById(param.getId());
+        if (Objects.isNull(config)) {
+            return AjaxResult.error("点播播放源配置不存在");
+        }
+
+        Wrapper<FsCoursePlaySourceConfig> queryWrapper = Wrappers.<FsCoursePlaySourceConfig>lambdaQuery()
+                .eq(FsCoursePlaySourceConfig::getAppid, param.getAppid())
+                .eq(FsCoursePlaySourceConfig::getIsDel, 0)
+                .last("limit 1");
+        FsCoursePlaySourceConfig one = fsCoursePlaySourceConfigService.getOne(queryWrapper);
+        if (Objects.nonNull(one) && !one.getId().equals(config.getId())) {
+            return AjaxResult.error("appid已存在");
+        }
+
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (!loginUser.getCompany().getCompanyId().equals(config.getCompanyId())) {
+            return AjaxResult.error("非法操作");
+        }
+
+        BeanUtils.copyProperties(param, config);
+        fsCoursePlaySourceConfigService.updateById(config);
+        return AjaxResult.success();
+    }
+
+    @PreAuthorize("@ss.hasPermi('course:playSourceConfig:remove')")
+    @Log(title = "点播播放源配置", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids) {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        Wrapper<FsCoursePlaySourceConfig> updateWrapper = Wrappers.<FsCoursePlaySourceConfig>lambdaUpdate()
+                .set(FsCoursePlaySourceConfig::getIsDel, 1)
+                .eq(FsCoursePlaySourceConfig::getCompanyId, loginUser.getCompany().getCompanyId())
+                .in(FsCoursePlaySourceConfig::getId, Arrays.asList(ids));
+        fsCoursePlaySourceConfigService.update(updateWrapper);
+        return AjaxResult.success();
+    }
+
+    /**
+     * 启用-关闭小程序销售管理
+     * @param bock
+     * @return
+     */
+    @GetMapping("/updateIsTownOn")
+    public R queryIsTownOn(String bock, String appId)
+    {
+        String key = appId+"start_status_001";
+        String start = redisCache.getCacheObject(key);
+        if (ObjectUtil.isNotEmpty(bock)){
+            if (bock.equals("001")){
+                redisCache.setCacheObject(key,bock);
+                return R.ok("调整成功");
+            }else if (bock.equals("002")){
+                redisCache.setCacheObject(key,bock);
+                return R.ok("调整成功");
+            }
+
+        }
+        return R.ok().put("date",start);
+    }
+}

+ 2 - 1
fs-company/src/main/java/com/fs/company/controller/course/FsUserCoursePeriodController.java

@@ -220,10 +220,11 @@ public class FsUserCoursePeriodController extends BaseController {
         FsUserCoursePeriod period = fsUserCoursePeriodService.selectFsUserCoursePeriodById(param.getPeriodId());
         FsUserCoursePeriod period = fsUserCoursePeriodService.selectFsUserCoursePeriodById(param.getPeriodId());
         param.setMaxDate(LocalDate.now().plusDays(period.getMaxViewNum()));
         param.setMaxDate(LocalDate.now().plusDays(period.getMaxViewNum()));
         List<FsPeriodCountVO> list = fsUserCoursePeriodDaysService.periodCourseCount(param);
         List<FsPeriodCountVO> list = fsUserCoursePeriodDaysService.periodCourseCount(param);
+        long count = fsUserCoursePeriodDaysService.periodCourseByCount(param);
         PageInfo<FsPeriodCountVO> pageInfo = new PageInfo<>(list);
         PageInfo<FsPeriodCountVO> pageInfo = new PageInfo<>(list);
         Map<String, Object> result = new HashMap<>();
         Map<String, Object> result = new HashMap<>();
         result.put("rows", pageInfo.getList());
         result.put("rows", pageInfo.getList());
-        result.put("total", pageInfo.getTotal());
+        result.put("total", count);
         return R.ok(result);
         return R.ok(result);
     }
     }
 
 

+ 12 - 0
fs-company/src/main/java/com/fs/company/controller/qw/SopUserLogsInfoController.java

@@ -418,6 +418,18 @@ public class SopUserLogsInfoController extends BaseController
         return sopUserLogsInfoService.sendUserLogsInfoMsgType(param);
         return sopUserLogsInfoService.sendUserLogsInfoMsgType(param);
     }
     }
 
 
+    /**
+     * 一键群发sopUserLogsInfo
+     */
+    @PreAuthorize("@ss.hasPermi('qw:sopUserLogsInfo:msg')")
+    @Log(title = "sendUserLogsInfoMsgSop", businessType = BusinessType.INSERT,isSaveRequestData=false)
+    @PostMapping("/sendUserLogsInfoMsgSop")
+    @RepeatSubmit
+    public R sendUserLogsInfoMsgSop(@RequestBody SendUserLogsInfoMsgParam param)
+    {
+        return sopUserLogsInfoService.sendUserLogsInfoMsgSop(param);
+    }
+
 
 
     /**
     /**
      * 删除sopUserLogsInfo
      * 删除sopUserLogsInfo

+ 19 - 2
fs-company/src/main/java/com/fs/company/controller/store/FsStoreOrderController.java

@@ -543,10 +543,19 @@ public class FsStoreOrderController extends BaseController
     @Qualifier("hzOMSErpOrderServiceImpl")
     @Qualifier("hzOMSErpOrderServiceImpl")
     private IErpOrderService hzOMSErpOrderService;
     private IErpOrderService hzOMSErpOrderService;
 
 
+    @Autowired
+    @Qualifier("hzOMSErpOrderServiceImpl")
+    private IErpOrderService hzOMSErpOrderService;
+    @Autowired
+    @Qualifier("dfOrderServiceImpl")
+    private IErpOrderService dfOrderService;
+
     @Autowired
     @Autowired
     @Qualifier("JSTErpOrderServiceImpl")
     @Qualifier("JSTErpOrderServiceImpl")
     private IErpOrderService jSTOrderService;
     private IErpOrderService jSTOrderService;
-
+    @Autowired
+    @Qualifier("k9OrderScrmServiceImpl")
+    private IErpOrderService k9OrderService;
     private IErpOrderService getErpService() {
     private IErpOrderService getErpService() {
         FsSysConfig sysConfig = configUtil.getSysConfig();
         FsSysConfig sysConfig = configUtil.getSysConfig();
         Integer erpOpen = sysConfig.getErpOpen();
         Integer erpOpen = sysConfig.getErpOpen();
@@ -564,8 +573,16 @@ public class FsStoreOrderController extends BaseController
                 }  else if (erpType == 3){
                 }  else if (erpType == 3){
                     //hzOMs
                     //hzOMs
                     erpOrderService =  hzOMSErpOrderService;
                     erpOrderService =  hzOMSErpOrderService;
+                } else if (erpType == 3){
+                    //
+                    erpOrderService =  hzOMSErpOrderService;
+                } else if (erpType == 4){
+                    //代服
+                    erpOrderService =  dfOrderService;
                 }else if(erpType == 5){
                 }else if(erpType == 5){
-                    erpOrderService = jSTOrderService;
+                    erpOrderService=jSTOrderService;
+                }else if(erpType == 6){
+                    erpOrderService=k9OrderService;
                 }
                 }
                 return erpOrderService;
                 return erpOrderService;
 
 

+ 10 - 2
fs-company/src/main/java/com/fs/company/controller/store/FsUserAddressController.java

@@ -1,9 +1,11 @@
 package com.fs.company.controller.store;
 package com.fs.company.controller.store;
 
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
 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.domain.model.LoginUser;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.enums.BusinessType;
@@ -73,7 +75,13 @@ public class FsUserAddressController extends BaseController
         ExcelUtil<FsUserAddress> util = new ExcelUtil<FsUserAddress>(FsUserAddress.class);
         ExcelUtil<FsUserAddress> util = new ExcelUtil<FsUserAddress>(FsUserAddress.class);
         return util.exportExcel(list, "用户地址数据");
         return util.exportExcel(list, "用户地址数据");
     }
     }
-
+    @GetMapping("/getAddressList")
+    public R getAddressList(FsUserAddress fsUserAddress)
+    {
+        fsUserAddress.setIsDel(0);
+        List<FsUserAddress> list = fsUserAddressService.selectFsUserAddressList(fsUserAddress);
+        return R.ok().put("data", list);
+    }
     /**
     /**
      * 获取用户地址详细信息
      * 获取用户地址详细信息
      */
      */
@@ -100,7 +108,7 @@ public class FsUserAddressController extends BaseController
     @PostMapping
     @PostMapping
     public AjaxResult add(@RequestBody FsUserAddress fsUserAddress)
     public AjaxResult add(@RequestBody FsUserAddress fsUserAddress)
     {
     {
-        if(fsUserAddress.getIsDefault()==1){
+        if(ObjectUtil.isNotEmpty(fsUserAddress.getIsDefault())&&fsUserAddress.getIsDefault()==1){
             //处理默认地址
             //处理默认地址
             fsUserAddressService.clearIsDefalut(fsUserAddress.getUserId());
             fsUserAddressService.clearIsDefalut(fsUserAddress.getUserId());
         }
         }

+ 7 - 0
fs-company/src/main/java/com/fs/company/controller/store/FsUserController.java

@@ -77,6 +77,13 @@ public class FsUserController extends BaseController
         }
         }
         return getDataTable(list);
         return getDataTable(list);
     }
     }
+    @GetMapping("/getUserList")
+    public R getUserList( FsUser fsUser)
+    {
+        fsUser.setIsDel(0);
+        List<FsUser> list=fsUserService.selectFsUserList(fsUser);
+        return R.ok().put("data", list);
+    }
 
 
     @PreAuthorize("@ss.hasPermi('his:user:list')")
     @PreAuthorize("@ss.hasPermi('his:user:list')")
     @GetMapping("/userList")
     @GetMapping("/userList")

+ 3 - 5
fs-company/src/main/java/com/fs/company/controller/store/FsUserCouponController.java

@@ -105,11 +105,9 @@ public class FsUserCouponController extends BaseController
     @PostMapping("/sendCoupon")
     @PostMapping("/sendCoupon")
     public AjaxResult sendCoupon(@RequestBody FsUserCouponSendParam fsUserCoupon)
     public AjaxResult sendCoupon(@RequestBody FsUserCouponSendParam fsUserCoupon)
     {
     {
-        if (fsUserCoupon.getSetSendUserId() == null){
-            LoginUser loginUser = SecurityUtils.getLoginUser();
-            Long userId = loginUser.getUser().getUserId();
-            fsUserCoupon.setSetSendUserId(userId);
-        }
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsUserCoupon.setCompanyId(loginUser.getCompany().getCompanyId());
+        fsUserCoupon.setCompanyUserId(loginUser.getUser().getUserId());
         return toAjax(fsUserCouponService.sendFsUserCoupon(fsUserCoupon));
         return toAjax(fsUserCouponService.sendFsUserCoupon(fsUserCoupon));
     }
     }
 
 

+ 1 - 0
fs-company/src/main/java/com/fs/framework/config/SecurityConfig.java

@@ -119,6 +119,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                 .antMatchers("/msg").anonymous()
                 .antMatchers("/msg").anonymous()
                 .antMatchers("/common/getId**").anonymous()
                 .antMatchers("/common/getId**").anonymous()
                 .antMatchers("/common/uploadOSS**").anonymous()
                 .antMatchers("/common/uploadOSS**").anonymous()
+                .antMatchers("/company/user/common/uploadOSS").anonymous()
                 .antMatchers("/pay/wxPay/payNotify**").anonymous()
                 .antMatchers("/pay/wxPay/payNotify**").anonymous()
                 .antMatchers("/common/uploadWang**").anonymous()
                 .antMatchers("/common/uploadWang**").anonymous()
                 .antMatchers("/common/download**").anonymous()
                 .antMatchers("/common/download**").anonymous()

+ 0 - 59
fs-company/src/main/java/com/fs/hisStore/controller/FsCityScrmController.java

@@ -1,59 +0,0 @@
-package com.fs.hisStore.controller;
-
-import com.fs.common.core.controller.BaseController;
-import com.fs.common.core.domain.R;
-import com.fs.hisStore.domain.FsCityScrm;
-import com.fs.hisStore.service.IFsCityScrmService;
-import com.fs.store.utils.CityTreeUtil;
-import com.fs.store.vo.CityVO;
-import com.google.common.collect.Lists;
-import io.swagger.annotations.ApiOperation;
-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;
-import springfox.documentation.annotations.Cacheable;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.List;
-
-/**
- * 城市Controller
- *
- * @author fs
- * @date 2022-03-15
- */
-@RestController
-@RequestMapping("/store/store/city")
-public class FsCityScrmController extends BaseController
-{
-    @Autowired
-    private IFsCityScrmService fsCityService;
-
-//
-//    @GetMapping("/getAllList")
-//    @Cacheable("citys")
-//    public R getAllList(FsCityScrm fsCity)
-//    {
-//        List<FsCityScrm> list = fsCityService.selectFsCityList(fsCity);
-//        return R.ok().put("data",list);
-//    }
-
-
-    @ApiOperation("获取城市数据")
-    @GetMapping("/getCitys")
-    @Cacheable("citys")
-    public R getCitys(HttpServletRequest request){
-        List<FsCityScrm> list=fsCityService.selectFsCitys();
-        List<CityVO> cityVOS = Lists.newArrayList();
-        for (FsCityScrm city : list){
-            CityVO cityVO = new CityVO();
-            cityVO.setValue(Long.parseLong(city.getCityId()));
-            cityVO.setLabel(city.getCityName());
-            cityVO.setPid(Long.parseLong(city.getParentId()));
-            cityVOS.add(cityVO);
-        }
-        return R.ok().put("data", CityTreeUtil.list2TreeConverter(cityVOS, 0));
-
-    }
-}

+ 31 - 0
fs-doctor-app/src/main/java/com/fs/app/controller/DiagnosisController.java

@@ -0,0 +1,31 @@
+package com.fs.app.controller;
+
+import com.fs.common.core.domain.R;
+import com.fs.his.param.FsDiagnosisListDParam;
+import com.fs.his.service.IFsFirstDiagnosisService;
+import com.fs.his.vo.FsDiagnosisListDVO;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+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;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/app/diagnosis")
+public class DiagnosisController extends AppBaseController{
+
+    @Autowired
+    private IFsFirstDiagnosisService diagnosisService;
+
+    @GetMapping("/getDiagnosisList")
+    public R getDiagnosisList(FsDiagnosisListDParam param){
+        param.setDoctorId(Long.parseLong(getDoctorId()));
+        PageHelper.startPage(param.getPageNum(), param.getPageSize());
+        List<FsDiagnosisListDVO> diagnosisList = diagnosisService.getDiagnosisList(param);
+        PageInfo<FsDiagnosisListDVO> pageInfo = new PageInfo<>(diagnosisList);
+        return R.ok().put("data", pageInfo);
+    }
+}

+ 69 - 9
fs-framework/src/main/java/com/fs/framework/aspectj/LogAspect.java

@@ -6,15 +6,22 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
+
+import com.fs.common.enums.BusinessType;
+import com.fs.common.utils.bean.BeanUtils;
+import com.fs.framework.web.domain.server.Sys;
+import com.fs.hisStore.domain.SysOperLogScrm;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.Signature;
 import org.aspectj.lang.Signature;
-import org.aspectj.lang.annotation.AfterReturning;
-import org.aspectj.lang.annotation.AfterThrowing;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.annotation.*;
 import org.aspectj.lang.reflect.MethodSignature;
 import org.aspectj.lang.reflect.MethodSignature;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
+import org.springframework.expression.EvaluationContext;
+import org.springframework.expression.ExpressionParser;
+import org.springframework.expression.spel.standard.SpelExpressionParser;
+import org.springframework.expression.spel.support.StandardEvaluationContext;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 import org.springframework.validation.BindingResult;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
@@ -34,7 +41,7 @@ import com.fs.system.domain.SysOperLog;
 
 
 /**
 /**
  * 操作日志记录处理
  * 操作日志记录处理
- * 
+ *
 
 
  */
  */
 @Aspect
 @Aspect
@@ -62,7 +69,7 @@ public class LogAspect
 
 
     /**
     /**
      * 拦截异常操作
      * 拦截异常操作
-     * 
+     *
      * @param joinPoint 切点
      * @param joinPoint 切点
      * @param e 异常
      * @param e 异常
      */
      */
@@ -116,6 +123,12 @@ public class LogAspect
             getControllerMethodDescription(joinPoint, controllerLog, operLog);
             getControllerMethodDescription(joinPoint, controllerLog, operLog);
             // 保存数据库
             // 保存数据库
             AsyncManager.me().execute(AsyncFactory.recordOper(operLog));
             AsyncManager.me().execute(AsyncFactory.recordOper(operLog));
+            if(controllerLog.isStoreLog()){
+                SysOperLogScrm operLogScrm = new SysOperLogScrm();
+                BeanUtils.copyProperties(operLog, operLogScrm);
+                resolveParam((ProceedingJoinPoint)joinPoint,operLogScrm);
+                AsyncManager.me().execute(AsyncFactory.recordOperScrm(operLogScrm));
+            }
         }
         }
         catch (Exception exp)
         catch (Exception exp)
         {
         {
@@ -123,12 +136,14 @@ public class LogAspect
             log.error("==前置通知异常==");
             log.error("==前置通知异常==");
             log.error("异常信息:{}", exp.getMessage());
             log.error("异常信息:{}", exp.getMessage());
             exp.printStackTrace();
             exp.printStackTrace();
+        } catch (Throwable ex) {
+            throw new RuntimeException(ex);
         }
         }
     }
     }
 
 
     /**
     /**
      * 获取注解中对方法的描述信息 用于Controller层注解
      * 获取注解中对方法的描述信息 用于Controller层注解
-     * 
+     *
      * @param log 日志
      * @param log 日志
      * @param operLog 操作日志
      * @param operLog 操作日志
      * @throws Exception
      * @throws Exception
@@ -151,7 +166,7 @@ public class LogAspect
 
 
     /**
     /**
      * 获取请求的参数,放到log中
      * 获取请求的参数,放到log中
-     * 
+     *
      * @param operLog 操作日志
      * @param operLog 操作日志
      * @throws Exception 异常
      * @throws Exception 异常
      */
      */
@@ -208,7 +223,7 @@ public class LogAspect
 
 
     /**
     /**
      * 判断是否需要过滤的对象。
      * 判断是否需要过滤的对象。
-     * 
+     *
      * @param o 对象信息。
      * @param o 对象信息。
      * @return 如果是需要过滤的对象,则返回true;否则返回false。
      * @return 如果是需要过滤的对象,则返回true;否则返回false。
      */
      */
@@ -240,4 +255,49 @@ public class LogAspect
         return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse
         return o instanceof MultipartFile || o instanceof HttpServletRequest || o instanceof HttpServletResponse
                 || o instanceof BindingResult;
                 || o instanceof BindingResult;
     }
     }
+
+    private final ExpressionParser parser = new SpelExpressionParser();
+
+    public void resolveParam(ProceedingJoinPoint joinPoint, SysOperLogScrm operLog) throws Throwable {
+        // 1. 获取注解实例
+        Method method = ((MethodSignature) joinPoint.getSignature()).getMethod();
+        Log annotation = method.getAnnotation(Log.class);
+
+        // 2. 准备简单上下文
+        StandardEvaluationContext context = new StandardEvaluationContext();
+        Object[] args = joinPoint.getArgs();
+        String[] paramNames = ((MethodSignature) joinPoint.getSignature()).getParameterNames();
+
+        // 设置参数名称和值到上下文
+        for (int i = 0; i < args.length; i++) {
+            context.setVariable("p" + i, args[i]); // 支持 #p0,#p1...
+            if (paramNames != null && i < paramNames.length) {
+                context.setVariable(paramNames[i], args[i]); // 支持参数名引用
+            }
+        }
+
+        // 3. 处理动态 businessType
+        BusinessType businessType = annotation.businessType();
+        if (!annotation.businessTypeExpression().isEmpty()) {
+            try {
+                businessType = parser.parseExpression(annotation.businessTypeExpression())
+                        .getValue(context, BusinessType.class);
+            } catch (Exception e) {
+                log.warn("解析 businessType 表达式失败,使用默认值: {}", e.getMessage());
+            }
+        }
+        // 4. 处理动态 logParam
+        String[] logParam = annotation.logParam();
+        if (!annotation.logParamExpression().isEmpty()) {
+            try {
+                logParam = parser.parseExpression(annotation.logParamExpression())
+                        .getValue(context, String[].class);
+            }catch (Exception e){
+                log.warn("解析 logParam 表达式失败,使用默认值: {}", e.getMessage());
+            }
+        }
+        operLog.setBusinessType(businessType.ordinal());
+        operLog.setMainType(logParam[0]);
+        operLog.setDes(logParam[1]);
+    }
 }
 }

+ 26 - 3
fs-framework/src/main/java/com/fs/framework/manager/factory/AsyncFactory.java

@@ -1,6 +1,9 @@
 package com.fs.framework.manager.factory;
 package com.fs.framework.manager.factory;
 
 
 import java.util.TimerTask;
 import java.util.TimerTask;
+
+import com.fs.hisStore.domain.SysOperLogScrm;
+import com.fs.hisStore.service.ISysOperLogScrmService;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import com.fs.common.constant.Constants;
 import com.fs.common.constant.Constants;
@@ -18,7 +21,7 @@ import eu.bitwalker.useragentutils.UserAgent;
 
 
 /**
 /**
  * 异步工厂(产生任务用)
  * 异步工厂(产生任务用)
- * 
+ *
 
 
  */
  */
 public class AsyncFactory
 public class AsyncFactory
@@ -27,7 +30,7 @@ public class AsyncFactory
 
 
     /**
     /**
      * 记录登录信息
      * 记录登录信息
-     * 
+     *
      * @param username 用户名
      * @param username 用户名
      * @param status 状态
      * @param status 状态
      * @param message 消息
      * @param message 消息
@@ -82,7 +85,7 @@ public class AsyncFactory
 
 
     /**
     /**
      * 操作日志记录
      * 操作日志记录
-     * 
+     *
      * @param operLog 操作日志信息
      * @param operLog 操作日志信息
      * @return 任务task
      * @return 任务task
      */
      */
@@ -99,4 +102,24 @@ public class AsyncFactory
             }
             }
         };
         };
     }
     }
+
+    /**
+     * 操作日志记录
+     *
+     * @param operLog 操作日志信息
+     * @return 任务task
+     */
+    public static TimerTask recordOperScrm(final SysOperLogScrm operLog)
+    {
+        return new TimerTask()
+        {
+            @Override
+            public void run()
+            {
+                // 远程查询操作地点
+                operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp()));
+                SpringUtils.getBean(ISysOperLogScrmService.class).insertOperlog(operLog);
+            }
+        };
+    }
 }
 }

+ 7 - 6
fs-ipad-task/src/main/java/com/fs/app/service/IpadSendServer.java

@@ -4,6 +4,7 @@ import com.fs.common.core.redis.RedisCache;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.date.DateUtil;
 import com.fs.common.utils.date.DateUtil;
 import com.fs.course.config.CourseMaConfig;
 import com.fs.course.config.CourseMaConfig;
+import com.fs.course.domain.FsCoursePlaySourceConfig;
 import com.fs.course.domain.FsCourseWatchLog;
 import com.fs.course.domain.FsCourseWatchLog;
 import com.fs.course.service.IFsCourseWatchLogService;
 import com.fs.course.service.IFsCourseWatchLogService;
 import com.fs.ipad.IpadSendUtils;
 import com.fs.ipad.IpadSendUtils;
@@ -42,15 +43,15 @@ public class IpadSendServer {
     private final IQwUserVideoService qwUserVideoService;
     private final IQwUserVideoService qwUserVideoService;
     private final RedisCache redisCache;
     private final RedisCache redisCache;
 
 
-    private void sendMiniProgram(BaseVo vo, QwSopCourseFinishTempSetting.Setting content, Map<String, CourseMaConfig> miniMap) {
-        CourseMaConfig courseMaConfig = miniMap.get(content.getMiniprogramAppid());
+    private void sendMiniProgram(BaseVo vo, QwSopCourseFinishTempSetting.Setting content, Map<String, FsCoursePlaySourceConfig> miniMap) {
+        FsCoursePlaySourceConfig courseMaConfig = miniMap.get(content.getMiniprogramAppid());
         // 小程序
         // 小程序
         MiniProgramVo miniProgramVo = MiniProgramVo.builder()
         MiniProgramVo miniProgramVo = MiniProgramVo.builder()
                 .desc(content.getMiniprogramTitle())
                 .desc(content.getMiniprogramTitle())
                 .title(courseMaConfig.getName())
                 .title(courseMaConfig.getName())
-                .weappIconUrl(courseMaConfig.getLog())
+                .weappIconUrl(courseMaConfig.getImg())
                 .imgUrl(content.getMiniprogramPicUrl())
                 .imgUrl(content.getMiniprogramPicUrl())
-                .username(courseMaConfig.getUsername() + "@app")
+                .username(courseMaConfig.getOriginalId() + "@app")
                 .pagepath(content.getMiniprogramPage())
                 .pagepath(content.getMiniprogramPage())
                 .appid(content.getMiniprogramAppid())
                 .appid(content.getMiniprogramAppid())
                 .build();
                 .build();
@@ -200,7 +201,6 @@ public class IpadSendServer {
                 updateQwUser.setRemark("AI未初始化");
                 updateQwUser.setRemark("AI未初始化");
                 updateQwUser.setIpadStatus(0);
                 updateQwUser.setIpadStatus(0);
                 qwUserMapper.updateById(updateQwUser);
                 qwUserMapper.updateById(updateQwUser);
-                qwUserService.atMsg(qwUser, "掉线提醒(未初始化)");
                 return false;
                 return false;
             }
             }
             if (login.getLoginType() == 1) {
             if (login.getLoginType() == 1) {
@@ -311,7 +311,7 @@ public class IpadSendServer {
         return true;
         return true;
     }
     }
 
 
-    public void send(QwSopCourseFinishTempSetting.Setting content, QwUser qwUser, QwSopLogs qwSopLogs, Map<String, CourseMaConfig> miniMap, BaseVo parentVo) {
+    public void send(QwSopCourseFinishTempSetting.Setting content, QwUser qwUser, QwSopLogs qwSopLogs, Map<String, FsCoursePlaySourceConfig> miniMap, BaseVo parentVo) {
         BaseVo vo = new BaseVo();
         BaseVo vo = new BaseVo();
         vo.setId(Long.parseLong(qwSopLogs.getId()));
         vo.setId(Long.parseLong(qwSopLogs.getId()));
         vo.setRoom(qwSopLogs.getSendType() == 12);
         vo.setRoom(qwSopLogs.getSendType() == 12);
@@ -336,6 +336,7 @@ public class IpadSendServer {
                     sendLink(vo, content);
                     sendLink(vo, content);
                     break;
                     break;
                 case "4":
                 case "4":
+                case "10":
                     sendMiniProgram(vo, content, miniMap);
                     sendMiniProgram(vo, content, miniMap);
                     break;
                     break;
                 case "5":
                 case "5":

+ 15 - 9
fs-ipad-task/src/main/java/com/fs/app/task/SendMsg.java

@@ -6,8 +6,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.fs.app.service.IpadSendServer;
 import com.fs.app.service.IpadSendServer;
 import com.fs.common.core.redis.RedisCacheT;
 import com.fs.common.core.redis.RedisCacheT;
 import com.fs.common.utils.PubFun;
 import com.fs.common.utils.PubFun;
+import com.fs.company.service.ICompanyMiniappService;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.config.CourseMaConfig;
 import com.fs.course.config.CourseMaConfig;
+import com.fs.course.domain.FsCoursePlaySourceConfig;
+import com.fs.course.service.IFsCoursePlaySourceConfigService;
 import com.fs.ipad.vo.BaseVo;
 import com.fs.ipad.vo.BaseVo;
 import com.fs.qw.domain.QwIpadServer;
 import com.fs.qw.domain.QwIpadServer;
 import com.fs.qw.domain.QwUser;
 import com.fs.qw.domain.QwUser;
@@ -48,9 +51,10 @@ public class SendMsg {
     private final IpadSendServer sendServer;
     private final IpadSendServer sendServer;
     private final SysConfigMapper sysConfigMapper;
     private final SysConfigMapper sysConfigMapper;
     private final IQwSopLogsService qwSopLogsService;
     private final IQwSopLogsService qwSopLogsService;
-    private final AsyncSopTestService asyncSopTestService;
     private final QwIpadServerMapper qwIpadServerMapper;
     private final QwIpadServerMapper qwIpadServerMapper;
     private final RedisCacheT<Long> redisCache;
     private final RedisCacheT<Long> redisCache;
+    private final ICompanyMiniappService companyMiniappService;
+    private final IFsCoursePlaySourceConfigService fsCoursePlaySourceConfigService;
 
 
     @Value("${group-no}")
     @Value("${group-no}")
     private String groupNo;
     private String groupNo;
@@ -61,15 +65,16 @@ public class SendMsg {
     @Qualifier("customThreadPool")
     @Qualifier("customThreadPool")
     private ThreadPoolTaskExecutor customThreadPool;
     private ThreadPoolTaskExecutor customThreadPool;
 
 
-    public SendMsg(QwUserMapper qwUserMapper, QwSopLogsMapper qwSopLogsMapper, IpadSendServer sendServer, SysConfigMapper sysConfigMapper, IQwSopLogsService qwSopLogsService, AsyncSopTestService asyncSopTestService, QwIpadServerMapper qwIpadServerMapper, RedisCacheT<Long> redisCache) {
+    public SendMsg(QwUserMapper qwUserMapper, QwSopLogsMapper qwSopLogsMapper, IpadSendServer sendServer, SysConfigMapper sysConfigMapper, IQwSopLogsService qwSopLogsService, QwIpadServerMapper qwIpadServerMapper, RedisCacheT<Long> redisCache, ICompanyMiniappService companyMiniappService, IFsCoursePlaySourceConfigService fsCoursePlaySourceConfigService) {
         this.qwUserMapper = qwUserMapper;
         this.qwUserMapper = qwUserMapper;
         this.qwSopLogsMapper = qwSopLogsMapper;
         this.qwSopLogsMapper = qwSopLogsMapper;
         this.sendServer = sendServer;
         this.sendServer = sendServer;
         this.sysConfigMapper = sysConfigMapper;
         this.sysConfigMapper = sysConfigMapper;
         this.qwSopLogsService = qwSopLogsService;
         this.qwSopLogsService = qwSopLogsService;
-        this.asyncSopTestService = asyncSopTestService;
         this.qwIpadServerMapper = qwIpadServerMapper;
         this.qwIpadServerMapper = qwIpadServerMapper;
         this.redisCache = redisCache;
         this.redisCache = redisCache;
+        this.companyMiniappService = companyMiniappService;
+        this.fsCoursePlaySourceConfigService = fsCoursePlaySourceConfigService;
     }
     }
     private List<QwUser> getQwUserList() {
     private List<QwUser> getQwUserList() {
         if (qwUserList.isEmpty()) {
         if (qwUserList.isEmpty()) {
@@ -84,10 +89,11 @@ public class SendMsg {
         return qwUserList;
         return qwUserList;
     }
     }
 
 
-    private Map<String, CourseMaConfig> getMiniMap() {
-        SysConfig maConfig = sysConfigMapper.selectConfigByConfigKey("courseMa.config");
-        List<CourseMaConfig> courseMaConfigs = JSON.parseArray(maConfig.getConfigValue(), CourseMaConfig.class);
-        return PubFun.listToMapByGroupObject(courseMaConfigs, CourseMaConfig::getAppid);
+    private Map<String, FsCoursePlaySourceConfig> getMiniMap() {
+        List<FsCoursePlaySourceConfig> list = fsCoursePlaySourceConfigService.list(new QueryWrapper<FsCoursePlaySourceConfig>().ne("type", 2).eq("is_del", 0));
+//        SysConfig maConfig = sysConfigMapper.selectConfigByConfigKey("courseMa.config");
+//        List<CourseMaConfig> courseMaConfigs = JSON.parseArray(maConfig.getConfigValue(), CourseMaConfig.class);
+        return PubFun.listToMapByGroupObject(list, FsCoursePlaySourceConfig::getAppid);
     }
     }
 
 
 
 
@@ -117,7 +123,7 @@ public class SendMsg {
             delayEnd = config.getDelayEnd();
             delayEnd = config.getDelayEnd();
         }
         }
         // 小程序配置获取
         // 小程序配置获取
-        Map<String, CourseMaConfig> miniMap = getMiniMap();
+        Map<String, FsCoursePlaySourceConfig> miniMap = getMiniMap();
         // 获取 pad 发送的企微
         // 获取 pad 发送的企微
         getQwUserList().forEach(e -> {
         getQwUserList().forEach(e -> {
             // 如果没有值就执行后面的方法 并且入值
             // 如果没有值就执行后面的方法 并且入值
@@ -148,7 +154,7 @@ public class SendMsg {
      * @param delayEnd   随机延迟 最大值
      * @param delayEnd   随机延迟 最大值
      * @param miniMap    小程序配置
      * @param miniMap    小程序配置
      */
      */
-    private void processUser(QwUser qwUser, int delayStart, int delayEnd, Map<String, CourseMaConfig> miniMap) {
+    private void processUser(QwUser qwUser, int delayStart, int delayEnd, Map<String, FsCoursePlaySourceConfig> miniMap) {
         long start1 = System.currentTimeMillis();
         long start1 = System.currentTimeMillis();
         // 获取当前企微待发送记录
         // 获取当前企微待发送记录
         List<QwSopLogs> qwSopLogList = qwSopLogsMapper.selectByQwUserId(qwUser.getId());
         List<QwSopLogs> qwSopLogList = qwSopLogsMapper.selectByQwUserId(qwUser.getId());

+ 16 - 5
fs-qw-api-msg/src/main/java/com/fs/app/controller/QwMsgController.java

@@ -12,6 +12,7 @@ import com.fs.qw.domain.QwUser;
 import com.fs.qw.mapper.QwExternalContactMapper;
 import com.fs.qw.mapper.QwExternalContactMapper;
 import com.fs.qw.mapper.QwUserMapper;
 import com.fs.qw.mapper.QwUserMapper;
 import com.fs.qw.service.IQwExternalContactService;
 import com.fs.qw.service.IQwExternalContactService;
+import com.fs.qw.service.IQwUserService;
 import com.fs.qw.service.IQwUserVoiceLogService;
 import com.fs.qw.service.IQwUserVoiceLogService;
 import com.fs.sop.mapper.QwSopLogsMapper;
 import com.fs.sop.mapper.QwSopLogsMapper;
 import com.fs.sop.mapper.SopUserLogsInfoMapper;
 import com.fs.sop.mapper.SopUserLogsInfoMapper;
@@ -45,6 +46,8 @@ public class QwMsgController {
     @Autowired
     @Autowired
     WxWorkService wxWorkService;
     WxWorkService wxWorkService;
     @Autowired
     @Autowired
+    IQwUserService qwUserService;
+    @Autowired
     IQwUserVoiceLogService qwUserVoiceLogService;
     IQwUserVoiceLogService qwUserVoiceLogService;
     @Autowired
     @Autowired
     IFsStoreOrderService fsStoreOrderService;
     IFsStoreOrderService fsStoreOrderService;
@@ -189,23 +192,27 @@ public class QwMsgController {
             case 100005:
             case 100005:
 
 
                 log.info("手机端结束登录:"+wxWorkMsgResp.getJson());
                 log.info("手机端结束登录:"+wxWorkMsgResp.getJson());
-                qwUserStatus(wxWorkMsgResp.getUuid(),0);
+                JSONObject jsonObject1 = new JSONObject(wxWorkMsgResp.getJson());
+                qwUserStatus(wxWorkMsgResp.getUuid(),0, jsonObject1.getString("msg"));
                 break;
                 break;
             case 100008:
             case 100008:
                 QwUser vidUser = qwUserMapper.selectQwUserById(id);
                 QwUser vidUser = qwUserMapper.selectQwUserById(id);
                 if (vidUser.getUid().equals(wxWorkMsgResp.getUuid())){
                 if (vidUser.getUid().equals(wxWorkMsgResp.getUuid())){
                     log.info("当前账号在其他设备登录:"+wxWorkMsgResp.getJson());
                     log.info("当前账号在其他设备登录:"+wxWorkMsgResp.getJson());
-                    qwUserStatus(wxWorkMsgResp.getUuid(),0);
+                    JSONObject jsonObject2 = new JSONObject(wxWorkMsgResp.getJson());
+                    qwUserStatus(wxWorkMsgResp.getUuid(),0, jsonObject2.getString("msg"));
                 }
                 }
                 log.info("当前账号重新登录:"+wxWorkMsgResp.getJson());
                 log.info("当前账号重新登录:"+wxWorkMsgResp.getJson());
                 break;
                 break;
             case 100007:
             case 100007:
                 log.info("异常断开:"+wxWorkMsgResp.getJson());
                 log.info("异常断开:"+wxWorkMsgResp.getJson());
-                qwUserStatus(wxWorkMsgResp.getUuid(),0);
+                JSONObject jsonObject3 = new JSONObject(wxWorkMsgResp.getJson());
+                qwUserStatus(wxWorkMsgResp.getUuid(),0, "异常断开 - " + jsonObject3.getString("msg"));
                 break;
                 break;
             case 100009:
             case 100009:
                 log.info("二次验证:"+wxWorkMsgResp.getJson());
                 log.info("二次验证:"+wxWorkMsgResp.getJson());
-                qwUserStatus(wxWorkMsgResp.getUuid(),0);
+                JSONObject jsonObject4 = new JSONObject(wxWorkMsgResp.getJson());
+                qwUserStatus(wxWorkMsgResp.getUuid(),0, "二次验证 - " + jsonObject4.getString("msg"));
                 break;
                 break;
             case 102001:
             case 102001:
             case 102002:
             case 102002:
@@ -428,12 +435,16 @@ public class QwMsgController {
 
 
 
 
 
 
-    void qwUserStatus(String uid,Integer status){
+    void qwUserStatus(String uid, Integer status, String msg){
         Long id = redisCache.getCacheObject("qrCode:uuid:"+uid);
         Long id = redisCache.getCacheObject("qrCode:uuid:"+uid);
         QwUser qwUser = new QwUser();
         QwUser qwUser = new QwUser();
         qwUser.setId(id);
         qwUser.setId(id);
         qwUser.setIpadStatus(status);
         qwUser.setIpadStatus(status);
         qwUserMapper.updateQwUser(qwUser);
         qwUserMapper.updateQwUser(qwUser);
+        QwUser qwUser1 = qwUserMapper.selectQwUserById(id);
+        if(uid.equals(qwUser1.getUid())){
+            qwUserService.atMsg(qwUser1, "掉线提醒("+msg+")");
+        }
     }
     }
 
 
 }
 }

+ 56 - 16
fs-qw-task/src/main/java/com/fs/app/taskService/impl/SopLogsTaskServiceImpl.java

@@ -8,10 +8,13 @@ import com.fs.common.core.domain.R;
 import com.fs.common.exception.base.BaseException;
 import com.fs.common.exception.base.BaseException;
 import com.fs.common.utils.PubFun;
 import com.fs.common.utils.PubFun;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.StringUtils;
+import com.fs.company.domain.Company;
 import com.fs.company.domain.CompanyMiniapp;
 import com.fs.company.domain.CompanyMiniapp;
 import com.fs.company.domain.CompanyUser;
 import com.fs.company.domain.CompanyUser;
+import com.fs.company.mapper.CompanyMapper;
 import com.fs.company.service.ICompanyMiniappService;
 import com.fs.company.service.ICompanyMiniappService;
 import com.fs.company.service.ICompanyUserService;
 import com.fs.company.service.ICompanyUserService;
+import com.fs.config.cloud.CloudHostProper;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.domain.*;
 import com.fs.course.domain.*;
 import com.fs.course.mapper.*;
 import com.fs.course.mapper.*;
@@ -136,6 +139,8 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
     private IQwSopTempContentService qwSopTempContentService;
     private IQwSopTempContentService qwSopTempContentService;
     @Autowired
     @Autowired
     private IQwSopTempVoiceService qwSopTempVoiceService;
     private IQwSopTempVoiceService qwSopTempVoiceService;
+    @Autowired
+    private CloudHostProper cloudHostProper;
 
 
     // Blocking queues with bounded capacity to implement backpressure
     // Blocking queues with bounded capacity to implement backpressure
     private final BlockingQueue<QwSopLogs> qwSopLogsQueue = new LinkedBlockingQueue<>(20000);
     private final BlockingQueue<QwSopLogs> qwSopLogsQueue = new LinkedBlockingQueue<>(20000);
@@ -165,6 +170,8 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
     @Autowired
     @Autowired
     private IQwCompanyService iQwCompanyService;
     private IQwCompanyService iQwCompanyService;
 
 
+    @Autowired
+    private CompanyMapper companyMapper;
 
 
     @PostConstruct
     @PostConstruct
     public void init() {
     public void init() {
@@ -312,6 +319,9 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
 
 
         Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap = miniList.stream().collect(Collectors.groupingBy(CompanyMiniapp::getCompanyId, Collectors.groupingBy(CompanyMiniapp::getType)));
         Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap = miniList.stream().collect(Collectors.groupingBy(CompanyMiniapp::getCompanyId, Collectors.groupingBy(CompanyMiniapp::getType)));
 
 
+
+        List<Company> companies = companyMapper.selectCompanyAllList();
+
         log.info("共分组 {} 个 SOP ID 进行处理。", sopLogsGroupedById.size());
         log.info("共分组 {} 个 SOP ID 进行处理。", sopLogsGroupedById.size());
 
 
         CountDownLatch sopGroupLatch = new CountDownLatch(sopLogsGroupedById.size());
         CountDownLatch sopGroupLatch = new CountDownLatch(sopLogsGroupedById.size());
@@ -319,7 +329,7 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
         for (Map.Entry<String, List<SopUserLogsVo>> entry : sopLogsGroupedById.entrySet()) {
         for (Map.Entry<String, List<SopUserLogsVo>> entry : sopLogsGroupedById.entrySet()) {
             String sopId = entry.getKey();
             String sopId = entry.getKey();
             List<SopUserLogsVo> userLogsVos = entry.getValue();
             List<SopUserLogsVo> userLogsVos = entry.getValue();
-            processSopGroupAsync(sopId, userLogsVos, sopGroupLatch,currentTime, groupChatMap,config,miniMap);
+            processSopGroupAsync(sopId, userLogsVos, sopGroupLatch,currentTime, groupChatMap,config,miniMap,companies);
         }
         }
 
 
         // 等待所有 SOP 分组处理完成
         // 等待所有 SOP 分组处理完成
@@ -340,9 +350,10 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
             backoff = @Backoff(delay = 2000)
             backoff = @Backoff(delay = 2000)
     )
     )
     public void processSopGroupAsync(String sopId, List<SopUserLogsVo> userLogsVos, CountDownLatch latch ,LocalDateTime currentTime,
     public void processSopGroupAsync(String sopId, List<SopUserLogsVo> userLogsVos, CountDownLatch latch ,LocalDateTime currentTime,
-                                     Map<String, QwGroupChat> groupChatMap,CourseConfig config,Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap) {
+                                     Map<String, QwGroupChat> groupChatMap,CourseConfig config,Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap,
+                                     List<Company> companies) {
         try {
         try {
-            processSopGroup(sopId, userLogsVos,currentTime, groupChatMap, config,miniMap);
+            processSopGroup(sopId, userLogsVos,currentTime, groupChatMap, config,miniMap,companies);
         } catch (Exception e) {
         } catch (Exception e) {
             log.error("处理 SOP ID {} 时发生异常: {}", sopId, e.getMessage(), e);
             log.error("处理 SOP ID {} 时发生异常: {}", sopId, e.getMessage(), e);
         } finally {
         } finally {
@@ -352,7 +363,8 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
 
 
 
 
     private void processSopGroup(String sopId, List<SopUserLogsVo> userLogsVos,LocalDateTime currentTime, Map<String,
     private void processSopGroup(String sopId, List<SopUserLogsVo> userLogsVos,LocalDateTime currentTime, Map<String,
-            QwGroupChat> groupChatMap,CourseConfig config,Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap) throws Exception {
+            QwGroupChat> groupChatMap,CourseConfig config,Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap,
+                                 List<Company> companies) throws Exception {
         QwSopRuleTimeVO ruleTimeVO = sopMapper.selectQwSopByClickHouseId(sopId);
         QwSopRuleTimeVO ruleTimeVO = sopMapper.selectQwSopByClickHouseId(sopId);
 
 
         if (ruleTimeVO == null) {
         if (ruleTimeVO == null) {
@@ -394,7 +406,8 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
 
 
         CountDownLatch userLogsLatch = new CountDownLatch(userLogsVos.size());
         CountDownLatch userLogsLatch = new CountDownLatch(userLogsVos.size());
         for (SopUserLogsVo logVo : userLogsVos) {
         for (SopUserLogsVo logVo : userLogsVos) {
-            processUserLogAsync(logVo, ruleTimeVO, rulesList, userLogsLatch, currentTime, groupChatMap,qwCompany.getMiniAppId(), config,miniMap);
+            processUserLogAsync(logVo, ruleTimeVO, rulesList, userLogsLatch, currentTime, groupChatMap,qwCompany.getMiniAppId(),
+                    config,miniMap,companies);
         }
         }
 
 
         // 等待所有用户日志处理完成
         // 等待所有用户日志处理完成
@@ -415,9 +428,10 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
     )
     )
     public void processUserLogAsync(SopUserLogsVo logVo, QwSopRuleTimeVO ruleTimeVO, List<QwSopTempRules> tempSettings,
     public void processUserLogAsync(SopUserLogsVo logVo, QwSopRuleTimeVO ruleTimeVO, List<QwSopTempRules> tempSettings,
                                     CountDownLatch latch, LocalDateTime currentTime, Map<String, QwGroupChat> groupChatMap,
                                     CountDownLatch latch, LocalDateTime currentTime, Map<String, QwGroupChat> groupChatMap,
-                                    String miniAppId,CourseConfig config,Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap) {
+                                    String miniAppId,CourseConfig config,Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap,
+                                    List<Company> companies) {
         try {
         try {
-            processUserLog(logVo, ruleTimeVO, tempSettings,currentTime, groupChatMap, miniAppId, config,miniMap);
+            processUserLog(logVo, ruleTimeVO, tempSettings,currentTime, groupChatMap, miniAppId, config,miniMap,companies);
         } catch (Exception e) {
         } catch (Exception e) {
             log.error("处理用户日志 {} 时发生异常: {}", logVo.getId(), e.getMessage(), e);
             log.error("处理用户日志 {} 时发生异常: {}", logVo.getId(), e.getMessage(), e);
         } finally {
         } finally {
@@ -428,7 +442,8 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
 
 
     private void processUserLog(SopUserLogsVo logVo, QwSopRuleTimeVO ruleTimeVO, List<QwSopTempRules> tempSettings,
     private void processUserLog(SopUserLogsVo logVo, QwSopRuleTimeVO ruleTimeVO, List<QwSopTempRules> tempSettings,
                                 LocalDateTime currentTime, Map<String, QwGroupChat> groupChatMap,String miniAppId,
                                 LocalDateTime currentTime, Map<String, QwGroupChat> groupChatMap,String miniAppId,
-                                CourseConfig config,Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap) {
+                                CourseConfig config,Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap,
+                                List<Company> companies) {
         try {
         try {
 
 
             LocalDate startDate = LocalDate.parse(logVo.getStartTime(), DATE_FORMATTER);
             LocalDate startDate = LocalDate.parse(logVo.getStartTime(), DATE_FORMATTER);
@@ -596,7 +611,7 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
 
 
                         insertSopUserLogs(sopUserLogsInfos, logVo, sendTime, ruleTimeVO, content, qwUserId,
                         insertSopUserLogs(sopUserLogsInfos, logVo, sendTime, ruleTimeVO, content, qwUserId,
                                 companyUserId, companyId, qwUserByRedis.getWelcomeText(),qwUserByRedis.getQwUserName(),
                                 companyUserId, companyId, qwUserByRedis.getWelcomeText(),qwUserByRedis.getQwUserName(),
-                                groupChatMap, miniAppId,config,miniMap, sendMsgType);
+                                groupChatMap, miniAppId,config,miniMap, sendMsgType,companies);
 
 
                     }
                     }
                 } catch (Exception e) {
                 } catch (Exception e) {
@@ -640,7 +655,8 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
                                    QwSopRuleTimeVO ruleTimeVO, QwSopTempSetting.Content content,
                                    QwSopRuleTimeVO ruleTimeVO, QwSopTempSetting.Content content,
                                    String qwUserId,String companyUserId,String companyId,String welcomeText,String qwUserName,
                                    String qwUserId,String companyUserId,String companyId,String welcomeText,String qwUserName,
                                    Map<String, QwGroupChat> groupChatMap,String miniAppId,CourseConfig config,
                                    Map<String, QwGroupChat> groupChatMap,String miniAppId,CourseConfig config,
-                                   Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap, Integer sendMsgType) {
+                                   Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap, Integer sendMsgType,
+                                   List<Company> companies) {
         String formattedSendTime = sendTime.toInstant()
         String formattedSendTime = sendTime.toInstant()
                 .atZone(ZoneId.systemDefault())
                 .atZone(ZoneId.systemDefault())
                 .format(DATE_TIME_FORMATTER);
                 .format(DATE_TIME_FORMATTER);
@@ -667,7 +683,7 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
                 QwSopLogs sopLogs = createBaseLog(formattedSendTime, logVo, ruleTimeVO, groupChat.getChatId(), groupChat.getName(), null, isOfficial, null);
                 QwSopLogs sopLogs = createBaseLog(formattedSendTime, logVo, ruleTimeVO, groupChat.getChatId(), groupChat.getName(), null, isOfficial, null);
                 handleLogBasedOnType(sopLogs, content, logVo, sendTime, courseId, videoId,
                 handleLogBasedOnType(sopLogs, content, logVo, sendTime, courseId, videoId,
                         type, qwUserId, companyUserId, companyId, groupChat.getChatId(), welcomeText, qwUserName,
                         type, qwUserId, companyUserId, companyId, groupChat.getChatId(), welcomeText, qwUserName,
-                        null, true, miniAppId, groupChat,config, miniMap, null, sendMsgType);
+                        null, true, miniAppId, groupChat,config, miniMap, null, sendMsgType,companies);
             } else {
             } else {
                 if(groupChat.getChatUserList() != null && !groupChat.getChatUserList().isEmpty()){
                 if(groupChat.getChatUserList() != null && !groupChat.getChatUserList().isEmpty()){
                     groupChat.getChatUserList().forEach(user -> {
                     groupChat.getChatUserList().forEach(user -> {
@@ -676,7 +692,7 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
                         QwSopLogs sopLogs = createBaseLog(formattedSendTime, logVo, ruleTimeVO, user.getUserId(), user.getName(), null, isOfficial, null);
                         QwSopLogs sopLogs = createBaseLog(formattedSendTime, logVo, ruleTimeVO, user.getUserId(), user.getName(), null, isOfficial, null);
                         handleLogBasedOnType(sopLogs, content, logVo, sendTime, courseId, videoId,
                         handleLogBasedOnType(sopLogs, content, logVo, sendTime, courseId, videoId,
                                 type, qwUserId, companyUserId, companyId, user.getId().toString(), welcomeText, qwUserName,
                                 type, qwUserId, companyUserId, companyId, user.getId().toString(), welcomeText, qwUserName,
-                                null, false, miniAppId, groupChat,config, miniMap, null, sendMsgType);
+                                null, false, miniAppId, groupChat,config, miniMap, null, sendMsgType,companies);
                     });
                     });
                 }
                 }
             }
             }
@@ -691,7 +707,7 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
                     QwSopLogs sopLogs = createBaseLog(formattedSendTime, logVo, ruleTimeVO, contactId.getExternalContactId(), externalUserName, fsUserId, isOfficial, contactId.getExternalId());
                     QwSopLogs sopLogs = createBaseLog(formattedSendTime, logVo, ruleTimeVO, contactId.getExternalContactId(), externalUserName, fsUserId, isOfficial, contactId.getExternalId());
                     handleLogBasedOnType(sopLogs, content, logVo, sendTime, courseId, videoId,
                     handleLogBasedOnType(sopLogs, content, logVo, sendTime, courseId, videoId,
                             type, qwUserId, companyUserId, companyId, externalId, welcomeText, qwUserName, fsUserId, false, miniAppId,
                             type, qwUserId, companyUserId, companyId, externalId, welcomeText, qwUserName, fsUserId, false, miniAppId,
-                            null,config, miniMap, grade, sendMsgType);
+                            null,config, miniMap, grade, sendMsgType,companies);
                 } catch (Exception e) {
                 } catch (Exception e) {
                     log.error("处理 externalContactId {} 时发生异常: {}", contactId, e.getMessage(), e);
                     log.error("处理 externalContactId {} 时发生异常: {}", contactId, e.getMessage(), e);
                 }
                 }
@@ -800,7 +816,7 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
                                       String qwUserName, Long fsUserId, boolean isGroupChat, String miniAppId,
                                       String qwUserName, Long fsUserId, boolean isGroupChat, String miniAppId,
                                       QwGroupChat groupChat,CourseConfig config,
                                       QwGroupChat groupChat,CourseConfig config,
                                       Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap,
                                       Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap,
-                                      Integer grade, Integer sendMsgType  ) {
+                                      Integer grade, Integer sendMsgType ,List<Company> companies ) {
         switch (type) {
         switch (type) {
             case 1:
             case 1:
                 handleNormalMessage(sopLogs, content,companyUserId);
                 handleNormalMessage(sopLogs, content,companyUserId);
@@ -808,7 +824,7 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
             case 2:
             case 2:
                 handleCourseMessage(sopLogs, content, logVo, sendTime, courseId, videoId,
                 handleCourseMessage(sopLogs, content, logVo, sendTime, courseId, videoId,
                         qwUserId, companyUserId, companyId, externalId, welcomeText,qwUserName, fsUserId,
                         qwUserId, companyUserId, companyId, externalId, welcomeText,qwUserName, fsUserId,
-                        isGroupChat, miniAppId, groupChat,config,miniMap, grade, sendMsgType);
+                        isGroupChat, miniAppId, groupChat,config,miniMap, grade, sendMsgType,companies);
                 break;
                 break;
             case 3:
             case 3:
                 handleOrderMessage(sopLogs, content);
                 handleOrderMessage(sopLogs, content);
@@ -841,7 +857,8 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
                                      SopUserLogsVo logVo, Date sendTime, Long courseId, Long videoId, String qwUserId, String companyUserId,
                                      SopUserLogsVo logVo, Date sendTime, Long courseId, Long videoId, String qwUserId, String companyUserId,
                                      String companyId, String externalId, String welcomeText, String qwUserName,
                                      String companyId, String externalId, String welcomeText, String qwUserName,
                                      Long fsUserId, boolean isGroupChat, String miniAppId, QwGroupChat groupChat,CourseConfig config,Map<Long,
                                      Long fsUserId, boolean isGroupChat, String miniAppId, QwGroupChat groupChat,CourseConfig config,Map<Long,
-                                     Map<Integer, List<CompanyMiniapp>>> miniMap,Integer grade, Integer sendMsgType) {
+                                     Map<Integer, List<CompanyMiniapp>>> miniMap,Integer grade, Integer sendMsgType,
+                                     List<Company> companies) {
         // 深拷贝 Content 对象,避免使用 JSON
         // 深拷贝 Content 对象,避免使用 JSON
         QwSopTempSetting.Content clonedContent = deepCopyContent(content);
         QwSopTempSetting.Content clonedContent = deepCopyContent(content);
         if (clonedContent == null) {
         if (clonedContent == null) {
@@ -967,6 +984,28 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
                     setting.setLinkUrl(linkByApp.getSortLink().replaceAll("^[\\s\\u2005]+", ""));
                     setting.setLinkUrl(linkByApp.getSortLink().replaceAll("^[\\s\\u2005]+", ""));
                     setting.setAppLinkUrl(linkByApp.getAppMsgLink().replaceAll("^[\\s\\u2005]+", ""));
                     setting.setAppLinkUrl(linkByApp.getAppMsgLink().replaceAll("^[\\s\\u2005]+", ""));
 
 
+                    break;
+                //自定义小程序
+                case "10":
+                    addWatchLogIfNeeded(sopLogs, videoId, courseId, sendTime, qwUserId, companyUserId, companyId, externalId,logVo);
+
+                    Optional<Company> matchedCompany = companies.stream()
+                            .filter(company -> String.valueOf(company.getCompanyId()).equals(companyId))
+                            .findFirst();
+                    if (matchedCompany.isPresent()) {
+                        Company company = matchedCompany.get();
+
+                        String customMiniAppId = company.getCustomMiniAppId();
+
+                        if (customMiniAppId != null && !customMiniAppId.trim().isEmpty()) {
+                            setting.setMiniprogramAppid(customMiniAppId);
+                        } else {
+                            setting.setMiniprogramAppid("该公司未配置自定义小程序:"+companyId);
+                        }
+                    } else {
+                        setting.setMiniprogramAppid("未找到匹配的公司的自定义小程序:"+companyId);
+                    }
+
                     break;
                     break;
                 default:
                 default:
                     break;
                     break;
@@ -1261,6 +1300,7 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
         link.setCorpId(logVo.getCorpId());
         link.setCorpId(logVo.getCorpId());
         link.setCourseId(courseId.longValue());
         link.setCourseId(courseId.longValue());
         link.setQwExternalId(Long.parseLong(externalId));
         link.setQwExternalId(Long.parseLong(externalId));
+        link.setProjectCode(cloudHostProper.getProjectCode());
 
 
         if (StringUtil.strIsNullOrEmpty(isOfficial)){
         if (StringUtil.strIsNullOrEmpty(isOfficial)){
             link.setLinkType(3);
             link.setLinkType(3);

+ 9 - 8
fs-qwhook/src/main/java/com/fs/framework/config/MyBatisConfig.java

@@ -1,5 +1,6 @@
 package com.fs.framework.config;
 package com.fs.framework.config;
 
 
+import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.StringUtils;
 import org.apache.ibatis.io.VFS;
 import org.apache.ibatis.io.VFS;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.apache.ibatis.session.SqlSessionFactory;
@@ -27,7 +28,7 @@ import java.util.List;
 
 
 /**
 /**
  * Mybatis支持*匹配扫描包
  * Mybatis支持*匹配扫描包
- * 
+ *
 
 
  */
  */
 @Configuration
 @Configuration
@@ -115,19 +116,19 @@ public class MyBatisConfig
     }
     }
 
 
     @Bean
     @Bean
-    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
+    public SqlSessionFactory sqlSessionFactorys(DataSource dataSource) throws Exception
     {
     {
-        String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");
-        String mapperLocations = env.getProperty("mybatis.mapperLocations");
-        String configLocation = env.getProperty("mybatis.configLocation");
+        String typeAliasesPackage = env.getProperty("mybatis-plus.typeAliasesPackage");
+        String mapperLocations = env.getProperty("mybatis-plus.mapperLocations");
+        String configLocation = env.getProperty("mybatis-plus.configLocation");
         typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
         typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
         VFS.addImplClass(SpringBootVFS.class);
         VFS.addImplClass(SpringBootVFS.class);
 
 
-        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
+        final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
         sessionFactory.setDataSource(dataSource);
         sessionFactory.setDataSource(dataSource);
         sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
         sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
-        sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
+        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
         sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
         sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
         return sessionFactory.getObject();
         return sessionFactory.getObject();
     }
     }
-}
+}

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

@@ -110,6 +110,11 @@ public class Company extends BaseEntity
      * 点播配置-小程序appId
      * 点播配置-小程序appId
      */
      */
     private String courseMiniAppId;
     private String courseMiniAppId;
+    /**
+    * 自定义小程序
+    */
+    private String customMiniAppId;
+
     /** 会员是否默认黑名单,1-是;0-否(用于销售分享成为会员的操作) */
     /** 会员是否默认黑名单,1-是;0-否(用于销售分享成为会员的操作) */
     private Integer fsUserIsDefaultBlack;
     private Integer fsUserIsDefaultBlack;
     private Integer repeat;
     private Integer repeat;
@@ -121,6 +126,9 @@ public class Company extends BaseEntity
     @TableField(exist = false)
     @TableField(exist = false)
     private List<String> miniAppServer;
     private List<String> miniAppServer;
 
 
+    @TableField(exist = false)
+    private boolean updateMiniApp;
+
     /** 后台制单是否需要付款 默认1 0-否 1-是*/
     /** 后台制单是否需要付款 默认1 0-否 1-是*/
     private Integer isPay;
     private Integer isPay;
 
 

+ 1 - 0
fs-service/src/main/java/com/fs/company/mapper/CompanyMapper.java

@@ -189,4 +189,5 @@ public interface CompanyMapper
 
 
     List<Company> selectCompanyByIds2(@Param("companyIds") Set<Long> companyIds);
     List<Company> selectCompanyByIds2(@Param("companyIds") Set<Long> companyIds);
 
 
+
 }
 }

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

@@ -310,4 +310,6 @@ public interface CompanyUserMapper
     List<QwIpadTotalVo> selectCompanyByIpadStatusCount();
     List<QwIpadTotalVo> selectCompanyByIpadStatusCount();
 
 
     int insertQwIpadTotal(List<QwIpadTotalVo> qwIpadTotalVos);
     int insertQwIpadTotal(List<QwIpadTotalVo> qwIpadTotalVos);
+
+    void uploadQrCode(@Param("userId") String userId, @Param("url") String url);
 }
 }

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

@@ -124,9 +124,15 @@ public interface ICompanyService
 
 
     void subtractCompanyMoney(FsStoreOrder order);
     void subtractCompanyMoney(FsStoreOrder order);
 
 
+    @Transactional
+    void subtractCompanyMoneyScrm(FsStoreOrderScrm order);
+
     void inquirySubtractCompanyMoney(FsInquiryOrder order);
     void inquirySubtractCompanyMoney(FsInquiryOrder order);
     void refundCompanyMoney(FsStoreOrder order);
     void refundCompanyMoney(FsStoreOrder order);
 
 
+    @Transactional
+    void refundCompanyMoneyScrm(FsStoreOrderScrm order);
+
     Company selectCompanyByIdForUpdate(Long companyId);
     Company selectCompanyByIdForUpdate(Long companyId);
 
 
     public void subtractCompanyMoney(BigDecimal money, Long companyId);
     public void subtractCompanyMoney(BigDecimal money, Long companyId);

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

@@ -12,7 +12,9 @@ import com.fs.qw.vo.CompanyUserQwVO;
 import com.fs.qw.vo.QwOptionsVO;
 import com.fs.qw.vo.QwOptionsVO;
 import com.fs.qw.vo.QwUserVO;
 import com.fs.qw.vo.QwUserVO;
 import com.fs.wxUser.domain.CompanyWxUser;
 import com.fs.wxUser.domain.CompanyWxUser;
+import org.springframework.web.multipart.MultipartFile;
 
 
+import java.io.IOException;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 import java.util.Set;
 import java.util.Set;
@@ -223,4 +225,5 @@ public interface ICompanyUserService {
 
 
     int insertQwIpadTotal(List<QwIpadTotalVo> qwIpadTotalVos);
     int insertQwIpadTotal(List<QwIpadTotalVo> qwIpadTotalVos);
 
 
+    String uploadQrCode(MultipartFile file,String userId) throws IOException;
 }
 }

+ 79 - 1
fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java

@@ -265,7 +265,9 @@ public class CompanyServiceImpl implements ICompanyService
     public int updateCompany(Company company)
     public int updateCompany(Company company)
     {
     {
         company.setUpdateTime(DateUtils.getNowDate());
         company.setUpdateTime(DateUtils.getNowDate());
-        bindMiniApp(company);
+        if(company.isUpdateMiniApp()){
+            bindMiniApp(company);
+        }
         return companyMapper.updateCompany(company);
         return companyMapper.updateCompany(company);
     }
     }
     // 绑定小程序
     // 绑定小程序
@@ -681,6 +683,36 @@ public class CompanyServiceImpl implements ICompanyService
         }
         }
     }
     }
 
 
+    @Override
+    @Transactional
+    public void subtractCompanyMoneyScrm(FsStoreOrderScrm order) {
+
+        if(order.getCompanyId()!=null&&order.getCompanyId()>0){
+            Company company=companyMapper.selectCompanyByIdForUpdate(order.getCompanyId());
+            if(company!=null){
+                SysConfig sysConfig = sysConfigMapper.selectConfigByConfigKey("his.store");
+                StoreConfig fsPayConfig = new Gson().fromJson(sysConfig.getConfigValue(), StoreConfig.class);
+                Integer DeductMoneyRate = fsPayConfig.getDeductMoneyRate();
+                BigDecimal money = BigDecimal.ZERO;
+                if (DeductMoneyRate != null && DeductMoneyRate > 0) {
+                    money = order.getPrescribePrice().multiply(new BigDecimal(DeductMoneyRate).multiply(new BigDecimal("0.01")));
+                }
+                logger.info("扣除成本:"+order.getOrderCode()+":"+money);
+                company.setMoney(company.getMoney().subtract(money));
+                companyMapper.updateCompany(company);
+                CompanyMoneyLogs log=new CompanyMoneyLogs();
+                log.setCompanyId(company.getCompanyId());
+                log.setRemark("发货扣除成本");
+                log.setMoney(money.multiply(new BigDecimal(-1)));
+                log.setLogsType(5);
+                log.setBalance(company.getMoney());
+                log.setCreateTime(new Date());
+                log.setBusinessId(order.getId().toString());
+                moneyLogsMapper.insertCompanyMoneyLogs(log);
+            }
+        }
+    }
+
     @Override
     @Override
     @Transactional
     @Transactional
     public void inquirySubtractCompanyMoney(FsInquiryOrder order) {
     public void inquirySubtractCompanyMoney(FsInquiryOrder order) {
@@ -1207,6 +1239,52 @@ public class CompanyServiceImpl implements ICompanyService
         }
         }
     }
     }
 
 
+    @Override
+    @Transactional
+    public void refundCompanyMoneyScrm(FsStoreOrderScrm order) {
+        if(order.getCompanyId()!=null&&order.getCompanyId()>0){
+            Company company=companyMapper.selectCompanyByIdForUpdate(order.getCompanyId());
+            if(company!=null){
+                List<CompanyMoneyLogs> companyMoneyLogs = moneyLogsMapper.selectCompanyMoneyByOrderId(order.getId());
+                for (CompanyMoneyLogs logs : companyMoneyLogs) {
+                    if (logs.getLogsType()==3){
+                        if (order.getTuiMoneyStatus()!=null&&order.getTuiMoneyStatus()==0){
+                            continue;
+                        }
+                        BigDecimal money = logs.getMoney().multiply(new BigDecimal(-1));
+                        logger.info("退款佣金扣除:"+company.getCompanyId()+":"+money);
+                        company.setMoney(company.getMoney().subtract(logs.getMoney()));
+                        companyMapper.updateCompany(company);
+                        CompanyMoneyLogs log=new CompanyMoneyLogs();
+                        log.setCompanyId(company.getCompanyId());
+                        log.setRemark("退款佣金扣除");
+                        log.setMoney(money);
+                        log.setLogsType(4);
+                        log.setBalance(company.getMoney());
+                        log.setCreateTime(new Date());
+                        log.setBusinessId(order.getId().toString());
+                        moneyLogsMapper.insertCompanyMoneyLogs(log);
+                    }else if(logs.getLogsType()==5){
+                        BigDecimal money = logs.getMoney().multiply(new BigDecimal(-1));
+                        logger.info("退款成本返还:"+company.getCompanyId()+":"+money);
+                        company.setMoney(company.getMoney().add(money));
+                        companyMapper.updateCompany(company);
+                        CompanyMoneyLogs log=new CompanyMoneyLogs();
+                        log.setCompanyId(company.getCompanyId());
+                        log.setRemark("退款成本返还");
+                        log.setMoney(money);
+                        log.setLogsType(6);
+                        log.setBalance(company.getMoney());
+                        log.setCreateTime(new Date());
+                        log.setBusinessId(order.getId().toString());
+                        moneyLogsMapper.insertCompanyMoneyLogs(log);
+                    }
+                }
+
+            }
+        }
+    }
+
     @Override
     @Override
     public Company selectCompanyByIdForUpdate(Long companyId) {
     public Company selectCompanyByIdForUpdate(Long companyId) {
         return companyMapper.selectCompanyByIdForUpdate(companyId);
         return companyMapper.selectCompanyByIdForUpdate(companyId);

+ 28 - 5
fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java

@@ -5,7 +5,9 @@ import com.alibaba.fastjson.JSON;
 import com.fs.common.annotation.DataScope;
 import com.fs.common.annotation.DataScope;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.core.redis.RedisCache;
+import com.fs.common.exception.CustomException;
 import com.fs.common.exception.ServiceException;
 import com.fs.common.exception.ServiceException;
+import com.fs.common.exception.file.OssException;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.company.domain.*;
 import com.fs.company.domain.*;
@@ -24,6 +26,8 @@ import com.fs.qw.mapper.QwUserMapper;
 import com.fs.qw.vo.CompanyUserQwVO;
 import com.fs.qw.vo.CompanyUserQwVO;
 import com.fs.qw.vo.QwOptionsVO;
 import com.fs.qw.vo.QwOptionsVO;
 import com.fs.qw.vo.QwUserVO;
 import com.fs.qw.vo.QwUserVO;
+import com.fs.system.oss.CloudStorageService;
+import com.fs.system.oss.OSSFactory;
 import com.fs.voice.utils.StringUtil;
 import com.fs.voice.utils.StringUtil;
 import com.fs.wxUser.domain.CompanyWxUser;
 import com.fs.wxUser.domain.CompanyWxUser;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
@@ -31,7 +35,9 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
 
+import java.io.IOException;
 import java.util.*;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -249,10 +255,10 @@ public class CompanyUserServiceImpl implements ICompanyUserService
         logger.info("打印邀请用户信息------------------------------》:{}",user);
         logger.info("打印邀请用户信息------------------------------》:{}",user);
         // 新增用户信息
         // 新增用户信息
         int rows = companyUserMapper.insertCompanyUser(user);
         int rows = companyUserMapper.insertCompanyUser(user);
-//        // 新增用户岗位关联
-//        insertUserPost(user);
-//        // 新增用户与角色管理
-//        insertUserRole(user);
+        // 新增用户岗位关联
+        insertUserPost(user);
+        // 新增用户与角色管理
+        insertUserRole(user);
         //新增用户需要修改密码
         //新增用户需要修改密码
         redisCache.setCacheObject("newCompanyUser:" + user.getCompanyId() + ":" +user.getUserName(),user.getUserId());
         redisCache.setCacheObject("newCompanyUser:" + user.getCompanyId() + ":" +user.getUserName(),user.getUserId());
         return rows;
         return rows;
@@ -636,5 +642,22 @@ public class CompanyUserServiceImpl implements ICompanyUserService
     public int insertQwIpadTotal(List<QwIpadTotalVo> qwIpadTotalVos) {
     public int insertQwIpadTotal(List<QwIpadTotalVo> qwIpadTotalVos) {
         return companyUserMapper.insertQwIpadTotal(qwIpadTotalVos);
         return companyUserMapper.insertQwIpadTotal(qwIpadTotalVos);
     }
     }
-
+    @Override
+    public String uploadQrCode(MultipartFile file, String userId) throws IOException {
+        if (file.isEmpty())
+        {
+            throw new OssException("上传文件不能为空");
+        }
+        // 上传文件
+        String fileName = file.getOriginalFilename();
+        String suffix = fileName.substring(fileName.lastIndexOf("."));
+        CloudStorageService storage = OSSFactory.build();
+        String url = storage.uploadSuffix(file.getBytes(), suffix);
+
+        if(userId == null) {
+            throw new CustomException("上传二维码失败!userId 为空!");
+        }
+        companyUserMapper.uploadQrCode(userId,url);
+        return url;
+    }
 }
 }

+ 3 - 0
fs-service/src/main/java/com/fs/config/cloud/CloudHostProper.java

@@ -12,4 +12,7 @@ public class CloudHostProper {
 
 
     @Value("${headerImg.imgUrl}")
     @Value("${headerImg.imgUrl}")
     private String headerImg;
     private String headerImg;
+
+    @Value("${cloud_host.projectCode}")
+    private String projectCode;
 }
 }

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

@@ -23,7 +23,7 @@ public class CourseConfig implements Serializable {
     private String registerDomainName;//注册域名
     private String registerDomainName;//注册域名
     private String courseDomainName;//链接域名
     private String courseDomainName;//链接域名
     private String miniprogramAppid;//链接域名
     private String miniprogramAppid;//链接域名
-    private Integer rewardType; // 奖励类型 1红包 2积分
+    private Integer rewardType; // 奖励类型 1红包 2积分 3红包+积分
     private Integer redPacketMode;//红包模式 1总公司 2销售公司
     private Integer redPacketMode;//红包模式 1总公司 2销售公司
     private BigDecimal moneyPri;//充值手续费百分比
     private BigDecimal moneyPri;//充值手续费百分比
     private BigDecimal redPackageMoney;//充值手续费百分比
     private BigDecimal redPackageMoney;//充值手续费百分比
@@ -52,6 +52,12 @@ public class CourseConfig implements Serializable {
      */
      */
     private String userCourseAuthDomain;
     private String userCourseAuthDomain;
 
 
+    /**
+     * 会员看课
+     * 炮灰看课发红包-服务号发
+     */
+    private String userCourseH5Reward;
+
     /**
     /**
      * 是否绑定
      * 是否绑定
      */
      */

+ 3 - 0
fs-service/src/main/java/com/fs/course/domain/FsCourseLink.java

@@ -66,4 +66,7 @@ public class FsCourseLink extends BaseEntity
     private String uNo;
     private String uNo;
 //    private String link_uuid;
 //    private String link_uuid;
 
 
+    @ApiModelProperty(value = "项目唯一标识(PS:MYHK)")
+    private String projectCode;
+
 }
 }

+ 10 - 0
fs-service/src/main/java/com/fs/course/domain/FsCoursePlaySourceConfig.java

@@ -76,4 +76,14 @@ public class FsCoursePlaySourceConfig {
      * 修改时间
      * 修改时间
      */
      */
     private LocalDateTime updateTime;
     private LocalDateTime updateTime;
+
+    /**
+     * 公司ID
+     */
+    private Long companyId;
+
+    /**
+     * 销售ID
+     */
+    private Long companyUserId;
 }
 }

+ 3 - 0
fs-service/src/main/java/com/fs/course/domain/FsCourseRealLink.java

@@ -45,4 +45,7 @@ public class FsCourseRealLink implements Serializable
     private String chatId;
     private String chatId;
 
 
     private Long projectId;//项目ID
     private Long projectId;//项目ID
+
+    @ApiModelProperty(value = "项目唯一标识(PS:MYHK)")
+    private String projectCode;
 }
 }

+ 1 - 0
fs-service/src/main/java/com/fs/course/domain/FsUserCoursePeriodDays.java

@@ -96,6 +96,7 @@ public class FsUserCoursePeriodDays extends BaseEntityTow {
     private LocalDate maxDate;
     private LocalDate maxDate;
 
 
     /** 项目id */
     /** 项目id */
+    @TableField(exist = false)
     private Long projectId;
     private Long projectId;
 
 
 }
 }

+ 22 - 0
fs-service/src/main/java/com/fs/course/dto/FsOrderDeliveryNoteDTO.java

@@ -0,0 +1,22 @@
+package com.fs.course.dto;
+
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+/**
+ * 订单发货下载模板
+ * **/
+@Data
+public class FsOrderDeliveryNoteDTO {
+    /**
+     * 系统订单号
+     * **/
+    @Excel(name = "系统订单号(必填)",width = 40,sort = 1)
+    private String orderNumber;
+
+    /**
+     * 发货状态
+     * **/
+    @Excel(name = "系统订单号(1:待发货、2:待收货、3:交易完成,-3:已取消)填写对应数字",width = 90,sort = 2)
+    private Integer deliveryNoteStatus;
+}

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

@@ -301,7 +301,7 @@ public interface FsCourseWatchLogMapper extends BaseMapper<FsCourseWatchLog> {
     @Select("select * from fs_course_watch_log " +
     @Select("select * from fs_course_watch_log " +
             "where video_id = #{videoId} " +
             "where video_id = #{videoId} " +
             "and company_user_id = #{companyUserId} " +
             "and company_user_id = #{companyUserId} " +
-            "and user_id = #{userId} and send_type = 1 ")
+            "and user_id = #{userId} and send_type = 1  order by create_time desc limit 1")
     FsCourseWatchLog getWatchCourseVideoByFsUser(@Param("userId") Long userId, @Param("videoId") Long videoId, @Param("companyUserId") Long companyUserId);
     FsCourseWatchLog getWatchCourseVideoByFsUser(@Param("userId") Long userId, @Param("videoId") Long videoId, @Param("companyUserId") Long companyUserId);
 
 
     FsCourseWatchLog getWatchLogByFsUser(@Param("videoId") Long videoId, @Param("fsUserId") Long fsUserId, @Param("companyUserId") Long companyUserId);
     FsCourseWatchLog getWatchLogByFsUser(@Param("videoId") Long videoId, @Param("fsUserId") Long fsUserId, @Param("companyUserId") Long companyUserId);

+ 1 - 0
fs-service/src/main/java/com/fs/course/mapper/FsUserCoursePeriodDaysMapper.java

@@ -117,4 +117,5 @@ public interface FsUserCoursePeriodDaysMapper extends BaseMapper<FsUserCoursePer
             "</script>")
             "</script>")
     int updateBatchDelFlag(@Param("ids") Long [] ids, @Param("delFlag") Integer delFlag);
     int updateBatchDelFlag(@Param("ids") Long [] ids, @Param("delFlag") Integer delFlag);
 
 
+    Long selectFsUserCoursePeriodDaysCount(FsUserCoursePeriodDays fsUserCoursePeriodDays);
 }
 }

Some files were not shown because too many files changed in this diff