Selaa lähdekoodia

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

chenguo 2 viikkoa sitten
vanhempi
commit
a08b234df9
100 muutettua tiedostoa jossa 994 lisäystä ja 136 poistoa
  1. 115 0
      fs-admin/src/main/java/com/fs/course/controller/FsCoursePlaySourceConfigController.java
  2. 2 8
      fs-admin/src/main/java/com/fs/course/controller/FsCourseTrafficLogController.java
  3. 2 1
      fs-admin/src/main/java/com/fs/course/controller/FsUserCoursePeriodController.java
  4. 97 0
      fs-admin/src/main/java/com/fs/fastGpt/FastgptChatArtificialWordsController.java
  5. 23 4
      fs-admin/src/main/java/com/fs/his/controller/FsArticleCateController.java
  6. 7 2
      fs-admin/src/main/java/com/fs/his/controller/FsDoctorArticleController.java
  7. 52 0
      fs-admin/src/main/java/com/fs/his/controller/FsInquiryPatientInfoController.java
  8. 10 8
      fs-admin/src/main/java/com/fs/his/controller/FsPackageCateController.java
  9. 5 0
      fs-admin/src/main/java/com/fs/his/controller/FsStoreOrderController.java
  10. 5 0
      fs-admin/src/main/java/com/fs/his/task/Task.java
  11. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsMaterialGroupScrmController.java
  12. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsMaterialScrmController.java
  13. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsMenuScrmController.java
  14. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsPrescribeDrugScrmController.java
  15. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsPrescribeScrmController.java
  16. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsShippingTemplatesFreeScrmController.java
  17. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsShippingTemplatesRegionScrmController.java
  18. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsShippingTemplatesScrmController.java
  19. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreActivityScrmController.java
  20. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreAfterSalesItemScrmController.java
  21. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreAfterSalesScrmController.java
  22. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreAfterSalesStatusScrmController.java
  23. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCanvasScrmController.java
  24. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCartScrmController.java
  25. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponIssueScrmController.java
  26. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponIssueUserScrmController.java
  27. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponScrmController.java
  28. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreCouponUserScrmController.java
  29. 59 4
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreHealthOrderScrmController.java
  30. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderAuditScrmController.java
  31. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderItemScrmController.java
  32. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderNoticeScrmController.java
  33. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderOfflineItemScrmController.java
  34. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderOfflineScrmController.java
  35. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderPromotionScrmController.java
  36. 24 9
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderScrmController.java
  37. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderStatisticsScrmController.java
  38. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreOrderStatusScrmController.java
  39. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStorePaymentScrmController.java
  40. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductAttrScrmController.java
  41. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductAttrValueScrmController.java
  42. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductCategoryScrmController.java
  43. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductDetailsScrmController.java
  44. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductGroupScrmController.java
  45. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductPackageScrmController.java
  46. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductRelationScrmController.java
  47. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductReplyScrmController.java
  48. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductRuleScrmController.java
  49. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductScrmController.java
  50. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductTemplateScrmController.java
  51. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreScrmController.java
  52. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreShopScrmController.java
  53. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreShopStaffScrmController.java
  54. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreStatisticsScrmController.java
  55. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreVisitScrmController.java
  56. 1 1
      fs-admin/src/main/java/com/fs/hisStore/controller/SysOperlogScrmController.java
  57. 1 1
      fs-admin/src/main/java/com/fs/hisStore/task/CrmTask.java
  58. 1 1
      fs-admin/src/main/java/com/fs/hisStore/task/ErpTask.java
  59. 7 3
      fs-admin/src/main/java/com/fs/hisStore/task/MallStoreTask.java
  60. 1 1
      fs-admin/src/main/java/com/fs/hisStore/task/stats/FsStatsMemberDailyTask.java
  61. 1 1
      fs-admin/src/main/java/com/fs/qw/controller/QwSopTempController.java
  62. 20 4
      fs-admin/src/main/java/com/fs/web/controller/system/SysLoginController.java
  63. 23 0
      fs-common/src/main/java/com/fs/common/utils/CloudHostUtils.java
  64. 10 0
      fs-common/src/main/java/com/fs/common/utils/spring/SpringUtils.java
  65. 1 1
      fs-company-app/src/main/java/com/fs/app/config/WebMvcConfig.java
  66. 5 1
      fs-company-app/src/main/java/com/fs/app/controller/AppBaseController.java
  67. 7 1
      fs-company/src/main/java/com/fs/company/controller/company/CompanyUserController.java
  68. 2 1
      fs-company/src/main/java/com/fs/company/controller/course/FsUserCoursePeriodController.java
  69. 77 8
      fs-company/src/main/java/com/fs/company/controller/qw/QwExternalContactController.java
  70. 1 1
      fs-company/src/main/java/com/fs/company/controller/qw/QwSopTempController.java
  71. 2 0
      fs-company/src/main/java/com/fs/company/controller/qw/QwUserVoiceLogController.java
  72. 19 2
      fs-company/src/main/java/com/fs/company/controller/store/FsStoreOrderController.java
  73. 10 2
      fs-company/src/main/java/com/fs/company/controller/store/FsUserAddressController.java
  74. 7 0
      fs-company/src/main/java/com/fs/company/controller/store/FsUserController.java
  75. 3 0
      fs-company/src/main/java/com/fs/company/controller/store/FsUserCouponController.java
  76. 1 0
      fs-company/src/main/java/com/fs/framework/config/SecurityConfig.java
  77. 6 2
      fs-doctor-app/src/main/java/com/fs/app/controller/DoctorArticleController.java
  78. 2 1
      fs-qw-task/src/main/java/com/fs/app/controller/CommonController.java
  79. 6 5
      fs-redis/src/main/java/com/fs/framework/config/MyBatisConfig.java
  80. 2 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyUserMapper.java
  81. 3 0
      fs-service/src/main/java/com/fs/company/service/ICompanyUserService.java
  82. 24 1
      fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java
  83. 62 15
      fs-service/src/main/java/com/fs/core/config/WxMaConfiguration.java
  84. 2 1
      fs-service/src/main/java/com/fs/course/domain/FsCourseLink.java
  85. 79 0
      fs-service/src/main/java/com/fs/course/domain/FsCoursePlaySourceConfig.java
  86. 4 0
      fs-service/src/main/java/com/fs/course/domain/FsUserCoursePeriodDays.java
  87. 22 0
      fs-service/src/main/java/com/fs/course/dto/FsOrderDeliveryNoteDTO.java
  88. 17 0
      fs-service/src/main/java/com/fs/course/mapper/FsCoursePlaySourceConfigMapper.java
  89. 1 1
      fs-service/src/main/java/com/fs/course/mapper/FsCourseWatchLogMapper.java
  90. 1 0
      fs-service/src/main/java/com/fs/course/mapper/FsUserCoursePeriodDaysMapper.java
  91. 1 0
      fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoRedPackageMapper.java
  92. 2 0
      fs-service/src/main/java/com/fs/course/param/FsCourseLinkCreateParam.java
  93. 45 0
      fs-service/src/main/java/com/fs/course/param/FsCoursePlaySourceConfigCreateParam.java
  94. 42 0
      fs-service/src/main/java/com/fs/course/param/FsCoursePlaySourceConfigEditParam.java
  95. 3 0
      fs-service/src/main/java/com/fs/course/param/FsCourseWatchLogListParam.java
  96. 3 0
      fs-service/src/main/java/com/fs/course/param/PeriodCountParam.java
  97. 3 0
      fs-service/src/main/java/com/fs/course/param/newfs/FsCourseSortLinkParam.java
  98. 1 1
      fs-service/src/main/java/com/fs/course/param/newfs/FsUserCourseAddCompanyUserParam.java
  99. 16 0
      fs-service/src/main/java/com/fs/course/service/IFsCoursePlaySourceConfigService.java
  100. 3 1
      fs-service/src/main/java/com/fs/course/service/IFsUserCoursePeriodDaysService.java

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

@@ -0,0 +1,115 @@
+package com.fs.course.controller;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.page.TableDataInfo;
+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.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;
+
+    @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);
+
+        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);
+
+        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已存在");
+        }
+
+        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) {
+        Wrapper<FsCoursePlaySourceConfig> updateWrapper = Wrappers.<FsCoursePlaySourceConfig>lambdaUpdate()
+                .set(FsCoursePlaySourceConfig::getIsDel, 1)
+                .in(FsCoursePlaySourceConfig::getId, Arrays.asList(ids));
+        fsCoursePlaySourceConfigService.update(updateWrapper);
+        return AjaxResult.success();
+    }
+}

+ 2 - 8
fs-admin/src/main/java/com/fs/course/controller/FsCourseTrafficLogController.java

@@ -1,6 +1,7 @@
 package com.fs.course.controller;
 
 import java.text.SimpleDateFormat;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -50,14 +51,7 @@ public class FsCourseTrafficLogController extends BaseController
     public TableDataInfo list(FsCourseTrafficLogParam param)
     {
         startPage();
-        if (param.getTime() != null) {
-            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
-            String formattedDate = sdf.format(param.getTime());
-            String[] parts = formattedDate.split("-");
-            param.setYear(Integer.parseInt(parts[0]));
-            param.setMonth(Integer.parseInt(parts[1]));
-        }
-        List<FsCourseTrafficLogListVO> list = fsCourseTrafficLogService.selectTrafficByCompany(param);
+        List<FsCourseTrafficLogListVO> list = fsCourseTrafficLogService.selectTrafficNew(param);
         return getDataTable(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) {
         PageHelper.startPage(param.getPageNum(), param.getPageSize());
         List<FsPeriodCountVO> list = fsUserCoursePeriodDaysService.periodCourseCount(param);
+        long count = fsUserCoursePeriodDaysService.periodCourseByCount(param);
         PageInfo<FsPeriodCountVO> pageInfo = new PageInfo<>(list);
         Map<String, Object> result = new HashMap<>();
         result.put("rows", pageInfo.getList());
-        result.put("total", pageInfo.getTotal());
+        result.put("total", count);
         return R.ok(result);
     }
 

+ 97 - 0
fs-admin/src/main/java/com/fs/fastGpt/FastgptChatArtificialWordsController.java

@@ -0,0 +1,97 @@
+package com.fs.fastGpt;
+
+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.fastGpt.domain.FastgptChatArtificialWords;
+import com.fs.fastGpt.service.IFastgptChatArtificialWordsService;
+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 2025-05-07
+ */
+@RestController
+@RequestMapping("/fastGpt/fastgptChatArtificialWords")
+public class FastgptChatArtificialWordsController extends BaseController
+{
+    @Autowired
+    private IFastgptChatArtificialWordsService fastgptChatArtificialWordsService;
+
+    /**
+     * 查询转人工提示词列表
+     */
+    @PreAuthorize("@ss.hasPermi('fastGpt:fastgptChatArtificialWords:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FastgptChatArtificialWords fastgptChatArtificialWords)
+    {
+        startPage();
+        List<FastgptChatArtificialWords> list = fastgptChatArtificialWordsService.selectFastgptChatArtificialWordsList(fastgptChatArtificialWords);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出转人工提示词列表
+     */
+    @PreAuthorize("@ss.hasPermi('fastGpt:fastgptChatArtificialWords:export')")
+    @Log(title = "转人工提示词", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FastgptChatArtificialWords fastgptChatArtificialWords)
+    {
+        List<FastgptChatArtificialWords> list = fastgptChatArtificialWordsService.selectFastgptChatArtificialWordsList(fastgptChatArtificialWords);
+        ExcelUtil<FastgptChatArtificialWords> util = new ExcelUtil<FastgptChatArtificialWords>(FastgptChatArtificialWords.class);
+        return util.exportExcel(list, "转人工提示词数据");
+    }
+
+    /**
+     * 获取转人工提示词详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('fastGpt:fastgptChatArtificialWords:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(fastgptChatArtificialWordsService.selectFastgptChatArtificialWordsById(id));
+    }
+
+    /**
+     * 新增转人工提示词
+     */
+    @PreAuthorize("@ss.hasPermi('fastGpt:fastgptChatArtificialWords:add')")
+    @Log(title = "转人工提示词", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FastgptChatArtificialWords fastgptChatArtificialWords)
+    {
+        return toAjax(fastgptChatArtificialWordsService.insertFastgptChatArtificialWords(fastgptChatArtificialWords));
+    }
+
+    /**
+     * 修改转人工提示词
+     */
+    @PreAuthorize("@ss.hasPermi('fastGpt:fastgptChatArtificialWords:edit')")
+    @Log(title = "转人工提示词", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FastgptChatArtificialWords fastgptChatArtificialWords)
+    {
+        return toAjax(fastgptChatArtificialWordsService.updateFastgptChatArtificialWords(fastgptChatArtificialWords));
+    }
+
+    /**
+     * 删除转人工提示词
+     */
+    @PreAuthorize("@ss.hasPermi('fastGpt:fastgptChatArtificialWords:remove')")
+    @Log(title = "转人工提示词", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(fastgptChatArtificialWordsService.deleteFastgptChatArtificialWordsByIds(ids));
+    }
+}

+ 23 - 4
fs-admin/src/main/java/com/fs/his/controller/FsArticleCateController.java

@@ -1,7 +1,9 @@
 package com.fs.his.controller;
 
+import java.util.Collection;
 import java.util.List;
 
+import com.fs.common.core.redis.RedisCache;
 import com.fs.his.vo.OptionsVO;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -24,7 +26,7 @@ import com.fs.common.core.page.TableDataInfo;
 
 /**
  * 文章分类Controller
- * 
+ *
  * @author fs
  * @date 2023-07-04
  */
@@ -34,6 +36,8 @@ public class FsArticleCateController extends BaseController
 {
     @Autowired
     private IFsArticleCateService fsArticleCateService;
+    @Autowired
+    RedisCache redisCache;
 
     /**
      * 查询文章分类列表
@@ -78,7 +82,12 @@ public class FsArticleCateController extends BaseController
     @PostMapping
     public AjaxResult add(@RequestBody FsArticleCate fsArticleCate)
     {
-        return toAjax(fsArticleCateService.insertFsArticleCate(fsArticleCate));
+        int i = fsArticleCateService.insertFsArticleCate(fsArticleCate);
+        Collection<String> keys = redisCache.keys("getArticleCateList*");
+        for (String key : keys) {
+            redisCache.deleteObject(key);
+        }
+        return toAjax(i);
     }
 
     /**
@@ -89,7 +98,12 @@ public class FsArticleCateController extends BaseController
     @PutMapping
     public AjaxResult edit(@RequestBody FsArticleCate fsArticleCate)
     {
-        return toAjax(fsArticleCateService.updateFsArticleCate(fsArticleCate));
+        int i = fsArticleCateService.updateFsArticleCate(fsArticleCate);
+        Collection<String> keys = redisCache.keys("getArticleCateList*");
+        for (String key : keys) {
+            redisCache.deleteObject(key);
+        }
+        return toAjax(i);
     }
 
     /**
@@ -100,7 +114,12 @@ public class FsArticleCateController extends BaseController
 	@DeleteMapping("/{cateIds}")
     public AjaxResult remove(@PathVariable Long[] cateIds)
     {
-        return toAjax(fsArticleCateService.deleteFsArticleCateByCateIds(cateIds));
+        int i = fsArticleCateService.deleteFsArticleCateByCateIds(cateIds);
+        Collection<String> keys = redisCache.keys("getArticleCateList*");
+        for (String key : keys) {
+            redisCache.deleteObject(key);
+        }
+        return toAjax(i);
     }
 
     /**

+ 7 - 2
fs-admin/src/main/java/com/fs/his/controller/FsDoctorArticleController.java

@@ -100,9 +100,14 @@ public class FsDoctorArticleController extends BaseController
     {
         fsDoctorArticleService.updateFsDoctorArticle(fsDoctorArticle);
         Collection<String> keys = redisCache.keys("getDoctorArticleList*");
-        for (String key : keys) {
-            redisCache.deleteObject(key);
+        Collection<String> details = redisCache.keys("getDoctorArticleById::" +fsDoctorArticle.getArticleId());
+        keys.addAll(details);
+        if (!keys.isEmpty()) {
+            for (String key : keys) {
+                redisCache.deleteObject(key);
+            }
         }
+
         return toAjax(1);
     }
 

+ 52 - 0
fs-admin/src/main/java/com/fs/his/controller/FsInquiryPatientInfoController.java

@@ -0,0 +1,52 @@
+package com.fs.his.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.enums.BusinessType;
+import com.fs.his.param.FsInquiryPatientParam;
+import com.fs.his.service.IFsInquiryPatientInfoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 问诊患者信息(FsInquiryPatientInfo)
+ */
+@RestController
+@RequestMapping("/his/inquiryPatientInfo")
+public class FsInquiryPatientInfoController extends BaseController {
+
+
+    @Autowired
+    private IFsInquiryPatientInfoService patientInfoService;
+
+
+
+
+    /**
+     * 新增患者问诊信息
+     */
+    @PreAuthorize("@ss.hasPermi('his:inquiryPatientInfo:add')")
+    @Log(title = "患者问诊信息", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FsInquiryPatientParam param){
+        return toAjax(patientInfoService.insertFsInquiryPatientInfo(param));
+    }
+
+    /**
+     * 修改患者问诊信息
+     */
+    @PreAuthorize("@ss.hasPermi('his:inquiryPatientInfo:edit')")
+    @Log(title = "患者问诊信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsInquiryPatientParam param){
+        return toAjax(patientInfoService.updateFsInquiryPatientInfo(param));
+    }
+
+    @GetMapping("/detail/{inquiryOrderId}")
+    public AjaxResult get(@PathVariable("inquiryOrderId") Long inquiryOrderId){
+        return AjaxResult.success(patientInfoService.selectFsInquiryPatientInfo(inquiryOrderId));
+    }
+}

+ 10 - 8
fs-admin/src/main/java/com/fs/his/controller/FsPackageCateController.java

@@ -7,6 +7,8 @@ import java.util.Map;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.his.param.FsPackageCateUParam;
 import com.fs.his.vo.OptionsVO;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -84,10 +86,10 @@ public class FsPackageCateController extends BaseController
     public AjaxResult add(@RequestBody FsPackageCate fsPackageCate)
     {
         fsPackageCateService.insertFsPackageCate(fsPackageCate);
-        Collection<String> keys = redisCache.keys("getPackagCateList*");
-        for (String key : keys) {
-            redisCache.deleteObject(key);
-        }
+//        Collection<String> keys = redisCache.keys("getPackagCateList*");
+//        for (String key : keys) {
+//            redisCache.deleteObject(key);
+//        }
         return toAjax(1);
     }
 
@@ -100,10 +102,10 @@ public class FsPackageCateController extends BaseController
     public AjaxResult edit(@RequestBody FsPackageCate fsPackageCate)
     {
         fsPackageCateService.updateFsPackageCate(fsPackageCate);
-        Collection<String> keys = redisCache.keys("getPackagCateList*");
-        for (String key : keys) {
-            redisCache.deleteObject(key);
-        }
+//        Collection<String> keys = redisCache.keys("getPackagCateList*");
+//        for (String key : keys) {
+//            redisCache.deleteObject(key);
+//        }
         return toAjax(1);
     }
 

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

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

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

@@ -1058,6 +1058,9 @@ public class Task {
     @Autowired
     @Qualifier("JSTErpOrderServiceImpl")
     private IErpOrderService jSTOrderService;
+    @Autowired
+    @Qualifier("k9OrderScrmServiceImpl")
+    private IErpOrderService k9OrderService;
 
     private IErpOrderService getErpService() {
         FsSysConfig sysConfig = configUtil.getSysConfig();
@@ -1081,6 +1084,8 @@ public class Task {
                     erpOrderService =  dfOrderService;
                 }else if(erpType == 5){
                     erpOrderService=jSTOrderService;
+                }else if(erpType == 6){
+                    erpOrderService=k9OrderService;
                 }
                 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.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.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.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.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.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.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.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.core.controller.BaseController;

+ 1 - 1
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.core.controller.BaseController;

+ 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.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.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.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.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.core.controller.BaseController;

+ 1 - 1
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.core.controller.BaseController;

+ 1 - 1
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.core.controller.BaseController;

+ 1 - 1
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.core.controller.BaseController;

+ 1 - 1
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.core.controller.BaseController;

+ 59 - 4
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;
@@ -6,11 +6,13 @@ import com.alibaba.fastjson.JSONObject;
 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.enums.BusinessType;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.service.ICompanyMoneyLogsService;
+import com.fs.course.dto.FsOrderDeliveryNoteDTO;
 import com.fs.erp.service.IErpOrderService;
 import com.fs.his.service.IFsUserService;
 import com.fs.hisStore.dto.StoreOrderProductDTO;
@@ -21,9 +23,8 @@ import com.fs.hisStore.vo.FsStoreOrderItemExportVO;
 import com.fs.hisStore.vo.FsStoreOrderVO;
 import org.springframework.beans.factory.annotation.Autowired;
 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;
 
@@ -51,6 +52,12 @@ public class FsStoreHealthOrderScrmController extends BaseController {
     @Autowired
     private ICompanyMoneyLogsService moneyLogsService;
 
+    // 允许的文件扩展名
+    private static final String[] ALLOWED_EXCEL_EXTENSIONS = {".xlsx", ".xls"};
+
+    // 最大文件大小(5MB)
+    private static final long MAX_FILE_SIZE = 5 * 1024 * 1024; // 5MB
+
     /**
      * 查询健康商城订单列表
      */
@@ -173,4 +180,52 @@ public class FsStoreHealthOrderScrmController extends BaseController {
         ExcelUtil<FsStoreOrderItemExportVO> util = new ExcelUtil<FsStoreOrderItemExportVO>(FsStoreOrderItemExportVO.class);
         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.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.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.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.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.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;

+ 24 - 9
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.util.StrUtil;
@@ -84,11 +84,19 @@ public class FsStoreOrderScrmController extends BaseController {
     @Autowired
     @Qualifier("wdtErpOrderServiceImpl")
     private IErpOrderService wdtOrderService;
-
+    @Autowired
+    @Qualifier("hzOMSErpOrderServiceImpl")
+    private IErpOrderService hzOMSErpOrderService;
+    @Autowired
+    @Qualifier("dfOrderServiceImpl")
+    private IErpOrderService dfOrderService;
     @Autowired
     @Qualifier("k9OrderScrmServiceImpl")
     private IErpOrderService k9OrderService;
     @Autowired
+    @Qualifier("JSTErpOrderServiceImpl")
+    private IErpOrderService jSTOrderService;
+    @Autowired
     private ConfigUtil configUtil;
     @Autowired
     private IFsStoreOrderAuditLogScrmService orderAuditLogService;
@@ -102,15 +110,22 @@ public class FsStoreOrderScrmController extends BaseController {
             //判断erp类型
             Integer erpType = erpConfig.getErpType();
             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;
                 }
             }
         }

+ 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.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.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 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.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.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.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.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.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.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.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 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 com.fs.common.annotation.Log;

+ 1 - 1
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.core.controller.BaseController;

+ 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.core.controller.BaseController;

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

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

+ 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.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.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.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.core.controller.BaseController;

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

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

+ 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 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.FsErpFinishPush;

+ 7 - 3
fs-service/src/main/java/com/fs/task/MallStoreTask.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;
@@ -73,8 +73,6 @@ public class MallStoreTask
     private IFsStoreAfterSalesScrmService afterSalesService;
     @Autowired
     private IFsUserService userService;
-
-
     @Autowired
     private IPayService ybPayService;
     @Autowired
@@ -133,6 +131,10 @@ public class MallStoreTask
     @Qualifier("JSTErpOrderServiceImpl")
     private IErpOrderService jSTOrderService;
 
+    @Autowired
+    @Qualifier("k9OrderScrmServiceImpl")
+    private IErpOrderService k9OrderService;
+
     @Autowired
     private ConfigUtil configUtil;
 
@@ -478,6 +480,8 @@ public class MallStoreTask
                     erpOrderService = dfOrderService;
                 } else if (erpType == 5) {
                     erpOrderService = jSTOrderService;
+                }else if (erpType == 6) {
+                    erpOrderService = k9OrderService;
                 }
             }
         }

+ 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 lombok.extern.slf4j.Slf4j;

+ 1 - 1
fs-admin/src/main/java/com/fs/qw/controller/QwSopTempController.java

@@ -134,7 +134,7 @@ public class QwSopTempController extends BaseController
         if(qwSopTemp.getSendType() == 11){
             //筛选选课程数据
             if(ObjectUtils.isNotNull(qwSopTemp.getTimeList()) && !qwSopTemp.getTimeList().isEmpty()){
-                qwSopTemp.setTimeList(new ArrayList<>(qwSopTemp.getTimeList().stream().filter(t->ObjectUtils.isNotNull(t) && !t.isEmpty()).collect(Collectors.toSet())));
+                qwSopTemp.setTimeList(new ArrayList<>(qwSopTemp.getTimeList().stream().filter(t->ObjectUtils.isNotNull(t) && !t.isEmpty()).collect(Collectors.toList())));
             }
             new Thread(() -> qwSopTempService.createSopTempRules(qwSopTemp)).start();
         }

+ 20 - 4
fs-admin/src/main/java/com/fs/web/controller/system/SysLoginController.java

@@ -4,7 +4,9 @@ import java.util.List;
 import java.util.Set;
 
 import com.fs.common.core.domain.R;
+import com.fs.common.core.domain.entity.SysRole;
 import com.fs.common.utils.PatternUtils;
+import com.fs.system.service.ISysRoleService;
 import lombok.Synchronized;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
@@ -24,7 +26,7 @@ import com.fs.system.service.ISysMenuService;
 
 /**
  * 登录验证
- * 
+ *
 
  */
 @RestController
@@ -40,9 +42,12 @@ public class SysLoginController
     @Autowired
     private SysPermissionService permissionService;
 
+    @Autowired
+    private ISysRoleService roleService;
+
     /**
      * 登录方法
-     * 
+     *
      * @param loginBody 登录信息
      * @return 结果
      */
@@ -62,7 +67,7 @@ public class SysLoginController
 
     /**
      * 获取用户信息
-     * 
+     *
      * @return 用户信息
      */
     @GetMapping("getInfo")
@@ -75,14 +80,25 @@ public class SysLoginController
         Set<String> permissions = permissionService.getMenuPermission(user);
         AjaxResult ajax = AjaxResult.success();
         ajax.put("user", user);
+        Integer isAdmin = 0;
+        if (permissions.contains("*:*:*")){
+            isAdmin = 1;
+        }else {
+            List<SysRole> roleList = user.getRoles();
+            if (roleList != null && !roleList.isEmpty()) {
+                Long[] roleIds = roleList.stream().map(SysRole::getRoleId).toArray(Long[]::new);
+                isAdmin = roleService.getIsCheckPhone(roleIds)?1:0;
+            }
+        }
         ajax.put("roles", roles);
         ajax.put("permissions", permissions);
+        ajax.put("isAdmin", isAdmin);
         return ajax;
     }
 
     /**
      * 获取路由信息
-     * 
+     *
      * @return 路由信息
      */
     @GetMapping("getRouters")

+ 23 - 0
fs-common/src/main/java/com/fs/common/utils/CloudHostUtils.java

@@ -0,0 +1,23 @@
+package com.fs.common.utils;
+
+
+import com.fs.common.utils.spring.SpringUtils;
+
+public class CloudHostUtils {
+
+    /**
+     * 是否指定项目名称配置
+     */
+    public static boolean isCloudHostName(String cloudHostName) {
+        String cloudHostNameConfig = SpringUtils.getProperty("cloud_host.company_name");
+        if (StringUtils.isBlank(cloudHostNameConfig)) {
+            return false;
+        }
+
+        if (StringUtils.isBlank(cloudHostName)) {
+            return false;
+        }
+
+        return cloudHostNameConfig.equalsIgnoreCase(cloudHostName);
+    }
+}

+ 10 - 0
fs-common/src/main/java/com/fs/common/utils/spring/SpringUtils.java

@@ -143,4 +143,14 @@ public final class SpringUtils implements BeanFactoryPostProcessor, ApplicationC
         final String[] activeProfiles = getActiveProfiles();
         return StringUtils.isNotEmpty(activeProfiles) ? activeProfiles[0] : null;
     }
+
+    /**
+     * 获取配置文件配置项的值
+     *
+     * @param key 配置项key
+     * @return 属性值
+     */
+    public static String getProperty(String key) {
+        return applicationContext.getEnvironment().getProperty(key);
+    }
 }

+ 1 - 1
fs-company-app/src/main/java/com/fs/app/config/WebMvcConfig.java

@@ -26,4 +26,4 @@ public class WebMvcConfig implements WebMvcConfigurer {
 //    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
 //        argumentResolvers.add(loginUserHandlerMethodArgumentResolver);
 //    }
-}
+}

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

@@ -1,6 +1,7 @@
 package com.fs.app.controller;
 
 
+import cn.hutool.core.util.ObjectUtil;
 import com.fs.app.exception.FSException;
 import com.fs.app.utils.JwtUtils;
 import com.fs.common.core.redis.RedisCache;
@@ -34,7 +35,10 @@ public class AppBaseController {
 	{
 		String headValue =  ServletUtils.getRequest().getHeader("APPToken");
 		Claims claims=jwtUtils.getClaimByToken(headValue);
-		String userId = claims.getSubject().toString();
+		if (ObjectUtil.isEmpty(claims)){
+			throw new FSException("未授权,请先登录!");
+		}
+		String userId = claims.getSubject();
 		return userId;
 	}
 	public Long getCompanyUserId() {

+ 7 - 1
fs-company/src/main/java/com/fs/company/controller/company/CompanyUserController.java

@@ -37,6 +37,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -427,5 +428,10 @@ public class CompanyUserController extends BaseController
             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);
+    }
 }

+ 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());
         param.setMaxDate(LocalDate.now().plusDays(period.getMaxViewNum()));
         List<FsPeriodCountVO> list = fsUserCoursePeriodDaysService.periodCourseCount(param);
+        long count = fsUserCoursePeriodDaysService.periodCourseByCount(param);
         PageInfo<FsPeriodCountVO> pageInfo = new PageInfo<>(list);
         Map<String, Object> result = new HashMap<>();
         result.put("rows", pageInfo.getList());
-        result.put("total", pageInfo.getTotal());
+        result.put("total", count);
         return R.ok(result);
     }
 

+ 77 - 8
fs-company/src/main/java/com/fs/company/controller/qw/QwExternalContactController.java

@@ -7,6 +7,7 @@ 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.enums.BusinessType;
+import com.fs.common.utils.PubFun;
 import com.fs.common.utils.ServletUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.poi.ExcelUtil;
@@ -23,12 +24,10 @@ import com.fs.his.service.IFsUserService;
 import com.fs.qw.domain.QwExternalContact;
 import com.fs.qw.domain.QwTag;
 import com.fs.qw.param.*;
-import com.fs.qw.service.IQwExternalContactInfoService;
-import com.fs.qw.service.IQwExternalContactService;
-import com.fs.qw.service.IQwTagService;
-import com.fs.qw.service.IQwWatchLogService;
+import com.fs.qw.service.*;
 import com.fs.qw.vo.QwExternalContactVO;
 import com.fs.qw.vo.QwFsUserVO;
+import com.fs.qw.vo.QwUserDelLossLogVO;
 import com.github.pagehelper.PageHelper;
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
@@ -40,10 +39,7 @@ import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.fs.his.utils.PhoneUtil.decryptAutoPhoneMk;
@@ -76,6 +72,10 @@ public class QwExternalContactController extends BaseController
     @Autowired
     private IQwExternalContactInfoService qwExternalContactInfoService;
 
+
+    @Autowired
+    private IQwUserServiceAsyncHelper qwUserServiceAsyncHelper;
+
     @Autowired
     private CompanyDeptServiceImpl companyDeptService;
 
@@ -575,5 +575,74 @@ public class QwExternalContactController extends BaseController
 
         return  qwExternalContactService.setCustomerCourseSopList(param);
     }
+    @PreAuthorize("@ss.hasPermi('qw:externalContact:edit')")
+    @Log(title = "批量修改备注", businessType = BusinessType.UPDATE)
+    @PostMapping("/batchUpdateExternalContactNotes")
+    public R batchUpdateExternalContactNotes(@RequestBody QwExternalContactUpdateNoteParam param) throws JSONException {
+        if(param.isFilter()){
+            param.setUserIds(getList(param.getAddType(), param.getParam()));
+        }
+        if(param.getUserIds() == null || param.getUserIds().isEmpty()){
+            return R.error("修改用户为空");
+        }
+//        qwExternalContactService.batchUpdateExternalContactNotes(Param);
+        qwUserServiceAsyncHelper.batchUpdateExternalContactNotes(param);
+        return R.ok("正在批量修改备注中");
+    }
+
+
+
+    private List<Long> getList(Integer addType, QwExternalContactParam param){
+        if(addType == null){
+            return Collections.emptyList();
+        }
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        if(addType == 0){
+            param.setCompanyId(loginUser.getCompany().getCompanyId());
+        }
+        if(addType == 1){
+            if(param.getQwUserId()==null){
+                return Collections.emptyList();
+            }
+            param.setCompanyId(loginUser.getCompany().getCompanyId());
+        }
+        if(addType == 2){
+            List<Long> combinedList = new ArrayList<>();
+            //本部门
+            Long deptId = loginUser.getUser().getDeptId();
+            if (deptId!=null){
+                combinedList.add(deptId);
+            }
+            //本部门的下级部门
+            List<Long> deptList = companyDeptService.selectCompanyDeptByParentId(deptId);
+            if (!deptList.isEmpty()){
+                combinedList.addAll(deptList);
+            }
+
+            param.setCuDeptIdList(combinedList);
+            param.setUserType(loginUser.getUser().getUserType());
+            param.setCompanyId(loginUser.getCompany().getCompanyId());
+        }
+        List<QwExternalContactVO> list = qwExternalContactService.selectQwExternalContactListVO(param);
+        if(list == null || list.isEmpty()) return Collections.emptyList();
+        return PubFun.listToNewList(list, QwExternalContactVO::getId);
+    }
+
+    /**
+     * 查询企业微信客户删除流失列表
+     */
+    @GetMapping("/delLossStatistics")
+    public TableDataInfo delLossStatistics(QwUserDelLossLogParam param){
+        startPage();
+        List<QwUserDelLossLogVO> qwUserDelLossLogVOS = qwExternalContactService.selectQwUserDelLossLogList(param);
+        return getDataTable(qwUserDelLossLogVOS);
+    }
+
+    @GetMapping("/delLossStatisticsExport")
+    public AjaxResult delLossStatisticsExport(QwUserDelLossLogParam param){
+        List<QwUserDelLossLogVO> qwUserDelLossLogVOS = qwExternalContactService.selectQwUserDelLossLogList(param);
+        ExcelUtil<QwUserDelLossLogVO> util = new ExcelUtil<QwUserDelLossLogVO>(QwUserDelLossLogVO.class);
+        return util.exportExcel(qwUserDelLossLogVOS, "企微用户删除流失统计");
+    }
 
 }

+ 1 - 1
fs-company/src/main/java/com/fs/company/controller/qw/QwSopTempController.java

@@ -141,7 +141,7 @@ public class QwSopTempController extends BaseController
         if(qwSopTemp.getSendType() == 11){
             //筛选选课程数据
             if(ObjectUtils.isNotNull(qwSopTemp.getTimeList()) && !qwSopTemp.getTimeList().isEmpty()){
-                qwSopTemp.setTimeList(new ArrayList<>(qwSopTemp.getTimeList().stream().filter(t->ObjectUtils.isNotNull(t) && !t.isEmpty()).collect(Collectors.toSet())));
+                qwSopTemp.setTimeList(new ArrayList<>(qwSopTemp.getTimeList().stream().filter(t->ObjectUtils.isNotNull(t) && !t.isEmpty()).collect(Collectors.toList())));
             }
             new Thread(() -> qwSopTempService.createSopTempRules(qwSopTemp)).start();
         }

+ 2 - 0
fs-company/src/main/java/com/fs/company/controller/qw/QwUserVoiceLogController.java

@@ -123,6 +123,8 @@ public class QwUserVoiceLogController extends BaseController
     @GetMapping("/sellTotalExport")
     public AjaxResult sellTotalExport(QwUserVoiceLogTotalVo qwUserVoiceLog)
     {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        qwUserVoiceLog.setCompanyId(loginUser.getCompany().getCompanyId());
         List<QwUserVoiceLogTotalVo> list = qwUserVoiceLogService.selectQwUserVoiceLogTotalList(qwUserVoiceLog);
         list.forEach(m-> {
             m.setQwUserName(m.getQwUser().getQwUserName());

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

@@ -539,10 +539,19 @@ public class FsStoreOrderController extends BaseController
     @Qualifier("wdtErpOrderServiceImpl")
     private IErpOrderService wdtOrderService;
 
+    @Autowired
+    @Qualifier("hzOMSErpOrderServiceImpl")
+    private IErpOrderService hzOMSErpOrderService;
+    @Autowired
+    @Qualifier("dfOrderServiceImpl")
+    private IErpOrderService dfOrderService;
+
     @Autowired
     @Qualifier("JSTErpOrderServiceImpl")
     private IErpOrderService jSTOrderService;
-
+    @Autowired
+    @Qualifier("k9OrderScrmServiceImpl")
+    private IErpOrderService k9OrderService;
     private IErpOrderService getErpService() {
         FsSysConfig sysConfig = configUtil.getSysConfig();
         Integer erpOpen = sysConfig.getErpOpen();
@@ -557,8 +566,16 @@ public class FsStoreOrderController extends BaseController
                 } else if (erpType == 2){
                     //旺店通
                     erpOrderService =  wdtOrderService;
+                } else if (erpType == 3){
+                    //
+                    erpOrderService =  hzOMSErpOrderService;
+                } else if (erpType == 4){
+                    //代服
+                    erpOrderService =  dfOrderService;
                 }else if(erpType == 5){
-                    erpOrderService = jSTOrderService;
+                    erpOrderService=jSTOrderService;
+                }else if(erpType == 6){
+                    erpOrderService=k9OrderService;
                 }
                 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;
 
+import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.model.LoginUser;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
@@ -73,7 +75,13 @@ public class FsUserAddressController extends BaseController
         ExcelUtil<FsUserAddress> util = new ExcelUtil<FsUserAddress>(FsUserAddress.class);
         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
     public AjaxResult add(@RequestBody FsUserAddress fsUserAddress)
     {
-        if(fsUserAddress.getIsDefault()==1){
+        if(ObjectUtil.isNotEmpty(fsUserAddress.getIsDefault())&&fsUserAddress.getIsDefault()==1){
             //处理默认地址
             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);
     }
+    @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')")
     @GetMapping("/userList")

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

@@ -105,6 +105,9 @@ public class FsUserCouponController extends BaseController
     @PostMapping("/sendCoupon")
     public AjaxResult sendCoupon(@RequestBody FsUserCouponSendParam fsUserCoupon)
     {
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        fsUserCoupon.setCompanyId(loginUser.getCompany().getCompanyId());
+        fsUserCoupon.setCompanyUserId(loginUser.getUser().getUserId());
         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("/common/getId**").anonymous()
                 .antMatchers("/common/uploadOSS**").anonymous()
+                .antMatchers("/company/user/common/uploadOSS").anonymous()
                 .antMatchers("/pay/wxPay/payNotify**").anonymous()
                 .antMatchers("/common/uploadWang**").anonymous()
                 .antMatchers("/common/download**").anonymous()

+ 6 - 2
fs-doctor-app/src/main/java/com/fs/app/controller/DoctorArticleController.java

@@ -103,8 +103,12 @@ public class DoctorArticleController extends  AppBaseController {
 
         if(doctorArticleService.updateFsDoctorArticle(param)>0){
             Collection<String> keys = redisCache.keys("getDoctorArticleList*");
-            for (String key : keys) {
-                redisCache.deleteObject(key);
+            Collection<String> details = redisCache.keys("getDoctorArticleById::" +param.getArticleId());
+            keys.addAll(details);
+            if (!keys.isEmpty()) {
+                for (String key : keys) {
+                    redisCache.deleteObject(key);
+                }
             }
             return R.ok();
         }

+ 2 - 1
fs-qw-task/src/main/java/com/fs/app/controller/CommonController.java

@@ -11,6 +11,7 @@ import com.fs.common.core.domain.ResponseResult;
 import com.fs.course.mapper.FsCourseWatchLogMapper;
 import com.fs.course.param.newfs.FsUserCourseAddCompanyUserParam;
 import com.fs.course.service.*;
+import com.fs.his.domain.FsUser;
 import com.fs.his.service.IFsInquiryOrderService;
 import com.fs.qw.mapper.QwExternalContactMapper;
 import com.fs.qw.service.IQwExternalContactService;
@@ -261,7 +262,7 @@ public class CommonController {
         return "s";
     }
     @GetMapping("/isAddkf")
-    public ResponseResult<Boolean> isAddkf(FsUserCourseAddCompanyUserParam param) throws Exception {
+    public ResponseResult<FsUser> isAddkf(FsUserCourseAddCompanyUserParam param) throws Exception {
         return courseVideoService.isAddCompanyUser(param);
     }
 

+ 6 - 5
fs-redis/src/main/java/com/fs/framework/config/MyBatisConfig.java

@@ -1,5 +1,6 @@
 package com.fs.framework.config;
 
+import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
 import com.fs.common.utils.StringUtils;
 import org.apache.ibatis.io.VFS;
 import org.apache.ibatis.session.SqlSessionFactory;
@@ -117,16 +118,16 @@ public class MyBatisConfig
     @Bean
     public SqlSessionFactory sqlSessionFactory(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);
         VFS.addImplClass(SpringBootVFS.class);
 
-        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
+        final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
         sessionFactory.setDataSource(dataSource);
         sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
-        sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
+        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(mapperLocations));
         sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
         return sessionFactory.getObject();
     }

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

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

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

+ 24 - 1
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.core.domain.R;
 import com.fs.common.core.redis.RedisCache;
+import com.fs.common.exception.CustomException;
 import com.fs.common.exception.ServiceException;
+import com.fs.common.exception.file.OssException;
 import com.fs.common.utils.DateUtils;
 import com.fs.common.utils.StringUtils;
 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.QwOptionsVO;
 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.wxUser.domain.CompanyWxUser;
 import org.slf4j.Logger;
@@ -31,7 +35,9 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
 
+import java.io.IOException;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -636,5 +642,22 @@ public class CompanyUserServiceImpl implements ICompanyUserService
     public int insertQwIpadTotal(List<QwIpadTotalVo> 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;
+    }
 }

+ 62 - 15
fs-service/src/main/java/com/fs/core/config/WxMaConfiguration.java

@@ -8,7 +8,12 @@ import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
 import cn.binarywang.wx.miniapp.message.WxMaMessageHandler;
 import cn.binarywang.wx.miniapp.message.WxMaMessageRouter;
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fs.common.utils.spring.SpringUtils;
 import com.fs.course.config.CourseMaConfig;
+import com.fs.course.domain.FsCoursePlaySourceConfig;
+import com.fs.course.mapper.FsCoursePlaySourceConfigMapper;
 import com.fs.system.domain.SysConfig;
 import com.fs.system.mapper.SysConfigMapper;
 import com.google.common.collect.Lists;
@@ -18,6 +23,7 @@ import lombok.extern.slf4j.Slf4j;
 import me.chanjar.weixin.common.bean.result.WxMediaUploadResult;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.common.error.WxRuntimeException;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.ComponentScan;
@@ -41,7 +47,7 @@ public class WxMaConfiguration {
     private static Map<String, WxMaService> maServices;
 
     @Autowired
-    public WxMaConfiguration(SysConfigMapper sysConfigMapper) {
+    public WxMaConfiguration(SysConfigMapper sysConfigMapper, FsCoursePlaySourceConfigMapper configMapper) {
         SysConfig sysConfig = sysConfigMapper.selectConfigByConfigKey("his.config");
         String configValue = sysConfig.getConfigValue();
         //下单小程序加载
@@ -73,18 +79,69 @@ public class WxMaConfiguration {
                 }
             }
         }
+
+        //  加载点播配置表配置
+        Wrapper<FsCoursePlaySourceConfig> queryWrapper = Wrappers.<FsCoursePlaySourceConfig>lambdaQuery().eq(FsCoursePlaySourceConfig::getIsDel, 0);
+        for (FsCoursePlaySourceConfig playConfig : configMapper.selectList(queryWrapper)) {
+            boolean isExist = c.stream().anyMatch(item -> item.getAppid().equals(playConfig.getAppid()));
+            if (!isExist){
+                WxMaConfig.Config wxMaConfig = new WxMaConfig.Config();
+                BeanUtils.copyProperties(playConfig, wxMaConfig);
+                c.add(wxMaConfig);
+            }
+        }
+
         wx.setConfigs(c);
         this.properties = wx;
         log.info("配置加载完毕! 配置文件: {}",JSON.toJSONString(this.properties));
     }
 
     public static WxMaService getMaService(String appid) {
+        // 从缓存获取
         WxMaService wxService = maServices.get(appid);
-        if (wxService == null) {
-            throw new IllegalArgumentException(String.format("未找到对应appid=[%s]的配置,请核实!", appid));
+        if (wxService != null) {
+            return wxService;
         }
 
-        return wxService;
+        // 缓存未命中,查询数据库
+        synchronized (WxMaConfiguration.class) {
+            // 双重检查
+            wxService = maServices.get(appid);
+            if (wxService != null) {
+                return wxService;
+            }
+
+            // 查询数据库
+            FsCoursePlaySourceConfigMapper configMapper = SpringUtils.getBean(FsCoursePlaySourceConfigMapper.class);
+            Wrapper<FsCoursePlaySourceConfig> queryWrapper = Wrappers.<FsCoursePlaySourceConfig>lambdaQuery()
+                    .eq(FsCoursePlaySourceConfig::getAppid, appid)
+                    .eq(FsCoursePlaySourceConfig::getIsDel, 0);
+            FsCoursePlaySourceConfig config = configMapper.selectOne(queryWrapper);
+            if (config == null) {
+                throw new IllegalArgumentException(String.format("未找到对应appid=[%s]的配置,请核实!", appid));
+            }
+
+            WxMaService service = getWxMaService(config.getAppid(), config.getSecret(), config.getToken(), config.getAesKey(), config.getMsgDataFormat());
+            maServices.put(appid, service);
+            log.info("Initialized WxMaService for appid: {}", appid);
+            return service;
+        }
+    }
+
+    /**
+     * 初始化WxMaService
+     */
+    private static WxMaService getWxMaService(String appid, String secret, String token, String aesKey, String msgDataFormat) {
+        WxMaDefaultConfigImpl maConfig = new WxMaDefaultConfigImpl();
+        maConfig.setAppid(appid);
+        maConfig.setSecret(secret);
+        maConfig.setToken(token);
+        maConfig.setAesKey(aesKey);
+        maConfig.setMsgDataFormat(msgDataFormat);
+
+        WxMaService service = new WxMaServiceImpl();
+        service.setWxMaConfig(maConfig);
+        return service;
     }
 
     public static WxMaMessageRouter getRouter(String appid) {
@@ -100,17 +157,7 @@ public class WxMaConfiguration {
 
         maServices = configs.stream()
             .map(a -> {
-                WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
-//                WxMaDefaultConfigImpl config = new WxMaRedisConfigImpl(new JedisPool());
-                // 使用上面的配置时,需要同时引入jedis-lock的依赖,否则会报类无法找到的异常
-                config.setAppid(a.getAppid());
-                config.setSecret(a.getSecret());
-                config.setToken(a.getToken());
-                config.setAesKey(a.getAesKey());
-                config.setMsgDataFormat(a.getMsgDataFormat());
-
-                WxMaService service = new WxMaServiceImpl();
-                service.setWxMaConfig(config);
+                WxMaService service = getWxMaService(a.getAppid(), a.getSecret(), a.getToken(), a.getAesKey(), a.getMsgDataFormat());
                 routers.put(a.getAppid(), this.newRouter(service));
                 return service;
             }).collect(Collectors.toMap(s -> s.getWxMaConfig().getAppid(), a -> a));

+ 2 - 1
fs-service/src/main/java/com/fs/course/domain/FsCourseLink.java

@@ -62,7 +62,8 @@ public class FsCourseLink extends BaseEntity
 
     @ApiModelProperty(value = "营期课程id")
     private Long id;
-
+    // 识别编号
+    private String uNo;
 //    private String link_uuid;
 
 }

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

@@ -0,0 +1,79 @@
+package com.fs.course.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+@TableName("fs_course_play_source_config")
+public class FsCoursePlaySourceConfig {
+
+    /**
+     * 主键ID
+     */
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 小程序/公众号名称
+     */
+    private String name;
+
+    /**
+     * 小程序/公众号appid
+     */
+    private String appid;
+
+    /**
+     * 小程序/公众号secret
+     */
+    private String secret;
+
+    /**
+     * 小程序/公众号icon图标
+     */
+    private String img;
+
+    /**
+     * 小程序/公众号原始id
+     */
+    private String originalId;
+
+    /**
+     * token
+     */
+    private String token;
+
+    /**
+     * aesKey
+     */
+    private String aesKey;
+
+    /**
+     * msgDataFormat
+     */
+    private String msgDataFormat;
+
+    /**
+     * 类型 1小程序 2公众号
+     */
+    private Integer type;
+
+    /**
+     * 是否删除 0正常 1删除
+     */
+    private Integer isDel;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+    /**
+     * 修改时间
+     */
+    private LocalDateTime updateTime;
+}

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

@@ -94,4 +94,8 @@ public class FsUserCoursePeriodDays extends BaseEntityTow {
     private LocalTime joinTime;
     @TableField(exist = false)
     private LocalDate maxDate;
+
+    /** 项目id */
+    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;
+}

+ 17 - 0
fs-service/src/main/java/com/fs/course/mapper/FsCoursePlaySourceConfigMapper.java

@@ -0,0 +1,17 @@
+package com.fs.course.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.course.domain.FsCoursePlaySourceConfig;
+import com.fs.course.vo.FsCoursePlaySourceConfigVO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface FsCoursePlaySourceConfigMapper extends BaseMapper<FsCoursePlaySourceConfig> {
+
+    /**
+     * 查询点播配置列表
+     */
+    List<FsCoursePlaySourceConfigVO> selectCoursePlaySourceConfigVOListByMap(@Param("params") Map<String, Object> params);
+}

+ 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 " +
             "where video_id = #{videoId} " +
             "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 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>")
     int updateBatchDelFlag(@Param("ids") Long [] ids, @Param("delFlag") Integer delFlag);
 
+    Long selectFsUserCoursePeriodDaysCount(FsUserCoursePeriodDays fsUserCoursePeriodDays);
 }

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

@@ -70,6 +70,7 @@ public interface FsUserCourseVideoRedPackageMapper
             "VALUES (#{companyId}, #{videoId}, #{redPacketMoney}) " +
             "ON DUPLICATE KEY UPDATE red_packet_money = VALUES(red_packet_money);")
     void insertOrUpdateFsUserCourseVideoRedPackage(FsUserCourseVideoParam fsUserCourseVideo);
+
     @Select("select * from fs_user_course_video_red_package where video_id =#{videoId} and company_id = #{companyId} and period_id = #{periodId}")
     FsUserCourseVideoRedPackage selectRedPacketByCompanyId(@Param("videoId") Long videoId,@Param("companyId") Long companyId, @Param("periodId") Long periodId);
 

+ 2 - 0
fs-service/src/main/java/com/fs/course/param/FsCourseLinkCreateParam.java

@@ -38,4 +38,6 @@ public class FsCourseLinkCreateParam {
     @ApiModelProperty(value = "营期课程id")
     private Long id;
 
+    private Long projectId;//项目ID
+
 }

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

@@ -0,0 +1,45 @@
+package com.fs.course.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class FsCoursePlaySourceConfigCreateParam {
+
+    @NotBlank(message = "名称不能为空")
+    @ApiModelProperty("小程序/公众号名称")
+    private String name;
+
+    @NotBlank(message = "appid不能为空")
+    @ApiModelProperty("小程序/公众号appid")
+    private String appid;
+
+    @NotBlank(message = "secret不能为空")
+    @ApiModelProperty("小程序/公众号secret")
+    private String secret;
+
+    @ApiModelProperty("小程序/公众号icon图标")
+    private String img;
+
+    @ApiModelProperty("小程序/公众号原始id")
+    private String originalId;
+
+    @NotBlank(message = "token不能为空")
+    @ApiModelProperty("token")
+    private String token;
+
+    @NotBlank(message = "aesKey不能为空")
+    @ApiModelProperty("aesKey")
+    private String aesKey;
+
+    @NotBlank(message = "msgDataFormat不能为空")
+    @ApiModelProperty("msgDataFormat")
+    private String msgDataFormat;
+
+    @NotNull(message = "类型不能为空")
+    @ApiModelProperty("类型 1小程序 2公众号")
+    private Integer type;
+}

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

@@ -0,0 +1,42 @@
+package com.fs.course.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class FsCoursePlaySourceConfigEditParam {
+
+    @NotNull(message = "主键ID不能为空")
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("小程序/公众号名称")
+    private String name;
+
+    @ApiModelProperty("小程序/公众号appid")
+    private String appid;
+
+    @ApiModelProperty("小程序/公众号secret")
+    private String secret;
+
+    @ApiModelProperty("小程序/公众号icon图标")
+    private String img;
+
+    @ApiModelProperty("小程序/公众号原始id")
+    private String originalId;
+
+    @ApiModelProperty("token")
+    private String token;
+
+    @ApiModelProperty("aesKey")
+    private String aesKey;
+
+    @ApiModelProperty("msgDataFormat")
+    private String msgDataFormat;
+
+    @ApiModelProperty("类型 1小程序 2公众号")
+    private Integer type;
+}

+ 3 - 0
fs-service/src/main/java/com/fs/course/param/FsCourseWatchLogListParam.java

@@ -75,4 +75,7 @@ public class FsCourseWatchLogListParam implements Serializable {
      * 部门类型 00 管理员 01 员工
      */
     private String userType;
+
+    //是否是会员
+    private Integer isVip;
 }

+ 3 - 0
fs-service/src/main/java/com/fs/course/param/PeriodCountParam.java

@@ -30,5 +30,8 @@ public class PeriodCountParam implements Serializable {
 
     private LocalDate maxDate;
 
+    @ApiModelProperty(value = "公司ID")
+    private Long companyId;
+
 }
 

+ 3 - 0
fs-service/src/main/java/com/fs/course/param/newfs/FsCourseSortLinkParam.java

@@ -38,4 +38,7 @@ public class FsCourseSortLinkParam {
     @ApiModelProperty(value = "营期课程id")
     private Long id;
 
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
 }

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

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

+ 16 - 0
fs-service/src/main/java/com/fs/course/service/IFsCoursePlaySourceConfigService.java

@@ -0,0 +1,16 @@
+package com.fs.course.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.course.domain.FsCoursePlaySourceConfig;
+import com.fs.course.vo.FsCoursePlaySourceConfigVO;
+
+import java.util.List;
+import java.util.Map;
+
+public interface IFsCoursePlaySourceConfigService extends IService<FsCoursePlaySourceConfig> {
+
+    /**
+     * 查询点播配置列表
+     */
+    List<FsCoursePlaySourceConfigVO> selectCoursePlaySourceConfigVOListByMap(Map<String, Object> params);
+}

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

@@ -117,4 +117,6 @@ public interface IFsUserCoursePeriodDaysService extends IService<FsUserCoursePer
      * 更新营期课程状态
      */
     void changePeriodCourseStatus();
-}
+
+        long periodCourseByCount(PeriodCountParam param);
+    }

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä