43 Commits 9844002113 ... 733c102260

Author SHA1 Message Date
  吴树波 733c102260 医健宝功能新增 1 week ago
  吴树波 f1de259005 Merge branch 'refs/heads/master' into ScrmStores 1 week ago
  caoliqin 409c96e0d2 Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_his_scrm_java 1 week ago
  caoliqin d8824985e1 fix:修复商品管理的保存回显问题 1 week ago
  yfh e3c9104072 取消缓存 1 week ago
  yfh 81162f15fc 调整清理缓存接口 1 week ago
  yfh 1b95a916d6 四福堂配置红包问题处理 1 week ago
  yfh 6b1cda4bc0 1 1 week ago
  jzp cfd5e87f2e 1.提交ai是否回复代码 1 week ago
  yfh f235386fe6 Merge remote-tracking branch 'origin/master' 1 week ago
  yfh ddbd1dd64d 调整统计数据,优化逻辑 1 week ago
  三七 cb966deae3 缺少 private Integer maxPadNum; 1 week ago
  三七 e19541abf4 销售账号导入 1 week ago
  zyp c2c1393241 zyp 1 week ago
  xdd 4f3c3c3372 revert: 179分支撤回 1 week ago
  xdd 1ce6494fe4 revert: 179分支撤回 1 week ago
  caoliqin b1cbd90ab4 feat:任务模板删除状态修改 1 week ago
  三七 3827195569 官方群发 1 week ago
  15376779826 84123ec2c1 Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_his_scrm_java 1 week ago
  15376779826 6d75f3f8be 注销功能修改 1 week ago
  ct 5e2eab2c47 Merge remote-tracking branch 'origin/master' 1 week ago
  ct 51ef58f196 支付回调添加交易单号和银行流水单号 1 week ago
  yfh a7e6677d84 Merge remote-tracking branch 'origin/master' 1 week ago
  yfh 219eed8329 调整小程序看课 1 week ago
  三七 b40090143f 益善源 1 week ago
  xw ea16eaf25a ``` 1 week ago
  三七 6a4a7d3205 益善源 1 week ago
  三七 9837387e75 益善源 1 week ago
  zyp dd01aa3ee7 zyp 1 week ago
  xdd 3bbde11f7a fix: 去除 1 week ago
  xdd 0c088585b2 fix: 去除 1 week ago
  三七 cdf8310bdf 益善源 1 week ago
  caoliqin 05632c173a fix:项目会员管理查询问题 1 week ago
  yfh 81e844c9d5 配置新增 1 week ago
  yfh 07a70e4eff 调整商城登录,调整fs_user参数 1 week ago
  15376779826 7ba6fa004d im课程消息注释 1 week ago
  15376779826 735f11a7da Merge remote-tracking branch 'origin/master' 1 week ago
  15376779826 bae1fa0448 用户注销,协议 1 week ago
  三七 afd8c51952 BATCH_SIZE=500 1 week ago
  wjj bd14000b93 修改汇付多支付配置 1 week ago
  15376779826 1ddb0d510d Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_his_scrm_java 1 week ago
  15376779826 08794d7658 Merge branch 'master' of http://1.14.104.71:10880/root/ylrz_his_scrm_java 1 month ago
  15376779826 9ad7d87467 im发课同步 1 month ago
100 changed files with 1534 additions and 4410 deletions
  1. 1 0
      fs-admin/src/main/java/com/fs/FSApplication.java
  2. 126 0
      fs-admin/src/main/java/com/fs/fastGpt/FastgptExtUserTagController.java
  3. 0 146
      fs-admin/src/main/java/com/fs/his/controller/FoodRecordController.java
  4. 0 106
      fs-admin/src/main/java/com/fs/his/controller/FsComplaintCategoryController.java
  5. 0 93
      fs-admin/src/main/java/com/fs/his/controller/FsComplaintController.java
  6. 0 120
      fs-admin/src/main/java/com/fs/his/controller/FsTodoItemsController.java
  7. 0 102
      fs-admin/src/main/java/com/fs/his/controller/RechargeTemplateController.java
  8. 0 17
      fs-admin/src/main/java/com/fs/his/task/FsUserTask.java
  9. 1 1
      fs-admin/src/main/java/com/fs/his/task/Task.java
  10. 3 4
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductScrmController.java
  11. 0 155
      fs-admin/src/main/java/com/fs/medical/MeasurementUnitController.java
  12. 0 157
      fs-admin/src/main/java/com/fs/medical/MedicalIndicatorController.java
  13. 0 160
      fs-admin/src/main/java/com/fs/medical/PhysicalExamReportController.java
  14. 0 190
      fs-admin/src/main/java/com/fs/medical/ReportIndicatorResultController.java
  15. 12 0
      fs-admin/src/main/java/com/fs/qw/controller/QwTagGroupController.java
  16. 0 82
      fs-admin/src/main/java/com/fs/saler/CompetitorInfoController.java
  17. 0 73
      fs-admin/src/main/java/com/fs/saler/FsServiceGoodsController.java
  18. 4 18
      fs-common-api/src/main/java/com/fs/framework/config/MyBatisConfig.java
  19. 0 42
      fs-common/src/main/java/com/fs/common/utils/DateUtils.java
  20. 0 3
      fs-common/src/main/java/com/fs/common/utils/DictUtils.java
  21. 0 205
      fs-common/src/main/java/com/fs/common/utils/FileNameExtractor.java
  22. 2 1
      fs-company-app/src/main/java/com/fs/app/controller/FsUserCourseVideoController.java
  23. 0 155
      fs-company-app/src/main/java/com/fs/app/controller/FsUserHealthDataController.java
  24. 0 139
      fs-company-app/src/main/java/com/fs/app/controller/FsUserHealthProfileController.java
  25. 0 111
      fs-company-app/src/main/java/com/fs/app/controller/FsUserInfoController.java
  26. 0 96
      fs-company-app/src/main/java/com/fs/app/controller/FsUserPayCompetitorsRecordController.java
  27. 0 96
      fs-company-app/src/main/java/com/fs/app/controller/FsUserPayRecordController.java
  28. 0 13
      fs-company-app/src/main/java/com/fs/app/exception/FSExceptionHandler.java
  29. 25 0
      fs-company/src/main/java/com/fs/company/controller/company/CompanyRechargeController.java
  30. 99 3
      fs-company/src/main/java/com/fs/company/controller/company/CompanyUserController.java
  31. 3 1
      fs-company/src/main/java/com/fs/company/controller/qw/QwSopLogsController.java
  32. 2 2
      fs-company/src/main/java/com/fs/company/controller/qw/SopUserLogsController.java
  33. 0 1
      fs-company/src/main/java/com/fs/company/controller/qw/SopUserLogsInfoController.java
  34. 1 1
      fs-company/src/main/java/com/fs/hisStore/controller/FsStoreProductScrmController.java
  35. 74 6
      fs-doctor-app/src/main/java/com/fs/app/controller/DoctorController.java
  36. 3 0
      fs-framework/src/main/java/com/fs/framework/config/LogInterceptor.java
  37. 26 6
      fs-ipad-task/src/main/java/com/fs/app/service/IpadSendServer.java
  38. 15 2
      fs-ipad-task/src/main/java/com/fs/app/task/SendMsg.java
  39. 0 12
      fs-qw-api/src/main/java/com/fs/app/service/QwDataCallbackService.java
  40. 30 20
      fs-qw-task/src/main/java/com/fs/app/taskService/impl/SopLogsTaskServiceImpl.java
  41. 72 0
      fs-qwhook-sop/src/main/java/com/fs/app/controller/ApisQwUserController.java
  42. 70 0
      fs-qwhook-sop/src/main/java/com/fs/app/controller/QwUserController.java
  43. 16 0
      fs-qwhook-sop/src/main/java/com/fs/app/params/LoginBindCompanyParam.java
  44. 2 0
      fs-service/src/main/java/com/fs/aiTongueApi/config/AiTongueConfig.java
  45. 58 0
      fs-service/src/main/java/com/fs/aiTongueApi/domain/enums/TongueTypeEnums.java
  46. 14 0
      fs-service/src/main/java/com/fs/aiTongueApi/domain/inner/ConfidenceDataNew.java
  47. 14 0
      fs-service/src/main/java/com/fs/aiTongueApi/domain/inner/TongueInfo.java
  48. 3 0
      fs-service/src/main/java/com/fs/aiTongueApi/service/AiTongueService.java
  49. 187 2
      fs-service/src/main/java/com/fs/aiTongueApi/service/impl/AiTongueServiceImpl.java
  50. 4 149
      fs-service/src/main/java/com/fs/company/domain/CompanyRecharge.java
  51. 2 2
      fs-service/src/main/java/com/fs/company/domain/CompanyUser.java
  52. 1 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyRoleMapper.java
  53. 1 0
      fs-service/src/main/java/com/fs/company/param/CompanyRechargeParam.java
  54. 4 0
      fs-service/src/main/java/com/fs/company/service/ICompanyUserService.java
  55. 2 1
      fs-service/src/main/java/com/fs/company/service/impl/CompanyServiceImpl.java
  56. 169 2
      fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java
  57. 17 350
      fs-service/src/main/java/com/fs/company/vo/CompanyUserImportVO.java
  58. 2 1
      fs-service/src/main/java/com/fs/company/vo/CompanyVO.java
  59. 0 65
      fs-service/src/main/java/com/fs/complaint/domain/FsComplaint.java
  60. 0 51
      fs-service/src/main/java/com/fs/complaint/domain/FsComplaintAttachment.java
  61. 0 55
      fs-service/src/main/java/com/fs/complaint/domain/FsComplaintCategory.java
  62. 0 20
      fs-service/src/main/java/com/fs/complaint/dto/ComplaintQueryDTO.java
  63. 0 29
      fs-service/src/main/java/com/fs/complaint/dto/SubmitComplaintDTO.java
  64. 0 16
      fs-service/src/main/java/com/fs/complaint/dto/UpdateComplaintDTO.java
  65. 0 59
      fs-service/src/main/java/com/fs/complaint/mapper/FsComplaintAttachmentMapper.java
  66. 0 66
      fs-service/src/main/java/com/fs/complaint/mapper/FsComplaintCategoryMapper.java
  67. 0 135
      fs-service/src/main/java/com/fs/complaint/mapper/FsComplaintMapper.java
  68. 0 28
      fs-service/src/main/java/com/fs/complaint/param/FsComplaintCategoryParam.java
  69. 0 52
      fs-service/src/main/java/com/fs/complaint/service/FsComplaintCategoryService.java
  70. 0 43
      fs-service/src/main/java/com/fs/complaint/service/FsComplaintService.java
  71. 0 68
      fs-service/src/main/java/com/fs/complaint/service/impl/FsComplaintCategoryServiceImpl.java
  72. 0 195
      fs-service/src/main/java/com/fs/complaint/service/impl/FsComplaintServiceImpl.java
  73. 0 22
      fs-service/src/main/java/com/fs/complaint/vo/ComplaintVO.java
  74. 0 50
      fs-service/src/main/java/com/fs/complaint/vo/FsComplaintCategoryListVO.java
  75. 1 0
      fs-service/src/main/java/com/fs/course/mapper/FsUserCourseVideoRedPackageMapper.java
  76. 8 8
      fs-service/src/main/java/com/fs/course/service/IFsCourseProductOrderService.java
  77. 1 1
      fs-service/src/main/java/com/fs/course/service/IFsUserCourseOrderService.java
  78. 1 1
      fs-service/src/main/java/com/fs/course/service/IFsUserVipOrderService.java
  79. 10 8
      fs-service/src/main/java/com/fs/course/service/impl/FsCourseProductOrderServiceImpl.java
  80. 21 27
      fs-service/src/main/java/com/fs/course/service/impl/FsCourseTrafficLogServiceImpl.java
  81. 8 1
      fs-service/src/main/java/com/fs/course/service/impl/FsCourseWatchLogServiceImpl.java
  82. 5 3
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseOrderServiceImpl.java
  83. 1 1
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCoursePeriodDaysServiceImpl.java
  84. 5 3
      fs-service/src/main/java/com/fs/course/service/impl/FsUserVipOrderServiceImpl.java
  85. 3 0
      fs-service/src/main/java/com/fs/course/vo/newfs/FsUserCourseVideoPageListVO.java
  86. 2 1
      fs-service/src/main/java/com/fs/erp/http/JstErpHttpServiceImpl.java
  87. 2 1
      fs-service/src/main/java/com/fs/erp/service/impl/FsJstAftersalePushServiceImpl.java
  88. 31 0
      fs-service/src/main/java/com/fs/fastGpt/domain/FastgptExtUserTag.java
  89. 67 0
      fs-service/src/main/java/com/fs/fastGpt/mapper/FastgptExtUserTagMapper.java
  90. 66 0
      fs-service/src/main/java/com/fs/fastGpt/service/IFastgptExtUserTagService.java
  91. 58 2
      fs-service/src/main/java/com/fs/fastGpt/service/impl/AiHookServiceImpl.java
  92. 145 0
      fs-service/src/main/java/com/fs/fastGpt/service/impl/FastgptExtUserTagServiceImpl.java
  93. 34 0
      fs-service/src/main/java/com/fs/fastGpt/vo/FastgptExtUserTagVO.java
  94. 0 59
      fs-service/src/main/java/com/fs/foods/domain/FsFoodRecord.java
  95. 0 73
      fs-service/src/main/java/com/fs/foods/mapper/FoodRecordMapper.java
  96. 0 47
      fs-service/src/main/java/com/fs/foods/param/FoodRecordAddParam.java
  97. 0 48
      fs-service/src/main/java/com/fs/foods/param/FoodRecordEditParam.java
  98. 0 57
      fs-service/src/main/java/com/fs/foods/param/FoodRecordQueryParam.java
  99. 0 90
      fs-service/src/main/java/com/fs/foods/service/IFsFoodRecordService.java
  100. 0 179
      fs-service/src/main/java/com/fs/foods/service/impl/FsFoodRecordServiceImpl.java

+ 1 - 0
fs-admin/src/main/java/com/fs/FSApplication.java

@@ -14,6 +14,7 @@ import org.springframework.transaction.annotation.Transactional;
  * 启动程序
  * 启动程序
  */
  */
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
+@Transactional
 @EnableAsync
 @EnableAsync
 @EnableScheduling
 @EnableScheduling
 public class FSApplication
 public class FSApplication

+ 126 - 0
fs-admin/src/main/java/com/fs/fastGpt/FastgptExtUserTagController.java

@@ -0,0 +1,126 @@
+package com.fs.fastGpt;
+
+import java.util.List;
+
+import com.fs.common.core.domain.R;
+import com.fs.fastGpt.vo.FastgptExtUserTagVO;
+import com.fs.framework.web.service.TokenService;
+import com.fs.qw.service.IQwCompanyService;
+import com.fs.qw.vo.QwOptionsVO;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.fs.common.annotation.Log;
+import com.fs.common.core.controller.BaseController;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.enums.BusinessType;
+import com.fs.fastGpt.domain.FastgptExtUserTag;
+import com.fs.fastGpt.service.IFastgptExtUserTagService;
+import com.fs.common.utils.poi.ExcelUtil;
+import com.fs.common.core.page.TableDataInfo;
+
+/**
+ * 处理新客标签Controller
+ * 
+ * @author fs
+ * @date 2025-09-10
+ */
+@RestController
+@RequestMapping("/fastGpt/FastGptExtUserTag")
+public class FastgptExtUserTagController extends BaseController
+{
+    @Autowired
+    private IFastgptExtUserTagService fastgptExtUserTagService;
+
+
+    @Autowired
+    private IQwCompanyService qwCompanyService;
+
+
+    /**
+     * 查询处理新客标签列表
+     */
+    @PreAuthorize("@ss.hasPermi('FastGptExtUserTag:FastGptExtUserTag:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FastgptExtUserTag fastgptExtUserTag)
+    {
+        startPage();
+        List<FastgptExtUserTag> list = fastgptExtUserTagService.selectFastgptExtUserTagList(fastgptExtUserTag);
+        return getDataTable(list);
+    }
+    @PreAuthorize("@ss.hasPermi('qw:externalContact:addTag')")
+    @Log(title = "添加标签", businessType = BusinessType.UPDATE)
+    @PostMapping("/addFastGptTagByCorpId")
+    public R addFastGptTagByCorpId(@RequestBody FastgptExtUserTagVO fastgptExtUserTag) {
+        return fastgptExtUserTagService.addFastGptTagByCorpId(fastgptExtUserTag);
+    }
+    @GetMapping("/getMyQwUserList")
+    public R getMyQwUserList()
+    {
+        List<QwOptionsVO> list = qwCompanyService.selectQwCompanyListOptionsVO();
+        return  R.ok().put("data",list);
+    }
+
+    /**
+     * 导出处理新客标签列表
+     */
+    @PreAuthorize("@ss.hasPermi('FastGptExtUserTag:FastGptExtUserTag:export')")
+    @Log(title = "处理新客标签", businessType = BusinessType.EXPORT)
+    @GetMapping("/export")
+    public AjaxResult export(FastgptExtUserTag fastgptExtUserTag)
+    {
+        List<FastgptExtUserTag> list = fastgptExtUserTagService.selectFastgptExtUserTagList(fastgptExtUserTag);
+        ExcelUtil<FastgptExtUserTag> util = new ExcelUtil<FastgptExtUserTag>(FastgptExtUserTag.class);
+        return util.exportExcel(list, "处理新客标签数据");
+    }
+
+    /**
+     * 获取处理新客标签详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('FastGptExtUserTag:FastGptExtUserTag:query')")
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(fastgptExtUserTagService.selectFastgptExtUserTagById(id));
+    }
+
+    /**
+     * 新增处理新客标签
+     */
+    @PreAuthorize("@ss.hasPermi('FastGptExtUserTag:FastGptExtUserTag:add')")
+    @Log(title = "处理新客标签", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody FastgptExtUserTag fastgptExtUserTag)
+    {
+        return toAjax(fastgptExtUserTagService.insertFastgptExtUserTag(fastgptExtUserTag));
+    }
+
+    /**
+     * 修改处理新客标签
+     */
+    @PreAuthorize("@ss.hasPermi('FastGptExtUserTag:FastGptExtUserTag:edit')")
+    @Log(title = "处理新客标签", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody FastgptExtUserTag fastgptExtUserTag)
+    {
+        return toAjax(fastgptExtUserTagService.updateFastgptExtUserTag(fastgptExtUserTag));
+    }
+
+    /**
+     * 删除处理新客标签
+     */
+    @PreAuthorize("@ss.hasPermi('FastGptExtUserTag:FastGptExtUserTag:remove')")
+    @Log(title = "处理新客标签", businessType = BusinessType.DELETE)
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(fastgptExtUserTagService.deleteFastgptExtUserTagByIds(ids));
+    }
+}

+ 0 - 146
fs-admin/src/main/java/com/fs/his/controller/FoodRecordController.java

@@ -1,146 +0,0 @@
-package com.fs.his.controller;
-
-import com.fs.common.core.controller.BaseController;
-import com.fs.common.core.domain.R;
-import com.fs.common.core.page.TableDataInfo;
-import com.fs.common.utils.StringUtils;
-import com.fs.foods.domain.FsFoodRecord;
-import com.fs.foods.param.FoodRecordAddParam;
-import com.fs.foods.param.FoodRecordEditParam;
-import com.fs.foods.param.FoodRecordQueryParam;
-import com.fs.foods.service.IFsFoodRecordService;
-import com.fs.his.mapper.FsUserMapper;
-import com.fs.store.service.cache.IFsUserCacheService;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.BeanUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.validation.Valid;
-import java.util.List;
-
-/**
- * 饮食记录控制器
- */
-@Api("饮食记录管理")
-@RestController
-@Slf4j
-@RequestMapping(value = "/food-record")
-public class FoodRecordController extends BaseController {
-
-    @Autowired
-    private IFsFoodRecordService foodRecordService;
-
-    /**
-     * 获取用户饮食记录详情
-     */
-    @ApiOperation("获取饮食记录详情")
-    @GetMapping("/getRecordInfo/{id}")
-    public R getRecordInfo(@PathVariable Long id, HttpServletRequest request) {
-        FsFoodRecord record = foodRecordService.selectFsFoodRecordById(id);
-        return R.ok().put("data",record);
-    }
-
-
-    /**
-     * 获取用户饮食记录分页列表
-     */
-    @ApiOperation("获取用户饮食记录列表")
-    @GetMapping("/getMyRecordList")
-    public R getMyRecordList(FoodRecordQueryParam param, HttpServletRequest request) {
-        try {
-            PageHelper.startPage(param.getPageNum(), param.getPageSize());
-            List<FsFoodRecord> list = foodRecordService.selectFoodRecordList(param);
-            PageInfo<FsFoodRecord> listPageInfo = new PageInfo<>(list);
-            return R.ok().put("data", listPageInfo);
-        } catch (Exception e) {
-            log.error("获取饮食记录列表异常:", e);
-            return R.error("操作异常");
-        }
-    }
-
-    /**
-     * 新增饮食记录
-     */
-    @ApiOperation("新增饮食记录")
-    @PostMapping("/addRecord")
-    public R addRecord(@RequestBody @Valid FoodRecordAddParam param, HttpServletRequest request) {
-        try {
-            log.info("【新增饮食记录】:{}", param);
-
-            if (StringUtils.isEmpty(param.getMealDescription())) {
-                return R.error("用餐描述不能为空");
-            }
-
-            FsFoodRecord record = new FsFoodRecord();
-            BeanUtils.copyProperties(param, record);
-
-            if (foodRecordService.insertFsFoodRecord(record) > 0) {
-                return R.ok("添加成功");
-            } else {
-                return R.error("添加失败");
-            }
-        } catch (Exception e) {
-            log.error("新增饮食记录异常:", e);
-            return R.error("操作异常");
-        }
-    }
-
-    /**
-     * 修改饮食记录
-     */
-    @ApiOperation("修改饮食记录")
-    @PostMapping("/editRecord")
-    public R editRecord(@RequestBody @Valid FoodRecordEditParam param, HttpServletRequest request) {
-        try {
-            log.info("【修改饮食记录】:{}", param);
-
-            FsFoodRecord record = new FsFoodRecord();
-            BeanUtils.copyProperties(param, record);
-
-            if (foodRecordService.updateFsFoodRecord(record) > 0) {
-                return R.ok("修改成功");
-            } else {
-                return R.error("修改失败");
-            }
-        } catch (Exception e) {
-            log.error("修改饮食记录异常:", e);
-            return R.error("操作异常");
-        }
-    }
-
-    /**
-     * 删除饮食记录
-     */
-    @ApiOperation("删除饮食记录")
-    @PostMapping("/deleteRecord/{id}")
-    public R deleteRecord(@PathVariable("id") Long id, HttpServletRequest request) {
-        foodRecordService.deleteFsFoodRecordById(id);
-        return R.ok();
-    }
-
-
-    @Autowired
-    private IFsUserCacheService fsUserCacheService;
-    /**
-     * 管理端查询饮食记录列表
-     */
-    @ApiOperation("管理端查询饮食记录")
-    @GetMapping("/admin/list")
-    public TableDataInfo adminList(FoodRecordQueryParam param) {
-        startPage();
-        List<FsFoodRecord> list = foodRecordService.selectFoodRecordList(param);
-        for (FsFoodRecord fsFoodRecord : list) {
-            String fsUserName = fsUserCacheService.selectUserNameById(fsFoodRecord.getUserId());
-            if(StringUtils.isNotEmpty(fsUserName)){
-                fsFoodRecord.setUsername(fsUserName);
-            }
-        }
-        return getDataTable(list);
-    }
-}

+ 0 - 106
fs-admin/src/main/java/com/fs/his/controller/FsComplaintCategoryController.java

@@ -1,106 +0,0 @@
-package com.fs.his.controller;
-
-import com.fs.common.annotation.Log;
-import com.fs.common.core.controller.BaseController;
-import com.fs.common.core.domain.R;
-import com.fs.common.core.page.TableDataInfo;
-import com.fs.common.enums.BusinessType;
-import com.fs.complaint.domain.FsComplaintCategory;
-import com.fs.complaint.mapper.FsComplaintCategoryMapper;
-import com.fs.complaint.param.FsComplaintCategoryParam;
-import com.fs.complaint.service.FsComplaintCategoryService;
-import com.fs.complaint.vo.FsComplaintCategoryListVO;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-@Slf4j
-@Api("投诉接口")
-@RestController
-@RequestMapping(value="/complaint")
-public class FsComplaintCategoryController extends BaseController {
-
-    @Autowired
-    private FsComplaintCategoryMapper fsComplaintCategoryMapper;
-
-    @Autowired
-    private FsComplaintCategoryService fsComplaintCategoryService;
-
-
-    /**
-     * 查询投诉分类列表
-     */
-    @ApiOperation("查询投诉分类列表")
-    @PreAuthorize("@ss.hasPermi('complaint:category:list')")
-    @GetMapping("/category/list")
-    public TableDataInfo list(FsComplaintCategoryParam param)
-    {
-        startPage();
-        List<FsComplaintCategoryListVO> list = fsComplaintCategoryMapper.selectFsComplaintCategoryListVO(param);
-        return getDataTable(list);
-    }
-    /**
-     * 根据ID查询投诉分类详情
-     */
-    @ApiOperation("查询投诉分类详情")
-    @PreAuthorize("@ss.hasPermi('complaint:category:query')")
-    @GetMapping("/category/{id}")
-    public R getInfo(@PathVariable("id") Long id)
-    {
-        return R.ok().put("data",fsComplaintCategoryService.selectFsComplaintCategoryById(id));
-    }
-
-    /**
-     * 新增投诉分类
-     */
-    @ApiOperation("新增投诉分类")
-    @PreAuthorize("@ss.hasPermi('complaint:category:add')")
-    @Log(title = "投诉分类", businessType = BusinessType.INSERT)
-    @PostMapping("/category")
-    public R add(@RequestBody FsComplaintCategory fsComplaintCategory)
-    {
-        fsComplaintCategoryService.insertFsComplaintCategory(fsComplaintCategory);
-        return R.ok();
-    }
-    @ApiOperation("修改投诉分类")
-    @PreAuthorize("@ss.hasPermi('complaint:category:edit')")
-    @Log(title = "投诉分类", businessType = BusinessType.UPDATE)
-    @PutMapping("/category")
-    public R edit(@RequestBody FsComplaintCategory fsComplaintCategory)
-    {
-        log.info("修改投诉分类 参数:{}",fsComplaintCategory);
-        fsComplaintCategoryService.updateFsComplaintCategory(fsComplaintCategory);
-        return R.ok();
-    }
-    /**
-     * 删除投诉分类
-     */
-    @ApiOperation("删除投诉分类")
-    @PreAuthorize("@ss.hasPermi('complaint:category:remove')")
-    @Log(title = "投诉分类", businessType = BusinessType.DELETE)
-    @DeleteMapping("/category/{ids}")
-    public R remove(@PathVariable Long[] ids)
-    {
-        fsComplaintCategoryService.deleteFsComplaintCategoryByIds(ids);
-        return R.ok();
-    }
-    /**
-     * 修改投诉分类状态
-     */
-    @ApiOperation("修改投诉分类状态")
-    @PreAuthorize("@ss.hasPermi('complaint:category:edit')")
-    @Log(title = "投诉分类状态", businessType = BusinessType.UPDATE)
-    @PutMapping("/category/status")
-    public R changeStatus(@RequestBody FsComplaintCategory fsComplaintCategory)
-    {
-        log.info("投诉分类状态 参数:{}",fsComplaintCategory);
-        fsComplaintCategoryService.updateFsComplaintCategoryStatus(fsComplaintCategory);
-        return R.ok();
-    }
-
-}

+ 0 - 93
fs-admin/src/main/java/com/fs/his/controller/FsComplaintController.java

@@ -1,93 +0,0 @@
-package com.fs.his.controller;
-
-import com.fs.common.annotation.Log;
-import com.fs.common.core.controller.BaseController;
-import com.fs.common.core.domain.R;
-import com.fs.common.core.page.TableDataInfo;
-import com.fs.common.enums.BusinessType;
-import com.fs.complaint.domain.FsComplaint;
-import com.fs.complaint.domain.FsComplaintCategory;
-import com.fs.complaint.dto.ComplaintQueryDTO;
-import com.fs.complaint.dto.SubmitComplaintDTO;
-import com.fs.complaint.dto.UpdateComplaintDTO;
-import com.fs.complaint.mapper.FsComplaintCategoryMapper;
-import com.fs.complaint.mapper.FsComplaintMapper;
-import com.fs.complaint.param.FsComplaintCategoryParam;
-import com.fs.complaint.service.FsComplaintCategoryService;
-import com.fs.complaint.service.FsComplaintService;
-import com.fs.complaint.vo.ComplaintVO;
-import com.fs.complaint.vo.FsComplaintCategoryListVO;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-import shade.kotlin.Result;
-
-import javax.validation.Valid;
-import java.util.List;
-
-@Slf4j
-@Api("投诉接口")
-@RestController
-@RequestMapping(value="/complaint")
-public class FsComplaintController extends BaseController {
-
-    @Autowired
-    private FsComplaintService fsComplaintService;
-    @Autowired
-    private FsComplaintCategoryService fsComplaintCategoryService;
-
-    /**
-     * 查询所有投诉分类
-     * @return R
-     */
-    @PostMapping("/queryAllCategory")
-    public R queryAllCategory(){
-        List<FsComplaintCategory> categoryList = fsComplaintCategoryService.queryAllCategory();
-        return R.ok().put("data",categoryList);
-    }
-
-    @ApiOperation("提交投诉")
-    @PostMapping
-    public R submitComplaint(@Valid @RequestBody SubmitComplaintDTO dto) {
-        fsComplaintService.submitComplaint(dto);
-        return R.ok();
-    }
-
-    @ApiOperation("根据ID查询投诉详情")
-    @GetMapping("/{id}")
-    public R getComplaintById(@PathVariable Long id) {
-        ComplaintVO complaintVO = fsComplaintService.getComplaintById(id);
-        return R.ok().put("data", complaintVO);
-    }
-    @ApiOperation("根据投诉单号查询投诉详情")
-    @GetMapping("/no/{complaintNo}")
-    public R getComplaintByNo(@PathVariable String complaintNo) {
-        ComplaintVO complaintVO = fsComplaintService.getComplaintByNo(complaintNo);
-        return R.ok().put("data", complaintVO);
-    }
-    @ApiOperation("分页查询投诉列表")
-    @PostMapping("/list")
-    public TableDataInfo getComplaintPage(@RequestBody ComplaintQueryDTO queryDTO) {
-        startPage();
-
-        List<FsComplaint> result = fsComplaintService.getComplaintPage(queryDTO);
-
-        return getDataTable(result);
-    }
-    @ApiOperation("更新投诉信息")
-    @PutMapping("/{id}")
-    public R updateComplaint(@PathVariable Long id, @Valid @RequestBody UpdateComplaintDTO dto) {
-        fsComplaintService.updateComplaint(id, dto);
-        return R.ok();
-    }
-    @ApiOperation("删除投诉")
-    @DeleteMapping("/{id}")
-    public R deleteComplaint(@PathVariable Long id) {
-        fsComplaintService.deleteComplaint(id);
-        return R.ok();
-    }
-
-}

+ 0 - 120
fs-admin/src/main/java/com/fs/his/controller/FsTodoItemsController.java

@@ -1,120 +0,0 @@
-package com.fs.his.controller;
-
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.fs.common.core.controller.BaseController;
-import com.fs.common.core.domain.R;
-import com.fs.common.utils.SecurityUtils;
-import com.fs.common.utils.ServletUtils;
-import com.fs.company.domain.CompanyUser;
-import com.fs.company.service.ICompanyUserService;
-import com.fs.todo.domain.FsTodoItems;
-import com.fs.todo.dto.TodoCategoryStatisticsDTO;
-import com.fs.todo.param.AssignExecutorParam;
-import com.fs.todo.param.GetUserListParam;
-import com.fs.todo.param.QueryTodoItemsParam;
-import com.fs.todo.service.FsTodoItemsService;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.time.LocalDateTime;
-import java.util.List;
-import java.util.Map;
-
-@Api("待办")
-@RestController
-@RequestMapping(value="/todoItems")
-public class FsTodoItemsController extends BaseController {
-
-    @Autowired
-    private FsTodoItemsService fsTodoItemsService;
-
-    @Autowired
-    private ICompanyUserService companyUserService;
-
-    @ApiOperation("查看待办列表")
-    @PostMapping("/listPage")
-    public R listPage(@RequestBody QueryTodoItemsParam param)
-    {
-        PageHelper.startPage(param.getPageNum(), param.getPageSize());
-        List<FsTodoItems> fsTodoItems = fsTodoItemsService.listPage(param);
-        PageInfo<FsTodoItems> listPageInfo=new PageInfo<>(fsTodoItems);
-        return R.ok().put("data",listPageInfo);
-    }
-
-    @ApiOperation("查看详情")
-    @PostMapping("/findById")
-    public R findById(@RequestBody QueryTodoItemsParam param)
-    {
-        if(ObjectUtils.isNull(param.getId())){
-            throw new IllegalArgumentException("待办事项id不能为空!");
-        }
-        FsTodoItems byId = fsTodoItemsService.getById(param.getId());
-        return R.ok().put("data",byId);
-    }
-
-
-    @ApiOperation("更新待办事项状态")
-    @PostMapping("/updateStatusById")
-    public R updateStatusById(@RequestBody QueryTodoItemsParam param)
-    {
-        if(ObjectUtils.isNull(param.getId())){
-            throw new IllegalArgumentException("待办事项id不能为空!");
-        }
-        fsTodoItemsService.updateStatus(param.getId(),param.getStatus());
-        return R.ok();
-    }
-    @ApiOperation("更新待办事项")
-    @PostMapping("/updateById")
-    public R updateById(@RequestBody FsTodoItems param)
-    {
-        if(ObjectUtils.isNull(param.getId())){
-            throw new IllegalArgumentException("待办事项id不能为空!");
-        }
-        fsTodoItemsService.updateById(param);
-        return R.ok();
-    }
-
-
-    @ApiOperation("删除待办事项")
-    @PostMapping("/removeById")
-    public R removeById(@RequestBody QueryTodoItemsParam param){
-        fsTodoItemsService.removeById(param.getId());
-        return R.ok();
-    }
-
-    @ApiOperation("添加待办事项")
-    @PostMapping("/add")
-    public R addTodoItems(@RequestBody FsTodoItems param){
-        param.setCreateTime(LocalDateTime.now());
-        param.setUpdateTime(LocalDateTime.now());
-        param.setCreatorId(getUserId());
-        fsTodoItemsService.save(param);
-        return R.ok();
-    }
-
-    @ApiOperation("添加待办事项")
-    @PostMapping("/assignExecutor")
-    public R assignExecutor(@RequestBody AssignExecutorParam param){
-        param.setAssigneeId(SecurityUtils.getUserId());
-
-        fsTodoItemsService.assignExecutor(param);
-        return R.ok();
-    }
-
-    @PostMapping("/getUserList")
-    public R getUserList(@RequestBody GetUserListParam param)
-    {
-
-        PageHelper.startPage(param.getPageNum(), param.getPageSize());
-
-        CompanyUser map=new CompanyUser();
-        map.setCompanyId(param.getCompanyId());
-        List<CompanyUser> list = companyUserService.selectCompanyUserList(map);
-        return  R.ok().put("data",list);
-    }
-
-}

+ 0 - 102
fs-admin/src/main/java/com/fs/his/controller/RechargeTemplateController.java

@@ -1,102 +0,0 @@
-package com.fs.his.controller;
-
-import com.fs.common.core.controller.BaseController;
-import com.fs.common.core.domain.R;
-import com.fs.common.core.page.TableDataInfo;
-import com.fs.common.core.redis.RedisCache;
-import com.fs.his.param.FsCouponListUParam;
-import com.fs.his.service.IFsCouponService;
-import com.fs.his.service.IFsUserCouponService;
-import com.fs.his.vo.FsCouponListUVO;
-import com.fs.recharge.domain.RechargeTemplate;
-import com.fs.recharge.param.RechargeParam;
-import com.fs.recharge.param.RechargeTemplateQuery;
-import com.fs.recharge.service.RechargeTemplateService;
-import com.fs.recharge.vo.RechargeTemplateVO;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 充值模板控制器
- */
-@Slf4j
-@Api(tags = "充值模板管理")
-@RestController
-@RequestMapping("/recharge-templates")
-public class RechargeTemplateController extends BaseController {
-
-    @Autowired
-    private RechargeTemplateService rechargeTemplateService;
-    @Autowired
-    private IFsCouponService couponService;
-
-    @ApiOperation("获取可用的充值模板列表")
-    @PostMapping("/list")
-    public TableDataInfo getValidTemplates(@RequestBody RechargeTemplateQuery query) {
-        log.info("获取可用的充值模板列表 参数 query: {}",query);
-
-        Integer pageNum = query.getPageNum();
-        Integer pageSize = query.getPageSize();
-
-        PageHelper.startPage(pageNum, pageSize);
-
-        List<RechargeTemplateVO> templates = rechargeTemplateService.queryList(query);
-        return getDataTable(templates);
-    }
-
-    @ApiOperation("获取充值模板详情")
-    @GetMapping("/{id}")
-    public R getTemplateDetail(
-            @ApiParam(value = "模板ID", required = true) @PathVariable Long id) {
-        RechargeTemplateVO template = rechargeTemplateService.getTemplateDetail(id);
-        if (template == null) {
-            return R.error("模板不存在");
-        }
-        return R.ok().put("data",template);
-    }
-
-    @ApiOperation("创建充值模板")
-    @PostMapping
-    public R createTemplate(@RequestBody RechargeTemplate template) {
-        boolean success = rechargeTemplateService.createTemplate(template);
-        return R.ok();
-    }
-
-    @ApiOperation("更新充值模板")
-    @PutMapping("/{id}")
-    public R updateTemplate(
-            @ApiParam(value = "模板ID", required = true) @PathVariable Long id,
-            @RequestBody RechargeTemplate template) {
-        template.setId(id);
-        boolean success = rechargeTemplateService.updateTemplate(template);
-        return R.ok();
-    }
-
-    @ApiOperation("启用或禁用充值模板")
-    @PutMapping("/{id}/status")
-    public R updateStatus(
-            @ApiParam(value = "模板ID", required = true) @PathVariable Long id,
-            @ApiParam(value = "状态:0-禁用,1-启用", required = true) @RequestParam Integer status) {
-        boolean success = rechargeTemplateService.updateStatus(id, status);
-        return R.ok();
-    }
-
-
-    @ApiOperation("获取优惠券列表")
-    @GetMapping("/getCouponList")
-    public R getCouponList(FsCouponListUParam param)
-    {
-        PageHelper.startPage(param.getPageNum(), param.getPageSize());
-        List<FsCouponListUVO> list=couponService.selectFsCouponListUVO(param);
-        PageInfo<FsCouponListUVO> listPageInfo=new PageInfo<>(list);
-        return R.ok().put("data",listPageInfo);
-    }
-}

+ 0 - 17
fs-admin/src/main/java/com/fs/his/task/FsUserTask.java

@@ -1,17 +0,0 @@
-package com.fs.his.task;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-
-@Slf4j
-@Service("fsUserTask")
-public class FsUserTask {
-
-    /**
-     * 推广员自动升级
-     */
-    public void promoterAutoUpgrade(){
-
-    }
-
-}

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

@@ -802,7 +802,7 @@ public class Task {
 
 
 
 
     public void tb() {
     public void tb() {
-        packageOrderService.payConfirm("", "1780763211956486144", "1075999515888117190", "14", 1);
+        packageOrderService.payConfirm("", "1780763211956486144", "1075999515888117190", "14", 1,null,null);
     }
     }
 
 
 
 

+ 3 - 4
fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductScrmController.java

@@ -8,7 +8,6 @@ import com.fs.common.core.domain.R;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.enums.BusinessType;
 import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.common.utils.poi.ExcelUtil;
-import com.fs.hisStore.param.FormatAttrParam;
 import com.fs.hisStore.vo.FsStoreProductAttrValueVO;
 import com.fs.hisStore.vo.FsStoreProductAttrValueVO;
 import com.fs.hisStore.vo.FsStoreProductExportVO;
 import com.fs.hisStore.vo.FsStoreProductExportVO;
 import com.fs.hisStore.vo.FsStoreProductListVO;
 import com.fs.hisStore.vo.FsStoreProductListVO;
@@ -85,7 +84,7 @@ public class FsStoreProductScrmController extends BaseController
     /**
     /**
      * 查询商品列表
      * 查询商品列表
      */
      */
-//    @PreAuthorize("@ss.hasPermi('store:storeProduct:list')")
+    @PreAuthorize("@ss.hasPermi('store:storeProduct:list')")
     @GetMapping("/list")
     @GetMapping("/list")
     public TableDataInfo list(FsStoreProductScrm fsStoreProduct)
     public TableDataInfo list(FsStoreProductScrm fsStoreProduct)
     {
     {
@@ -182,8 +181,8 @@ public class FsStoreProductScrmController extends BaseController
 
 
     @ApiOperation(value = "生成属性")
     @ApiOperation(value = "生成属性")
     @PostMapping(value = "/genFormatAttr/{productId}")
     @PostMapping(value = "/genFormatAttr/{productId}")
-    public ResponseEntity genFormatAttr(@PathVariable Long productId,@RequestBody FormatAttrParam param){
-        return new ResponseEntity<>(fsStoreProductService.getFormatAttr(productId,param.getAttrs(),param.getStores()), HttpStatus.OK);
+    public ResponseEntity genFormatAttr(@PathVariable Long productId, @RequestBody String jsonStr,Long[] stores){
+        return new ResponseEntity<>(fsStoreProductService.getFormatAttr(productId,jsonStr, stores), HttpStatus.OK);
     }
     }
 
 
 
 

+ 0 - 155
fs-admin/src/main/java/com/fs/medical/MeasurementUnitController.java

@@ -1,155 +0,0 @@
-package com.fs.medical;
-
-import com.fs.common.annotation.RepeatSubmit;
-import com.fs.common.core.controller.BaseController;
-import com.fs.common.core.domain.R;
-import com.fs.medical.domain.MeasurementUnit;
-import com.fs.medical.param.MeasurementUnitQueryDto;
-import com.fs.medical.service.MeasurementUnitService;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 计量单位Controller
- *
- * @author fs
- * @date 2024
- */
-@Api("计量单位")
-@RestController
-@RequestMapping("/admin/medical/unit")
-public class MeasurementUnitController extends BaseController {
-    private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
-    @Autowired
-    private MeasurementUnitService measurementUnitService;
-
-    /**
-     * 查询所有计量单位
-     */
-    @ApiOperation("查询所有计量单位")
-    @GetMapping("/listAll")
-    public R listAll() {
-        try {
-            List<MeasurementUnit> list = measurementUnitService.listAll();
-            return R.ok().put("data",list);
-        } catch (Exception e) {
-            logger.error("查询计量单位失败", e);
-            return R.error("查询失败");
-        }
-    }
-
-    /**
-     * 分页查询计量单位列表(带筛选)
-     */
-    @ApiOperation("分页查询计量单位列表")
-    @GetMapping("/page")
-    public R page(MeasurementUnitQueryDto queryDto) {
-        try {
-            PageHelper.startPage(queryDto.getPageNum(), queryDto.getPageSize());
-            List<MeasurementUnit> list = measurementUnitService.selectPageList(queryDto);
-            PageInfo<MeasurementUnit> pageInfo = new PageInfo<>(list);
-            return R.ok().put("data", pageInfo);
-        } catch (Exception e) {
-            logger.error("分页查询计量单位失败", e);
-            return R.error("查询失败");
-        }
-    }
-
-    /**
-     * 根据单位类型查询计量单位
-     */
-    @ApiOperation("根据单位类型查询计量单位")
-    @GetMapping("/listByType")
-    public R listByType(@RequestParam String unitType) {
-        try {
-            List<MeasurementUnit> list = measurementUnitService.listByType(unitType);
-            return R.ok().put("data",list);
-        } catch (Exception e) {
-            logger.error("根据类型查询计量单位失败", e);
-            return R.error("查询失败");
-        }
-    }
-
-    /**
-     * 根据ID查询计量单位详情
-     */
-    @ApiOperation("根据ID查询计量单位详情")
-    @GetMapping("/{unitId}")
-    public R getById(@PathVariable("unitId") Long unitId) {
-        try {
-            MeasurementUnit unit = measurementUnitService.getById(unitId);
-            return R.ok().put("data",unit);
-        } catch (Exception e) {
-            logger.error("查询计量单位详情失败", e);
-            return R.error("查询失败");
-        }
-    }
-
-    /**
-     * 新增计量单位
-     */
-    @RepeatSubmit
-    @ApiOperation("新增计量单位")
-    @PostMapping("/add")
-    public R add(@RequestBody MeasurementUnit unit) {
-        try {
-            boolean result = measurementUnitService.save(unit);
-            if (result) {
-                return R.ok("新增成功");
-            } else {
-                return R.error("新增失败");
-            }
-        } catch (Exception e) {
-            logger.error("新增计量单位失败", e);
-            return R.error("新增失败");
-        }
-    }
-
-    /**
-     * 更新计量单位
-     */
-    @RepeatSubmit
-    @ApiOperation("更新计量单位")
-    @PutMapping("/update")
-    public R update(@RequestBody MeasurementUnit unit) {
-        try {
-            boolean result = measurementUnitService.update(unit);
-            if (result) {
-                return R.ok("更新成功");
-            } else {
-                return R.error("更新失败");
-            }
-        } catch (Exception e) {
-            logger.error("更新计量单位失败", e);
-            return R.error("更新失败");
-        }
-    }
-
-    /**
-     * 删除计量单位
-     */
-    @ApiOperation("删除计量单位")
-    @DeleteMapping("/{unitId}")
-    public R delete(@PathVariable("unitId") Long unitId) {
-        try {
-            boolean result = measurementUnitService.deleteById(unitId);
-            if (result) {
-                return R.ok("删除成功");
-            } else {
-                return R.error("删除失败");
-            }
-        } catch (Exception e) {
-            logger.error("删除计量单位失败", e);
-            return R.error("删除失败");
-        }
-    }
-}

+ 0 - 157
fs-admin/src/main/java/com/fs/medical/MedicalIndicatorController.java

@@ -1,157 +0,0 @@
-package com.fs.medical;
-
-import com.fs.common.annotation.RepeatSubmit;
-import com.fs.common.core.controller.BaseController;
-import com.fs.common.core.domain.R;
-import com.fs.medical.domain.MedicalIndicator;
-import com.fs.medical.param.MedicalIndicatorQueryDto;
-import com.fs.medical.service.MedicalIndicatorService;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 医疗指标Controller
- *
- * @author fs
- * @date 2024
- */
-@Slf4j
-@Api("医疗指标")
-@RestController
-@RequestMapping("/admin/medical/indicator")
-public class MedicalIndicatorController extends BaseController {
-    private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
-    @Autowired
-    private MedicalIndicatorService medicalIndicatorService;
-
-    /**
-     * 查询所有启用的指标
-     */
-    @ApiOperation("查询所有启用的指标")
-    @GetMapping("/listEnabled")
-    public R listAllEnabled() {
-        try {
-            List<MedicalIndicator> list = medicalIndicatorService.listAllEnabled();
-            return R.ok().put("data",list);
-        } catch (Exception e) {
-            logger.error("查询启用指标失败", e);
-            return R.error("查询失败");
-        }
-    }
-
-    /**
-     * 分页查询医疗指标列表(带筛选)
-     */
-    @ApiOperation("分页查询医疗指标列表")
-    @GetMapping("/page")
-    public R page(MedicalIndicatorQueryDto queryDto) {
-        try {
-            PageHelper.startPage(queryDto.getPageNum(), queryDto.getPageSize());
-            List<MedicalIndicator> list = medicalIndicatorService.selectPageList(queryDto);
-            PageInfo<MedicalIndicator> pageInfo = new PageInfo<>(list);
-            return R.ok().put("data", pageInfo);
-        } catch (Exception e) {
-            logger.error("分页查询医疗指标失败", e);
-            return R.error("查询失败");
-        }
-    }
-
-    /**
-     * 根据分类查询指标
-     */
-    @ApiOperation("根据分类查询指标")
-    @GetMapping("/listByCategory")
-    public R listByCategory(@RequestParam String category) {
-        try {
-            List<MedicalIndicator> list = medicalIndicatorService.listByCategory(category);
-            return R.ok().put("data",list);
-        } catch (Exception e) {
-            logger.error("根据分类查询指标失败", e);
-            return R.error("查询失败");
-        }
-    }
-
-    /**
-     * 根据ID查询指标详情
-     */
-    @ApiOperation("根据ID查询指标详情")
-    @GetMapping("/{indicatorId}")
-    public R getById(@PathVariable("indicatorId") Long indicatorId) {
-        try {
-            MedicalIndicator indicator = medicalIndicatorService.getById(indicatorId);
-            return R.ok().put("data",indicator);
-        } catch (Exception e) {
-            logger.error("查询指标详情失败", e);
-            return R.error("查询失败");
-        }
-    }
-
-    /**
-     * 新增指标
-     */
-    @RepeatSubmit
-    @ApiOperation("新增指标")
-    @PostMapping("/add")
-    public R add(@RequestBody MedicalIndicator indicator) {
-        try {
-            boolean result = medicalIndicatorService.save(indicator);
-            if (result) {
-                return R.ok("新增成功");
-            } else {
-                return R.error("新增失败");
-            }
-        } catch (Exception e) {
-            logger.error("新增指标失败", e);
-            return R.error("新增失败");
-        }
-    }
-
-    /**
-     * 更新指标
-     */
-    @RepeatSubmit
-    @ApiOperation("更新指标")
-    @PutMapping("/update")
-    public R update(@RequestBody MedicalIndicator indicator) {
-        try {
-            boolean result = medicalIndicatorService.update(indicator);
-            if (result) {
-                return R.ok("更新成功");
-            } else {
-                return R.error("更新失败");
-            }
-        } catch (Exception e) {
-            logger.error("更新指标失败", e);
-            return R.error("更新失败");
-        }
-    }
-
-    /**
-     * 删除指标
-     */
-    @ApiOperation("删除指标")
-    @DeleteMapping("/{indicatorId}")
-    public R delete(@PathVariable("indicatorId") Long indicatorId) {
-        try {
-            boolean result = medicalIndicatorService.deleteById(indicatorId);
-            if (result) {
-                return R.ok("删除成功");
-            } else {
-                return R.error("删除失败");
-            }
-        } catch (Exception e) {
-            logger.error("删除指标失败", e);
-            return R.error("删除失败");
-        }
-    }
-}

+ 0 - 160
fs-admin/src/main/java/com/fs/medical/PhysicalExamReportController.java

@@ -1,160 +0,0 @@
-package com.fs.medical;
-
-import com.fs.common.annotation.RepeatSubmit;
-import com.fs.common.core.controller.BaseController;
-import com.fs.common.core.domain.R;
-import com.fs.medical.domain.PhysicalExamReport;
-import com.fs.medical.param.PhysicalExamReportCompareDto;
-import com.fs.medical.param.PhysicalExamReportQueryDto;
-import com.fs.medical.service.PhysicalExamReportService;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.format.annotation.DateTimeFormat;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Date;
-import java.util.List;
-
-/**
- * 体检报告Controller
- *
- * @author fs
- * @date 2024
- */
-@Api("体检报告")
-@RestController
-@RequestMapping("/admin/medical/report")
-public class PhysicalExamReportController extends BaseController {
-    private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
-    @Autowired
-    private PhysicalExamReportService physicalExamReportService;
-
-    /**
-     * 根据用户ID查询体检报告列表
-     */
-    @ApiOperation("查询用户体检报告列表")
-    @GetMapping("/listByUser/{userId}")
-    public R listByUserId(@PathVariable("userId") Long userId) {
-        try {
-            List<PhysicalExamReport> list = physicalExamReportService.listByUserId(userId);
-            return R.ok().put("data",list);
-        } catch (Exception e) {
-            logger.error("查询用户体检报告失败", e);
-            return R.error("查询失败");
-        }
-    }
-
-    /**
-     * 分页查询体检报告列表(带筛选)
-     */
-    @ApiOperation("分页查询体检报告列表")
-    @GetMapping("/page")
-    public R page(PhysicalExamReportQueryDto queryDto) {
-        try {
-            PageHelper.startPage(queryDto.getPageNum(), queryDto.getPageSize());
-            List<PhysicalExamReport> list = physicalExamReportService.selectPageList(queryDto);
-            PageInfo<PhysicalExamReport> pageInfo = new PageInfo<>(list);
-            return R.ok().put("data", pageInfo);
-        } catch (Exception e) {
-            logger.error("分页查询体检报告失败", e);
-            return R.error("查询失败");
-        }
-    }
-
-    /**
-     * 根据用户ID和体检日期查询体检报告
-     */
-    @ApiOperation("根据用户ID和体检日期查询体检报告")
-    @GetMapping("/getByUserAndDate")
-    public R getByUserIdAndDate(
-            @RequestParam Long userId,
-            @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date examDate) {
-        try {
-            PhysicalExamReport report = physicalExamReportService.getByUserIdAndDate(userId, examDate);
-            return R.ok().put("data",report);
-        } catch (Exception e) {
-            logger.error("根据用户ID和日期查询体检报告失败", e);
-            return R.error("查询失败");
-        }
-    }
-
-    /**
-     * 根据ID查询体检报告详情
-     */
-    @ApiOperation("查询体检报告详情")
-    @GetMapping("/{reportId}")
-    public R getById(@PathVariable("reportId") Long reportId) {
-        try {
-            PhysicalExamReport report = physicalExamReportService.getById(reportId);
-            return R.ok().put("data",report);
-        } catch (Exception e) {
-            logger.error("查询体检报告详情失败", e);
-            return R.error("查询失败");
-        }
-    }
-
-    /**
-     * 新增体检报告
-     */
-    @RepeatSubmit
-    @ApiOperation("新增体检报告")
-    @PostMapping("/add")
-    public R add(@RequestBody PhysicalExamReport report) {
-        try {
-            boolean result = physicalExamReportService.save(report);
-            if (result) {
-                return R.ok("新增成功");
-            } else {
-                return R.error("新增失败");
-            }
-        } catch (Exception e) {
-            logger.error("新增体检报告失败", e);
-            return R.error("新增失败");
-        }
-    }
-
-    /**
-     * 更新体检报告
-     */
-    @RepeatSubmit
-    @ApiOperation("更新体检报告")
-    @PutMapping("/update")
-    public R update(@RequestBody PhysicalExamReport report) {
-        try {
-            boolean result = physicalExamReportService.update(report);
-            if (result) {
-                return R.ok("更新成功");
-            } else {
-                return R.error("更新失败");
-            }
-        } catch (Exception e) {
-            logger.error("更新体检报告失败", e);
-            return R.error("更新失败");
-        }
-    }
-
-    /**
-     * 删除体检报告
-     */
-    @ApiOperation("删除体检报告")
-    @DeleteMapping("/{reportId}")
-    public R delete(@PathVariable("reportId") Long reportId) {
-        try {
-            boolean result = physicalExamReportService.deleteById(reportId);
-            if (result) {
-                return R.ok("删除成功");
-            } else {
-                return R.error("删除失败");
-            }
-        } catch (Exception e) {
-            logger.error("删除体检报告失败", e);
-            return R.error("删除失败");
-        }
-    }
-}

+ 0 - 190
fs-admin/src/main/java/com/fs/medical/ReportIndicatorResultController.java

@@ -1,190 +0,0 @@
-package com.fs.medical;
-
-import com.fs.common.annotation.RepeatSubmit;
-import com.fs.common.core.controller.BaseController;
-import com.fs.common.core.domain.R;
-import com.fs.medical.domain.ReportIndicatorResult;
-import com.fs.medical.dto.ReportAllIndicatorCateDTO;
-import com.fs.medical.param.ReportIndicatorResultQueryDto;
-import com.fs.medical.service.ReportIndicatorResultService;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 报告指标检查Controller
- *
- * @author fs
- * @date 2024
- */
-@Api("报告指标检查")
-@RestController
-@RequestMapping("/admin/medical/result")
-public class ReportIndicatorResultController extends BaseController {
-    private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
-    @Autowired
-    private ReportIndicatorResultService reportIndicatorResultService;
-
-    /**
-     * 根据报告ID查询所有指标结果
-     */
-    @ApiOperation("根据报告ID查询所有指标结果")
-    @GetMapping("/listByReport/{reportId}")
-    public R listByReportId(@PathVariable("reportId") Long reportId) {
-        try {
-            List<ReportIndicatorResult> list = reportIndicatorResultService.listByReportId(reportId);
-            return R.ok().put("data",list);
-        } catch (Exception e) {
-            logger.error("根据报告ID查询指标结果失败", e);
-            return R.error("查询失败");
-        }
-    }
-
-    @ApiOperation("获取指定报告的指标分类")
-    @GetMapping("/getAllCateByReportId")
-    public R getAllIndicatorByReportId(@RequestParam("reportId") Long reportId) {
-        List<ReportAllIndicatorCateDTO> allIndicatorByReportId = reportIndicatorResultService.getAllIndicatorByReportId(reportId);
-        return R.ok().put("data",allIndicatorByReportId);
-    }
-
-    /**
-     * 分页查询报告指标检查结果列表(带筛选)
-     */
-    @ApiOperation("分页查询报告指标检查结果列表")
-    @GetMapping("/page")
-    public R page(ReportIndicatorResultQueryDto queryDto) {
-        try {
-            PageHelper.startPage(queryDto.getPageNum(), queryDto.getPageSize());
-            List<ReportIndicatorResult> list = reportIndicatorResultService.selectPageList(queryDto);
-            PageInfo<ReportIndicatorResult> pageInfo = new PageInfo<>(list);
-            return R.ok().put("data", pageInfo);
-        } catch (Exception e) {
-            logger.error("分页查询报告指标检查结果失败", e);
-            return R.error("查询失败");
-        }
-    }
-
-    /**
-     * 根据指标ID查询所有结果
-     */
-    @ApiOperation("根据指标ID查询所有结果")
-    @GetMapping("/listByIndicator/{indicatorId}")
-    public R listByIndicatorId(@PathVariable("indicatorId") Long indicatorId) {
-        try {
-            List<ReportIndicatorResult> list = reportIndicatorResultService.listByIndicatorId(indicatorId);
-            return R.ok().put("data",list);
-        } catch (Exception e) {
-            logger.error("根据指标ID查询结果失败", e);
-            return R.error("查询失败");
-        }
-    }
-
-    /**
-     * 根据ID查询检查结果详情
-     */
-    @ApiOperation("查询检查结果详情")
-    @GetMapping("/{resultId}")
-    public R getById(@PathVariable("resultId") Long resultId) {
-        try {
-            ReportIndicatorResult result = reportIndicatorResultService.getById(resultId);
-            return R.ok().put("data",result);
-        } catch (Exception e) {
-            logger.error("查询检查结果详情失败", e);
-            return R.error("查询失败");
-        }
-    }
-
-    /**
-     * 新增检查结果
-     */
-    @RepeatSubmit
-    @ApiOperation("新增检查结果")
-    @PostMapping("/add")
-    public R add(@RequestBody ReportIndicatorResult result) {
-        try {
-            boolean success = reportIndicatorResultService.save(result);
-            if (success) {
-                return R.ok("新增成功");
-            } else {
-                return R.error("新增失败");
-            }
-        } catch (Exception e) {
-            logger.error("新增检查结果失败", e);
-            return R.error("新增失败");
-        }
-    }
-
-    /**
-     * 批量新增检查结果
-     */
-    @RepeatSubmit
-    @ApiOperation("批量新增检查结果")
-    @PostMapping("/batchAdd")
-    public R batchAdd(@RequestBody List<ReportIndicatorResult> results) {
-        try {
-            int successCount = 0;
-            for (ReportIndicatorResult result : results) {
-                if (reportIndicatorResultService.save(result)) {
-                    successCount++;
-                }
-            }
-            if (successCount == results.size()) {
-                return R.ok("批量新增成功");
-            } else {
-                return R.ok("部分新增成功,成功" + successCount + "条");
-            }
-        } catch (Exception e) {
-            logger.error("批量新增检查结果失败", e);
-            return R.error("批量新增失败"
-
-            );
-        }
-    }
-
-    /**
-     * 更新检查结果
-     */
-    @RepeatSubmit
-    @ApiOperation("更新检查结果")
-    @PutMapping("/update")
-    public R update(@RequestBody ReportIndicatorResult result) {
-        try {
-            boolean success = reportIndicatorResultService.update(result);
-            if (success) {
-                return R.ok("更新成功");
-            } else {
-                return R.error("更新失败");
-            }
-        } catch (Exception e) {
-            logger.error("更新检查结果失败", e);
-            return R.error("更新失败");
-        }
-    }
-
-    /**
-     * 删除检查结果
-     */
-    @ApiOperation("删除检查结果")
-    @DeleteMapping("/{resultId}")
-    public R delete(@PathVariable("resultId") Long resultId) {
-        try {
-            boolean success = reportIndicatorResultService.deleteById(resultId);
-            if (success) {
-                return R.ok("删除成功");
-            } else {
-                return R.error("删除失败");
-            }
-        } catch (Exception e) {
-            logger.error("删除检查结果失败", e);
-            return R.error("删除失败");
-        }
-    }
-}

+ 12 - 0
fs-admin/src/main/java/com/fs/qw/controller/QwTagGroupController.java

@@ -38,4 +38,16 @@ public class QwTagGroupController extends BaseController
         List<QwTagGroupListVO> list = qwTagGroupService.selectQwTagGroupListVO(qwTagGroup);
         List<QwTagGroupListVO> list = qwTagGroupService.selectQwTagGroupListVO(qwTagGroup);
         return getDataTable(list);
         return getDataTable(list);
     }
     }
+
+    /**
+     * 所有标签列表(无分页)
+     * @param qwTagGroup
+     * @return
+     */
+    @GetMapping("/getAllList")
+    public TableDataInfo getAllList(QwTagGroup qwTagGroup)
+    {
+        List<QwTagGroupListVO> list = qwTagGroupService.selectQwTagGroupListVO(qwTagGroup);
+        return getDataTable(list);
+    }
 }
 }

+ 0 - 82
fs-admin/src/main/java/com/fs/saler/CompetitorInfoController.java

@@ -1,82 +0,0 @@
-package com.fs.saler;
-
-import com.fs.common.core.controller.BaseController;
-import com.fs.common.core.domain.R;
-import com.fs.saler.domain.FsCompetitorInfo;
-import com.fs.saler.param.FsCompetitorInfoParam;
-import com.fs.saler.service.FsCompetitorInfoService;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-
-/**
- * 竞品信息控制器
- */
-@Api("竞品信息")
-@RestController
-@RequestMapping(value="/saler/competitorInfo")
-public class CompetitorInfoController extends BaseController {
-
-    @Autowired
-    private FsCompetitorInfoService competitorInfoService;
-
-    /**
-     * 分页查询竞品列表
-     */
-    @ApiOperation("查看竞品列表")
-    @PostMapping("/listPage")
-    public R listPage(@RequestBody FsCompetitorInfoParam param) {
-        PageHelper.startPage(param.getPageNum(), param.getPageSize());
-        List<FsCompetitorInfo> list = competitorInfoService.getAll(param);
-        PageInfo<FsCompetitorInfo> pageInfo = new PageInfo<>(list);
-        return R.ok().put("data", pageInfo);
-    }
-
-    /**
-     * 查看竞品详情
-     */
-    @ApiOperation("查看竞品详情")
-    @PostMapping("/findById")
-    public R findById(@RequestBody FsCompetitorInfoParam param) {
-        FsCompetitorInfo competitorInfo = competitorInfoService.getById(param.getId());
-        return R.ok().put("data", competitorInfo);
-    }
-
-    /**
-     * 新增竞品
-     */
-    @ApiOperation("新增竞品")
-    @PostMapping("/save")
-    public R save(@RequestBody FsCompetitorInfo competitorInfo) {
-        boolean result = competitorInfoService.save(competitorInfo);
-        return result ? R.ok() : R.error("新增竞品失败");
-    }
-
-    /**
-     * 更新竞品信息
-     */
-    @ApiOperation("更新竞品信息")
-    @PostMapping("/updateById")
-    public R updateById(@RequestBody FsCompetitorInfo competitorInfo) {
-        boolean result = competitorInfoService.update(competitorInfo);
-        return result ? R.ok() : R.error("更新竞品信息失败");
-    }
-
-    /**
-     * 删除竞品
-     */
-    @ApiOperation("删除竞品")
-    @PostMapping("/deleteById")
-    public R deleteById(@RequestBody FsCompetitorInfoParam param) {
-        boolean result = competitorInfoService.removeById(param.getId());
-        return result ? R.ok() : R.error("删除竞品失败");
-    }
-}

+ 0 - 73
fs-admin/src/main/java/com/fs/saler/FsServiceGoodsController.java

@@ -1,73 +0,0 @@
-package com.fs.saler;
-
-import com.fs.common.core.domain.R;
-import com.fs.saler.domain.FsProductInfo;
-import com.fs.saler.param.ProductInfoListPageParam;
-import com.fs.saler.service.FsProductInfoService;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.List;
-
-@Api("商品信息")
-@RestController
-@RequestMapping(value="/saler/serviceGoods")
-public class FsServiceGoodsController {
-    @Autowired
-    private FsProductInfoService fsProductInfoService;
-
-    /**
-     * 分页查询商品列表
-     */
-    @ApiOperation("查看商品列表")
-    @PostMapping("/listPage")
-    public R listPage(@RequestBody ProductInfoListPageParam param) {
-        PageHelper.startPage(param.getPageNum(), param.getPageSize());
-        List<FsProductInfo> list = fsProductInfoService.getAll(param);
-        PageInfo<FsProductInfo> pageInfo = new PageInfo<>(list);
-        return R.ok().put("data", pageInfo);
-    }
-    /**
-     * 查看商品详情
-     */
-    @ApiOperation("查看商品详情")
-    @PostMapping("/findById")
-    public R findById(@RequestBody ProductInfoListPageParam param) {
-        FsProductInfo productInfo = fsProductInfoService.getById(param.getId());
-        return R.ok().put("data", productInfo);
-    }
-    /**
-     * 新增商品
-     */
-    @ApiOperation("新增商品")
-    @PostMapping("/save")
-    public R save(@RequestBody FsProductInfo productInfo) {
-        boolean result = fsProductInfoService.save(productInfo);
-        return result ? R.ok() : R.error("新增商品失败");
-    }
-    /**
-     * 更新商品信息
-     */
-    @ApiOperation("更新商品信息")
-    @PostMapping("/updateById")
-    public R updateById(@RequestBody FsProductInfo productInfo) {
-        boolean result = fsProductInfoService.update(productInfo);
-        return result ? R.ok() : R.error("更新商品信息失败");
-    }
-    /**
-     * 删除商品
-     */
-    @ApiOperation("删除商品")
-    @PostMapping("/deleteById")
-    public R deleteById(@RequestBody ProductInfoListPageParam param) {
-        boolean result = fsProductInfoService.removeById(param.getId());
-        return result ? R.ok() : R.error("删除商品失败");
-    }
-}

+ 4 - 18
fs-common-api/src/main/java/com/fs/framework/config/MyBatisConfig.java

@@ -29,6 +29,7 @@ import java.util.List;
 /**
 /**
  * Mybatis支持*匹配扫描包
  * Mybatis支持*匹配扫描包
  *
  *
+
  */
  */
 @Configuration
 @Configuration
 public class MyBatisConfig {
 public class MyBatisConfig {
@@ -92,24 +93,9 @@ public class MyBatisConfig {
         return resources.toArray(new Resource[resources.size()]);
         return resources.toArray(new Resource[resources.size()]);
     }
     }
 
 
-    //    @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");
-//        typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
-//        VFS.addImplClass(SpringBootVFS.class);
-//
-//        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
-//        sessionFactory.setDataSource(dataSource);
-//        sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
-//        sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
-//        sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
-//        return sessionFactory.getObject();
-//    }
     @Bean
     @Bean
-    public SqlSessionFactory sqlSessionFactorys(DataSource dataSource) throws Exception {
+    public SqlSessionFactory sqlSessionFactorys(DataSource dataSource) throws Exception
+    {
         String typeAliasesPackage = env.getProperty("mybatis-plus.typeAliasesPackage");
         String typeAliasesPackage = env.getProperty("mybatis-plus.typeAliasesPackage");
         String mapperLocations = env.getProperty("mybatis-plus.mapperLocations");
         String mapperLocations = env.getProperty("mybatis-plus.mapperLocations");
         String configLocation = env.getProperty("mybatis-plus.configLocation");
         String configLocation = env.getProperty("mybatis-plus.configLocation");
@@ -123,4 +109,4 @@ public class MyBatisConfig {
         sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
         sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
         return sessionFactory.getObject();
         return sessionFactory.getObject();
     }
     }
-}
+}

+ 0 - 42
fs-common/src/main/java/com/fs/common/utils/DateUtils.java

@@ -271,46 +271,4 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
         return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
     }
     }
 
 
-    /**
-     * @Description: yyyy-MM 获取当月的第一天
-     * @Param:
-     * @Return:
-     * @Author xgb
-     * @Date 2025/9/1 14:30
-     */
-    public static Date getStartOfMonth(Date date) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        calendar.set(Calendar.DAY_OF_MONTH, 1);
-        return calendar.getTime();
-    }
-
-    /**
-     * @Description: yyyy-MM 获取当月的最后一天
-     * @Param:
-     * @Return:
-     * @Author xgb
-     * @Date 2025/9/1 14:31
-     */
-
-    public static Date getEndOfMonth(Date date) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
-        return calendar.getTime();
-    }
-
-    /**
-     * @Description: 根据日期获取星期 1-星期一 2-星期二 。。。6-星期六 0-星期日
-     * @Param:
-     * @Return:
-     * @Author xgb
-     * @Date 2025/9/5 14:04
-     */
-
-    public static int getWeek(Date date) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        return calendar.get(Calendar.DAY_OF_WEEK)-1;
-    }
 }
 }

+ 0 - 3
fs-common/src/main/java/com/fs/common/utils/DictUtils.java

@@ -6,14 +6,12 @@ import com.fs.common.constant.Constants;
 import com.fs.common.core.domain.entity.SysDictData;
 import com.fs.common.core.domain.entity.SysDictData;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.utils.spring.SpringUtils;
 import com.fs.common.utils.spring.SpringUtils;
-import lombok.extern.slf4j.Slf4j;
 
 
 /**
 /**
  * 字典工具类
  * 字典工具类
  *
  *
 
 
  */
  */
-@Slf4j
 public class DictUtils
 public class DictUtils
 {
 {
     /**
     /**
@@ -44,7 +42,6 @@ public class DictUtils
         if (StringUtils.isNotNull(cacheObj))
         if (StringUtils.isNotNull(cacheObj))
         {
         {
             List<SysDictData> dictDatas = StringUtils.cast(cacheObj);
             List<SysDictData> dictDatas = StringUtils.cast(cacheObj);
-            log.info("获取缓存 key: {} values: {}",key,dictDatas);
             return dictDatas;
             return dictDatas;
         }
         }
         return null;
         return null;

+ 0 - 205
fs-common/src/main/java/com/fs/common/utils/FileNameExtractor.java

@@ -1,205 +0,0 @@
-package com.fs.common.utils;
-
-import org.apache.commons.io.FilenameUtils;
-import java.net.URL;
-import java.net.MalformedURLException;
-
-public class FileNameExtractor {
-
-    /**
-     * 使用Apache Commons IO获取文件名
-     * @param urlString URL字符串
-     * @return 文件名
-     */
-    public static String getFileNameFromUrl(String urlString) {
-        if (urlString == null || urlString.trim().isEmpty()) {
-            return null;
-        }
-
-        try {
-            URL url = new URL(urlString);
-            String path = url.getPath();
-            return FilenameUtils.getName(path);
-        } catch (MalformedURLException e) {
-            // 作为普通路径处理
-            return FilenameUtils.getName(urlString);
-        }
-    }
-
-    /**
-     * 获取不带扩展名的文件名
-     * @param urlString URL字符串
-     * @return 不带扩展名的文件名
-     */
-    public static String getBaseNameFromUrl(String urlString) {
-        if (urlString == null || urlString.trim().isEmpty()) {
-            return null;
-        }
-
-        try {
-            URL url = new URL(urlString);
-            String path = url.getPath();
-            return FilenameUtils.getBaseName(path);
-        } catch (MalformedURLException e) {
-            return FilenameUtils.getBaseName(urlString);
-        }
-    }
-
-    /**
-     * 获取文件扩展名
-     * @param urlString URL字符串
-     * @return 文件扩展名
-     */
-    public static String getExtensionFromUrl(String urlString) {
-        if (urlString == null || urlString.trim().isEmpty()) {
-            return null;
-        }
-
-        try {
-            URL url = new URL(urlString);
-            String path = url.getPath();
-            return FilenameUtils.getExtension(path);
-        } catch (MalformedURLException e) {
-            return FilenameUtils.getExtension(urlString);
-        }
-    }
-
-    /**
-     * 从URL或文件路径中获取扩展名
-     * @param urlOrPath URL字符串或文件路径
-     * @return 扩展名(不包含点号),如果没有扩展名则返回null
-     */
-    public static String getExtension(String urlOrPath) {
-        if (urlOrPath == null || urlOrPath.trim().isEmpty()) {
-            return null;
-        }
-
-        String fileName = getFileNameFromUrlOrPath(urlOrPath);
-        if (fileName == null || fileName.isEmpty()) {
-            return null;
-        }
-
-        // 查找最后一个点的位置
-        int lastDotIndex = fileName.lastIndexOf('.');
-
-        // 如果没有点,或者点在开头(隐藏文件),或者点在结尾,则没有扩展名
-        if (lastDotIndex <= 0 || lastDotIndex == fileName.length() - 1) {
-            return null;
-        }
-
-        return fileName.substring(lastDotIndex + 1).toLowerCase();
-    }
-
-    /**
-     * 从URL或文件路径中获取扩展名(包含点号)
-     * @param urlOrPath URL字符串或文件路径
-     * @return 扩展名(包含点号),如果没有扩展名则返回null
-     */
-    public static String getExtensionWithDot(String urlOrPath) {
-        String extension = getExtension(urlOrPath);
-        return extension != null ? "." + extension : null;
-    }
-
-    /**
-     * 检查文件是否具有指定的扩展名
-     * @param urlOrPath URL字符串或文件路径
-     * @param expectedExtension 期望的扩展名(可以带点号也可以不带)
-     * @return 是否匹配
-     */
-    public static boolean hasExtension(String urlOrPath, String expectedExtension) {
-        if (expectedExtension == null) {
-            return false;
-        }
-
-        String actualExtension = getExtension(urlOrPath);
-        if (actualExtension == null) {
-            return false;
-        }
-
-        // 处理期望扩展名可能带点号的情况
-        String cleanExpectedExtension = expectedExtension.startsWith(".") ?
-                expectedExtension.substring(1) : expectedExtension;
-
-        return actualExtension.equalsIgnoreCase(cleanExpectedExtension);
-    }
-
-    /**
-     * 检查文件是否是图片类型
-     * @param urlOrPath URL字符串或文件路径
-     * @return 是否是图片文件
-     */
-    public static boolean isImageFile(String urlOrPath) {
-        String extension = getExtension(urlOrPath);
-        if (extension == null) {
-            return false;
-        }
-
-        String[] imageExtensions = {"jpg", "jpeg", "png", "gif", "bmp", "webp", "svg", "ico"};
-        for (String imgExt : imageExtensions) {
-            if (extension.equalsIgnoreCase(imgExt)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * 检查文件是否是文档类型
-     * @param urlOrPath URL字符串或文件路径
-     * @return 是否是文档文件
-     */
-    public static boolean isDocumentFile(String urlOrPath) {
-        String extension = getExtension(urlOrPath);
-        if (extension == null) {
-            return false;
-        }
-
-        String[] docExtensions = {"pdf", "doc", "docx", "xls", "xlsx", "ppt", "pptx", "txt", "rtf"};
-        for (String docExt : docExtensions) {
-            if (extension.equalsIgnoreCase(docExt)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * 从URL或路径中提取文件名的辅助方法
-     */
-    private static String getFileNameFromUrlOrPath(String urlOrPath) {
-        try {
-            java.net.URL url = new java.net.URL(urlOrPath);
-            String path = url.getPath();
-
-            // 处理查询参数,移除?后面的内容
-            int queryIndex = path.indexOf('?');
-            if (queryIndex > 0) {
-                path = path.substring(0, queryIndex);
-            }
-
-            if (path.endsWith("/")) {
-                path = path.substring(0, path.length() - 1);
-            }
-
-            int lastSlashIndex = path.lastIndexOf('/');
-            return lastSlashIndex >= 0 ? path.substring(lastSlashIndex + 1) : path;
-
-        } catch (java.net.MalformedURLException e) {
-            // 作为普通路径处理
-            String path = urlOrPath.trim();
-
-            // 处理查询参数
-            int queryIndex = path.indexOf('?');
-            if (queryIndex > 0) {
-                path = path.substring(0, queryIndex);
-            }
-
-            if (path.endsWith("/") || path.endsWith("\\")) {
-                path = path.substring(0, path.length() - 1);
-            }
-
-            int lastSlashIndex = Math.max(path.lastIndexOf('/'), path.lastIndexOf('\\'));
-            return lastSlashIndex >= 0 ? path.substring(lastSlashIndex + 1) : path;
-        }
-    }
-}

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

@@ -206,7 +206,7 @@ public class FsUserCourseVideoController extends AppBaseController {
     @GetMapping("/todayCourseList")
     @GetMapping("/todayCourseList")
     @ApiOperation("今日课程")
     @ApiOperation("今日课程")
     public ResponseResult<PageInfo<FsUserCourseVideoPageListVO>> todayCourseList(@RequestParam(defaultValue = "1") Integer pageNum,
     public ResponseResult<PageInfo<FsUserCourseVideoPageListVO>> todayCourseList(@RequestParam(defaultValue = "1") Integer pageNum,
-                                                                                 @RequestParam(defaultValue = "10") Integer pageSize) {
+                                                                                 @RequestParam(defaultValue = "10") Integer pageSize, String keyword) {
         Long companyId = getCompanyId();
         Long companyId = getCompanyId();
         if (Objects.isNull(companyId)) {
         if (Objects.isNull(companyId)) {
             ResponseResult.fail(400, "未获取到公司ID,请重新登录后再试");
             ResponseResult.fail(400, "未获取到公司ID,请重新登录后再试");
@@ -216,6 +216,7 @@ public class FsUserCourseVideoController extends AppBaseController {
         params.put("companyId", companyId);
         params.put("companyId", companyId);
 //        params.put("dayDate", LocalDate.now());
 //        params.put("dayDate", LocalDate.now());
         params.put("companyUserId", Long.parseLong(getUserId()));
         params.put("companyUserId", Long.parseLong(getUserId()));
+        params.put("keyword", keyword);
 
 
         PageHelper.startPage(pageNum, pageSize);
         PageHelper.startPage(pageNum, pageSize);
         List<FsUserCourseVideoPageListVO> list = fsUserCourseVideoService.selectCourseVideoListByMap(params);
         List<FsUserCourseVideoPageListVO> list = fsUserCourseVideoService.selectCourseVideoListByMap(params);

+ 0 - 155
fs-company-app/src/main/java/com/fs/app/controller/FsUserHealthDataController.java

@@ -1,155 +0,0 @@
-package com.fs.app.controller;
-
-import com.alibaba.fastjson.JSON;
-import com.fs.app.annotation.Login;
-import com.fs.common.core.domain.R;
-import com.fs.common.utils.DateUtils;
-import com.fs.common.utils.StringUtils;
-import com.fs.his.config.HealthIndicatorConfig;
-import com.fs.his.domain.FsUserHealthData;
-import com.fs.his.service.IFsUserHealthDataService;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 用户身体检测数据Controller
- *
- * @author fs
- * @date 2025-08-27
- */
-@RestController
-@RequestMapping("/app/fs/health/data")
-@Api(tags = "用户身体检测数据血糖,尿酸,血压等")
-public class FsUserHealthDataController extends AppBaseController {
-    @Autowired
-    private IFsUserHealthDataService fsUserHealthDataService;
-
-
-    /**
-     * 查询用户身体检测数据列表
-     */
-    @Login
-    @GetMapping("/list")
-    @ApiOperation("获取用户列表信息")
-    public R list(FsUserHealthData fsUserHealthData,
-                  @RequestParam(required = false, defaultValue = "1") Integer pageNum,
-                  @RequestParam(required = false, defaultValue = "1000") Integer pageSize
-    ) {
-        return R.ok(fsUserHealthDataService.selectFsUserHealthDataListInfo(fsUserHealthData, pageNum, pageSize));
-    }
-
-
-    /**
-     * 查询用户身体检测数据列表 最新数据  如果查询时间为周或者月的话 每天只返回最新的数据
-     */
-    @Login
-    @GetMapping("/latest/list")
-    @ApiOperation("获取用户列表信息")
-    public R listByLatest(FsUserHealthData fsUserHealthData,
-                  @RequestParam(required = false, defaultValue = "1") Integer pageNum,
-                  @RequestParam(required = false, defaultValue = "1000") Integer pageSize
-    ) {
-        return R.ok(fsUserHealthDataService.selectFsUserHealthDataListInfoLatest(fsUserHealthData, pageNum, pageSize));
-    }
-
-    /**
-     * 根据检测类型获取 检测指标
-     */
-    @Login
-    @GetMapping("/flag")
-    @ApiOperation(" 根据检测类型获取 检测指标")
-    public R getInfo(@RequestParam("measurementType") Integer measurementType) {
-        // 获取检测指标 (0-腰围,1-臀围,2-血糖,3-血压,4-尿酸 5-BMI)
-        Map<String, Object> data = new HashMap<>();
-        // 血糖 尿酸 需要
-        HealthIndicatorConfig healthIndicatorConfig = fsUserHealthDataService.parseHealthIndicator();
-        if (measurementType == 2) { // 血糖
-            if (healthIndicatorConfig != null) {
-                String[] key = {"fasting", "post1Hour", "post2Hour"}; // 正常 餐后1小时 餐后2小时
-                for (int i = 0; i < key.length; i++) {
-                    String value = fsUserHealthDataService.getHealthIndicatorValue(healthIndicatorConfig, "bloodGlucose", key[i], "normal");
-                    // value json串转Map对象
-                    data.put(key[i], value);
-                }
-            }
-        } else if (measurementType == 4) {
-            String[] key = new String[]{"male", "female"};
-            for (int i = 0; i < key.length; i++) {
-                String value = fsUserHealthDataService.getHealthIndicatorValue(healthIndicatorConfig, "uricAcid", key[i], "normal");
-                data.put(key[i], value);
-            }
-        }
-        return R.ok().put("data", data);
-    }
-
-
-    /**
-     * 根据用户ID 查询用户身体检测最新数据
-     */
-    @Login
-    @GetMapping("/latest/info")
-    @ApiOperation("根据用户ID 获取用户身体检测最新数据")
-    public R getInfo(@RequestParam("userId") Long userId, @RequestParam("measurementType") Integer measurementType) {
-        FsUserHealthData fsUserHealthData = new FsUserHealthData();
-        fsUserHealthData.setUserId(userId);
-        fsUserHealthData.setMeasurementType(measurementType);
-        fsUserHealthData = fsUserHealthDataService.selectFsUserHealthDataByUserId(fsUserHealthData);
-        return R.ok().put("data", fsUserHealthData);
-    }
-
-    /**
-     * 根据ID 查询用户身体检测最新数据
-     */
-    @Login
-    @GetMapping("/info")
-    @ApiOperation("根据ID 获取用户身体检测最新数据")
-    public R getInfoById(@RequestParam("id") Long id) {
-        FsUserHealthData fsUserHealthData = fsUserHealthDataService.selectFsUserHealthDataById(id);
-        return R.ok().put("data", fsUserHealthData);
-    }
-
-    /**
-     * 新增用户身体检测数据
-     */
-    @Login
-    @PostMapping("/add")
-    @ApiOperation("新增用户身体检测数据")
-    public R add(@RequestBody FsUserHealthData fsUserHealthData) {
-        // 登记检测数据信息
-        fsUserHealthDataService.addHealthData(fsUserHealthData);
-        return R.ok();
-    }
-
-    /**
-     * 修改用户身体检测数据
-     */
-    @Login
-    @PostMapping("/update")
-    @ApiOperation("修改用户身体检测数据")
-    public R edit(@RequestBody FsUserHealthData fsUserHealthData) {
-        // 修改检测数据信息
-        fsUserHealthDataService.updateFsUserHealthDataAndLevel(fsUserHealthData);
-        return R.ok();
-    }
-
-    /**
-     * 删除用户身体检测数据
-     */
-    @Login
-    @GetMapping("/delete")
-    @ApiOperation("删除用户身体检测数据")
-    public R remove(@RequestParam Long id) {
-        if (fsUserHealthDataService.deleteFsUserHealthDataById(id) <= 0) {
-            return R.error("用户身体检测数据删除失败");
-        }
-        return R.ok();
-    }
-}

+ 0 - 139
fs-company-app/src/main/java/com/fs/app/controller/FsUserHealthProfileController.java

@@ -1,139 +0,0 @@
-package com.fs.app.controller;
-
-import com.fs.app.annotation.Login;
-import com.fs.common.core.domain.R;
-import com.fs.common.utils.DateUtils;
-import com.fs.his.domain.FsUserHealthData;
-import com.fs.his.domain.FsUserHealthProfile;
-import com.fs.his.domain.FsUserInfo;
-import com.fs.his.dto.FsUserHealthInfoDTO;
-import com.fs.his.service.IFsUserHealthDataService;
-import com.fs.his.service.IFsUserHealthProfileService;
-import com.fs.his.service.IFsUserInfoService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 用户健康档案Controller
- *
- * @author fs
- * @date 2025-08-27
- */
-@RestController
-@RequestMapping("/app/fs/health/profile")
-@Api(tags = "用户健康档案")
-public class FsUserHealthProfileController extends AppBaseController {
-    @Autowired
-    private IFsUserHealthProfileService fsUserHealthProfileService;
-    @Autowired
-    private IFsUserHealthDataService fsUserHealthDataService;
-    @Autowired
-    private IFsUserInfoService fsUserInfoService;
-
-
-    /**
-     * 获取用户健康档案详细信息
-     */
-    @Login
-    @GetMapping(value = "/info")
-    @ApiOperation("获取用户健康档案详细信息")
-    public R getInfo(@RequestParam("userId") Long userId) {
-        FsUserHealthProfile profile = fsUserHealthProfileService.selectFsUserHealthProfileByUserId(userId);
-        return R.ok().put("data", profile);
-    }
-
-
-    /**
-     * 获取用户健康档案主页信息
-     */
-    @Login
-    @GetMapping(value = "/home/info")
-    @ApiOperation("获取用户健康档案主页信息")
-    public R getHomeInfo(@RequestParam("userId") Long userId) {
-        FsUserHealthInfoDTO infoDTO = new FsUserHealthInfoDTO();
-        // 查询用户信息
-        FsUserInfo userInfo = fsUserInfoService.selectFsUserInfoById(userId);
-        if (userInfo == null) {
-            return R.error("用户不存在");
-        }
-        infoDTO.setUserId(userId);
-        infoDTO.setUsername(userInfo.getUsername());
-        infoDTO.setAvatar(userInfo.getAvatar());
-        infoDTO.setSex(userInfo.getSex());
-        // 根据生日获取年龄
-        if(userInfo.getBirthdate()!=null){
-            infoDTO.setAge(DateUtils.getAge(userInfo.getBirthdate()));
-        }
-
-        // 查询各指标 数据 测量类型(0-腰围,1-臀围,2-血糖,3-血压,4-尿酸 5-BMI)
-        FsUserHealthData query = new FsUserHealthData();
-        query.setUserId(userId);
-        Map<String, Object> dataMap = new HashMap<>();
-        for (int i = 0; i < 6; i++) {
-            query.setMeasurementType(i);
-            FsUserHealthData healthData = fsUserHealthDataService.selectFsUserHealthDataByUserId(query);
-            dataMap.put(String.valueOf(i), healthData);
-        }
-        infoDTO.setDataMap(dataMap);
-
-        // 查询健康档案
-        FsUserHealthProfile profile = fsUserHealthProfileService.selectFsUserHealthProfileByUserId(userId);
-        if (profile != null) {
-            infoDTO.setSymptomHistory(profile.getSymptomHistory());
-            infoDTO.setOtherMedicalHistory(profile.getOtherMedicalHistory());
-        }
-
-        return R.ok().put("data", infoDTO);
-    }
-
-
-    /**
-     * 新增用户健康档案
-     */
-    @Login
-    @PostMapping("/add")
-    @ApiOperation("新增用户健康档案")
-    @Transactional
-    public R add(@RequestBody FsUserHealthProfile fsUserHealthProfile) {
-
-        if (fsUserHealthProfileService.insertFsUserHealthProfile(fsUserHealthProfile) <= 0) {
-            return R.error("新增用户健康档案失败");
-        }
-
-        // 登记身体检测数据 FsUserHealthData
-        fsUserHealthDataService.initHealthData(fsUserHealthProfile);
-
-        return R.ok();
-    }
-
-    /**
-     * 修改用户健康档案
-     */
-    @Login
-    @PostMapping("/update")
-    @ApiOperation("修改用户健康档案")
-    public R edit(@RequestBody FsUserHealthProfile fsUserHealthProfile) {
-        if (fsUserHealthProfileService.updateFsUserHealthProfile(fsUserHealthProfile) <= 0) {
-            return R.error("用户健康档案修改失败");
-        }
-        return R.ok();
-    }
-
-    /**
-     * 删除用户健康档案
-     */
-    @Login
-    @GetMapping("/delete")
-    public R remove(@RequestParam Long userId) {
-        if (fsUserHealthProfileService.deleteFsUserHealthProfileByUserId(userId) <= 0) {
-            return R.error("用户健康档案删除失败");
-        }
-        return R.ok();
-    }
-}

+ 0 - 111
fs-company-app/src/main/java/com/fs/app/controller/FsUserInfoController.java

@@ -1,111 +0,0 @@
-package com.fs.app.controller;
-
-import com.fs.app.annotation.Login;
-import com.fs.common.core.domain.R;
-import com.fs.common.utils.DateUtils;
-import com.fs.common.utils.StringUtils;
-import com.fs.his.domain.FsUser;
-import com.fs.his.domain.FsUserInfo;
-import com.fs.his.service.IFsUserInfoService;
-import com.fs.his.service.IFsUserService;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 用户信息Controller
- *
- * @author fs
- * @date 2025-08-25
- */
-@RestController
-@RequestMapping("/app/fs/userinfo")
-@Api(tags = "用户信息")
-public class FsUserInfoController extends AppBaseController {
-    @Autowired
-    private IFsUserInfoService fsUserInfoService;
-
-    @Autowired
-    private IFsUserService fsUserService;
-
-    /**
-     * 查询用户信息列表
-     */
-    @Login
-    @GetMapping("/list")
-    @ApiOperation("获取用户列表信息")
-    public R list(FsUserInfo fsUserInfo,
-                  @RequestParam(required = false, defaultValue = "1") Integer pageNum,
-                  @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
-
-        // companyUserId 传空的查询所有
-        PageHelper.startPage(pageNum, pageSize);
-        List<FsUserInfo> list = fsUserInfoService.selectFsUserInfoList(fsUserInfo.getCompanyUserId());
-        return R.ok().put("data", new PageInfo<>(list));
-    }
-
-
-    /**
-     * 获取用户信息详细信息
-     */
-    @Login
-    @GetMapping(value = "/info")
-    @ApiOperation("获取用户详情信息")
-    public R getInfo(@RequestParam("userId") Long userId) {
-        FsUserInfo fsUserInfo = fsUserInfoService.selectFsUserInfoById(userId);
-        if (fsUserInfo == null) {
-            return R.error("用户不存在");
-        } else if(fsUserInfo.getIsDel()!=0){
-            return R.error("用户信息已删除");
-        }else{
-            if(fsUserInfo.getBirthdate()!=null){
-                fsUserInfo.setAge(DateUtils.getAge(fsUserInfo.getBirthdate()));
-            }
-        }
-        return R.ok().put("data", fsUserInfo);
-    }
-
-
-    /**
-     * 新增用户信息
-     */
-    @Login
-    @PostMapping("/add")
-    @ApiOperation("新增用户信息")
-    public R add(@RequestBody FsUserInfo fsUserInfo) {
-        fsUserInfoService.add(fsUserInfo);
-        return R.ok();
-    }
-
-    /**
-     * 修改用户信息
-     */
-    @Login
-    @PostMapping("/update")
-    @ApiOperation("修改用户信息")
-    public R edit(@RequestBody FsUserInfo fsUserInfo) {
-        fsUserInfoService.updateFsUserInfo(fsUserInfo);
-        return R.ok();
-    }
-
-    /**
-     * 删除用户信息
-     */
-    @Login
-    @GetMapping("/delete")
-    @ApiOperation("删除用户信息")
-    @Transactional
-    public R remove(@RequestParam("userId") Long userId) {
-        // 更新fsUser表状态
-        if (fsUserInfoService.deleteFsUserInfoByUserId(userId) <= 0) {
-            return R.error("用户信息删除原表失败");
-        }
-        return R.ok();
-    }
-}

+ 0 - 96
fs-company-app/src/main/java/com/fs/app/controller/FsUserPayCompetitorsRecordController.java

@@ -1,96 +0,0 @@
-package com.fs.app.controller;
-
-import com.fs.app.annotation.Login;
-import com.fs.common.core.domain.R;
-import com.fs.his.domain.FsUserPayCompetitorsRecord;
-import com.fs.his.service.IFsUserPayCompetitorsRecordService;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 用户购买竞品信息记录Controller
- *
- * @author fs
- * @date 2025-08-26
- */
-@RestController
-@RequestMapping("/app/fs/rival/products")
-public class FsUserPayCompetitorsRecordController extends AppBaseController {
-    @Autowired
-    private IFsUserPayCompetitorsRecordService fsUserPayCompetitorsRecordService;
-
-    /**
-     * 查询用户购买竞品信息记录列表
-     */
-    @Login
-    @GetMapping("/list")
-    @ApiOperation("获取用户购买竞品信息记录列表")
-    public R list(FsUserPayCompetitorsRecord fsUserPayCompetitorsRecord,
-                  @RequestParam(required = false, defaultValue = "1") Integer pageNum,
-                  @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
-        // 校验userId不能为空
-        if (fsUserPayCompetitorsRecord.getUserId() == null) {
-            return R.error("用户ID不能为空");
-        }
-
-        PageHelper.startPage(pageNum, pageSize);
-        List<FsUserPayCompetitorsRecord> list = fsUserPayCompetitorsRecordService.selectFsUserPayCompetitorsRecordList(fsUserPayCompetitorsRecord);
-        return R.ok().put("data", new PageInfo<>(list));
-    }
-
-
-    /**
-     * 获取用户购买竞品信息记录详细信息
-     */
-    @Login
-    @GetMapping(value = "/info")
-    @ApiOperation("获取用户购买竞品信息记录详细信息")
-    public R getInfo(@RequestParam("id") Long id) {
-        FsUserPayCompetitorsRecord record = fsUserPayCompetitorsRecordService.selectFsUserPayCompetitorsRecordById(id);
-        return R.ok().put("data", record);
-    }
-
-    /**
-     * 新增用户购买竞品信息记录
-     */
-    @Login
-    @PostMapping("/add")
-    @ApiOperation("新增用户购买竞品信息记录")
-    public R add(@RequestBody FsUserPayCompetitorsRecord fsUserPayCompetitorsRecord) {
-        if (fsUserPayCompetitorsRecordService.insertFsUserPayCompetitorsRecord(fsUserPayCompetitorsRecord) <= 0) {
-            return R.error("用户购买竞品信息记录登记失败");
-        }
-        return R.ok();
-    }
-
-    /**
-     * 修改用户购买竞品信息记录
-     */
-    @Login
-    @PostMapping("/update")
-    @ApiOperation("修改用户购买竞品信息记录")
-    public R edit(@RequestBody FsUserPayCompetitorsRecord fsUserPayCompetitorsRecord) {
-        if (fsUserPayCompetitorsRecordService.updateFsUserPayCompetitorsRecord(fsUserPayCompetitorsRecord) <= 0) {
-            return R.error("用户购买竞品信息记录修改失败");
-        }
-        return R.ok();
-    }
-
-    /**
-     * 删除用户购买竞品信息记录
-     */
-    @Login
-    @GetMapping("/delete")
-    @ApiOperation("删除用户购买竞品信息记录")
-    public R remove(@RequestParam("id") Long id) {
-        if (fsUserPayCompetitorsRecordService.deleteFsUserPayCompetitorsRecordById(id) <= 0) {
-            return R.error("用户购买竞品信息记录删除失败");
-        }
-        return R.ok();
-    }
-}

+ 0 - 96
fs-company-app/src/main/java/com/fs/app/controller/FsUserPayRecordController.java

@@ -1,96 +0,0 @@
-package com.fs.app.controller;
-
-import com.fs.app.annotation.Login;
-import com.fs.common.core.domain.R;
-import com.fs.his.domain.FsUserPayRecord;
-import com.fs.his.service.IFsUserPayRecordService;
-import com.github.pagehelper.PageHelper;
-import com.github.pagehelper.PageInfo;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 用户购买服务信息记录Controller
- *
- * @author fs
- * @date 2025-08-26
- */
-@RestController
-@RequestMapping("/app/fs/pay/products")
-public class FsUserPayRecordController extends AppBaseController {
-    @Autowired
-    private IFsUserPayRecordService fsUserPayRecordService;
-
-    /**
-     * 查询用户购买服务信息记录列表
-     */
-    @Login
-    @GetMapping("/list")
-    @ApiOperation("获取用户购买服务信息记录列表")
-    public R list(FsUserPayRecord fsUserPayRecord,
-                  @RequestParam(required = false, defaultValue = "1") Integer pageNum,
-                  @RequestParam(required = false, defaultValue = "10") Integer pageSize) {
-
-        if (fsUserPayRecord.getUserId() == null) {
-            return R.error("用户ID不能为空");
-        }
-
-        PageHelper.startPage(pageNum, pageSize);
-        List<FsUserPayRecord> list = fsUserPayRecordService.selectFsUserPayRecordList(fsUserPayRecord);
-        return R.ok().put("data", new PageInfo<>(list));
-    }
-
-
-    /**
-     * 获取用户购买服务信息记录详细信息
-     */
-    @Login
-    @GetMapping(value = "/info")
-    @ApiOperation("获取用户购买服务信息记录详细信息")
-    public R getInfo(@RequestParam("id") Long id) {
-        FsUserPayRecord fsUserPayRecord = fsUserPayRecordService.selectFsUserPayRecordById(id);
-        return R.ok().put("data", fsUserPayRecord);
-    }
-
-    /**
-     * 新增用户购买服务信息记录
-     */
-    @Login
-    @PostMapping("/add")
-    @ApiOperation("新增用户购买服务信息记录")
-    public R add(@RequestBody FsUserPayRecord fsUserPayRecord) {
-        if (fsUserPayRecordService.insertFsUserPayRecord(fsUserPayRecord) <= 0) {
-            return R.error("用户购买服务信息记录登记失败");
-        }
-        return R.ok();
-    }
-
-    /**
-     * 修改用户购买服务信息记录
-     */
-    @Login
-    @PostMapping("/update")
-    @ApiOperation("修改用户购买服务信息记录")
-    public R edit(@RequestBody FsUserPayRecord fsUserPayRecord) {
-        if (fsUserPayRecordService.updateFsUserPayRecord(fsUserPayRecord) <= 0) {
-            return R.error("用户购买服务信息记录修改失败");
-        }
-        return R.ok();
-    }
-
-    /**
-     * 删除用户购买服务信息记录
-     */
-    @Login
-    @GetMapping("/delete")
-    @ApiOperation("删除用户购买服务信息记录")
-    public R remove(@RequestParam("id") Long id) {
-        if (fsUserPayRecordService.deleteFsUserPayRecordById(id) <= 0) {
-            return R.error("用户购买服务信息记录删除失败");
-        }
-        return R.ok();
-    }
-}

+ 0 - 13
fs-company-app/src/main/java/com/fs/app/exception/FSExceptionHandler.java

@@ -5,7 +5,6 @@ package com.fs.app.exception;
 
 
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.R;
 import com.fs.common.exception.CustomException;
 import com.fs.common.exception.CustomException;
-import com.fs.common.exception.ServiceException;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.dao.DuplicateKeyException;
 import org.springframework.dao.DuplicateKeyException;
@@ -37,18 +36,6 @@ public class FSExceptionHandler {
 		return r;
 		return r;
 	}
 	}
 
 
-	/**
-	 * 处理自定义异常
-	 */
-	@ExceptionHandler(ServiceException.class)
-	public R handleRRException(ServiceException e){
-		R r = new R();
-		r.put("code", e.getCode());
-		r.put("msg", e.getMessage());
-
-		return r;
-	}
-
 	@ExceptionHandler(NoHandlerFoundException.class)
 	@ExceptionHandler(NoHandlerFoundException.class)
 	public R handlerNoFoundException(Exception e) {
 	public R handlerNoFoundException(Exception e) {
 		logger.error(e.getMessage(), e);
 		logger.error(e.getMessage(), e);

+ 25 - 0
fs-company/src/main/java/com/fs/company/controller/company/CompanyRechargeController.java

@@ -1,5 +1,6 @@
 package com.fs.company.controller.company;
 package com.fs.company.controller.company;
 
 
+import cn.hutool.core.util.IdUtil;
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.annotation.RepeatSubmit;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;
@@ -13,6 +14,7 @@ import com.fs.company.domain.Company;
 import com.fs.company.domain.CompanyRecharge;
 import com.fs.company.domain.CompanyRecharge;
 import com.fs.company.domain.CompanyRechargeOrder;
 import com.fs.company.domain.CompanyRechargeOrder;
 import com.fs.company.dto.RechargeDTO;
 import com.fs.company.dto.RechargeDTO;
+import com.fs.company.param.CompanyRechargeParam;
 import com.fs.company.service.ICompanyRechargeService;
 import com.fs.company.service.ICompanyRechargeService;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.util.OrderUtils;
 import com.fs.company.util.OrderUtils;
@@ -21,6 +23,7 @@ import com.fs.framework.security.LoginUser;
 import com.fs.framework.service.TokenService;
 import com.fs.framework.service.TokenService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
@@ -135,6 +138,28 @@ public class CompanyRechargeController extends BaseController
             }
             }
         }
         }
     }
     }
+    @PreAuthorize("@ss.hasPermi('company:companyRecharge:recharge')")
+    @Log(title = "添加充值记录", businessType = BusinessType.INSERT)
+    @PostMapping(value = "/recharge")
+    @Transactional
+    @RepeatSubmit
+    public R recharge(@RequestBody CompanyRechargeParam param)
+    {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        CompanyRecharge recharge=new CompanyRecharge();
+        String orderSn = IdUtil.getSnowflake(0, 0).nextIdStr();
+        recharge.setRechargeNo(orderSn);
+        recharge.setCompanyId(loginUser.getCompany().getCompanyId());
+        recharge.setMoney(param.getMoney());
+        recharge.setCreateUserId(loginUser.getUser().getUserId());
+        recharge.setIsAudit(0);
+        recharge.setStatus(1);
+        recharge.setRemark(param.getRemark());
+        recharge.setPayType(3);
+        recharge.setImgs(param.getImgs());
+        companyRechargeService.insertCompanyRecharge(recharge);
+        return R.ok("提交成功,等待审核");
 
 
+    }
 
 
 }
 }

+ 99 - 3
fs-company/src/main/java/com/fs/company/controller/company/CompanyUserController.java

@@ -1,6 +1,7 @@
 package com.fs.company.controller.company;
 package com.fs.company.controller.company;
 
 
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.http.HttpRequest;
 import cn.hutool.json.JSONUtil;
 import cn.hutool.json.JSONUtil;
 import com.baidu.dev2.thirdparty.jackson.databind.ObjectMapper;
 import com.baidu.dev2.thirdparty.jackson.databind.ObjectMapper;
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.Log;
@@ -21,6 +22,7 @@ import com.fs.company.param.CompanyUserCodeParam;
 import com.fs.company.param.CompanyUserQwParam;
 import com.fs.company.param.CompanyUserQwParam;
 import com.fs.company.service.*;
 import com.fs.company.service.*;
 import com.fs.company.utils.DomainUtil;
 import com.fs.company.utils.DomainUtil;
+import com.fs.company.vo.CompanyUserImportVO;
 import com.fs.company.vo.CompanyUserQwListVO;
 import com.fs.company.vo.CompanyUserQwListVO;
 import com.fs.company.vo.CompanyUserVO;
 import com.fs.company.vo.CompanyUserVO;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.config.CourseConfig;
@@ -29,6 +31,8 @@ import com.fs.framework.security.SecurityUtils;
 import com.fs.framework.service.TokenService;
 import com.fs.framework.service.TokenService;
 import com.fs.his.utils.qrcode.QRCodeUtils;
 import com.fs.his.utils.qrcode.QRCodeUtils;
 import com.fs.his.vo.OptionsVO;
 import com.fs.his.vo.OptionsVO;
+import com.fs.hisStore.vo.FsStoreProductExportVO;
+import com.fs.im.service.OpenIMService;
 import com.fs.qw.domain.QwCompany;
 import com.fs.qw.domain.QwCompany;
 import com.fs.qw.service.IQwCompanyService;
 import com.fs.qw.service.IQwCompanyService;
 import com.fs.qw.vo.CompanyUserQwVO;
 import com.fs.qw.vo.CompanyUserQwVO;
@@ -37,6 +41,9 @@ import com.fs.system.service.ISysConfigService;
 import com.fs.voice.utils.StringUtil;
 import com.fs.voice.utils.StringUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.PageInfo;
+import io.swagger.annotations.ApiOperation;
+import org.json.JSONArray;
+import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
@@ -78,7 +85,8 @@ public class CompanyUserController extends BaseController
     private ISysConfigService configService;
     private ISysConfigService configService;
     @Autowired
     @Autowired
     private RedisCache redisCache;
     private RedisCache redisCache;
-
+    @Autowired
+    private OpenIMService openIMService;
     @Autowired
     @Autowired
     IQwCompanyService iQwCompanyService;
     IQwCompanyService iQwCompanyService;
 
 
@@ -133,7 +141,7 @@ public class CompanyUserController extends BaseController
         }
         }
         return getDataTable(list);
         return getDataTable(list);
     }
     }
-    @Log(title = "用户管理", businessType = BusinessType.EXPORT)
+    @Log(title = "用户管理导出", businessType = BusinessType.EXPORT)
     @PreAuthorize("@ss.hasPermi('company:user:export')")
     @PreAuthorize("@ss.hasPermi('company:user:export')")
     @GetMapping("/export")
     @GetMapping("/export")
     public AjaxResult export(CompanyUser user)
     public AjaxResult export(CompanyUser user)
@@ -146,6 +154,26 @@ public class CompanyUserController extends BaseController
     }
     }
 
 
 
 
+    @Log(title = "销售信息导入", businessType = BusinessType.IMPORT,isStoreLog = true,logParam = {"销售","信息导入"})
+    @PreAuthorize("@ss.hasPermi('company:user:import')")
+    @PostMapping("/importCompanyUser")
+    public AjaxResult importData(@RequestParam("file") MultipartFile file, boolean updateSupport) throws Exception
+    {
+        ExcelUtil<CompanyUserImportVO> util = new ExcelUtil<>(CompanyUserImportVO.class);
+        List<CompanyUserImportVO> list = util.importExcel(file.getInputStream());
+        String message = companyUserService.importCompanyUser(list, updateSupport);
+        return AjaxResult.success(message);
+    }
+
+
+    @GetMapping("/importTemplate")
+    public AjaxResult importTemplate()
+    {
+        ExcelUtil<CompanyUserImportVO> util = new ExcelUtil<>(CompanyUserImportVO.class);
+        return util.importTemplateExcel("销售数据");
+    }
+
+
 
 
     /**
     /**
      * 根据用户编号获取详细信息
      * 根据用户编号获取详细信息
@@ -255,7 +283,7 @@ public class CompanyUserController extends BaseController
         String encodedStatus = URLEncoder.encode(status, StandardCharsets.UTF_8.toString());
         String encodedStatus = URLEncoder.encode(status, StandardCharsets.UTF_8.toString());
 
 
         String url="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+user.getCorpId()+"&redirect_uri=" +
         String url="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+user.getCorpId()+"&redirect_uri=" +
-                "http://"+qwCompany.getRealmNameUrl()+"/qwh5/pages/user/index?corpId="+user.getCorpId() +
+                "http://"+qwCompany.getRealmNameUrl()+"/loginqw/pages/companyLogin/index?corpId="+user.getCorpId() +
                 "&response_type=code&scope=snsapi_base&state="+encodedStatus+"&agentid="+qwCompany.getServerAgentId()+"#wechat_redirect";
                 "&response_type=code&scope=snsapi_base&state="+encodedStatus+"&agentid="+qwCompany.getServerAgentId()+"#wechat_redirect";
 
 
         R andUpload = QRCodeUtils.createAndUpload(url);
         R andUpload = QRCodeUtils.createAndUpload(url);
@@ -536,4 +564,72 @@ public class CompanyUserController extends BaseController
     public R unBindDoctorId(@RequestBody CompanyUser companyUser){
     public R unBindDoctorId(@RequestBody CompanyUser companyUser){
         return companyUserService.bindDoctor(companyUser);
         return companyUserService.bindDoctor(companyUser);
     }
     }
+
+    @ApiOperation("校验客服是否注册新的im")
+    @PostMapping("/accountCheck")
+    public R accountCheck(@RequestBody Map<String, String> userIdMap){
+        //获取管理员token
+        String userId = userIdMap.get("userId");
+        String adminToken = openIMService.getAdminToken();
+        JSONObject requestBody = new JSONObject();
+        // 解析响应
+        if (StringUtils.isNotEmpty(adminToken)) {
+            //查询用户是否注册
+            ArrayList<String> userIds = new ArrayList<>();
+            requestBody = new JSONObject();
+            userIds.add(userId);
+            requestBody.put("checkUserIDs", userIds);
+            String body = HttpRequest.post("https://web.im.cdwjyyh.com/api/user/account_check")
+                    .header("operationID", String.valueOf(System.currentTimeMillis()))
+                    .header("token", adminToken)
+                    .body(requestBody.toString())
+                    .execute()
+                    .body();
+            JSONObject jsonObject = new JSONObject(body);
+            JSONArray results = jsonObject.getJSONObject("data").getJSONArray("results");
+            if (results != null && results.length() > 0) {
+                JSONObject resultObj = results.getJSONObject(0);
+                int accountStatus = resultObj.getInt("accountStatus");
+                //未注册自动注册
+                if (accountStatus==0){
+                    String s = userId.replaceFirst("^C", "");
+                    CompanyUser companyUser = companyUserService.selectCompanyUserById(Long.parseLong(s));
+                    if (null==companyUser){
+                        return R.error("用户不存在");
+                    }
+                    ArrayList<Object> users = new ArrayList<>();
+                    HashMap<String, String> map = new HashMap<>();
+                    map.put("userID",userId);
+                    map.put("nickname",companyUser.getImNickName());
+                    map.put("faceURL",companyUser.getAvatar());
+                    users.add(map);
+                    requestBody = new JSONObject();
+                    userIds.add(userId);
+                    requestBody.put("users", users);
+                    HttpRequest.post("https://web.im.cdwjyyh.com/api/user/user_register")
+                            .header("operationID", String.valueOf(System.currentTimeMillis()))
+                            .header("token", adminToken).body(requestBody.toString()).execute().body();
+                }
+            } else {
+                return R.error("返回结果为空");
+            }
+           /* HashMap<String, String> tokenMap = new HashMap<>();
+            tokenMap.put("platformID","1");
+            tokenMap.put("userID",userId);*/
+            requestBody = new JSONObject();
+            requestBody.put("platformID",5);
+            requestBody.put("userID",userId);
+            String body1 = HttpRequest.post("https://web.im.cdwjyyh.com/api/auth/get_user_token")
+                    .header("operationID", String.valueOf(System.currentTimeMillis()))
+                    .header("token", adminToken)
+                    .body(requestBody.toString()).execute().body();
+            JSONObject userJson = new JSONObject(body1);
+            JSONObject userData = userJson.getJSONObject("data");
+            String userToken = userData.getString("token");
+            return R.ok().put("token", userToken);
+        } else {
+            return R.error("获取管理员token失败");
+        }
+    }
+
 }
 }

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

@@ -149,7 +149,9 @@ public class QwSopLogsController extends BaseController
      * 我的自动化任务 和部门自动化任务 就只显示自己的或者部门的
      * 我的自动化任务 和部门自动化任务 就只显示自己的或者部门的
      */
      */
     private List<Long> getQwUserKeyList(QwSopLogsParam param, LoginUser loginUser) {
     private List<Long> getQwUserKeyList(QwSopLogsParam param, LoginUser loginUser) {
-
+        if(param.getFilterSopType() == null){
+            return new ArrayList<>(); // 返回空列表而不是null
+        }
         switch (param.getFilterSopType()) {
         switch (param.getFilterSopType()) {
             case 2:
             case 2:
                 CompanyUser companyUser = iCompanyUserService.selectCompanyUserById(loginUser.getUser().getUserId());
                 CompanyUser companyUser = iCompanyUserService.selectCompanyUserById(loginUser.getUser().getUserId());

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

@@ -83,10 +83,10 @@ public class SopUserLogsController extends BaseController
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
         LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
 
 
         List<String> qwUserIdList=null;
         List<String> qwUserIdList=null;
-        if (sopUserLogs.getType()==2){
+        if (sopUserLogs.getType() != null && sopUserLogs.getType()==2){
             qwUserIdList = iQwUserService.selectQwUserListByCompanyUserId(loginUser.getUser().getUserId(), sopUserLogs.getCorpId());
             qwUserIdList = iQwUserService.selectQwUserListByCompanyUserId(loginUser.getUser().getUserId(), sopUserLogs.getCorpId());
         }
         }
-        if (qwUserIdList!=null&& !qwUserIdList.isEmpty() && sopUserLogs.getType()==2 ){
+        if (qwUserIdList!=null&& !qwUserIdList.isEmpty() && sopUserLogs.getType() != null &&  sopUserLogs.getType()==2 ){
             sopUserLogs.setQwIdsList(qwUserIdList);
             sopUserLogs.setQwIdsList(qwUserIdList);
         }
         }
 
 

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

@@ -71,7 +71,6 @@ public class SopUserLogsInfoController extends BaseController
     public TableDataInfo list(SopUserLogsInfo sopUserLogsInfo) {
     public TableDataInfo list(SopUserLogsInfo sopUserLogsInfo) {
         startPage();
         startPage();
         if (sopUserLogsInfo.getFilterMode() == 1) {
         if (sopUserLogsInfo.getFilterMode() == 1) {
-            startPage();
             List<SopUserLogsInfo> list = sopUserLogsInfoService.selectSopUserLogsInfoList(sopUserLogsInfo);
             List<SopUserLogsInfo> list = sopUserLogsInfoService.selectSopUserLogsInfoList(sopUserLogsInfo);
 
 
             if (!list.isEmpty()) {
             if (!list.isEmpty()) {

+ 1 - 1
fs-company/src/main/java/com/fs/hisStore/controller/FsStoreProductScrmController.java

@@ -37,7 +37,7 @@ public class FsStoreProductScrmController extends BaseController
     /**
     /**
      * 查询商品列表
      * 查询商品列表
      */
      */
-//    @PreAuthorize("@ss.hasPermi('store:storeProduct:list')")
+    @PreAuthorize("@ss.hasPermi('store:storeProduct:list')")
     @GetMapping("/list")
     @GetMapping("/list")
     public TableDataInfo list(FsStoreProductScrm fsStoreProduct)
     public TableDataInfo list(FsStoreProductScrm fsStoreProduct)
     {
     {

+ 74 - 6
fs-doctor-app/src/main/java/com/fs/app/controller/DoctorController.java

@@ -1,6 +1,7 @@
 package com.fs.app.controller;
 package com.fs.app.controller;
 
 
 
 
+import cn.hutool.http.HttpRequest;
 import cn.hutool.json.JSONUtil;
 import cn.hutool.json.JSONUtil;
 import com.fs.app.annotation.Login;
 import com.fs.app.annotation.Login;
 import com.fs.app.param.DoctorEditParam;
 import com.fs.app.param.DoctorEditParam;
@@ -20,13 +21,17 @@ import com.fs.his.param.FsDoctorExtractListSParam;
 import com.fs.his.service.*;
 import com.fs.his.service.*;
 import com.fs.his.vo.FsDoctorBillListSVO;
 import com.fs.his.vo.FsDoctorBillListSVO;
 import com.fs.his.vo.FsDoctorExtractListSVO;
 import com.fs.his.vo.FsDoctorExtractListSVO;
+import com.fs.im.service.OpenIMService;
 import com.fs.sms.service.SmsService;
 import com.fs.sms.service.SmsService;
 import com.fs.system.service.ISysConfigService;
 import com.fs.system.service.ISysConfigService;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.PageInfo;
+import com.github.pagehelper.util.StringUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.json.JSONArray;
+import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
@@ -34,10 +39,7 @@ import org.springframework.web.bind.annotation.*;
 
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
 import java.math.BigDecimal;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
 
 
 
 
@@ -59,7 +61,8 @@ public class DoctorController extends  AppBaseController {
     private IFsDoctorExtractService doctorExtractService;
     private IFsDoctorExtractService doctorExtractService;
     @Autowired
     @Autowired
     private ISysConfigService configService;
     private ISysConfigService configService;
-
+    @Autowired
+    private OpenIMService openIMService;
     @Autowired
     @Autowired
     private SmsService smsService;
     private SmsService smsService;
     @ApiOperation("登录")
     @ApiOperation("登录")
@@ -100,7 +103,72 @@ public class DoctorController extends  AppBaseController {
             return R.ok(map);
             return R.ok(map);
         }
         }
     }
     }
-
+    @ApiOperation("校验医生是否注册新的im")
+    @PostMapping("/accountCheck")
+    public R accountCheck(@RequestBody Map<String, String> userIdMap){
+        //获取管理员token
+        String userId = userIdMap.get("userId");
+        String adminToken = openIMService.getAdminToken();
+        JSONObject requestBody = new JSONObject();
+        // 解析响应
+        if (StringUtil.isNotEmpty(adminToken)) {
+            //查询用户是否注册
+            ArrayList<String> userIds = new ArrayList<>();
+            requestBody = new JSONObject();
+            userIds.add(userId);
+            requestBody.put("checkUserIDs", userIds);
+            String body = HttpRequest.post("https://web.im.cdwjyyh.com/api/user/account_check")
+                    .header("operationID", String.valueOf(System.currentTimeMillis()))
+                    .header("token", adminToken)
+                    .body(requestBody.toString())
+                    .execute()
+                    .body();
+            JSONObject jsonObject = new JSONObject(body);
+            JSONArray results = jsonObject.getJSONObject("data").getJSONArray("results");
+            if (results != null && results.length() > 0) {
+                JSONObject resultObj = results.getJSONObject(0);
+                int accountStatus = resultObj.getInt("accountStatus");
+                //未注册自动注册
+                if (accountStatus==0){
+                    String s = userId.replaceFirst("^D", "");
+                    FsDoctor fsDoctor = doctorService.selectFsDoctorByDoctorId(Long.parseLong(s));
+                    if (null==fsDoctor){
+                        return R.error("用户不存在");
+                    }
+                    ArrayList<Object> users = new ArrayList<>();
+                    HashMap<String, String> map = new HashMap<>();
+                    map.put("userID",userId);
+                    map.put("nickname",fsDoctor.getDoctorName());
+                    map.put("faceURL",fsDoctor.getAvatar());
+                    users.add(map);
+                    requestBody = new JSONObject();
+                    userIds.add(userId);
+                    requestBody.put("users", users);
+                    HttpRequest.post("https://web.im.cdwjyyh.com/api/user/user_register")
+                            .header("operationID", String.valueOf(System.currentTimeMillis()))
+                            .header("token", adminToken).body(requestBody.toString()).execute().body();
+                }
+            } else {
+                return R.error("返回结果为空");
+            }
+           /* HashMap<String, String> tokenMap = new HashMap<>();
+            tokenMap.put("platformID","1");
+            tokenMap.put("userID",userId);*/
+            requestBody = new JSONObject();
+            requestBody.put("platformID",5);
+            requestBody.put("userID",userId);
+            String body1 = HttpRequest.post("https://web.im.cdwjyyh.com/api/auth/get_user_token")
+                    .header("operationID", String.valueOf(System.currentTimeMillis()))
+                    .header("token", adminToken)
+                    .body(requestBody.toString()).execute().body();
+            JSONObject userJson = new JSONObject(body1);
+            JSONObject userData = userJson.getJSONObject("data");
+            String userToken = userData.getString("token");
+            return R.ok().put("token", userToken);
+        } else {
+            return R.error("获取管理员token失败");
+        }
+    }
     @ApiOperation("登录")
     @ApiOperation("登录")
     @PostMapping("/loginByWeb")
     @PostMapping("/loginByWeb")
     public R loginByWeb(@Validated @RequestBody DoctorLoginParam param) {
     public R loginByWeb(@Validated @RequestBody DoctorLoginParam param) {

+ 3 - 0
fs-framework/src/main/java/com/fs/framework/config/LogInterceptor.java

@@ -1,5 +1,7 @@
 package com.fs.framework.config;
 package com.fs.framework.config;
 
 
+
+
 import org.slf4j.MDC;
 import org.slf4j.MDC;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
 import org.springframework.util.StringUtils;
@@ -9,6 +11,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.util.UUID;
 import java.util.UUID;
 
 
+
 /**
 /**
  * @description: 日志拦截器
  * @description: 日志拦截器
  * @author: xdd
  * @author: xdd

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

@@ -1,9 +1,12 @@
 package com.fs.app.service;
 package com.fs.app.service;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.core.redis.RedisCache;
+import com.fs.common.exception.base.BaseException;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.date.DateUtil;
 import com.fs.common.utils.date.DateUtil;
-import com.fs.course.config.CourseMaConfig;
+import com.fs.company.domain.CompanyMiniapp;
+import com.fs.company.service.ICompanyMiniappService;
 import com.fs.course.domain.FsCoursePlaySourceConfig;
 import com.fs.course.domain.FsCoursePlaySourceConfig;
 import com.fs.course.domain.FsCourseWatchLog;
 import com.fs.course.domain.FsCourseWatchLog;
 import com.fs.course.service.IFsCourseWatchLogService;
 import com.fs.course.service.IFsCourseWatchLogService;
@@ -15,7 +18,6 @@ import com.fs.qw.mapper.QwExternalContactMapper;
 import com.fs.qw.mapper.QwUserMapper;
 import com.fs.qw.mapper.QwUserMapper;
 import com.fs.qw.service.IQwUserService;
 import com.fs.qw.service.IQwUserService;
 import com.fs.qw.service.IQwUserVideoService;
 import com.fs.qw.service.IQwUserVideoService;
-import com.fs.qw.service.impl.QwUserServiceImpl;
 import com.fs.qw.vo.QwSopCourseFinishTempSetting;
 import com.fs.qw.vo.QwSopCourseFinishTempSetting;
 import com.fs.qwApi.param.QwExternalContactHParam;
 import com.fs.qwApi.param.QwExternalContactHParam;
 import com.fs.sop.domain.QwSopLogs;
 import com.fs.sop.domain.QwSopLogs;
@@ -27,6 +29,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
+import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
 @Slf4j
 @Slf4j
@@ -42,9 +45,26 @@ public class IpadSendServer {
     private final IFsCourseWatchLogService watchLogService;
     private final IFsCourseWatchLogService watchLogService;
     private final IQwUserVideoService qwUserVideoService;
     private final IQwUserVideoService qwUserVideoService;
     private final RedisCache redisCache;
     private final RedisCache redisCache;
+    private final ICompanyMiniappService companyMiniappService;
 
 
-    private void sendMiniProgram(BaseVo vo, QwSopCourseFinishTempSetting.Setting content, Map<String, FsCoursePlaySourceConfig> miniMap) {
-        FsCoursePlaySourceConfig courseMaConfig = miniMap.get(content.getMiniprogramAppid());
+    private void sendMiniProgram(BaseVo vo, QwSopCourseFinishTempSetting.Setting content, Map<String, FsCoursePlaySourceConfig> miniMap, Long companyId) {
+        String appid = content.getMiniprogramAppid();
+        if(companyId != null && content.getMiniType() != null){
+            List<CompanyMiniapp> list = companyMiniappService.list(new QueryWrapper<CompanyMiniapp>().eq("company_id", companyId).eq("type", content.getMiniType()));
+            if(!list.isEmpty() && list.get(0) != null && StringUtils.isNotEmpty(list.get(0).getAppId())){
+                appid = list.get(0).getAppId();
+            }
+        }
+        FsCoursePlaySourceConfig courseMaConfig = miniMap.get(appid);
+        if(courseMaConfig == null){
+            List<CompanyMiniapp> list = companyMiniappService.list(new QueryWrapper<CompanyMiniapp>().eq("company_id", companyId).eq("type", 1));
+            if(!list.isEmpty() && list.get(0) != null && StringUtils.isNotEmpty(list.get(0).getAppId())){
+                courseMaConfig = miniMap.get(list.get(0).getAppId());
+            }
+        }
+        if(courseMaConfig == null){
+            throw new BaseException("未找到小程序配置:{}", appid);
+        }
         // 小程序
         // 小程序
         MiniProgramVo miniProgramVo = MiniProgramVo.builder()
         MiniProgramVo miniProgramVo = MiniProgramVo.builder()
                 .desc(content.getMiniprogramTitle())
                 .desc(content.getMiniprogramTitle())
@@ -53,7 +73,7 @@ public class IpadSendServer {
                 .imgUrl(content.getMiniprogramPicUrl())
                 .imgUrl(content.getMiniprogramPicUrl())
                 .username(courseMaConfig.getOriginalId() + "@app")
                 .username(courseMaConfig.getOriginalId() + "@app")
                 .pagepath(content.getMiniprogramPage())
                 .pagepath(content.getMiniprogramPage())
-                .appid(content.getMiniprogramAppid())
+                .appid(courseMaConfig.getAppid())
                 .build();
                 .build();
         miniProgramVo.setBase(vo);
         miniProgramVo.setBase(vo);
         WxWorkResponseDTO<WxWorkSendAppMsgRespDTO> resp = ipadSendUtils.sendMiniProgram(miniProgramVo);
         WxWorkResponseDTO<WxWorkSendAppMsgRespDTO> resp = ipadSendUtils.sendMiniProgram(miniProgramVo);
@@ -337,7 +357,7 @@ public class IpadSendServer {
                     break;
                     break;
                 case "4":
                 case "4":
                 case "10":
                 case "10":
-                    sendMiniProgram(vo, content, miniMap);
+                    sendMiniProgram(vo, content, miniMap, qwUser.getCompanyId());
                     break;
                     break;
                 case "5":
                 case "5":
                     // 文件
                     // 文件

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

@@ -8,7 +8,6 @@ import com.fs.common.core.redis.RedisCacheT;
 import com.fs.common.utils.PubFun;
 import com.fs.common.utils.PubFun;
 import com.fs.company.service.ICompanyMiniappService;
 import com.fs.company.service.ICompanyMiniappService;
 import com.fs.course.config.CourseConfig;
 import com.fs.course.config.CourseConfig;
-import com.fs.course.config.CourseMaConfig;
 import com.fs.course.domain.FsCoursePlaySourceConfig;
 import com.fs.course.domain.FsCoursePlaySourceConfig;
 import com.fs.course.service.IFsCoursePlaySourceConfigService;
 import com.fs.course.service.IFsCoursePlaySourceConfigService;
 import com.fs.ipad.vo.BaseVo;
 import com.fs.ipad.vo.BaseVo;
@@ -53,6 +52,7 @@ public class SendMsg {
     private final IQwSopLogsService qwSopLogsService;
     private final IQwSopLogsService qwSopLogsService;
     private final QwIpadServerMapper qwIpadServerMapper;
     private final QwIpadServerMapper qwIpadServerMapper;
     private final RedisCacheT<Long> redisCache;
     private final RedisCacheT<Long> redisCache;
+    private final AsyncSopTestService asyncSopTestService;
     private final ICompanyMiniappService companyMiniappService;
     private final ICompanyMiniappService companyMiniappService;
     private final IFsCoursePlaySourceConfigService fsCoursePlaySourceConfigService;
     private final IFsCoursePlaySourceConfigService fsCoursePlaySourceConfigService;
 
 
@@ -65,7 +65,7 @@ public class SendMsg {
     @Qualifier("customThreadPool")
     @Qualifier("customThreadPool")
     private ThreadPoolTaskExecutor customThreadPool;
     private ThreadPoolTaskExecutor customThreadPool;
 
 
-    public SendMsg(QwUserMapper qwUserMapper, QwSopLogsMapper qwSopLogsMapper, IpadSendServer sendServer, SysConfigMapper sysConfigMapper, IQwSopLogsService qwSopLogsService, QwIpadServerMapper qwIpadServerMapper, RedisCacheT<Long> redisCache, ICompanyMiniappService companyMiniappService, IFsCoursePlaySourceConfigService fsCoursePlaySourceConfigService) {
+    public SendMsg(QwUserMapper qwUserMapper, QwSopLogsMapper qwSopLogsMapper, IpadSendServer sendServer, SysConfigMapper sysConfigMapper, IQwSopLogsService qwSopLogsService, QwIpadServerMapper qwIpadServerMapper, RedisCacheT<Long> redisCache, AsyncSopTestService asyncSopTestService, ICompanyMiniappService companyMiniappService, IFsCoursePlaySourceConfigService fsCoursePlaySourceConfigService) {
         this.qwUserMapper = qwUserMapper;
         this.qwUserMapper = qwUserMapper;
         this.qwSopLogsMapper = qwSopLogsMapper;
         this.qwSopLogsMapper = qwSopLogsMapper;
         this.sendServer = sendServer;
         this.sendServer = sendServer;
@@ -73,6 +73,7 @@ public class SendMsg {
         this.qwSopLogsService = qwSopLogsService;
         this.qwSopLogsService = qwSopLogsService;
         this.qwIpadServerMapper = qwIpadServerMapper;
         this.qwIpadServerMapper = qwIpadServerMapper;
         this.redisCache = redisCache;
         this.redisCache = redisCache;
+        this.asyncSopTestService = asyncSopTestService;
         this.companyMiniappService = companyMiniappService;
         this.companyMiniappService = companyMiniappService;
         this.fsCoursePlaySourceConfigService = fsCoursePlaySourceConfigService;
         this.fsCoursePlaySourceConfigService = fsCoursePlaySourceConfigService;
     }
     }
@@ -91,6 +92,7 @@ public class SendMsg {
 
 
     private Map<String, FsCoursePlaySourceConfig> getMiniMap() {
     private Map<String, FsCoursePlaySourceConfig> getMiniMap() {
         List<FsCoursePlaySourceConfig> list = fsCoursePlaySourceConfigService.list(new QueryWrapper<FsCoursePlaySourceConfig>().ne("type", 2).eq("is_del", 0));
         List<FsCoursePlaySourceConfig> list = fsCoursePlaySourceConfigService.list(new QueryWrapper<FsCoursePlaySourceConfig>().ne("type", 2).eq("is_del", 0));
+        log.info("获取到的小程序配置:{}", JSON.toJSONString(list));
 //        SysConfig maConfig = sysConfigMapper.selectConfigByConfigKey("courseMa.config");
 //        SysConfig maConfig = sysConfigMapper.selectConfigByConfigKey("courseMa.config");
 //        List<CourseMaConfig> courseMaConfigs = JSON.parseArray(maConfig.getConfigValue(), CourseMaConfig.class);
 //        List<CourseMaConfig> courseMaConfigs = JSON.parseArray(maConfig.getConfigValue(), CourseMaConfig.class);
         return PubFun.listToMapByGroupObject(list, FsCoursePlaySourceConfig::getAppid);
         return PubFun.listToMapByGroupObject(list, FsCoursePlaySourceConfig::getAppid);
@@ -213,6 +215,17 @@ public class SendMsg {
                     log.error("线程等待错误!");
                     log.error("线程等待错误!");
                 }
                 }
             }
             }
+            // 推送 APP
+//            if (!setting.getSetting().isEmpty()) {
+//                new Thread(() -> {
+//                    try {
+//                        List<QwSopTempSetting.Content.Setting> settings = JSON.parseArray(JSON.toJSONString(setting.getSetting()), QwSopTempSetting.Content.Setting.class).stream().filter(e -> "9".equals(e.getContentType())).collect(Collectors.toList());
+//                        asyncSopTestService.asyncSendMsgBySopAppLinkNormalIM(settings, qwSopLogs.getCorpId(), user.getCompanyUserId(), qwSopLogs.getFsUserId());
+//                    } catch (Exception e) {
+//                        log.error("推送APP失败", e);
+//                    }
+//                }).start();
+//            }
             qwSopLogs.setSend(true);
             qwSopLogs.setSend(true);
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             QwSopLogs updateQwSop = new QwSopLogs();
             QwSopLogs updateQwSop = new QwSopLogs();

+ 0 - 12
fs-qw-api/src/main/java/com/fs/app/service/QwDataCallbackService.java

@@ -111,18 +111,6 @@ public class QwDataCallbackService {
                         delQwUser.setIsDel(2);
                         delQwUser.setIsDel(2);
                         delQwUser.setStatus(0);
                         delQwUser.setStatus(0);
                         qwUserMapper.updateQwUser(delQwUser);
                         qwUserMapper.updateQwUser(delQwUser);
-                        QwExternalContact qwExternalContact = new QwExternalContact();
-                        qwExternalContact.setUserId(fromUserName);
-                        qwExternalContact.setStatus(0);
-                        qwExternalContact.setCorpId(corpId);
-                        List<QwExternalContact> qwExternalContacts = qwExternalContactService.selectQwExternalContactList(qwExternalContact);
-                        for (QwExternalContact externalContact : qwExternalContacts) {
-                            QwExternalContact lz = new QwExternalContact();
-                            lz.setId(externalContact.getId());
-                            lz.setStatus(1);
-                            qwExternalContactMapper.updateQwExternalContact(lz);
-                        }
-
                     }
                     }
                     break;
                     break;
                 case "subscribe":
                 case "subscribe":

+ 30 - 20
fs-qw-task/src/main/java/com/fs/app/taskService/impl/SopLogsTaskServiceImpl.java

@@ -93,7 +93,7 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
 
 
 
 
     // Batch size for database inserts, configurable via application.properties
     // Batch size for database inserts, configurable via application.properties
-    private final int BATCH_SIZE = 1000;
+    private final int BATCH_SIZE = 500;
 
 
     @Autowired
     @Autowired
     private IFsCourseLinkService courseLinkService;
     private IFsCourseLinkService courseLinkService;
@@ -363,7 +363,7 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
 
 
 
 
     private void processSopGroup(String sopId, List<SopUserLogsVo> userLogsVos,LocalDateTime currentTime, Map<String,
     private void processSopGroup(String sopId, List<SopUserLogsVo> userLogsVos,LocalDateTime currentTime, Map<String,
-            QwGroupChat> groupChatMap,CourseConfig config,Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap,
+                                         QwGroupChat> groupChatMap,CourseConfig config,Map<Long, Map<Integer, List<CompanyMiniapp>>> miniMap,
                                  List<Company> companies) throws Exception {
                                  List<Company> companies) throws Exception {
         QwSopRuleTimeVO ruleTimeVO = sopMapper.selectQwSopByClickHouseId(sopId);
         QwSopRuleTimeVO ruleTimeVO = sopMapper.selectQwSopByClickHouseId(sopId);
 
 
@@ -857,7 +857,7 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
                                      SopUserLogsVo logVo, Date sendTime, Long courseId, Long videoId, String qwUserId, String companyUserId,
                                      SopUserLogsVo logVo, Date sendTime, Long courseId, Long videoId, String qwUserId, String companyUserId,
                                      String companyId, String externalId, String welcomeText, String qwUserName,
                                      String companyId, String externalId, String welcomeText, String qwUserName,
                                      Long fsUserId, boolean isGroupChat, String miniAppId, QwGroupChat groupChat,CourseConfig config,Map<Long,
                                      Long fsUserId, boolean isGroupChat, String miniAppId, QwGroupChat groupChat,CourseConfig config,Map<Long,
-                                     Map<Integer, List<CompanyMiniapp>>> miniMap,Integer grade, Integer sendMsgType,
+                    Map<Integer, List<CompanyMiniapp>>> miniMap,Integer grade, Integer sendMsgType,
                                      List<Company> companies) {
                                      List<Company> companies) {
         // 深拷贝 Content 对象,避免使用 JSON
         // 深拷贝 Content 对象,避免使用 JSON
         QwSopTempSetting.Content clonedContent = deepCopyContent(content);
         QwSopTempSetting.Content clonedContent = deepCopyContent(content);
@@ -950,21 +950,26 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
                     String sortLink = createLinkByMiniApp(setting, logVo, sendTime, courseId, videoId,
                     String sortLink = createLinkByMiniApp(setting, logVo, sendTime, courseId, videoId,
                             qwUserId, companyUserId, companyId, externalId,isOfficial,sopLogs.getFsUserId());
                             qwUserId, companyUserId, companyId, externalId,isOfficial,sopLogs.getFsUserId());
 
 
+                    if(sopLogs.getSendType()==1){
+                        setting.setMiniprogramAppid(miniAppId);
+                    }else {
+                        int miniType = getLevel(grade);
+                        //算主备小程序
+                        String finalAppId = getAppIdFromMiniMap(miniMap, companyId, sendMsgType, grade);
 
 
-                    //算主备小程序
-                    String finalAppId = getAppIdFromMiniMap(miniMap, companyId, sendMsgType, grade);
+                        if (StringUtil.strIsNullOrEmpty(finalAppId)) {
+                            finalAppId = miniAppId;
+                        }
 
 
-                    if (StringUtil.strIsNullOrEmpty(finalAppId)) {
-                        finalAppId = miniAppId;
-                    }
+                        setting.setMiniType(miniType);
+                        if (!StringUtil.strIsNullOrEmpty(finalAppId)) {
+                            setting.setMiniprogramAppid(finalAppId);
+                        } else {
+                            log.error("公司的小程序id为空:采用了前端传的固定值" + sopLogs.getSopId());
+                        }
 
 
-                    if (!StringUtil.strIsNullOrEmpty(finalAppId)) {
-                        setting.setMiniprogramAppid(finalAppId);
-                    } else {
-                        log.error("公司的小程序id为空:采用了前端传的固定值" + sopLogs.getSopId());
                     }
                     }
 
 
-
                     setting.setMiniprogramPage(sortLink.replaceAll("^[\\s\\u2005]+", ""));
                     setting.setMiniprogramPage(sortLink.replaceAll("^[\\s\\u2005]+", ""));
 
 
                     try {
                     try {
@@ -1029,8 +1034,7 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
             return null;
             return null;
         }
         }
 
 
-        int effectiveGrade = (grade == null) ? 5 : grade;
-        int listIndex = (effectiveGrade == 1 || effectiveGrade == 2) ? 0 : 1;
+        int listIndex = getLevel(grade);
         List<CompanyMiniapp> miniapps = gradeMap.get(listIndex);
         List<CompanyMiniapp> miniapps = gradeMap.get(listIndex);
 
 
         if (miniapps == null || miniapps.isEmpty()) {
         if (miniapps == null || miniapps.isEmpty()) {
@@ -1043,6 +1047,12 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
                 : null;
                 : null;
     }
     }
 
 
+    private static int getLevel(Integer grade) {
+        int effectiveGrade = (grade == null) ? 5 : grade;
+        int listIndex = (effectiveGrade == 1 || effectiveGrade == 2) ? 0 : 1;
+        return listIndex;
+    }
+
     /**
     /**
      * 深拷贝 Content 对象,避免使用 JSON 进行序列化和反序列化
      * 深拷贝 Content 对象,避免使用 JSON 进行序列化和反序列化
      */
      */
@@ -1206,9 +1216,9 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
 
 
 
 
     public FsCourseSopAppLink createFsCourseSopAppLink(String link, Date sendTime, Date updateTime, String companyId,
     public FsCourseSopAppLink createFsCourseSopAppLink(String link, Date sendTime, Date updateTime, String companyId,
-                                         String companyUserId,String qwUserId,String qwUserName,String corpId,
-                                         Long courseId,String linkTile,String linkImageUrl,Long videoId,
-                                         String linkDescribe,String appMsgLink,String externalId){
+                                                       String companyUserId,String qwUserId,String qwUserName,String corpId,
+                                                       Long courseId,String linkTile,String linkImageUrl,Long videoId,
+                                                       String linkDescribe,String appMsgLink,String externalId){
 
 
         FsCourseSopAppLink sopAppLink=new FsCourseSopAppLink();
         FsCourseSopAppLink sopAppLink=new FsCourseSopAppLink();
         sopAppLink.setLink(link);
         sopAppLink.setLink(link);
@@ -1272,8 +1282,8 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
     }
     }
 
 
     private String createLinkByMiniApp(QwSopTempSetting.Content.Setting setting, SopUserLogsVo logVo, Date sendTime,
     private String createLinkByMiniApp(QwSopTempSetting.Content.Setting setting, SopUserLogsVo logVo, Date sendTime,
-                                     Long courseId, Long videoId, String qwUserId,
-                                     String companyUserId, String companyId, String externalId,String isOfficial,Long fsUserId) {
+                                       Long courseId, Long videoId, String qwUserId,
+                                       String companyUserId, String companyId, String externalId,String isOfficial,Long fsUserId) {
         // 获取缓存的配置
         // 获取缓存的配置
         CourseConfig config;
         CourseConfig config;
         synchronized(configLock) {
         synchronized(configLock) {

+ 72 - 0
fs-qwhook-sop/src/main/java/com/fs/app/controller/ApisQwUserController.java

@@ -1,8 +1,20 @@
 package com.fs.app.controller;
 package com.fs.app.controller;
 
 
+import com.fs.app.params.LoginBindCompanyParam;
+import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.R;
+import com.fs.common.enums.BusinessType;
 import com.fs.common.exception.CustomException;
 import com.fs.common.exception.CustomException;
+import com.fs.common.exception.base.BaseException;
+import com.fs.common.utils.PatternUtils;
+import com.fs.common.utils.SecurityUtils;
+import com.fs.company.domain.Company;
+import com.fs.company.domain.CompanyUser;
+import com.fs.company.param.CompanyUserCodeParam;
+import com.fs.company.service.ICompanyPostService;
+import com.fs.company.service.ICompanyService;
+import com.fs.company.service.ICompanyUserService;
 import com.fs.course.param.FsCourseListBySidebarParam;
 import com.fs.course.param.FsCourseListBySidebarParam;
 import com.fs.qw.domain.QwExternalContactInfo;
 import com.fs.qw.domain.QwExternalContactInfo;
 import com.fs.qw.domain.QwUser;
 import com.fs.qw.domain.QwUser;
@@ -21,6 +33,7 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import io.swagger.annotations.ApiParam;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import java.util.HashMap;
 import java.util.HashMap;
@@ -42,6 +55,19 @@ public class ApisQwUserController extends BaseController {
     @Autowired
     @Autowired
     private ISopUserLogsInfoService iSopUserLogsInfoService;
     private ISopUserLogsInfoService iSopUserLogsInfoService;
 
 
+    @Autowired
+    private ICompanyUserService companyUserService;
+
+    @Autowired
+    ICompanyUserService userService;
+
+    @Autowired
+    private ICompanyService companyService;
+
+    @Autowired
+    ICompanyPostService postService;
+
+
     @GetMapping("/details")
     @GetMapping("/details")
     @ApiOperation("会员看课详情")
     @ApiOperation("会员看课详情")
     public R getUserDetails(@ApiParam(value = "外部联系人id", required = true) @RequestParam Long contactId,
     public R getUserDetails(@ApiParam(value = "外部联系人id", required = true) @RequestParam Long contactId,
@@ -116,4 +142,50 @@ public class ApisQwUserController extends BaseController {
         return R.ok().put("data", result);
         return R.ok().put("data", result);
     }
     }
 
 
+    /**
+     * 注册或者绑定销售
+     */
+    @PostMapping("/registerCompany")
+    @Log(title = "注册或者绑定销售", businessType = BusinessType.INSERT)
+    public R registerCompany(@RequestBody CompanyUserCodeParam userCodeParam) {
+        return companyUserService.registerCompany(userCodeParam);
+    }
+
+    @PostMapping("/login")
+    @ApiOperation("密码登录")
+    public R login(@Validated @RequestBody LoginBindCompanyParam param) {
+
+        // 密码校验
+        if (!PatternUtils.checkPassword(param.getPassword())) {
+            return R.error("密码格式不正确,需包含字母、数字和特殊字符,长度为 8-20位");
+        }
+
+        try {
+
+            //判断用户基本规则
+            CompanyUser companyUser = userService.selectUserByUserName(param.getAccount());
+            if (companyUser == null) {
+                return R.error("工号不存在");
+            }
+            if (companyUser.getStatus().equals("1")) {
+                return R.error("用户已禁用");
+            }
+            if (!SecurityUtils.matchesPassword(param.getPassword(), companyUser.getPassword())) {
+                return R.error("密码错误");
+            }
+            if (companyUser.getIsAudit() == 0) {
+                return R.error("用户未审核");
+            }
+
+            Company company = companyService.selectCompanyById(companyUser.getCompanyId());
+            if (company == null || company.getStatus() == 0 || company.getIsDel() == 1) {
+                throw new BaseException("此用户所属公司不存在或已停用");
+            }
+
+            return R.ok("验证成功");
+        } catch (Exception e) {
+            return R.error("登录异常:"+e.getMessage());
+        }
+    }
+
 }
 }

+ 70 - 0
fs-qwhook-sop/src/main/java/com/fs/app/controller/QwUserController.java

@@ -1,9 +1,21 @@
 package com.fs.app.controller;
 package com.fs.app.controller;
 
 
+import com.fs.app.params.LoginBindCompanyParam;
 import com.fs.common.BeanCopyUtils;
 import com.fs.common.BeanCopyUtils;
+import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.R;
+import com.fs.common.enums.BusinessType;
 import com.fs.common.exception.CustomException;
 import com.fs.common.exception.CustomException;
+import com.fs.common.exception.base.BaseException;
+import com.fs.common.utils.PatternUtils;
+import com.fs.common.utils.SecurityUtils;
+import com.fs.company.domain.Company;
+import com.fs.company.domain.CompanyUser;
+import com.fs.company.param.CompanyUserCodeParam;
+import com.fs.company.service.ICompanyPostService;
+import com.fs.company.service.ICompanyService;
+import com.fs.company.service.ICompanyUserService;
 import com.fs.qw.domain.QwExternalContactInfo;
 import com.fs.qw.domain.QwExternalContactInfo;
 import com.fs.qw.domain.QwTagGroup;
 import com.fs.qw.domain.QwTagGroup;
 import com.fs.qw.param.ExternalContactDetailsParam;
 import com.fs.qw.param.ExternalContactDetailsParam;
@@ -27,6 +39,7 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import io.swagger.annotations.ApiParam;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import java.util.HashMap;
 import java.util.HashMap;
@@ -51,6 +64,18 @@ public class QwUserController extends BaseController {
     @Autowired
     @Autowired
     private ISopUserLogsInfoService iSopUserLogsInfoService;
     private ISopUserLogsInfoService iSopUserLogsInfoService;
 
 
+    @Autowired
+    private ICompanyUserService companyUserService;
+
+    @Autowired
+    ICompanyUserService userService;
+
+    @Autowired
+    private ICompanyService companyService;
+
+    @Autowired
+    ICompanyPostService postService;
+
     @GetMapping("/details")
     @GetMapping("/details")
     @ApiOperation("会员看课详情")
     @ApiOperation("会员看课详情")
     public R getUserDetails(@ApiParam(value = "外部联系人id", required = true) @RequestParam Long contactId,
     public R getUserDetails(@ApiParam(value = "外部联系人id", required = true) @RequestParam Long contactId,
@@ -150,5 +175,50 @@ public class QwUserController extends BaseController {
         return R.error();
         return R.error();
     }
     }
 
 
+    /**
+     * 注册或者绑定销售
+     */
+    @PostMapping("/registerCompany")
+    @Log(title = "注册或者绑定销售", businessType = BusinessType.INSERT)
+    public R registerCompany(@RequestBody CompanyUserCodeParam userCodeParam) {
+        return companyUserService.registerCompany(userCodeParam);
+    }
+
+    @PostMapping("/login")
+    @ApiOperation("密码登录")
+    public R login(@Validated @RequestBody LoginBindCompanyParam param) {
+
+        // 密码校验
+        if (!PatternUtils.checkPassword(param.getPassword())) {
+            return R.error("密码格式不正确,需包含字母、数字和特殊字符,长度为 8-20位");
+        }
+
+        try {
+
+            //判断用户基本规则
+            CompanyUser companyUser = userService.selectUserByUserName(param.getAccount());
+            if (companyUser == null) {
+                return R.error("工号不存在");
+            }
+            if (companyUser.getStatus().equals("1")) {
+                return R.error("用户已禁用");
+            }
+            if (!SecurityUtils.matchesPassword(param.getPassword(), companyUser.getPassword())) {
+                return R.error("密码错误");
+            }
+            if (companyUser.getIsAudit() == 0) {
+                return R.error("用户未审核");
+            }
+
+            Company company = companyService.selectCompanyById(companyUser.getCompanyId());
+            if (company == null || company.getStatus() == 0 || company.getIsDel() == 1) {
+                throw new BaseException("此用户所属公司不存在或已停用");
+            }
+
+            return R.ok("验证成功");
+        } catch (Exception e) {
+            return R.error("登录异常:"+e.getMessage());
+        }
+    }
 
 
 }
 }

+ 16 - 0
fs-qwhook-sop/src/main/java/com/fs/app/params/LoginBindCompanyParam.java

@@ -0,0 +1,16 @@
+package com.fs.app.params;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class LoginBindCompanyParam {
+    @NotBlank(message = "请填写帐号")
+    private String account;
+    @NotBlank(message = "请填写密码")
+    private String password;
+}

+ 2 - 0
fs-service/src/main/java/com/fs/aiTongueApi/config/AiTongueConfig.java

@@ -5,4 +5,6 @@ public interface AiTongueConfig {
     String quanxiUrl="https://api.aikanshe.com/agency/quanxi";
     String quanxiUrl="https://api.aikanshe.com/agency/quanxi";
     String checkTongue="https://api.aikanshe.com/agency/checkTongue";
     String checkTongue="https://api.aikanshe.com/agency/checkTongue";
     String appKey="";
     String appKey="";
+
+    String newCheckTongue="http://132.232.234.246:5056/api/detect";
 }
 }

+ 58 - 0
fs-service/src/main/java/com/fs/aiTongueApi/domain/enums/TongueTypeEnums.java

@@ -0,0 +1,58 @@
+package com.fs.aiTongueApi.domain.enums;
+
+public enum TongueTypeEnums {
+
+    SheZhi_xianHong("SheZhi","01","主热证,可能是身体积热过多。舌尖红有芒刺表示心火上炎;"),
+    SheZhi_danBai("SheZhi","02","淡白舌而属于机体虚证、寒证之舌象。"),
+    SheZhi_danHong("SheZhi","03","为正常舌色或者疾病初期舌象。"),
+    SheZhi_zi("SheZhi","04","舌质带紫色,有可能是拍照原因。"),
+
+    TaiSe_huang("TaiSe","01","主里证、热证。舌苔灰黄而干燥,表示身体有内热,耗伤津液。"),
+    TaiSe_hui("TaiSe","02","主里证苔厚腻,为湿浊、痰饮。"),
+    TaiSe_bai("TaiSe","03","舌苔薄白为正常舌苔或表证初起。苔白而润滑,为里寒证;"),
+
+    Xing_boTuo("Xing","01","舌见剥落表示脏腑气阴不平衡。"),
+    Xing_chiHen("Xing","02","舌见齿痕表示脾虚或湿盛证。"),
+    Xing_lieWen("Xing","03","舌见裂纹提示脏腑阴血亏虚。"),
+
+    HouDu_hou("HouDu","01","厚"),
+    HouDu_bao("HouDu","02","薄");
+
+    private final String category;
+    private final String code;
+    private final String description;
+
+    TongueTypeEnums(String category, String code, String description) {
+        this.category = category;
+        this.code = code;
+        this.description = description;
+    }
+
+
+    public String getCategory() {
+        return category;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+
+    public String getDescription() {
+        return description;
+    }
+
+
+    public static String fromCategoryAndCode(String category, String code) {
+        for (TongueTypeEnums type : TongueTypeEnums.values()) {
+            if (type.getCategory().equals(category) && type.getCode().equals(code)) {
+                return type.getDescription();
+            }
+        }
+        return null;
+    }
+
+
+
+
+}

+ 14 - 0
fs-service/src/main/java/com/fs/aiTongueApi/domain/inner/ConfidenceDataNew.java

@@ -0,0 +1,14 @@
+package com.fs.aiTongueApi.domain.inner;
+
+import lombok.Data;
+
+@Data
+public class ConfidenceDataNew {
+
+    private int sub; // 下标
+    private String label; // 类别
+    private String labelName; // 类别名称
+    private String val; // 置信度
+    private int[] xyxy; // 坐标 (没啥大用,凑凑数)
+
+}

+ 14 - 0
fs-service/src/main/java/com/fs/aiTongueApi/domain/inner/TongueInfo.java

@@ -0,0 +1,14 @@
+package com.fs.aiTongueApi.domain.inner;
+
+import lombok.Data;
+
+@Data
+public class TongueInfo {
+    private Long id;
+    private Integer botai;
+    private String houdu;
+    private String shemianName;
+    private String taiseName;
+    private String typeName;
+    private String typeJson;
+}

+ 3 - 0
fs-service/src/main/java/com/fs/aiTongueApi/service/AiTongueService.java

@@ -5,6 +5,7 @@ import com.fs.aiTongueApi.domain.QueryAiTongue;
 import com.fs.aiTongueApi.domain.QueryQuanXi;
 import com.fs.aiTongueApi.domain.QueryQuanXi;
 import com.fs.aiTongueApi.domain.inner.ConfidenceData;
 import com.fs.aiTongueApi.domain.inner.ConfidenceData;
 import com.fs.aiTongueApi.domain.inner.TongueData;
 import com.fs.aiTongueApi.domain.inner.TongueData;
+import com.fs.his.domain.FsHealthTongue;
 
 
 public interface AiTongueService {
 public interface AiTongueService {
     AITongueResult<TongueData> getHistoryTongue(QueryAiTongue queryAiTongue);
     AITongueResult<TongueData> getHistoryTongue(QueryAiTongue queryAiTongue);
@@ -12,4 +13,6 @@ public interface AiTongueService {
     AITongueResult<ConfidenceData> checkTongue(String url);
     AITongueResult<ConfidenceData> checkTongue(String url);
 
 
     AITongueResult<TongueData> quanXiTongue(QueryQuanXi queryQuanXi);
     AITongueResult<TongueData> quanXiTongue(QueryQuanXi queryQuanXi);
+
+    AITongueResult<FsHealthTongue> newCheckTongue(String tongueUrl);
 }
 }

+ 187 - 2
fs-service/src/main/java/com/fs/aiTongueApi/service/impl/AiTongueServiceImpl.java

@@ -6,10 +6,13 @@ import com.fs.aiTongueApi.config.AiTongueConfig;
 import com.fs.aiTongueApi.domain.AITongueResult;
 import com.fs.aiTongueApi.domain.AITongueResult;
 import com.fs.aiTongueApi.domain.QueryAiTongue;
 import com.fs.aiTongueApi.domain.QueryAiTongue;
 import com.fs.aiTongueApi.domain.QueryQuanXi;
 import com.fs.aiTongueApi.domain.QueryQuanXi;
-import com.fs.aiTongueApi.domain.inner.ConfidenceData;
-import com.fs.aiTongueApi.domain.inner.TongueData;
+import com.fs.aiTongueApi.domain.enums.TongueTypeEnums;
+import com.fs.aiTongueApi.domain.inner.*;
 import com.fs.aiTongueApi.service.AiTongueService;
 import com.fs.aiTongueApi.service.AiTongueService;
 import com.fs.common.utils.uuid.UUID;
 import com.fs.common.utils.uuid.UUID;
+import com.fs.his.domain.FsHealthTongue;
+import com.fs.his.service.IFsHealthTongueService;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.hc.core5.net.URIBuilder;
 import org.apache.hc.core5.net.URIBuilder;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.HttpResponse;
@@ -20,6 +23,8 @@ import org.apache.http.entity.StringEntity;
 import org.apache.http.entity.mime.MultipartEntityBuilder;
 import org.apache.http.entity.mime.MultipartEntityBuilder;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.util.EntityUtils;
 import org.apache.http.util.EntityUtils;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.io.InputStream;
 import java.io.InputStream;
@@ -27,9 +32,18 @@ import java.net.URI;
 import java.net.URL;
 import java.net.URL;
 import java.nio.charset.Charset;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.nio.charset.StandardCharsets;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
 @Service
 @Service
 public class AiTongueServiceImpl implements AiTongueService {
 public class AiTongueServiceImpl implements AiTongueService {
 
 
+    @Autowired
+    private IFsHealthTongueService tongueService;
+
     @Override
     @Override
     public AITongueResult<TongueData> getHistoryTongue(QueryAiTongue queryAiTongue) {
     public AITongueResult<TongueData> getHistoryTongue(QueryAiTongue queryAiTongue) {
         queryAiTongue.setAppkey(AiTongueConfig.appKey);
         queryAiTongue.setAppkey(AiTongueConfig.appKey);
@@ -108,6 +122,177 @@ public class AiTongueServiceImpl implements AiTongueService {
         return aiTongueResult;
         return aiTongueResult;
     }
     }
 
 
+    @Override
+    public AITongueResult<FsHealthTongue> newCheckTongue(String url) {
+        String s="";
+        try {
+            HttpClient httpClient = HttpClients.createDefault();
+            HttpPost httpPost = new HttpPost(AiTongueConfig.newCheckTongue);
+            MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+            URL urlItem = new URL(url);
+            InputStream inputStream =urlItem.openStream();
+            // 添加文件或表单参数
+            builder.addBinaryBody("file", inputStream, ContentType.DEFAULT_BINARY, "图片.jpg");
+
+            HttpEntity multipart = builder.build();
+            httpPost.setEntity(multipart);
+            // 执行请求
+            HttpResponse response = httpClient.execute(httpPost);
+            String responseBody = EntityUtils.toString(response.getEntity());
+            log.info(responseBody);
+            s=responseBody;
+
+            AITongueResult<List<List<ConfidenceDataNew>>> aiTongueResult = JSON.parseObject(s, new TypeReference<AITongueResult<List<List<ConfidenceDataNew>>>>(){});
+            List<List<ConfidenceDataNew>> data = aiTongueResult.getData();
+            FsHealthTongue healthTongue = new FsHealthTongue();
+            if (data != null && !data.isEmpty()){
+                String boTaiDesc =  "舌未见剥落提示脏腑气充足,胃阴正常,气阴平衡。";
+                String chiHenDesc = "舌未见齿痕表示脾气正常。";
+                String lieWenDesc = "舌未见裂纹表示脏腑津液正常。";
+                String houDu;
+                TongueInfo tongueInfo = new TongueInfo();
+                for (int i = 0; i < 4; i++) {
+                    List<ConfidenceDataNew> confidenceDataNews = data.get(i);
+                    if (confidenceDataNews != null && !confidenceDataNews.isEmpty()){
+                        Optional<ConfidenceDataNew> oldestPerson = confidenceDataNews.stream()
+                                .max(Comparator.comparingDouble(p -> Double.parseDouble(p.getVal())));
+                        ConfidenceDataNew confidenceDataNew = oldestPerson.get();
+
+                        healthTongue.setTongueUrl(url);
+                        if(i == 0){
+                            switch (confidenceDataNew.getLabel()){
+                                case "01":
+                                    healthTongue.setShemianName("鲜红舌");
+                                    break;
+                                case "02":
+                                    healthTongue.setShemianName("淡白舌");
+                                    break;
+                                case "03":
+                                    healthTongue.setShemianName("淡红舌");
+                                    break;
+                                case "04":
+                                    healthTongue.setShemianName("紫舌");
+                                    break;
+                            }
+                            String sheZhi = TongueTypeEnums.fromCategoryAndCode("SheZhi", confidenceDataNew.getLabel());
+                            healthTongue.setShemianDesc(sheZhi);
+                            //设置舌质
+                            tongueInfo.setShemianName(healthTongue.getShemianName());
+                        }
+                        if(i == 1){
+                            switch (confidenceDataNew.getLabel()){
+                                case "01":
+                                    healthTongue.setTaiseName("黄苔");
+                                    break;
+                                case "02":
+                                    healthTongue.setTaiseName("灰苔");
+                                    break;
+                                case "03":
+                                    healthTongue.setTaiseName("白苔");
+                                    break;
+                            }
+                            String taiSe = TongueTypeEnums.fromCategoryAndCode("TaiSe", confidenceDataNew.getLabel());
+                            healthTongue.setTaiseDesc(taiSe);
+                            //设置苔色
+                            tongueInfo.setTaiseName(healthTongue.getTaiseName());
+                        }
+                        if(i == 2){
+                            switch (confidenceDataNew.getLabel()){
+                                case "01":
+                                    healthTongue.setBotai(1L);
+                                    String boTai = TongueTypeEnums.fromCategoryAndCode("Xing", "01");
+                                    healthTongue.setBotaiDesc(boTai);
+                                    //设置是否剥脱 0正常 1剥脱
+                                    tongueInfo.setBotai(1);
+
+                                    healthTongue.setChihen(0L);
+                                    healthTongue.setChihenDesc(chiHenDesc);
+                                    healthTongue.setLiewen(0);
+                                    healthTongue.setLiewenDesc(lieWenDesc);
+                                    break;
+                                case "02":
+                                    healthTongue.setBotai(0L);
+                                    healthTongue.setBotaiDesc(boTaiDesc);
+                                    //设置是否剥脱 0正常 1剥脱
+                                    tongueInfo.setBotai(0);
+
+                                    healthTongue.setChihen(1L);
+                                    String chiHen = TongueTypeEnums.fromCategoryAndCode("Xing", "02");
+                                    healthTongue.setChihenDesc(chiHen);
+                                    healthTongue.setLiewen(0);
+                                    healthTongue.setLiewenDesc(lieWenDesc);
+                                    break;
+                                case "03":
+                                    healthTongue.setBotai(0L);
+                                    healthTongue.setBotaiDesc(boTaiDesc);
+                                    //设置是否剥脱 0正常 1剥脱
+                                    tongueInfo.setBotai(0);
+
+                                    healthTongue.setChihen(0L);
+                                    healthTongue.setChihenDesc(chiHenDesc);
+                                    healthTongue.setLiewen(1);
+                                    String lieWen = TongueTypeEnums.fromCategoryAndCode("Xing", "03");
+                                    healthTongue.setLiewenDesc(lieWen);
+                                    break;
+                            }
+                        }
+                        if(i == 3){
+                            switch (confidenceDataNew.getLabel()){
+                                case "01":
+                                    //厚
+                                    houDu = TongueTypeEnums.fromCategoryAndCode("HouDu", "01");
+                                    break;
+                                default:
+                                    //薄
+                                    houDu = TongueTypeEnums.fromCategoryAndCode("HouDu", "02");
+                                    break;
+                            }
+                            //设置厚度
+                            tongueInfo.setHoudu(houDu);
+                        }
+
+                    }else{
+                        //形状相关的为空就将这几个值置为0(表示正常)
+                        if(i == 2){
+                            healthTongue.setBotai(0L);
+                            healthTongue.setBotaiDesc(boTaiDesc);
+                            //设置是否剥脱 0正常 1剥脱
+                            tongueInfo.setBotai(0);
+
+                            healthTongue.setChihen(0L);
+                            healthTongue.setChihenDesc(chiHenDesc);
+                            healthTongue.setLiewen(0);
+                            healthTongue.setLiewenDesc(lieWenDesc);
+                        }
+                    }
+                }
+
+                TongueInfo fastTongueInfo = tongueService.selectFsTongueInfo(tongueInfo);
+                if(fastTongueInfo != null && fastTongueInfo.getTypeName() != null){
+                    healthTongue.setTypeName(fastTongueInfo.getTypeName());
+                    healthTongue.setTypeJson(fastTongueInfo.getTypeJson());
+                    return getAiTongueResult(healthTongue,"40001","ok");
+                }
+                return getAiTongueResult(healthTongue,"40003","未检测到舌头,请按照要求查询拍照检测");
+            }
+            return getAiTongueResult(healthTongue,"40003","未能从服务器获取结果,请稍后再试");
+        } catch (Exception e) {
+            return getAiTongueResult(null,"40003","请求频繁,请稍后再试");
+        }
+    }
+
+    private static @NotNull AITongueResult<FsHealthTongue> getAiTongueResult(FsHealthTongue healthTongue, String code, String msg) {
+        AITongueResult<FsHealthTongue> result = new AITongueResult<>();
+        result.setData(healthTongue);
+        result.setCode(code);
+        meta meta = new meta();
+        meta.setCode(code);
+        meta.setMsg(msg);
+        meta.setTimestamp(String.valueOf(new Date()));
+        result.setMeta(meta);
+        return result;
+    }
+
 
 
     public  String sendPost(String url,Object param){
     public  String sendPost(String url,Object param){
         HttpClient httpClient = HttpClients.createDefault();
         HttpClient httpClient = HttpClients.createDefault();

+ 4 - 149
fs-service/src/main/java/com/fs/company/domain/CompanyRecharge.java

@@ -5,15 +5,17 @@ import java.util.Date;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fs.common.annotation.Excel;
 import com.fs.common.annotation.Excel;
 import com.fs.common.core.domain.BaseEntity;
 import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import org.apache.commons.lang3.builder.ToStringStyle;
 
 
 /**
 /**
  * 充值对象 company_recharge
  * 充值对象 company_recharge
- * 
+ *
  * @author fs
  * @author fs
  * @date 2023-02-27
  * @date 2023-02-27
  */
  */
+@Data
 public class CompanyRecharge extends BaseEntity
 public class CompanyRecharge extends BaseEntity
 {
 {
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
@@ -72,152 +74,5 @@ public class CompanyRecharge extends BaseEntity
     private Date auditTime;
     private Date auditTime;
 
 
     private String remark;
     private String remark;
-
-    @Override
-    public String getRemark() {
-        return remark;
-    }
-
-    @Override
-    public void setRemark(String remark) {
-        this.remark = remark;
-    }
-
-    public void setRechargeId(Long rechargeId)
-    {
-        this.rechargeId = rechargeId;
-    }
-
-    public Long getRechargeId() 
-    {
-        return rechargeId;
-    }
-    public void setCompanyId(Long companyId) 
-    {
-        this.companyId = companyId;
-    }
-
-    public Long getCompanyId() 
-    {
-        return companyId;
-    }
-    public void setRechargeNo(String rechargeNo) 
-    {
-        this.rechargeNo = rechargeNo;
-    }
-
-    public String getRechargeNo() 
-    {
-        return rechargeNo;
-    }
-    public void setMoney(BigDecimal money) 
-    {
-        this.money = money;
-    }
-
-    public BigDecimal getMoney() 
-    {
-        return money;
-    }
-    public void setPayTime(Date payTime) 
-    {
-        this.payTime = payTime;
-    }
-
-    public Date getPayTime() 
-    {
-        return payTime;
-    }
-    public void setStatus(Integer status) 
-    {
-        this.status = status;
-    }
-
-    public Integer getStatus() 
-    {
-        return status;
-    }
-    public void setPayType(Integer payType) 
-    {
-        this.payType = payType;
-    }
-
-    public Integer getPayType() 
-    {
-        return payType;
-    }
-    public void setTradeNo(String tradeNo) 
-    {
-        this.tradeNo = tradeNo;
-    }
-
-    public String getTradeNo() 
-    {
-        return tradeNo;
-    }
-    public void setBalance(BigDecimal balance) 
-    {
-        this.balance = balance;
-    }
-
-    public BigDecimal getBalance() 
-    {
-        return balance;
-    }
-    public void setCreateUserId(Long createUserId) 
-    {
-        this.createUserId = createUserId;
-    }
-
-    public Long getCreateUserId() 
-    {
-        return createUserId;
-    }
-    public void setIsAudit(Integer isAudit) 
-    {
-        this.isAudit = isAudit;
-    }
-
-    public Integer getIsAudit() 
-    {
-        return isAudit;
-    }
-    public void setAuditUserId(Long auditUserId) 
-    {
-        this.auditUserId = auditUserId;
-    }
-
-    public Long getAuditUserId() 
-    {
-        return auditUserId;
-    }
-    public void setAuditTime(Date auditTime) 
-    {
-        this.auditTime = auditTime;
-    }
-
-    public Date getAuditTime() 
-    {
-        return auditTime;
-    }
-
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
-            .append("rechargeId", getRechargeId())
-            .append("companyId", getCompanyId())
-            .append("rechargeNo", getRechargeNo())
-            .append("money", getMoney())
-            .append("createTime", getCreateTime())
-            .append("payTime", getPayTime())
-            .append("status", getStatus())
-            .append("payType", getPayType())
-            .append("tradeNo", getTradeNo())
-            .append("balance", getBalance())
-            .append("createUserId", getCreateUserId())
-            .append("isAudit", getIsAudit())
-            .append("auditUserId", getAuditUserId())
-            .append("auditTime", getAuditTime())
-            .toString();
-    }
+    private String imgs;
 }
 }

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

@@ -35,8 +35,8 @@ public class CompanyUser extends BaseEntity
 
 
     private String corpId;
     private String corpId;
 
 
-    /** 部门ID */
-    @Excel(name = "部门ID")
+    /** 部门编号 */
+    @Excel(name = "部门编号")
     private Long deptId;
     private Long deptId;
 
 
     /** 用户账号 */
     /** 用户账号 */

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

@@ -84,4 +84,5 @@ public interface CompanyRoleMapper
      * @return 角色信息
      * @return 角色信息
      * **/
      * **/
     CompanyRole selectCompanyRoleByRoleKey(@Param("roleKey") String roleKey);
     CompanyRole selectCompanyRoleByRoleKey(@Param("roleKey") String roleKey);
+    Long selectRolesByUserNameAndCompanyId(@Param("roleName") String roleName,@Param("companyId") Long companyId);
 }
 }

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

@@ -16,5 +16,6 @@ public class CompanyRechargeParam implements Serializable
     private BigDecimal money;
     private BigDecimal money;
 
 
     private String remark;
     private String remark;
+    private String imgs;
 
 
 }
 }

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

@@ -8,6 +8,7 @@ import com.fs.company.param.CompanyUserQwParam;
 import com.fs.company.vo.*;
 import com.fs.company.vo.*;
 import com.fs.his.vo.CitysAreaVO;
 import com.fs.his.vo.CitysAreaVO;
 import com.fs.his.vo.OptionsVO;
 import com.fs.his.vo.OptionsVO;
+import com.fs.hisStore.vo.FsStoreProductExportVO;
 import com.fs.qw.dto.UserProjectDTO;
 import com.fs.qw.dto.UserProjectDTO;
 import com.fs.qw.vo.CompanyUserQwVO;
 import com.fs.qw.vo.CompanyUserQwVO;
 import com.fs.qw.vo.QwOptionsVO;
 import com.fs.qw.vo.QwOptionsVO;
@@ -53,6 +54,9 @@ public interface ICompanyUserService {
      */
      */
     public int insertCompanyUser(CompanyUser companyUser);
     public int insertCompanyUser(CompanyUser companyUser);
 
 
+    String importCompanyUser(List<CompanyUserImportVO> list, boolean updateSupport);
+
+
     /**
     /**
      * 修改物业公司管理员信息
      * 修改物业公司管理员信息
      *
      *

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

@@ -35,8 +35,9 @@ import com.fs.system.domain.SysConfig;
 import com.fs.system.mapper.SysConfigMapper;
 import com.fs.system.mapper.SysConfigMapper;
 import com.fs.system.service.ISysConfigService;
 import com.fs.system.service.ISysConfigService;
 import com.google.gson.Gson;
 import com.google.gson.Gson;
+import com.hc.openapi.tool.util.ObjectUtils;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang.ObjectUtils;
+;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;

+ 169 - 2
fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java

@@ -1,9 +1,12 @@
 package com.fs.company.service.impl;
 package com.fs.company.service.impl;
 
 
+import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
+import com.fs.common.BeanCopyUtils;
 import com.fs.common.annotation.DataScope;
 import com.fs.common.annotation.DataScope;
 import com.fs.common.constant.UserConstants;
 import com.fs.common.constant.UserConstants;
+import com.fs.common.core.domain.AjaxResult;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.core.redis.RedisCache;
 import com.fs.common.exception.CustomException;
 import com.fs.common.exception.CustomException;
@@ -26,6 +29,11 @@ import com.fs.his.mapper.FsUserMapper;
 import com.fs.his.service.IFsCityService;
 import com.fs.his.service.IFsCityService;
 import com.fs.his.vo.CitysAreaVO;
 import com.fs.his.vo.CitysAreaVO;
 import com.fs.his.vo.OptionsVO;
 import com.fs.his.vo.OptionsVO;
+import com.fs.hisStore.domain.FsStoreProductAttrScrm;
+import com.fs.hisStore.domain.FsStoreProductAttrValueScrm;
+import com.fs.hisStore.domain.FsStoreProductScrm;
+import com.fs.hisStore.dto.ProductArrtDTO;
+import com.fs.hisStore.vo.FsStoreProductExportVO;
 import com.fs.qw.domain.QwUser;
 import com.fs.qw.domain.QwUser;
 import com.fs.qw.dto.UserProjectDTO;
 import com.fs.qw.dto.UserProjectDTO;
 import com.fs.qw.mapper.QwUserMapper;
 import com.fs.qw.mapper.QwUserMapper;
@@ -46,6 +54,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
 import java.io.IOException;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 import java.util.stream.Collectors;
@@ -155,6 +164,163 @@ public class CompanyUserServiceImpl implements ICompanyUserService
         return companyUserMapper.insertCompanyUser(companyUser);
         return companyUserMapper.insertCompanyUser(companyUser);
     }
     }
 
 
+    @Override
+    public String importCompanyUser(List<CompanyUserImportVO> list, boolean updateSupport) {
+
+        if (com.fs.common.utils.StringUtils.isNull(list) || list.size() == 0)
+        {
+            throw new CustomException("导入销售信息不能为空!");
+        }
+        int successNum = 0;
+        int failureNum = 0;
+        StringBuilder successMsg = new StringBuilder();
+        StringBuilder failureMsg = new StringBuilder();
+        for (CompanyUserImportVO importVO : list){
+            try
+            {
+                CompanyUser copy = BeanCopyUtils.copy(importVO, CompanyUser.class);
+
+                assert copy != null;
+
+                if (StringUtil.strIsNullOrEmpty(copy.getPassword())){
+                    throw new CustomException("密码不能为空");
+                }
+
+
+                if (!PatternUtils.checkPassword(copy.getPassword())) {
+                    throw new CustomException("密码格式不正确,需包含字母、数字和特殊字符,长度为 8-20 位");
+                }
+
+                if (copy.getCompanyId() == null){
+                    throw new CustomException("公司ID不能为空,且为数字!");
+                } else if (!String.valueOf(copy.getCompanyId()).matches("\\d+")) {
+                    throw new CustomException("公司ID必须为数字!");
+                }
+
+                if (copy.getDeptId() == null){
+                    throw new CustomException("部门编号不能为空,且为数字!");
+                } else if (!String.valueOf(copy.getDeptId()).matches("\\d+")) {
+                    throw new CustomException("部门编号必须为数字!");
+                }
+
+                if (StringUtil.strIsNullOrEmpty(copy.getPhonenumber())){
+                    throw new CustomException("手机号不能为空");
+                } else if (!copy.getPhonenumber().matches("\\d+")) {
+                    throw new CustomException("手机号必须为数字!");
+                }
+
+                if (StringUtil.strIsNullOrEmpty(copy.getAddressId())){
+                    throw new CustomException("区域不能为空");
+                } else if (!copy.getAddressId().matches("\\d+")) {
+                    throw new CustomException("区域ID必须为数字!");
+                }
+
+                Integer count=companyUserService.selectCompanyUserCountByCompanyId(copy.getCompanyId());
+                Company company=companyService.selectCompanyById(copy.getCompanyId());
+
+                if(count>company.getLimitUserCount()){
+                    throw new CustomException("销售公司的销售数量已达到上限!");
+                }
+
+                if (UserConstants.NOT_UNIQUE.equals(String.valueOf(companyUserService.checkUserName(copy.getUserName()))))
+                {
+                    throw new CustomException("新增用户'" + copy.getUserName() + "'失败,登录账号已存在");
+                }
+
+                if (StringUtil.strIsNullOrEmpty(copy.getNickName())){
+                    throw new CustomException("用户昵称不能为空");
+                }
+
+                if (StringUtil.strIsNullOrEmpty(importVO.getRoleString())){
+                    throw new CustomException("角色-不能为空");
+                }
+
+                try {
+                    String[] splitRoles = splitRoles(importVO.getRoleString());
+
+                    // 新增用户与岗位管理
+                    Set<Long> setList= new HashSet<>();
+
+                    for (String stringRole : splitRoles) {
+                        Long rolesId = roleMapper.selectRolesByUserNameAndCompanyId(stringRole, copy.getCompanyId());
+
+                        if (StringUtils.isNotNull(rolesId)) {
+                            setList.add(rolesId);
+                        }else {
+                            throw new CustomException("当前销售公司没有此角色");
+                        }
+                    }
+
+                    // 转换为 Long[]
+                    Long[] roleIds = setList.toArray(new Long[0]);
+                    copy.setRoleIds(roleIds);
+
+
+                }catch (Exception e){
+                    throw new CustomException("角色-格式不正确");
+                }
+
+
+
+                copy.setUserType("01");//一般用户
+                copy.setIsAudit(1);
+                copy.setPassword(SecurityUtils.encryptPassword(copy.getPassword()));
+                copy.setCreateTime(new Date());
+                copy.setStatus("0");
+
+                int rows = companyUserMapper.insertCompanyUser(copy);
+                if (rows>0){
+                    // 新增用户与角色管理
+                    insertUserRole(copy);
+                }else {
+                    throw new CustomException("新增用户'" + copy.getUserName() + "'失败");
+                }
+
+
+                successNum++;
+                successMsg.append("<br/>" + successNum + "、销售账号 " + copy.getUserName() + " 导入成功");
+            }
+            catch (Exception e)
+            {
+
+                failureNum++;
+                String msg = "<br/>" + failureNum + "、销售账号 " + importVO.getUserName()  + " 导入失败:";
+                failureMsg.append(msg + e.getMessage());
+            }
+
+        }
+        if (failureNum > 0)
+        {
+            failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+            throw new CustomException(failureMsg.toString());
+        }
+        else
+        {
+            successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
+        }
+        return successMsg.toString();
+    }
+
+
+    public String[] splitRoles(String roleString) {
+        if (roleString == null || roleString.trim().isEmpty()) {
+            return new String[0];
+        }
+
+        // 预处理:替换中文标点,去除首尾空格
+        String processed = roleString
+                .replace(",", ",")
+                .replace(";", ";")
+                .replace("、", ",")
+                .trim();
+
+        // 分割并过滤空值
+        return Arrays.stream(processed.split("[,;\\s]+"))
+                .filter(s -> !s.isEmpty())
+                .map(String::trim)
+                .toArray(String[]::new);
+    }
+
     /**
     /**
      * 修改物业公司管理员信息
      * 修改物业公司管理员信息
      *
      *
@@ -320,11 +486,12 @@ public class CompanyUserServiceImpl implements ICompanyUserService
             user.setUserName(userCodeParam.getUserName());
             user.setUserName(userCodeParam.getUserName());
             user.setSex(userCodeParam.getSex());
             user.setSex(userCodeParam.getSex());
             user.setStatus("1");
             user.setStatus("1");
-            user.setDept(userCodeParam.getDept());
+            user.setDeptId(userCodeParam.getDeptId());
+            user.setPhonenumber(userCodeParam.getPhonenumber());
             user.setRoleIds(userCodeParam.getRoleIds());
             user.setRoleIds(userCodeParam.getRoleIds());
             user.setAddressId(userCodeParam.getAddressId());
             user.setAddressId(userCodeParam.getAddressId());
             user.setCompanyId(userCodeParam.getCompanyId());
             user.setCompanyId(userCodeParam.getCompanyId());
-            user.setCreateBy(userCodeParam.getQwUserId());
+            user.setCreateBy(userCodeParam.getQwUserIdByStr());
             user.setPassword(SecurityUtils.encryptPassword(userCodeParam.getPassword()));
             user.setPassword(SecurityUtils.encryptPassword(userCodeParam.getPassword()));
             user.setCreateTime(new Date());
             user.setCreateTime(new Date());
             user.setUserType("01");//一般用户
             user.setUserType("01");//一般用户

+ 17 - 350
fs-service/src/main/java/com/fs/company/vo/CompanyUserImportVO.java

@@ -5,32 +5,24 @@ import com.fs.common.annotation.Excel;
 import com.fs.common.core.domain.BaseEntity;
 import com.fs.common.core.domain.BaseEntity;
 import com.fs.company.domain.CompanyDept;
 import com.fs.company.domain.CompanyDept;
 import com.fs.company.domain.CompanyRole;
 import com.fs.company.domain.CompanyRole;
+import lombok.Data;
 
 
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
 
 
+@Data
 public class CompanyUserImportVO extends BaseEntity {
 public class CompanyUserImportVO extends BaseEntity {
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
 
 
     /** 用户ID */
     /** 用户ID */
     private Long userId;
     private Long userId;
 
 
-    /** 公司ID */
-    @Excel(name = "公司ID")
+    /** 公司编号 */
+    @Excel(name = "公司编号")
     private Long companyId;
     private Long companyId;
 
 
-    public String getCorpId() {
-        return corpId;
-    }
-
-    public void setCorpId(String corpId) {
-        this.corpId = corpId;
-    }
-
-    private String corpId;
-
-    /** 部门ID */
-    @Excel(name = "部门ID")
+    /** 部门编号 */
+    @Excel(name = "部门编号")
     private Long deptId;
     private Long deptId;
 
 
     /** 用户账号 */
     /** 用户账号 */
@@ -41,8 +33,7 @@ public class CompanyUserImportVO extends BaseEntity {
     @Excel(name = "用户昵称")
     @Excel(name = "用户昵称")
     private String nickName;
     private String nickName;
 
 
-    /** 用户类型(00系统用户) */
-    @Excel(name = "用户类型", readConverterExp = "0=0系统用户")
+    /** 用户类型(00管理员 01员工 ) */
     private String userType;
     private String userType;
 
 
     /** 用户邮箱 */
     /** 用户邮箱 */
@@ -54,13 +45,9 @@ public class CompanyUserImportVO extends BaseEntity {
     private String phonenumber;
     private String phonenumber;
 
 
     /** 用户性别(0男 1女 2未知) */
     /** 用户性别(0男 1女 2未知) */
-    @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
+    @Excel(name = "用户性别(0男 1女 2未知)", readConverterExp = "0=男,1=女,2=未知")
     private String sex;
     private String sex;
 
 
-    /** 头像地址 */
-    @Excel(name = "头像地址")
-    private String avatar;
-
     /** 身份证号 */
     /** 身份证号 */
     @Excel(name = "身份证号")
     @Excel(name = "身份证号")
     private String idCard;
     private String idCard;
@@ -69,23 +56,24 @@ public class CompanyUserImportVO extends BaseEntity {
     @Excel(name = "密码")
     @Excel(name = "密码")
     private String password;
     private String password;
 
 
+    /** 角色字符串 */
+    @Excel(name = "角色(多角色用逗号分割)")
+    private String roleString;
+
     /** 帐号状态(0正常 1停用) */
     /** 帐号状态(0正常 1停用) */
-    @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
     private String status;
     private String status;
 
 
+    private String corpId;
+
     /** 删除标志(0代表存在 2代表删除) */
     /** 删除标志(0代表存在 2代表删除) */
     private String delFlag;
     private String delFlag;
 
 
+    /** 头像地址 */
+    private String avatar;
+
     private String qwUserId;
     private String qwUserId;
     private Integer qwStatus;
     private Integer qwStatus;
 
 
-    public String getIdCard() {
-        return idCard;
-    }
-
-    public void setIdCard(String idCard) {
-        this.idCard = idCard;
-    }
 
 
     /** 最后登录IP */
     /** 最后登录IP */
     private String loginIp;
     private String loginIp;
@@ -111,9 +99,6 @@ public class CompanyUserImportVO extends BaseEntity {
     /** 角色组 */
     /** 角色组 */
     private Long[] roleIds;
     private Long[] roleIds;
 
 
-    /** 角色字符串 */
-    @Excel(name = "角色(多角色用逗号分割)")
-    private String roleString;
 
 
     /** 岗位组 */
     /** 岗位组 */
     private Long[] postIds;
     private Long[] postIds;
@@ -137,322 +122,4 @@ public class CompanyUserImportVO extends BaseEntity {
     /** 看课域名 */
     /** 看课域名 */
     private String domain;
     private String domain;
 
 
-    public String getDomain() {
-        return domain;
-    }
-
-    public void setDomain(String domain) {
-        this.domain = domain;
-    }
-
-    public String getAddressId() {
-        return addressId;
-    }
-
-    public void setAddressId(String addressId) {
-        this.addressId = addressId;
-    }
-
-    public String getVoicePrintUrl() {
-        return voicePrintUrl;
-    }
-
-    public void setVoicePrintUrl(String voicePrintUrl) {
-        this.voicePrintUrl = voicePrintUrl;
-    }
-
-    public String getCallerNo() {
-        return callerNo;
-    }
-
-    public void setCallerNo(String callerNo) {
-        this.callerNo = callerNo;
-    }
-
-    public String getJpushId() {
-        return jpushId;
-    }
-
-    public String getQwUserId() {
-        return qwUserId;
-    }
-
-    public void setQwUserId(String qwUserId) {
-        this.qwUserId = qwUserId;
-    }
-
-    public Integer getQwStatus() {
-        return qwStatus;
-    }
-
-    public void setQwStatus(Integer qwStatus) {
-        this.qwStatus = qwStatus;
-    }
-
-    public void setJpushId(String jpushId) {
-        this.jpushId = jpushId;
-    }
-
-    public String getQrCodeWeixin() {
-        return qrCodeWeixin;
-    }
-
-    public void setQrCodeWeixin(String qrCodeWeixin) {
-        this.qrCodeWeixin = qrCodeWeixin;
-    }
-
-    public String getQrCodeWecom() {
-        return qrCodeWecom;
-    }
-
-    public void setQrCodeWecom(String qrCodeWecom) {
-        this.qrCodeWecom = qrCodeWecom;
-    }
-
-    public String getOpenId() {
-        return openId;
-    }
-
-    public void setOpenId(String openId) {
-        this.openId = openId;
-    }
-
-    public String getUserName() {
-        return userName;
-    }
-
-    public void setUserName(String userName) {
-        this.userName = userName;
-    }
-
-    public String getNickName() {
-        return nickName;
-    }
-
-
-    public void setNickName(String nickName) {
-        this.nickName = nickName;
-    }
-
-    public String getFirstchar() {
-        return firstchar;
-    }
-
-    public void setFirstchar(String firstchar) {
-        this.firstchar = firstchar;
-    }
-
-    public String getPostName() {
-        return postName;
-    }
-
-    public void setPostName(String postName) {
-        this.postName = postName;
-    }
-
-    public String getDeptName() {
-        return deptName;
-    }
-
-    public void setDeptName(String deptName) {
-        this.deptName = deptName;
-    }
-
-    public CompanyDept getDept() {
-        return dept;
-    }
-
-    public void setDept(CompanyDept dept) {
-        this.dept = dept;
-    }
-
-    public static long getSerialVersionUID() {
-        return serialVersionUID;
-    }
-
-    public boolean isAdmin()
-    {
-        return isAdmin(this.userType);
-    }
-
-    public static boolean isAdmin(String userType)
-    {
-        if(userType!=null&&(userType.equals("00") || userType.equals("02"))){
-            return true;
-        }
-        else return false;
-    }
-
-    public List<CompanyRole> getRoles() {
-        return roles;
-    }
-
-    public void setRoles(List<CompanyRole> roles) {
-        this.roles = roles;
-    }
-
-    public String getRoleString() {
-        return roleString;
-    }
-
-    public void setRoleString(String roleString) {
-        this.roleString = roleString;
-    }
-
-    public Long[] getRoleIds() {
-        return roleIds;
-    }
-
-    public void setRoleIds(Long[] roleIds) {
-        this.roleIds = roleIds;
-    }
-
-    public Long[] getPostIds() {
-        return postIds;
-    }
-
-    public void setPostIds(Long[] postIds) {
-        this.postIds = postIds;
-    }
-
-
-    public void setUserId(Long userId)
-    {
-        this.userId = userId;
-    }
-
-    public Long getUserId()
-    {
-        return userId;
-    }
-    public void setCompanyId(Long companyId)
-    {
-        this.companyId = companyId;
-    }
-
-    public Long getCompanyId()
-    {
-        return companyId;
-    }
-    public void setDeptId(Long deptId)
-    {
-        this.deptId = deptId;
-    }
-
-    public Long getDeptId()
-    {
-        return deptId;
-    }
-
-    public void setUserType(String userType)
-    {
-        this.userType = userType;
-    }
-
-    public String getUserType()
-    {
-        return userType;
-    }
-    public void setEmail(String email)
-    {
-        this.email = email;
-    }
-
-    public String getEmail()
-    {
-        return email;
-    }
-    public void setPhonenumber(String phonenumber)
-    {
-        this.phonenumber = phonenumber;
-    }
-
-    public String getPhonenumber()
-    {
-        return phonenumber;
-    }
-    public void setSex(String sex)
-    {
-        this.sex = sex;
-    }
-
-    public String getSex()
-    {
-        return sex;
-    }
-    public void setAvatar(String avatar)
-    {
-        this.avatar = avatar;
-    }
-
-    public String getAvatar()
-    {
-        return avatar;
-    }
-
-    public void setPassword(String password)
-    {
-        this.password = password;
-    }
-
-    public String getPassword()
-    {
-        return password;
-    }
-    public void setStatus(String status)
-    {
-        this.status = status;
-    }
-
-    public String getStatus()
-    {
-        return status;
-    }
-    public void setDelFlag(String delFlag)
-    {
-        this.delFlag = delFlag;
-    }
-
-    public String getDelFlag()
-    {
-        return delFlag;
-    }
-    public void setLoginIp(String loginIp)
-    {
-        this.loginIp = loginIp;
-    }
-
-    public String getLoginIp()
-    {
-        return loginIp;
-    }
-    public void setLoginDate(Date loginDate)
-    {
-        this.loginDate = loginDate;
-    }
-
-    public Date getLoginDate()
-    {
-        return loginDate;
-    }
-
-
-    public void setToken(String token)
-    {
-        this.token = token;
-    }
-
-    public String getToken()
-    {
-        return token;
-    }
-    public void setIsDel(Integer isDel)
-    {
-        this.isDel = isDel;
-    }
-
-    public Integer getIsDel()
-    {
-        return isDel;
-    }
 }
 }

+ 2 - 1
fs-service/src/main/java/com/fs/company/vo/CompanyVO.java

@@ -79,6 +79,8 @@ public class CompanyVO implements Serializable
 
 
     private Integer limitUserCount;
     private Integer limitUserCount;
 
 
+    private Integer maxPadNum;
+
     private Integer voiceCallerNumber;
     private Integer voiceCallerNumber;
     @Excel(name = "商务负责人")
     @Excel(name = "商务负责人")
     private String manager;
     private String manager;
@@ -89,7 +91,6 @@ public class CompanyVO implements Serializable
     private String restartTime;
     private String restartTime;
     private List<String> miniAppMaster;
     private List<String> miniAppMaster;
     private List<String> miniAppServer;
     private List<String> miniAppServer;
-    private Integer maxPadNum;
     /** 已占用 */
     /** 已占用 */
     private Integer usedNum;
     private Integer usedNum;
     /** 所属部门id */
     /** 所属部门id */

+ 0 - 65
fs-service/src/main/java/com/fs/complaint/domain/FsComplaint.java

@@ -1,65 +0,0 @@
-package com.fs.complaint.domain;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.time.LocalDateTime;
-
-/**
- * 投诉表实体类
- */
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-public class FsComplaint {
-
-    /**
-     * 主键ID
-     */
-    private Long id;
-
-    /**
-     * 投诉单号
-     */
-    private String complaintNo;
-
-    /**
-     * 投诉分类ID
-     */
-    private Long categoryId;
-    /**
-     * 投诉分类名称
-     */
-    private String categoryName;
-
-    /**
-     * 投诉内容
-     */
-    private String content;
-
-    /**
-     * 联系手机号
-     */
-    private String contactPhone;
-
-    /**
-     * 联系邮箱
-     */
-    private String contactEmail;
-
-    /**
-     * 状态:1-待处理,2-处理中,3-已完成,4-已关闭
-     */
-    private Integer status;
-
-    /**
-     * 创建时间
-     */
-    private LocalDateTime createTime;
-
-    /**
-     * 更新时间
-     */
-    private LocalDateTime updateTime;
-}

+ 0 - 51
fs-service/src/main/java/com/fs/complaint/domain/FsComplaintAttachment.java

@@ -1,51 +0,0 @@
-package com.fs.complaint.domain;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.time.LocalDateTime;
-
-/**
- * 投诉附件表实体类
- */
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-public class FsComplaintAttachment {
-
-    /**
-     * 主键ID
-     */
-    private Long id;
-
-    /**
-     * 投诉ID
-     */
-    private Long complaintId;
-
-    /**
-     * 文件名
-     */
-    private String fileName;
-
-    /**
-     * 文件路径
-     */
-    private String filePath;
-
-    /**
-     * 文件大小(字节)
-     */
-    private Long fileSize;
-
-    /**
-     * 文件类型
-     */
-    private String fileType;
-
-    /**
-     * 创建时间
-     */
-    private LocalDateTime createTime;
-}

+ 0 - 55
fs-service/src/main/java/com/fs/complaint/domain/FsComplaintCategory.java

@@ -1,55 +0,0 @@
-package com.fs.complaint.domain;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-import java.time.LocalDateTime;
-
-/**
- * 投诉分类表实体类
- */
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-public class FsComplaintCategory implements Serializable {
-
-    /**
-     * 主键ID
-     */
-    private Long id;
-
-    /**
-     * 分类名称
-     */
-    private String categoryName;
-
-    private Long userId;
-    private Long companyUserId;
-
-    /**
-     * 分类编码
-     */
-    private String categoryCode;
-
-    /**
-     * 排序
-     */
-    private Integer sortOrder;
-
-    /**
-     * 状态:1-启用,0-禁用
-     */
-    private Integer status;
-
-    /**
-     * 创建时间
-     */
-    private LocalDateTime createTime;
-
-    /**
-     * 更新时间
-     */
-    private LocalDateTime updateTime;
-}

+ 0 - 20
fs-service/src/main/java/com/fs/complaint/dto/ComplaintQueryDTO.java

@@ -1,20 +0,0 @@
-package com.fs.complaint.dto;
-
-import lombok.Data;
-
-/**
- * 投诉查询条件参数
- */
-@Data
-public class ComplaintQueryDTO {
-
-    private String complaintNo;
-    private Long categoryId;
-    private String categoryName;
-    private Integer status;
-    private String contactPhone;
-    private String startTime;
-    private String endTime;
-    private Integer pageNum = 1;
-    private Integer pageSize = 10;
-}

+ 0 - 29
fs-service/src/main/java/com/fs/complaint/dto/SubmitComplaintDTO.java

@@ -1,29 +0,0 @@
-package com.fs.complaint.dto;
-
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.List;
-
-@Data
-public class SubmitComplaintDTO implements Serializable {
-    /**
-     * 投诉类型
-     */
-    private Long type;
-
-    /**
-     * 投诉类型
-     */
-    private String content;
-
-    /**
-     * 凭证列表
-     */
-    private List<String> url;
-
-    /**
-     * 联系方式
-     */
-    private String contact;
-}

+ 0 - 16
fs-service/src/main/java/com/fs/complaint/dto/UpdateComplaintDTO.java

@@ -1,16 +0,0 @@
-package com.fs.complaint.dto;
-
-import lombok.Data;
-
-/**
- * 更新投诉请求参数
- */
-@Data
-public class UpdateComplaintDTO {
-
-    private Long categoryId;
-    private String content;
-    private String contactPhone;
-    private String contactEmail;
-    private Integer status;
-}

+ 0 - 59
fs-service/src/main/java/com/fs/complaint/mapper/FsComplaintAttachmentMapper.java

@@ -1,59 +0,0 @@
-package com.fs.complaint.mapper;
-
-import com.fs.complaint.domain.FsComplaintAttachment;
-import org.apache.ibatis.annotations.*;
-
-import java.util.List;
-
-/**
- * 投诉附件表数据访问层
- */
-@Mapper
-public interface FsComplaintAttachmentMapper {
-
-    /**
-     * 根据ID查询附件信息
-     */
-    @Select("SELECT * FROM fs_complaint_attachment WHERE id = #{id}")
-    FsComplaintAttachment selectById(Long id);
-
-    /**
-     * 根据投诉ID查询附件列表
-     */
-    @Select("SELECT * FROM fs_complaint_attachment WHERE complaint_id = #{complaintId}")
-    List<FsComplaintAttachment> selectByComplaintId(Long complaintId);
-
-    /**
-     * 插入附件信息
-     */
-    @Insert("INSERT INTO fs_complaint_attachment(complaint_id, file_name, file_path, file_size, file_type) " +
-            "VALUES(#{complaintId}, #{fileName}, #{filePath}, #{fileSize}, #{fileType})")
-    @Options(useGeneratedKeys = true, keyProperty = "id")
-    int insert(FsComplaintAttachment attachment);
-
-    /**
-     * 根据ID删除附件信息
-     */
-    @Update("DELETE FROM fs_complaint_attachment WHERE id = #{id}")
-    int deleteById(Long id);
-
-    /**
-     * 根据投诉ID删除附件信息
-     */
-    @Update("DELETE FROM fs_complaint_attachment WHERE complaint_id = #{complaintId}")
-    int deleteByComplaintId(Long complaintId);
-
-
-    /**
-     * 批量插入附件信息
-     */
-    @Insert("<script>" +
-            "INSERT INTO fs_complaint_attachment(complaint_id, file_name, file_path, file_size, file_type) VALUES " +
-            "<foreach collection='list' item='item' separator=','>" +
-            "(#{item.complaintId}, #{item.fileName}, #{item.filePath}, #{item.fileSize}, #{item.fileType})" +
-            "</foreach>" +
-            "</script>")
-    @Options(useGeneratedKeys = true, keyProperty = "id")
-    int batchInsert(@Param("list") List<FsComplaintAttachment> attachmentList);
-
-}

+ 0 - 66
fs-service/src/main/java/com/fs/complaint/mapper/FsComplaintCategoryMapper.java

@@ -1,66 +0,0 @@
-package com.fs.complaint.mapper;
-
-import com.fs.complaint.domain.FsComplaintCategory;
-import com.fs.complaint.param.FsComplaintCategoryParam;
-import com.fs.complaint.vo.FsComplaintCategoryListVO;
-import org.apache.ibatis.annotations.*;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 投诉分类表数据访问层
- */
-@Mapper
-public interface FsComplaintCategoryMapper {
-
-    /**
-     * 根据ID查询分类信息
-     */
-    @Select("SELECT * FROM fs_complaint_category WHERE id = #{id}")
-    FsComplaintCategory selectById(Long id);
-
-    /**
-     * 查询所有启用的分类列表
-     */
-    @Select("SELECT * FROM fs_complaint_category WHERE status = 1 ORDER BY sort_order ASC")
-    List<FsComplaintCategory> selectAllEnabled();
-
-    /**
-     * 查询所有分类列表
-     */
-    @Select("SELECT * FROM fs_complaint_category where status=1 ORDER BY sort_order ASC")
-    List<FsComplaintCategory> selectAll();
-
-    @Select("SELECT id,category_name FROM fs_complaint_category where status=1 ORDER BY sort_order ASC")
-    @MapKey("id")
-    Map<Long,FsComplaintCategory> selectAllMap();
-
-    /**
-     * 插入分类信息
-     */
-    @Insert("INSERT INTO fs_complaint_category(category_name, category_code, sort_order, status) " +
-            "VALUES(#{categoryName}, #{categoryCode}, #{sortOrder}, #{status})")
-    @Options(useGeneratedKeys = true, keyProperty = "id")
-    int insert(FsComplaintCategory category);
-
-    /**
-     * 更新分类信息
-     */
-
-    int updateById(FsComplaintCategory category);
-
-    /**
-     * 根据ID删除分类信息
-     */
-    @Update("DELETE FROM fs_complaint_category WHERE id = #{id}")
-    int deleteById(Long id);
-
-    List<FsComplaintCategoryListVO> selectFsComplaintCategoryListVO(FsComplaintCategoryParam param);
-
-
-    @Select("select * from fs_complaint_category where id=#{id}")
-    FsComplaintCategory selectFsComplaintCategoryById(@Param("id") Long id);
-
-
-}

+ 0 - 135
fs-service/src/main/java/com/fs/complaint/mapper/FsComplaintMapper.java

@@ -1,135 +0,0 @@
-package com.fs.complaint.mapper;
-
-import com.fs.complaint.domain.FsComplaint;
-import com.fs.complaint.dto.ComplaintQueryDTO;
-import org.apache.ibatis.annotations.*;
-
-import java.util.List;
-
-/**
- * 投诉表数据访问层
- */
-@Mapper
-public interface FsComplaintMapper {
-
-    /**
-     * 根据ID查询投诉信息
-     */
-    @Select("SELECT * FROM fs_complaint WHERE id = #{id}")
-    FsComplaint selectById(Long id);
-
-    /**
-     * 根据投诉单号查询投诉信息
-     */
-    @Select("SELECT * FROM fs_complaint WHERE complaint_no = #{complaintNo}")
-    FsComplaint selectByComplaintNo(String complaintNo);
-
-    /**
-     * 条件查询投诉总数
-     */
-    @SelectProvider(type = ComplaintSqlProvider.class, method = "countByCondition")
-    int countByCondition(ComplaintQueryDTO queryDTO);
-
-    /**
-     * 条件分页查询投诉列表
-     */
-    @SelectProvider(type = ComplaintSqlProvider.class, method = "selectByCondition")
-    List<FsComplaint> selectByCondition(ComplaintQueryDTO queryDTO);
-
-    /**
-     * 插入投诉信息
-     */
-    @Insert("INSERT INTO fs_complaint(complaint_no, category_id, category_name, content, contact_phone, contact_email, status, create_time, update_time) " +
-            "VALUES(#{complaintNo}, #{categoryId}, #{categoryName}, #{content}, #{contactPhone}, #{contactEmail}, #{status}, #{createTime}, #{updateTime})")
-    @Options(useGeneratedKeys = true, keyProperty = "id")
-    int insert(FsComplaint complaint);
-
-    /**
-     * 更新投诉信息
-     */
-    @UpdateProvider(type = ComplaintSqlProvider.class, method = "updateSelective")
-    int updateSelective(FsComplaint complaint);
-
-    /**
-     * 根据ID删除投诉信息
-     */
-    @Delete("DELETE FROM fs_complaint WHERE id = #{id}")
-    int deleteById(Long id);
-
-    /**
-     * SQL构建器
-     */
-    class ComplaintSqlProvider {
-
-        public String countByCondition(ComplaintQueryDTO queryDTO) {
-            return buildConditionSql("SELECT COUNT(*) FROM fs_complaint", queryDTO, false);
-        }
-
-        public String selectByCondition(ComplaintQueryDTO queryDTO) {
-            String sql = buildConditionSql("SELECT * FROM fs_complaint", queryDTO, true);
-            int offset = (queryDTO.getPageNum() - 1) * queryDTO.getPageSize();
-            return sql + " LIMIT " + offset + ", " + queryDTO.getPageSize();
-        }
-
-        public String updateSelective(FsComplaint complaint) {
-            StringBuilder sql = new StringBuilder("UPDATE fs_complaint SET update_time = #{updateTime}");
-
-            if (complaint.getCategoryId() != null) {
-                sql.append(", category_id = #{categoryId}");
-            }
-            if (complaint.getCategoryName() != null) {
-                sql.append(", category_name = #{categoryName}");
-            }
-            if (complaint.getContent() != null) {
-                sql.append(", content = #{content}");
-            }
-            if (complaint.getContactPhone() != null) {
-                sql.append(", contact_phone = #{contactPhone}");
-            }
-            if (complaint.getContactEmail() != null) {
-                sql.append(", contact_email = #{contactEmail}");
-            }
-            if (complaint.getStatus() != null) {
-                sql.append(", status = #{status}");
-            }
-
-            sql.append(" WHERE id = #{id}");
-            return sql.toString();
-        }
-
-        private String buildConditionSql(String baseSql, ComplaintQueryDTO queryDTO, boolean needOrder) {
-            StringBuilder sql = new StringBuilder(baseSql);
-            StringBuilder where = new StringBuilder(" WHERE 1=1");
-
-            if (queryDTO.getComplaintNo() != null && !queryDTO.getComplaintNo().trim().isEmpty()) {
-                where.append(" AND complaint_no LIKE CONCAT('%', #{complaintNo}, '%')");
-            }
-            if (queryDTO.getCategoryId() != null) {
-                where.append(" AND category_id = #{categoryId}");
-            }
-            if (queryDTO.getCategoryName() != null && !queryDTO.getCategoryName().trim().isEmpty()) {
-                where.append(" AND category_name LIKE CONCAT('%', #{categoryName}, '%')");
-            }
-            if (queryDTO.getStatus() != null) {
-                where.append(" AND status = #{status}");
-            }
-            if (queryDTO.getContactPhone() != null && !queryDTO.getContactPhone().trim().isEmpty()) {
-                where.append(" AND contact_phone LIKE CONCAT('%', #{contactPhone}, '%')");
-            }
-            if (queryDTO.getStartTime() != null && !queryDTO.getStartTime().trim().isEmpty()) {
-                where.append(" AND create_time >= #{startTime}");
-            }
-            if (queryDTO.getEndTime() != null && !queryDTO.getEndTime().trim().isEmpty()) {
-                where.append(" AND create_time <= #{endTime}");
-            }
-
-            sql.append(where);
-
-            if (needOrder) {
-                sql.append(" ORDER BY create_time DESC");
-            }
-
-            return sql.toString();
-        }
-    }
-}

+ 0 - 28
fs-service/src/main/java/com/fs/complaint/param/FsComplaintCategoryParam.java

@@ -1,28 +0,0 @@
-package com.fs.complaint.param;
-
-import com.fs.common.core.domain.BaseEntity;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * 投诉分类查询参数
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class FsComplaintCategoryParam extends BaseEntity {
-
-    /**
-     * 分类名称
-     */
-    private String categoryName;
-
-    /**
-     * 分类编码
-     */
-    private String categoryCode;
-
-    /**
-     * 状态:1-启用,0-禁用
-     */
-    private Integer status;
-}

+ 0 - 52
fs-service/src/main/java/com/fs/complaint/service/FsComplaintCategoryService.java

@@ -1,52 +0,0 @@
-package com.fs.complaint.service;
-
-import com.fs.complaint.domain.FsComplaintCategory;
-import com.fs.complaint.param.FsComplaintCategoryParam;
-import com.fs.complaint.vo.FsComplaintCategoryListVO;
-
-import java.util.List;
-
-public interface FsComplaintCategoryService {
-    List<FsComplaintCategoryListVO> selectFsComplaintCategoryListVO(FsComplaintCategoryParam param);
-    /**
-     * 根据ID查询投诉分类
-     *
-     * @param id 投诉分类ID
-     * @return 投诉分类
-     */
-    FsComplaintCategory selectFsComplaintCategoryById(Long id);
-    /**
-     * 新增投诉分类
-     *
-     * @param fsComplaintCategory 投诉分类
-     * @return 结果
-     */
-    int insertFsComplaintCategory(FsComplaintCategory fsComplaintCategory);
-    /**
-     * 修改投诉分类
-     *
-     * @param fsComplaintCategory 投诉分类
-     * @return 结果
-     */
-    int updateFsComplaintCategory(FsComplaintCategory fsComplaintCategory);
-    /**
-     * 批量删除投诉分类
-     *
-     * @param ids 需要删除的投诉分类ID
-     * @return 结果
-     */
-    void deleteFsComplaintCategoryByIds(Long[] ids);
-    /**
-     * 修改投诉分类状态
-     *
-     * @param fsComplaintCategory 投诉分类
-     * @return 结果
-     */
-    int updateFsComplaintCategoryStatus(FsComplaintCategory fsComplaintCategory);
-
-    /**
-     * 查询所有分类
-     * @return List<FsComplaintCategory>
-     */
-    List<FsComplaintCategory> queryAllCategory();
-}

+ 0 - 43
fs-service/src/main/java/com/fs/complaint/service/FsComplaintService.java

@@ -1,43 +0,0 @@
-package com.fs.complaint.service;
-
-import cn.hutool.db.PageResult;
-import com.fs.complaint.domain.FsComplaint;
-import com.fs.complaint.dto.ComplaintQueryDTO;
-import com.fs.complaint.dto.SubmitComplaintDTO;
-import com.fs.complaint.dto.UpdateComplaintDTO;
-import com.fs.complaint.vo.ComplaintVO;
-
-import java.util.List;
-
-public interface FsComplaintService {
-
-    /**
-     * 提交投诉
-     */
-    void submitComplaint(SubmitComplaintDTO dto);
-
-    /**
-     * 根据ID查询投诉详情
-     */
-    ComplaintVO getComplaintById(Long id);
-
-    /**
-     * 根据投诉单号查询投诉详情
-     */
-    ComplaintVO getComplaintByNo(String complaintNo);
-
-    /**
-     * 分页查询投诉列表
-     */
-    List<FsComplaint> getComplaintPage(ComplaintQueryDTO queryDTO);
-
-    /**
-     * 更新投诉信息
-     */
-    void updateComplaint(Long id, UpdateComplaintDTO dto);
-
-    /**
-     * 删除投诉
-     */
-    void deleteComplaint(Long id);
-}

+ 0 - 68
fs-service/src/main/java/com/fs/complaint/service/impl/FsComplaintCategoryServiceImpl.java

@@ -1,68 +0,0 @@
-package com.fs.complaint.service.impl;
-
-import com.fs.common.exception.ServiceException;
-import com.fs.common.utils.StringUtils;
-import com.fs.complaint.domain.FsComplaintCategory;
-import com.fs.complaint.mapper.FsComplaintCategoryMapper;
-import com.fs.complaint.param.FsComplaintCategoryParam;
-import com.fs.complaint.service.FsComplaintCategoryService;
-import com.fs.complaint.vo.FsComplaintCategoryListVO;
-import com.tencentcloudapi.tiems.v20190416.models.Runtime;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDateTime;
-import java.util.Collections;
-import java.util.List;
-@Slf4j
-@Service
-public class FsComplaintCategoryServiceImpl implements FsComplaintCategoryService {
-    @Autowired
-    private FsComplaintCategoryMapper fsComplaintCategoryMapper;
-
-    @Override
-    public List<FsComplaintCategoryListVO> selectFsComplaintCategoryListVO(FsComplaintCategoryParam param) {
-        return fsComplaintCategoryMapper.selectFsComplaintCategoryListVO(param);
-    }
-
-    @Override
-    public FsComplaintCategory selectFsComplaintCategoryById(Long id) {
-        return fsComplaintCategoryMapper.selectFsComplaintCategoryById(id);
-    }
-
-    @Override
-    public int insertFsComplaintCategory(FsComplaintCategory fsComplaintCategory) {
-
-        fsComplaintCategory.setCreateTime(LocalDateTime.now());
-        fsComplaintCategory.setUpdateTime(LocalDateTime.now());
-        return fsComplaintCategoryMapper.insert(fsComplaintCategory);
-    }
-
-    @Override
-    public int updateFsComplaintCategory(FsComplaintCategory fsComplaintCategory) {
-
-        fsComplaintCategory.setUpdateTime(LocalDateTime.now());
-        return fsComplaintCategoryMapper.updateById(fsComplaintCategory);
-
-    }
-
-    @Override
-    public void deleteFsComplaintCategoryByIds(Long[] ids) {
-        for(Long id : ids) {
-            fsComplaintCategoryMapper.deleteById(id);
-        }
-    }
-
-    @Override
-    public int updateFsComplaintCategoryStatus(FsComplaintCategory fsComplaintCategory) {
-        fsComplaintCategory.setUpdateTime(LocalDateTime.now());
-        return fsComplaintCategoryMapper.updateById(fsComplaintCategory);
-    }
-
-    @Override
-    public List<FsComplaintCategory> queryAllCategory() {
-        return fsComplaintCategoryMapper.selectAll();
-    }
-
-}

+ 0 - 195
fs-service/src/main/java/com/fs/complaint/service/impl/FsComplaintServiceImpl.java

@@ -1,195 +0,0 @@
-package com.fs.complaint.service.impl;
-
-import cn.hutool.core.lang.Snowflake;
-import cn.hutool.core.util.IdUtil;
-import cn.hutool.db.PageResult;
-import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.fs.common.utils.FileNameExtractor;
-import com.fs.common.utils.bean.BeanUtils;
-import com.fs.complaint.domain.FsComplaint;
-import com.fs.complaint.domain.FsComplaintAttachment;
-import com.fs.complaint.domain.FsComplaintCategory;
-import com.fs.complaint.dto.ComplaintQueryDTO;
-import com.fs.complaint.dto.SubmitComplaintDTO;
-import com.fs.complaint.dto.UpdateComplaintDTO;
-import com.fs.complaint.mapper.FsComplaintAttachmentMapper;
-import com.fs.complaint.mapper.FsComplaintCategoryMapper;
-import com.fs.complaint.mapper.FsComplaintMapper;
-import com.fs.complaint.param.FsComplaintCategoryParam;
-import com.fs.complaint.service.FsComplaintCategoryService;
-import com.fs.complaint.service.FsComplaintService;
-import com.fs.complaint.vo.ComplaintVO;
-import com.fs.complaint.vo.FsComplaintCategoryListVO;
-import lombok.extern.slf4j.Slf4j;
-import org.bouncycastle.oer.its.etsi102941.Url;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.*;
-import java.util.stream.Collectors;
-
-@Slf4j
-@Service
-public class FsComplaintServiceImpl implements FsComplaintService {
-    @Autowired
-    private FsComplaintMapper fsComplaintMapper;
-    @Autowired
-    private FsComplaintAttachmentMapper fsComplaintAttachmentMapper;
-    @Autowired
-    private FsComplaintCategoryMapper fsComplaintCategoryMapper;
-
-    @Override
-    @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
-    public void submitComplaint(SubmitComplaintDTO dto) {
-        FsComplaint fsComplaint = new FsComplaint();
-        String complaintNo = IdUtil.getSnowflake(0, 0).nextIdStr();
-
-        fsComplaint.setComplaintNo(complaintNo);
-        fsComplaint.setCategoryId(dto.getType());
-        fsComplaint.setContent(dto.getContent());
-        fsComplaint.setContactPhone(dto.getContact());
-        fsComplaint.setCreateTime(LocalDateTime.now());
-        fsComplaint.setUpdateTime(LocalDateTime.now());
-        fsComplaint.setStatus(1);
-
-        fsComplaintMapper.insert(fsComplaint);
-        List<String> urls = dto.getUrl();
-
-        List<FsComplaintAttachment> attachments = new ArrayList<>();
-        for (String url : urls) {
-            FsComplaintAttachment attachment = new FsComplaintAttachment();
-            attachment.setComplaintId(fsComplaint.getId());
-            attachment.setCreateTime(LocalDateTime.now());
-
-            String fileNameFromUrl = FileNameExtractor.getFileNameFromUrl(url);
-            attachment.setFileName(fileNameFromUrl);
-            attachment.setFilePath(url);
-            attachment.setFileType(FileNameExtractor.getExtensionFromUrl(url));
-            attachment.setCreateTime(LocalDateTime.now());
-            attachments.add(attachment);
-        }
-        fsComplaintAttachmentMapper.batchInsert(attachments);
-    }
-
-    @Override
-    public ComplaintVO getComplaintById(Long id) {
-        log.info("根据ID查询投诉详情,ID:{}", id);
-
-        FsComplaint complaint = fsComplaintMapper.selectById(id);
-        if (complaint == null) {
-            throw new RuntimeException("投诉信息不存在");
-        }
-
-        return convertToVO(complaint);
-    }
-
-    @Override
-    public ComplaintVO getComplaintByNo(String complaintNo) {
-        log.info("根据投诉单号查询投诉详情,投诉单号:{}", complaintNo);
-
-        FsComplaint complaint = fsComplaintMapper.selectByComplaintNo(complaintNo);
-        if (complaint == null) {
-            throw new RuntimeException("投诉信息不存在");
-        }
-
-        return convertToVO(complaint);
-    }
-
-    @Override
-    public List<FsComplaint> getComplaintPage(ComplaintQueryDTO queryDTO) {
-        log.info("分页查询投诉列表,参数:{}", queryDTO);
-
-        Map<Long, FsComplaintCategory> categoryMap = fsComplaintCategoryMapper.selectAllMap();
-
-        List<FsComplaint> complaints = fsComplaintMapper.selectByCondition(queryDTO);
-        for (FsComplaint complaint : complaints) {
-            FsComplaintCategory fsComplaintCategory = categoryMap.get(complaint.getCategoryId());
-            if(ObjectUtils.isNotNull(fsComplaintCategory)){
-                complaint.setCategoryName(fsComplaintCategory.getCategoryName());
-            }
-        }
-
-        return complaints;
-    }
-
-    @Override
-    public void updateComplaint(Long id, UpdateComplaintDTO dto) {
-        log.info("更新投诉信息,ID:{},参数:{}", id, dto);
-
-        // 检查投诉是否存在
-        FsComplaint existComplaint = fsComplaintMapper.selectById(id);
-        if (existComplaint == null) {
-            throw new RuntimeException("投诉信息不存在");
-        }
-
-        FsComplaint complaint = new FsComplaint();
-        BeanUtils.copyProperties(dto, complaint);
-        complaint.setId(id);
-        complaint.setUpdateTime(LocalDateTime.now());
-
-        int result = fsComplaintMapper.updateSelective(complaint);
-        if (result <= 0) {
-            throw new RuntimeException("更新投诉信息失败");
-        }
-
-        log.info("投诉信息更新成功,ID:{}", id);
-    }
-
-    @Override
-    public void deleteComplaint(Long id) {
-        log.info("删除投诉,ID:{}", id);
-
-        // 检查投诉是否存在
-        FsComplaint existComplaint = fsComplaintMapper.selectById(id);
-        if (existComplaint == null) {
-            throw new RuntimeException("投诉信息不存在");
-        }
-
-        int result = fsComplaintMapper.deleteById(id);
-        if (result <= 0) {
-            throw new RuntimeException("删除投诉失败");
-        }
-
-        log.info("投诉删除成功,ID:{}", id);
-    }
-
-    /**
-     * 生成投诉单号
-     */
-    private String generateComplaintNo() {
-        String timestamp = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
-        String random = String.format("%04d", new Random().nextInt(10000));
-        return "TS" + timestamp + random;
-    }
-
-    /**
-     * 转换为VO对象
-     */
-    private ComplaintVO convertToVO(FsComplaint complaint) {
-        ComplaintVO vo = new ComplaintVO();
-        BeanUtils.copyProperties(complaint, vo);
-        vo.setStatusName(getStatusName(complaint.getStatus()));
-        return vo;
-    }
-
-    /**
-     * 获取状态名称
-     */
-    private String getStatusName(Integer status) {
-        if (status == null) {
-            return "";
-        }
-        switch (status) {
-            case 1: return "待处理";
-            case 2: return "处理中";
-            case 3: return "已完成";
-            case 4: return "已关闭";
-            default: return "未知状态";
-        }
-    }
-
-}

+ 0 - 22
fs-service/src/main/java/com/fs/complaint/vo/ComplaintVO.java

@@ -1,22 +0,0 @@
-package com.fs.complaint.vo;
-
-import lombok.Data;
-import java.time.LocalDateTime;
-
-/**
- * 投诉信息返回对象
- */
-@Data
-public class ComplaintVO {
-
-    private Long id;
-    private String complaintNo;
-    private Long categoryId;
-    private String content;
-    private String contactPhone;
-    private String contactEmail;
-    private Integer status;
-    private String statusName;
-    private LocalDateTime createTime;
-    private LocalDateTime updateTime;
-}

+ 0 - 50
fs-service/src/main/java/com/fs/complaint/vo/FsComplaintCategoryListVO.java

@@ -1,50 +0,0 @@
-package com.fs.complaint.vo;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
-
-import java.time.LocalDateTime;
-
-/**
- * 投诉分类列表VO
- */
-@Data
-public class FsComplaintCategoryListVO {
-
-    /**
-     * 主键ID
-     */
-    private Long id;
-
-    /**
-     * 分类名称
-     */
-    private String categoryName;
-
-    /**
-     * 分类编码
-     */
-    private String categoryCode;
-
-    /**
-     * 排序
-     */
-    private Integer sortOrder;
-
-    /**
-     * 状态:1-启用,0-禁用
-     */
-    private Integer status;
-
-    /**
-     * 创建时间
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime createTime;
-
-    /**
-     * 更新时间
-     */
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private LocalDateTime updateTime;
-}

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

@@ -66,6 +66,7 @@ public interface FsUserCourseVideoRedPackageMapper
      * @return 结果
      * @return 结果
      */
      */
     public int deleteFsUserCourseVideoRedPackageByIds(Long[] ids);
     public int deleteFsUserCourseVideoRedPackageByIds(Long[] ids);
+    public int deleteFsUserCourseVideoRedPackageByVedioIds(Long[] ids);
     @Update("INSERT INTO fs_user_course_video_red_package (company_id, video_id, red_packet_money) " +
     @Update("INSERT INTO fs_user_course_video_red_package (company_id, video_id, red_packet_money) " +
             "VALUES (#{companyId}, #{videoId}, #{redPacketMoney}) " +
             "VALUES (#{companyId}, #{videoId}, #{redPacketMoney}) " +
             "ON DUPLICATE KEY UPDATE red_packet_money = VALUES(red_packet_money);")
             "ON DUPLICATE KEY UPDATE red_packet_money = VALUES(red_packet_money);")

+ 8 - 8
fs-service/src/main/java/com/fs/course/service/IFsCourseProductOrderService.java

@@ -16,14 +16,14 @@ import com.fs.his.param.FsCourseProductOrderRefundParam;
 
 
 /**
 /**
  * 拍单商品订单Service接口
  * 拍单商品订单Service接口
- * 
+ *
  * @author fs
  * @author fs
  * @date 2025-07-28
  * @date 2025-07-28
  */
  */
 public interface IFsCourseProductOrderService extends IService<FsCourseProductOrder>{
 public interface IFsCourseProductOrderService extends IService<FsCourseProductOrder>{
     /**
     /**
      * 查询拍单商品订单
      * 查询拍单商品订单
-     * 
+     *
      * @param courseOrderId 拍单商品订单主键
      * @param courseOrderId 拍单商品订单主键
      * @return 拍单商品订单
      * @return 拍单商品订单
      */
      */
@@ -31,7 +31,7 @@ public interface IFsCourseProductOrderService extends IService<FsCourseProductOr
 
 
     /**
     /**
      * 查询拍单商品订单列表
      * 查询拍单商品订单列表
-     * 
+     *
      * @param param 拍单商品订单
      * @param param 拍单商品订单
      * @return 拍单商品订单集合
      * @return 拍单商品订单集合
      */
      */
@@ -39,7 +39,7 @@ public interface IFsCourseProductOrderService extends IService<FsCourseProductOr
 
 
     /**
     /**
      * 新增拍单商品订单
      * 新增拍单商品订单
-     * 
+     *
      * @param fsCourseProductOrder 拍单商品订单
      * @param fsCourseProductOrder 拍单商品订单
      * @return 结果
      * @return 结果
      */
      */
@@ -47,7 +47,7 @@ public interface IFsCourseProductOrderService extends IService<FsCourseProductOr
 
 
     /**
     /**
      * 修改拍单商品订单
      * 修改拍单商品订单
-     * 
+     *
      * @param fsCourseProductOrder 拍单商品订单
      * @param fsCourseProductOrder 拍单商品订单
      * @return 结果
      * @return 结果
      */
      */
@@ -55,7 +55,7 @@ public interface IFsCourseProductOrderService extends IService<FsCourseProductOr
 
 
     /**
     /**
      * 批量删除拍单商品订单
      * 批量删除拍单商品订单
-     * 
+     *
      * @param courseOrderIds 需要删除的拍单商品订单主键集合
      * @param courseOrderIds 需要删除的拍单商品订单主键集合
      * @return 结果
      * @return 结果
      */
      */
@@ -63,7 +63,7 @@ public interface IFsCourseProductOrderService extends IService<FsCourseProductOr
 
 
     /**
     /**
      * 删除拍单商品订单信息
      * 删除拍单商品订单信息
-     * 
+     *
      * @param courseOrderId 拍单商品订单主键
      * @param courseOrderId 拍单商品订单主键
      * @return 结果
      * @return 结果
      */
      */
@@ -79,7 +79,7 @@ public interface IFsCourseProductOrderService extends IService<FsCourseProductOr
 
 
     R payment(FsCourseProductOrderDoPayParam param);
     R payment(FsCourseProductOrderDoPayParam param);
 
 
-    R  payConfirm(String orderSn,String payCode, String tradeNo,String payType,Integer type);
+    R  payConfirm(String orderSn,String payCode, String tradeNo,String payType,Integer type,String bankTransactionId,String bankSerialNo);
 
 
     R refund(FsCourseProductOrderRefundParam param);
     R refund(FsCourseProductOrderRefundParam param);
 
 

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

@@ -73,7 +73,7 @@ public interface IFsUserCourseOrderService
 
 
     R payment(FsUserCourseOrderDoPayParam param);
     R payment(FsUserCourseOrderDoPayParam param);
 
 
-    R  payConfirm(String orderSn,String payCode, String tradeNo,String payType,Integer type);
+    R  payConfirm(String orderSn,String payCode, String tradeNo,String payType,Integer type,String bankTransactionId,String bankSerialNo);
 
 
     R computeOrder(FsUserCourseOrderComputeParam param);
     R computeOrder(FsUserCourseOrderComputeParam param);
 
 

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

@@ -75,7 +75,7 @@ public interface IFsUserVipOrderService
 
 
     R payment(FsUserVipOrderPayUParam param);
     R payment(FsUserVipOrderPayUParam param);
 
 
-    R payConfirm(String orderSn,String payCode, String tradeNo,String payType,Integer type);
+    R payConfirm(String orderSn,String payCode, String tradeNo,String payType,Integer type,String bankTransactionId,String bankSerialNo);
 
 
     R aliPayment(FsUserVipOrderPayUParam param);
     R aliPayment(FsUserVipOrderPayUParam param);
 }
 }

+ 10 - 8
fs-service/src/main/java/com/fs/course/service/impl/FsCourseProductOrderServiceImpl.java

@@ -76,7 +76,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 
 /**
 /**
  * 拍单商品订单Service业务层处理
  * 拍单商品订单Service业务层处理
- * 
+ *
  * @author fs
  * @author fs
  * @date 2025-07-28
  * @date 2025-07-28
  */
  */
@@ -131,7 +131,7 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
 
 
     /**
     /**
      * 查询拍单商品订单
      * 查询拍单商品订单
-     * 
+     *
      * @param courseOrderId 拍单商品订单主键
      * @param courseOrderId 拍单商品订单主键
      * @return 拍单商品订单
      * @return 拍单商品订单
      */
      */
@@ -143,7 +143,7 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
 
 
     /**
     /**
      * 查询拍单商品订单列表
      * 查询拍单商品订单列表
-     * 
+     *
      * @param param 拍单商品订单
      * @param param 拍单商品订单
      * @return 拍单商品订单
      * @return 拍单商品订单
      */
      */
@@ -171,7 +171,7 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
 
 
     /**
     /**
      * 新增拍单商品订单
      * 新增拍单商品订单
-     * 
+     *
      * @param fsCourseProductOrder 拍单商品订单
      * @param fsCourseProductOrder 拍单商品订单
      * @return 结果
      * @return 结果
      */
      */
@@ -184,7 +184,7 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
 
 
     /**
     /**
      * 修改拍单商品订单
      * 修改拍单商品订单
-     * 
+     *
      * @param fsCourseProductOrder 拍单商品订单
      * @param fsCourseProductOrder 拍单商品订单
      * @return 结果
      * @return 结果
      */
      */
@@ -197,7 +197,7 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
 
 
     /**
     /**
      * 批量删除拍单商品订单
      * 批量删除拍单商品订单
-     * 
+     *
      * @param courseOrderIds 需要删除的拍单商品订单主键
      * @param courseOrderIds 需要删除的拍单商品订单主键
      * @return 结果
      * @return 结果
      */
      */
@@ -209,7 +209,7 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
 
 
     /**
     /**
      * 删除拍单商品订单信息
      * 删除拍单商品订单信息
-     * 
+     *
      * @param courseOrderId 拍单商品订单主键
      * @param courseOrderId 拍单商品订单主键
      * @return 结果
      * @return 结果
      */
      */
@@ -445,7 +445,7 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
     }
     }
 
 
     @Override
     @Override
-    public R payConfirm(String orderSn, String payCode, String tradeNo, String payType, Integer type) {
+    public R payConfirm(String orderSn, String payCode, String tradeNo, String payType, Integer type,String bankTransactionId,String bankSerialNo){
         logger.info("进入拍商品订单支付回调 orderSn: {}, payCode: {}, tradeNo: {}, payType: {}, type: {}",
         logger.info("进入拍商品订单支付回调 orderSn: {}, payCode: {}, tradeNo: {}, payType: {}, type: {}",
                 orderSn, payCode, tradeNo, payType, type);
                 orderSn, payCode, tradeNo, payType, type);
         FsCourseProductOrder order = null;
         FsCourseProductOrder order = null;
@@ -458,6 +458,8 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
                     paymentMap.setStatus(1);
                     paymentMap.setStatus(1);
                     paymentMap.setPayTime(new Date());
                     paymentMap.setPayTime(new Date());
                     paymentMap.setTradeNo(tradeNo);
                     paymentMap.setTradeNo(tradeNo);
+                    paymentMap.setBankSerialNo(bankSerialNo);
+                    paymentMap.setBankTransactionId(bankTransactionId);
                     if(payType.equals(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode())){
                     if(payType.equals(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode())){
                         paymentMap.setPayTypeCode(PayType.WECHAT_MINI_PROGRAM_PAYMENT.name());
                         paymentMap.setPayTypeCode(PayType.WECHAT_MINI_PROGRAM_PAYMENT.name());
                     }
                     }

+ 21 - 27
fs-service/src/main/java/com/fs/course/service/impl/FsCourseTrafficLogServiceImpl.java

@@ -225,26 +225,25 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
 
 
         double trafficGB = account / trafficPrice;
         double trafficGB = account / trafficPrice;
         long trafficKB = (long) (trafficGB * 1024 * 1024);
         long trafficKB = (long) (trafficGB * 1024 * 1024);
+        long trafficB = trafficKB * 1024;
 
 
-        System.out.println("充值金额:" + account + " 元,对应可用流量:" + trafficKB + " KB");
+        System.out.println("充值金额:" + account + " 元,对应可用流量:" + trafficKB + " KB (" + trafficB + " B)");
 
 
         long updatedTrafficKB = 0L;
         long updatedTrafficKB = 0L;
-        int pageSize = 1000;  // 每次查询1000条
-        int pageNum = 0;      // 分页页码
-        int loopCount = 0;    // 查询次数
-        int maxLoop = 20;     // 最大循环次数
+        int pageSize = 1000;
+        int pageNum = 0;
+        int loopCount = 0;
+        int maxLoop = 20;
 
 
-        List<Long> idsToUpdate = new ArrayList<>();       // 用于更新状态为1的ID
-        Set<Long> processedIds = new HashSet<>();         // 用于去重
-        long remainingTrafficKB = trafficKB;              // 还需补充的流量
-        long totalInternetTrafficRemaining = 0L;          // 记录未处理的流量总和
+        List<Long> idsToUpdate = new ArrayList<>();
+        Set<Long> processedIds = new HashSet<>();
+        long remainingTrafficKB = trafficKB;
+        long totalInternetTrafficRemaining = 0L;
 
 
-        // 第一阶段:处理需要用于充值的记录
         while (updatedTrafficKB < trafficKB && loopCount < maxLoop) {
         while (updatedTrafficKB < trafficKB && loopCount < maxLoop) {
             loopCount++;
             loopCount++;
             int offset = pageNum * pageSize;
             int offset = pageNum * pageSize;
 
 
-            // 查询当前分页的数据
             List<TrafficRecord> trafficRecords =
             List<TrafficRecord> trafficRecords =
                     fsCourseTrafficLogMapper.findUnusedRecordsWithTraffic(
                     fsCourseTrafficLogMapper.findUnusedRecordsWithTraffic(
                             internetTrafficParam.getCompanyId(), offset, pageSize);
                             internetTrafficParam.getCompanyId(), offset, pageSize);
@@ -252,15 +251,12 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
             if (trafficRecords.isEmpty()) {
             if (trafficRecords.isEmpty()) {
                 break;
                 break;
             }
             }
-
-            // 处理当前批次的数据
             for (TrafficRecord record : trafficRecords) {
             for (TrafficRecord record : trafficRecords) {
                 Long logId = record.getLogId();
                 Long logId = record.getLogId();
 
 
                 if (processedIds.contains(logId)) {
                 if (processedIds.contains(logId)) {
                     continue;
                     continue;
                 }
                 }
-
                 if (updatedTrafficKB < trafficKB) {
                 if (updatedTrafficKB < trafficKB) {
                     updatedTrafficKB += record.getInternetTraffic();
                     updatedTrafficKB += record.getInternetTraffic();
                     idsToUpdate.add(logId);
                     idsToUpdate.add(logId);
@@ -281,12 +277,11 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
             pageNum++;
             pageNum++;
         }
         }
 
 
-        // 第二阶段:将所有未处理的记录状态改为3
         List<Long> allUnprocessedIds = new ArrayList<>();
         List<Long> allUnprocessedIds = new ArrayList<>();
-        pageNum = 0;  // 重置分页
+        pageNum = 0;
         boolean hasMore = true;
         boolean hasMore = true;
 
 
-        while (hasMore && loopCount < maxLoop * 2) {  // 扩大循环次数限制
+        while (hasMore && loopCount < maxLoop * 2) {
             loopCount++;
             loopCount++;
             int offset = pageNum * pageSize;
             int offset = pageNum * pageSize;
 
 
@@ -301,26 +296,22 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
 
 
             for (TrafficRecord record : allRecords) {
             for (TrafficRecord record : allRecords) {
                 Long logId = record.getLogId();
                 Long logId = record.getLogId();
-                if (!idsToUpdate.contains(logId)) {  // 不是已处理的记录
+                if (!idsToUpdate.contains(logId)) {
                     allUnprocessedIds.add(logId);
                     allUnprocessedIds.add(logId);
                 }
                 }
             }
             }
 
 
             pageNum++;
             pageNum++;
         }
         }
-
-        // 更新数据库状态
         if (!idsToUpdate.isEmpty()) {
         if (!idsToUpdate.isEmpty()) {
             fsCourseTrafficLogMapper.updateStatusByIds(idsToUpdate, 1);
             fsCourseTrafficLogMapper.updateStatusByIds(idsToUpdate, 1);
             System.out.println("共更新状态为1的记录数:" + idsToUpdate.size());
             System.out.println("共更新状态为1的记录数:" + idsToUpdate.size());
         }
         }
-
         if (!allUnprocessedIds.isEmpty()) {
         if (!allUnprocessedIds.isEmpty()) {
             fsCourseTrafficLogMapper.updateStatusByIds(allUnprocessedIds, 3);
             fsCourseTrafficLogMapper.updateStatusByIds(allUnprocessedIds, 3);
             System.out.println("共更新状态为3的记录数:" + allUnprocessedIds.size());
             System.out.println("共更新状态为3的记录数:" + allUnprocessedIds.size());
         }
         }
 
 
-        // 剩余的计算和输出逻辑保持不变...
         Long count = fsCourseTrafficLogMapper.findRecordsNum(internetTrafficParam.getCompanyId());
         Long count = fsCourseTrafficLogMapper.findRecordsNum(internetTrafficParam.getCompanyId());
         long overflowTrafficKB = Math.max(0, updatedTrafficKB - trafficKB) + count;
         long overflowTrafficKB = Math.max(0, updatedTrafficKB - trafficKB) + count;
         if (overflowTrafficKB > 0) {
         if (overflowTrafficKB > 0) {
@@ -329,13 +320,16 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
 
 
         System.out.println("充值总流量:" + trafficKB + " KB");
         System.out.println("充值总流量:" + trafficKB + " KB");
         System.out.println("已使用流量:" + updatedTrafficKB + " KB");
         System.out.println("已使用流量:" + updatedTrafficKB + " KB");
-        long finalRemainingTrafficKB = Math.max(0, trafficKB - updatedTrafficKB);
-        System.out.println("最终剩余流量:" + finalRemainingTrafficKB + " KB");
 
 
-        // 系统配置更新逻辑保持不变...
+
+        // 系统配置更新逻辑 - 使用字节为单位
         SysConfig sysConfig = iSysConfigService.selectConfigByConfigKey("redPacket.Traffic.config");
         SysConfig sysConfig = iSysConfigService.selectConfigByConfigKey("redPacket.Traffic.config");
-        String trafficCount = finalRemainingTrafficKB == 0 ?
-                "-" + overflowTrafficKB : String.valueOf(finalRemainingTrafficKB);
+
+        // 计算溢出流量(字节)
+        long overflowTrafficB = updatedTrafficKB * 1024;
+
+        Long sum = Long.parseLong(sysConfig.getConfigValue()) + overflowTrafficB;
+        String trafficCount = sum+"";
 
 
         if (ObjectUtils.isEmpty(sysConfig)) {
         if (ObjectUtils.isEmpty(sysConfig)) {
             sysConfig = new SysConfig();
             sysConfig = new SysConfig();

+ 8 - 1
fs-service/src/main/java/com/fs/course/service/impl/FsCourseWatchLogServiceImpl.java

@@ -749,7 +749,14 @@ public class FsCourseWatchLogServiceImpl extends ServiceImpl<FsCourseWatchLogMap
             watchLog.setDuration(duration);
             watchLog.setDuration(duration);
 
 
             //取对应视频的时长
             //取对应视频的时长
-            Long videoDuration = getVideoDuration(videoId);
+            Long videoDuration = 0L;
+            try {
+                videoDuration = getVideoDuration(videoId);
+            }catch (Exception e){
+                log.error("视频时长识别错误:{}", key);
+                continue;
+            }
+
             if (videoDuration != null && videoDuration != 0) {
             if (videoDuration != null && videoDuration != 0) {
                 boolean complete = false;
                 boolean complete = false;
                 // 判断百分比
                 // 判断百分比

+ 5 - 3
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseOrderServiceImpl.java

@@ -390,7 +390,7 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
 
 
         if(user!=null&& StringUtils.isNotEmpty(openId)) {
         if(user!=null&& StringUtils.isNotEmpty(openId)) {
             if (order.getPayMoney().compareTo(new BigDecimal(0)) == 0) {
             if (order.getPayMoney().compareTo(new BigDecimal(0)) == 0) {
-                this.payConfirm(order.getOrderCode(), "", "", "", 2);
+                this.payConfirm(order.getOrderCode(), "", "", "", 2,null,null);
                 return R.ok().put("isPay", 1);
                 return R.ok().put("isPay", 1);
             } else {
             } else {
                 String payCode =  OrderCodeUtils.getOrderSn();
                 String payCode =  OrderCodeUtils.getOrderSn();
@@ -584,7 +584,7 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
                 }
                 }
             }
             }
             else{
             else{
-                this.payConfirm(order.getOrderCode(),"","","",2);
+                this.payConfirm(order.getOrderCode(),"","","",2,null,null);
                 return R.ok().put("isPay",1);
                 return R.ok().put("isPay",1);
             }
             }
         }
         }
@@ -596,7 +596,7 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
 
 
     @Override
     @Override
     @Transactional
     @Transactional
-    public R payConfirm(String orderSn, String payCode, String tradeNo, String payType, Integer type) {
+    public R payConfirm(String orderSn, String payCode, String tradeNo, String payType, Integer type,String bankTransactionId,String bankSerialNo){
         Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
         Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
         try {
         try {
             FsUserCourseOrder order=null;
             FsUserCourseOrder order=null;
@@ -609,6 +609,8 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
                         paymentMap.setStatus(1);
                         paymentMap.setStatus(1);
                         paymentMap.setPayTime(new Date());
                         paymentMap.setPayTime(new Date());
                         paymentMap.setTradeNo(tradeNo);
                         paymentMap.setTradeNo(tradeNo);
+                        paymentMap.setBankSerialNo(bankSerialNo);
+                        paymentMap.setBankTransactionId(bankTransactionId);
                         if(payType.equals(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode())){
                         if(payType.equals(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode())){
                             paymentMap.setPayTypeCode(PayType.WECHAT_MINI_PROGRAM_PAYMENT.name());
                             paymentMap.setPayTypeCode(PayType.WECHAT_MINI_PROGRAM_PAYMENT.name());
                         }
                         }

+ 1 - 1
fs-service/src/main/java/com/fs/course/service/impl/FsUserCoursePeriodDaysServiceImpl.java

@@ -133,7 +133,7 @@ public class FsUserCoursePeriodDaysServiceImpl extends ServiceImpl<FsUserCourseP
         if(!periodDayIds.isEmpty()){
         if(!periodDayIds.isEmpty()){
             flag = fsUserCoursePeriodDaysMapper.updateBatchDelFlag(periodDayIds.toArray(new Long[0]),1);
             flag = fsUserCoursePeriodDaysMapper.updateBatchDelFlag(periodDayIds.toArray(new Long[0]),1);
             //删除红包记录
             //删除红包记录
-            fsUserCourseVideoRedPackageMapper.updateBatchDelFlag(videoIds.toArray(new Long[0]),1);
+            fsUserCourseVideoRedPackageMapper.deleteFsUserCourseVideoRedPackageByVedioIds(videoIds.toArray(new Long[0]));
         }
         }
         return flag;
         return flag;
     }
     }

+ 5 - 3
fs-service/src/main/java/com/fs/course/service/impl/FsUserVipOrderServiceImpl.java

@@ -249,7 +249,7 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
 
 
         if(user!=null&& StringUtils.isNotEmpty(openId)) {
         if(user!=null&& StringUtils.isNotEmpty(openId)) {
             if (order.getPayMoney().compareTo(new BigDecimal(0)) == 0) {
             if (order.getPayMoney().compareTo(new BigDecimal(0)) == 0) {
-                this.payConfirm(order.getOrderCode(), "", "", "", 2);
+                this.payConfirm(order.getOrderCode(), "", "", "", 2,null,null);
                 return R.ok().put("isPay", 1);
                 return R.ok().put("isPay", 1);
             } else {
             } else {
                 String payCode =  OrderCodeUtils.getOrderSn();
                 String payCode =  OrderCodeUtils.getOrderSn();
@@ -434,7 +434,7 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
                 }
                 }
             }
             }
             else{
             else{
-                this.payConfirm(order.getOrderCode(),"","","",2);
+                this.payConfirm(order.getOrderCode(),"","","",2,null,null);
                 return R.ok().put("isPay",1);
                 return R.ok().put("isPay",1);
             }
             }
         }
         }
@@ -446,7 +446,7 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
 
 
     @Override
     @Override
     @Transactional
     @Transactional
-    public R payConfirm(String orderSn, String payCode, String tradeNo, String payType, Integer type) {
+    public R payConfirm(String orderSn, String payCode, String tradeNo, String payType, Integer type,String bankTransactionId,String bankSerialNo){
         Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
         Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
         try {
         try {
             FsUserVipOrder order=null;
             FsUserVipOrder order=null;
@@ -459,6 +459,8 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
                         paymentMap.setStatus(1);
                         paymentMap.setStatus(1);
                         paymentMap.setPayTime(new Date());
                         paymentMap.setPayTime(new Date());
                         paymentMap.setTradeNo(tradeNo);
                         paymentMap.setTradeNo(tradeNo);
+                        paymentMap.setBankSerialNo(bankSerialNo);
+                        paymentMap.setBankTransactionId(bankTransactionId);
                         if(payType.equals(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode())){
                         if(payType.equals(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode())){
                             paymentMap.setPayTypeCode(PayType.WECHAT_MINI_PROGRAM_PAYMENT.name());
                             paymentMap.setPayTypeCode(PayType.WECHAT_MINI_PROGRAM_PAYMENT.name());
                         }
                         }

+ 3 - 0
fs-service/src/main/java/com/fs/course/vo/newfs/FsUserCourseVideoPageListVO.java

@@ -58,6 +58,9 @@ public class FsUserCourseVideoPageListVO extends BaseEntity {
     @ApiModelProperty(value = "营期id")
     @ApiModelProperty(value = "营期id")
     private Long periodId;
     private Long periodId;
 
 
+    @ApiModelProperty(value = "营期名称")
+    private String periodName;
+
     @ApiModelProperty(value = "营期课程ID")
     @ApiModelProperty(value = "营期课程ID")
     private Long id;
     private Long id;
 
 

+ 2 - 1
fs-service/src/main/java/com/fs/erp/http/JstErpHttpServiceImpl.java

@@ -13,8 +13,9 @@ import com.fs.erp.dto.*;
 import com.fs.erp.service.impl.JstTokenService;
 import com.fs.erp.service.impl.JstTokenService;
 import com.fs.erp.utils.SignUtil;
 import com.fs.erp.utils.SignUtil;
 import com.fs.ybPay.dto.RefundOrderDTO;
 import com.fs.ybPay.dto.RefundOrderDTO;
+import com.hc.openapi.tool.util.ObjectUtils;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang.ObjectUtils;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;

+ 2 - 1
fs-service/src/main/java/com/fs/erp/service/impl/FsJstAftersalePushServiceImpl.java

@@ -3,6 +3,7 @@ package com.fs.erp.service.impl;
 import cn.hutool.json.JSONUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.fs.common.utils.ExceptionUtil;
 import com.fs.common.utils.ExceptionUtil;
+import com.fs.common.utils.StringUtils;
 import com.fs.erp.constant.AfterSalesOrderStatusEnum;
 import com.fs.erp.constant.AfterSalesOrderStatusEnum;
 import com.fs.erp.constant.TaskStatusEnum;
 import com.fs.erp.constant.TaskStatusEnum;
 import com.fs.erp.domain.FsJstAftersalePush;
 import com.fs.erp.domain.FsJstAftersalePush;
@@ -19,7 +20,7 @@ import com.fs.his.mapper.FsStoreOrderMapper;
 import com.fs.his.service.IFsStoreOrderItemService;
 import com.fs.his.service.IFsStoreOrderItemService;
 import com.fs.ybPay.dto.RefundOrderDTO;
 import com.fs.ybPay.dto.RefundOrderDTO;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang.StringUtils;
+
 import org.apache.http.util.Asserts;
 import org.apache.http.util.Asserts;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;

+ 31 - 0
fs-service/src/main/java/com/fs/fastGpt/domain/FastgptExtUserTag.java

@@ -0,0 +1,31 @@
+package com.fs.fastGpt.domain;
+
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 处理新客标签对象 fastgpt_ext_user_tag
+ *
+ * @author fs
+ * @date 2025-09-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FastgptExtUserTag extends BaseEntity{
+
+    /** $column.columnComment */
+    private Long id;
+
+    /** 标签id */
+    @Excel(name = "标签id")
+    private String tagId;
+
+    /** 企业id */
+    @Excel(name = "企业id")
+    private String corpId;
+
+
+
+}

+ 67 - 0
fs-service/src/main/java/com/fs/fastGpt/mapper/FastgptExtUserTagMapper.java

@@ -0,0 +1,67 @@
+package com.fs.fastGpt.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.fastGpt.domain.FastgptExtUserTag;
+import com.fs.fastGpt.vo.FastgptExtUserTagVO;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 处理新客标签Mapper接口
+ * 
+ * @author fs
+ * @date 2025-09-10
+ */
+public interface FastgptExtUserTagMapper extends BaseMapper<FastgptExtUserTag>{
+    /**
+     * 查询处理新客标签
+     * 
+     * @param id 处理新客标签主键
+     * @return 处理新客标签
+     */
+    FastgptExtUserTag selectFastgptExtUserTagById(Long id);
+
+    /**
+     * 查询处理新客标签列表
+     * 
+     * @param fastgptExtUserTag 处理新客标签
+     * @return 处理新客标签集合
+     */
+    List<FastgptExtUserTag> selectFastgptExtUserTagList(FastgptExtUserTag fastgptExtUserTag);
+
+    /**
+     * 新增处理新客标签
+     * 
+     * @param fastgptExtUserTag 处理新客标签
+     * @return 结果
+     */
+    int insertFastgptExtUserTag(FastgptExtUserTag fastgptExtUserTag);
+
+    /**
+     * 修改处理新客标签
+     * 
+     * @param fastgptExtUserTag 处理新客标签
+     * @return 结果
+     */
+    int updateFastgptExtUserTag(FastgptExtUserTag fastgptExtUserTag);
+
+    /**
+     * 删除处理新客标签
+     * 
+     * @param id 处理新客标签主键
+     * @return 结果
+     */
+    int deleteFastgptExtUserTagById(Long id);
+
+    /**
+     * 批量删除处理新客标签
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteFastgptExtUserTagByIds(Long[] ids);
+
+    int addFastGptTagByCorpId(@Param("data") FastgptExtUserTagVO fastgptExtUserTag);
+
+    List<FastgptExtUserTag> selectFastgptExtUserTagByIds(@Param("ids") Long[] ids);
+}

+ 66 - 0
fs-service/src/main/java/com/fs/fastGpt/service/IFastgptExtUserTagService.java

@@ -0,0 +1,66 @@
+package com.fs.fastGpt.service;
+
+import java.util.List;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.common.core.domain.R;
+import com.fs.fastGpt.domain.FastgptExtUserTag;
+import com.fs.fastGpt.vo.FastgptExtUserTagVO;
+
+/**
+ * 处理新客标签Service接口
+ * 
+ * @author fs
+ * @date 2025-09-10
+ */
+public interface IFastgptExtUserTagService extends IService<FastgptExtUserTag>{
+    /**
+     * 查询处理新客标签
+     * 
+     * @param id 处理新客标签主键
+     * @return 处理新客标签
+     */
+    FastgptExtUserTag selectFastgptExtUserTagById(Long id);
+
+    /**
+     * 查询处理新客标签列表
+     * 
+     * @param fastgptExtUserTag 处理新客标签
+     * @return 处理新客标签集合
+     */
+    List<FastgptExtUserTag> selectFastgptExtUserTagList(FastgptExtUserTag fastgptExtUserTag);
+
+    /**
+     * 新增处理新客标签
+     * 
+     * @param fastgptExtUserTag 处理新客标签
+     * @return 结果
+     */
+    int insertFastgptExtUserTag(FastgptExtUserTag fastgptExtUserTag);
+
+    /**
+     * 修改处理新客标签
+     * 
+     * @param fastgptExtUserTag 处理新客标签
+     * @return 结果
+     */
+    int updateFastgptExtUserTag(FastgptExtUserTag fastgptExtUserTag);
+
+    /**
+     * 批量删除处理新客标签
+     * 
+     * @param ids 需要删除的处理新客标签主键集合
+     * @return 结果
+     */
+    int deleteFastgptExtUserTagByIds(Long[] ids);
+
+    /**
+     * 删除处理新客标签信息
+     * 
+     * @param id 处理新客标签主键
+     * @return 结果
+     */
+    int deleteFastgptExtUserTagById(Long id);
+
+    R addFastGptTagByCorpId(FastgptExtUserTagVO fastgptExtUserTag);
+
+}

+ 58 - 2
fs-service/src/main/java/com/fs/fastGpt/service/impl/AiHookServiceImpl.java

@@ -3,6 +3,7 @@ package com.fs.fastGpt.service.impl;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
 import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.fs.common.annotation.Excel;
 import com.fs.common.annotation.Excel;
 import com.fs.common.config.FSConfig;
 import com.fs.common.config.FSConfig;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.domain.R;
@@ -161,6 +162,10 @@ public class AiHookServiceImpl implements AiHookService {
     @Autowired
     @Autowired
     private IFastGptChatReplaceTextService fastGptChatReplaceTextService;
     private IFastGptChatReplaceTextService fastGptChatReplaceTextService;
 
 
+    private static final String AI_REPLY = "AI_REPLY:";
+    private static final String AI_REPLY_TAG = "AI_REPLY_TAG:";
+
+
     /** Ai半小时未回复提醒 **/
     /** Ai半小时未回复提醒 **/
     /**
     /**
      *
      *
@@ -376,7 +381,7 @@ public class AiHookServiceImpl implements AiHookService {
         }
         }
         if(user.getFastGptRoleId()==null){
         if(user.getFastGptRoleId()==null){
             log.error("未绑定角色");
             log.error("未绑定角色");
-            return R.ok();
+            return userIsReply(sender, uid, user);
         }
         }
         Long serverId = user.getServerId();
         Long serverId = user.getServerId();
         log.info("服务器id"+serverId);
         log.info("服务器id"+serverId);
@@ -388,7 +393,7 @@ public class AiHookServiceImpl implements AiHookService {
         //没用ai角色跳过
         //没用ai角色跳过
         if(role==null){
         if(role==null){
             log.error("没用ai角色跳过");
             log.error("没用ai角色跳过");
-            return R.ok();
+            return userIsReply(sender, uid, user);
         }
         }
         String modeConfig=role.getModeConfigJson();
         String modeConfig=role.getModeConfigJson();
         //key不为空
         //key不为空
@@ -598,6 +603,57 @@ public class AiHookServiceImpl implements AiHookService {
         return R.ok();
         return R.ok();
     }
     }
 
 
+    /**
+     * 根据发送者id设置用户是否为首次回复
+     * @param sender 发送者id
+     * @param uid   企微用户的uuid
+     * @param user  企微用户信息
+     * @return
+     */
+    private @Nullable R userIsReply(Long sender, String uid, QwUser user) {
+        Long qwExternalContactId = redisCache.getCacheObject(AI_REPLY + sender);
+        if(qwExternalContactId == null){
+            WxWorkVid2UserIdDTO wxWorkVid2UserIdDTO = new WxWorkVid2UserIdDTO();
+            wxWorkVid2UserIdDTO.setUser_id(Arrays.asList(sender));
+            wxWorkVid2UserIdDTO.setUuid(uid);
+            WxWorkResponseDTO<List<WxWorkVid2UserIdRespDTO>> WxWorkVid2UserIdRespDTO = wxWorkService.Vid2UserId(wxWorkVid2UserIdDTO, user.getServerId());
+            List<WxWorkVid2UserIdRespDTO> data = WxWorkVid2UserIdRespDTO.getData();
+            if (data==null|| data.isEmpty()){
+                log.error("未获取到extId"+wxWorkVid2UserIdDTO);
+                return R.ok();
+            }
+            com.fs.wxwork.dto.WxWorkVid2UserIdRespDTO dto = data.get(0);
+
+            QwExternalContact qwExternalContacts = qwExternalContactMapper.selectQwExternalContactByExternalUserIdAndQwUserId(dto.getOpenid(), user.getCorpId(), user.getQwUserId());
+            if (qwExternalContacts==null){
+                log.error("没有外部联系人" + "user:" + user);
+                return R.ok();
+            }
+            List<String> oldCache = redisCache.getCacheObject(AI_REPLY_TAG + user.getCorpId());
+            if(oldCache != null && !oldCache.isEmpty()){
+                QwExternalContact qwExternalContact = new QwExternalContact();
+                if(qwExternalContacts.getTagIds() != null && !qwExternalContacts.getTagIds().isEmpty() && !"[]".equals(qwExternalContacts.getTagIds())){
+                    List<String> parsedTags = JSON.parseArray(qwExternalContacts.getTagIds(), String.class);
+                    if (parsedTags != null && !parsedTags.isEmpty()) {
+                        for (String parsedTag : oldCache) {
+                            if (!oldCache.contains(parsedTag)) {
+                                oldCache.add(parsedTag);
+                            }
+                        }
+                    }
+                    qwExternalContact.setTagIds(JSON.toJSONString(oldCache));
+                }else if("[]".equals(qwExternalContacts.getTagIds()) || qwExternalContacts.getTagIds() == null){
+                    qwExternalContact.setTagIds(JSON.toJSONString(oldCache));
+                }
+                qwExternalContact.setId(qwExternalContacts.getId());
+                qwExternalContactMapper.updateQwExternalContact(qwExternalContact);
+            }
+            qwExternalContactMapper.updateQwExternalContactIsRePlyById(qwExternalContacts.getId());
+            redisCache.setCacheObject(AI_REPLY + sender,qwExternalContacts.getId());
+        }
+        return R.ok();
+    }
+
     /**
     /**
      * 通过用户发送的对话去查询用户是否为新客,是就删除sop,否就不做处理
      * 通过用户发送的对话去查询用户是否为新客,是就删除sop,否就不做处理
      * @param user
      * @param user

+ 145 - 0
fs-service/src/main/java/com/fs/fastGpt/service/impl/FastgptExtUserTagServiceImpl.java

@@ -0,0 +1,145 @@
+package com.fs.fastGpt.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.fs.common.core.domain.R;
+import com.fs.common.core.redis.RedisCache;
+import com.fs.common.utils.DateUtils;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.fastGpt.vo.FastgptExtUserTagVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.fs.fastGpt.mapper.FastgptExtUserTagMapper;
+import com.fs.fastGpt.domain.FastgptExtUserTag;
+import com.fs.fastGpt.service.IFastgptExtUserTagService;
+
+/**
+ * 处理新客标签Service业务层处理
+ * 
+ * @author fs
+ * @date 2025-09-10
+ */
+@Service
+public class FastgptExtUserTagServiceImpl extends ServiceImpl<FastgptExtUserTagMapper, FastgptExtUserTag> implements IFastgptExtUserTagService {
+
+    @Autowired
+    private FastgptExtUserTagMapper fastgptExtUserTagMapper;
+
+    @Autowired
+    private RedisCache redisCache;
+
+    private static final String AI_REPLY_TAG = "AI_REPLY_TAG:";
+
+    /**
+     * 查询处理新客标签
+     * 
+     * @param id 处理新客标签主键
+     * @return 处理新客标签
+     */
+    @Override
+    public FastgptExtUserTag selectFastgptExtUserTagById(Long id)
+    {
+        return baseMapper.selectFastgptExtUserTagById(id);
+    }
+
+    /**
+     * 查询处理新客标签列表
+     * 
+     * @param fastgptExtUserTag 处理新客标签
+     * @return 处理新客标签
+     */
+    @Override
+    public List<FastgptExtUserTag> selectFastgptExtUserTagList(FastgptExtUserTag fastgptExtUserTag)
+    {
+        return baseMapper.selectFastgptExtUserTagList(fastgptExtUserTag);
+    }
+
+    /**
+     * 新增处理新客标签
+     * 
+     * @param fastgptExtUserTag 处理新客标签
+     * @return 结果
+     */
+    @Override
+    public int insertFastgptExtUserTag(FastgptExtUserTag fastgptExtUserTag)
+    {
+        fastgptExtUserTag.setCreateTime(DateUtils.getNowDate());
+        return baseMapper.insertFastgptExtUserTag(fastgptExtUserTag);
+    }
+
+    /**
+     * 修改处理新客标签
+     * 
+     * @param fastgptExtUserTag 处理新客标签
+     * @return 结果
+     */
+    @Override
+    public int updateFastgptExtUserTag(FastgptExtUserTag fastgptExtUserTag)
+    {
+        return baseMapper.updateFastgptExtUserTag(fastgptExtUserTag);
+    }
+
+    /**
+     * 批量删除处理新客标签
+     * 
+     * @param ids 需要删除的处理新客标签主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFastgptExtUserTagByIds(Long[] ids)
+    {
+        List<FastgptExtUserTag> fastgptExtUserTags = fastgptExtUserTagMapper.selectFastgptExtUserTagByIds(ids);
+        int i = baseMapper.deleteFastgptExtUserTagByIds(ids);
+        if(i > 0){
+            if(fastgptExtUserTags != null && !fastgptExtUserTags.isEmpty()){
+                String corpId = fastgptExtUserTags.get(0).getCorpId();
+                List<String> oldCache = redisCache.getCacheObject(AI_REPLY_TAG + corpId);
+                for (FastgptExtUserTag fastgptExtUserTag : fastgptExtUserTags) {
+                    if(fastgptExtUserTag != null && fastgptExtUserTag.getTagId() != null){
+                        if(oldCache != null && !oldCache.isEmpty()){
+                            oldCache.remove(fastgptExtUserTag.getTagId());
+                        }
+                    }
+                }
+                redisCache.setCacheObject(AI_REPLY_TAG + corpId,oldCache);
+            }
+        }
+        return i;
+    }
+
+    /**
+     * 删除处理新客标签信息
+     * 
+     * @param id 处理新客标签主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFastgptExtUserTagById(Long id)
+    {
+        return baseMapper.deleteFastgptExtUserTagById(id);
+    }
+
+    @Override
+    public R addFastGptTagByCorpId(FastgptExtUserTagVO fastgptExtUserTag) {
+        int i = 0;
+        try {
+            i = fastgptExtUserTagMapper.addFastGptTagByCorpId(fastgptExtUserTag);
+        } catch (Exception e) {
+            return R.error("添加失败,存在重复的标签");
+        }
+        if(i > 0){
+            if(fastgptExtUserTag != null && fastgptExtUserTag.getTagIds() != null){
+                List<String> oldCache = redisCache.getCacheObject(AI_REPLY_TAG + fastgptExtUserTag.getCorpId());
+                if(oldCache != null && !oldCache.isEmpty()){
+                    oldCache.addAll(fastgptExtUserTag.getTagIds());
+                    redisCache.setCacheObject(AI_REPLY_TAG + fastgptExtUserTag.getCorpId(),oldCache);
+                }else{
+                    List<String> newCacheTagList = new ArrayList<>(fastgptExtUserTag.getTagIds());
+                    redisCache.setCacheObject(AI_REPLY_TAG + fastgptExtUserTag.getCorpId(),newCacheTagList);
+                }
+            }
+        }
+        return R.ok("添加成功");
+    }
+}

+ 34 - 0
fs-service/src/main/java/com/fs/fastGpt/vo/FastgptExtUserTagVO.java

@@ -0,0 +1,34 @@
+package com.fs.fastGpt.vo;
+
+import com.fs.common.annotation.Excel;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+/**
+ * 处理新客标签对象 fastgpt_ext_user_tag
+ *
+ * @author fs
+ * @date 2025-09-10
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FastgptExtUserTagVO extends BaseEntity{
+
+    /** $column.columnComment */
+    private Long id;
+
+    /** 标签id */
+    @Excel(name = "标签id")
+    private String tagId;
+
+    /** 企业id */
+    @Excel(name = "企业id")
+    private String corpId;
+
+    List<String> tagIds;
+
+
+}

+ 0 - 59
fs-service/src/main/java/com/fs/foods/domain/FsFoodRecord.java

@@ -1,59 +0,0 @@
-package com.fs.foods.domain;
-
-import lombok.Data;
-import lombok.Builder;
-import lombok.NoArgsConstructor;
-import lombok.AllArgsConstructor;
-
-import java.util.Date;
-import java.time.LocalDate;
-import java.time.LocalTime;
-
-/**
- * 饮食记录实体类
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class FsFoodRecord {
-
-    /**
-     * 主键ID
-     */
-    private Long id;
-
-    /**
-     * 用户ID
-     */
-    private Long userId;
-    /**
-     * 用户名
-     */
-    private String username;
-
-    /**
-     * 用餐日期
-     */
-    private LocalDate recordDate;
-
-    /**
-     * 记录时间点
-     */
-    private LocalTime recordTime;
-
-    /**
-     * 用餐情况描述
-     */
-    private String mealDescription;
-
-    /**
-     * 创建时间
-     */
-    private Date createdAt;
-
-    /**
-     * 更新时间
-     */
-    private Date updatedAt;
-}

+ 0 - 73
fs-service/src/main/java/com/fs/foods/mapper/FoodRecordMapper.java

@@ -1,73 +0,0 @@
-package com.fs.foods.mapper;
-
-import com.fs.foods.domain.FsFoodRecord;
-import com.fs.foods.param.FoodRecordQueryParam;
-import org.apache.ibatis.annotations.Insert;
-import org.apache.ibatis.annotations.Mapper;
-import org.apache.ibatis.annotations.Options;
-import org.apache.ibatis.annotations.Select;
-import org.apache.ibatis.annotations.Update;
-import org.apache.ibatis.annotations.Param;
-
-import java.time.LocalDate;
-import java.util.List;
-
-/**
- * 饮食记录数据访问接口
- */
-@Mapper
-public interface FoodRecordMapper {
-
-    /**
-     * 根据ID查询饮食记录
-     */
-    @Select("SELECT * FROM fs_food_records WHERE id = #{id}")
-    FsFoodRecord getById(@Param("id") Long id);
-
-    /**
-     * 获取用户某日的所有饮食记录
-     */
-    @Select("SELECT * FROM fs_food_records WHERE user_id = #{userId} AND record_date = #{recordDate} ORDER BY record_time")
-    List<FsFoodRecord> getByUserAndDate(@Param("userId") Long userId, @Param("recordDate") LocalDate recordDate);
-
-    /**
-     * 获取用户所有饮食记录
-     */
-    @Select("SELECT * FROM fs_food_records WHERE user_id = #{userId} ORDER BY record_date DESC, record_time DESC")
-    List<FsFoodRecord> getByUser(@Param("userId") Long userId);
-
-    /**
-     * 新增饮食记录
-     */
-    @Insert("INSERT INTO fs_food_records(user_id, record_date, record_time, meal_description) " +
-            "VALUES(#{userId}, #{recordDate}, #{recordTime}, #{mealDescription})")
-    @Options(useGeneratedKeys = true, keyProperty = "id")
-    int insert(FsFoodRecord foodRecord);
-
-    /**
-     * 更新饮食记录
-     */
-    @Update("UPDATE fs_food_records SET record_date = #{recordDate}, record_time = #{recordTime}, " +
-            "meal_description = #{mealDescription} WHERE id = #{id}")
-    int update(FsFoodRecord foodRecord);
-
-    /**
-     * 删除饮食记录
-     */
-    @Update("DELETE FROM fs_food_records WHERE id = #{id}")
-    int deleteById(@Param("id") Long id);
-
-    List<FsFoodRecord> selectFoodRecordList(FoodRecordQueryParam param);
-
-    List<FsFoodRecord> selectFoodRecordsByUserAndDate(FoodRecordQueryParam param);
-
-    int deleteFsFoodRecordByIds(Long[] ids);
-
-    Integer selectFoodRecordCount(FoodRecordQueryParam param);
-
-    Integer selectRecordDays(FoodRecordQueryParam param);
-
-    FsFoodRecord selectLatestRecord(Long userId);
-
-    List<FsFoodRecord> selectRecentFoodRecords(FoodRecordQueryParam param);
-}

+ 0 - 47
fs-service/src/main/java/com/fs/foods/param/FoodRecordAddParam.java

@@ -1,47 +0,0 @@
-package com.fs.foods.param;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import javax.validation.constraints.NotNull;
-import java.time.LocalDate;
-import java.time.LocalTime;
-
-/**
- * 新增饮食记录参数
- */
-@Data
-@ApiModel("新增饮食记录参数")
-public class FoodRecordAddParam {
-
-    /**
-     * 用餐日期
-     */
-    @ApiModelProperty("用餐日期")
-    @NotNull(message = "用餐日期不能为空")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private LocalDate recordDate;
-
-    /**
-     * 记录时间点
-     */
-    @ApiModelProperty("记录时间点")
-    @NotNull(message = "记录时间不能为空")
-    @DateTimeFormat(pattern = "HH:mm:ss")
-    private LocalTime recordTime;
-
-    /**
-     * 用餐情况描述
-     */
-    @ApiModelProperty("用餐情况描述")
-    @NotNull(message = "用餐描述不能为空")
-    private String mealDescription;
-
-    /**
-     * 用户ID
-     */
-    private Long userId;
-
-}

+ 0 - 48
fs-service/src/main/java/com/fs/foods/param/FoodRecordEditParam.java

@@ -1,48 +0,0 @@
-package com.fs.foods.param;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import javax.validation.constraints.NotNull;
-import java.time.LocalDate;
-import java.time.LocalTime;
-
-/**
- * 修改饮食记录参数
- */
-@Data
-@ApiModel("修改饮食记录参数")
-public class FoodRecordEditParam {
-
-    /**
-     * 主键ID
-     */
-    @ApiModelProperty("记录ID")
-    @NotNull(message = "记录ID不能为空")
-    private Long id;
-
-    /**
-     * 用餐日期
-     */
-    @ApiModelProperty("用餐日期")
-    @NotNull(message = "用餐日期不能为空")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private LocalDate recordDate;
-
-    /**
-     * 记录时间点
-     */
-    @ApiModelProperty("记录时间点")
-    @NotNull(message = "记录时间不能为空")
-    @DateTimeFormat(pattern = "HH:mm:ss")
-    private LocalTime recordTime;
-
-    /**
-     * 用餐情况描述
-     */
-    @ApiModelProperty("用餐情况描述")
-    @NotNull(message = "用餐描述不能为空")
-    private String mealDescription;
-}

+ 0 - 57
fs-service/src/main/java/com/fs/foods/param/FoodRecordQueryParam.java

@@ -1,57 +0,0 @@
-package com.fs.foods.param;
-
-import com.fs.common.core.domain.BaseEntity;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import org.springframework.format.annotation.DateTimeFormat;
-
-import java.time.LocalDate;
-
-/**
- * 饮食记录查询参数
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@ApiModel("饮食记录查询参数")
-public class FoodRecordQueryParam extends BaseEntity {
-
-    /**
-     * 用户ID
-     */
-    @ApiModelProperty("用户ID")
-    private Long userId;
-
-    /**
-     * 开始日期
-     */
-    @ApiModelProperty("开始日期")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private LocalDate startDate;
-
-    /**
-     * 结束日期
-     */
-    @ApiModelProperty("结束日期")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private LocalDate endDate;
-
-    /**
-     * 页码
-     */
-    @ApiModelProperty("页码")
-    private Integer pageNum = 1;
-
-    /**
-     * 页大小
-     */
-    @ApiModelProperty("页大小")
-    private Integer pageSize = 10;
-
-    /**
-     * 搜索描述关键词
-     */
-    @ApiModelProperty("搜索描述关键词")
-    private String keyword;
-}

+ 0 - 90
fs-service/src/main/java/com/fs/foods/service/IFsFoodRecordService.java

@@ -1,90 +0,0 @@
-package com.fs.foods.service;
-
-import com.fs.foods.domain.FsFoodRecord;
-import com.fs.foods.param.FoodRecordQueryParam;
-
-import java.time.LocalDate;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 饮食记录Service接口
- */
-public interface IFsFoodRecordService {
-
-    /**
-     * 查询饮食记录
-     *
-     * @param id 饮食记录主键
-     * @return 饮食记录
-     */
-    public FsFoodRecord selectFsFoodRecordById(Long id);
-
-    /**
-     * 查询饮食记录列表
-     *
-     * @param param 查询参数
-     * @return 饮食记录集合
-     */
-    public List<FsFoodRecord> selectFoodRecordList(FoodRecordQueryParam param);
-
-    /**
-     * 根据用户ID和日期查询饮食记录
-     *
-     * @param userId 用户ID
-     * @param recordDate 记录日期
-     * @return 饮食记录集合
-     */
-    public List<FsFoodRecord> selectFoodRecordsByUserAndDate(Long userId, LocalDate recordDate);
-
-    /**
-     * 新增饮食记录
-     *
-     * @param fsFoodRecord 饮食记录
-     * @return 结果
-     */
-    public int insertFsFoodRecord(FsFoodRecord fsFoodRecord);
-
-    /**
-     * 修改饮食记录
-     *
-     * @param fsFoodRecord 饮食记录
-     * @return 结果
-     */
-    public int updateFsFoodRecord(FsFoodRecord fsFoodRecord);
-
-    /**
-     * 批量删除饮食记录
-     *
-     * @param ids 需要删除的饮食记录主键集合
-     * @return 结果
-     */
-    public int deleteFsFoodRecordByIds(Long[] ids);
-
-    /**
-     * 删除饮食记录信息
-     *
-     * @param id 饮食记录主键
-     * @return 结果
-     */
-    public int deleteFsFoodRecordById(Long id);
-
-    /**
-     * 获取用户饮食记录统计信息
-     *
-     * @param userId 用户ID
-     * @param startDate 开始日期
-     * @param endDate 结束日期
-     * @return 统计信息
-     */
-    public Map<String, Object> getFoodRecordStats(Long userId, LocalDate startDate, LocalDate endDate);
-
-    /**
-     * 获取用户最近的饮食记录
-     *
-     * @param userId 用户ID
-     * @param limit 限制条数
-     * @return 饮食记录集合
-     */
-    public List<FsFoodRecord> selectRecentFoodRecords(Long userId, Integer limit);
-}

+ 0 - 179
fs-service/src/main/java/com/fs/foods/service/impl/FsFoodRecordServiceImpl.java

@@ -1,179 +0,0 @@
-package com.fs.foods.service.impl;
-
-import com.fs.common.utils.DateUtils;
-import com.fs.common.utils.StringUtils;
-import com.fs.foods.domain.FsFoodRecord;
-import com.fs.foods.mapper.FoodRecordMapper;
-import com.fs.foods.param.FoodRecordQueryParam;
-import com.fs.foods.service.IFsFoodRecordService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.time.LocalDate;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 饮食记录Service业务层处理
- */
-@Slf4j
-@Service
-public class FsFoodRecordServiceImpl implements IFsFoodRecordService {
-
-    @Autowired
-    private FoodRecordMapper fsFoodRecordMapper;
-
-    /**
-     * 查询饮食记录
-     *
-     * @param id 饮食记录主键
-     * @return 饮食记录
-     */
-    @Override
-    public FsFoodRecord selectFsFoodRecordById(Long id) {
-        return fsFoodRecordMapper.getById(id);
-    }
-
-    /**
-     * 查询饮食记录列表
-     *
-     * @param param 查询参数
-     * @return 饮食记录
-     */
-    @Override
-    public List<FsFoodRecord> selectFoodRecordList(FoodRecordQueryParam param) {
-        return fsFoodRecordMapper.selectFoodRecordList(param);
-    }
-
-    /**
-     * 根据用户ID和日期查询饮食记录
-     *
-     * @param userId 用户ID
-     * @param recordDate 记录日期
-     * @return 饮食记录集合
-     */
-    @Override
-    public List<FsFoodRecord> selectFoodRecordsByUserAndDate(Long userId, LocalDate recordDate) {
-        FoodRecordQueryParam param = new FoodRecordQueryParam();
-        param.setUserId(userId);
-        param.setStartDate(recordDate);
-        param.setEndDate(recordDate);
-        return fsFoodRecordMapper.selectFoodRecordsByUserAndDate(param);
-    }
-
-    /**
-     * 新增饮食记录
-     *
-     * @param fsFoodRecord 饮食记录
-     * @return 结果
-     */
-    @Override
-    public int insertFsFoodRecord(FsFoodRecord fsFoodRecord) {
-        fsFoodRecord.setCreatedAt(DateUtils.getNowDate());
-        return fsFoodRecordMapper.insert(fsFoodRecord);
-    }
-
-    /**
-     * 修改饮食记录
-     *
-     * @param fsFoodRecord 饮食记录
-     * @return 结果
-     */
-    @Override
-    public int updateFsFoodRecord(FsFoodRecord fsFoodRecord) {
-        fsFoodRecord.setUpdatedAt(DateUtils.getNowDate());
-        return fsFoodRecordMapper.update(fsFoodRecord);
-    }
-
-    /**
-     * 批量删除饮食记录
-     *
-     * @param ids 需要删除的饮食记录主键
-     * @return 结果
-     */
-    @Override
-    public int deleteFsFoodRecordByIds(Long[] ids) {
-        return fsFoodRecordMapper.deleteFsFoodRecordByIds(ids);
-    }
-
-    /**
-     * 删除饮食记录信息
-     *
-     * @param id 饮食记录主键
-     * @return 结果
-     */
-    @Override
-    public int deleteFsFoodRecordById(Long id) {
-        return fsFoodRecordMapper.deleteById(id);
-    }
-
-    /**
-     * 获取用户饮食记录统计信息
-     *
-     * @param userId 用户ID
-     * @param startDate 开始日期
-     * @param endDate 结束日期
-     * @return 统计信息
-     */
-    @Override
-    public Map<String, Object> getFoodRecordStats(Long userId, LocalDate startDate, LocalDate endDate) {
-        try {
-            // 如果没有指定日期范围,默认查询最近30天
-            if (startDate == null || endDate == null) {
-                endDate = LocalDate.now();
-                startDate = endDate.minusDays(30);
-            }
-
-            FoodRecordQueryParam param = new FoodRecordQueryParam();
-            param.setUserId(userId);
-            param.setStartDate(startDate);
-            param.setEndDate(endDate);
-
-            // 获取总记录数
-            Integer totalCount = fsFoodRecordMapper.selectFoodRecordCount(param);
-
-            // 获取记录天数
-            Integer recordDays = fsFoodRecordMapper.selectRecordDays(param);
-
-            // 获取平均每日记录数
-            Double avgRecordsPerDay = recordDays > 0 ? (double) totalCount / recordDays : 0.0;
-
-            // 获取最近一次记录时间
-            FsFoodRecord latestRecord = fsFoodRecordMapper.selectLatestRecord(userId);
-
-            Map<String, Object> stats = new HashMap<>();
-            stats.put("totalCount", totalCount);
-            stats.put("recordDays", recordDays);
-            stats.put("avgRecordsPerDay", String.format("%.1f", avgRecordsPerDay));
-            stats.put("latestRecordDate", latestRecord != null ? latestRecord.getRecordDate() : null);
-            stats.put("startDate", startDate);
-            stats.put("endDate", endDate);
-
-            return stats;
-        } catch (Exception e) {
-            log.error("获取饮食记录统计异常:", e);
-            return new HashMap<>();
-        }
-    }
-
-    /**
-     * 获取用户最近的饮食记录
-     *
-     * @param userId 用户ID
-     * @param limit 限制条数
-     * @return 饮食记录集合
-     */
-    @Override
-    public List<FsFoodRecord> selectRecentFoodRecords(Long userId, Integer limit) {
-        FoodRecordQueryParam param = new FoodRecordQueryParam();
-        param.setUserId(userId);
-        if (limit != null && limit > 0) {
-            param.setPageSize(limit);
-        } else {
-            param.setPageSize(10); // 默认10条
-        }
-        return fsFoodRecordMapper.selectRecentFoodRecords(param);
-    }
-}

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