Kaynağa Gözat

Merge branch 'refs/heads/master' into openIm

# Conflicts:
#	fs-service/src/main/java/com/fs/his/service/impl/FsUserServiceImpl.java
wjj 3 gün önce
ebeveyn
işleme
a9c5dfc3b4
100 değiştirilmiş dosya ile 1420 ekleme ve 5152 silme
  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. 0 134
      fs-admin/src/main/java/com/fs/hisStore/FsStoreSCRMController.java
  11. 3 4
      fs-admin/src/main/java/com/fs/hisStore/controller/FsStoreProductScrmController.java
  12. 0 155
      fs-admin/src/main/java/com/fs/medical/MeasurementUnitController.java
  13. 0 157
      fs-admin/src/main/java/com/fs/medical/MedicalIndicatorController.java
  14. 0 160
      fs-admin/src/main/java/com/fs/medical/PhysicalExamReportController.java
  15. 0 190
      fs-admin/src/main/java/com/fs/medical/ReportIndicatorResultController.java
  16. 12 0
      fs-admin/src/main/java/com/fs/qw/controller/QwTagGroupController.java
  17. 0 82
      fs-admin/src/main/java/com/fs/saler/CompetitorInfoController.java
  18. 0 73
      fs-admin/src/main/java/com/fs/saler/FsServiceGoodsController.java
  19. 9 8
      fs-common-api/src/main/java/com/fs/framework/config/MyBatisConfig.java
  20. 0 42
      fs-common/src/main/java/com/fs/common/utils/DateUtils.java
  21. 0 3
      fs-common/src/main/java/com/fs/common/utils/DictUtils.java
  22. 0 205
      fs-common/src/main/java/com/fs/common/utils/FileNameExtractor.java
  23. 2 1
      fs-company-app/src/main/java/com/fs/app/controller/FsUserCourseVideoController.java
  24. 0 155
      fs-company-app/src/main/java/com/fs/app/controller/FsUserHealthDataController.java
  25. 0 139
      fs-company-app/src/main/java/com/fs/app/controller/FsUserHealthProfileController.java
  26. 0 111
      fs-company-app/src/main/java/com/fs/app/controller/FsUserInfoController.java
  27. 0 96
      fs-company-app/src/main/java/com/fs/app/controller/FsUserPayCompetitorsRecordController.java
  28. 0 96
      fs-company-app/src/main/java/com/fs/app/controller/FsUserPayRecordController.java
  29. 0 13
      fs-company-app/src/main/java/com/fs/app/exception/FSExceptionHandler.java
  30. 25 0
      fs-company/src/main/java/com/fs/company/controller/company/CompanyRechargeController.java
  31. 99 3
      fs-company/src/main/java/com/fs/company/controller/company/CompanyUserController.java
  32. 0 1
      fs-company/src/main/java/com/fs/company/controller/qw/SopUserLogsInfoController.java
  33. 1 1
      fs-company/src/main/java/com/fs/hisStore/controller/FsStoreProductScrmController.java
  34. 3 0
      fs-framework/src/main/java/com/fs/framework/config/LogInterceptor.java
  35. 13 12
      fs-ipad-task/src/main/java/com/fs/app/task/SendMsg.java
  36. 0 12
      fs-qw-api/src/main/java/com/fs/app/service/QwDataCallbackService.java
  37. 14 11
      fs-qw-task/src/main/java/com/fs/app/taskService/impl/SopLogsTaskServiceImpl.java
  38. 72 0
      fs-qwhook-sop/src/main/java/com/fs/app/controller/ApisQwUserController.java
  39. 70 0
      fs-qwhook-sop/src/main/java/com/fs/app/controller/QwUserController.java
  40. 16 0
      fs-qwhook-sop/src/main/java/com/fs/app/params/LoginBindCompanyParam.java
  41. 8 7
      fs-qwhook-sop/src/main/java/com/fs/framework/config/MyBatisConfig.java
  42. 2 0
      fs-service/src/main/java/com/fs/aiTongueApi/config/AiTongueConfig.java
  43. 58 0
      fs-service/src/main/java/com/fs/aiTongueApi/domain/enums/TongueTypeEnums.java
  44. 14 0
      fs-service/src/main/java/com/fs/aiTongueApi/domain/inner/ConfidenceDataNew.java
  45. 14 0
      fs-service/src/main/java/com/fs/aiTongueApi/domain/inner/TongueInfo.java
  46. 3 0
      fs-service/src/main/java/com/fs/aiTongueApi/service/AiTongueService.java
  47. 187 2
      fs-service/src/main/java/com/fs/aiTongueApi/service/impl/AiTongueServiceImpl.java
  48. 4 149
      fs-service/src/main/java/com/fs/company/domain/CompanyRecharge.java
  49. 2 2
      fs-service/src/main/java/com/fs/company/domain/CompanyUser.java
  50. 1 0
      fs-service/src/main/java/com/fs/company/mapper/CompanyRoleMapper.java
  51. 1 0
      fs-service/src/main/java/com/fs/company/param/CompanyRechargeParam.java
  52. 4 0
      fs-service/src/main/java/com/fs/company/service/ICompanyUserService.java
  53. 169 2
      fs-service/src/main/java/com/fs/company/service/impl/CompanyUserServiceImpl.java
  54. 17 350
      fs-service/src/main/java/com/fs/company/vo/CompanyUserImportVO.java
  55. 2 0
      fs-service/src/main/java/com/fs/company/vo/CompanyVO.java
  56. 0 65
      fs-service/src/main/java/com/fs/complaint/domain/FsComplaint.java
  57. 0 51
      fs-service/src/main/java/com/fs/complaint/domain/FsComplaintAttachment.java
  58. 0 55
      fs-service/src/main/java/com/fs/complaint/domain/FsComplaintCategory.java
  59. 0 20
      fs-service/src/main/java/com/fs/complaint/dto/ComplaintQueryDTO.java
  60. 0 29
      fs-service/src/main/java/com/fs/complaint/dto/SubmitComplaintDTO.java
  61. 0 16
      fs-service/src/main/java/com/fs/complaint/dto/UpdateComplaintDTO.java
  62. 0 59
      fs-service/src/main/java/com/fs/complaint/mapper/FsComplaintAttachmentMapper.java
  63. 0 66
      fs-service/src/main/java/com/fs/complaint/mapper/FsComplaintCategoryMapper.java
  64. 0 135
      fs-service/src/main/java/com/fs/complaint/mapper/FsComplaintMapper.java
  65. 0 28
      fs-service/src/main/java/com/fs/complaint/param/FsComplaintCategoryParam.java
  66. 0 52
      fs-service/src/main/java/com/fs/complaint/service/FsComplaintCategoryService.java
  67. 0 43
      fs-service/src/main/java/com/fs/complaint/service/FsComplaintService.java
  68. 0 68
      fs-service/src/main/java/com/fs/complaint/service/impl/FsComplaintCategoryServiceImpl.java
  69. 0 195
      fs-service/src/main/java/com/fs/complaint/service/impl/FsComplaintServiceImpl.java
  70. 0 22
      fs-service/src/main/java/com/fs/complaint/vo/ComplaintVO.java
  71. 0 50
      fs-service/src/main/java/com/fs/complaint/vo/FsComplaintCategoryListVO.java
  72. 8 8
      fs-service/src/main/java/com/fs/course/service/IFsCourseProductOrderService.java
  73. 1 1
      fs-service/src/main/java/com/fs/course/service/IFsUserCourseOrderService.java
  74. 1 1
      fs-service/src/main/java/com/fs/course/service/IFsUserVipOrderService.java
  75. 10 8
      fs-service/src/main/java/com/fs/course/service/impl/FsCourseProductOrderServiceImpl.java
  76. 21 27
      fs-service/src/main/java/com/fs/course/service/impl/FsCourseTrafficLogServiceImpl.java
  77. 8 1
      fs-service/src/main/java/com/fs/course/service/impl/FsCourseWatchLogServiceImpl.java
  78. 5 3
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseOrderServiceImpl.java
  79. 5 3
      fs-service/src/main/java/com/fs/course/service/impl/FsUserVipOrderServiceImpl.java
  80. 31 0
      fs-service/src/main/java/com/fs/fastGpt/domain/FastgptExtUserTag.java
  81. 67 0
      fs-service/src/main/java/com/fs/fastGpt/mapper/FastgptExtUserTagMapper.java
  82. 66 0
      fs-service/src/main/java/com/fs/fastGpt/service/IFastgptExtUserTagService.java
  83. 58 2
      fs-service/src/main/java/com/fs/fastGpt/service/impl/AiHookServiceImpl.java
  84. 145 0
      fs-service/src/main/java/com/fs/fastGpt/service/impl/FastgptExtUserTagServiceImpl.java
  85. 34 0
      fs-service/src/main/java/com/fs/fastGpt/vo/FastgptExtUserTagVO.java
  86. 0 59
      fs-service/src/main/java/com/fs/foods/domain/FsFoodRecord.java
  87. 0 73
      fs-service/src/main/java/com/fs/foods/mapper/FoodRecordMapper.java
  88. 0 47
      fs-service/src/main/java/com/fs/foods/param/FoodRecordAddParam.java
  89. 0 48
      fs-service/src/main/java/com/fs/foods/param/FoodRecordEditParam.java
  90. 0 57
      fs-service/src/main/java/com/fs/foods/param/FoodRecordQueryParam.java
  91. 0 90
      fs-service/src/main/java/com/fs/foods/service/IFsFoodRecordService.java
  92. 0 179
      fs-service/src/main/java/com/fs/foods/service/impl/FsFoodRecordServiceImpl.java
  93. 0 66
      fs-service/src/main/java/com/fs/his/config/HealthIndicatorConfig.java
  94. 0 55
      fs-service/src/main/java/com/fs/his/domain/FsAttachment.java
  95. 7 4
      fs-service/src/main/java/com/fs/his/domain/FsUser.java
  96. 0 74
      fs-service/src/main/java/com/fs/his/domain/FsUserHealthData.java
  97. 0 98
      fs-service/src/main/java/com/fs/his/domain/FsUserHealthProfile.java
  98. 0 225
      fs-service/src/main/java/com/fs/his/domain/FsUserInfo.java
  99. 0 53
      fs-service/src/main/java/com/fs/his/domain/FsUserItinerary.java
  100. 0 55
      fs-service/src/main/java/com/fs/his/domain/FsUserPayCompetitorsRecord.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 })
+@Transactional
 @EnableAsync
 @EnableScheduling
 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

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

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

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

+ 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.enums.BusinessType;
 import com.fs.common.utils.poi.ExcelUtil;
-import com.fs.hisStore.param.FormatAttrParam;
 import com.fs.hisStore.vo.FsStoreProductAttrValueVO;
 import com.fs.hisStore.vo.FsStoreProductExportVO;
 import com.fs.hisStore.vo.FsStoreProductListVO;
@@ -73,7 +72,7 @@ public class FsStoreProductScrmController extends BaseController
     /**
      * 查询商品列表
      */
-//    @PreAuthorize("@ss.hasPermi('store:storeProduct:list')")
+    @PreAuthorize("@ss.hasPermi('store:storeProduct:list')")
     @GetMapping("/list")
     public TableDataInfo list(FsStoreProductScrm fsStoreProduct)
     {
@@ -170,8 +169,8 @@ public class FsStoreProductScrmController extends BaseController
 
     @ApiOperation(value = "生成属性")
     @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){
+        return new ResponseEntity<>(fsStoreProductService.getFormatAttr(productId,jsonStr), 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);
         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("删除商品失败");
-    }
-}

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

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

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

@@ -221,7 +221,7 @@ public class FsUserCourseVideoController extends AppBaseController {
     @GetMapping("/todayCourseList")
     @ApiOperation("今日课程")
     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();
         if (Objects.isNull(companyId)) {
             ResponseResult.fail(400, "未获取到公司ID,请重新登录后再试");
@@ -231,6 +231,7 @@ public class FsUserCourseVideoController extends AppBaseController {
         params.put("companyId", companyId);
 //        params.put("dayDate", LocalDate.now());
         params.put("companyUserId", Long.parseLong(getUserId()));
+        params.put("keyword", keyword);
 
         PageHelper.startPage(pageNum, pageSize);
         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.exception.CustomException;
-import com.fs.common.exception.ServiceException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.dao.DuplicateKeyException;
@@ -37,18 +36,6 @@ public class FSExceptionHandler {
 		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)
 	public R handlerNoFoundException(Exception 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;
 
+import cn.hutool.core.util.IdUtil;
 import com.fs.common.annotation.Log;
 import com.fs.common.annotation.RepeatSubmit;
 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.CompanyRechargeOrder;
 import com.fs.company.dto.RechargeDTO;
+import com.fs.company.param.CompanyRechargeParam;
 import com.fs.company.service.ICompanyRechargeService;
 import com.fs.company.service.ICompanyService;
 import com.fs.company.util.OrderUtils;
@@ -21,6 +23,7 @@ import com.fs.framework.security.LoginUser;
 import com.fs.framework.service.TokenService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 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;
 
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.http.HttpRequest;
 import cn.hutool.json.JSONUtil;
 import com.baidu.dev2.thirdparty.jackson.databind.ObjectMapper;
 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.service.*;
 import com.fs.company.utils.DomainUtil;
+import com.fs.company.vo.CompanyUserImportVO;
 import com.fs.company.vo.CompanyUserQwListVO;
 import com.fs.company.vo.CompanyUserVO;
 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.his.utils.qrcode.QRCodeUtils;
 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.service.IQwCompanyService;
 import com.fs.qw.vo.CompanyUserQwVO;
@@ -37,6 +41,9 @@ import com.fs.system.service.ISysConfigService;
 import com.fs.voice.utils.StringUtil;
 import com.github.pagehelper.PageHelper;
 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.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
@@ -78,7 +85,8 @@ public class CompanyUserController extends BaseController
     private ISysConfigService configService;
     @Autowired
     private RedisCache redisCache;
-
+    @Autowired
+    private OpenIMService openIMService;
     @Autowired
     IQwCompanyService iQwCompanyService;
 
@@ -133,7 +141,7 @@ public class CompanyUserController extends BaseController
         }
         return getDataTable(list);
     }
-    @Log(title = "用户管理", businessType = BusinessType.EXPORT)
+    @Log(title = "用户管理导出", businessType = BusinessType.EXPORT)
     @PreAuthorize("@ss.hasPermi('company:user:export')")
     @GetMapping("/export")
     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(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 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";
 
         R andUpload = QRCodeUtils.createAndUpload(url);
@@ -536,4 +564,72 @@ public class CompanyUserController extends BaseController
     public R unBindDoctorId(@RequestBody CompanyUser 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失败");
+        }
+    }
+
 }

+ 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) {
         startPage();
         if (sopUserLogsInfo.getFilterMode() == 1) {
-            startPage();
             List<SopUserLogsInfo> list = sopUserLogsInfoService.selectSopUserLogsInfoList(sopUserLogsInfo);
 
             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")
     public TableDataInfo list(FsStoreProductScrm fsStoreProduct)
     {

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

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

+ 13 - 12
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.company.service.ICompanyMiniappService;
 import com.fs.course.config.CourseConfig;
-import com.fs.course.config.CourseMaConfig;
 import com.fs.course.domain.FsCoursePlaySourceConfig;
 import com.fs.course.service.IFsCoursePlaySourceConfigService;
 import com.fs.ipad.vo.BaseVo;
@@ -53,6 +52,7 @@ public class SendMsg {
     private final IQwSopLogsService qwSopLogsService;
     private final QwIpadServerMapper qwIpadServerMapper;
     private final RedisCacheT<Long> redisCache;
+    private final AsyncSopTestService asyncSopTestService;
     private final ICompanyMiniappService companyMiniappService;
     private final IFsCoursePlaySourceConfigService fsCoursePlaySourceConfigService;
 
@@ -65,7 +65,7 @@ public class SendMsg {
     @Qualifier("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.qwSopLogsMapper = qwSopLogsMapper;
         this.sendServer = sendServer;
@@ -73,6 +73,7 @@ public class SendMsg {
         this.qwSopLogsService = qwSopLogsService;
         this.qwIpadServerMapper = qwIpadServerMapper;
         this.redisCache = redisCache;
+        this.asyncSopTestService = asyncSopTestService;
         this.companyMiniappService = companyMiniappService;
         this.fsCoursePlaySourceConfigService = fsCoursePlaySourceConfigService;
     }
@@ -214,16 +215,16 @@ public class SendMsg {
                 }
             }
             // 推送 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();
-            }
+//            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);
             SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
             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.setStatus(0);
                         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;
                 case "subscribe":

+ 14 - 11
fs-qw-task/src/main/java/com/fs/app/taskService/impl/SopLogsTaskServiceImpl.java

@@ -950,21 +950,24 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
                     String sortLink = createLinkByMiniApp(setting, logVo, sendTime, courseId, videoId,
                             qwUserId, companyUserId, companyId, externalId,isOfficial,sopLogs.getFsUserId());
 
+                    if(sopLogs.getSendType()==1){
+                        setting.setMiniprogramAppid(miniAppId);
+                    }else {
+                        //算主备小程序
+                        String finalAppId = getAppIdFromMiniMap(miniMap, companyId, sendMsgType, grade);
+
+                        if (StringUtil.strIsNullOrEmpty(finalAppId)) {
+                            finalAppId = miniAppId;
+                        }
 
-                    //算主备小程序
-                    String finalAppId = getAppIdFromMiniMap(miniMap, companyId, sendMsgType, grade);
-
-                    if (StringUtil.strIsNullOrEmpty(finalAppId)) {
-                        finalAppId = miniAppId;
-                    }
+                        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]+", ""));
 
                     try {

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

@@ -1,8 +1,20 @@
 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.domain.R;
+import com.fs.common.enums.BusinessType;
 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.qw.domain.QwExternalContactInfo;
 import com.fs.qw.domain.QwUser;
@@ -21,6 +33,7 @@ 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.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.HashMap;
@@ -42,6 +55,19 @@ public class ApisQwUserController extends BaseController {
     @Autowired
     private ISopUserLogsInfoService iSopUserLogsInfoService;
 
+    @Autowired
+    private ICompanyUserService companyUserService;
+
+    @Autowired
+    ICompanyUserService userService;
+
+    @Autowired
+    private ICompanyService companyService;
+
+    @Autowired
+    ICompanyPostService postService;
+
+
     @GetMapping("/details")
     @ApiOperation("会员看课详情")
     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);
     }
 
+    /**
+     * 注册或者绑定销售
+     */
+    @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;
 
+import com.fs.app.params.LoginBindCompanyParam;
 import com.fs.common.BeanCopyUtils;
+import com.fs.common.annotation.Log;
 import com.fs.common.core.controller.BaseController;
 import com.fs.common.core.domain.R;
+import com.fs.common.enums.BusinessType;
 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.QwTagGroup;
 import com.fs.qw.param.ExternalContactDetailsParam;
@@ -27,6 +39,7 @@ 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.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.HashMap;
@@ -51,6 +64,18 @@ public class QwUserController extends BaseController {
     @Autowired
     private ISopUserLogsInfoService iSopUserLogsInfoService;
 
+    @Autowired
+    private ICompanyUserService companyUserService;
+
+    @Autowired
+    ICompanyUserService userService;
+
+    @Autowired
+    private ICompanyService companyService;
+
+    @Autowired
+    ICompanyPostService postService;
+
     @GetMapping("/details")
     @ApiOperation("会员看课详情")
     public R getUserDetails(@ApiParam(value = "外部联系人id", required = true) @RequestParam Long contactId,
@@ -150,5 +175,50 @@ public class QwUserController extends BaseController {
         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;
+}

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

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

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

@@ -5,4 +5,6 @@ public interface AiTongueConfig {
     String quanxiUrl="https://api.aikanshe.com/agency/quanxi";
     String checkTongue="https://api.aikanshe.com/agency/checkTongue";
     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.inner.ConfidenceData;
 import com.fs.aiTongueApi.domain.inner.TongueData;
+import com.fs.his.domain.FsHealthTongue;
 
 public interface AiTongueService {
     AITongueResult<TongueData> getHistoryTongue(QueryAiTongue queryAiTongue);
@@ -12,4 +13,6 @@ public interface AiTongueService {
     AITongueResult<ConfidenceData> checkTongue(String url);
 
     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.QueryAiTongue;
 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.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.http.HttpEntity;
 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.impl.client.HttpClients;
 import org.apache.http.util.EntityUtils;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.io.InputStream;
@@ -27,9 +32,18 @@ import java.net.URI;
 import java.net.URL;
 import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
 @Service
 public class AiTongueServiceImpl implements AiTongueService {
 
+    @Autowired
+    private IFsHealthTongueService tongueService;
+
     @Override
     public AITongueResult<TongueData> getHistoryTongue(QueryAiTongue queryAiTongue) {
         queryAiTongue.setAppkey(AiTongueConfig.appKey);
@@ -108,6 +122,177 @@ public class AiTongueServiceImpl implements AiTongueService {
         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){
         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.fs.common.annotation.Excel;
 import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 
 /**
  * 充值对象 company_recharge
- * 
+ *
  * @author fs
  * @date 2023-02-27
  */
+@Data
 public class CompanyRecharge extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
@@ -72,152 +74,5 @@ public class CompanyRecharge extends BaseEntity
     private Date auditTime;
 
     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;
 
-    /** 部门ID */
-    @Excel(name = "部门ID")
+    /** 部门编号 */
+    @Excel(name = "部门编号")
     private Long deptId;
 
     /** 用户账号 */

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

@@ -84,4 +84,5 @@ public interface CompanyRoleMapper
      * @return 角色信息
      * **/
     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 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.his.vo.CitysAreaVO;
 import com.fs.his.vo.OptionsVO;
+import com.fs.hisStore.vo.FsStoreProductExportVO;
 import com.fs.qw.dto.UserProjectDTO;
 import com.fs.qw.vo.CompanyUserQwVO;
 import com.fs.qw.vo.QwOptionsVO;
@@ -53,6 +54,9 @@ public interface ICompanyUserService {
      */
     public int insertCompanyUser(CompanyUser companyUser);
 
+    String importCompanyUser(List<CompanyUserImportVO> list, boolean updateSupport);
+
+
     /**
      * 修改物业公司管理员信息
      *

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

@@ -1,9 +1,12 @@
 package com.fs.company.service.impl;
 
+import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
+import com.fs.common.BeanCopyUtils;
 import com.fs.common.annotation.DataScope;
 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.redis.RedisCache;
 import com.fs.common.exception.CustomException;
@@ -23,6 +26,11 @@ import com.fs.his.mapper.FsUserMapper;
 import com.fs.his.service.IFsCityService;
 import com.fs.his.vo.CitysAreaVO;
 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.dto.UserProjectDTO;
 import com.fs.qw.mapper.QwUserMapper;
@@ -43,6 +51,7 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -152,6 +161,163 @@ public class CompanyUserServiceImpl implements ICompanyUserService
         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);
+    }
+
     /**
      * 修改物业公司管理员信息
      *
@@ -317,11 +483,12 @@ public class CompanyUserServiceImpl implements ICompanyUserService
             user.setUserName(userCodeParam.getUserName());
             user.setSex(userCodeParam.getSex());
             user.setStatus("1");
-            user.setDept(userCodeParam.getDept());
+            user.setDeptId(userCodeParam.getDeptId());
+            user.setPhonenumber(userCodeParam.getPhonenumber());
             user.setRoleIds(userCodeParam.getRoleIds());
             user.setAddressId(userCodeParam.getAddressId());
             user.setCompanyId(userCodeParam.getCompanyId());
-            user.setCreateBy(userCodeParam.getQwUserId());
+            user.setCreateBy(userCodeParam.getQwUserIdByStr());
             user.setPassword(SecurityUtils.encryptPassword(userCodeParam.getPassword()));
             user.setCreateTime(new Date());
             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.company.domain.CompanyDept;
 import com.fs.company.domain.CompanyRole;
+import lombok.Data;
 
 import java.util.Date;
 import java.util.List;
 
+@Data
 public class CompanyUserImportVO extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
     /** 用户ID */
     private Long userId;
 
-    /** 公司ID */
-    @Excel(name = "公司ID")
+    /** 公司编号 */
+    @Excel(name = "公司编号")
     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;
 
     /** 用户账号 */
@@ -41,8 +33,7 @@ public class CompanyUserImportVO extends BaseEntity {
     @Excel(name = "用户昵称")
     private String nickName;
 
-    /** 用户类型(00系统用户) */
-    @Excel(name = "用户类型", readConverterExp = "0=0系统用户")
+    /** 用户类型(00管理员 01员工 ) */
     private String userType;
 
     /** 用户邮箱 */
@@ -54,13 +45,9 @@ public class CompanyUserImportVO extends BaseEntity {
     private String phonenumber;
 
     /** 用户性别(0男 1女 2未知) */
-    @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
+    @Excel(name = "用户性别(0男 1女 2未知)", readConverterExp = "0=男,1=女,2=未知")
     private String sex;
 
-    /** 头像地址 */
-    @Excel(name = "头像地址")
-    private String avatar;
-
     /** 身份证号 */
     @Excel(name = "身份证号")
     private String idCard;
@@ -69,23 +56,24 @@ public class CompanyUserImportVO extends BaseEntity {
     @Excel(name = "密码")
     private String password;
 
+    /** 角色字符串 */
+    @Excel(name = "角色(多角色用逗号分割)")
+    private String roleString;
+
     /** 帐号状态(0正常 1停用) */
-    @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
     private String status;
 
+    private String corpId;
+
     /** 删除标志(0代表存在 2代表删除) */
     private String delFlag;
 
+    /** 头像地址 */
+    private String avatar;
+
     private String qwUserId;
     private Integer qwStatus;
 
-    public String getIdCard() {
-        return idCard;
-    }
-
-    public void setIdCard(String idCard) {
-        this.idCard = idCard;
-    }
 
     /** 最后登录IP */
     private String loginIp;
@@ -111,9 +99,6 @@ public class CompanyUserImportVO extends BaseEntity {
     /** 角色组 */
     private Long[] roleIds;
 
-    /** 角色字符串 */
-    @Excel(name = "角色(多角色用逗号分割)")
-    private String roleString;
 
     /** 岗位组 */
     private Long[] postIds;
@@ -137,322 +122,4 @@ public class CompanyUserImportVO extends BaseEntity {
     /** 看课域名 */
     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 - 0
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 maxPadNum;
+
     private Integer voiceCallerNumber;
     @Excel(name = "商务负责人")
     private String manager;

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

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

@@ -16,14 +16,14 @@ import com.fs.his.param.FsCourseProductOrderRefundParam;
 
 /**
  * 拍单商品订单Service接口
- * 
+ *
  * @author fs
  * @date 2025-07-28
  */
 public interface IFsCourseProductOrderService extends IService<FsCourseProductOrder>{
     /**
      * 查询拍单商品订单
-     * 
+     *
      * @param courseOrderId 拍单商品订单主键
      * @return 拍单商品订单
      */
@@ -31,7 +31,7 @@ public interface IFsCourseProductOrderService extends IService<FsCourseProductOr
 
     /**
      * 查询拍单商品订单列表
-     * 
+     *
      * @param param 拍单商品订单
      * @return 拍单商品订单集合
      */
@@ -39,7 +39,7 @@ public interface IFsCourseProductOrderService extends IService<FsCourseProductOr
 
     /**
      * 新增拍单商品订单
-     * 
+     *
      * @param fsCourseProductOrder 拍单商品订单
      * @return 结果
      */
@@ -47,7 +47,7 @@ public interface IFsCourseProductOrderService extends IService<FsCourseProductOr
 
     /**
      * 修改拍单商品订单
-     * 
+     *
      * @param fsCourseProductOrder 拍单商品订单
      * @return 结果
      */
@@ -55,7 +55,7 @@ public interface IFsCourseProductOrderService extends IService<FsCourseProductOr
 
     /**
      * 批量删除拍单商品订单
-     * 
+     *
      * @param courseOrderIds 需要删除的拍单商品订单主键集合
      * @return 结果
      */
@@ -63,7 +63,7 @@ public interface IFsCourseProductOrderService extends IService<FsCourseProductOr
 
     /**
      * 删除拍单商品订单信息
-     * 
+     *
      * @param courseOrderId 拍单商品订单主键
      * @return 结果
      */
@@ -79,7 +79,7 @@ public interface IFsCourseProductOrderService extends IService<FsCourseProductOr
 
     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);
 

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

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

+ 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业务层处理
- * 
+ *
  * @author fs
  * @date 2025-07-28
  */
@@ -131,7 +131,7 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
 
     /**
      * 查询拍单商品订单
-     * 
+     *
      * @param courseOrderId 拍单商品订单主键
      * @return 拍单商品订单
      */
@@ -143,7 +143,7 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
 
     /**
      * 查询拍单商品订单列表
-     * 
+     *
      * @param param 拍单商品订单
      * @return 拍单商品订单
      */
@@ -171,7 +171,7 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
 
     /**
      * 新增拍单商品订单
-     * 
+     *
      * @param fsCourseProductOrder 拍单商品订单
      * @return 结果
      */
@@ -184,7 +184,7 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
 
     /**
      * 修改拍单商品订单
-     * 
+     *
      * @param fsCourseProductOrder 拍单商品订单
      * @return 结果
      */
@@ -197,7 +197,7 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
 
     /**
      * 批量删除拍单商品订单
-     * 
+     *
      * @param courseOrderIds 需要删除的拍单商品订单主键
      * @return 结果
      */
@@ -209,7 +209,7 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
 
     /**
      * 删除拍单商品订单信息
-     * 
+     *
      * @param courseOrderId 拍单商品订单主键
      * @return 结果
      */
@@ -446,7 +446,7 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
     }
 
     @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: {}",
                 orderSn, payCode, tradeNo, payType, type);
         FsCourseProductOrder order = null;
@@ -459,6 +459,8 @@ public class FsCourseProductOrderServiceImpl extends ServiceImpl<FsCourseProduct
                     paymentMap.setStatus(1);
                     paymentMap.setPayTime(new Date());
                     paymentMap.setTradeNo(tradeNo);
+                    paymentMap.setBankSerialNo(bankSerialNo);
+                    paymentMap.setBankTransactionId(bankTransactionId);
                     if(payType.equals(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode())){
                         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;
         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;
-        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) {
             loopCount++;
             int offset = pageNum * pageSize;
 
-            // 查询当前分页的数据
             List<TrafficRecord> trafficRecords =
                     fsCourseTrafficLogMapper.findUnusedRecordsWithTraffic(
                             internetTrafficParam.getCompanyId(), offset, pageSize);
@@ -252,15 +251,12 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
             if (trafficRecords.isEmpty()) {
                 break;
             }
-
-            // 处理当前批次的数据
             for (TrafficRecord record : trafficRecords) {
                 Long logId = record.getLogId();
 
                 if (processedIds.contains(logId)) {
                     continue;
                 }
-
                 if (updatedTrafficKB < trafficKB) {
                     updatedTrafficKB += record.getInternetTraffic();
                     idsToUpdate.add(logId);
@@ -281,12 +277,11 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
             pageNum++;
         }
 
-        // 第二阶段:将所有未处理的记录状态改为3
         List<Long> allUnprocessedIds = new ArrayList<>();
-        pageNum = 0;  // 重置分页
+        pageNum = 0;
         boolean hasMore = true;
 
-        while (hasMore && loopCount < maxLoop * 2) {  // 扩大循环次数限制
+        while (hasMore && loopCount < maxLoop * 2) {
             loopCount++;
             int offset = pageNum * pageSize;
 
@@ -301,26 +296,22 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
 
             for (TrafficRecord record : allRecords) {
                 Long logId = record.getLogId();
-                if (!idsToUpdate.contains(logId)) {  // 不是已处理的记录
+                if (!idsToUpdate.contains(logId)) {
                     allUnprocessedIds.add(logId);
                 }
             }
 
             pageNum++;
         }
-
-        // 更新数据库状态
         if (!idsToUpdate.isEmpty()) {
             fsCourseTrafficLogMapper.updateStatusByIds(idsToUpdate, 1);
             System.out.println("共更新状态为1的记录数:" + idsToUpdate.size());
         }
-
         if (!allUnprocessedIds.isEmpty()) {
             fsCourseTrafficLogMapper.updateStatusByIds(allUnprocessedIds, 3);
             System.out.println("共更新状态为3的记录数:" + allUnprocessedIds.size());
         }
 
-        // 剩余的计算和输出逻辑保持不变...
         Long count = fsCourseTrafficLogMapper.findRecordsNum(internetTrafficParam.getCompanyId());
         long overflowTrafficKB = Math.max(0, updatedTrafficKB - trafficKB) + count;
         if (overflowTrafficKB > 0) {
@@ -329,13 +320,16 @@ public class FsCourseTrafficLogServiceImpl implements IFsCourseTrafficLogService
 
         System.out.println("充值总流量:" + trafficKB + " 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");
-        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)) {
             sysConfig = new SysConfig();

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

@@ -777,7 +777,14 @@ public class FsCourseWatchLogServiceImpl extends ServiceImpl<FsCourseWatchLogMap
             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) {
                 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 (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);
             } else {
                 String payCode =  OrderCodeUtils.getOrderSn();
@@ -585,7 +585,7 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
                 }
             }
             else{
-                this.payConfirm(order.getOrderCode(),"","","",2);
+                this.payConfirm(order.getOrderCode(),"","","",2,null,null);
                 return R.ok().put("isPay",1);
             }
         }
@@ -597,7 +597,7 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
 
     @Override
     @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();
         try {
             FsUserCourseOrder order=null;
@@ -610,6 +610,8 @@ public class FsUserCourseOrderServiceImpl implements IFsUserCourseOrderService
                         paymentMap.setStatus(1);
                         paymentMap.setPayTime(new Date());
                         paymentMap.setTradeNo(tradeNo);
+                        paymentMap.setBankSerialNo(bankSerialNo);
+                        paymentMap.setBankTransactionId(bankTransactionId);
                         if(payType.equals(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode())){
                             paymentMap.setPayTypeCode(PayType.WECHAT_MINI_PROGRAM_PAYMENT.name());
                         }

+ 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 (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);
             } else {
                 String payCode =  OrderCodeUtils.getOrderSn();
@@ -435,7 +435,7 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
                 }
             }
             else{
-                this.payConfirm(order.getOrderCode(),"","","",2);
+                this.payConfirm(order.getOrderCode(),"","","",2,null,null);
                 return R.ok().put("isPay",1);
             }
         }
@@ -447,7 +447,7 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
 
     @Override
     @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();
         try {
             FsUserVipOrder order=null;
@@ -460,6 +460,8 @@ public class FsUserVipOrderServiceImpl implements IFsUserVipOrderService
                         paymentMap.setStatus(1);
                         paymentMap.setPayTime(new Date());
                         paymentMap.setTradeNo(tradeNo);
+                        paymentMap.setBankSerialNo(bankSerialNo);
+                        paymentMap.setBankTransactionId(bankTransactionId);
                         if(payType.equals(PayType.WECHAT_MINI_PROGRAM_PAYMENT.getCode())){
                             paymentMap.setPayTypeCode(PayType.WECHAT_MINI_PROGRAM_PAYMENT.name());
                         }

+ 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.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.fs.common.annotation.Excel;
 import com.fs.common.config.FSConfig;
 import com.fs.common.core.domain.R;
@@ -161,6 +162,10 @@ public class AiHookServiceImpl implements AiHookService {
     @Autowired
     private IFastGptChatReplaceTextService fastGptChatReplaceTextService;
 
+    private static final String AI_REPLY = "AI_REPLY:";
+    private static final String AI_REPLY_TAG = "AI_REPLY_TAG:";
+
+
     /** Ai半小时未回复提醒 **/
     /**
      *
@@ -376,7 +381,7 @@ public class AiHookServiceImpl implements AiHookService {
         }
         if(user.getFastGptRoleId()==null){
             log.error("未绑定角色");
-            return R.ok();
+            return userIsReply(sender, uid, user);
         }
         Long serverId = user.getServerId();
         log.info("服务器id"+serverId);
@@ -388,7 +393,7 @@ public class AiHookServiceImpl implements AiHookService {
         //没用ai角色跳过
         if(role==null){
             log.error("没用ai角色跳过");
-            return R.ok();
+            return userIsReply(sender, uid, user);
         }
         String modeConfig=role.getModeConfigJson();
         //key不为空
@@ -598,6 +603,57 @@ public class AiHookServiceImpl implements AiHookService {
         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,否就不做处理
      * @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);
-    }
-}

+ 0 - 66
fs-service/src/main/java/com/fs/his/config/HealthIndicatorConfig.java

@@ -1,66 +0,0 @@
-package com.fs.his.config;
-
-import com.alibaba.fastjson.JSON;
-import lombok.Data;
-
-import java.util.Map;
-
-/**
- * @description: 血糖指标配置类
- * @author: Xgb
- * @createDate: 2025/8/28
- * @version: 1.0
- */
-@Data
-public class HealthIndicatorConfig {
-
-    /**
-     * 血糖指标
-     */
-    private Map<String, Object> bloodGlucose;
-    /**
-     * 血压指标
-     */
-    private Map<String, Object> bloodPressure;
-    /**
-     * 尿酸指标
-     */
-    private Map<String, Object> uricAcid;
-    /**
-     * BMI指标
-     */
-    private Map<String, Object> bmi;
-    /**
-     * 腰围
-     */
-    private Map<String, Object> waist;
-    /**
-     * 臀围
-     */
-    private Map<String, Object> hip;
-
-    public static final String SEVERITY = "severity";
-
-    // normal 正常, mild 轻微, severe 严重
-    public static final String NORMAL = "normal";
-    public static final String MILD = "mild";
-    public static final String SEVERE = "severe";
-
-    // systolic  高压 diastolic  低压 血压使用
-    public static final String SYSTOLIC = "systolic";
-    public static final String DIASTOLIC = "diastolic";
-
-    // male  男性 female  女性 尿酸使用
-    public static final String MALE = "male";
-    public static final String FEMALE = "female";
-
-
-    /**
-     * 从JSON字符串创建对象实例
-     * @param json JSON字符串
-     * @return HealthIndicatorConfig对象
-     */
-    public static HealthIndicatorConfig fromJson(String json) {
-        return JSON.parseObject(json, HealthIndicatorConfig.class);
-    }
-}

+ 0 - 55
fs-service/src/main/java/com/fs/his/domain/FsAttachment.java

@@ -1,55 +0,0 @@
-package com.fs.his.domain;
-
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.fs.common.annotation.Excel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import com.fs.common.core.domain.BaseEntity;
-import lombok.EqualsAndHashCode;
-
-/**
- * 附件管理对象 fs_attachment
- *
- * @author fs
- * @date 2025-08-23
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class FsAttachment extends BaseEntity{
-
-    @TableId
-    @ApiModelProperty(value = "附件id")
-    private Long attachmentId;
-
-    /** 父id */
-    @Excel(name = "父id")
-    @ApiModelProperty(value = "父id")
-    private Long parentId;
-
-    /** 用户id */
-    @Excel(name = "用户id")
-    @ApiModelProperty(value = "用户id")
-    private Long userId;
-
-    /** 文件类型 0:文件夹 1图片 */
-    @Excel(name = "文件类型 0:文件夹 1图片 2体检报告")
-    @ApiModelProperty(value = "文件类型 0:文件夹 1图片 2体检报告")
-    private Integer type;
-
-    /** 文件大小(kb) */
-    @Excel(name = "文件大小(kb)")
-    @ApiModelProperty(value = "文件大小(kb)")
-    private Long size;
-
-    /** 文件名 */
-    @Excel(name = "文件名")
-    @ApiModelProperty(value = "文件名")
-    private String fileName;
-
-    /** oss路径 */
-    @Excel(name = "oss路径")
-    @ApiModelProperty(value = "文件:oss地址 体检报告:报告id")
-    private String url;
-
-
-}

+ 7 - 4
fs-service/src/main/java/com/fs/his/domain/FsUser.java

@@ -191,8 +191,11 @@ public class FsUser extends BaseEntity
     @TableField(exist = false)
     private String nickname;
 
-    /**
-     * 用户余额
-     */
-    private BigDecimal money;
+    public String getNickname() {
+        return nickname;
+    }
+
+    public void setNickname(String nickname) {
+        this.nickname = nickname;
+    }
 }

+ 0 - 74
fs-service/src/main/java/com/fs/his/domain/FsUserHealthData.java

@@ -1,74 +0,0 @@
-package com.fs.his.domain;
-
-import java.math.BigDecimal;
-import java.sql.Time;
-import java.util.Date;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.fs.common.annotation.Excel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import com.fs.common.core.domain.BaseEntity;
-import lombok.EqualsAndHashCode;
-
-/**
- * 用户身体检测数据对象 fs_user_health_data
- *
- * @author fs
- * @date 2025-08-27
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class FsUserHealthData extends BaseEntity{
-
-    /** 自增主键 */
-    @ApiModelProperty("自增主键")
-    private Long id;
-
-    /** 用户ID */
-    @ApiModelProperty("用户ID")
-    private Long userId;
-
-    /** 测量类型(0-腰围,1-臀围,2-血糖,3-血压,4-尿酸 5-BMI) */
-    @ApiModelProperty("测量类型(0-腰围,1-臀围,2-血糖,3-血压,4-尿酸 5-BMI)")
-    private Integer measurementType;
-
-    /** 数值1(测量值1 测量值只有一个时默认填写/身高cm/舒张压) */
-    @ApiModelProperty("数值1(测量值1 测量值只有一个时默认填写/身高cm/舒张压)")
-    private BigDecimal value1;
-
-    /** 数值2(测量值2 体重kg/收缩压) */
-    @ApiModelProperty("数值2(测量值2 体重kg/收缩压)")
-    private BigDecimal value2;
-
-    /** 测量日期 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @ApiModelProperty("测量日期")
-    private Date measurementDate;
-
-    /** 测量时间 */
-    @JsonFormat(pattern = "HH:mm:ss")
-    @ApiModelProperty("测量时间")
-    private Date measurementTime;
-
-    /** 星期 */
-    @ApiModelProperty("星期")
-    private Integer week;
-
-    /** 等级(无-0,轻微-1,严重-2) */
-    @ApiModelProperty("等级(无-0,轻微-1,严重-2)")
-    private Integer level;
-
-    /** 记录创建时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @ApiModelProperty("记录创建时间")
-    private Date createdAt;
-
-    /** 性别(0:男, 1:女, 2:未知) */
-    @ApiModelProperty("性别(0:男, 1:女, 2:未知)")
-    private Integer sex;
-    /** 查询时间 格式yyyy-MM-dd yyyy-MM-dd;yyyy-MM-dd yyyy-MM */
-    @ApiModelProperty("查询时间 格式yyyy-MM-dd yyyy-MM-dd;yyyy-MM-dd yyyy-MM")
-    private String timeSearch;
-
-}

+ 0 - 98
fs-service/src/main/java/com/fs/his/domain/FsUserHealthProfile.java

@@ -1,98 +0,0 @@
-package com.fs.his.domain;
-
-import java.math.BigDecimal;
-import java.util.Date;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.fs.common.annotation.Excel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import com.fs.common.core.domain.BaseEntity;
-import lombok.EqualsAndHashCode;
-
-/**
- * 用户健康档案对象 fs_user_health_profile
- *
- * @author fs
- * @date 2025-08-27
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class FsUserHealthProfile extends BaseEntity{
-
-    /** 用户ID(主键) */
-    @ApiModelProperty("用户ID(主键)")
-    private Long userId;
-
-    /** 身高(单位:厘米) */
-    @ApiModelProperty("身高(单位:厘米)")
-    private BigDecimal height;
-
-    /** 体重(单位:千克) */
-    @ApiModelProperty("体重(单位:千克)")
-    private BigDecimal weight;
-
-    /** 腰围(单位:厘米) */
-    @ApiModelProperty("腰围(单位:厘米)")
-    private BigDecimal waistCircumference;
-
-    /** 臀围(单位:厘米) */
-    @ApiModelProperty("臀围(单位:厘米)")
-    private BigDecimal hipCircumference;
-
-    /** 高血糖(无-0,轻微-1,严重-2) */
-    @ApiModelProperty("高血糖(无-0,轻微-1,严重-2)")
-    private Long hyperglycemia;
-
-    /** 高血糖测量值(单位:mmol/L) */
-    @ApiModelProperty("高血糖测量值(单位:mmol/L)")
-    private BigDecimal hyperglycemiaValue;
-
-    /** 高血压(无-0,轻微-1,严重-2) */
-    @ApiModelProperty("高血压(无-0,轻微-1,严重-2)")
-    private Long hypertension;
-
-    /** 收缩压(高压) */
-    @ApiModelProperty("收缩压(高压)")
-    private BigDecimal systolicPressure;
-
-    /** 舒张压(低压) */
-    @ApiModelProperty("舒张压(低压)")
-    private BigDecimal diastolicPressure;
-
-    /** 高血脂(无-0,轻微-1,严重-2) */
-    @ApiModelProperty("hyperlipidemia")
-    private Long hyperlipidemia;
-
-    /** 高尿酸(无-0,轻微-1,严重-2) */
-    @ApiModelProperty("高尿酸(无-0,轻微-1,严重-2)")
-    private Long hyperuricemia;
-
-    /** 高尿酸测量值(单位:μmol/L) */
-    @ApiModelProperty("高尿酸测量值(单位:μmol/L)")
-    private BigDecimal hyperuricemiaValue;
-
-    /** 高体重(正常-0,偏瘦-1,偏重-2) */
-    @ApiModelProperty("高体重(正常-0,偏瘦-1,偏重-2)")
-    private Long bodyWeightStatus;
-
-    /** 其他病史 */
-    @ApiModelProperty("其他病史")
-    private String otherMedicalHistory;
-
-    /** 症状史 */
-    @ApiModelProperty("症状史")
-    private String symptomHistory;
-
-    /** 创建时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @ApiModelProperty("创建时间")
-    private Date createdTime;
-
-    /** 更新时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @ApiModelProperty("更新时间")
-    private Date updatedTime;
-
-
-}

+ 0 - 225
fs-service/src/main/java/com/fs/his/domain/FsUserInfo.java

@@ -1,225 +0,0 @@
-package com.fs.his.domain;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fs.common.core.domain.BaseEntity;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import java.math.BigDecimal;
-import java.util.Date;
-
-/**
- * 用户信息对象 fs_user_info
- *
- * @author fs
- * @date 2025-08-25
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class FsUserInfo extends BaseEntity {
-
-    /**
-     * 用户ID
-     */
-    @ApiModelProperty("用户ID")
-    private Long userId;
-
-    /**
-     * 企业用户ID
-     */
-    @ApiModelProperty("企业用户ID")
-    private Long companyUserId;
-
-    /**
-     * 姓名
-     */
-    @ApiModelProperty("姓名")
-    private String username;
-
-    /**
-     * 头像
-     */
-    @ApiModelProperty("头像")
-    private String avatar;
-
-    /**
-     * 性别(0:男, 1:女, 2:未知)
-     */
-    @ApiModelProperty("性别(0:男, 1:女, 2:未知)")
-    private Integer sex;
-
-    /**
-     * 出生年月
-     */
-    @ApiModelProperty("出生年月")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date birthdate;
-
-    /**
-     * 年龄
-     */
-    @ApiModelProperty("年龄")
-    private Integer age;
-
-    /**
-     * 电话
-     */
-    @ApiModelProperty("电话")
-    private String phone;
-
-    /**
-     * 身份证号
-     */
-    @ApiModelProperty("身份证号")
-    private String idCard;
-
-    /**
-     * 退休前工作单位
-     */
-    @ApiModelProperty("退休前工作单位")
-    private String previousEmployer;
-
-    /**
-     * 可支配收入(元)
-     */
-    @ApiModelProperty("可支配收入(元)")
-    private BigDecimal disposableIncome;
-
-    /**
-     * 实际消费(元)
-     */
-    @ApiModelProperty("实际消费(元)")
-    private BigDecimal actualConsumption;
-
-    /**
-     * 市区
-     */
-    @ApiModelProperty("市区")
-    private String city;
-
-    /**
-     * 详情小区
-     */
-    @ApiModelProperty("详情小区")
-    private String residentialCommunity;
-
-    /**
-     * 门牌号
-     */
-    @ApiModelProperty("门牌号")
-    private String houseNumber;
-
-    /**
-     * 面积(平方米)
-     */
-    @ApiModelProperty("面积(平方米)")
-    private BigDecimal area;
-
-    /**
-     * 楼层
-     */
-    @ApiModelProperty("楼层")
-    private String floor;
-
-    /**
-     * 伴侣姓名
-     */
-    @ApiModelProperty("伴侣姓名")
-    private String partnerName;
-
-    /**
-     * 伴侣年龄
-     */
-    @ApiModelProperty("伴侣年龄")
-    private String partnerAge;
-
-    /**
-     * 伴侣单位
-     */
-    @ApiModelProperty("伴侣单位")
-    private String partnerEmployer;
-
-    /**
-     * 孙辈学校
-     */
-    @ApiModelProperty("孙辈学校")
-    private String grandchildrenSchool;
-
-    /**
-     * 是否会员(0:不是, 1:是)
-     */
-    @ApiModelProperty("是否会员(0:不是, 1:是)")
-    private String isMember;
-
-    /**
-     * 会员分类/等级
-     */
-    @ApiModelProperty("会员分类/等级")
-    private String memberLevel;
-
-    /**
-     * 加入时间
-     */
-    @ApiModelProperty("加入时间")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date joinTime;
-
-    /**
-     * 到期时间
-     */
-    @ApiModelProperty("到期时间")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date expiryTime;
-
-    /**
-     * 管理月份(格式如: 2024-01)
-     */
-    @ApiModelProperty("管理月份(格式如: 2024-01)")
-    private String managementMonth;
-
-    /**
-     * 职位
-     */
-    @ApiModelProperty("职位")
-    private String position;
-
-    /**
-     * 癖好/平日喜好
-     */
-    @ApiModelProperty("癖好/平日喜好")
-    private String hobbies;
-
-    /**
-     * 特长
-     */
-    @ApiModelProperty("特长")
-    private String specialties;
-
-    /**
-     * 信仰
-     */
-    @ApiModelProperty("信仰")
-    private String faith;
-
-    /**
-     * 担忧
-     */
-    @ApiModelProperty("担忧")
-    private String concerns;
-
-    /**
-     * 用户想解决的问题
-     */
-    @ApiModelProperty("用户想解决的问题")
-    private String problemsToSolve;
-
-    /**
-     * 健康建议
-     */
-    @ApiModelProperty("健康建议")
-    private String healthSuggestions;
-
-    private Integer isDel;
-
-}

+ 0 - 53
fs-service/src/main/java/com/fs/his/domain/FsUserItinerary.java

@@ -1,53 +0,0 @@
-package com.fs.his.domain;
-
-import java.util.Date;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.fs.common.annotation.Excel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import com.fs.common.core.domain.BaseEntity;
-import lombok.EqualsAndHashCode;
-import org.springframework.format.annotation.DateTimeFormat;
-
-/**
- * 用户日期行程对象 fs_user_itinerary
- *
- * @author fs
- * @date 2025-09-04
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class FsUserItinerary extends BaseEntity{
-
-    /** 自增主键ID */
-    @ApiModelProperty("自增主键ID")
-    private Long id;
-
-    /** 用户ID */
-    @ApiModelProperty("用户ID")
-    private Long userId;
-
-    /** 行程内容 */
-    @ApiModelProperty("行程内容")
-    private String itinerary;
-
-    /** 行程日期 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    @DateTimeFormat(pattern = "yyyy-MM-dd")
-    private Date itineraryDate;
-
-    /** 行程标记 */
-    private String mark;
-
-    /** 行程时间 */
-    @JsonFormat(pattern = "HH:mm")
-    @ApiModelProperty("行程时间")
-    private Date itineraryTime;
-
-    /** 预留字段 */
-    @ApiModelProperty("预留字段")
-    private String reservedField;
-
-
-}

+ 0 - 55
fs-service/src/main/java/com/fs/his/domain/FsUserPayCompetitorsRecord.java

@@ -1,55 +0,0 @@
-package com.fs.his.domain;
-
-import java.math.BigDecimal;
-import java.util.Date;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.fs.common.annotation.Excel;
-import lombok.Data;
-import com.fs.common.core.domain.BaseEntity;
-import lombok.EqualsAndHashCode;
-
-/**
- * 用户购买竞品信息记录对象 fs_user_pay_competitors_record
- *
- * @author fs
- * @date 2025-08-26
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class FsUserPayCompetitorsRecord extends BaseEntity{
-
-    /** 自增主键ID */
-    private Long id;
-
-    /** 用户ID */
-    private Long userId;
-
-    /** 竞品公司 */
-    private String competitorCompany;
-
-    /** 产品名称 */
-    private String product;
-
-    /** 价格 */
-    private BigDecimal priceAmount;
-
-    /** 服务内容 */
-    private String serviceInfo;
-
-    /** 免费服务次数 */
-    private Integer freeServiceCount;
-
-    /** 预留字段 */
-    private String reservedField;
-
-    /** 创建时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date createdTime;
-
-    /** 更新时间 */
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date updatedTime;
-
-
-}

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor