Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

yfh 1 nedēļu atpakaļ
vecāks
revīzija
790612682a
22 mainītis faili ar 1096 papildinājumiem un 14 dzēšanām
  1. 41 0
      fs-company/src/main/java/com/fs/company/controller/qw/QwUserVoiceLogController.java
  2. 7 6
      fs-doctor-app/src/main/java/com/fs/framework/config/MyBatisConfig.java
  3. 5 1
      fs-service/src/main/java/com/fs/erp/service/impl/JSTErpOrderServiceImpl.java
  4. 42 0
      fs-service/src/main/java/com/fs/his/domain/FsComplaintTemplate.java
  5. 63 0
      fs-service/src/main/java/com/fs/his/domain/FsUserComplaint.java
  6. 62 0
      fs-service/src/main/java/com/fs/his/mapper/FsComplaintTemplateMapper.java
  7. 63 0
      fs-service/src/main/java/com/fs/his/mapper/FsUserComplaintMapper.java
  8. 62 0
      fs-service/src/main/java/com/fs/his/service/IFsComplaintTemplateService.java
  9. 63 0
      fs-service/src/main/java/com/fs/his/service/IFsUserComplaintService.java
  10. 94 0
      fs-service/src/main/java/com/fs/his/service/impl/FsComplaintTemplateServiceImpl.java
  11. 6 2
      fs-service/src/main/java/com/fs/his/service/impl/FsStorePaymentServiceImpl.java
  12. 94 0
      fs-service/src/main/java/com/fs/his/service/impl/FsUserComplaintServiceImpl.java
  13. 88 0
      fs-service/src/main/java/com/fs/his/utils/ComplaintTreeUtil.java
  14. 16 0
      fs-service/src/main/java/com/fs/his/vo/FsComplaintTemplateVO.java
  15. 52 0
      fs-service/src/main/java/com/fs/his/vo/FsUserComplaintVo.java
  16. 2 2
      fs-service/src/main/java/com/fs/hisStore/service/impl/FsStoreProductScrmServiceImpl.java
  17. 10 0
      fs-service/src/main/java/com/fs/qw/vo/QwUserVoiceLogVo.java
  18. 2 2
      fs-service/src/main/resources/application-config-druid-hdt.yml
  19. 86 0
      fs-service/src/main/resources/mapper/his/FsComplaintTemplateMapper.xml
  20. 108 0
      fs-service/src/main/resources/mapper/his/FsUserComplaintMapper.xml
  21. 8 1
      fs-service/src/main/resources/mapper/qw/QwUserVoiceLogMapper.xml
  22. 122 0
      fs-user-app/src/main/java/com/fs/app/controller/FsUserComplaintController.java

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

@@ -10,14 +10,20 @@ import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.framework.security.LoginUser;
 import com.fs.framework.service.TokenService;
 import com.fs.qw.domain.QwUserVoiceLog;
+import com.fs.qw.param.QwTagSearchParam;
+import com.fs.qw.service.IQwTagService;
 import com.fs.qw.service.IQwUserVoiceLogService;
 import com.fs.qw.vo.QwUserVoiceLogTotalVo;
 import com.fs.qw.vo.QwUserVoiceLogVo;
+import com.github.pagehelper.PageHelper;
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 企微用户通话记录Controller
@@ -35,6 +41,9 @@ public class QwUserVoiceLogController extends BaseController
     @Autowired
     private TokenService tokenService;
 
+    @Autowired
+    private IQwTagService iQwTagService;
+
     /**
      * 查询企微用户通话记录列表
      */
@@ -49,6 +58,35 @@ public class QwUserVoiceLogController extends BaseController
         return getDataTable(list);
     }
 
+
+    /**
+     * 查询企微用户通话记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('qw:qwUserVoiceLog:list')")
+    @PostMapping("/newList")
+    public TableDataInfo newList(@RequestBody QwUserVoiceLogVo qwUserVoiceLog)
+    {
+        PageHelper.startPage(qwUserVoiceLog.getPageNum(), qwUserVoiceLog.getPageSize());
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        qwUserVoiceLog.setCompanyId(loginUser.getCompany().getCompanyId());
+        List<QwUserVoiceLogVo> list = qwUserVoiceLogService.selectQwUserVoiceLogList(qwUserVoiceLog);
+        list.forEach(item->{
+
+            if (!Objects.equals(item.getQwExternalContact().getTagIds(), "[]") && item.getQwExternalContact().getTagIds()!=null) {
+                QwTagSearchParam param = new QwTagSearchParam();
+                Gson gson = new Gson();
+                List<String> tagIds = gson.fromJson(
+                        item.getQwExternalContact().getTagIds(),
+                        new TypeToken<List<String>>() {
+                        }.getType()
+                );
+                param.setTagIds(tagIds);
+                item.setTagIdsName(iQwTagService.selectQwTagListByTagIds(param));
+            }
+        });
+        return getDataTable(list);
+    }
+
     /**
      * 查询我的通话记录列表
      * @param qwUserVoiceLog
@@ -141,6 +179,9 @@ public class QwUserVoiceLogController extends BaseController
     @GetMapping("/totalExport")
     public AjaxResult totalExport(QwUserVoiceLogTotalVo qwUserVoiceLog)
     {
+        LoginUser loginUser = tokenService.getLoginUser(ServletUtils.getRequest());
+        qwUserVoiceLog.setCompanyId(loginUser.getCompany().getCompanyId());
+        qwUserVoiceLog.setQwUserId(1L);
         List<QwUserVoiceLogTotalVo> list = qwUserVoiceLogService.selectQwUserVoiceLogTotalList(qwUserVoiceLog);
         list.forEach(m-> {
             m.setQwUserName(m.getQwUser().getQwUserName());

+ 7 - 6
fs-doctor-app/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;
@@ -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();
     }

+ 5 - 1
fs-service/src/main/java/com/fs/erp/service/impl/JSTErpOrderServiceImpl.java

@@ -1,5 +1,6 @@
 package com.fs.erp.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
@@ -35,6 +36,7 @@ import org.springframework.util.CollectionUtils;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -113,7 +115,9 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
             shopOrderDTO.setFreight(fsStoreOrder.getPayDelivery().doubleValue());
         }
         // 备注
-        shopOrderDTO.setRemark(order.getBuyer_memo());
+        //shopOrderDTO.setRemark(order.getBuyer_memo());
+        shopOrderDTO.setRemark(DateUtil.format(new Date(), "dd"));
+
         // 买家留言
         shopOrderDTO.setBuyerMessage(order.getBuyer_memo());
 

+ 42 - 0
fs-service/src/main/java/com/fs/his/domain/FsComplaintTemplate.java

@@ -0,0 +1,42 @@
+package com.fs.his.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fs.common.annotation.Excel;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 投诉模板对象 fs_complaint_template
+ *
+ * @author fs
+ * @date 2025-06-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FsComplaintTemplate extends BaseEntity{
+
+    @TableId
+    private Long id;
+
+    /** 上级编码 */
+    @Excel(name = "上级编码")
+    private Long parentId;
+
+    /** 同级下排序 */
+    @Excel(name = "同级下排序")
+    private Long sort;
+
+    /** 投诉分类 */
+    @Excel(name = "投诉分类")
+    private String name;
+
+
+    @Excel(name = "投诉分类")
+    private Long isDel;
+
+
+    private String description;
+
+
+}

+ 63 - 0
fs-service/src/main/java/com/fs/his/domain/FsUserComplaint.java

@@ -0,0 +1,63 @@
+package com.fs.his.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fs.common.annotation.Excel;
+import com.fs.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+
+/**
+ * 用户投诉对象 fs_user_complaint
+ *
+ * @author fs
+ * @date 2025-06-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class FsUserComplaint extends BaseEntity{
+
+    @TableId
+    private Long id;
+
+    /** 用户id */
+//    @Excel(name = "用户id")
+    private Long userId;
+
+    @Excel(name = "用户")
+    private String userName;
+
+    /** 投诉模板id */
+    @Excel(name = "投诉模板id")
+    private Long templateId;
+
+    /** 详细内容 */
+    @Excel(name = "详细内容")
+    private String content;
+
+    /** 联系方式 */
+    @Excel(name = "联系方式")
+    private String phone;
+
+    /** 图片地址 */
+    @Excel(name = "图片地址")
+    private String urls;
+
+    @Excel(name = "交易截图")
+    private String tradeImage;
+
+    /** 被投诉人信息 */
+    @Excel(name = "被投诉人信息")
+    private String account;
+
+    /** 是否处理 */
+    @Excel(name = "是否处理")
+    private Integer isHandle;
+
+    //投诉时间
+    private Date complaintsTime;
+    private Date complainteTime;
+
+    private String remarks;
+}

+ 62 - 0
fs-service/src/main/java/com/fs/his/mapper/FsComplaintTemplateMapper.java

@@ -0,0 +1,62 @@
+package com.fs.his.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.his.domain.FsComplaintTemplate;
+
+import java.util.List;
+
+/**
+ * 投诉模板Mapper接口
+ *
+ * @author fs
+ * @date 2025-06-09
+ */
+public interface FsComplaintTemplateMapper extends BaseMapper<FsComplaintTemplate>{
+    /**
+     * 查询投诉模板
+     *
+     * @param id 投诉模板主键
+     * @return 投诉模板
+     */
+    FsComplaintTemplate selectFsComplaintTemplateById(Long id);
+
+    /**
+     * 查询投诉模板列表
+     *
+     * @param fsComplaintTemplate 投诉模板
+     * @return 投诉模板集合
+     */
+    List<FsComplaintTemplate> selectFsComplaintTemplateList(FsComplaintTemplate fsComplaintTemplate);
+
+    /**
+     * 新增投诉模板
+     *
+     * @param fsComplaintTemplate 投诉模板
+     * @return 结果
+     */
+    int insertFsComplaintTemplate(FsComplaintTemplate fsComplaintTemplate);
+
+    /**
+     * 修改投诉模板
+     *
+     * @param fsComplaintTemplate 投诉模板
+     * @return 结果
+     */
+    int updateFsComplaintTemplate(FsComplaintTemplate fsComplaintTemplate);
+
+    /**
+     * 删除投诉模板
+     *
+     * @param id 投诉模板主键
+     * @return 结果
+     */
+    int deleteFsComplaintTemplateById(Long id);
+
+    /**
+     * 批量删除投诉模板
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteFsComplaintTemplateByIds(Long[] ids);
+}

+ 63 - 0
fs-service/src/main/java/com/fs/his/mapper/FsUserComplaintMapper.java

@@ -0,0 +1,63 @@
+package com.fs.his.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fs.his.domain.FsUserComplaint;
+import com.fs.his.vo.FsUserComplaintVo;
+
+import java.util.List;
+
+/**
+ * 用户投诉Mapper接口
+ *
+ * @author fs
+ * @date 2025-06-09
+ */
+public interface FsUserComplaintMapper extends BaseMapper<FsUserComplaint>{
+    /**
+     * 查询用户投诉
+     *
+     * @param id 用户投诉主键
+     * @return 用户投诉
+     */
+    FsUserComplaintVo selectFsUserComplaintById(Long id);
+
+    /**
+     * 查询用户投诉列表
+     *
+     * @param fsUserComplaint 用户投诉
+     * @return 用户投诉集合
+     */
+    List<FsUserComplaintVo> selectFsUserComplaintList(FsUserComplaint fsUserComplaint);
+
+    /**
+     * 新增用户投诉
+     *
+     * @param fsUserComplaint 用户投诉
+     * @return 结果
+     */
+    int insertFsUserComplaint(FsUserComplaint fsUserComplaint);
+
+    /**
+     * 修改用户投诉
+     *
+     * @param fsUserComplaint 用户投诉
+     * @return 结果
+     */
+    int updateFsUserComplaint(FsUserComplaint fsUserComplaint);
+
+    /**
+     * 删除用户投诉
+     *
+     * @param id 用户投诉主键
+     * @return 结果
+     */
+    int deleteFsUserComplaintById(Long id);
+
+    /**
+     * 批量删除用户投诉
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    int deleteFsUserComplaintByIds(Long[] ids);
+}

+ 62 - 0
fs-service/src/main/java/com/fs/his/service/IFsComplaintTemplateService.java

@@ -0,0 +1,62 @@
+package com.fs.his.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.his.domain.FsComplaintTemplate;
+
+import java.util.List;
+
+/**
+ * 投诉模板Service接口
+ *
+ * @author fs
+ * @date 2025-06-09
+ */
+public interface IFsComplaintTemplateService extends IService<FsComplaintTemplate>{
+    /**
+     * 查询投诉模板
+     *
+     * @param id 投诉模板主键
+     * @return 投诉模板
+     */
+    FsComplaintTemplate selectFsComplaintTemplateById(Long id);
+
+    /**
+     * 查询投诉模板列表
+     *
+     * @param fsComplaintTemplate 投诉模板
+     * @return 投诉模板集合
+     */
+    List<FsComplaintTemplate> selectFsComplaintTemplateList(FsComplaintTemplate fsComplaintTemplate);
+
+    /**
+     * 新增投诉模板
+     *
+     * @param fsComplaintTemplate 投诉模板
+     * @return 结果
+     */
+    int insertFsComplaintTemplate(FsComplaintTemplate fsComplaintTemplate);
+
+    /**
+     * 修改投诉模板
+     *
+     * @param fsComplaintTemplate 投诉模板
+     * @return 结果
+     */
+    int updateFsComplaintTemplate(FsComplaintTemplate fsComplaintTemplate);
+
+    /**
+     * 批量删除投诉模板
+     *
+     * @param ids 需要删除的投诉模板主键集合
+     * @return 结果
+     */
+    int deleteFsComplaintTemplateByIds(Long[] ids);
+
+    /**
+     * 删除投诉模板信息
+     *
+     * @param id 投诉模板主键
+     * @return 结果
+     */
+    int deleteFsComplaintTemplateById(Long id);
+}

+ 63 - 0
fs-service/src/main/java/com/fs/his/service/IFsUserComplaintService.java

@@ -0,0 +1,63 @@
+package com.fs.his.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.fs.his.domain.FsUserComplaint;
+import com.fs.his.vo.FsUserComplaintVo;
+
+import java.util.List;
+
+/**
+ * 用户投诉Service接口
+ *
+ * @author fs
+ * @date 2025-06-09
+ */
+public interface IFsUserComplaintService extends IService<FsUserComplaint>{
+    /**
+     * 查询用户投诉
+     *
+     * @param id 用户投诉主键
+     * @return 用户投诉
+     */
+    FsUserComplaintVo selectFsUserComplaintById(Long id);
+
+    /**
+     * 查询用户投诉列表
+     *
+     * @param fsUserComplaint 用户投诉
+     * @return 用户投诉集合
+     */
+    List<FsUserComplaintVo> selectFsUserComplaintList(FsUserComplaint fsUserComplaint);
+
+    /**
+     * 新增用户投诉
+     *
+     * @param fsUserComplaint 用户投诉
+     * @return 结果
+     */
+    int insertFsUserComplaint(FsUserComplaint fsUserComplaint);
+
+    /**
+     * 修改用户投诉
+     *
+     * @param fsUserComplaint 用户投诉
+     * @return 结果
+     */
+    int updateFsUserComplaint(FsUserComplaint fsUserComplaint);
+
+    /**
+     * 批量删除用户投诉
+     *
+     * @param ids 需要删除的用户投诉主键集合
+     * @return 结果
+     */
+    int deleteFsUserComplaintByIds(Long[] ids);
+
+    /**
+     * 删除用户投诉信息
+     *
+     * @param id 用户投诉主键
+     * @return 结果
+     */
+    int deleteFsUserComplaintById(Long id);
+}

+ 94 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsComplaintTemplateServiceImpl.java

@@ -0,0 +1,94 @@
+package com.fs.his.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.common.utils.DateUtils;
+import com.fs.his.domain.FsComplaintTemplate;
+import com.fs.his.mapper.FsComplaintTemplateMapper;
+import com.fs.his.service.IFsComplaintTemplateService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 投诉模板Service业务层处理
+ *
+ * @author fs
+ * @date 2025-06-09
+ */
+@Service
+public class FsComplaintTemplateServiceImpl extends ServiceImpl<FsComplaintTemplateMapper, FsComplaintTemplate> implements IFsComplaintTemplateService {
+
+    /**
+     * 查询投诉模板
+     *
+     * @param id 投诉模板主键
+     * @return 投诉模板
+     */
+    @Override
+    public FsComplaintTemplate selectFsComplaintTemplateById(Long id)
+    {
+        return baseMapper.selectFsComplaintTemplateById(id);
+    }
+
+    /**
+     * 查询投诉模板列表
+     *
+     * @param fsComplaintTemplate 投诉模板
+     * @return 投诉模板
+     */
+    @Override
+    public List<FsComplaintTemplate> selectFsComplaintTemplateList(FsComplaintTemplate fsComplaintTemplate)
+    {
+        return baseMapper.selectFsComplaintTemplateList(fsComplaintTemplate);
+    }
+
+    /**
+     * 新增投诉模板
+     *
+     * @param fsComplaintTemplate 投诉模板
+     * @return 结果
+     */
+    @Override
+    public int insertFsComplaintTemplate(FsComplaintTemplate fsComplaintTemplate)
+    {
+        fsComplaintTemplate.setCreateTime(DateUtils.getNowDate());
+        return baseMapper.insertFsComplaintTemplate(fsComplaintTemplate);
+    }
+
+    /**
+     * 修改投诉模板
+     *
+     * @param fsComplaintTemplate 投诉模板
+     * @return 结果
+     */
+    @Override
+    public int updateFsComplaintTemplate(FsComplaintTemplate fsComplaintTemplate)
+    {
+        fsComplaintTemplate.setUpdateTime(DateUtils.getNowDate());
+        return baseMapper.updateFsComplaintTemplate(fsComplaintTemplate);
+    }
+
+    /**
+     * 批量删除投诉模板
+     *
+     * @param ids 需要删除的投诉模板主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsComplaintTemplateByIds(Long[] ids)
+    {
+        return baseMapper.deleteFsComplaintTemplateByIds(ids);
+    }
+
+    /**
+     * 删除投诉模板信息
+     *
+     * @param id 投诉模板主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsComplaintTemplateById(Long id)
+    {
+        return baseMapper.deleteFsComplaintTemplateById(id);
+    }
+}

+ 6 - 2
fs-service/src/main/java/com/fs/his/service/impl/FsStorePaymentServiceImpl.java

@@ -23,6 +23,7 @@ import com.fs.common.utils.poi.ExcelUtil;
 import com.fs.company.mapper.CompanyConfigMapper;
 import com.fs.company.param.FsStoreStatisticsParam;
 import com.fs.company.vo.FsStorePaymentStatisticsVO;
+import com.fs.config.cloud.CloudHostProper;
 import com.fs.core.config.WxPayProperties;
 import com.fs.core.utils.OrderCodeUtils;
 import com.fs.course.config.CourseConfig;
@@ -153,6 +154,9 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
     @Autowired
     private FsUserWxMapper userWxMapper;
 
+    @Autowired
+    private CloudHostProper cloudHostProper;
+
     /**
      * 查询支付明细
      *
@@ -571,7 +575,7 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
         if(StringUtils.isEmpty(code)){
             return R.error("红包单号生成失败,请重试");
         }
-        request.setOutBatchNo("fsCourse" + code);
+        request.setOutBatchNo("fsCourse"+cloudHostProper.getProjectCode() + code);
         request.setBatchRemark("课堂答题奖励");
         request.setBatchName("课堂答题奖励");
         Integer amount = WxPayUnifiedOrderRequest.yuanToFen(param.getAmount().toString());
@@ -583,7 +587,7 @@ public class FsStorePaymentServiceImpl implements IFsStorePaymentService {
         TransferBatchesRequest.TransferDetail transferDetail = new TransferBatchesRequest.TransferDetail();
         transferDetail.setOpenid(param.getOpenId());
         String code1 = IdUtil.getSnowflake(0, 0).nextIdStr();
-        transferDetail.setOutDetailNo("fsCourse" + code1);
+        transferDetail.setOutDetailNo("fsCourse"+cloudHostProper.getProjectCode() + code1);
         transferDetail.setTransferAmount(amount);
         transferDetail.setTransferRemark("恭喜同学,认真听课,奖励你一朵小红花!");
         transferDetailList.add(transferDetail);

+ 94 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsUserComplaintServiceImpl.java

@@ -0,0 +1,94 @@
+package com.fs.his.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fs.common.utils.DateUtils;
+import com.fs.his.domain.FsUserComplaint;
+import com.fs.his.mapper.FsUserComplaintMapper;
+import com.fs.his.service.IFsUserComplaintService;
+import com.fs.his.vo.FsUserComplaintVo;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 用户投诉Service业务层处理
+ *
+ * @author fs
+ * @date 2025-06-09
+ */
+@Service
+public class FsUserComplaintServiceImpl extends ServiceImpl<FsUserComplaintMapper, FsUserComplaint> implements IFsUserComplaintService {
+
+    /**
+     * 查询用户投诉
+     *
+     * @param id 用户投诉主键
+     * @return 用户投诉
+     */
+    @Override
+    public FsUserComplaintVo selectFsUserComplaintById(Long id)
+    {
+        return baseMapper.selectFsUserComplaintById(id);
+    }
+
+    /**
+     * 查询用户投诉列表
+     *
+     * @param fsUserComplaint 用户投诉
+     * @return 用户投诉
+     */
+    @Override
+    public List<FsUserComplaintVo> selectFsUserComplaintList(FsUserComplaint fsUserComplaint)
+    {
+        return baseMapper.selectFsUserComplaintList(fsUserComplaint);
+    }
+
+    /**
+     * 新增用户投诉
+     *
+     * @param fsUserComplaint 用户投诉
+     * @return 结果
+     */
+    @Override
+    public int insertFsUserComplaint(FsUserComplaint fsUserComplaint)
+    {
+        fsUserComplaint.setCreateTime(DateUtils.getNowDate());
+        return baseMapper.insertFsUserComplaint(fsUserComplaint);
+    }
+
+    /**
+     * 修改用户投诉
+     *
+     * @param fsUserComplaint 用户投诉
+     * @return 结果
+     */
+    @Override
+    public int updateFsUserComplaint(FsUserComplaint fsUserComplaint)
+    {
+        return baseMapper.updateFsUserComplaint(fsUserComplaint);
+    }
+
+    /**
+     * 批量删除用户投诉
+     *
+     * @param ids 需要删除的用户投诉主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsUserComplaintByIds(Long[] ids)
+    {
+        return baseMapper.deleteFsUserComplaintByIds(ids);
+    }
+
+    /**
+     * 删除用户投诉信息
+     *
+     * @param id 用户投诉主键
+     * @return 结果
+     */
+    @Override
+    public int deleteFsUserComplaintById(Long id)
+    {
+        return baseMapper.deleteFsUserComplaintById(id);
+    }
+}

+ 88 - 0
fs-service/src/main/java/com/fs/his/utils/ComplaintTreeUtil.java

@@ -0,0 +1,88 @@
+package com.fs.his.utils;
+
+import com.fs.his.vo.FsComplaintTemplateVO;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @ClassName 树形工具类
+ **/
+public class ComplaintTreeUtil {
+    /**
+     * 获得指定节点下所有归档
+     *
+     * @param list
+     * @param parentId
+     * @return
+     */
+    public static List<FsComplaintTemplateVO> list2TreeConverter(List<FsComplaintTemplateVO> list, int parentId) {
+        List<FsComplaintTemplateVO> returnList = new ArrayList<>();
+
+        for (FsComplaintTemplateVO res : list) {
+            //判断对象是否为根节点
+
+            if (res.getParentId() == parentId) {
+                //该节点为根节点,开始递归
+                //通过递归为节点设置childList
+                recursionFn(list, res);
+                returnList.add(res);
+            }
+        }
+
+        return returnList;
+    }
+
+    /**
+     * 递归列表
+     * 通过递归,给指定t节点设置childList
+     *
+     * @param list
+     * @param t
+     */
+    public static void recursionFn(List<FsComplaintTemplateVO> list, FsComplaintTemplateVO t) {
+        //只能获取当前t节点的子节点集,并不是所有子节点集
+        List<FsComplaintTemplateVO> childsList = getChildList(list, t);
+
+        if(childsList!=null&&childsList.size()>0){
+            //设置他的子集对象集
+            t.setChildren(childsList);
+        }
+
+
+
+        //迭代子集对象集
+
+        //遍历完,则退出递归
+        for (FsComplaintTemplateVO nextChild : childsList) {
+
+            //判断子集对象是否还有子节点
+            if (!CollectionUtils.isEmpty(childsList)) {
+                //有下一个子节点,继续递归
+                recursionFn(list, nextChild);
+            }
+        }
+    }
+
+    /**
+     * 获得指定节点下的所有子节点
+     *
+     * @param list
+     * @param t
+     * @return
+     */
+    public static List<FsComplaintTemplateVO> getChildList(List<FsComplaintTemplateVO> list, FsComplaintTemplateVO t) {
+        List<FsComplaintTemplateVO> childsList = new ArrayList<>();
+        //遍历集合元素,如果元素的Parentid==指定元素的id,则说明是该元素的子节点
+        for (FsComplaintTemplateVO t1 : list) {
+            if (t1.getParentId().equals(t.getId())) {
+                childsList.add(t1);
+            }
+        }
+
+        return childsList;
+    }
+
+
+}

+ 16 - 0
fs-service/src/main/java/com/fs/his/vo/FsComplaintTemplateVO.java

@@ -0,0 +1,16 @@
+package com.fs.his.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class FsComplaintTemplateVO {
+    private static final long serialVersionUID = 1L;
+    private Long id;
+    private String name;
+    private Long parentId;
+    private String description;
+    private Long sort;
+    private List<FsComplaintTemplateVO> children; //子集
+}

+ 52 - 0
fs-service/src/main/java/com/fs/his/vo/FsUserComplaintVo.java

@@ -0,0 +1,52 @@
+package com.fs.his.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fs.common.annotation.Excel;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class FsUserComplaintVo {
+    private Long id;
+
+    /** 用户id */
+    @Excel(name = "用户")
+    private String userName;
+
+    /** 投诉模板id */
+    @Excel(name = "投诉模板id")
+    private Long templateId;
+
+    private String name;
+
+    /** 详细内容 */
+    @Excel(name = "详细内容")
+    private String content;
+
+    /** 联系方式 */
+//   2025-7-3 新增需求不在导出 @Excel(name = "联系方式")
+    private String phone;
+
+    /** 图片地址 */
+    @Excel(name = "图片地址")
+    private String urls;
+
+    @Excel(name = "交易截图")
+    private String tradeImage;
+
+    /** 被投诉人信息 */
+    @Excel(name = "被投诉人信息")
+    private String account;
+
+    /** 是否处理 */
+    @Excel(name = "是否处理")
+    private Integer isHandle;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "投诉时间",dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    @Excel(name="备注")
+    private String remarks;
+}

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

@@ -311,7 +311,7 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
             product.setStock(Long.parseLong(countDto.getStock().toString()));
             product.setCompanyIds(param.getCompanyIds());
             product.setVideo(param.getVideo());
-//            product.setIsDrug(param.getIsDrug());
+            product.setIsDrug(param.getIsDrug());
             fsStoreProductMapper.updateFsStoreProduct(product);
             if (param.getSpecType().equals(0)) {
                 ProductArrtDTO fromatDetailDto = ProductArrtDTO.builder()
@@ -336,7 +336,7 @@ public class FsStoreProductScrmServiceImpl implements IFsStoreProductScrmService
             product.setStock(Long.parseLong(countDto.getStock().toString()));
             product.setCompanyIds(param.getCompanyIds());
             product.setVideo(param.getVideo());
-//            product.setIsDrug(param.getIsDrug());
+            product.setIsDrug(param.getIsDrug());
             fsStoreProductMapper.insertFsStoreProduct(product);
             if (param.getSpecType().equals(0)) {
                 ProductArrtDTO fromatDetailDto = ProductArrtDTO.builder()

+ 10 - 0
fs-service/src/main/java/com/fs/qw/vo/QwUserVoiceLogVo.java

@@ -9,6 +9,8 @@ import com.fs.qw.domain.QwUser;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.util.List;
+
 @Data
 @EqualsAndHashCode(callSuper = true)
 public class QwUserVoiceLogVo extends BaseEntity {
@@ -68,4 +70,12 @@ public class QwUserVoiceLogVo extends BaseEntity {
 
     private QwUser qwUser;
 
+    private List<String> tagIds;
+
+    private List<String> tagIdsName;
+
+    private Integer pageNum;
+
+    private Integer pageSize;
+
 }

+ 2 - 2
fs-service/src/main/resources/application-config-druid-hdt.yml

@@ -83,8 +83,8 @@ cloud_host:
 headerImg:
   imgUrl: https://jz-cos-1356808054.cos.ap-chengdu.myqcloud.com/fs/20250515/0877754b59814ea8a428fa3697b20e68.png
 ipad:
-  ipadUrl: http://ipad.cdwjyyh.com
-  aiApi:
+  ipadUrl: http://ipad.hebeihdt.com
+  aiApi: http://127.0.0.1:3000/api
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 86 - 0
fs-service/src/main/resources/mapper/his/FsComplaintTemplateMapper.xml

@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.his.mapper.FsComplaintTemplateMapper">
+
+    <resultMap type="FsComplaintTemplate" id="FsComplaintTemplateResult">
+        <result property="id"    column="id"    />
+        <result property="parentId"    column="parent_id"    />
+        <result property="sort"    column="sort"    />
+        <result property="name"    column="name"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="isDel"    column="is_del"    />
+        <result property="description"    column="description"    />
+    </resultMap>
+
+    <sql id="selectFsComplaintTemplateVo">
+        select id, parent_id, sort, name, update_time, create_time, is_del,description from fs_complaint_template
+    </sql>
+
+    <select id="selectFsComplaintTemplateList" parameterType="FsComplaintTemplate" resultMap="FsComplaintTemplateResult">
+        <include refid="selectFsComplaintTemplateVo"/>
+        <where>
+            <if test="parentId != null "> and parent_id = #{parentId}</if>
+            <if test="sort != null "> and sort = #{sort}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="isDel != null "> and is_del = #{isDel}</if>
+            <if test="description != null and description !=''"> and description = #{description}</if>
+        </where>
+    </select>
+
+    <select id="selectFsComplaintTemplateById" parameterType="Long" resultMap="FsComplaintTemplateResult">
+        <include refid="selectFsComplaintTemplateVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertFsComplaintTemplate" parameterType="FsComplaintTemplate">
+        insert into fs_complaint_template
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="parentId != null">parent_id,</if>
+            <if test="sort != null">sort,</if>
+            <if test="name != null and name != ''">name,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="isDel != null">is_del,</if>
+            <if test="description != null">description,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="parentId != null">#{parentId},</if>
+            <if test="sort != null">#{sort},</if>
+            <if test="name != null and name != ''">#{name},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="isDel != null">#{isDel},</if>
+            <if test="description != null">#{description},</if>
+         </trim>
+    </insert>
+
+    <update id="updateFsComplaintTemplate" parameterType="FsComplaintTemplate">
+        update fs_complaint_template
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="parentId != null">parent_id = #{parentId},</if>
+            <if test="sort != null">sort = #{sort},</if>
+            <if test="name != null and name != ''">name = #{name},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="isDel != null">is_del = #{isDel},</if>
+            <if test="description != null  and description != ''">description = #{description},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteFsComplaintTemplateById" parameterType="Long">
+        delete from fs_complaint_template where id = #{id}
+    </delete>
+
+    <delete id="deleteFsComplaintTemplateByIds" parameterType="String">
+        delete from fs_complaint_template where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 108 - 0
fs-service/src/main/resources/mapper/his/FsUserComplaintMapper.xml

@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fs.his.mapper.FsUserComplaintMapper">
+
+    <resultMap type="FsUserComplaint" id="FsUserComplaintResult">
+        <result property="id"    column="id"    />
+        <result property="userId"    column="user_id"    />
+        <result property="userName"    column="user_name"    />
+        <result property="templateId"    column="template_id"    />
+        <result property="content"    column="content"    />
+        <result property="phone"    column="phone"    />
+        <result property="urls"    column="urls"    />
+        <result property="tradeImage"    column="trade_image"    />
+        <result property="account"    column="account"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="isHandle"    column="is_handle"    />
+    </resultMap>
+
+    <sql id="selectFsUserComplaintVo">
+        select id, user_id,user_name template_id, content, phone, urls,trade_image, account, create_time, is_handle, remarks from fs_user_complaint
+    </sql>
+
+    <select id="selectFsUserComplaintList" parameterType="FsUserComplaint" resultType="com.fs.his.vo.FsUserComplaintVo">
+        select id, user_name, template_id, content, phone, urls,trade_image, account, create_time, is_handle, remarks
+        from fs_user_complaint c
+        <where>
+            <if test="userId != null "> and user_id = #{userId}</if>
+            <if test="userName != null and userName != ''"> and user_name like concat('%',#{userName},'%') </if>
+            <if test="templateId != null "> and template_id = #{templateId}</if>
+            <if test="content != null  and content != ''"> and content = #{content}</if>
+            <if test="phone != null  and phone != ''"> and phone = #{phone}</if>
+            <if test="urls != null  and urls != ''"> and urls = #{urls}</if>
+            <if test="tradeImage != null  and tradeImage != ''"> and trade_image = #{tradeImage}</if>
+            <if test="account != null  and account != ''"> and account = #{account}</if>
+            <if test="isHandle != null "> and is_handle = #{isHandle}</if>
+            <if test="complaintsTime != null ">  and create_time &gt;= #{complaintsTime}</if>
+            <if test="complainteTime != null ">  and create_time &lt; date_add(#{complainteTime}, interval 1 day)</if>
+        </where>
+    </select>
+
+    <select id="selectFsUserComplaintById" parameterType="Long" resultType="com.fs.his.vo.FsUserComplaintVo">
+        select c.id, c.user_name, c.template_id, c.content, c.phone, c.urls,c.trade_image, c.account, c.create_time, c.is_handle,t.name,c.remarks
+        from fs_user_complaint c
+        left join fs_complaint_template t on c.template_id = t.id
+        where c.id = #{id}
+    </select>
+
+    <insert id="insertFsUserComplaint" parameterType="FsUserComplaint" useGeneratedKeys="true" keyProperty="id">
+        insert into fs_user_complaint
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="userId != null">user_id,</if>
+            <if test="userName != null">user_name,</if>
+            <if test="templateId != null">template_id,</if>
+            <if test="content != null">content,</if>
+            <if test="phone != null">phone,</if>
+            <if test="urls != null">urls,</if>
+            <if test="tradeImage != null">trade_image,</if>
+            <if test="account != null">account,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="isHandle != null">is_handle,</if>
+            <if test="remarks != null">remarks,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="userId != null">#{userId},</if>
+            <if test="userName != null">#{userName},</if>
+            <if test="templateId != null">#{templateId},</if>
+            <if test="content != null">#{content},</if>
+            <if test="phone != null">#{phone},</if>
+            <if test="urls != null">#{urls},</if>
+            <if test="tradeImage != null">#{tradeImage},</if>
+            <if test="account != null">#{account},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="isHandle != null">#{isHandle},</if>
+            <if test="remarks != null">#{remarks},</if>
+         </trim>
+    </insert>
+
+    <update id="updateFsUserComplaint" parameterType="FsUserComplaint">
+        update fs_user_complaint
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="userName != null and userName !=''">user_name = #{userName},</if>
+            <if test="templateId != null">template_id = #{templateId},</if>
+            <if test="content != null">content = #{content},</if>
+            <if test="phone != null">phone = #{phone},</if>
+            <if test="urls != null and urls !=''">urls = #{urls},</if>
+            <if test="tradeImage != null and tradeImage !=''">trade_image = #{tradeImage},</if>
+            <if test="account != null">account = #{account},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="isHandle != null">is_handle = #{isHandle},</if>
+            <if test="remarks != null">remarks = #{remarks},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteFsUserComplaintById" parameterType="Long">
+        delete from fs_user_complaint where id = #{id}
+    </delete>
+
+    <delete id="deleteFsUserComplaintByIds" parameterType="String">
+        delete from fs_user_complaint where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 8 - 1
fs-service/src/main/resources/mapper/qw/QwUserVoiceLogMapper.xml

@@ -57,7 +57,7 @@
     </sql>
 
     <select id="selectQwUserVoiceLogList" resultMap="QwUserVoiceLogVoResult">
-        select uvl.id, ext_id, uvl.qw_user_id, duration, title, uvl.status, uvl.corp_id, uvl.company_id, uvl.company_user_id, uvl.create_time,qec.`name`,c.company_name,cu.user_name,qu.qw_user_name
+        select uvl.id, ext_id, uvl.qw_user_id, duration, title, uvl.status, uvl.corp_id, uvl.company_id, uvl.company_user_id, uvl.create_time,qec.`name`,qec.tag_ids,c.company_name,cu.user_name,qu.qw_user_name
         from qw_user_voice_log uvl
         left join qw_external_contact qec on uvl.ext_id = qec.id
         left join company c on uvl.company_id = c.company_id
@@ -68,6 +68,13 @@
             <if test="qwUserName != null "> and qu.qw_user_name like concat(#{qwUserName}, '%')</if>
             <if test="title != null  and title != ''"> and uvl.title = #{title}</if>
             <if test="status != null "> and uvl.status = #{status}</if>
+            <if test="tagIds != null">
+                and
+                <foreach collection="tagIds" item="tagId" separator="and">
+                    <!-- 使用JSON_CONTAINS检查JSON数组中是否包含指定元素 -->
+                    JSON_CONTAINS(qec.tag_ids, CONCAT('"', #{tagId}, '"'))
+                </foreach>
+            </if>
             <if test="corpId != null  and corpId != ''"> and uvl.corp_id = #{corpId}</if>
             <if test="companyId != null "> and c.company_id = #{companyId}</if>
             <if test="companyName != null "> and c.company_name like concat(#{companyName}, '%')</if>

+ 122 - 0
fs-user-app/src/main/java/com/fs/app/controller/FsUserComplaintController.java

@@ -0,0 +1,122 @@
+package com.fs.app.controller;
+
+import com.fs.app.annotation.Login;
+import com.fs.common.core.domain.AjaxResult;
+import com.fs.common.core.domain.R;
+import com.fs.common.core.page.TableDataInfo;
+import com.fs.his.domain.FsComplaintTemplate;
+import com.fs.his.domain.FsUserComplaint;
+import com.fs.his.service.IFsComplaintTemplateService;
+import com.fs.his.service.IFsUserComplaintService;
+import com.fs.his.utils.ComplaintTreeUtil;
+import com.fs.his.vo.FsComplaintTemplateVO;
+import com.fs.his.vo.FsUserComplaintVo;
+import com.google.common.collect.Lists;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 用户投诉Controller
+ *
+ * @author fs
+ * @date 2025-06-09
+ */
+@RestController
+@RequestMapping("/app/complaint")
+public class FsUserComplaintController extends AppBaseController
+{
+    @Autowired
+    private IFsUserComplaintService fsUserComplaintService;
+    @Autowired
+    private IFsComplaintTemplateService fsComplaintTemplateService;
+
+    /**
+     * 查询投诉模板列表
+     */
+    @GetMapping("/templateList")
+    public TableDataInfo list(FsComplaintTemplate fsComplaintTemplate)
+    {
+        startPage();
+        fsComplaintTemplate.setIsDel(0L);
+        List<FsComplaintTemplate> list = fsComplaintTemplateService.selectFsComplaintTemplateList(fsComplaintTemplate);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询投诉模板树形结果
+     */
+    @GetMapping("/treeList")
+    public R treeList(FsComplaintTemplate fsComplaintTemplate)
+    {
+        List<FsComplaintTemplate> list = fsComplaintTemplateService.selectFsComplaintTemplateList(fsComplaintTemplate);
+        List<FsComplaintTemplateVO> templateVOS = Lists.newArrayList();
+        for (FsComplaintTemplate template : list){
+            FsComplaintTemplateVO templateVO = new FsComplaintTemplateVO();
+            templateVO.setId(template.getId());
+            templateVO.setName(template.getName());
+            templateVO.setParentId(template.getParentId());
+            templateVO.setDescription(template.getDescription());
+            templateVO.setSort(template.getSort());
+            templateVOS.add(templateVO);
+        }
+        return R.ok().put("data", ComplaintTreeUtil.list2TreeConverter(templateVOS, 0));
+    }
+
+    /**
+     * 查询用户投诉列表
+     */
+//    @PreAuthorize("@ss.hasPermi('his:complaint:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(FsUserComplaint fsUserComplaint)
+    {
+        startPage();
+        List<FsUserComplaintVo> list = fsUserComplaintService.selectFsUserComplaintList(fsUserComplaint);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取用户投诉详细信息
+     */
+    @GetMapping(value = "/{id}")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return AjaxResult.success(fsUserComplaintService.selectFsUserComplaintById(id));
+    }
+
+    /**
+     * 新增用户投诉
+     */
+    @Login
+    @PostMapping
+    public AjaxResult add(@RequestBody FsUserComplaint fsUserComplaint)
+    {
+        String userId = getUserId();
+        fsUserComplaint.setUserId(Long.valueOf(userId));
+        return toAjax(fsUserComplaintService.insertFsUserComplaint(fsUserComplaint));
+    }
+
+    /**
+     * 修改用户投诉
+     */
+    @Login
+    @PutMapping
+    public AjaxResult edit(@RequestBody FsUserComplaint fsUserComplaint)
+    {
+        return toAjax(fsUserComplaintService.updateFsUserComplaint(fsUserComplaint));
+    }
+
+    /**
+     * 删除用户投诉
+     */
+    @Login
+	@DeleteMapping("/{ids}")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(fsUserComplaintService.deleteFsUserComplaintByIds(ids));
+    }
+}