Jelajahi Sumber

feat:从润天移动app的投诉建议功能到hisscrm

caoliqin 1 Minggu lalu
induk
melakukan
3c233ad1bb

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

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

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

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