From 78c1f87d61d1411356a422ab841afde67342d228 Mon Sep 17 00:00:00 2001
From: wangwh <2397901735@qq.com>
Date: Wed, 04 Sep 2024 20:52:15 +0800
Subject: [PATCH] 1、事项登记、详情查询接口 2、ocr识别文字接口 3、办理流转-查询下属人员、选择经办人、获取工作人员信息、添加办理反馈、获取办理反馈信息、修改办理反馈信息 4、督办-添加督办、回复督办、查询督办列表 5、查询评价

---
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtUnitWebController.java            |    6 
 dyh-service/dyh-sync/src/main/java/cn/huge/module/sync/controller/SyncController.java                       |    2 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseFeedbackMapper.java               |   64 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/CtUserMapper.java                       |    9 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseFeedbackMapper.xml            |  178 +
 dyh-service/dyh-sys/src/main/java/cn/huge/module/utils/BaiduOcrUtils.java                                   |   38 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java                     |  321 ++-
 dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/dao/mapper/xml/SyTimeLimitMapper.xml                    |  166 +
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseInfoDTO.java                      |   54 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseFeedback.java                      |  110 +
 dyh-service/dyh-sys/src/main/java/cn/huge/module/file/domain/po/FileInfo.java                               |    1 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseAgent.java                         |   20 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseFeedbackHis.java                   |  101 +
 dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java             |   28 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseSuperviseService.java                |  221 ++
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/impl/SysClientImpl.java                     |   55 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/bo/CaseFeedbackHisBO.java                 |   17 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseFeedbackHisService.java              |  133 +
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/SysClient.java                              |   33 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/RegisterSaveDTO.java                  |   68 
 dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/client/FileInfoClientController.java       |   62 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/CustClient.java                             |   12 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/controller/web/CasedraftAgentWebController.java  |   10 
 dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/controller/client/SyTimeLimitClientController.java      |  207 ++
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CasePersonService.java                   |    3 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/xml/CtUseroleMapper.xml                 |    8 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/po/CasedraftAgent.java                    |   19 
 dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/service/SyTimeLimitService.java                         |  133 +
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtDeptWebController.java            |    4 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseFeedbackWebController.java    |  230 ++
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtUserWebController.java            |   55 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseSuperviseMapper.xml           |  196 +
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseEvaluateMapper.java               |   64 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/impl/CustClientImpl.java                    |   20 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseAgentMapper.xml               |   12 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/bo/CaseEvaluateBO.java                    |   17 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/bo/CaseFeedbackBO.java                    |   17 
 dyh-service/dyh-sys/src/main/java/cn/huge/module/file/dao/mapper/xml/FileInfoMapper.xml                     |   81 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/pauser/service/PaUserService.java                         |   20 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseFeedbackHisMapper.java            |   64 
 dyh-service/dyh-sys/src/main/java/cn/huge/module/file/service/FileInfoService.java                          |  185 +
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseAgentWebController.java       |   10 
 dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/domain/po/SyTimeLimit.java                              |   90 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseSuperviseMapper.java              |   64 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/po/CasedraftPerson.java                   |    7 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dto/CtUserInfoDTO.java                             |   52 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtPostWebController.java            |    2 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/dao/mapper/xml/CasedraftAgentMapper.xml          |   12 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoUnfoldWebController.java  |   16 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseInfo.java                          |    3 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseFeedbackService.java                 |  246 ++
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/controller/web/CasedraftInfoWebController.java   |   19 
 dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/controller/web/SyTimeLimitWebController.java            |  209 ++
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseEvaluateMapper.xml            |  166 +
 dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/client/FileRelateClientController.java     |  119 +
 dyh-service/dyh-base/src/main/java/cn/huge/module/sys/dto/FileTypeTermsDTO.java                             |   49 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUseroleService.java                      |    9 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseSuperviseWebController.java   |  262 ++
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseSupervise.java                     |  127 +
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseFeedbackHisMapper.xml         |  175 +
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/service/CasedraftInfoService.java                |  254 +-
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseFeedbackHisWebController.java |  200 +
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java        |   37 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/CtUseroleMapper.java                    |    7 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/dto/DraftRegisterSaveDTO.java             |   33 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUserService.java                         |   98 
 dyh-service/dyh-sys/src/main/java/cn/huge/module/file/service/FileRelateService.java                        |   58 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/po/CasedraftInfo.java                     |    3 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/pauser/controller/wechat/PaUserWechatController.java      |   16 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseEvaluateService.java                 |  133 +
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/dto/CasedraftInfoDTO.java                 |   47 
 dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/xml/CtUserMapper.xml                    |   16 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoUnfoldService.java               |   29 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseEvaluateWebController.java    |  193 +
 dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/domain/bo/SyTimeLimitBO.java                            |   17 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/bo/CaseSuperviseBO.java                   |   17 
 dyh-service/dyh-sys/src/main/java/cn/huge/module/file/dao/mapper/FileInfoMapper.java                        |    7 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CasePerson.java                        |    7 
 dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/dao/mapper/SyTimeLimitMapper.java                       |   64 
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseEvaluate.java                      |   90 
 80 files changed, 5,670 insertions(+), 337 deletions(-)

diff --git a/dyh-service/dyh-base/src/main/java/cn/huge/module/sys/dto/FileTypeTermsDTO.java b/dyh-service/dyh-base/src/main/java/cn/huge/module/sys/dto/FileTypeTermsDTO.java
new file mode 100644
index 0000000..661e993
--- /dev/null
+++ b/dyh-service/dyh-base/src/main/java/cn/huge/module/sys/dto/FileTypeTermsDTO.java
@@ -0,0 +1,49 @@
+package cn.huge.module.sys.dto;
+
+
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @title: 查询附件条件对象
+ * @description: 查询附件条件对象
+ * @company:hugeinfo
+ * @author: liyj
+ * @time: 2022-03-22 11:41:14
+ * @version 1.0.0
+ */
+@Data
+public class FileTypeTermsDTO {
+
+    /**
+     * 附件业务编号
+     */
+    private String ownerId;
+
+    /**
+     * 附件业务编号集合
+     */
+    private List<String> ownerIdList;
+
+    /**
+     * 附件业务大类编号
+     */
+    private String ownerCat;
+
+    /**
+     * 附件业务大类编号集合
+     */
+    private List<String> ownerCatList;
+
+    /**
+     * 附件业务类型编号
+     */
+    private String ownerType;
+
+    /**
+     * 附件业务类型编号集合
+     */
+    private List<String> ownerTypeList;
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtDeptWebController.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtDeptWebController.java
index f845193..c0f3ee0 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtDeptWebController.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtDeptWebController.java
@@ -194,7 +194,7 @@
 
     /**
      * 新增部门或更新部门
-     * @url {ctx}/api/v1/ctDept/saveCtDept
+     * @url {ctx}/api/web/ctDept/saveCtDept
      * @param ctDept 实体对象
      * @return Object
      */
@@ -221,7 +221,7 @@
 
     /**
      * 根据主键编号删除部门
-     * @url {ctx}/api/v1/ctDept/removeByIds
+     * @url {ctx}/api/web/ctDept/removeByIds
      * @param ids 主键编号
      * @return Object
      * @throws Exception
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtPostWebController.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtPostWebController.java
index 34d66b7..72b2120 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtPostWebController.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtPostWebController.java
@@ -180,7 +180,7 @@
 
     /**
      * 根据单位编号查询所有岗位
-     * @url {ctx}/api/v1/ctPost/getByUnitId
+     * @url {ctx}/api/web/ctPost/getByUnitId
      * @param userId 登录用户编号
      * @return Object
      * @throws Exception
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtUnitWebController.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtUnitWebController.java
index a396678..929b3fb 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtUnitWebController.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtUnitWebController.java
@@ -314,7 +314,7 @@
 
     /**
      * 获取所有组织(包含所有下级子组织)树形结构
-     * @url {ctx}/api/v1/ctUnit/listUnitTree
+     * @url {ctx}/api/web/ctUnit/listUnitTree
      * @param userId 登录用户标识称
      * @return Object
      */
@@ -333,7 +333,7 @@
 
     /**
      * 获取组织详情(包含组织下的部门详情)
-     * @url {ctx}/api/v1/ctUnit/getUnitAndDept?id=
+     * @url {ctx}/api/web/ctUnit/getUnitAndDept?id=
      * @param id 组织编号
      * @return Object
      */
@@ -350,7 +350,7 @@
 
     /**
      * 根据主键编号删除单位
-     * @url {ctx}/api/v1/ctUnit/removeByIds
+     * @url {ctx}/api/web/ctUnit/removeByIds
      * @param ids 主键编号
      * @return Object
      * @throws Exception
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtUserWebController.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtUserWebController.java
index 654da13..e6f18f7 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtUserWebController.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/controller/web/CtUserWebController.java
@@ -9,6 +9,7 @@
 import cn.huge.module.ctrole.domain.po.CtRole;
 import cn.huge.module.ctrole.service.CtRoleService;
 import cn.huge.module.ctuser.domain.po.*;
+import cn.huge.module.ctuser.dto.CtUserInfoDTO;
 import cn.huge.module.ctuser.dto.CtUserSaveDTO;
 import cn.huge.module.ctuser.service.*;
 import cn.huge.module.cust.constant.RoleBaseEnum;
@@ -20,6 +21,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageRequest;
@@ -287,7 +289,7 @@
 
     /**
      * web端-人员信息管理-新增/新用户信息
-     * @url {ctx}/api/v1/ctUser/saveCtUser
+     * @url {ctx}/api/web/ctUser/saveCtUser
      * @param userId
      * @return Object
      * @throws Exception
@@ -305,7 +307,7 @@
 
     /**
      * 获取人员信息列表查询条件
-     * @url {ctx}/api/v1/ctUser/listSelectTerm
+     * @url {ctx}/api/web/ctUser/listSelectTerm
      * @return userId 登录用户标识称
      * @return Object
      * @throws Exception
@@ -322,7 +324,7 @@
 
     /**
      * web端-人员信息管理-人员列表
-     * @url {ctx}/api/v1/ctUser/pageQuery
+     * @url {ctx}/api/web/ctUser/pageQuery
      * @param page 页码
      * @param size 每页数量
      * @return Object
@@ -362,7 +364,7 @@
 
     /**
      * 根据主键单个/批量删除
-     * @url {ctx}/api/v1/ctUser/removeByIds
+     * @url {ctx}/api/web/ctUser/removeByIds
      * @return Object
      * @throws Exception
      */
@@ -376,4 +378,49 @@
             return ReturnFailUtils.getRepInfo();
         }
     }
+
+    /**
+     * 选择人员
+     * @url {ctx}/api/web/ctUser/userChoose
+     * @return Object
+     */
+    @GetMapping("/userChoose")
+    public Object userChoose(@CurrentUser String userId) {
+        try {
+            String roleCode = request.getParameter("roleCode");
+            List<SelectTermDTO> unitSelectTerms = service.userChoose(userId, roleCode);
+            return ReturnSucUtils.getRepInfo(unitSelectTerms);
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo(e.getMessage());
+        }
+    }
+
+    /**
+     * 共通组件-根据人员编号查询单个人员信息及角色信息
+     * @url {ctx}/api/web/ctUser/getByIdRole
+     * @param id 主键编号
+     * @return Object
+     * @throws Exception
+     */
+    @GetMapping("/getByIdRole")
+    public Object getByIdRole(@RequestParam(value = "id") String id) {
+        try {
+            CtUserInfoDTO ctUserInfoDTO = new CtUserInfoDTO();
+            CtUser ctUser = service.getById(id);
+            if (ObjectUtils.isNotEmpty(ctUser)) {
+                BeanUtils.copyProperties(ctUser, ctUserInfoDTO);
+                CtAccount ctAccount = ctAccountService.getByUserIdAndType(id, UserBaseConsts.ACC_TYPE_1);
+                ctUserInfoDTO.setLoginTime(ctAccount.getLoginTime());
+                ctUserInfoDTO.setAcc(ctAccount.getAcc());
+                List<String> roleNameList = ctUseroleService.listRoleName(id);
+                if (CollectionUtils.isNotEmpty(roleNameList)) {
+                    String userRoles = roleNameList.stream().map(String::valueOf).collect(Collectors.joining("、"));
+                    ctUserInfoDTO.setUserRoles(userRoles);
+                }
+            }
+            return ReturnSucUtils.getRepInfo(ctUserInfoDTO);
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
 }
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/CtUserMapper.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/CtUserMapper.java
index 1ee4253..8f91d13 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/CtUserMapper.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/CtUserMapper.java
@@ -75,4 +75,13 @@
      * @return
      */
     List<CtUser> pageQueryCtUser(@Param("page") PageRequest page, @Param("terms") Map<String, Object> terms);
+
+    /**
+     * 根据部门和角色查询
+     * @param deptIdList 部门编号
+     * @param roleCode 角色代码
+     * @return List<SelectTermDTO>
+     */
+    List<CtUser> listUserByDeptRoleList(@Param("deptIdList") List<String> deptIdList, @Param("roleCode") String roleCode);
+
 }
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/CtUseroleMapper.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/CtUseroleMapper.java
index 35c10b0..a996b75 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/CtUseroleMapper.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/CtUseroleMapper.java
@@ -68,4 +68,11 @@
      */
     List<String> listRoleCode(@Param("userId") String userId);
 
+    /**
+     * 根据用户编号获取其角色名称
+     * @param userId 用户编号
+     * @return List<String>
+     */
+    List<String> listRoleName(@Param("userId") String userId);
+
 }
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/xml/CtUserMapper.xml b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/xml/CtUserMapper.xml
index 18c30ba..3251ac0 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/xml/CtUserMapper.xml
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/xml/CtUserMapper.xml
@@ -407,4 +407,20 @@
         </if>
         limit #{page.offset}, #{page.size}
     </select>
+
+    <!--  根据部门和角色查询  -->
+    <select id="listUserByDeptRoleList" resultMap="dataResult">
+        SELECT t1.id, t1.true_name, t1.dept_id
+        FROM dyh_ct_user t1 LEFT JOIN dyh_ct_userole t2 ON t1.id = t2.user_id
+        WHERE
+        t1.delete_status = '0'
+        AND t2.role_code = #{roleCode}
+        AND t1.status = '1'
+        <if test="deptIdList != null and deptIdList != ''">
+            and t1.dept_id in
+            <foreach collection="deptIdList" item="deptIdList" index="index" open="(" separator="," close=")">
+                #{deptIdList}
+            </foreach>
+        </if>
+    </select>
 </mapper> 
\ No newline at end of file
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/xml/CtUseroleMapper.xml b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/xml/CtUseroleMapper.xml
index f3b00cb..4ed8a6f 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/xml/CtUseroleMapper.xml
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dao/mapper/xml/CtUseroleMapper.xml
@@ -151,4 +151,12 @@
         user_id = #{userId}
     </select>
 
+    <select id="listRoleName" resultType="String">
+        select
+        role_name
+        FROM
+        <include refid="table-name" />
+        WHERE
+        user_id = #{userId}
+    </select>
 </mapper> 
\ No newline at end of file
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dto/CtUserInfoDTO.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dto/CtUserInfoDTO.java
new file mode 100644
index 0000000..571e67d
--- /dev/null
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dto/CtUserInfoDTO.java
@@ -0,0 +1,52 @@
+package cn.huge.module.ctuser.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @title: 客户用户信息数据传输对象
+ * @description: 客户用户信息数据传输对象
+ * @company:hugeinfo
+ * @author: chenx
+ * @time: 2022-02-22 14:19:43
+ * @version 1.0.0
+ */
+@Data
+public class CtUserInfoDTO {
+
+    /**
+    * 姓名
+    */
+    private String trueName;
+
+    /**
+     * 账号
+     */
+    private String acc;
+
+    /**
+    * 组织名称
+    */
+    private String unitName;
+
+    /**
+    * 部门名称
+    */
+    private String deptName;
+
+    /**
+     * 人员角色信息
+     */
+    private String userRoles;
+
+    /**
+     * 最后一次登录时间
+     */
+    private Date loginTime;
+
+    /**
+     * 手机号码
+     */
+    private String mobile;
+}
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUserService.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUserService.java
index 5746d53..888c322 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUserService.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUserService.java
@@ -600,4 +600,102 @@
             ctDeptService.updateCtDept(ctDept);
         }
     }
+
+    /**
+     * 根据部门和角色查询
+     * @param deptIdList 部门编号
+     * @param roleCode 角色代码
+     * @return List<SelectTermDTO>
+     */
+    public List<CtUser> listUserByDeptRoleList(List<String> deptIdList, String roleCode){
+        return mapper.listUserByDeptRoleList(deptIdList, roleCode);
+    }
+
+    /**
+     * 按条件分页查询
+     *
+     * @param userId  分页对象
+     * @param roleCode 条件
+     * @return Page
+     */
+    public List<SelectTermDTO> userChoose(String userId, String roleCode) {
+        // 获取当前登录用户
+        CtUserDTO loginUser = clientGetUserAll(userId);
+        // 组织条件
+        QueryWrapper<CtUnit> ctUnitQueryWrapper = new QueryWrapper<>();
+        if (RoleBaseEnum.checkAdminPower(loginUser)){
+            ctUnitQueryWrapper.eq("cust_id", loginUser.getCustId()).select("id", "unit_name", "parent_id");
+        }else {
+            ctUnitQueryWrapper.eq("id", loginUser.getUnitId()).select("id", "unit_name", "parent_id");
+        }
+        List<CtUnit> ctUnitList = ctUnitService.list(ctUnitQueryWrapper);
+        List<SelectTermDTO> unitSelectTerms = new ArrayList<>();
+
+        List<String> unitIdList= ctUnitList.stream().map(CtUnit::getId).collect(Collectors.toList());
+        // 部门条件
+        QueryWrapper<CtDept> ctDeptQueryWrapper = new QueryWrapper<>();
+        ctDeptQueryWrapper.in("unit_id", unitIdList).select("id", "unit_id", "name", "parent_id");
+        List<CtDept> ctDeptList = ctDeptService.list(ctDeptQueryWrapper);
+        List<String> deptIdList = ctDeptList.stream().map(CtDept::getId).collect(Collectors.toList());
+
+        // 人员条件
+        List<CtUser> ctUsers = null;
+        if (StringUtils.isNotEmpty(roleCode)){
+            ctUsers = listUserByDeptRoleList(deptIdList, roleCode);
+        }else {
+            QueryWrapper<CtUser> ctUserQueryWrapper = new QueryWrapper<>();
+            ctUserQueryWrapper.in("dept_id", deptIdList).select("id", "true_name", "dept_id");
+            ctUsers = this.list(ctUserQueryWrapper);
+        }
+        List<String> userIdList = ctUsers.stream().map(CtUser::getId).collect(Collectors.toList());
+        QueryWrapper<CtUserole> ctUserQueryWrapper = new QueryWrapper<>();
+        ctUserQueryWrapper.in("user_id", userIdList).select("user_id", "role_name");
+        List<CtUserole> roleList = ctUseroleService.list(ctUserQueryWrapper);
+
+        for(CtUnit ctUnit: ctUnitList){
+            SelectTermDTO unitSelectTerm = new SelectTermDTO();
+            unitSelectTerm.setValue(ctUnit.getId());
+            unitSelectTerm.setLabel(ctUnit.getUnitName());
+            unitSelectTerm.setParentId(ctUnit.getParentId());
+            unitSelectTerm.setCheckable(false);
+            List<SelectTermDTO> deptSelectTerms = new ArrayList<>();
+            for(CtDept ctDept : ctDeptList){
+                if(ctUnit.getId().equals(ctDept.getUnitId())){
+                    SelectTermDTO deptSelectTerm = new SelectTermDTO();
+                    deptSelectTerm.setValue(ctDept.getId());
+                    deptSelectTerm.setLabel(ctDept.getName());
+                    deptSelectTerm.setParentId(ctDept.getParentId());
+                    deptSelectTerm.setCheckable(false);
+
+                    if (CollectionUtils.isNotEmpty(ctUsers)) {
+                        List<SelectTermDTO> userSelectTerms = new ArrayList<>();
+
+                        for(CtUser ctUser : ctUsers){
+                            if(ctUser.getDeptId().equals(ctDept.getId())){
+                                List<CtUserole> ctUseroleList = new ArrayList<>();
+                                for(CtUserole ctUserole: roleList){
+                                    if(ctUser.getId().equals(ctUserole.getUserId())){
+                                        ctUseroleList.add(ctUserole);
+                                    }
+                                }
+                                SelectTermDTO userSelectTerm = new SelectTermDTO();
+                                userSelectTerm.setValue(ctUser.getId());
+                                userSelectTerm.setCheckable(true);
+                                String roleName = ctUseroleList.stream().map(CtUserole::getRoleName).collect(Collectors.joining(","));
+                                userSelectTerm.setLabel(ctUser.getTrueName()+"("+roleName+")");
+                                userSelectTerms.add(userSelectTerm);
+                            }
+                        }
+                        List<SelectTermDTO> users = SelectTermUtils.createTreeByRoot(userSelectTerms);
+                        deptSelectTerm.setChildren(users);
+                    }
+                    deptSelectTerms.add(deptSelectTerm);
+                }
+                List<SelectTermDTO> depts = SelectTermUtils.createTreeByRoot(deptSelectTerms);
+                unitSelectTerm.setChildren(depts);
+            }
+            unitSelectTerms.add(unitSelectTerm);
+        }
+        return SelectTermUtils.createTreeByFirst(unitSelectTerms, loginUser.getUnitId());
+    }
 }
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUseroleService.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUseroleService.java
index 63a0d45..dbf5483 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUseroleService.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtUseroleService.java
@@ -168,4 +168,13 @@
             throw new ServiceException("CtUseroleService.deleteByUserId", e);
         }
     }
+
+    /**
+     * 根据用户编号获取其角色名称
+     * @param userId 用户编号
+     * @return List<String>
+     */
+    public  List<String> listRoleName(String userId){
+        return mapper.listRoleName(userId);
+    }
 }
\ No newline at end of file
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/pauser/controller/wechat/PaUserWechatController.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/pauser/controller/wechat/PaUserWechatController.java
index f364bdb..40c57af 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/pauser/controller/wechat/PaUserWechatController.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/pauser/controller/wechat/PaUserWechatController.java
@@ -2,6 +2,7 @@
 
 import cn.huge.base.common.utils.ReturnFailUtils;
 import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.module.mediate.dto.WechatBindCaseDTO;
 import cn.huge.base.config.CurrentUser;
 import cn.huge.module.pauser.domain.po.PaUser;
 import cn.huge.module.pauser.service.PaUserService;
@@ -257,4 +258,19 @@
         }
     }
 
+    /**
+     * pc端提交案件后-获取相关当事人用户编号
+     * @url {ctx}/api/weChat/paUser/bindGetUserId
+     * @param wechatBindCaseDTO 实体对象
+     * @return Object
+     */
+    @PostMapping("/bindGetUserId")
+    public Object bindGetUserId(@RequestBody WechatBindCaseDTO wechatBindCaseDTO) {
+        try {
+            return ReturnSucUtils.getRepInfo(service.bindGetUserId(wechatBindCaseDTO));
+        } catch (Exception e) {
+            log.error("Controller接口[WeChatPaUserController.bindGetUserId]请求异常:"+e, e);
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
 }
diff --git a/dyh-service/dyh-cust/src/main/java/cn/huge/module/pauser/service/PaUserService.java b/dyh-service/dyh-cust/src/main/java/cn/huge/module/pauser/service/PaUserService.java
index 598c800..c4cc93f 100644
--- a/dyh-service/dyh-cust/src/main/java/cn/huge/module/pauser/service/PaUserService.java
+++ b/dyh-service/dyh-cust/src/main/java/cn/huge/module/pauser/service/PaUserService.java
@@ -5,12 +5,14 @@
 import cn.huge.base.common.utils.IdUtils;
 import cn.huge.base.common.utils.ObjectUtils;
 import cn.huge.module.client.api.impl.UtilsClientImpl;
+import cn.huge.module.mediate.dto.WechatBindCaseDTO;
 import cn.huge.module.cust.constant.UserBaseConsts;
 import cn.huge.module.mediate.dto.WechatBindCaseDTO;
 import cn.huge.module.pauser.dao.mapper.PaAccountMapper;
 import cn.huge.module.pauser.dao.mapper.PaUserMapper;
 import cn.huge.module.pauser.domain.po.PaAccount;
 import cn.huge.module.pauser.domain.po.PaUser;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import cn.huge.module.pauser.dto.WeChatPersonalDTO;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -142,6 +144,24 @@
     }
 
     /**
+     * pc端提交案件后-获取相关当事人用户编号
+     * @param wechatBindCaseDTO 用户信息
+     * @return String
+     */
+    public String bindGetUserId(WechatBindCaseDTO wechatBindCaseDTO){
+        try{
+            QueryWrapper<PaUser> paUserQueryWrapper = new QueryWrapper<>();
+            paUserQueryWrapper.eq("true_name", wechatBindCaseDTO.getTrueName()).
+                    eq("idcard", wechatBindCaseDTO.getIdcard()).eq("cust_id", wechatBindCaseDTO.getCustId());
+            PaUser paUser = this.getOne(paUserQueryWrapper);
+            return paUser.getId();
+        }catch (Exception e){
+            log.error("service方法[PaUserService.bindGetUserId]调用异常:"+e, e);
+            throw new ServiceException("PaUserService.bindGetUserId", e);
+        }
+    }
+
+    /**
      * 当事人小程序-个人中心
      * @param userId 用户编号
      * @return WeChatPersonalDTO
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseAgentWebController.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseAgentWebController.java
index 4ee6a31..55ca92d 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseAgentWebController.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseAgentWebController.java
@@ -58,6 +58,16 @@
         if (StringUtils.isNotBlank(partyUserId)){
             terms.put("partyUserId", partyUserId);
         }
+        // 当事人地位
+        String perType = request.getParameter("perType");
+        if (StringUtils.isNotBlank(perType)){
+            terms.put("perType", perType);
+        }
+        // 当事人地位名称
+        String perTypeName = request.getParameter("perTypeName");
+        if (StringUtils.isNotBlank(perTypeName)){
+            terms.put("perTypeName", perTypeName);
+        }
         // 代理人类型
         String perClass = request.getParameter("perClass");
         if (StringUtils.isNotBlank(perClass)){
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseEvaluateWebController.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseEvaluateWebController.java
new file mode 100644
index 0000000..80e22ff
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseEvaluateWebController.java
@@ -0,0 +1,193 @@
+package cn.huge.module.cases.controller.web;
+
+import cn.huge.base.common.utils.ReturnFailUtils;
+import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.module.cases.domain.po.CaseEvaluate;
+import cn.huge.module.cases.service.CaseEvaluateService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @title: 当事人纠纷评价表接口api-web端
+ * @description: 当事人纠纷评价表接口api-web端
+ * @company: hugeinfo
+ * @author: wangwh
+ * @time: 2024-09-04 20:21:05
+ * @version: 1.0.0
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/web/caseEvaluate")
+public class CaseEvaluateWebController {
+
+    @Autowired(required = false)
+    private HttpServletRequest request;
+
+    @Autowired
+    private CaseEvaluateService service;
+
+    /**
+    * 获取请求URL参数
+    * @return Map<String, Object>
+    */
+    private Map<String, Object> getParameter(){
+        Map<String, Object> terms = Maps.newHashMap();
+        // 主键编号
+        String id = request.getParameter("id");
+        if (StringUtils.isNotBlank(id)){
+            terms.put("id", id);
+        }
+        // 纠纷编号
+        String caseId = request.getParameter("caseId");
+        if (StringUtils.isNotBlank(caseId)){
+            terms.put("caseId", caseId);
+        }
+        // 评价等级
+        String evaluateGrade = request.getParameter("evaluateGrade");
+        if (StringUtils.isNotBlank(evaluateGrade)){
+            terms.put("evaluateGrade", evaluateGrade);
+        }
+        // 选择评语,多个用,隔开
+        String evaluateRemark = request.getParameter("evaluateRemark");
+        if (StringUtils.isNotBlank(evaluateRemark)){
+            terms.put("evaluateRemark", evaluateRemark);
+        }
+        // 评价建议
+        String evaluateContent = request.getParameter("evaluateContent");
+        if (StringUtils.isNotBlank(evaluateContent)){
+            terms.put("evaluateContent", evaluateContent);
+        }
+        // 评价人编号
+        String evaluateUserId = request.getParameter("evaluateUserId");
+        if (StringUtils.isNotBlank(evaluateUserId)){
+            terms.put("evaluateUserId", evaluateUserId);
+        }
+        // 评价人名称
+        String evaluateUserName = request.getParameter("evaluateUserName");
+        if (StringUtils.isNotBlank(evaluateUserName)){
+            terms.put("evaluateUserName", evaluateUserName);
+        }
+        // 删除状态,0:未删除,1:已删除
+        String deleteStatus = request.getParameter("deleteStatus");
+        if (StringUtils.isNotBlank(deleteStatus)){
+            terms.put("deleteStatus", deleteStatus);
+        }
+        // 顾客编号
+        String custId = request.getParameter("custId");
+        if (StringUtils.isNotBlank(custId)){
+            terms.put("custId", custId);
+        }
+        // 创建时间区间
+        String createStart = request.getParameter("createStart");
+        String createEnd = request.getParameter("createEnd");
+        if(StringUtils.isNotBlank(createStart) && StringUtils.isNotBlank(createEnd)) {
+            terms.put("createStart", createStart);
+            terms.put("createEnd", createEnd);
+        }
+        // 更新时间区间
+        String updateStart = request.getParameter("updateStart");
+        String updateEnd = request.getParameter("updateEnd");
+        if(StringUtils.isNotBlank(updateStart) && StringUtils.isNotBlank(updateEnd)) {
+            terms.put("updateStart", updateStart);
+            terms.put("updateEnd", updateEnd);
+        }
+        return terms;
+    }
+
+    /**
+    * 条件查询多个
+    * @url {ctx}/api/web/caseEvaluate/listQuery
+    * @return Object
+    */
+    @GetMapping("/listQuery")
+    public Object listQuery() {
+        try {
+            Map<String, Object> terms = getParameter();
+            return ReturnSucUtils.getRepInfo(service.listTerms(terms));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 条件分页查询
+    * @url {ctx}/api/web/caseEvaluate/pageQuery
+    * @param page 页码
+    * @param size 每页数量
+    * @return Object
+    */
+    @GetMapping("/pageQuery")
+    public Object pageQuery(@RequestParam(value = "page") int page, @RequestParam(value = "size") int size) {
+        try {
+            Map<String, Object> terms = getParameter();
+            Sort sort = Sort.by(Sort.Direction.DESC, "create_time");
+            PageRequest pageRequest = PageRequest.of(page-1, size, sort);
+            Page<CaseEvaluate> caseEvaluatePage = service.pageQuery(pageRequest, terms);
+            return ReturnSucUtils.getRepInfo( "处理成功", caseEvaluatePage);
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据编号查询单个
+    * @url {ctx}/api/web/caseEvaluate/getByCaseId
+    * @param caseId 事项ID
+    * @return Object
+    */
+    @GetMapping("/getByCaseId")
+    public Object getByCaseId(@RequestParam(value = "caseId") String caseId) {
+        try {
+            QueryWrapper<CaseEvaluate> caseEvaluateQueryWrapper = new QueryWrapper<>();
+            caseEvaluateQueryWrapper.eq("case_id", caseId).eq("delete_status", 0);
+            return ReturnSucUtils.getRepInfo(service.getOne(caseEvaluateQueryWrapper));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据主键单个
+    * @url {ctx}/api/web/caseEvaluate/deleteById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/deleteById")
+    public Object deleteById(@RequestParam(value = "id") String id) {
+        try {
+            service.removeById(id);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 新增或更新对象
+    * @url {ctx}/api/web/caseEvaluate/saveCaseEvaluate
+    * @param caseEvaluate 实体对象
+    * @return Object
+    */
+    @PostMapping("/saveCaseEvaluate")
+    public Object saveCaseEvaluate(@RequestBody CaseEvaluate caseEvaluate) {
+        try {
+            service.saveCaseEvaluate(caseEvaluate);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseFeedbackHisWebController.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseFeedbackHisWebController.java
new file mode 100644
index 0000000..c582eb9
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseFeedbackHisWebController.java
@@ -0,0 +1,200 @@
+package cn.huge.module.cases.controller.web;
+
+import cn.huge.base.common.utils.ReturnFailUtils;
+import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.module.cases.domain.po.CaseFeedbackHis;
+import cn.huge.module.cases.service.CaseFeedbackHisService;
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @title: 纠纷办理反馈信息历史表接口api-web端
+ * @description: 纠纷办理反馈信息历史表接口api-web端
+ * @company: hugeinfo
+ * @author: wangwh
+ * @time: 2024-08-31 17:42:41
+ * @version: 1.0.0
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/web/caseFeedbackHis")
+public class CaseFeedbackHisWebController {
+
+    @Autowired(required = false)
+    private HttpServletRequest request;
+
+    @Autowired
+    private CaseFeedbackHisService service;
+
+    /**
+    * 获取请求URL参数
+    * @return Map<String, Object>
+    */
+    private Map<String, Object> getParameter(){
+        Map<String, Object> terms = Maps.newHashMap();
+        // 主键编号
+        String id = request.getParameter("id");
+        if (StringUtils.isNotBlank(id)){
+            terms.put("id", id);
+        }
+        // 办理反馈信息编号
+        String feedbackId = request.getParameter("feedbackId");
+        if (StringUtils.isNotBlank(feedbackId)){
+            terms.put("feedbackId", feedbackId);
+        }
+        // 纠纷编号
+        String caseId = request.getParameter("caseId");
+        if (StringUtils.isNotBlank(caseId)){
+            terms.put("caseId", caseId);
+        }
+        // 办理反馈纠纷任务编号
+        String caseTaskId = request.getParameter("caseTaskId");
+        if (StringUtils.isNotBlank(caseTaskId)){
+            terms.put("caseTaskId", caseTaskId);
+        }
+        // 经办类型,1:承办组织,2:配合组织
+        String handleType = request.getParameter("handleType");
+        if (StringUtils.isNotBlank(handleType)){
+            terms.put("handleType", handleType);
+        }
+        // 经办组织编号
+        String handleUnitId = request.getParameter("handleUnitId");
+        if (StringUtils.isNotBlank(handleUnitId)){
+            terms.put("handleUnitId", handleUnitId);
+        }
+        // 经办组织名称
+        String handleUnitName = request.getParameter("handleUnitName");
+        if (StringUtils.isNotBlank(handleUnitName)){
+            terms.put("handleUnitName", handleUnitName);
+        }
+        // 操作人编号
+        String handleUserId = request.getParameter("handleUserId");
+        if (StringUtils.isNotBlank(handleUserId)){
+            terms.put("handleUserId", handleUserId);
+        }
+        // 经办人名称
+        String handleUserName = request.getParameter("handleUserName");
+        if (StringUtils.isNotBlank(handleUserName)){
+            terms.put("handleUserName", handleUserName);
+        }
+        // 办理意见
+        String handleContent = request.getParameter("handleContent");
+        if (StringUtils.isNotBlank(handleContent)){
+            terms.put("handleContent", handleContent);
+        }
+        // 顾客编号
+        String custId = request.getParameter("custId");
+        if (StringUtils.isNotBlank(custId)){
+            terms.put("custId", custId);
+        }
+        // 创建时间区间
+        String createStart = request.getParameter("createStart");
+        String createEnd = request.getParameter("createEnd");
+        if(StringUtils.isNotBlank(createStart) && StringUtils.isNotBlank(createEnd)) {
+            terms.put("createStart", createStart);
+            terms.put("createEnd", createEnd);
+        }
+        // 更新时间区间
+        String updateStart = request.getParameter("updateStart");
+        String updateEnd = request.getParameter("updateEnd");
+        if(StringUtils.isNotBlank(updateStart) && StringUtils.isNotBlank(updateEnd)) {
+            terms.put("updateStart", updateStart);
+            terms.put("updateEnd", updateEnd);
+        }
+        return terms;
+    }
+
+    /**
+    * 条件查询多个
+    * @url {ctx}/api/web/caseFeedbackHis/listQuery
+    * @return Object
+    */
+    @GetMapping("/listQuery")
+    public Object listQuery() {
+        try {
+            Map<String, Object> terms = getParameter();
+            return ReturnSucUtils.getRepInfo(service.listTerms(terms));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 条件分页查询
+    * @url {ctx}/api/web/caseFeedbackHis/pageQuery
+    * @param page 页码
+    * @param size 每页数量
+    * @return Object
+    */
+    @GetMapping("/pageQuery")
+    public Object pageQuery(@RequestParam(value = "page") int page, @RequestParam(value = "size") int size) {
+        try {
+            Map<String, Object> terms = getParameter();
+            Sort sort = Sort.by(Sort.Direction.DESC, "create_time");
+            PageRequest pageRequest = PageRequest.of(page-1, size, sort);
+            Page<CaseFeedbackHis> caseFeedbackHisPage = service.pageQuery(pageRequest, terms);
+            return ReturnSucUtils.getRepInfo( "处理成功", caseFeedbackHisPage);
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据编号查询单个
+    * @url {ctx}/api/web/caseFeedbackHis/getById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/getById")
+    public Object getById(@RequestParam(value = "id") String id) {
+        try {
+            return ReturnSucUtils.getRepInfo(service.getById(id));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据主键单个
+    * @url {ctx}/api/web/caseFeedbackHis/deleteById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/deleteById")
+    public Object deleteById(@RequestParam(value = "id") String id) {
+        try {
+            service.removeById(id);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 新增或更新对象
+    * @url {ctx}/api/web/caseFeedbackHis/saveCaseFeedbackHis
+    * @param caseFeedbackHis 实体对象
+    * @return Object
+    */
+    @PostMapping("/saveCaseFeedbackHis")
+    public Object saveCaseFeedbackHis(@RequestBody CaseFeedbackHis caseFeedbackHis) {
+        try {
+            service.saveCaseFeedbackHis(caseFeedbackHis);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseFeedbackWebController.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseFeedbackWebController.java
new file mode 100644
index 0000000..884807f
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseFeedbackWebController.java
@@ -0,0 +1,230 @@
+package cn.huge.module.cases.controller.web;
+
+import cn.huge.base.common.utils.ReturnFailUtils;
+import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.base.config.CurrentUser;
+import cn.huge.module.cases.domain.po.CaseFeedback;
+import cn.huge.module.cases.service.CaseFeedbackService;
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @title: 纠纷办理反馈j信息表接口api-web端
+ * @description: 纠纷办理反馈j信息表接口api-web端
+ * @company: hugeinfo
+ * @author: wangwh
+ * @time: 2024-08-30 17:35:02
+ * @version: 1.0.0
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/web/caseFeedback")
+public class CaseFeedbackWebController {
+
+    @Autowired(required = false)
+    private HttpServletRequest request;
+
+    @Autowired
+    private CaseFeedbackService service;
+
+    /**
+    * 获取请求URL参数
+    * @return Map<String, Object>
+    */
+    private Map<String, Object> getParameter(){
+        Map<String, Object> terms = Maps.newHashMap();
+        // 主键编号
+        String id = request.getParameter("id");
+        if (StringUtils.isNotBlank(id)){
+            terms.put("id", id);
+        }
+        // 纠纷编号
+        String caseId = request.getParameter("caseId");
+        if (StringUtils.isNotBlank(caseId)){
+            terms.put("caseId", caseId);
+        }
+        // 任务编号
+        String caseTaskId = request.getParameter("caseTaskId");
+        if (StringUtils.isNotBlank(caseTaskId)){
+            terms.put("caseTaskId", caseTaskId);
+        }
+        // 经办类型,1:承办组织,2:配合组织
+        String handleType = request.getParameter("handleType");
+        if (StringUtils.isNotBlank(handleType)){
+            terms.put("handleType", handleType);
+        }
+        // 经办组织编号
+        String handleUnitId = request.getParameter("handleUnitId");
+        if (StringUtils.isNotBlank(handleUnitId)){
+            terms.put("handleUnitId", handleUnitId);
+        }
+        // 经办组织名称
+        String handleUnitName = request.getParameter("handleUnitName");
+        if (StringUtils.isNotBlank(handleUnitName)){
+            terms.put("handleUnitName", handleUnitName);
+        }
+        // 操作人编号
+        String handleUserId = request.getParameter("handleUserId");
+        if (StringUtils.isNotBlank(handleUserId)){
+            terms.put("handleUserId", handleUserId);
+        }
+        // 经办人名称
+        String handleUserName = request.getParameter("handleUserName");
+        if (StringUtils.isNotBlank(handleUserName)){
+            terms.put("handleUserName", handleUserName);
+        }
+        // 办理意见
+        String handleContent = request.getParameter("handleContent");
+        if (StringUtils.isNotBlank(handleContent)){
+            terms.put("handleContent", handleContent);
+        }
+        // 删除状态,0:未删除,1:已删除
+        String deleteStatus = request.getParameter("deleteStatus");
+        if (StringUtils.isNotBlank(deleteStatus)){
+            terms.put("deleteStatus", deleteStatus);
+        }
+        // 顾客编号
+        String custId = request.getParameter("custId");
+        if (StringUtils.isNotBlank(custId)){
+            terms.put("custId", custId);
+        }
+        // 创建时间区间
+        String createStart = request.getParameter("createStart");
+        String createEnd = request.getParameter("createEnd");
+        if(StringUtils.isNotBlank(createStart) && StringUtils.isNotBlank(createEnd)) {
+            terms.put("createStart", createStart);
+            terms.put("createEnd", createEnd);
+        }
+        // 更新时间区间
+        String updateStart = request.getParameter("updateStart");
+        String updateEnd = request.getParameter("updateEnd");
+        if(StringUtils.isNotBlank(updateStart) && StringUtils.isNotBlank(updateEnd)) {
+            terms.put("updateStart", updateStart);
+            terms.put("updateEnd", updateEnd);
+        }
+        return terms;
+    }
+
+    /**
+    * 条件查询多个
+    * @url {ctx}/api/web/CaseFeedback/listQuery
+    * @return Object
+    */
+    @GetMapping("/listQuery")
+    public Object listQuery() {
+        try {
+            Map<String, Object> terms = getParameter();
+            return ReturnSucUtils.getRepInfo(service.listTerms(terms));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 条件分页查询
+    * @url {ctx}/api/web/CaseFeedback/pageQuery
+    * @param page 页码
+    * @param size 每页数量
+    * @return Object
+    */
+    @GetMapping("/pageQuery")
+    public Object pageQuery(@RequestParam(value = "page") int page, @RequestParam(value = "size") int size) {
+        try {
+            Map<String, Object> terms = getParameter();
+            Sort sort = Sort.by(Sort.Direction.DESC, "create_time");
+            PageRequest pageRequest = PageRequest.of(page-1, size, sort);
+            Page<CaseFeedback> caseFeedbackPage = service.pageQuery(pageRequest, terms);
+            return ReturnSucUtils.getRepInfo( "处理成功", caseFeedbackPage);
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据编号查询单个
+    * @url {ctx}/api/web/CaseFeedback/getById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/getById")
+    public Object getById(@RequestParam(value = "id") String id) {
+        try {
+            return ReturnSucUtils.getRepInfo(service.getById(id));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据主键单个
+    * @url {ctx}/api/web/CaseFeedback/deleteById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/deleteById")
+    public Object deleteById(@RequestParam(value = "id") String id) {
+        try {
+            service.removeById(id);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+     * 获取办理反馈信息
+     * @url {ctx}/api/web/CaseFeedback/listFeedback
+     * @param id 实体对象
+     * @return Object
+     */
+    @GetMapping("/listFeedback")
+    public Object listFeedback(@RequestParam(value = "id") String id) {
+        try {
+            return ReturnSucUtils.getRepInfo(service.listFeedback(id));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+     * 添加办理反馈
+     * @url {ctx}/api/web/CaseFeedback/saveFeedback
+     * @param caseFeedback 实体对象
+     * @return Object
+     */
+    @PostMapping("/saveFeedback")
+    public Object saveFeedback(@RequestBody CaseFeedback caseFeedback, @CurrentUser String userId) {
+        try {
+            service.saveFeedback(caseFeedback, userId);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+     * 添加办理反馈
+     * @url {ctx}/api/web/CaseFeedback/updateFeedback
+     * @param caseFeedback 实体对象
+     * @return Object
+     */
+    @PostMapping("/updateFeedback")
+    public Object updateFeedback(@RequestBody CaseFeedback caseFeedback, @CurrentUser String userId) {
+        try {
+            service.updateFeedback(caseFeedback, userId);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoUnfoldWebController.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoUnfoldWebController.java
index 446c764..b76dfdc 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoUnfoldWebController.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoUnfoldWebController.java
@@ -2,6 +2,7 @@
 
 import cn.huge.base.common.utils.ReturnFailUtils;
 import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.base.config.CurrentUser;
 import cn.huge.module.cases.domain.po.CaseInfoUnfold;
 import cn.huge.module.cases.service.CaseInfoUnfoldService;
 import com.google.common.collect.Maps;
@@ -352,4 +353,19 @@
         }
     }
 
+    /**
+     * PC端-选择经办人
+     * @url {ctx}/api/web/caseInfoUnfold/choosePrincipal?
+     * @param caseId 纠纷编号
+     * @return Object
+     */
+    @GetMapping("/choosePrincipal")
+    public Object choosePrincipal(@RequestParam(value = "caseId") String caseId, @RequestParam(value = "userId") String userId) {
+        try {
+            service.choosePrincipal(caseId, userId);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo(e.getMessage());
+        }
+    }
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java
index add1d84..3cc3009 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java
@@ -345,6 +345,26 @@
         if (StringUtils.isNotBlank(processName)){
             terms.put("processName", processName);
         }
+        // 意向调解组织编号
+        String wantUnitId = request.getParameter("wantUnitId");
+        if (StringUtils.isNotBlank(wantUnitId)){
+            terms.put("wantUnitId", wantUnitId);
+        }
+        // 意向调解组织名称
+        String wantUnitName = request.getParameter("wantUnitName");
+        if (StringUtils.isNotBlank(wantUnitName)){
+            terms.put("wantUnitName", wantUnitName);
+        }
+        // 意向调解员编号
+        String wantUserId = request.getParameter("wantUserId");
+        if (StringUtils.isNotBlank(wantUserId)){
+            terms.put("wantUserId", wantUserId);
+        }
+        // 意向调解员名称
+        String wantUserName = request.getParameter("wantUserName");
+        if (StringUtils.isNotBlank(wantUserName)){
+            terms.put("wantUserName", wantUserName);
+        }
         // 删除状态,0:未删除,1:已删除
         String deleteStatus = request.getParameter("deleteStatus");
         if (StringUtils.isNotBlank(deleteStatus)){
@@ -456,7 +476,7 @@
 
     /**
      * PC端-纠纷登记-保存纠纷信息-正常案件
-     * @url {ctx}/api/v1/caseInfo/caseRegister
+     * @url {ctx}/api/web/caseInfo/caseRegister
      * @param registerSaveDTO 实体对象
      */
     @PostMapping("/caseRegister")
@@ -468,4 +488,19 @@
             return ReturnFailUtils.getRepInfo(e.getMessage());
         }
     }
+
+    /**
+     * PC端-正式案件-查询纠纷信息
+     * @url {ctx}/api/web/caseInfo/getCaseInfo?id=
+     * @param id 纠纷编号
+     * @return Object
+     */
+    @GetMapping("/getCaseInfo")
+    public Object getCaseInfo(@RequestParam(value = "id") String id) {
+        try {
+            return ReturnSucUtils.getRepInfo(service.getCaseInfo(id));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo(e.getMessage());
+        }
+    }
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseSuperviseWebController.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseSuperviseWebController.java
new file mode 100644
index 0000000..7f00824
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseSuperviseWebController.java
@@ -0,0 +1,262 @@
+package cn.huge.module.cases.controller.web;
+
+import cn.huge.base.common.utils.ReturnFailUtils;
+import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.base.config.CurrentUser;
+import cn.huge.module.cases.domain.po.CaseSupervise;
+import cn.huge.module.cases.service.CaseSuperviseService;
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @title: 纠纷督办信息表接口api-web端
+ * @description: 纠纷督办信息表接口api-web端
+ * @company: hugeinfo
+ * @author: wangwh
+ * @time: 2024-09-03 10:53:01
+ * @version: 1.0.0
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/web/caseSupervise")
+public class CaseSuperviseWebController {
+
+    @Autowired(required = false)
+    private HttpServletRequest request;
+
+    @Autowired
+    private CaseSuperviseService service;
+
+    /**
+    * 获取请求URL参数
+    * @return Map<String, Object>
+    */
+    private Map<String, Object> getParameter(){
+        Map<String, Object> terms = Maps.newHashMap();
+        // 主键编号
+        String id = request.getParameter("id");
+        if (StringUtils.isNotBlank(id)){
+            terms.put("id", id);
+        }
+        // 纠纷编号
+        String caseId = request.getParameter("caseId");
+        if (StringUtils.isNotBlank(caseId)){
+            terms.put("caseId", caseId);
+        }
+        // 督办意见
+        String supContent = request.getParameter("supContent");
+        if (StringUtils.isNotBlank(supContent)){
+            terms.put("supContent", supContent);
+        }
+        // 督办人编号
+        String supUserId = request.getParameter("supUserId");
+        if (StringUtils.isNotBlank(supUserId)){
+            terms.put("supUserId", supUserId);
+        }
+        // 督办人名称
+        String supUserName = request.getParameter("supUserName");
+        if (StringUtils.isNotBlank(supUserName)){
+            terms.put("supUserName", supUserName);
+        }
+        // 督办时间
+        String supTime = request.getParameter("supTime");
+        if (StringUtils.isNotBlank(supTime)){
+            terms.put("supTime", supTime);
+        }
+        // 督办状态,0:未回复,1:已回复
+        String supStatus = request.getParameter("supStatus");
+        if (StringUtils.isNotBlank(supStatus)){
+            terms.put("supStatus", supStatus);
+        }
+        // 回复期限,单位:小时
+        String replyTerm = request.getParameter("replyTerm");
+        if (StringUtils.isNotBlank(replyTerm)){
+            terms.put("replyTerm", replyTerm);
+        }
+        // 回复内容
+        String replyContent = request.getParameter("replyContent");
+        if (StringUtils.isNotBlank(replyContent)){
+            terms.put("replyContent", replyContent);
+        }
+        // 回复人编号
+        String replyUserId = request.getParameter("replyUserId");
+        if (StringUtils.isNotBlank(replyUserId)){
+            terms.put("replyUserId", replyUserId);
+        }
+        // 回复人名称
+        String replyUserName = request.getParameter("replyUserName");
+        if (StringUtils.isNotBlank(replyUserName)){
+            terms.put("replyUserName", replyUserName);
+        }
+        // 回复时间
+        String replyTime = request.getParameter("replyTime");
+        if (StringUtils.isNotBlank(replyTime)){
+            terms.put("replyTime", replyTime);
+        }
+        // 删除状态,0:未删除,1:已删除
+        String deleteStatus = request.getParameter("deleteStatus");
+        if (StringUtils.isNotBlank(deleteStatus)){
+            terms.put("deleteStatus", deleteStatus);
+        }
+        // 顾客编号
+        String custId = request.getParameter("custId");
+        if (StringUtils.isNotBlank(custId)){
+            terms.put("custId", custId);
+        }
+        // 创建时间区间
+        String createStart = request.getParameter("createStart");
+        String createEnd = request.getParameter("createEnd");
+        if(StringUtils.isNotBlank(createStart) && StringUtils.isNotBlank(createEnd)) {
+            terms.put("createStart", createStart);
+            terms.put("createEnd", createEnd);
+        }
+        // 更新时间区间
+        String updateStart = request.getParameter("updateStart");
+        String updateEnd = request.getParameter("updateEnd");
+        if(StringUtils.isNotBlank(updateStart) && StringUtils.isNotBlank(updateEnd)) {
+            terms.put("updateStart", updateStart);
+            terms.put("updateEnd", updateEnd);
+        }
+        return terms;
+    }
+
+    /**
+    * 条件查询多个
+    * @url {ctx}/api/web/caseSupervise/listQuery
+    * @return Object
+    */
+    @GetMapping("/listQuery")
+    public Object listQuery() {
+        try {
+            Map<String, Object> terms = getParameter();
+            return ReturnSucUtils.getRepInfo(service.listTerms(terms));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 条件分页查询
+    * @url {ctx}/api/web/caseSupervise/pageQuery
+    * @param page 页码
+    * @param size 每页数量
+    * @return Object
+    */
+    @GetMapping("/pageQuery")
+    public Object pageQuery(@RequestParam(value = "page") int page, @RequestParam(value = "size") int size) {
+        try {
+            Map<String, Object> terms = getParameter();
+            Sort sort = Sort.by(Sort.Direction.DESC, "create_time");
+            PageRequest pageRequest = PageRequest.of(page-1, size, sort);
+            Page<CaseSupervise> caseSupervisePage = service.pageQuery(pageRequest, terms);
+            return ReturnSucUtils.getRepInfo( "处理成功", caseSupervisePage);
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据编号查询单个
+    * @url {ctx}/api/web/caseSupervise/getById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/getById")
+    public Object getById(@RequestParam(value = "id") String id) {
+        try {
+            return ReturnSucUtils.getRepInfo(service.getById(id));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据主键单个
+    * @url {ctx}/api/web/caseSupervise/deleteById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/deleteById")
+    public Object deleteById(@RequestParam(value = "id") String id) {
+        try {
+            service.removeById(id);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 新增或更新对象
+    * @url {ctx}/api/web/caseSupervise/saveCaseSupervise
+    * @param caseSupervise 实体对象
+    * @return Object
+    */
+    @PostMapping("/saveCaseSupervise")
+    public Object saveCaseSupervise(@RequestBody CaseSupervise caseSupervise) {
+        try {
+            service.saveCaseSupervise(caseSupervise);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+     * 添加督办
+     * @url {ctx}/api/web/caseSupervise/addCaseSupervise
+     * @param caseSupervise 实体对象
+     * @return Object
+     */
+    @PostMapping("/addCaseSupervise")
+    public Object addCaseSupervise(@CurrentUser String userId, @RequestBody CaseSupervise caseSupervise) {
+        try {
+            service.addCaseSupervise(caseSupervise, userId);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+     * 添加督办
+     * @url {ctx}/api/web/caseSupervise/replyCaseSupervise
+     * @param caseSupervise 实体对象
+     * @return Object
+     */
+    @PostMapping("/replyCaseSupervise")
+    public Object replyCaseSupervise(@CurrentUser String userId, @RequestBody CaseSupervise caseSupervise) {
+        try {
+            service.replyCaseSupervise(caseSupervise, userId);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+     * 督办信息查询
+     * @url {ctx}/api/web/caseSupervise/listCaseSupervise
+     * @param caseId 主键编号
+     * @return Object
+     */
+    @GetMapping("/listCaseSupervise")
+    public Object listCaseSupervise(@RequestParam(value = "caseId") String caseId) {
+        try {
+            return ReturnSucUtils.getRepInfo(service.listCaseSupervise(caseId));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseEvaluateMapper.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseEvaluateMapper.java
new file mode 100644
index 0000000..036b1dd
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseEvaluateMapper.java
@@ -0,0 +1,64 @@
+package cn.huge.module.cases.dao.mapper;
+
+import cn.huge.module.cases.domain.po.CaseEvaluate;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @title: 当事人纠纷评价表持久层业务处理
+* @Description 此处仅涉及复杂SQL操作,务必不要在此再次写单表的CRUD操作,因为mybatisPlus已经实现。
+* @company: hugeinfo
+* @author: wangwh
+* @time: 2024-09-04 20:21:05
+* @version 1.0.0
+*/
+@Repository
+public interface CaseEvaluateMapper extends BaseMapper<CaseEvaluate>{
+
+    /**
+    * 更新对象
+    * @param entity 对象
+    */
+    void updateCaseEvaluate(@Param("entity") CaseEvaluate entity);
+
+    /**
+    * 条件更新对象
+    * @param entity 对象
+    * @param terms 条件
+    */
+    void updateCaseEvaluateTerms(@Param("entity") CaseEvaluate entity, @Param("terms") Map<String, Object> terms);
+
+    /**
+    * 根据编号物理删除
+    * @param id 查询条件集合
+    */
+    void deleteCaseEvaluate(@Param("id") String id);
+
+    /**
+    * 按条件查询结果集
+    * @param terms 查询条件集合
+    * @return List<CaseEvaluate>
+    */
+    List<CaseEvaluate> listTerms(@Param("terms") Map<String, Object> terms);
+
+    /**
+    * 按条件查询实体总数
+    * @param terms 查询条件集合
+    * @return long
+    */
+    long countTerms(@Param("terms") Map<String, Object> terms);
+
+    /**
+    * 按条件查询实体分页结果集
+    * @param page 分页对象
+    * @param terms 查询条件集合
+    * @return List<CaseEvaluate>
+    */
+    List<CaseEvaluate> pageTerms(@Param("page") PageRequest page, @Param("terms") Map<String, Object> terms);
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseFeedbackHisMapper.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseFeedbackHisMapper.java
new file mode 100644
index 0000000..36ef98a
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseFeedbackHisMapper.java
@@ -0,0 +1,64 @@
+package cn.huge.module.cases.dao.mapper;
+
+import cn.huge.module.cases.domain.po.CaseFeedbackHis;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @title: 纠纷办理反馈信息历史表持久层业务处理
+* @Description 此处仅涉及复杂SQL操作,务必不要在此再次写单表的CRUD操作,因为mybatisPlus已经实现。
+* @company: hugeinfo
+* @author: wangwh
+* @time: 2024-08-31 17:42:41
+* @version 1.0.0
+*/
+@Repository
+public interface CaseFeedbackHisMapper extends BaseMapper<CaseFeedbackHis>{
+
+    /**
+    * 更新对象
+    * @param entity 对象
+    */
+    void updateCaseFeedbackHis(@Param("entity") CaseFeedbackHis entity);
+
+    /**
+    * 条件更新对象
+    * @param entity 对象
+    * @param terms 条件
+    */
+    void updateCaseFeedbackHisTerms(@Param("entity") CaseFeedbackHis entity, @Param("terms") Map<String, Object> terms);
+
+    /**
+    * 根据编号物理删除
+    * @param id 查询条件集合
+    */
+    void deleteCaseFeedbackHis(@Param("id") String id);
+
+    /**
+    * 按条件查询结果集
+    * @param terms 查询条件集合
+    * @return List<CaseFeedbackHis>
+    */
+    List<CaseFeedbackHis> listTerms(@Param("terms") Map<String, Object> terms);
+
+    /**
+    * 按条件查询实体总数
+    * @param terms 查询条件集合
+    * @return long
+    */
+    long countTerms(@Param("terms") Map<String, Object> terms);
+
+    /**
+    * 按条件查询实体分页结果集
+    * @param page 分页对象
+    * @param terms 查询条件集合
+    * @return List<CaseFeedbackHis>
+    */
+    List<CaseFeedbackHis> pageTerms(@Param("page") PageRequest page, @Param("terms") Map<String, Object> terms);
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseFeedbackMapper.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseFeedbackMapper.java
new file mode 100644
index 0000000..0787d77
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseFeedbackMapper.java
@@ -0,0 +1,64 @@
+package cn.huge.module.cases.dao.mapper;
+
+import cn.huge.module.cases.domain.po.CaseFeedback;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @title: 纠纷办理反馈j信息表持久层业务处理
+* @Description 此处仅涉及复杂SQL操作,务必不要在此再次写单表的CRUD操作,因为mybatisPlus已经实现。
+* @company: hugeinfo
+* @author: wangwh
+* @time: 2024-08-30 17:35:02
+* @version 1.0.0
+*/
+@Repository
+public interface CaseFeedbackMapper extends BaseMapper<CaseFeedback>{
+
+    /**
+    * 更新对象
+    * @param entity 对象
+    */
+    void updatecaseFeedback(@Param("entity") CaseFeedback entity);
+
+    /**
+    * 条件更新对象
+    * @param entity 对象
+    * @param terms 条件
+    */
+    void updatecaseFeedbackTerms(@Param("entity") CaseFeedback entity, @Param("terms") Map<String, Object> terms);
+
+    /**
+    * 根据编号物理删除
+    * @param id 查询条件集合
+    */
+    void deletecaseFeedback(@Param("id") String id);
+
+    /**
+    * 按条件查询结果集
+    * @param terms 查询条件集合
+    * @return List<caseFeedback>
+    */
+    List<CaseFeedback> listTerms(@Param("terms") Map<String, Object> terms);
+
+    /**
+    * 按条件查询实体总数
+    * @param terms 查询条件集合
+    * @return long
+    */
+    long countTerms(@Param("terms") Map<String, Object> terms);
+
+    /**
+    * 按条件查询实体分页结果集
+    * @param page 分页对象
+    * @param terms 查询条件集合
+    * @return List<caseFeedback>
+    */
+    List<CaseFeedback> pageTerms(@Param("page") PageRequest page, @Param("terms") Map<String, Object> terms);
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseSuperviseMapper.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseSuperviseMapper.java
new file mode 100644
index 0000000..e36a762
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseSuperviseMapper.java
@@ -0,0 +1,64 @@
+package cn.huge.module.cases.dao.mapper;
+
+import cn.huge.module.cases.domain.po.CaseSupervise;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @title: 纠纷督办信息表持久层业务处理
+* @Description 此处仅涉及复杂SQL操作,务必不要在此再次写单表的CRUD操作,因为mybatisPlus已经实现。
+* @company: hugeinfo
+* @author: wangwh
+* @time: 2024-09-03 10:53:01
+* @version 1.0.0
+*/
+@Repository
+public interface CaseSuperviseMapper extends BaseMapper<CaseSupervise>{
+
+    /**
+    * 更新对象
+    * @param entity 对象
+    */
+    void updateCaseSupervise(@Param("entity") CaseSupervise entity);
+
+    /**
+    * 条件更新对象
+    * @param entity 对象
+    * @param terms 条件
+    */
+    void updateCaseSuperviseTerms(@Param("entity") CaseSupervise entity, @Param("terms") Map<String, Object> terms);
+
+    /**
+    * 根据编号物理删除
+    * @param id 查询条件集合
+    */
+    void deleteCaseSupervise(@Param("id") String id);
+
+    /**
+    * 按条件查询结果集
+    * @param terms 查询条件集合
+    * @return List<CaseSupervise>
+    */
+    List<CaseSupervise> listTerms(@Param("terms") Map<String, Object> terms);
+
+    /**
+    * 按条件查询实体总数
+    * @param terms 查询条件集合
+    * @return long
+    */
+    long countTerms(@Param("terms") Map<String, Object> terms);
+
+    /**
+    * 按条件查询实体分页结果集
+    * @param page 分页对象
+    * @param terms 查询条件集合
+    * @return List<CaseSupervise>
+    */
+    List<CaseSupervise> pageTerms(@Param("page") PageRequest page, @Param("terms") Map<String, Object> terms);
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseAgentMapper.xml b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseAgentMapper.xml
index 6079c25..8795500 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseAgentMapper.xml
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseAgentMapper.xml
@@ -14,6 +14,8 @@
             <result property="id" column="id"/>
             <result property="caseId" column="case_id"/>
             <result property="partyUserId" column="party_user_id"/>
+            <result property="perType" column="per_type"/>
+            <result property="perTypeName" column="per_type_name"/>
             <result property="perClass" column="per_class"/>
             <result property="perClassName" column="per_class_name"/>
             <result property="trueName" column="true_name"/>
@@ -72,6 +74,8 @@
         id,
         case_id,
         party_user_id,
+        per_type,
+        per_type_name,
         per_class,
         per_class_name,
         true_name,
@@ -127,6 +131,8 @@
     <sql id="set-part">
             <if test="entity.caseId != null">case_id = #{entity.caseId},</if>
             <if test="entity.partyUserId != null">party_user_id = #{entity.partyUserId},</if>
+            <if test="entity.perType != null">per_type = #{entity.perType},</if>
+            <if test="entity.perTypeName != null">per_type_name = #{entity.perTypeName},</if>
             <if test="entity.perClass != null">per_class = #{entity.perClass},</if>
             <if test="entity.perClassName != null">per_class_name = #{entity.perClassName},</if>
             <if test="entity.trueName != null">true_name = #{entity.trueName},</if>
@@ -191,6 +197,12 @@
                 <if test="terms.partyUserId != null and terms.partyUserId !=''">
                     and party_user_id = #{terms.partyUserId}
                 </if>
+                <if test="terms.perType != null and terms.perType !=''">
+                    and per_type = #{terms.perType}
+                </if>
+                <if test="terms.perTypeName != null and terms.perTypeName !=''">
+                    and per_type_name = #{terms.perTypeName}
+                </if>
                 <if test="terms.perClass != null and terms.perClass !=''">
                     and per_class = #{terms.perClass}
                 </if>
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseEvaluateMapper.xml b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseEvaluateMapper.xml
new file mode 100644
index 0000000..d1edcf1
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseEvaluateMapper.xml
@@ -0,0 +1,166 @@
+<?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">
+<!-- 
+ * @title: 当事人纠纷评价表
+ * @description: 自定义sql,请自行实现业务逻辑
+ * @company: hugeinfo
+ * @author: wangwh
+ * @time:2024-09-04 20:21:05
+ * @version 1.0.0
+-->
+<mapper namespace="cn.huge.module.cases.dao.mapper.CaseEvaluateMapper">
+    <!-- 结果集 -->
+    <resultMap id="dataResult" type="cn.huge.module.cases.domain.po.CaseEvaluate">
+            <result property="id" column="id"/>
+            <result property="caseId" column="case_id"/>
+            <result property="evaluateGrade" column="evaluate_grade"/>
+            <result property="evaluateRemark" column="evaluate_remark"/>
+            <result property="evaluateContent" column="evaluate_content"/>
+            <result property="evaluateUserId" column="evaluate_user_id"/>
+            <result property="evaluateUserName" column="evaluate_user_name"/>
+            <result property="deleteStatus" column="delete_status"/>
+            <result property="custId" column="cust_id"/>
+            <result property="createTime" column="create_time"/>
+            <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <!-- 表 -->
+    <sql id='table-name'>dyh_case_evaluate</sql>
+    <!-- 字段 -->
+    <sql id="column-part">
+        id,
+        case_id,
+        evaluate_grade,
+        evaluate_remark,
+        evaluate_content,
+        evaluate_user_id,
+        evaluate_user_name,
+        delete_status,
+        cust_id,
+        create_time,
+        update_time
+    </sql>
+    <!-- 更新实体字段 -->
+    <sql id="set-part">
+            <if test="entity.caseId != null">case_id = #{entity.caseId},</if>
+            <if test="entity.evaluateGrade != null">evaluate_grade = #{entity.evaluateGrade},</if>
+            <if test="entity.evaluateRemark != null">evaluate_remark = #{entity.evaluateRemark},</if>
+            <if test="entity.evaluateContent != null">evaluate_content = #{entity.evaluateContent},</if>
+            <if test="entity.evaluateUserId != null">evaluate_user_id = #{entity.evaluateUserId},</if>
+            <if test="entity.evaluateUserName != null">evaluate_user_name = #{entity.evaluateUserName},</if>
+            <if test="entity.deleteStatus != null">delete_status = #{entity.deleteStatus},</if>
+            <if test="entity.custId != null">cust_id = #{entity.custId},</if>
+            <if test="entity.createTime != null">create_time = #{entity.createTime},</if>
+            <if test="entity.updateTime != null">update_time = #{entity.updateTime}</if>
+    </sql>
+    <!-- 条件 -->
+    <sql id="where-part">
+        <if test="terms != null">
+            <where>
+                <if test="terms.id != null and terms.id !=''">
+                    and id = #{terms.id}
+                </if>
+                <if test="terms.caseId != null and terms.caseId !=''">
+                    and case_id = #{terms.caseId}
+                </if>
+                <if test="terms.evaluateGrade != null and terms.evaluateGrade !=''">
+                    and evaluate_grade = #{terms.evaluateGrade}
+                </if>
+                <if test="terms.evaluateRemark != null and terms.evaluateRemark !=''">
+                    and evaluate_remark = #{terms.evaluateRemark}
+                </if>
+                <if test="terms.evaluateContent != null and terms.evaluateContent !=''">
+                    and evaluate_content = #{terms.evaluateContent}
+                </if>
+                <if test="terms.evaluateUserId != null and terms.evaluateUserId !=''">
+                    and evaluate_user_id = #{terms.evaluateUserId}
+                </if>
+                <if test="terms.evaluateUserName != null and terms.evaluateUserName !=''">
+                    and evaluate_user_name = #{terms.evaluateUserName}
+                </if>
+                <if test="terms.deleteStatus = null and terms.deleteStatus =''">
+                    and delete_status = 0
+                </if>
+                <if test="terms.deleteStatus != null and terms.deleteStatus !=''">
+                    and delete_status = #{terms.deleteStatus}
+                </if>
+                <if test="terms.custId != null and terms.custId !=''">
+                    and cust_id = #{terms.custId}
+                </if>
+                <if test="terms.createTime != null and terms.createTime !=''">
+                    and DATE_FORMAT(create_time,'%Y-%m-%d') = #{terms.createTime}
+                </if>
+                <if test="terms.createStart != null and terms.createStart !='' and terms.createEnd != null and terms.createEnd !=''">
+                    and (DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.createStart}
+                        and DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.createEnd})
+                </if>
+                <if test="terms.updateTime != null and terms.updateTime !=''">
+                    and DATE_FORMAT(update_time,'%Y-%m-%d') = #{terms.updateTime}
+                </if>
+                <if test="terms.updateStart != null and terms.updateStart !='' and terms.updateEnd != null and terms.updateEnd !=''">
+                    and (DATE_FORMAT(update_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.updateStart}
+                        and DATE_FORMAT(update_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.updateEnd})
+                </if>
+            </where>
+        </if>
+    </sql>
+    <!-- 更新对象 -->
+    <update id="updateCaseEvaluate">
+        update
+        <include refid="table-name"/>
+        <set>
+            <include refid="set-part"/>
+        </set>
+        <where>
+            id = #{entity.id}
+        </where>
+    </update>
+    <!-- 条件更新对象 -->
+    <update id="updateCaseEvaluateTerms">
+        update
+        <include refid="table-name"/>
+        <set>
+            <include refid="set-part"/>
+        </set>
+        <include refid="where-part"/>
+    </update>
+    <!--  根据编号物理删除  -->
+    <delete id="deleteCaseEvaluate">
+        delete from
+        <include refid="table-name" />
+        where id = #{id}
+    </delete>
+    <!--  根据条件查询  -->
+    <select id="listTerms" resultMap="dataResult">
+        select
+        <include refid="column-part"/>
+        from
+        <include refid="table-name" />
+        <include refid="where-part"/>
+    </select>
+    <!--  根据条件统计  -->
+    <select id="countTerms" resultType="java.lang.Long">
+        select
+        COUNT(1)
+        from
+        <include refid="table-name" />
+        <include refid="where-part"/>
+    </select>
+    <!--  根据条件分页查询  -->
+    <select id="pageTerms" resultMap="dataResult">
+        SELECT
+        <include refid="column-part"/>
+        FROM
+        <include refid="table-name" />
+        <include refid="where-part"/>
+        <if test="page.sort != null">
+            <foreach collection="page.sort" item="s" index="index" separator="," open="order by ">
+                isnull(${s.property}), ${s.property} ${s.direction}
+            </foreach>
+        </if>
+        <if test="page.sort == null">
+            order by isnull(create_time), create_time desc
+        </if>
+        limit #{page.offset}, #{page.size}
+    </select>
+
+</mapper> 
\ No newline at end of file
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseFeedbackHisMapper.xml b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseFeedbackHisMapper.xml
new file mode 100644
index 0000000..719b4eb
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseFeedbackHisMapper.xml
@@ -0,0 +1,175 @@
+<?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">
+<!-- 
+ * @title: 纠纷办理反馈信息历史表
+ * @description: 自定义sql,请自行实现业务逻辑
+ * @company: hugeinfo
+ * @author: wangwh
+ * @time:2024-08-31 17:42:41
+ * @version 1.0.0
+-->
+<mapper namespace="cn.huge.module.cases.dao.mapper.CaseFeedbackHisMapper">
+    <!-- 结果集 -->
+    <resultMap id="dataResult" type="cn.huge.module.cases.domain.po.CaseFeedbackHis">
+            <result property="id" column="id"/>
+            <result property="feedbackId" column="feedback_id"/>
+            <result property="caseId" column="case_id"/>
+            <result property="caseTaskId" column="case_task_id"/>
+            <result property="handleType" column="handle_type"/>
+            <result property="handleUnitId" column="handle_unit_id"/>
+            <result property="handleUnitName" column="handle_unit_name"/>
+            <result property="handleUserId" column="handle_user_id"/>
+            <result property="handleUserName" column="handle_user_name"/>
+            <result property="handleContent" column="handle_content"/>
+            <result property="custId" column="cust_id"/>
+            <result property="createTime" column="create_time"/>
+            <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <!-- 表 -->
+    <sql id='table-name'>dyh_case_feedback_his</sql>
+    <!-- 字段 -->
+    <sql id="column-part">
+        id,
+        feedback_id,
+        case_id,
+        case_task_id,
+        handle_type,
+        handle_unit_id,
+        handle_unit_name,
+        handle_user_id,
+        handle_user_name,
+        handle_content,
+        cust_id,
+        create_time,
+        update_time
+    </sql>
+    <!-- 更新实体字段 -->
+    <sql id="set-part">
+            <if test="entity.feedbackId != null">feedback_id = #{entity.feedbackId},</if>
+            <if test="entity.caseId != null">case_id = #{entity.caseId},</if>
+            <if test="entity.caseTaskId != null">case_task_id = #{entity.caseTaskId},</if>
+            <if test="entity.handleType != null">handle_type = #{entity.handleType},</if>
+            <if test="entity.handleUnitId != null">handle_unit_id = #{entity.handleUnitId},</if>
+            <if test="entity.handleUnitName != null">handle_unit_name = #{entity.handleUnitName},</if>
+            <if test="entity.handleUserId != null">handle_user_id = #{entity.handleUserId},</if>
+            <if test="entity.handleUserName != null">handle_user_name = #{entity.handleUserName},</if>
+            <if test="entity.handleContent != null">handle_content = #{entity.handleContent},</if>
+            <if test="entity.custId != null">cust_id = #{entity.custId},</if>
+            <if test="entity.createTime != null">create_time = #{entity.createTime},</if>
+            <if test="entity.updateTime != null">update_time = #{entity.updateTime}</if>
+    </sql>
+    <!-- 条件 -->
+    <sql id="where-part">
+        <if test="terms != null">
+            <where>
+                <if test="terms.id != null and terms.id !=''">
+                    and id = #{terms.id}
+                </if>
+                <if test="terms.feedbackId != null and terms.feedbackId !=''">
+                    and feedback_id = #{terms.feedbackId}
+                </if>
+                <if test="terms.caseId != null and terms.caseId !=''">
+                    and case_id = #{terms.caseId}
+                </if>
+                <if test="terms.caseTaskId != null and terms.caseTaskId !=''">
+                    and case_task_id = #{terms.caseTaskId}
+                </if>
+                <if test="terms.handleType != null and terms.handleType !=''">
+                    and handle_type = #{terms.handleType}
+                </if>
+                <if test="terms.handleUnitId != null and terms.handleUnitId !=''">
+                    and handle_unit_id = #{terms.handleUnitId}
+                </if>
+                <if test="terms.handleUnitName != null and terms.handleUnitName !=''">
+                    and handle_unit_name = #{terms.handleUnitName}
+                </if>
+                <if test="terms.handleUserId != null and terms.handleUserId !=''">
+                    and handle_user_id = #{terms.handleUserId}
+                </if>
+                <if test="terms.handleUserName != null and terms.handleUserName !=''">
+                    and handle_user_name = #{terms.handleUserName}
+                </if>
+                <if test="terms.handleContent != null and terms.handleContent !=''">
+                    and handle_content = #{terms.handleContent}
+                </if>
+                <if test="terms.custId != null and terms.custId !=''">
+                    and cust_id = #{terms.custId}
+                </if>
+                <if test="terms.createTime != null and terms.createTime !=''">
+                    and DATE_FORMAT(create_time,'%Y-%m-%d') = #{terms.createTime}
+                </if>
+                <if test="terms.createStart != null and terms.createStart !='' and terms.createEnd != null and terms.createEnd !=''">
+                    and (DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.createStart}
+                        and DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.createEnd})
+                </if>
+                <if test="terms.updateTime != null and terms.updateTime !=''">
+                    and DATE_FORMAT(update_time,'%Y-%m-%d') = #{terms.updateTime}
+                </if>
+                <if test="terms.updateStart != null and terms.updateStart !='' and terms.updateEnd != null and terms.updateEnd !=''">
+                    and (DATE_FORMAT(update_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.updateStart}
+                        and DATE_FORMAT(update_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.updateEnd})
+                </if>
+            </where>
+        </if>
+    </sql>
+    <!-- 更新对象 -->
+    <update id="updateCaseFeedbackHis">
+        update
+        <include refid="table-name"/>
+        <set>
+            <include refid="set-part"/>
+        </set>
+        <where>
+            id = #{entity.id}
+        </where>
+    </update>
+    <!-- 条件更新对象 -->
+    <update id="updateCaseFeedbackHisTerms">
+        update
+        <include refid="table-name"/>
+        <set>
+            <include refid="set-part"/>
+        </set>
+        <include refid="where-part"/>
+    </update>
+    <!--  根据编号物理删除  -->
+    <delete id="deleteCaseFeedbackHis">
+        delete from
+        <include refid="table-name" />
+        where id = #{id}
+    </delete>
+    <!--  根据条件查询  -->
+    <select id="listTerms" resultMap="dataResult">
+        select
+        <include refid="column-part"/>
+        from
+        <include refid="table-name" />
+        <include refid="where-part"/>
+    </select>
+    <!--  根据条件统计  -->
+    <select id="countTerms" resultType="java.lang.Long">
+        select
+        COUNT(1)
+        from
+        <include refid="table-name" />
+        <include refid="where-part"/>
+    </select>
+    <!--  根据条件分页查询  -->
+    <select id="pageTerms" resultMap="dataResult">
+        SELECT
+        <include refid="column-part"/>
+        FROM
+        <include refid="table-name" />
+        <include refid="where-part"/>
+        <if test="page.sort != null">
+            <foreach collection="page.sort" item="s" index="index" separator="," open="order by ">
+                isnull(${s.property}), ${s.property} ${s.direction}
+            </foreach>
+        </if>
+        <if test="page.sort == null">
+            order by isnull(create_time), create_time desc
+        </if>
+        limit #{page.offset}, #{page.size}
+    </select>
+
+</mapper> 
\ No newline at end of file
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseFeedbackMapper.xml b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseFeedbackMapper.xml
new file mode 100644
index 0000000..d3a01df
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseFeedbackMapper.xml
@@ -0,0 +1,178 @@
+<?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">
+<!-- 
+ * @title: 纠纷办理反馈j信息表
+ * @description: 自定义sql,请自行实现业务逻辑
+ * @company: hugeinfo
+ * @author: wangwh
+ * @time:2024-08-30 17:35:02
+ * @version 1.0.0
+-->
+<mapper namespace="cn.huge.module.cases.dao.mapper.CaseFeedbackMapper">
+    <!-- 结果集 -->
+    <resultMap id="dataResult" type="cn.huge.module.cases.domain.po.CaseFeedback">
+            <result property="id" column="id"/>
+            <result property="caseId" column="case_id"/>
+            <result property="caseTaskId" column="case_task_id"/>
+            <result property="handleType" column="handle_type"/>
+            <result property="handleUnitId" column="handle_unit_id"/>
+            <result property="handleUnitName" column="handle_unit_name"/>
+            <result property="handleUserId" column="handle_user_id"/>
+            <result property="handleUserName" column="handle_user_name"/>
+            <result property="handleContent" column="handle_content"/>
+            <result property="deleteStatus" column="delete_status"/>
+            <result property="custId" column="cust_id"/>
+            <result property="createTime" column="create_time"/>
+            <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <!-- 表 -->
+    <sql id='table-name'>dyh_case_feedback</sql>
+    <!-- 字段 -->
+    <sql id="column-part">
+        id,
+        case_id,
+        case_task_id,
+        handle_type,
+        handle_unit_id,
+        handle_unit_name,
+        handle_user_id,
+        handle_user_name,
+        handle_content,
+        delete_status,
+        cust_id,
+        create_time,
+        update_time
+    </sql>
+    <!-- 更新实体字段 -->
+    <sql id="set-part">
+            <if test="entity.caseId != null">case_id = #{entity.caseId},</if>
+            <if test="entity.caseTskId != null">case_task_id = #{entity.caseTskId},</if>
+            <if test="entity.handleType != null">handle_type = #{entity.handleType},</if>
+            <if test="entity.handleUnitId != null">handle_unit_id = #{entity.handleUnitId},</if>
+            <if test="entity.handleUnitName != null">handle_unit_name = #{entity.handleUnitName},</if>
+            <if test="entity.handleUserId != null">handle_user_id = #{entity.handleUserId},</if>
+            <if test="entity.handleUserName != null">handle_user_name = #{entity.handleUserName},</if>
+            <if test="entity.handleContent != null">handle_content = #{entity.handleContent},</if>
+            <if test="entity.deleteStatus != null">delete_status = #{entity.deleteStatus},</if>
+            <if test="entity.custId != null">cust_id = #{entity.custId},</if>
+            <if test="entity.createTime != null">create_time = #{entity.createTime},</if>
+            <if test="entity.updateTime != null">update_time = #{entity.updateTime}</if>
+    </sql>
+    <!-- 条件 -->
+    <sql id="where-part">
+        <if test="terms != null">
+            <where>
+                <if test="terms.id != null and terms.id !=''">
+                    and id = #{terms.id}
+                </if>
+                <if test="terms.caseId != null and terms.caseId !=''">
+                    and case_id = #{terms.caseId}
+                </if>
+                <if test="terms.caseTaskId != null and terms.caseTaskId !=''">
+                    and case_task_id = #{terms.caseTaskId}
+                </if>
+                <if test="terms.handleType != null and terms.handleType !=''">
+                    and handle_type = #{terms.handleType}
+                </if>
+                <if test="terms.handleUnitId != null and terms.handleUnitId !=''">
+                    and handle_unit_id = #{terms.handleUnitId}
+                </if>
+                <if test="terms.handleUnitName != null and terms.handleUnitName !=''">
+                    and handle_unit_name = #{terms.handleUnitName}
+                </if>
+                <if test="terms.handleUserId != null and terms.handleUserId !=''">
+                    and handle_user_id = #{terms.handleUserId}
+                </if>
+                <if test="terms.handleUserName != null and terms.handleUserName !=''">
+                    and handle_user_name = #{terms.handleUserName}
+                </if>
+                <if test="terms.handleContent != null and terms.handleContent !=''">
+                    and handle_content = #{terms.handleContent}
+                </if>
+                <if test="terms.deleteStatus = null and terms.deleteStatus =''">
+                    and delete_status = '0'
+                </if>
+                <if test="terms.deleteStatus != null and terms.deleteStatus !=''">
+                    and delete_status = #{terms.deleteStatus}
+                </if>
+                <if test="terms.custId != null and terms.custId !=''">
+                    and cust_id = #{terms.custId}
+                </if>
+                <if test="terms.createTime != null and terms.createTime !=''">
+                    and DATE_FORMAT(create_time,'%Y-%m-%d') = #{terms.createTime}
+                </if>
+                <if test="terms.createStart != null and terms.createStart !='' and terms.createEnd != null and terms.createEnd !=''">
+                    and (DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.createStart}
+                        and DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.createEnd})
+                </if>
+                <if test="terms.updateTime != null and terms.updateTime !=''">
+                    and DATE_FORMAT(update_time,'%Y-%m-%d') = #{terms.updateTime}
+                </if>
+                <if test="terms.updateStart != null and terms.updateStart !='' and terms.updateEnd != null and terms.updateEnd !=''">
+                    and (DATE_FORMAT(update_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.updateStart}
+                        and DATE_FORMAT(update_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.updateEnd})
+                </if>
+            </where>
+        </if>
+    </sql>
+    <!-- 更新对象 -->
+    <update id="updatecaseFeedback">
+        update
+        <include refid="table-name"/>
+        <set>
+            <include refid="set-part"/>
+        </set>
+        <where>
+            id = #{entity.id}
+        </where>
+    </update>
+    <!-- 条件更新对象 -->
+    <update id="updatecaseFeedbackTerms">
+        update
+        <include refid="table-name"/>
+        <set>
+            <include refid="set-part"/>
+        </set>
+        <include refid="where-part"/>
+    </update>
+    <!--  根据编号物理删除  -->
+    <delete id="deletecaseFeedback">
+        delete from
+        <include refid="table-name" />
+        where id = #{id}
+    </delete>
+    <!--  根据条件查询  -->
+    <select id="listTerms" resultMap="dataResult">
+        select
+        <include refid="column-part"/>
+        from
+        <include refid="table-name" />
+        <include refid="where-part"/>
+    </select>
+    <!--  根据条件统计  -->
+    <select id="countTerms" resultType="java.lang.Long">
+        select
+        COUNT(1)
+        from
+        <include refid="table-name" />
+        <include refid="where-part"/>
+    </select>
+    <!--  根据条件分页查询  -->
+    <select id="pageTerms" resultMap="dataResult">
+        SELECT
+        <include refid="column-part"/>
+        FROM
+        <include refid="table-name" />
+        <include refid="where-part"/>
+        <if test="page.sort != null">
+            <foreach collection="page.sort" item="s" index="index" separator="," open="order by ">
+                isnull(${s.property}), ${s.property} ${s.direction}
+            </foreach>
+        </if>
+        <if test="page.sort == null">
+            order by isnull(create_time), create_time desc
+        </if>
+        limit #{page.offset}, #{page.size}
+    </select>
+
+</mapper> 
\ No newline at end of file
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseSuperviseMapper.xml b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseSuperviseMapper.xml
new file mode 100644
index 0000000..6aeb3bc
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseSuperviseMapper.xml
@@ -0,0 +1,196 @@
+<?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">
+<!-- 
+ * @title: 纠纷督办信息表
+ * @description: 自定义sql,请自行实现业务逻辑
+ * @company: hugeinfo
+ * @author: wangwh
+ * @time:2024-09-03 10:53:01
+ * @version 1.0.0
+-->
+<mapper namespace="cn.huge.module.cases.dao.mapper.CaseSuperviseMapper">
+    <!-- 结果集 -->
+    <resultMap id="dataResult" type="cn.huge.module.cases.domain.po.CaseSupervise">
+            <result property="id" column="id"/>
+            <result property="caseId" column="case_id"/>
+            <result property="supContent" column="sup_content"/>
+            <result property="supUserId" column="sup_user_id"/>
+            <result property="supUserName" column="sup_user_name"/>
+            <result property="supTime" column="sup_time"/>
+            <result property="supStatus" column="sup_status"/>
+            <result property="replyTerm" column="reply_term"/>
+            <result property="replyContent" column="reply_content"/>
+            <result property="replyUserId" column="reply_user_id"/>
+            <result property="replyUserName" column="reply_user_name"/>
+            <result property="replyTime" column="reply_time"/>
+            <result property="deleteStatus" column="delete_status"/>
+            <result property="custId" column="cust_id"/>
+            <result property="createTime" column="create_time"/>
+            <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <!-- 表 -->
+    <sql id='table-name'>dyh_case_supervise</sql>
+    <!-- 字段 -->
+    <sql id="column-part">
+        id,
+        case_id,
+        sup_content,
+        sup_user_id,
+        sup_user_name,
+        sup_time,
+        sup_status,
+        reply_term,
+        reply_content,
+        reply_user_id,
+        reply_user_name,
+        reply_time,
+        delete_status,
+        cust_id,
+        create_time,
+        update_time
+    </sql>
+    <!-- 更新实体字段 -->
+    <sql id="set-part">
+            <if test="entity.caseId != null">case_id = #{entity.caseId},</if>
+            <if test="entity.supContent != null">sup_content = #{entity.supContent},</if>
+            <if test="entity.supUserId != null">sup_user_id = #{entity.supUserId},</if>
+            <if test="entity.supUserName != null">sup_user_name = #{entity.supUserName},</if>
+            <if test="entity.supTime != null">sup_time = #{entity.supTime},</if>
+            <if test="entity.supStatus != null">sup_status = #{entity.supStatus},</if>
+            <if test="entity.replyTerm != null">reply_term = #{entity.replyTerm},</if>
+            <if test="entity.replyContent != null">reply_content = #{entity.replyContent},</if>
+            <if test="entity.replyUserId != null">reply_user_id = #{entity.replyUserId},</if>
+            <if test="entity.replyUserName != null">reply_user_name = #{entity.replyUserName},</if>
+            <if test="entity.replyTime != null">reply_time = #{entity.replyTime},</if>
+            <if test="entity.deleteStatus != null">delete_status = #{entity.deleteStatus},</if>
+            <if test="entity.custId != null">cust_id = #{entity.custId},</if>
+            <if test="entity.createTime != null">create_time = #{entity.createTime},</if>
+            <if test="entity.updateTime != null">update_time = #{entity.updateTime}</if>
+    </sql>
+    <!-- 条件 -->
+    <sql id="where-part">
+        <if test="terms != null">
+            <where>
+                <if test="terms.id != null and terms.id !=''">
+                    and id = #{terms.id}
+                </if>
+                <if test="terms.caseId != null and terms.caseId !=''">
+                    and case_id = #{terms.caseId}
+                </if>
+                <if test="terms.supContent != null and terms.supContent !=''">
+                    and sup_content = #{terms.supContent}
+                </if>
+                <if test="terms.supUserId != null and terms.supUserId !=''">
+                    and sup_user_id = #{terms.supUserId}
+                </if>
+                <if test="terms.supUserName != null and terms.supUserName !=''">
+                    and sup_user_name = #{terms.supUserName}
+                </if>
+                <if test="terms.supTime != null and terms.supTime !=''">
+                    and sup_time = #{terms.supTime}
+                </if>
+                <if test="terms.supStatus != null and terms.supStatus !=''">
+                    and sup_status = #{terms.supStatus}
+                </if>
+                <if test="terms.replyTerm != null and terms.replyTerm !=''">
+                    and reply_term = #{terms.replyTerm}
+                </if>
+                <if test="terms.replyContent != null and terms.replyContent !=''">
+                    and reply_content = #{terms.replyContent}
+                </if>
+                <if test="terms.replyUserId != null and terms.replyUserId !=''">
+                    and reply_user_id = #{terms.replyUserId}
+                </if>
+                <if test="terms.replyUserName != null and terms.replyUserName !=''">
+                    and reply_user_name = #{terms.replyUserName}
+                </if>
+                <if test="terms.replyTime != null and terms.replyTime !=''">
+                    and reply_time = #{terms.replyTime}
+                </if>
+                <if test="terms.deleteStatus = null and terms.deleteStatus =''">
+                    and delete_status = 0
+                </if>
+                <if test="terms.deleteStatus != null and terms.deleteStatus !=''">
+                    and delete_status = #{terms.deleteStatus}
+                </if>
+                <if test="terms.custId != null and terms.custId !=''">
+                    and cust_id = #{terms.custId}
+                </if>
+                <if test="terms.createTime != null and terms.createTime !=''">
+                    and DATE_FORMAT(create_time,'%Y-%m-%d') = #{terms.createTime}
+                </if>
+                <if test="terms.createStart != null and terms.createStart !='' and terms.createEnd != null and terms.createEnd !=''">
+                    and (DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.createStart}
+                        and DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.createEnd})
+                </if>
+                <if test="terms.updateTime != null and terms.updateTime !=''">
+                    and DATE_FORMAT(update_time,'%Y-%m-%d') = #{terms.updateTime}
+                </if>
+                <if test="terms.updateStart != null and terms.updateStart !='' and terms.updateEnd != null and terms.updateEnd !=''">
+                    and (DATE_FORMAT(update_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.updateStart}
+                        and DATE_FORMAT(update_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.updateEnd})
+                </if>
+            </where>
+        </if>
+    </sql>
+    <!-- 更新对象 -->
+    <update id="updateCaseSupervise">
+        update
+        <include refid="table-name"/>
+        <set>
+            <include refid="set-part"/>
+        </set>
+        <where>
+            id = #{entity.id}
+        </where>
+    </update>
+    <!-- 条件更新对象 -->
+    <update id="updateCaseSuperviseTerms">
+        update
+        <include refid="table-name"/>
+        <set>
+            <include refid="set-part"/>
+        </set>
+        <include refid="where-part"/>
+    </update>
+    <!--  根据编号物理删除  -->
+    <delete id="deleteCaseSupervise">
+        delete from
+        <include refid="table-name" />
+        where id = #{id}
+    </delete>
+    <!--  根据条件查询  -->
+    <select id="listTerms" resultMap="dataResult">
+        select
+        <include refid="column-part"/>
+        from
+        <include refid="table-name" />
+        <include refid="where-part"/>
+    </select>
+    <!--  根据条件统计  -->
+    <select id="countTerms" resultType="java.lang.Long">
+        select
+        COUNT(1)
+        from
+        <include refid="table-name" />
+        <include refid="where-part"/>
+    </select>
+    <!--  根据条件分页查询  -->
+    <select id="pageTerms" resultMap="dataResult">
+        SELECT
+        <include refid="column-part"/>
+        FROM
+        <include refid="table-name" />
+        <include refid="where-part"/>
+        <if test="page.sort != null">
+            <foreach collection="page.sort" item="s" index="index" separator="," open="order by ">
+                isnull(${s.property}), ${s.property} ${s.direction}
+            </foreach>
+        </if>
+        <if test="page.sort == null">
+            order by isnull(create_time), create_time desc
+        </if>
+        limit #{page.offset}, #{page.size}
+    </select>
+
+</mapper> 
\ No newline at end of file
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/bo/CaseEvaluateBO.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/bo/CaseEvaluateBO.java
new file mode 100644
index 0000000..875f2e1
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/bo/CaseEvaluateBO.java
@@ -0,0 +1,17 @@
+package cn.huge.module.cases.domain.bo;
+
+import cn.huge.module.cases.domain.po.CaseEvaluate;
+
+/**
+ * @title: 当事人纠纷评价表业务扩展类
+ * @description: 当事人纠纷评价表业务扩展类
+ * @company: hugeinfo
+ * @author: wangwh
+ * @time: 2024-09-04 20:21:05
+ * @version: 1.0.0
+ * @see cn.huge.module.cases.domain.po.CaseEvaluate
+ */
+public class CaseEvaluateBO extends CaseEvaluate {
+
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/bo/CaseFeedbackBO.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/bo/CaseFeedbackBO.java
new file mode 100644
index 0000000..7d4b58b
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/bo/CaseFeedbackBO.java
@@ -0,0 +1,17 @@
+package cn.huge.module.cases.domain.bo;
+
+import cn.huge.module.cases.domain.po.CaseFeedback;
+
+/**
+ * @title: 纠纷办理反馈j信息表业务扩展类
+ * @description: 纠纷办理反馈j信息表业务扩展类
+ * @company: hugeinfo
+ * @author: wangwh
+ * @time: 2024-08-30 17:35:02
+ * @version: 1.0.0
+ * @see CaseFeedback
+ */
+public class CaseFeedbackBO extends CaseFeedback {
+
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/bo/CaseFeedbackHisBO.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/bo/CaseFeedbackHisBO.java
new file mode 100644
index 0000000..b637f72
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/bo/CaseFeedbackHisBO.java
@@ -0,0 +1,17 @@
+package cn.huge.module.cases.domain.bo;
+
+import cn.huge.module.cases.domain.po.CaseFeedbackHis;
+
+/**
+ * @title: 纠纷办理反馈信息历史表业务扩展类
+ * @description: 纠纷办理反馈信息历史表业务扩展类
+ * @company: hugeinfo
+ * @author: wangwh
+ * @time: 2024-08-31 17:42:41
+ * @version: 1.0.0
+ * @see cn.huge.module.cases.domain.po.CaseFeedbackHis
+ */
+public class CaseFeedbackHisBO extends CaseFeedbackHis {
+
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/bo/CaseSuperviseBO.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/bo/CaseSuperviseBO.java
new file mode 100644
index 0000000..fcbc379
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/bo/CaseSuperviseBO.java
@@ -0,0 +1,17 @@
+package cn.huge.module.cases.domain.bo;
+
+import cn.huge.module.cases.domain.po.CaseSupervise;
+
+/**
+ * @title: 纠纷督办信息表业务扩展类
+ * @description: 纠纷督办信息表业务扩展类
+ * @company: hugeinfo
+ * @author: wangwh
+ * @time: 2024-09-03 10:53:01
+ * @version: 1.0.0
+ * @see cn.huge.module.cases.domain.po.CaseSupervise
+ */
+public class CaseSuperviseBO extends CaseSupervise {
+
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseInfoDTO.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseInfoDTO.java
new file mode 100644
index 0000000..de9214e
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseInfoDTO.java
@@ -0,0 +1,54 @@
+package cn.huge.module.cases.domain.dto;
+
+import cn.huge.module.cases.domain.po.CaseAgent;
+import cn.huge.module.cases.domain.po.CaseInfo;
+import cn.huge.module.cases.domain.po.CasePerson;
+import cn.huge.module.sys.dto.FileTypeInfoBaseDTO;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @title: 纠纷信息数据传输对象
+ * @description: 纠纷信息数据传输对象
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2022-03-11 11:43:25
+ * @version: 1.0.0
+ * @see CaseInfo
+ */
+@Data
+public class CaseInfoDTO extends CaseInfo {
+
+    /**
+     * 调解组织类型,1:本单位调解,2:本单位人调解,3:其他单位调解
+     */
+    private String mediateUnitType;
+
+    /**
+     * 申请人列表
+     */
+    private List<CasePerson> personList;
+
+    /**
+     * 申请人代理人列表
+     */
+    private List<CaseAgent> agentList;
+
+    /**
+     * 附件列表
+     */
+    private List<FileTypeInfoBaseDTO> fileInfoList;
+
+    /**
+     * 是否是登记人 1:是 2:否
+     */
+    private String whetherInput;
+
+    /**
+     * 相关附件数量
+     */
+    private Integer fileSize;
+
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/RegisterSaveDTO.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/RegisterSaveDTO.java
index 8ab275d..c74f4ed 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/RegisterSaveDTO.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/RegisterSaveDTO.java
@@ -20,69 +20,14 @@
 public class RegisterSaveDTO extends CaseInfo {
 
     /**
-     * 申请人类型
+     * 当事人列表
      */
-    private String plaintPerClass;
+    private List<CasePerson> personList;
 
     /**
-     * 申请人类型名称
+     * 当事人代理人列表
      */
-    private String plaintPerClassName;
-
-    /**
-     * 申请人姓名
-     */
-    private String plaintTrueName;
-
-    /**
-     * 申请人联系电话
-     */
-    private String plaintMobile;
-
-    /**
-     * 被申请人类型
-     */
-    private String defendPerClass;
-
-    /**
-     * 被申请人类型
-     */
-    private String defendPerClassName;
-
-    /**
-     * 被申请人姓名
-     */
-    private String defendTrueName;
-
-    /**
-     * 被申请人联系电话
-     */
-    private String defendMobile;
-
-    /**
-     * 申请人列表
-     */
-    private List<CasePerson> plaintiffList;
-
-    /**
-     * 申请人代理人列表
-     */
-    private List<CaseAgent> pagentList;
-
-    /**
-     * 被申请人列表
-     */
-    private List<CasePerson> defendantList;
-
-    /**
-     * 被申请人代理人列表
-     */
-    private List<CaseAgent> dagentList;
-
-    /**
-     * 调解组织类型,1:本单位调解,2:本单位人调解,3:其他单位调解
-     */
-    private String mediateUnitType;
+    private List<CaseAgent> agentList;
 
     /**
      * 自行受理标识,0:不是,1:是
@@ -93,4 +38,9 @@
      * 是否是草稿提交,0:不是,1:是
      */
     private Integer isDraft;
+
+    /**
+     * 操作类型:0:新增,1:更新
+     */
+    private Integer operateType;
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseAgent.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseAgent.java
index c943702..8e178d8 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseAgent.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseAgent.java
@@ -1,5 +1,6 @@
 package cn.huge.module.cases.domain.po;
 
+import cn.huge.module.sys.dto.FileTypeInfoBaseDTO;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
@@ -7,6 +8,7 @@
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * @title: 纠纷代理人信息表数据库对应关系类
@@ -37,6 +39,18 @@
     */
     @TableField(value = "party_user_id")
     private String partyUserId;
+
+    /**
+     * 当事人地位
+     */
+    @TableField(value = "per_type")
+    private String perType;
+
+    /**
+     * 当事人地位名称
+     */
+    @TableField(value = "per_type_name")
+    private String perTypeName;
 
     /**
     * 代理人类型
@@ -339,4 +353,10 @@
     @TableField(value = "update_time")
     private Date updateTime;
 
+    /**
+     * 附件列表
+     */
+    @TableField(exist = false)
+    private List<FileTypeInfoBaseDTO> fileInfoList;
+
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseEvaluate.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseEvaluate.java
new file mode 100644
index 0000000..723fdfb
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseEvaluate.java
@@ -0,0 +1,90 @@
+package cn.huge.module.cases.domain.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @title: 当事人纠纷评价表数据库对应关系类
+ * @description: PO中的属性与数据表是一一对应关系,如需根据业务处理不同,请使用BO对象。
+ * @company:hugeinfo
+ * @author: wangwh
+ * @time: 2024-09-04 20:21:05
+ * @version 1.0.0
+ */
+@TableName(value = "dyh_case_evaluate")
+@Data
+public class CaseEvaluate {
+
+    /**
+    * 主键编号
+    */
+    @TableId(value = "id")
+    private String id;
+
+    /**
+    * 纠纷编号
+    */
+    @TableField(value = "case_id")
+    private String caseId;
+
+    /**
+    * 评价等级
+    */
+    @TableField(value = "evaluate_grade")
+    private Integer evaluateGrade;
+
+    /**
+    * 选择评语,多个用,隔开
+    */
+    @TableField(value = "evaluate_remark")
+    private String evaluateRemark;
+
+    /**
+    * 评价建议
+    */
+    @TableField(value = "evaluate_content")
+    private String evaluateContent;
+
+    /**
+    * 评价人编号
+    */
+    @TableField(value = "evaluate_user_id")
+    private String evaluateUserId;
+
+    /**
+    * 评价人名称
+    */
+    @TableField(value = "evaluate_user_name")
+    private String evaluateUserName;
+
+    /**
+    * 删除状态,0:未删除,1:已删除
+    */
+    @TableLogic
+    @TableField(value = "delete_status")
+    private Integer deleteStatus;
+
+    /**
+    * 顾客编号
+    */
+    @TableField(value = "cust_id")
+    private String custId;
+
+    /**
+    * 创建时间
+    */
+    @TableField(value = "create_time")
+    private Date createTime;
+
+    /**
+    * 更新时间
+    */
+    @TableField(value = "update_time")
+    private Date updateTime;
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseFeedback.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseFeedback.java
new file mode 100644
index 0000000..af7c9f5
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseFeedback.java
@@ -0,0 +1,110 @@
+package cn.huge.module.cases.domain.po;
+
+import cn.huge.module.sys.dto.FileInfoBaseDTO;
+import cn.huge.module.sys.dto.FileTypeInfoBaseDTO;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @title: 纠纷办理反馈j信息表数据库对应关系类
+ * @description: PO中的属性与数据表是一一对应关系,如需根据业务处理不同,请使用BO对象。
+ * @company:hugeinfo
+ * @author: wangwh
+ * @time: 2024-08-30 17:35:02
+ * @version 1.0.0
+ */
+@TableName(value = "dyh_case_feedback")
+@Data
+public class CaseFeedback {
+
+    /**
+    * 主键编号
+    */
+    @TableId(value = "id")
+    private String id;
+
+    /**
+    * 纠纷编号
+    */
+    @TableField(value = "case_id")
+    private String caseId;
+
+    /**
+     * 任务编号
+     */
+    @TableField(value = "case_task_id")
+    private String caseTaskId;
+
+    /**
+    * 经办类型,1:承办组织,2:配合组织
+    */
+    @TableField(value = "handle_type")
+    private Integer handleType;
+
+    /**
+    * 经办组织编号
+    */
+    @TableField(value = "handle_unit_id")
+    private String handleUnitId;
+
+    /**
+    * 经办组织名称
+    */
+    @TableField(value = "handle_unit_name")
+    private String handleUnitName;
+
+    /**
+    * 操作人编号
+    */
+    @TableField(value = "handle_user_id")
+    private String handleUserId;
+
+    /**
+    * 经办人名称
+    */
+    @TableField(value = "handle_user_name")
+    private String handleUserName;
+
+    /**
+    * 办理意见
+    */
+    @TableField(value = "handle_content")
+    private String handleContent;
+
+    /**
+    * 删除状态,0:未删除,1:已删除
+    */
+    @TableLogic
+    @TableField(value = "delete_status")
+    private Integer deleteStatus;
+
+    /**
+    * 顾客编号
+    */
+    @TableField(value = "cust_id")
+    private String custId;
+
+    /**
+    * 创建时间
+    */
+    @TableField(value = "create_time")
+    private Date createTime;
+
+    /**
+    * 更新时间
+    */
+    @TableField(value = "update_time")
+    private Date updateTime;
+
+    /**
+     * 附件列表
+     */
+    @TableField(exist = false)
+    private List<FileInfoBaseDTO> fileInfoList;
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseFeedbackHis.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseFeedbackHis.java
new file mode 100644
index 0000000..8d68b0e
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseFeedbackHis.java
@@ -0,0 +1,101 @@
+package cn.huge.module.cases.domain.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @title: 纠纷办理反馈信息历史表数据库对应关系类
+ * @description: PO中的属性与数据表是一一对应关系,如需根据业务处理不同,请使用BO对象。
+ * @company:hugeinfo
+ * @author: wangwh
+ * @time: 2024-08-31 17:42:41
+ * @version 1.0.0
+ */
+@TableName(value = "dyh_case_feedback_his")
+@Data
+public class CaseFeedbackHis {
+
+    /**
+    * 主键编号
+    */
+    @TableId(value = "id")
+    private String id;
+
+    /**
+    * 办理反馈信息编号
+    */
+    @TableField(value = "feedback_id")
+    private String feedbackId;
+
+    /**
+    * 纠纷编号
+    */
+    @TableField(value = "case_id")
+    private String caseId;
+
+    /**
+    * 办理反馈纠纷任务编号
+    */
+    @TableField(value = "case_task_id")
+    private String caseTaskId;
+
+    /**
+    * 经办类型,1:承办组织,2:配合组织
+    */
+    @TableField(value = "handle_type")
+    private Integer handleType;
+
+    /**
+    * 经办组织编号
+    */
+    @TableField(value = "handle_unit_id")
+    private String handleUnitId;
+
+    /**
+    * 经办组织名称
+    */
+    @TableField(value = "handle_unit_name")
+    private String handleUnitName;
+
+    /**
+    * 操作人编号
+    */
+    @TableField(value = "handle_user_id")
+    private String handleUserId;
+
+    /**
+    * 经办人名称
+    */
+    @TableField(value = "handle_user_name")
+    private String handleUserName;
+
+    /**
+    * 办理意见
+    */
+    @TableField(value = "handle_content")
+    private String handleContent;
+
+    /**
+    * 顾客编号
+    */
+    @TableField(value = "cust_id")
+    private String custId;
+
+    /**
+    * 创建时间
+    */
+    @TableField(value = "create_time")
+    private Date createTime;
+
+    /**
+    * 更新时间
+    */
+    @TableField(value = "update_time")
+    private Date updateTime;
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseInfo.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseInfo.java
index 045eaf2..bbe88f5 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseInfo.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseInfo.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.util.Date;
@@ -47,6 +48,7 @@
     /**
     * 来访时间
     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm", timezone="GMT+8")
     @TableField(value = "visit_time")
     private Date visitTime;
 
@@ -95,6 +97,7 @@
     /**
     * 纠纷发生时间
     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm", timezone="GMT+8")
     @TableField(value = "occur_time")
     private Date occurTime;
 
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CasePerson.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CasePerson.java
index 4088c02..60e46a9 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CasePerson.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CasePerson.java
@@ -1,5 +1,6 @@
 package cn.huge.module.cases.domain.po;
 
+import cn.huge.module.sys.dto.FileTypeInfoBaseDTO;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
@@ -7,6 +8,7 @@
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * @title: 纠纷当事人信息表数据库对应关系类
@@ -345,4 +347,9 @@
     @TableField(value = "update_time")
     private Date updateTime;
 
+    /**
+     * 附件列表
+     */
+    @TableField(exist = false)
+    private List<FileTypeInfoBaseDTO> fileInfoList;
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseSupervise.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseSupervise.java
new file mode 100644
index 0000000..ee72896
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/po/CaseSupervise.java
@@ -0,0 +1,127 @@
+package cn.huge.module.cases.domain.po;
+
+import cn.huge.module.sys.dto.FileTypeInfoBaseDTO;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @title: 纠纷督办信息表数据库对应关系类
+ * @description: PO中的属性与数据表是一一对应关系,如需根据业务处理不同,请使用BO对象。
+ * @company:hugeinfo
+ * @author: wangwh
+ * @time: 2024-09-03 10:53:01
+ * @version 1.0.0
+ */
+@TableName(value = "dyh_case_supervise")
+@Data
+public class CaseSupervise {
+
+    /**
+    * 主键编号
+    */
+    @TableId(value = "id")
+    private String id;
+
+    /**
+    * 纠纷编号
+    */
+    @TableField(value = "case_id")
+    private String caseId;
+
+    /**
+    * 督办意见
+    */
+    @TableField(value = "sup_content")
+    private String supContent;
+
+    /**
+    * 督办人编号
+    */
+    @TableField(value = "sup_user_id")
+    private String supUserId;
+
+    /**
+    * 督办人名称
+    */
+    @TableField(value = "sup_user_name")
+    private String supUserName;
+
+    /**
+    * 督办时间
+    */
+    @TableField(value = "sup_time")
+    private Date supTime;
+
+    /**
+    * 督办状态,0:未回复,1:已回复
+    */
+    @TableField(value = "sup_status")
+    private Integer supStatus;
+
+    /**
+    * 回复期限,单位:小时
+    */
+    @TableField(value = "reply_term")
+    private Integer replyTerm;
+
+    /**
+    * 回复内容
+    */
+    @TableField(value = "reply_content")
+    private String replyContent;
+
+    /**
+    * 回复人编号
+    */
+    @TableField(value = "reply_user_id")
+    private String replyUserId;
+
+    /**
+    * 回复人名称
+    */
+    @TableField(value = "reply_user_name")
+    private String replyUserName;
+
+    /**
+    * 回复时间
+    */
+    @TableField(value = "reply_time")
+    private String replyTime;
+
+    /**
+    * 删除状态,0:未删除,1:已删除
+    */
+    @TableLogic
+    @TableField(value = "delete_status")
+    private Integer deleteStatus;
+
+    /**
+    * 顾客编号
+    */
+    @TableField(value = "cust_id")
+    private String custId;
+
+    /**
+    * 创建时间
+    */
+    @TableField(value = "create_time")
+    private Date createTime;
+
+    /**
+    * 更新时间
+    */
+    @TableField(value = "update_time")
+    private Date updateTime;
+
+    /**
+     * 附件列表
+     */
+    @TableField(exist = false)
+    private List<FileTypeInfoBaseDTO> fileInfoList;
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseEvaluateService.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseEvaluateService.java
new file mode 100644
index 0000000..f1086fd
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseEvaluateService.java
@@ -0,0 +1,133 @@
+package cn.huge.module.cases.service;
+
+import cn.huge.base.common.exception.ServiceException;
+import cn.huge.base.common.utils.DateUtils;
+import cn.huge.base.common.utils.IdUtils;
+import cn.huge.module.client.api.impl.UtilsClientImpl;
+import cn.huge.module.cases.dao.mapper.CaseEvaluateMapper;
+import cn.huge.module.cases.domain.po.CaseEvaluate;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.PostConstruct;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @title: 当事人纠纷评价表业务逻辑处理
+ * @Description 当事人纠纷评价表业务逻辑处理
+ * @company hugeinfo
+ * @author wangwh
+ * @Time 2024-09-04 20:21:05
+ * @version 1.0.0
+ */
+@Slf4j
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class CaseEvaluateService extends ServiceImpl<CaseEvaluateMapper, CaseEvaluate>{
+
+    @Autowired
+    private CaseEvaluateMapper mapper;
+
+    @Autowired
+    private UtilsClientImpl utilsClient;
+
+    /**
+    * 更新对象
+    * @param entity 对象
+    */
+    public void updateCaseEvaluate(CaseEvaluate entity){
+        try{
+            mapper.updateCaseEvaluate(entity);
+        }catch (Exception e){
+            log.error("[CaseEvaluateService.updateCaseEvaluate]调用失败,异常信息:"+e, e);
+            throw new ServiceException("CaseEvaluateService.updateCaseEvaluate", e);
+        }
+    }
+
+    /**
+    * 条件更新对象
+    * @param entity 对象
+    * @param terms 条件
+    */
+    public void updateCaseEvaluateTerms(CaseEvaluate entity, Map<String, Object> terms){
+        try{
+            mapper.updateCaseEvaluateTerms(entity, terms);
+        }catch (Exception e){
+            log.error("[CaseEvaluateService.updateCaseEvaluateTerms]调用失败,异常信息:"+e, e);
+            throw new ServiceException("CaseEvaluateService.updateCaseEvaluateTerms", e);
+        }
+    }
+
+    /**
+    * 根据编号物理删除
+    * @param id 查询条件集合
+    */
+    public void deleteCaseEvaluate(String id){
+        try{
+            mapper.deleteCaseEvaluate(id);
+        }catch (Exception e){
+            log.error("[CaseEvaluateService.deleteCaseEvaluate]调用失败,异常信息:"+e, e);
+            throw new ServiceException("CaseEvaluateService.deleteCaseEvaluate", e);
+        }
+    }
+
+    /**
+    * 按条件查询
+    * @param terms 条件
+    * @return List
+    */
+    public List<CaseEvaluate> listTerms(Map<String, Object> terms){
+        return mapper.listTerms(terms);
+    }
+
+    /**
+    * 按条件统计
+    * @param terms 条件
+    * @return long
+    */
+    public long countTerms(Map<String, Object> terms){
+        return mapper.countTerms(terms);
+    }
+
+    /**
+    * 按条件分页查询
+    * @param page 分页对象
+    * @param terms 条件
+    * @return Page
+    */
+    public Page<CaseEvaluate> pageQuery(PageRequest page, Map<String, Object> terms){
+        long total = mapper.countTerms(terms);
+        List<CaseEvaluate> content = mapper.pageTerms(page, terms);
+        return new PageImpl<CaseEvaluate>(content, page, total);
+    }
+
+    /**
+    * 新增或更新对象
+    * @param caseEvaluate 实体对象
+    */
+    public void saveCaseEvaluate(CaseEvaluate caseEvaluate){
+        try{
+            Date nowDate = DateUtils.getNowDate();
+            // 判断是否新增
+            if (IdUtils.checkNewId(caseEvaluate.getId())){
+                caseEvaluate.setId(utilsClient.getNewTimeId());
+                caseEvaluate.setCreateTime(nowDate);
+            }
+            caseEvaluate.setUpdateTime(nowDate);
+            this.saveOrUpdate(caseEvaluate);
+        }catch (Exception e){
+            log.error("[CaseEvaluateService.saveCaseEvaluate]调用失败,异常信息:"+e, e);
+            throw new ServiceException("CaseEvaluateService.saveCaseEvaluate", e);
+        }
+    }
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseFeedbackHisService.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseFeedbackHisService.java
new file mode 100644
index 0000000..d4852d8
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseFeedbackHisService.java
@@ -0,0 +1,133 @@
+package cn.huge.module.cases.service;
+
+import cn.huge.base.common.exception.ServiceException;
+import cn.huge.base.common.utils.DateUtils;
+import cn.huge.base.common.utils.IdUtils;
+import cn.huge.module.client.api.impl.UtilsClientImpl;
+import cn.huge.module.cases.dao.mapper.CaseFeedbackHisMapper;
+import cn.huge.module.cases.domain.po.CaseFeedbackHis;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.PostConstruct;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @title: 纠纷办理反馈信息历史表业务逻辑处理
+ * @Description 纠纷办理反馈信息历史表业务逻辑处理
+ * @company hugeinfo
+ * @author wangwh
+ * @Time 2024-08-31 17:42:41
+ * @version 1.0.0
+ */
+@Slf4j
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class CaseFeedbackHisService extends ServiceImpl<CaseFeedbackHisMapper, CaseFeedbackHis>{
+
+    @Autowired
+    private CaseFeedbackHisMapper mapper;
+
+    @Autowired
+    private UtilsClientImpl utilsClient;
+
+    /**
+    * 更新对象
+    * @param entity 对象
+    */
+    public void updateCaseFeedbackHis(CaseFeedbackHis entity){
+        try{
+            mapper.updateCaseFeedbackHis(entity);
+        }catch (Exception e){
+            log.error("[CaseFeedbackHisService.updateCaseFeedbackHis]调用失败,异常信息:"+e, e);
+            throw new ServiceException("CaseFeedbackHisService.updateCaseFeedbackHis", e);
+        }
+    }
+
+    /**
+    * 条件更新对象
+    * @param entity 对象
+    * @param terms 条件
+    */
+    public void updateCaseFeedbackHisTerms(CaseFeedbackHis entity, Map<String, Object> terms){
+        try{
+            mapper.updateCaseFeedbackHisTerms(entity, terms);
+        }catch (Exception e){
+            log.error("[CaseFeedbackHisService.updateCaseFeedbackHisTerms]调用失败,异常信息:"+e, e);
+            throw new ServiceException("CaseFeedbackHisService.updateCaseFeedbackHisTerms", e);
+        }
+    }
+
+    /**
+    * 根据编号物理删除
+    * @param id 查询条件集合
+    */
+    public void deleteCaseFeedbackHis(String id){
+        try{
+            mapper.deleteCaseFeedbackHis(id);
+        }catch (Exception e){
+            log.error("[CaseFeedbackHisService.deleteCaseFeedbackHis]调用失败,异常信息:"+e, e);
+            throw new ServiceException("CaseFeedbackHisService.deleteCaseFeedbackHis", e);
+        }
+    }
+
+    /**
+    * 按条件查询
+    * @param terms 条件
+    * @return List
+    */
+    public List<CaseFeedbackHis> listTerms(Map<String, Object> terms){
+        return mapper.listTerms(terms);
+    }
+
+    /**
+    * 按条件统计
+    * @param terms 条件
+    * @return long
+    */
+    public long countTerms(Map<String, Object> terms){
+        return mapper.countTerms(terms);
+    }
+
+    /**
+    * 按条件分页查询
+    * @param page 分页对象
+    * @param terms 条件
+    * @return Page
+    */
+    public Page<CaseFeedbackHis> pageQuery(PageRequest page, Map<String, Object> terms){
+        long total = mapper.countTerms(terms);
+        List<CaseFeedbackHis> content = mapper.pageTerms(page, terms);
+        return new PageImpl<CaseFeedbackHis>(content, page, total);
+    }
+
+    /**
+    * 新增或更新对象
+    * @param caseFeedbackHis 实体对象
+    */
+    public void saveCaseFeedbackHis(CaseFeedbackHis caseFeedbackHis){
+        try{
+            Date nowDate = DateUtils.getNowDate();
+            // 判断是否新增
+            if (IdUtils.checkNewId(caseFeedbackHis.getId())){
+                caseFeedbackHis.setId(utilsClient.getNewTimeId());
+                caseFeedbackHis.setCreateTime(nowDate);
+            }
+            caseFeedbackHis.setUpdateTime(nowDate);
+            this.saveOrUpdate(caseFeedbackHis);
+        }catch (Exception e){
+            log.error("[CaseFeedbackHisService.saveCaseFeedbackHis]调用失败,异常信息:"+e, e);
+            throw new ServiceException("CaseFeedbackHisService.saveCaseFeedbackHis", e);
+        }
+    }
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseFeedbackService.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseFeedbackService.java
new file mode 100644
index 0000000..83aed0b
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseFeedbackService.java
@@ -0,0 +1,246 @@
+package cn.huge.module.cases.service;
+
+import cn.huge.base.common.exception.ServiceException;
+import cn.huge.base.common.utils.DateUtils;
+import cn.huge.base.common.utils.IdUtils;
+import cn.huge.module.cases.domain.po.CaseFeedbackHis;
+import cn.huge.module.cases.domain.po.CaseInfoUnfold;
+import cn.huge.module.client.api.impl.CustClientImpl;
+import cn.huge.module.client.api.impl.SysClientImpl;
+import cn.huge.module.client.api.impl.UtilsClientImpl;
+import cn.huge.module.cases.dao.mapper.CaseFeedbackMapper;
+import cn.huge.module.cases.domain.po.CaseFeedback;
+import cn.huge.module.cust.dto.CtUserDTO;
+import cn.huge.module.sys.dto.FileIdInfoBaseDTO;
+import cn.huge.module.sys.dto.FileInfoBaseDTO;
+import cn.huge.module.sys.dto.FileTypeInfoBaseDTO;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.print.DocFlavor;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @title: 纠纷办理反馈j信息表业务逻辑处理
+ * @Description 纠纷办理反馈j信息表业务逻辑处理
+ * @company hugeinfo
+ * @author wangwh
+ * @Time 2024-08-30 17:35:02
+ * @version 1.0.0
+ */
+@Slf4j
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class CaseFeedbackService extends ServiceImpl<CaseFeedbackMapper, CaseFeedback>{
+
+    @Autowired
+    private CaseFeedbackMapper mapper;
+
+    @Autowired
+    private UtilsClientImpl utilsClient;
+
+    @Autowired
+    private CustClientImpl custClient;
+
+    @Autowired
+    private SysClientImpl sysClient;
+
+    @Autowired
+    private CaseFeedbackHisService hisService;
+
+    @Autowired
+    private CaseInfoUnfoldService unfoldService;
+
+    /**
+    * 更新对象
+    * @param entity 对象
+    */
+    public void updatecaseFeedback(CaseFeedback entity){
+        try{
+            mapper.updatecaseFeedback(entity);
+        }catch (Exception e){
+            log.error("[caseFeedbackService.updatecaseFeedback]调用失败,异常信息:"+e, e);
+            throw new ServiceException("caseFeedbackService.updatecaseFeedback", e);
+        }
+    }
+
+    /**
+    * 条件更新对象
+    * @param entity 对象
+    * @param terms 条件
+    */
+    public void updatecaseFeedbackTerms(CaseFeedback entity, Map<String, Object> terms){
+        try{
+            mapper.updatecaseFeedbackTerms(entity, terms);
+        }catch (Exception e){
+            log.error("[caseFeedbackService.updatecaseFeedbackTerms]调用失败,异常信息:"+e, e);
+            throw new ServiceException("caseFeedbackService.updatecaseFeedbackTerms", e);
+        }
+    }
+
+    /**
+    * 根据编号物理删除
+    * @param id 查询条件集合
+    */
+    public void deletecaseFeedback(String id){
+        try{
+            mapper.deletecaseFeedback(id);
+        }catch (Exception e){
+            log.error("[caseFeedbackService.deletecaseFeedback]调用失败,异常信息:"+e, e);
+            throw new ServiceException("caseFeedbackService.deletecaseFeedback", e);
+        }
+    }
+
+    /**
+    * 按条件查询
+    * @param terms 条件
+    * @return List
+    */
+    public List<CaseFeedback> listTerms(Map<String, Object> terms){
+        return mapper.listTerms(terms);
+    }
+
+    /**
+    * 按条件统计
+    * @param terms 条件
+    * @return long
+    */
+    public long countTerms(Map<String, Object> terms){
+        return mapper.countTerms(terms);
+    }
+
+    /**
+    * 按条件分页查询
+    * @param page 分页对象
+    * @param terms 条件
+    * @return Page
+    */
+    public Page<CaseFeedback> pageQuery(PageRequest page, Map<String, Object> terms){
+        long total = mapper.countTerms(terms);
+        List<CaseFeedback> content = mapper.pageTerms(page, terms);
+        return new PageImpl<CaseFeedback>(content, page, total);
+    }
+
+    /**
+    * 新增或更新对象
+    * @param caseFeedback 实体对象
+    */
+    public void savecaseFeedback(CaseFeedback caseFeedback, String userId){
+        try{
+            Date nowDate = DateUtils.getNowDate();
+            // 判断是否新增
+            if (IdUtils.checkNewId(caseFeedback.getId())){
+                caseFeedback.setId(utilsClient.getNewTimeId());
+                caseFeedback.setCreateTime(nowDate);
+            }
+            caseFeedback.setUpdateTime(nowDate);
+            this.saveOrUpdate(caseFeedback);
+        }catch (Exception e){
+            log.error("[caseFeedbackService.savecaseFeedback]调用失败,异常信息:"+e, e);
+            throw new ServiceException("caseFeedbackService.savecaseFeedback", e);
+        }
+    }
+
+    /**
+     * 获取办理反馈信息
+     * @param id 条件
+     * @return Page
+     */
+    public Map<String, Object> listFeedback(String id) {
+        Map<String, Object> result = new HashMap<>();
+
+        QueryWrapper<CaseInfoUnfold> caseInfoUnfoldQueryWrapper = new QueryWrapper<>();
+        caseInfoUnfoldQueryWrapper.eq("case_id", id);
+        CaseInfoUnfold caseInfoUnfold = unfoldService.getOne(caseInfoUnfoldQueryWrapper);
+        result.put("manager", caseInfoUnfold.getMediator());
+        QueryWrapper<CaseFeedback> caseFeedbackQueryWrapper = new QueryWrapper<>();
+        caseFeedbackQueryWrapper.eq("case_id", id);
+        List<CaseFeedback> caseFeedbackList = mapper.selectList(caseFeedbackQueryWrapper);
+
+        String ownerIds = caseFeedbackList.stream().map(CaseFeedback::getId).collect(Collectors.joining("','"));
+        ownerIds = "'"+ ownerIds + "'";
+        Map<String, Object> map = new HashMap<>();
+        map.put("ownerIds", ownerIds);
+        List<FileIdInfoBaseDTO> fileInfoList = sysClient.listIdInfoByOwnerIdList(map, id);
+
+        for(CaseFeedback caseFeedback: caseFeedbackList){
+            for(FileIdInfoBaseDTO fileInfo: fileInfoList){
+                if(caseFeedback.getId().equals(fileInfo.getOwnerId())){
+                    caseFeedback.setFileInfoList(fileInfo.getFileList());
+                }
+            }
+        }
+        result.put("caseFeedbackList", caseFeedbackList);
+        return result;
+    }
+
+    /**
+     * 添加办理反馈
+     * @param caseFeedback 实体对象
+     */
+    public void saveFeedback(CaseFeedback caseFeedback, String userId){
+        try{
+            // 获取当前登录用户
+            CtUserDTO loginUser = custClient.clientGetUserAll(userId);
+            caseFeedback.setHandleUnitId(loginUser.getUnitId());
+            caseFeedback.setHandleUnitName(loginUser.getUnitName());
+            caseFeedback.setHandleUserId(loginUser.getId());
+            caseFeedback.setHandleUserName(loginUser.getTrueName());
+            Date nowDate = DateUtils.getNowDate();
+            caseFeedback.setId(utilsClient.getNewTimeId());
+            caseFeedback.setUpdateTime(nowDate);
+            caseFeedback.setCreateTime(nowDate);
+            //todo 承办、配合--查询task
+
+            this.save(caseFeedback);
+        }catch (Exception e){
+            log.error("[caseFeedbackService.savecaseFeedback]调用失败,异常信息:"+e, e);
+            throw new ServiceException("caseFeedbackService.savecaseFeedback", e);
+        }
+    }
+
+    /**
+     * 添加办理反馈
+     * @param caseFeedback 实体对象
+     */
+    public void updateFeedback(CaseFeedback caseFeedback, String userId){
+        try{
+            Date nowDate = DateUtils.getNowDate();
+            // 获取当前登录用户
+            CtUserDTO loginUser = custClient.clientGetUserAll(userId);
+            CaseFeedbackHis caseFeedbackHis = new CaseFeedbackHis();
+            CaseFeedback caseFeedback1 = mapper.selectById(caseFeedback.getId());
+            BeanUtils.copyProperties(caseFeedback1, caseFeedbackHis);
+            caseFeedbackHis.setId(utilsClient.getNewTimeId());
+            caseFeedbackHis.setFeedbackId(caseFeedback1.getId());
+            caseFeedback.setUpdateTime(nowDate);
+            caseFeedback.setCreateTime(nowDate);
+            hisService.save(caseFeedbackHis);
+
+            caseFeedback.setHandleUnitId(loginUser.getUnitId());
+            caseFeedback.setHandleUnitName(loginUser.getUnitName());
+            caseFeedback.setHandleUserId(loginUser.getId());
+            caseFeedback.setHandleUserName(loginUser.getTrueName());
+            caseFeedback.setId(utilsClient.getNewTimeId());
+            caseFeedback.setUpdateTime(nowDate);
+            //todo 承办、配合--查询task
+
+            mapper.updateById(caseFeedback);
+        }catch (Exception e){
+            log.error("[caseFeedbackService.updateFeedback]调用失败,异常信息:"+e, e);
+            throw new ServiceException("caseFeedbackService.updateFeedback", e);
+        }
+    }
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java
index 621c9a7..381b422 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java
@@ -3,11 +3,16 @@
 import cn.huge.base.common.exception.ServiceException;
 import cn.huge.base.common.utils.DateUtils;
 import cn.huge.base.common.utils.IdUtils;
+
+import cn.huge.base.common.utils.ObjectUtils;
+import cn.huge.module.cases.domain.dto.CaseInfoDTO;
 import cn.huge.module.cases.domain.dto.RegisterSaveDTO;
 import cn.huge.module.cases.domain.po.CaseAgent;
 import cn.huge.module.cases.domain.po.CaseInfoUnfold;
 import cn.huge.module.cases.domain.po.CasePerson;
+import cn.huge.module.client.api.SysClient;
 import cn.huge.module.client.api.impl.CustClientImpl;
+import cn.huge.module.client.api.impl.SysClientImpl;
 import cn.huge.module.client.api.impl.UtilsClientImpl;
 import cn.huge.module.cases.dao.mapper.CaseInfoMapper;
 import cn.huge.module.cases.domain.po.CaseInfo;
@@ -16,8 +21,12 @@
 import cn.huge.module.mediate.constant.CaseBaseConstsEnum;
 import cn.huge.module.cust.dto.CtUserDTO;
 import cn.huge.module.draft.service.CasedraftInfoService;
+import cn.huge.module.mediate.dto.WechatBindCaseDTO;
+import cn.huge.module.sys.dto.FileIdTypeInfoBaseDTO;
+import cn.huge.module.sys.dto.FileTypeInfoBaseDTO;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Maps;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -29,10 +38,8 @@
 import org.springframework.data.domain.PageRequest;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @title: 纠纷信息主表业务逻辑处理
@@ -64,6 +71,12 @@
 
     @Autowired
     private CustClientImpl custClient;
+
+    @Autowired
+    private CaseInfoUnfoldService caseInfoUnfoldService;
+
+    @Autowired
+    private SysClientImpl sysClient;
 
     /**
     * 更新对象
@@ -171,48 +184,52 @@
             StringBuffer defendants = new StringBuffer();
             StringBuffer pagents = new StringBuffer();
             StringBuffer dagents = new StringBuffer();
-            int peopleNum = 0;
-
+            //复制填装案件表
             CaseInfo caseInfo = new CaseInfo();
-            CaseInfoUnfold caseInfoUnfold = new CaseInfoUnfold();
             BeanUtils.copyProperties(registerSaveDTO, caseInfo);
-            caseInfo.setId(utilsClient.getNewTimeId());
-            caseInfo.setInputUnitId(loginUser.getUnitId());
-            caseInfo.setInputUnitName(loginUser.getUnitName());
-            caseInfo.setInputUserId(loginUser.getId());
-            caseInfo.setInputUserName(loginUser.getTrueName());
-            caseInfo.setInputWay(CaseBaseConsts.INPUT_WAY_1);
-            caseInfo.setCreateTime(nowDate);
             caseInfo.setUpdateTime(nowDate);
-            caseInfo.setDeleteStatus(BaseConsts.DELETE_STATUS_0);
-            //todo case_ref生成、case_title生成
-
-            caseInfoUnfold.setId(utilsClient.getNewTimeId());
-            caseInfoUnfold.setCaseId(caseInfo.getId());
-            caseInfoUnfold.setCreateTime(nowDate);
-            caseInfoUnfold.setUpdateTime(nowDate);
-
 
             // 常规登记-保存当事人
-            peopleNum += this.saveCasePerson(registerSaveDTO, plaintiffs, pagents, defendants, dagents);
-            caseInfo.setPeopleNum(peopleNum);
+            this.saveCasePerson(registerSaveDTO, plaintiffs, pagents, defendants, dagents);
             caseInfo.setPlaintiffs(plaintiffs.toString());
             caseInfo.setPagents(pagents.toString());
             caseInfo.setDefendants(defendants.toString());
             caseInfo.setDagents(dagents.toString());
-            //todo 流程接口修改status、status_name、process、process_name
-            //todo 自行受理
-            if(1 == registerSaveDTO.getIsSelfAccept()){
-                caseInfoUnfold.setMediateUnitId(loginUser.getUnitId());
-                caseInfoUnfold.setMediateUnitName(loginUser.getUnitName());
-            }
+            caseInfo.setCaseRef(utilsClient.createCaseRef());
+            caseInfo.setCanal(CaseBaseConstsEnum.CASE_CANAL_1.getIndex());
+            caseInfo.setCaseDes(CaseBaseConstsEnum.CASE_CANAL_1.getDes());
+            //todo case_title生成、经纬度转换、来访形式
+            if(0 == registerSaveDTO.getOperateType()){
+                caseInfo.setInputUnitId(loginUser.getUnitId());
+                caseInfo.setInputUnitName(loginUser.getUnitName());
+                caseInfo.setInputUserId(loginUser.getId());
+                caseInfo.setInputUserName(loginUser.getTrueName());
+                caseInfo.setInputWay(CaseBaseConsts.INPUT_WAY_1);
+                caseInfo.setCreateTime(nowDate);
+                caseInfo.setDeleteStatus(BaseConsts.DELETE_STATUS_0);
 
-            this.saveOrUpdate(caseInfo);
-            // 删除草稿案件
-            if(1 == registerSaveDTO.getIsDraft() ){
-                draftInfoService.removeDraftInfo(registerSaveDTO.getId());
-            }
+                CaseInfoUnfold caseInfoUnfold = new CaseInfoUnfold();
+                caseInfoUnfold.setId(utilsClient.getNewTimeId());
+                caseInfoUnfold.setCaseId(caseInfo.getId());
+                caseInfoUnfold.setCreateTime(nowDate);
+                caseInfoUnfold.setUpdateTime(nowDate);
 
+                // 删除草稿案件
+                if(1 == registerSaveDTO.getIsDraft() ){
+                    draftInfoService.removeDraftInfo(registerSaveDTO.getId());
+                }
+
+                //判断是否自行受理
+                if(1 == registerSaveDTO.getIsSelfAccept()){
+                    //todo 流程接口修改status、status_name、process、process_name
+                    caseInfoUnfold.setMediateUnitId(loginUser.getUnitId());
+                    caseInfoUnfold.setMediateUnitName(loginUser.getUnitName());
+                }
+                this.save(caseInfo);
+                caseInfoUnfoldService.save(caseInfoUnfold);
+            }else if(1 == registerSaveDTO.getOperateType()){
+                this.updateById(caseInfo);
+            }
             return registerSaveDTO.getId();
         }catch (Exception e){
             log.error("service方法[CaseInfoService.caseRegister]调用异常:"+e, e);
@@ -229,104 +246,94 @@
      * @param dagents 被申请人代理人
      * @return int
      */
-    private int saveCasePerson(RegisterSaveDTO registerSaveDTO, StringBuffer plaintiffs, StringBuffer pagents,
+    private void saveCasePerson(RegisterSaveDTO registerSaveDTO, StringBuffer plaintiffs, StringBuffer pagents,
                                StringBuffer defendants, StringBuffer dagents){
-        int peopleNum = 0;
+
+        Date now = DateUtils.getNowDate();
+
+        List<CasePerson> personList = registerSaveDTO.getPersonList();
+        List<CaseAgent> agentList = registerSaveDTO.getAgentList();
+
+        //查出已存在的当事人和代理人编号
+        List<String> oldPersonIdList = personService.listIdByCaseId(registerSaveDTO.getId());
+        List<String> oldAgentIdList = agentService.listIdByCaseId(registerSaveDTO.getId());
+        String oldPersonIds = oldPersonIdList.stream().map(String::valueOf).collect(Collectors.joining(","));
+        String oldAgentIds = oldAgentIdList.stream().map(String::valueOf).collect(Collectors.joining(","));
         List<String> newPersonIdList = new ArrayList<>();
         List<String> newAgentIdList = new ArrayList<>();
-        // 保存申请人
-        List<CasePerson> plaintPersonList = registerSaveDTO.getPlaintiffList();
-        if (CollectionUtils.isNotEmpty(plaintPersonList)) {
-            for (CasePerson casePerson : plaintPersonList) {
+
+        if(CollectionUtils.isNotEmpty(personList)){
+            for(CasePerson casePerson: personList){
                 newPersonIdList.add(casePerson.getId());
                 casePerson.setCaseId(registerSaveDTO.getId());
-                casePerson.setPerType(CaseBaseConstsEnum.PERSON_TYPE_1.getIndex());
-                casePerson.setPerTypeName(CaseBaseConstsEnum.PERSON_TYPE_1.getDes());
                 casePerson.setCustId(registerSaveDTO.getCustId());
-                casePerson.setCreateTime(registerSaveDTO.getUpdateTime());
-                casePerson.setUpdateTime(registerSaveDTO.getUpdateTime());
-                //todo 绑定当事人小程序
-
-                personService.saveOrUpdate(casePerson);
-
-                if (StringUtils.isNotEmpty(plaintiffs.toString())) {
-                    plaintiffs.append(BaseConsts.COMMA);
+                casePerson.setUpdateTime(now);
+                //绑定当事人小程序
+                this.setPartyUserId(casePerson);
+                //添加申请方和被申请方人名组合
+                if(CaseBaseConstsEnum.PERSON_TYPE_1.equals(casePerson.getPerType())){
+                    //申请方
+                    if (StringUtils.isNotEmpty(plaintiffs.toString())) {
+                        plaintiffs.append(BaseConsts.COMMA);
+                    }
+                    plaintiffs.append(casePerson.getTrueName());
+                }else if(CaseBaseConstsEnum.PERSON_TYPE_2.equals(casePerson.getPerType())){
+                    //被申请方
+                    if (StringUtils.isNotEmpty(defendants.toString())) {
+                        defendants.append(BaseConsts.COMMA);
+                    }
+                    defendants.append(casePerson.getTrueName());
                 }
-                plaintiffs.append(casePerson.getTrueName());
-                peopleNum++;
+
+                //判断是否为更新(用原有的Id对比性的Id)
+                if(oldPersonIds.contains(casePerson.getId())){
+                    personService.updateById(casePerson);
+                }else{
+                    casePerson.setCreateTime(now);
+                    personService.save(casePerson);
+                }
 
             }
-            //保存代理人
-            List<CaseAgent> pagentList = registerSaveDTO.getPagentList();
-            if (CollectionUtils.isNotEmpty(pagentList)) {
-                for(CaseAgent caseAgent: pagentList){
-                    newAgentIdList.add(caseAgent.getId());
-                    caseAgent.setId(utilsClient.getNewTimeId());
-                    caseAgent.setCaseId(registerSaveDTO.getId());
-                    caseAgent.setAgentTypeName(CaseBaseConstsEnum.getDes(caseAgent.getAgentType()));
+        }
 
-                    caseAgent.setCustId(registerSaveDTO.getCustId());
-                    caseAgent.setCreateTime(registerSaveDTO.getUpdateTime());
-                    caseAgent.setUpdateTime(registerSaveDTO.getUpdateTime());
-
-                    agentService.saveOrUpdate(caseAgent);
-
+        if(CollectionUtils.isNotEmpty(agentList)) {
+            for (CaseAgent caseAgent : agentList) {
+                newAgentIdList.add(caseAgent.getId());
+                caseAgent.setCaseId(registerSaveDTO.getId());
+                caseAgent.setAgentTypeName(CaseBaseConstsEnum.getDes(caseAgent.getAgentType()));
+                caseAgent.setCustId(registerSaveDTO.getCustId());
+                caseAgent.setUpdateTime(now);
+                //绑定当事人小程序
+                this.setPartyUserId(caseAgent);
+                if(CaseBaseConstsEnum.PERSON_TYPE_3.equals(caseAgent.getPerType())) {
                     if (StringUtils.isNotEmpty(pagents.toString())) {
                         pagents.append(BaseConsts.COMMA);
                     }
                     pagents.append(caseAgent.getTrueName());
-                }
-
-                //todo 绑定当事人小程序
-            }
-        }
-        // 保存被申请人
-        List<CasePerson> defendPersonList = registerSaveDTO.getDefendantList();
-        if(CollectionUtils.isNotEmpty(defendPersonList)){
-            for (CasePerson casePerson : defendPersonList) {
-                newPersonIdList.add(casePerson.getId());
-                casePerson.setCaseId(registerSaveDTO.getId());
-                casePerson.setPerType(CaseBaseConstsEnum.PERSON_TYPE_2.getIndex());
-                casePerson.setPerTypeName(CaseBaseConstsEnum.PERSON_TYPE_2.getDes());
-                casePerson.setCustId(registerSaveDTO.getCustId());
-                casePerson.setCreateTime(registerSaveDTO.getUpdateTime());
-                casePerson.setUpdateTime(registerSaveDTO.getUpdateTime());
-                //todo 绑定当事人小程序
-                personService.saveOrUpdate(casePerson);
-                if (StringUtils.isNotEmpty(defendants.toString())) {
-                    defendants.append(BaseConsts.COMMA);
-                }
-                defendants.append(casePerson.getTrueName());
-                peopleNum++;
-            }
-            //保存代理人
-            List<CaseAgent> pagentList = registerSaveDTO.getPagentList();
-            if (CollectionUtils.isNotEmpty(pagentList)) {
-                for(CaseAgent caseAgent: pagentList){
-                    newAgentIdList.add(caseAgent.getId());
-                    caseAgent.setId(utilsClient.getNewTimeId());
-                    caseAgent.setCaseId(registerSaveDTO.getId());
-                    caseAgent.setAgentTypeName(CaseBaseConstsEnum.getDes(caseAgent.getAgentType()));
-                    caseAgent.setCustId(registerSaveDTO.getCustId());
-                    caseAgent.setCreateTime(registerSaveDTO.getUpdateTime());
-                    caseAgent.setUpdateTime(registerSaveDTO.getUpdateTime());
-                    agentService.saveOrUpdate(caseAgent);
+                }else if(CaseBaseConstsEnum.PERSON_TYPE_4.equals(caseAgent.getPerType())) {
                     if (StringUtils.isNotEmpty(dagents.toString())) {
                         dagents.append(BaseConsts.COMMA);
                     }
                     dagents.append(caseAgent.getTrueName());
-                    //todo 绑定当事人小程序
+                }
+
+                //判断是否为更新(用原有的Id对比性的Id)
+                if(oldAgentIds.contains(caseAgent.getId())){
+                    agentService.updateById(caseAgent);
+                }else{
+                    caseAgent.setCreateTime(now);
+                    agentService.save(caseAgent);
                 }
             }
-
         }
 
-        // 删除冗余的申请人
+        // 删除冗余的申请人(用新的Id对比旧的Id)
         if (CollectionUtils.isNotEmpty(newPersonIdList)) {
-            List<String> oldPersonIdList = personService.listIdByCaseId(registerSaveDTO.getId());
             for (String oldPersonId : oldPersonIdList) {
                 if (!newPersonIdList.contains(oldPersonId)) {
                     personService.removeById(oldPersonId);
+                }else{
+
                 }
             }
         }else{
@@ -336,7 +343,6 @@
         }
         //删除冗余的代理人
         if(CollectionUtils.isNotEmpty(newAgentIdList)){
-            List<String> oldAgentIdList = agentService.listIdByCaseId(registerSaveDTO.getId());
             for(String oldAgentId: oldAgentIdList){
                 if(!newAgentIdList.contains(oldAgentId)){
                     agentService.removeById(oldAgentId);
@@ -347,7 +353,104 @@
             caseAgentQueryWrapper.eq("case_id", registerSaveDTO.getId());
             agentService.remove(caseAgentQueryWrapper);
         }
+    }
 
-        return peopleNum;
+    /**
+     * PC端-查询纠纷信息
+     * @param caseId 纠纷编号
+     * @return CaseInfo 纠纷信息
+     */
+    public CaseInfoDTO getCaseInfo(String caseId){
+        CaseInfo caseInfo = mapper.selectById(caseId);
+        CaseInfoDTO caseInfoDTO = new CaseInfoDTO();
+        if (ObjectUtils.isNotEmpty(caseInfo)) {
+
+            BeanUtils.copyProperties(caseInfo, caseInfoDTO);
+            //查询所有当事人
+            QueryWrapper<CasePerson> personQueryWrapper = new QueryWrapper<>();
+            personQueryWrapper.eq("case_id", caseId);
+            List<CasePerson> casePersonList = personService.list(personQueryWrapper);
+
+            //查询所有代理人
+            QueryWrapper<CaseAgent> caseAgentQueryWrapper = new QueryWrapper<>();
+            caseAgentQueryWrapper.eq("case_id", caseId);
+            List<CaseAgent> caseAgentList = agentService.list(caseAgentQueryWrapper);
+            List<String> idList = new ArrayList<>();
+
+            idList.add(caseId);
+            idList.addAll(casePersonList.stream().map(CasePerson::getId).collect(Collectors.toList()));
+            idList.addAll(caseAgentList.stream().map(CaseAgent::getId).collect(Collectors.toList()));
+            String ids = idList.stream().map(String::valueOf).collect(Collectors.joining("','"));
+            ids = "'"+ ids + "'";
+            Map<String, Object> term = new HashMap<>();
+            term.put("ownerIds", ids);
+            //查询所有附件
+            List<FileIdTypeInfoBaseDTO> fileInfoList = sysClient.listIdTypeInfoByOwnerIdList(term, caseId);
+            for(FileIdTypeInfoBaseDTO fileInfo: fileInfoList){
+                if(caseId.equals(fileInfo.getOwnerId())){
+                    caseInfoDTO.setFileInfoList(fileInfo.getFileList());
+                }
+            }
+            for(CasePerson casePerson: casePersonList){
+                //把附件根据编号放入
+                for(FileIdTypeInfoBaseDTO fileInfo: fileInfoList){
+                    if(casePerson.getId().equals(fileInfo.getOwnerId())){
+                        casePerson.setFileInfoList(fileInfo.getFileList());
+                    }
+                }
+            }
+            for(CaseAgent caseAgent: caseAgentList){
+                for(FileIdTypeInfoBaseDTO fileInfo: fileInfoList){
+                    if(caseAgent.getId().equals(fileInfo.getOwnerId())){
+                        caseAgent.setFileInfoList(fileInfo.getFileList());
+                    }
+                }
+            }
+            caseInfoDTO.setPersonList(casePersonList);
+            caseInfoDTO.setAgentList(caseAgentList);
+        }
+        return caseInfoDTO;
+    }
+
+    /**
+     * 绑定当事人小程序
+     * @param casePerson 当事人信息
+     */
+    public void setPartyUserId(CasePerson casePerson) {
+        if (StringUtils.isEmpty(casePerson.getPartyUserId())) {
+            if (CaseBaseConstsEnum.CARD_TYPE_1.getIndex().equals(casePerson.getCertiType())) {
+                if (StringUtils.isNotEmpty(casePerson.getCertiNo())) {
+                    WechatBindCaseDTO wechatBindCaseDTO = new WechatBindCaseDTO();
+                    if (CaseBaseConstsEnum.PERSON_CLASS_1.getIndex().equals(casePerson.getPerClass())) {
+                        wechatBindCaseDTO.setTrueName(casePerson.getTrueName());
+                    } else {
+                        wechatBindCaseDTO.setTrueName(casePerson.getDeputy());
+                    }
+                    wechatBindCaseDTO.setIdcard(casePerson.getCertiNo());
+                    wechatBindCaseDTO.setCustId(casePerson.getCustId());
+                    String partyUserId = custClient.bindGetUserId(wechatBindCaseDTO);
+                    casePerson.setPartyUserId(partyUserId);
+                }
+            }
+        }
+    }
+
+    /**
+     * 绑定当事人小程序
+     * @param caseAgent 代理人人信息
+     */
+    public void setPartyUserId(CaseAgent caseAgent){
+        if (StringUtils.isEmpty(caseAgent.getPartyUserId())) {
+            if (CaseBaseConstsEnum.CARD_TYPE_1.getIndex().equals(caseAgent.getCertiType())) {
+                if (StringUtils.isNotEmpty(caseAgent.getCertiNo())) {
+                    WechatBindCaseDTO wechatBindCaseDTO = new WechatBindCaseDTO();
+                    wechatBindCaseDTO.setTrueName(caseAgent.getTrueName());
+                    wechatBindCaseDTO.setIdcard(caseAgent.getCertiNo());
+                    wechatBindCaseDTO.setCustId(caseAgent.getCustId());
+                    String partyUserId = custClient.bindGetUserId(wechatBindCaseDTO);
+                    caseAgent.setPartyUserId(partyUserId);
+                }
+            }
+        }
     }
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoUnfoldService.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoUnfoldService.java
index abde617..bccd552 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoUnfoldService.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoUnfoldService.java
@@ -3,9 +3,13 @@
 import cn.huge.base.common.exception.ServiceException;
 import cn.huge.base.common.utils.DateUtils;
 import cn.huge.base.common.utils.IdUtils;
+import cn.huge.module.cases.domain.po.CaseInfo;
+import cn.huge.module.client.api.impl.CustClientImpl;
 import cn.huge.module.client.api.impl.UtilsClientImpl;
 import cn.huge.module.cases.dao.mapper.CaseInfoUnfoldMapper;
 import cn.huge.module.cases.domain.po.CaseInfoUnfold;
+import cn.huge.module.cust.dto.CtUserDTO;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -18,6 +22,7 @@
 
 import javax.annotation.PostConstruct;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -39,6 +44,9 @@
 
     @Autowired
     private UtilsClientImpl utilsClient;
+
+    @Autowired
+    private CustClientImpl custClient;
 
     /**
     * 更新对象
@@ -130,4 +138,25 @@
         }
     }
 
+    /**
+     * PC端-选择经办人
+     * @param caseId 对象
+     * @param userId 条件
+     */
+    public void choosePrincipal(String caseId, String userId){
+        try{
+            // 获取当前登录用户
+            CtUserDTO loginUser = custClient.clientGetUserAll(userId);
+            CaseInfoUnfold CaseInfoUnfold = new CaseInfoUnfold();
+            CaseInfoUnfold.setMediatorId(loginUser.getId());
+            CaseInfoUnfold.setMediator(loginUser.getTrueName());
+            CaseInfoUnfold.setMediatorMobile(loginUser.getMobile());
+            Map<String, Object> terms = new HashMap<>();
+            terms.put("case_id", caseId);
+            mapper.updateCaseInfoUnfoldTerms(CaseInfoUnfold, terms);
+        }catch (Exception e){
+            log.error("[CaseInfoUnfoldService.choosePrincipal]调用失败,异常信息:"+e, e);
+            throw new ServiceException("CaseInfoUnfoldService.choosePrincipal", e);
+        }
+    }
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CasePersonService.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CasePersonService.java
index 6d2ac85..9f99be6 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CasePersonService.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CasePersonService.java
@@ -3,9 +3,12 @@
 import cn.huge.base.common.exception.ServiceException;
 import cn.huge.base.common.utils.DateUtils;
 import cn.huge.base.common.utils.IdUtils;
+import cn.huge.base.common.utils.ObjectUtils;
+import cn.huge.module.cases.domain.po.CaseAgent;
 import cn.huge.module.client.api.impl.UtilsClientImpl;
 import cn.huge.module.cases.dao.mapper.CasePersonMapper;
 import cn.huge.module.cases.domain.po.CasePerson;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseSuperviseService.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseSuperviseService.java
new file mode 100644
index 0000000..5bd8845
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseSuperviseService.java
@@ -0,0 +1,221 @@
+package cn.huge.module.cases.service;
+
+import cn.huge.base.common.exception.ServiceException;
+import cn.huge.base.common.utils.DateUtils;
+import cn.huge.base.common.utils.IdUtils;
+import cn.huge.module.client.api.impl.CustClientImpl;
+import cn.huge.module.client.api.impl.SysClientImpl;
+import cn.huge.module.client.api.impl.UtilsClientImpl;
+import cn.huge.module.cases.dao.mapper.CaseSuperviseMapper;
+import cn.huge.module.cases.domain.po.CaseSupervise;
+import cn.huge.module.cust.dto.CtUserDTO;
+import cn.huge.module.sys.constant.FileOwnerTypeBaseEnum;
+import cn.huge.module.sys.constant.SyTimeEnum;
+import cn.huge.module.sys.dto.FileIdTypeInfoBaseDTO;
+import cn.huge.module.sys.dto.FileInfoBaseDTO;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.PostConstruct;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @title: 纠纷督办信息表业务逻辑处理
+ * @Description 纠纷督办信息表业务逻辑处理
+ * @company hugeinfo
+ * @author wangwh
+ * @Time 2024-09-03 10:53:01
+ * @version 1.0.0
+ */
+@Slf4j
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class CaseSuperviseService extends ServiceImpl<CaseSuperviseMapper, CaseSupervise>{
+
+    @Autowired
+    private CaseSuperviseMapper mapper;
+
+    @Autowired
+    private UtilsClientImpl utilsClient;
+
+    @Autowired
+    private CustClientImpl custClient;
+
+    @Autowired
+    private SysClientImpl sysClient;
+
+    /**
+    * 条件更新对象
+    * @param entity 对象
+    * @param terms 条件
+    */
+    public void updateCaseSuperviseTerms(CaseSupervise entity, Map<String, Object> terms){
+        try{
+            mapper.updateCaseSuperviseTerms(entity, terms);
+        }catch (Exception e){
+            log.error("[CaseSuperviseService.updateCaseSuperviseTerms]调用失败,异常信息:"+e, e);
+            throw new ServiceException("CaseSuperviseService.updateCaseSuperviseTerms", e);
+        }
+    }
+
+    /**
+    * 根据编号物理删除
+    * @param id 查询条件集合
+    */
+    public void deleteCaseSupervise(String id){
+        try{
+            mapper.deleteCaseSupervise(id);
+        }catch (Exception e){
+            log.error("[CaseSuperviseService.deleteCaseSupervise]调用失败,异常信息:"+e, e);
+            throw new ServiceException("CaseSuperviseService.deleteCaseSupervise", e);
+        }
+    }
+
+    /**
+    * 按条件查询
+    * @param terms 条件
+    * @return List
+    */
+    public List<CaseSupervise> listTerms(Map<String, Object> terms){
+        return mapper.listTerms(terms);
+    }
+
+    /**
+    * 按条件统计
+    * @param terms 条件
+    * @return long
+    */
+    public long countTerms(Map<String, Object> terms){
+        return mapper.countTerms(terms);
+    }
+
+    /**
+    * 按条件分页查询
+    * @param page 分页对象
+    * @param terms 条件
+    * @return Page
+    */
+    public Page<CaseSupervise> pageQuery(PageRequest page, Map<String, Object> terms){
+        long total = mapper.countTerms(terms);
+        List<CaseSupervise> content = mapper.pageTerms(page, terms);
+        return new PageImpl<CaseSupervise>(content, page, total);
+    }
+
+    /**
+    * 新增或更新对象
+    * @param caseSupervise 实体对象
+    */
+    public void saveCaseSupervise(CaseSupervise caseSupervise){
+        try{
+            Date nowDate = DateUtils.getNowDate();
+            // 判断是否新增
+            if (IdUtils.checkNewId(caseSupervise.getId())){
+                caseSupervise.setId(utilsClient.getNewTimeId());
+                caseSupervise.setCreateTime(nowDate);
+            }
+            caseSupervise.setUpdateTime(nowDate);
+            this.saveOrUpdate(caseSupervise);
+        }catch (Exception e){
+            log.error("[CaseSuperviseService.saveCaseSupervise]调用失败,异常信息:"+e, e);
+            throw new ServiceException("CaseSuperviseService.saveCaseSupervise", e);
+        }
+    }
+
+    /**
+     * 添加督办
+     * @param caseSupervise 实体对象
+     * @param userId 用户信息编号
+     */
+    public void addCaseSupervise(CaseSupervise caseSupervise, String userId){
+        try{
+            // 获取当前登录用户
+            CtUserDTO loginUser = custClient.clientGetUserAll(userId);
+            Date nowDate = DateUtils.getNowDate();
+            caseSupervise.setSupUserId(loginUser.getId());
+            caseSupervise.setSupUserName(loginUser.getTrueName());
+            caseSupervise.setSupTime(nowDate);
+            caseSupervise.setSupStatus(0);
+            caseSupervise.setCreateTime(nowDate);
+            caseSupervise.setUpdateTime(nowDate);
+            //todo 配置时限
+            Integer timeTerm = sysClient.getTimeLimit("dyh_case_supervise", SyTimeEnum.SY_TIME_03.getIndex());
+            caseSupervise.setReplyTerm(timeTerm);
+            this.save(caseSupervise);
+        }catch (Exception e){
+            log.error("[CaseSuperviseService.saveCaseSupervise]调用失败,异常信息:"+e, e);
+            throw new ServiceException("CaseSuperviseService.saveCaseSupervise", e);
+        }
+    }
+
+    /**
+     * 回复督办
+     * @param caseSupervise 对象
+     */
+    public void replyCaseSupervise(CaseSupervise caseSupervise, String userId){
+        try{
+            // 获取当前登录用户
+            CtUserDTO loginUser = custClient.clientGetUserAll(userId);
+            Date now = DateUtils.getNowDate();
+            caseSupervise.setSupStatus(1);
+            caseSupervise.setReplyUserId(loginUser.getId());
+            caseSupervise.setReplyUserName(loginUser.getTrueName());
+            caseSupervise.setReplyTime(String.valueOf(now));
+            caseSupervise.setUpdateTime(now);
+            mapper.updateCaseSupervise(caseSupervise);
+        }catch (Exception e){
+            log.error("[CaseSuperviseService.replyCaseSupervise]调用失败,异常信息:"+e, e);
+            throw new ServiceException("CaseSuperviseService.replyCaseSupervise", e);
+        }
+    }
+
+    /**
+     * 流转办理-督办列表
+     * @param caseId 事项Id
+     */
+    public Map<String, Object> listCaseSupervise(String caseId){
+        try{
+            List<CaseSupervise> repliedList = new ArrayList<>();
+            List<CaseSupervise> noReplyList = new ArrayList<>();
+            QueryWrapper<CaseSupervise> caseSuperviseQueryWrapper = new QueryWrapper<>();
+            caseSuperviseQueryWrapper.eq("case_id", caseId);
+            List<CaseSupervise> caseSuperviseList = mapper.selectList(caseSuperviseQueryWrapper);
+
+            Map<String, Object>map = new HashMap<>();
+            map.put("ownerIds", caseSuperviseList.stream().map(CaseSupervise::getId).collect(Collectors.joining("','")));
+            map.put("types", FileOwnerTypeBaseEnum.OWNER_TYPE_506.getIndex());
+            List<FileIdTypeInfoBaseDTO> fileIdTypeInfoBaseDTOList = sysClient.listIdTypeInfoByOwnerIdList(map, caseId);
+            for(CaseSupervise caseSupervise: caseSuperviseList){
+                for(FileIdTypeInfoBaseDTO fileIdTypeInfoBaseDTO: fileIdTypeInfoBaseDTOList){
+                    if(caseSupervise.getId().equals(fileIdTypeInfoBaseDTO.getOwnerId())){
+                        caseSupervise.setFileInfoList(fileIdTypeInfoBaseDTO.getFileList());
+                    }
+                }
+                if(0 == caseSupervise.getSupStatus()){
+                    noReplyList.add(caseSupervise);
+                }else if(1 == caseSupervise.getSupStatus()){
+                    repliedList.add(caseSupervise);
+                }
+            }
+            int count = noReplyList.size();
+            Map<String, Object> result = new HashMap<>();
+            result.put("count", count);
+            result.put("noReplyList", noReplyList);
+            result.put("repliedList", repliedList);
+            return result;
+        }catch (Exception e){
+            log.error("[CaseSuperviseService.listCaseSupervise]调用失败,异常信息:"+e, e);
+            throw new ServiceException("CaseSuperviseService.listCaseSupervise", e);
+        }
+    }
+
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/CustClient.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/CustClient.java
index e3380e9..04fbe98 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/CustClient.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/CustClient.java
@@ -1,8 +1,11 @@
 package cn.huge.module.client.api;
 
 import cn.huge.base.common.bo.ReturnBO;
+import cn.huge.module.mediate.dto.WechatBindCaseDTO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
 /**
@@ -43,4 +46,13 @@
     @GetMapping("/api/client/paUser/clientGetUserAll")
     ReturnBO paclientGetUser(@RequestParam("userId") String userId);
 
+    /**
+     * pc端提交案件后-获取相关当事人用户编号
+     * @url {ctx}/api/weChat/paUser/bindGetUserId
+     * @param wechatBindCaseDTO 实体对象
+     * @return ReturnBO
+     */
+    @PostMapping("/api/wechat/paUser/bindGetUserId")
+    ReturnBO bindGetUserId(@RequestBody WechatBindCaseDTO wechatBindCaseDTO);
+
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/SysClient.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/SysClient.java
index 748a91d..535beed 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/SysClient.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/SysClient.java
@@ -1,10 +1,12 @@
 package cn.huge.module.client.api;
 
 import cn.huge.base.common.bo.ReturnBO;
+import cn.huge.module.sys.dto.FileTypeTermsDTO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @title: 系统公共服务微服务调用接口
@@ -19,18 +21,37 @@
     /**
      * 附件中心-根据多个所属编号查询附件并根据先根据ownerId再根据附件类型分组
      * @url {ctx}/api/v1/fileInfo/listTypeInfoByOwnerIds?ownerIds=
-     * @param ownerIdList 所属业务编号
+     * @param term 所属业务编号
      * @return ReturnBO
      */
-    @GetMapping("/api/client/fileInfo/listIdTypeInfoByOwnerIdList")
-    ReturnBO listTypeInfoByOwnerIdList(@RequestParam(value = "ownerIdList") List<String> ownerIdList);
+    @PostMapping("/api/client/fileInfo/listIdTypeInfoByOwnerIdList")
+    ReturnBO listTypeInfoByOwnerIdList(@RequestBody Map<String, Object> term, @RequestParam(value = "mainId") String mainId);
 
     /**
      * 附件中心-根据多个所属编号查询附件
      * @url {ctx}/api/v1/fileInfo/listInfoByOwnerIdList?ownerIds=
-     * @param ownerIdList 所属业务编号
+     * @param term 所属业务编号
      * @return ReturnBO
      */
-    @GetMapping("/api/client/fileInfo/listInfoByOwnerIdList")
-    ReturnBO listInfoByOwnerIdList(@RequestParam(value = "ownerIdList") List<String> ownerIdList);
+    @PostMapping("/api/client/fileInfo/listInfoByOwnerIdList")
+    ReturnBO listInfoByOwnerIdList(@RequestBody Map<String, Object> term, @RequestParam(value = "mainId") String mainId);
+
+    /**
+     * 附件中心-根据多个所属编号查询附件
+     * @url {ctx}/api/v1/fileInfo/listInfoByOwnerIdList?ownerIds=
+     * @param limitTable 表名
+     * @param limitType 时限类型
+     * @return ReturnBO
+     */
+    @GetMapping("/api/client/syTimeLimit/getTimeLimit")
+    ReturnBO getTimeLimit(@RequestParam String limitTable, @RequestParam(value = "limitType") String limitType);
+
+    /**
+     * 根据条件删除附件关系
+     * @url {ctx}/api/v1/fileRelate/removeFileRelate
+     * @param fileTypeTermsDTO 条件
+     * @return Object
+     */
+    @PostMapping("/api/client/fileRelate/removeFileRelate")
+    ReturnBO removeFileRelate(@RequestBody FileTypeTermsDTO fileTypeTermsDTO);
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/impl/CustClientImpl.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/impl/CustClientImpl.java
index c46758a..da1fda0 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/impl/CustClientImpl.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/impl/CustClientImpl.java
@@ -8,6 +8,7 @@
 import cn.huge.module.client.api.CustClient;
 import cn.huge.module.cust.dto.CtUserDTO;
 import cn.huge.module.cust.dto.PaUserDTO;
+import cn.huge.module.mediate.dto.WechatBindCaseDTO;
 import com.alibaba.fastjson.JSON;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
@@ -106,4 +107,23 @@
         }
     }
 
+    /**
+     * pc端提交案件后-获取相关当事人用户编号
+     * @param wechatBindCaseDTO 实体对象
+     * @return ReturnBO
+     */
+    public String bindGetUserId(WechatBindCaseDTO wechatBindCaseDTO){
+        String userId = null;
+        try{
+            ReturnBO returnBo = custClient.bindGetUserId(wechatBindCaseDTO);
+            if (ReturnConsts.OK == returnBo.getCode()){
+                userId = (String) returnBo.getData();
+            }else{
+                log.error("Client外服务接口[CustClientImpl.bindGetUserId]请求异常:" + returnBo.getMsg(), returnBo.getMsg());
+            }
+        }catch (Exception e){
+            log.error("service方法[CustClientImpl.bindGetUserId]调用异常:"+e, e);
+        }
+        return userId;
+    }
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/impl/SysClientImpl.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/impl/SysClientImpl.java
index ab04871..41184fc 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/impl/SysClientImpl.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/client/api/impl/SysClientImpl.java
@@ -6,10 +6,7 @@
 import cn.huge.base.common.exception.ServiceException;
 import cn.huge.base.common.utils.ObjectUtils;
 import cn.huge.module.client.api.SysClient;
-import cn.huge.module.sys.dto.FileIdInfoBaseDTO;
-import cn.huge.module.sys.dto.FileIdTypeInfoBaseDTO;
-import cn.huge.module.sys.dto.FileInfoBaseDTO;
-import cn.huge.module.sys.dto.FileTypeInfoBaseDTO;
+import cn.huge.module.sys.dto.*;
 import com.alibaba.fastjson.JSON;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
@@ -20,6 +17,7 @@
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @title: 系统公共服务微服务调用接口
@@ -47,13 +45,13 @@
 
     /**
      * 附件中心-根据多个所属编号查询附件并根据先根据ownerId再根据附件类型分组
-     * @param ownerIdList 所属业务编号
+     * @param term 所属业务编号
      * @return List
      */
-    public List<FileIdTypeInfoBaseDTO> listIdTypeInfoByOwnerIdList(List<String> ownerIdList){
+    public List<FileIdTypeInfoBaseDTO> listIdTypeInfoByOwnerIdList(Map<String, Object> term, String mainId){
         List<FileIdTypeInfoBaseDTO> fileIdTypeInfoBaseDTOList = new ArrayList<>();
         try{
-            ReturnBO returnBo = sysClient.listTypeInfoByOwnerIdList(ownerIdList);
+            ReturnBO returnBo = sysClient.listTypeInfoByOwnerIdList(term, mainId);
             if (ReturnConsts.OK == returnBo.getCode()){
                 if (ObjectUtils.isNotEmpty(returnBo.getData())){
                     List<LinkedHashMap> list = (List<LinkedHashMap>) returnBo.getData();
@@ -71,13 +69,13 @@
 
     /**
      * 附件中心-根据业务编号查询固定格式所有附件
-     * @param ownerIdList 所属业务编号
+     * @param term 所属业务编号
      * @return List
      */
-    public List<FileIdInfoBaseDTO> listIdInfoByOwnerIdList(List<String> ownerIdList){
+    public List<FileIdInfoBaseDTO> listIdInfoByOwnerIdList(Map<String, Object> term, String mainId){
         List<FileIdInfoBaseDTO> fileIdInfoBaseDTOList = new ArrayList<>();
         try{
-            ReturnBO returnBo = sysClient.listInfoByOwnerIdList(ownerIdList);
+            ReturnBO returnBo = sysClient.listInfoByOwnerIdList(term, mainId);
             if (ReturnConsts.OK == returnBo.getCode()){
                 if (ObjectUtils.isNotEmpty(returnBo.getData())){
                     List<LinkedHashMap> list = (List<LinkedHashMap>) returnBo.getData();
@@ -92,4 +90,41 @@
         }
         return fileIdInfoBaseDTOList;
     }
+
+    /**
+     * 附件中心-根据业务编号查询固定格式所有附件
+     * @param limitTable 表名
+     * @param limitType  时限类型
+     * @return List
+     */
+    public Integer getTimeLimit(String limitTable, String limitType){
+        int timeTerm = 0;
+        try{
+            ReturnBO returnBo = sysClient.getTimeLimit(limitTable, limitType);
+            if (ReturnConsts.OK == returnBo.getCode()){
+                if (ObjectUtils.isNotEmpty(returnBo.getData())){
+                    timeTerm = (int)returnBo.getData();
+                }
+            }
+        }catch (Exception e){
+            log.error("service方法[SysClientImpl.listIdInfoByOwnerIdList]调用异常:"+e, e);
+        }
+        return timeTerm;
+    }
+
+    /**
+     * 根据条件删除附件关系
+     * @param fileTypeTermsDTO 条件
+     * @return Object
+     */
+    public void removeFileRelate(FileTypeTermsDTO fileTypeTermsDTO) {
+        try {
+            ReturnBO returnBo = sysClient.removeFileRelate(fileTypeTermsDTO);
+            if (ReturnConsts.OK != returnBo.getCode()){
+                log.error("Client外服务接口[SysClientImpl.removeFileRelate]请求异常:" + returnBo.getMsg(), returnBo.getMsg());
+            }
+        } catch (Exception e) {
+            log.error("service方法[SysClientImpl.removeFileRelate]请求异常:"+e, e);
+        }
+    }
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/controller/web/CasedraftAgentWebController.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/controller/web/CasedraftAgentWebController.java
index 1a261cb..ce3b076 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/controller/web/CasedraftAgentWebController.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/controller/web/CasedraftAgentWebController.java
@@ -58,6 +58,16 @@
         if (StringUtils.isNotBlank(partyUserId)){
             terms.put("partyUserId", partyUserId);
         }
+        // 当事人地位
+        String perType = request.getParameter("perType");
+        if (StringUtils.isNotBlank(perType)){
+            terms.put("perType", perType);
+        }
+        // 当事人地位名称
+        String perTypeName = request.getParameter("perTypeName");
+        if (StringUtils.isNotBlank(perTypeName)){
+            terms.put("perTypeName", perTypeName);
+        }
         // 代理人类型
         String perClass = request.getParameter("perClass");
         if (StringUtils.isNotBlank(perClass)){
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/controller/web/CasedraftInfoWebController.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/controller/web/CasedraftInfoWebController.java
index 9ceccdd..522867e 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/controller/web/CasedraftInfoWebController.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/controller/web/CasedraftInfoWebController.java
@@ -426,8 +426,8 @@
     }
 
     /**
-     * PC端-纠纷登记-草稿箱-保存纠纷信息
-     * @url {ctx}/api/v1/casedraftInfo/caseDraftRegister
+     * PC端-纠纷登记-保存纠纷信息草稿
+     * @url {ctx}/api/web/casedraftInfo/caseDraftRegister
      * @param draftRegisterSaveDTO 实体对象
      */
     @PostMapping("/caseDraftRegister")
@@ -439,4 +439,19 @@
             return ReturnFailUtils.getRepInfo(e.getMessage());
         }
     }
+
+    /**
+     * PC端-正式案件-查询纠纷信息草稿
+     * @url {ctx}/api/web/casedraftInfo/getCasedraftInfo?id=
+     * @param id 纠纷编号
+     * @return Object
+     */
+    @GetMapping("/getCasedraftInfo")
+    public Object getCasedraftInfo(@RequestParam(value = "id") String id) {
+        try {
+            return ReturnSucUtils.getRepInfo(service.getCasedraftInfo(id));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo(e.getMessage());
+        }
+    }
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/dao/mapper/xml/CasedraftAgentMapper.xml b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/dao/mapper/xml/CasedraftAgentMapper.xml
index 679e0c1..fcf10f5 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/dao/mapper/xml/CasedraftAgentMapper.xml
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/dao/mapper/xml/CasedraftAgentMapper.xml
@@ -14,6 +14,8 @@
             <result property="id" column="id"/>
             <result property="caseId" column="case_id"/>
             <result property="partyUserId" column="party_user_id"/>
+            <result property="perType" column="per_type"/>
+            <result property="perTypeName" column="per_type_name"/>
             <result property="perClass" column="per_class"/>
             <result property="perClassName" column="per_class_name"/>
             <result property="trueName" column="true_name"/>
@@ -71,6 +73,8 @@
         id,
         case_id,
         party_user_id,
+        per_type,
+        per_type_name,
         per_class,
         per_class_name,
         true_name,
@@ -125,6 +129,8 @@
     <sql id="set-part">
             <if test="entity.caseId != null">case_id = #{entity.caseId},</if>
             <if test="entity.partyUserId != null">party_user_id = #{entity.partyUserId},</if>
+            <if test="entity.perType != null">per_type = #{entity.perType},</if>
+            <if test="entity.perTypeName != null">per_type_name = #{entity.perTypeName},</if>
             <if test="entity.perClass != null">per_class = #{entity.perClass},</if>
             <if test="entity.perClassName != null">per_class_name = #{entity.perClassName},</if>
             <if test="entity.trueName != null">true_name = #{entity.trueName},</if>
@@ -188,6 +194,12 @@
                 <if test="terms.partyUserId != null and terms.partyUserId !=''">
                     and party_user_id = #{terms.partyUserId}
                 </if>
+                <if test="terms.perType != null and terms.perType !=''">
+                    and per_type = #{terms.perType}
+                </if>
+                <if test="terms.perTypeName != null and terms.perTypeName !=''">
+                    and per_type_name = #{terms.perTypeName}
+                </if>
                 <if test="terms.perClass != null and terms.perClass !=''">
                     and per_class = #{terms.perClass}
                 </if>
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/dto/CasedraftInfoDTO.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/dto/CasedraftInfoDTO.java
new file mode 100644
index 0000000..90f7371
--- /dev/null
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/dto/CasedraftInfoDTO.java
@@ -0,0 +1,47 @@
+package cn.huge.module.draft.domain.dto;
+
+import cn.huge.module.cases.domain.po.CaseAgent;
+import cn.huge.module.cases.domain.po.CaseInfo;
+import cn.huge.module.cases.domain.po.CasePerson;
+import cn.huge.module.draft.domain.po.CasedraftAgent;
+import cn.huge.module.draft.domain.po.CasedraftPerson;
+import cn.huge.module.sys.dto.FileTypeInfoBaseDTO;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @title: 纠纷信息数据传输对象
+ * @description: 纠纷信息数据传输对象
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2022-03-11 11:43:25
+ * @version: 1.0.0
+ * @see CaseInfo
+ */
+@Data
+public class CasedraftInfoDTO extends CaseInfo {
+
+    /**
+     * 申请人列表
+     */
+    private List<CasedraftPerson> personList;
+
+    /**
+     * 申请人代理人列表
+     */
+    private List<CasedraftAgent> agentList;
+
+    /**
+     * 附件列表
+     */
+    private List<FileTypeInfoBaseDTO> fileInfoList;
+
+
+    /**
+     * 相关附件数量
+     */
+    private Integer fileSize;
+
+
+}
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/dto/DraftRegisterSaveDTO.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/dto/DraftRegisterSaveDTO.java
index 4b4c137..d875e5e 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/dto/DraftRegisterSaveDTO.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/dto/DraftRegisterSaveDTO.java
@@ -23,37 +23,12 @@
 public class DraftRegisterSaveDTO extends CasedraftInfo {
 
     /**
-     * 申请人列表
+     * 当事人列表
      */
-    private List<CasedraftPerson> plaintiffList;
+    private List<CasedraftPerson> personList;
 
     /**
-     * 申请人代理人列表
+     * 当事人代理人列表
      */
-    private List<CasedraftAgent> pagentList;
-
-    /**
-     * 被申请人列表
-     */
-    private List<CasedraftPerson> defendantList;
-
-    /**
-     * 被申请人代理人列表
-     */
-    private List<CasedraftAgent> dagentList;
-
-    /**
-     * 调解组织类型,1:本单位调解,2:本单位人调解,3:其他单位调解
-     */
-    private String mediateUnitType;
-
-    /**
-     * 自行受理标识,0:不是,1:是
-     */
-    private Integer isSelfAccept;
-
-    /**
-     * 是否是草稿提交,0:不是,1:是
-     */
-    private Integer isDraft;
+    private List<CasedraftAgent> agentList;
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/po/CasedraftAgent.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/po/CasedraftAgent.java
index 0400a33..405e056 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/po/CasedraftAgent.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/po/CasedraftAgent.java
@@ -1,5 +1,6 @@
 package cn.huge.module.draft.domain.po;
 
+import cn.huge.module.sys.dto.FileTypeInfoBaseDTO;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
@@ -7,6 +8,7 @@
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * @title: 纠纷代理人信息草稿表数据库对应关系类
@@ -37,6 +39,18 @@
     */
     @TableField(value = "party_user_id")
     private String partyUserId;
+
+    /**
+     * 当事人地位
+     */
+    @TableField(value = "per_type")
+    private String perType;
+
+    /**
+     * 当事人地位名称
+     */
+    @TableField(value = "per_type_name")
+    private String perTypeName;
 
     /**
     * 代理人类型
@@ -332,4 +346,9 @@
     @TableField(value = "update_time")
     private Date updateTime;
 
+    /**
+     * 附件列表
+     */
+    @TableField(exist = false)
+    private List<FileTypeInfoBaseDTO> fileInfoList;
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/po/CasedraftInfo.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/po/CasedraftInfo.java
index a3549cd..743f726 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/po/CasedraftInfo.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/po/CasedraftInfo.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.util.Date;
@@ -47,6 +48,7 @@
     /**
     * 来访时间
     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm", timezone="GMT+8")
     @TableField(value = "visit_time")
     private Date visitTime;
 
@@ -95,6 +97,7 @@
     /**
     * 纠纷发生时间
     */
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm", timezone="GMT+8")
     @TableField(value = "occur_time")
     private Date occurTime;
 
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/po/CasedraftPerson.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/po/CasedraftPerson.java
index 1f5f320..c921549 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/po/CasedraftPerson.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/domain/po/CasedraftPerson.java
@@ -1,5 +1,6 @@
 package cn.huge.module.draft.domain.po;
 
+import cn.huge.module.sys.dto.FileTypeInfoBaseDTO;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
@@ -7,6 +8,7 @@
 import lombok.Data;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * @title: 纠纷当事人信息草稿表数据库对应关系类
@@ -338,4 +340,9 @@
     @TableField(value = "update_time")
     private Date updateTime;
 
+    /**
+     * 附件列表
+     */
+    @TableField(exist = false)
+    private List<FileTypeInfoBaseDTO> fileInfoList;
 }
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/service/CasedraftInfoService.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/service/CasedraftInfoService.java
index 9280c3c..bc8765b 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/service/CasedraftInfoService.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/draft/service/CasedraftInfoService.java
@@ -3,18 +3,27 @@
 import cn.huge.base.common.exception.ServiceException;
 import cn.huge.base.common.utils.DateUtils;
 import cn.huge.base.common.utils.IdUtils;
+import cn.huge.base.common.utils.ObjectUtils;
+import cn.huge.module.cases.domain.dto.CaseInfoDTO;
+import cn.huge.module.cases.domain.dto.RegisterSaveDTO;
+import cn.huge.module.cases.domain.po.CaseAgent;
+import cn.huge.module.cases.domain.po.CaseInfo;
 import cn.huge.module.cases.domain.po.CaseInfoUnfold;
 import cn.huge.module.client.api.impl.CustClientImpl;
+import cn.huge.module.client.api.impl.SysClientImpl;
 import cn.huge.module.client.api.impl.UtilsClientImpl;
 import cn.huge.module.constant.BaseConsts;
 import cn.huge.module.mediate.constant.CaseBaseConsts;
 import cn.huge.module.mediate.constant.CaseBaseConstsEnum;
 import cn.huge.module.cust.dto.CtUserDTO;
 import cn.huge.module.draft.dao.mapper.CasedraftInfoMapper;
+import cn.huge.module.draft.domain.dto.CasedraftInfoDTO;
 import cn.huge.module.draft.domain.dto.DraftRegisterSaveDTO;
 import cn.huge.module.draft.domain.po.CasedraftAgent;
 import cn.huge.module.draft.domain.po.CasedraftInfo;
 import cn.huge.module.draft.domain.po.CasedraftPerson;
+import cn.huge.module.sys.dto.FileIdTypeInfoBaseDTO;
+import cn.huge.module.sys.dto.FileTypeTermsDTO;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.apache.commons.collections.CollectionUtils;
@@ -28,10 +37,8 @@
 import org.springframework.data.domain.PageRequest;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @title: 纠纷信息草稿表业务逻辑处理
@@ -60,6 +67,9 @@
 
     @Autowired
     private CustClientImpl custClient;
+
+    @Autowired
+    private SysClientImpl sysClient;
 
     /**
     * 更新对象
@@ -167,28 +177,18 @@
             StringBuffer defendants = new StringBuffer();
             StringBuffer pagents = new StringBuffer();
             StringBuffer dagents = new StringBuffer();
-            int peopleNum = 0;
 
             CasedraftInfo casedraftInfo = new CasedraftInfo();
-            CaseInfoUnfold caseInfoUnfold = new CaseInfoUnfold();
             BeanUtils.copyProperties(draftRegisterSaveDTO, casedraftInfo);
-            casedraftInfo.setId(utilsClient.getNewTimeId());
-            casedraftInfo.setInputUnitId(loginUser.getUnitId());
-            casedraftInfo.setInputUnitName(loginUser.getUnitName());
-            casedraftInfo.setInputUserId(loginUser.getId());
-            casedraftInfo.setInputUserName(loginUser.getTrueName());
-            casedraftInfo.setInputWay(CaseBaseConsts.INPUT_WAY_1);
-            casedraftInfo.setCreateTime(nowDate);
+            casedraftInfo.setCustId(loginUser.getCustId());
             casedraftInfo.setUpdateTime(nowDate);
-            //todo case_title
-
             // 常规登记-保存当事人
-            peopleNum += this.saveCaseDraftPerson(draftRegisterSaveDTO, plaintiffs, pagents, defendants, dagents);
-            casedraftInfo.setPeopleNum(peopleNum);
+            this.saveCaseDraftPerson(draftRegisterSaveDTO, plaintiffs, pagents, defendants, dagents);
             casedraftInfo.setPlaintiffs(plaintiffs.toString());
             casedraftInfo.setPagents(pagents.toString());
             casedraftInfo.setDefendants(defendants.toString());
             casedraftInfo.setDagents(dagents.toString());
+
 
             this.saveOrUpdate(casedraftInfo);
 
@@ -208,123 +208,109 @@
      * @param dagents 被申请人代理人
      * @return int
      */
-    private int saveCaseDraftPerson(DraftRegisterSaveDTO draftRegisterSaveDTO, StringBuffer plaintiffs, StringBuffer pagents,
-                               StringBuffer defendants, StringBuffer dagents){
-        int peopleNum = 0;
-        List<String> newDraftPersonIdList = new ArrayList<>();
-        List<String> newDraftAgentIdList = new ArrayList<>();
-        // 保存申请人
-        List<CasedraftPerson> plaintPersonList = draftRegisterSaveDTO.getPlaintiffList();
-        if (CollectionUtils.isNotEmpty(plaintPersonList)) {
-            for (CasedraftPerson casedraftPerson : plaintPersonList) {
-                newDraftPersonIdList.add(casedraftPerson.getId());
+    private void saveCaseDraftPerson(DraftRegisterSaveDTO draftRegisterSaveDTO, StringBuffer plaintiffs, StringBuffer pagents,
+                                StringBuffer defendants, StringBuffer dagents){
+
+        Date now = DateUtils.getNowDate();
+
+        List<CasedraftPerson> casedraftPersonList = draftRegisterSaveDTO.getPersonList();
+        List<CasedraftAgent> casedraftAgentList = draftRegisterSaveDTO.getAgentList();
+
+        //查出已存在的当事人和代理人编号
+        List<String> oldPersonIdList = draftPersonService.listIdByCaseId(draftRegisterSaveDTO.getId());
+        List<String> oldAgentIdList = draftAgentService.listIdByCaseId(draftRegisterSaveDTO.getId());
+        String oldPersonIds = oldPersonIdList.stream().map(String::valueOf).collect(Collectors.joining(","));
+        String oldAgentIds = oldAgentIdList.stream().map(String::valueOf).collect(Collectors.joining(","));
+        List<String> newPersonIdList = new ArrayList<>();
+        List<String> newAgentIdList = new ArrayList<>();
+
+        if(CollectionUtils.isNotEmpty(casedraftPersonList)){
+            for(CasedraftPerson casedraftPerson: casedraftPersonList){
+                newPersonIdList.add(casedraftPerson.getId());
                 casedraftPerson.setCaseId(draftRegisterSaveDTO.getId());
-                casedraftPerson.setPerType(CaseBaseConstsEnum.PERSON_TYPE_1.getIndex());
-                casedraftPerson.setPerTypeName(CaseBaseConstsEnum.PERSON_TYPE_1.getDes());
                 casedraftPerson.setCustId(draftRegisterSaveDTO.getCustId());
-                casedraftPerson.setCreateTime(draftRegisterSaveDTO.getUpdateTime());
-                casedraftPerson.setUpdateTime(draftRegisterSaveDTO.getUpdateTime());
+                casedraftPerson.setUpdateTime(now);
 
-                draftPersonService.saveOrUpdate(casedraftPerson);
-
-                if (StringUtils.isNotEmpty(plaintiffs.toString())) {
-                    plaintiffs.append(BaseConsts.COMMA);
+                //添加申请方和被申请方人名组合
+                if(CaseBaseConstsEnum.PERSON_TYPE_1.equals(casedraftPerson.getPerType())){
+                    //申请方
+                    if (StringUtils.isNotEmpty(plaintiffs.toString())) {
+                        plaintiffs.append(BaseConsts.COMMA);
+                    }
+                    plaintiffs.append(casedraftPerson.getTrueName());
+                }else if(CaseBaseConstsEnum.PERSON_TYPE_2.equals(casedraftPerson.getPerType())){
+                    //被申请方
+                    if (StringUtils.isNotEmpty(defendants.toString())) {
+                        defendants.append(BaseConsts.COMMA);
+                    }
+                    defendants.append(casedraftPerson.getTrueName());
                 }
-                plaintiffs.append(casedraftPerson.getTrueName());
-                peopleNum++;
+
+                //判断是否为更新(用原有的Id对比性的Id)
+                if(oldPersonIds.contains(casedraftPerson.getId())){
+                    draftPersonService.updateById(casedraftPerson);
+                }else{
+                    casedraftPerson.setCreateTime(now);
+                    draftPersonService.save(casedraftPerson);
+                }
 
             }
-            //保存代理人
-            List<CasedraftAgent> pagentList = draftRegisterSaveDTO.getPagentList();
-            if (CollectionUtils.isNotEmpty(pagentList)) {
-                for(CasedraftAgent casedraftAgent: pagentList){
-                    newDraftAgentIdList.add(casedraftAgent.getId());
-                    casedraftAgent.setId(utilsClient.getNewTimeId());
-                    casedraftAgent.setCaseId(draftRegisterSaveDTO.getId());
-                    casedraftAgent.setAgentTypeName(CaseBaseConstsEnum.getDes(casedraftAgent.getAgentType()));
-                    casedraftAgent.setCustId(draftRegisterSaveDTO.getCustId());
-                    casedraftAgent.setCreateTime(draftRegisterSaveDTO.getUpdateTime());
-                    casedraftAgent.setUpdateTime(draftRegisterSaveDTO.getUpdateTime());
+        }
 
-                    draftAgentService.saveOrUpdate(casedraftAgent);
+        if(CollectionUtils.isNotEmpty(casedraftAgentList)) {
+            for (CasedraftAgent casedraftAgent : casedraftAgentList) {
+                newAgentIdList.add(casedraftAgent.getId());
+                casedraftAgent.setCaseId(draftRegisterSaveDTO.getId());
+                casedraftAgent.setAgentTypeName(CaseBaseConstsEnum.getDes(casedraftAgent.getAgentType()));
+                casedraftAgent.setCustId(draftRegisterSaveDTO.getCustId());
+                casedraftAgent.setUpdateTime(now);
 
+                if(CaseBaseConstsEnum.PERSON_TYPE_3.equals(casedraftAgent.getPerType())) {
                     if (StringUtils.isNotEmpty(pagents.toString())) {
                         pagents.append(BaseConsts.COMMA);
                     }
                     pagents.append(casedraftAgent.getTrueName());
-                }
-
-                //todo 绑定当事人小程序
-            }
-        }
-        // 保存被申请人
-        List<CasedraftPerson> defendPersonList = draftRegisterSaveDTO.getDefendantList();
-        if(CollectionUtils.isNotEmpty(defendPersonList)){
-            for (CasedraftPerson casedraftPerson : defendPersonList) {
-                newDraftPersonIdList.add(casedraftPerson.getId());
-                casedraftPerson.setCaseId(draftRegisterSaveDTO.getId());
-                casedraftPerson.setPerType(CaseBaseConstsEnum.PERSON_TYPE_2.getIndex());
-                casedraftPerson.setPerTypeName(CaseBaseConstsEnum.PERSON_TYPE_2.getDes());
-                casedraftPerson.setCustId(draftRegisterSaveDTO.getCustId());
-                casedraftPerson.setCreateTime(draftRegisterSaveDTO.getUpdateTime());
-                casedraftPerson.setUpdateTime(draftRegisterSaveDTO.getUpdateTime());
-                //todo 绑定当事人小程序
-                draftPersonService.saveOrUpdate(casedraftPerson);
-                if (StringUtils.isNotEmpty(defendants.toString())) {
-                    defendants.append(BaseConsts.COMMA);
-                }
-                defendants.append(casedraftPerson.getTrueName());
-                peopleNum++;
-            }
-            //保存代理人
-            List<CasedraftAgent> pagentList = draftRegisterSaveDTO.getPagentList();
-            if (CollectionUtils.isNotEmpty(pagentList)) {
-                for(CasedraftAgent casedraftAgent: pagentList){
-                    newDraftAgentIdList.add(casedraftAgent.getId());
-                    casedraftAgent.setId(utilsClient.getNewTimeId());
-                    casedraftAgent.setCaseId(draftRegisterSaveDTO.getId());
-                    casedraftAgent.setAgentTypeName(CaseBaseConstsEnum.getDes(casedraftAgent.getAgentType()));
-                    casedraftAgent.setCustId(draftRegisterSaveDTO.getCustId());
-                    casedraftAgent.setCreateTime(draftRegisterSaveDTO.getUpdateTime());
-                    casedraftAgent.setUpdateTime(draftRegisterSaveDTO.getUpdateTime());
-                    draftAgentService.saveOrUpdate(casedraftAgent);
+                }else if(CaseBaseConstsEnum.PERSON_TYPE_4.equals(casedraftAgent.getPerType())) {
                     if (StringUtils.isNotEmpty(dagents.toString())) {
                         dagents.append(BaseConsts.COMMA);
                     }
                     dagents.append(casedraftAgent.getTrueName());
                 }
-            }
 
+                //判断是否为更新(用原有的Id对比性的Id)
+                if(oldAgentIds.contains(casedraftAgent.getId())){
+                    draftAgentService.updateById(casedraftAgent);
+                }else{
+                    casedraftAgent.setCreateTime(now);
+                    draftAgentService.save(casedraftAgent);
+                }
+            }
         }
 
-        // 删除冗余的申请人
-        if (CollectionUtils.isNotEmpty(newDraftPersonIdList)) {
-            List<String> oldPersonIdList = draftPersonService.listIdByCaseId(draftRegisterSaveDTO.getId());
+        // 删除冗余的申请人(用新的Id对比旧的Id)
+        if (CollectionUtils.isNotEmpty(newPersonIdList)) {
             for (String oldPersonId : oldPersonIdList) {
-                if (!newDraftPersonIdList.contains(oldPersonId)) {
+                if (!newPersonIdList.contains(oldPersonId)) {
                     draftPersonService.removeById(oldPersonId);
                 }
             }
         }else{
-            QueryWrapper<CasedraftPerson> casedraftPersonQueryWrapper = new QueryWrapper<>();
-            casedraftPersonQueryWrapper.eq("case_id", draftRegisterSaveDTO.getId());
-            draftPersonService.remove(casedraftPersonQueryWrapper);
+            QueryWrapper<CasedraftPerson> casePersonQueryWrapper = new QueryWrapper<>();
+            casePersonQueryWrapper.eq("case_id", draftRegisterSaveDTO.getId());
+            draftPersonService.remove(casePersonQueryWrapper);
         }
         //删除冗余的代理人
-        if(CollectionUtils.isNotEmpty(newDraftAgentIdList)){
-            List<String> oldAgentIdList = draftAgentService.listIdByCaseId(draftRegisterSaveDTO.getId());
+        if(CollectionUtils.isNotEmpty(newAgentIdList)){
             for(String oldAgentId: oldAgentIdList){
-                if(!newDraftAgentIdList.contains(oldAgentId)){
+                if(!newAgentIdList.contains(oldAgentId)){
                     draftAgentService.removeById(oldAgentId);
                 }
             }
         }else{
-            QueryWrapper<CasedraftAgent> casedraftAgentQueryWrapper = new QueryWrapper<>();
-            casedraftAgentQueryWrapper.eq("case_id", draftRegisterSaveDTO.getId());
-            draftAgentService.remove(casedraftAgentQueryWrapper);
+            QueryWrapper<CasedraftAgent> caseAgentQueryWrapper = new QueryWrapper<>();
+            caseAgentQueryWrapper.eq("case_id", draftRegisterSaveDTO.getId());
+            draftAgentService.remove(caseAgentQueryWrapper);
         }
-
-        return peopleNum;
     }
 
     /**
@@ -336,7 +322,7 @@
         try{
             // 删除纠纷草稿信息
             QueryWrapper<CasedraftInfo> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("serie_no", caseId);
+            queryWrapper.eq("id", caseId);
             List<CasedraftInfo> draftInfoList = mapper.selectList(queryWrapper);
             List<String> ownerIdList = new ArrayList<>();
             for (CasedraftInfo casedraftInfo : draftInfoList) {
@@ -350,13 +336,71 @@
                 QueryWrapper<CasedraftAgent> casedraftAgentQueryWrapper = new QueryWrapper<>();
                 casedraftAgentQueryWrapper.eq("case_id", casedraftInfo.getId());
                 //todo 删除附件关系
-//                FileTypeTermsDTO fileTypeTermsDTO = new FileTypeTermsDTO();
-//                fileTypeTermsDTO.setOwnerIdList(ownerIdList);
-//                sysClient.removeFileRelate(fileTypeTermsDTO);
+                FileTypeTermsDTO fileTypeTermsDTO = new FileTypeTermsDTO();
+                fileTypeTermsDTO.setOwnerIdList(ownerIdList);
+                sysClient.removeFileRelate(fileTypeTermsDTO);
             }
         }catch (Exception e){
             log.error("service方法[CasedraftInfoService.removeDraftInfo]调用异常:"+e, e);
             throw new ServiceException("CasedraftInfoService.removeDraftInfo", e);
         }
     }
+
+    /**
+     * PC端-查询纠纷信息
+     * @param caseId 纠纷编号
+     * @return CaseInfo 纠纷信息
+     */
+    public CasedraftInfoDTO getCasedraftInfo(String caseId){
+        CasedraftInfo casedraftInfo = mapper.selectById(caseId);
+        CasedraftInfoDTO caseInfoDTO = new CasedraftInfoDTO();
+        if (ObjectUtils.isNotEmpty(casedraftInfo)) {
+
+            BeanUtils.copyProperties(casedraftInfo, caseInfoDTO);
+            //查询所有当事人
+            QueryWrapper<CasedraftPerson> draftPersonQueryWrapper = new QueryWrapper<>();
+            draftPersonQueryWrapper.eq("case_id", caseId);
+            List<CasedraftPerson> casePersonList = draftPersonService.list(draftPersonQueryWrapper);
+
+            //查询所有代理人
+            QueryWrapper<CasedraftAgent> casedraftAgentQueryWrapper = new QueryWrapper<>();
+            casedraftAgentQueryWrapper.eq("case_id", caseId);
+            List<CasedraftAgent> caseAgentList = draftAgentService.list(casedraftAgentQueryWrapper);
+            List<String> idList = new ArrayList<>();
+
+            idList.add(caseId);
+            idList.addAll(casePersonList.stream().map(CasedraftPerson::getId).collect(Collectors.toList()));
+            idList.addAll(caseAgentList.stream().map(CasedraftAgent::getId).collect(Collectors.toList()));
+            String ids = idList.stream().map(String::valueOf).collect(Collectors.joining("','"));
+            ids = "'"+ ids + "'";
+            Map<String, Object> term = new HashMap<>();
+            term.put("ownerIds", ids);
+            //查询所有附件
+            List<FileIdTypeInfoBaseDTO> fileInfoList = sysClient.listIdTypeInfoByOwnerIdList(term, caseId);
+            //把附件根据编号放入
+            for(FileIdTypeInfoBaseDTO fileInfo: fileInfoList){
+                if(caseId.equals(fileInfo.getOwnerId())){
+                    caseInfoDTO.setFileInfoList(fileInfo.getFileList());
+                }
+            }
+            for(CasedraftPerson casePerson: casePersonList){
+                for(FileIdTypeInfoBaseDTO fileInfo: fileInfoList){
+                    if(casePerson.getId().equals(fileInfo.getOwnerId())){
+                        casePerson.setFileInfoList(fileInfo.getFileList());
+                    }
+                }
+            }
+            for(CasedraftAgent caseAgent: caseAgentList){
+                for(FileIdTypeInfoBaseDTO fileInfo: fileInfoList){
+                    if(caseAgent.getId().equals(fileInfo.getOwnerId())){
+                        caseAgent.setFileInfoList(fileInfo.getFileList());
+                    }
+                }
+            }
+
+            caseInfoDTO.setPersonList(casePersonList);
+            caseInfoDTO.setAgentList(caseAgentList);
+        }
+        return caseInfoDTO;
+    }
 }
diff --git a/dyh-service/dyh-sync/src/main/java/cn/huge/module/sync/controller/SyncController.java b/dyh-service/dyh-sync/src/main/java/cn/huge/module/sync/controller/SyncController.java
index 0eeb3ce..3c21f2e 100644
--- a/dyh-service/dyh-sync/src/main/java/cn/huge/module/sync/controller/SyncController.java
+++ b/dyh-service/dyh-sync/src/main/java/cn/huge/module/sync/controller/SyncController.java
@@ -33,7 +33,7 @@
 
     /**
      * 数据迁移通用接口
-     * @url {ctx}/api/web/ctUnit/universalSync
+     * @url {ctx}/api/sync/ctUnit/universalSync
      * @return Object
      */
     @GetMapping("/universalSync")
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/client/FileInfoClientController.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/client/FileInfoClientController.java
new file mode 100644
index 0000000..45a42f5
--- /dev/null
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/client/FileInfoClientController.java
@@ -0,0 +1,62 @@
+package cn.huge.module.file.controller.client;
+
+import cn.huge.base.common.utils.ReturnFailUtils;
+import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.module.file.service.FileInfoService;
+import io.lettuce.core.dynamic.annotation.Param;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @title: 附件信息表接口api-web端
+ * @description: 附件信息表接口api-web端
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2024-08-28 20:06:18
+ * @version: 1.0.0
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/client/fileInfo")
+public class FileInfoClientController {
+
+    @Autowired(required = false)
+    private HttpServletRequest request;
+
+    @Autowired
+    private FileInfoService service;
+
+    /**
+     * 根据多个所属编号查询附件并根据先根据ownerId再根据附件类型分组
+     * @url {ctx}/api/client/fileRelate/listIdTypeInfoByOwnerIdList
+     * @return Object
+     */
+    @PostMapping("/listIdTypeInfoByOwnerIdList")
+    public Object listIdTypeInfoByOwnerIdList(@RequestBody  Map<String, Object> term, @RequestParam(value = "mainId") String mainId) {
+        try {
+            return ReturnSucUtils.getRepInfo(service.listIdTypeInfoByOwnerIdList(term, mainId));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+     * 根据多个所属编号查询附件
+     * @url {ctx}/api/client/fileRelate/listInfoByOwnerIdList
+     * @return Object
+     */
+    @PostMapping("/listInfoByOwnerIdList")
+    public Object listInfoByOwnerIdList(@RequestBody Map<String, Object> term, @RequestParam(value = "mainId") String mainId) {
+        try {
+            return ReturnSucUtils.getRepInfo(service.listInfoByOwnerIdList(term, mainId));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+}
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/client/FileRelateClientController.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/client/FileRelateClientController.java
new file mode 100644
index 0000000..5940dc0
--- /dev/null
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/client/FileRelateClientController.java
@@ -0,0 +1,119 @@
+package cn.huge.module.file.controller.client;
+
+import cn.huge.base.common.utils.ReturnFailUtils;
+import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.module.file.service.FileRelateService;
+import cn.huge.module.sys.dto.FileTypeTermsDTO;
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+/**
+ * @title: 附件关系表接口api-web端
+ * @description: 附件关系表接口api-web端
+ * @company: hugeinfo
+ * @author: liyj
+ * @time: 2024-08-28 20:06:19
+ * @version: 1.0.0
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/client/fileRelate")
+public class FileRelateClientController {
+
+    @Autowired(required = false)
+    private HttpServletRequest request;
+
+    @Autowired
+    private FileRelateService service;
+
+    /**
+    * 获取请求URL参数
+    * @return Map<String, Object>
+    */
+    private Map<String, Object> getParameter(){
+        Map<String, Object> terms = Maps.newHashMap();
+        // 附件关系编号
+        String id = request.getParameter("id");
+        if (StringUtils.isNotBlank(id)){
+            terms.put("id", id);
+        }
+        // 附件编号
+        String fileId = request.getParameter("fileId");
+        if (StringUtils.isNotBlank(fileId)){
+            terms.put("fileId", fileId);
+        }
+        // 所属业务编号
+        String ownerId = request.getParameter("ownerId");
+        if (StringUtils.isNotBlank(ownerId)){
+            terms.put("ownerId", ownerId);
+        }
+        // 所属业务大类
+        String ownerCat = request.getParameter("ownerCat");
+        if (StringUtils.isNotBlank(ownerCat)){
+            terms.put("ownerCat", ownerCat);
+        }
+        // 所属业务类型
+        String ownerType = request.getParameter("ownerType");
+        if (StringUtils.isNotBlank(ownerType)){
+            terms.put("ownerType", ownerType);
+        }
+        // 上传人编号
+        String uploaderId = request.getParameter("uploaderId");
+        if (StringUtils.isNotBlank(uploaderId)){
+            terms.put("uploaderId", uploaderId);
+        }
+        // 上传人姓名
+        String uploaderName = request.getParameter("uploaderName");
+        if (StringUtils.isNotBlank(uploaderName)){
+            terms.put("uploaderName", uploaderName);
+        }
+        // 上传人类型,1:工作人员,2:申请方,3:被申请方
+        String uploaderType = request.getParameter("uploaderType");
+        if (StringUtils.isNotBlank(uploaderType)){
+            terms.put("uploaderType", uploaderType);
+        }
+        // 顾客编号
+        String custId = request.getParameter("custId");
+        if (StringUtils.isNotBlank(custId)){
+            terms.put("custId", custId);
+        }
+        // 创建时间区间
+        String createStart = request.getParameter("createStart");
+        String createEnd = request.getParameter("createEnd");
+        if(StringUtils.isNotBlank(createStart) && StringUtils.isNotBlank(createEnd)) {
+            terms.put("createStart", createStart);
+            terms.put("createEnd", createEnd);
+        }
+        // 更新时间区间
+        String updateStart = request.getParameter("updateStart");
+        String updateEnd = request.getParameter("updateEnd");
+        if(StringUtils.isNotBlank(updateStart) && StringUtils.isNotBlank(updateEnd)) {
+            terms.put("updateStart", updateStart);
+            terms.put("updateEnd", updateEnd);
+        }
+        return terms;
+    }
+
+    /**
+     * 根据条件删除附件关系
+     * @url {ctx}/api/v1/fileRelate/removeFileRelate
+     * @param fileTypeTermsDTO 条件
+     * @return Object
+     */
+    @PostMapping("/removeFileRelate")
+    public Object removeFileRelate(@RequestBody FileTypeTermsDTO fileTypeTermsDTO) {
+        try {
+            service.removeOne(fileTypeTermsDTO);
+            service.removeAll(fileTypeTermsDTO);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+}
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java
index 463a767..a093e16 100644
--- a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/controller/web/FileInfoWebController.java
@@ -1,7 +1,6 @@
 package cn.huge.module.file.controller.web;
 
 import cn.huge.base.common.exception.ClientException;
-import cn.huge.module.sys.dto.IdcardOcrResultDTO;
 import cn.huge.module.utils.BaiduOcrUtils;
 import cn.huge.base.common.utils.ContentTypeUtils;
 import cn.huge.base.common.utils.ReturnFailUtils;
@@ -185,6 +184,33 @@
     }
 
     /**
+     * ocr识别文字
+     * @url {ctx}/api/web/fileInfo/recognitionText?ownerId=&ownerType=
+     * @param request
+     * @return Object
+     */
+    @PostMapping(value = "/recognitionText")
+    public Object recognitionText(MultipartHttpServletRequest request){
+        try{
+            Map<String , Object> result = Maps.newHashMap();
+            Iterator<String> itr = request.getFileNames();
+            while (itr.hasNext()) {
+                MultipartFile file = request.getFile(itr.next());
+                try{
+                    Map<String , Object> map = BaiduOcrUtils.ocrText(file.getBytes());
+                    result.put("ocrResult", map);
+                }catch (Exception e){
+                    log.error("Controller接口[FileInfoController.recognitionText]请求异常:"+e, e);
+                    return ReturnFailUtils.getRepInfo("OCR失败!");
+                }
+            }
+            return ReturnSucUtils.getRepInfo("识别成功", result);
+        }catch (Exception e){
+            return ReturnFailUtils.getRepInfo(e.getMessage());
+        }
+    }
+
+    /**
      * 查看附件组件-分类查询附件
      * @url {ctx}/api/web/fileInfo/listFileByCat
      * @param mainId 所属业务主体编号
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/dao/mapper/FileInfoMapper.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/dao/mapper/FileInfoMapper.java
index 2eb94ba..b73efdc 100644
--- a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/dao/mapper/FileInfoMapper.java
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/dao/mapper/FileInfoMapper.java
@@ -2,6 +2,7 @@
 
 import cn.huge.module.file.domain.dto.FileForCatDTO;
 import cn.huge.module.file.domain.po.FileInfo;
+import cn.huge.module.file.domain.po.FileRelate;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.data.domain.PageRequest;
@@ -69,4 +70,10 @@
      */
     List<FileForCatDTO> listFileByCatTerms(@Param("terms") Map<String, Object> terms);
 
+    /**
+     * 根据多个编号查询
+     * @param terms
+     * @return List<FileRelate>
+     */
+    List<FileInfo> listByids(@Param("terms") Map<String, Object> terms, @Param("mainId") String mainId);
 }
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/dao/mapper/xml/FileInfoMapper.xml b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/dao/mapper/xml/FileInfoMapper.xml
index 592b292..f789de2 100644
--- a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/dao/mapper/xml/FileInfoMapper.xml
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/dao/mapper/xml/FileInfoMapper.xml
@@ -11,6 +11,32 @@
 <mapper namespace="cn.huge.module.file.dao.mapper.FileInfoMapper">
     <!-- 结果集 -->
     <resultMap id="dataResult" type="cn.huge.module.file.domain.po.FileInfo">
+        <result property="id" column="id"/>
+        <result property="name" column="name"/>
+        <result property="trueName" column="true_name"/>
+        <result property="fileName" column="file_name"/>
+        <result property="suffix" column="suffix"/>
+        <result property="cat" column="cat"/>
+        <result property="size" column="size"/>
+        <result property="unit" column="unit"/>
+        <result property="md5Code" column="md5_code"/>
+        <result property="storeWay" column="store_way"/>
+        <result property="path" column="path"/>
+        <result property="fullPath" column="full_path"/>
+        <result property="showUrl" column="show_url"/>
+        <result property="downUrl" column="down_url"/>
+        <result property="zipUrl" column="zip_url"/>
+        <result property="deleteStatus" column="delete_status"/>
+        <result property="custId" column="cust_id"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="createTime" column="create_time"/>
+        <result property="ownerId" column="owner_id"/>
+        <result property="ownerCat" column="owner_cat"/>
+        <result property="ownerType" column="owner_type"/>
+        <result property="uploaderId" column="uploader_id"/>
+        <result property="uploaderName" column="uploader_name"/>
+    </resultMap>
+    <resultMap id="fileResult" type="cn.huge.module.file.domain.po.FileInfo">
             <result property="id" column="id"/>
             <result property="name" column="name"/>
             <result property="trueName" column="true_name"/>
@@ -30,6 +56,11 @@
             <result property="custId" column="cust_id"/>
             <result property="updateTime" column="update_time"/>
             <result property="createTime" column="create_time"/>
+            <result property="ownerId" column="owner_id"/>
+            <result property="ownerCat" column="owner_cat"/>
+            <result property="ownerType" column="owner_type"/>
+            <result property="uploaderId" column="uploader_id"/>
+            <result property="uploaderName" column="uploader_name"/>
     </resultMap>
     <!-- 表 -->
     <sql id='table-name'>dyh_file_info</sql>
@@ -54,6 +85,28 @@
         cust_id,
         update_time,
         create_time
+    </sql>
+    <!-- 字段 -->
+    <sql id="column-part-t">
+        t1.id,
+        t1.name,
+        t1.true_name,
+        t1.file_name,
+        t1.suffix,
+        t1.cat,
+        t1.size,
+        t1.unit,
+        t1.md5_code,
+        t1.store_way,
+        t1.path,
+        t1.full_path,
+        t1.show_url,
+        t1.down_url,
+        t1.zip_url,
+        t1.delete_status,
+        t1.cust_id,
+        t1.update_time,
+        t1.create_time
     </sql>
     <!-- 更新实体字段 -->
     <sql id="set-part">
@@ -249,4 +302,32 @@
         <include refid="listFileByCatTerms-where-part"/>
     </select>
 
+    <!-- 根据多个编号查询 -->
+    <select id="listByids" resultMap="fileResult">
+        SELECT t2.owner_id, t2.owner_cat, t2.owner_type, t2.uploader_id, t2.uploader_name,
+        <include refid="column-part-t"/>
+        FROM dyh_file_info t1
+        LEFT JOIN dyh_file_relate t2 ON t1.id = t2.file_id
+        WHERE t2.main_id = #{mainId}
+        <if test="terms.ownerIds = null and terms.ownerIds =''">
+            and t2.owner_id in (${ownerIds})
+        </if>
+        <if test="terms.types = null and terms.types =''">
+            and t2.owner_type in (${types})
+        </if>
+
+
+
+    </select>
+
+    <!-- 根据多个编号查询 -->
+    <select id="listByIdsTypes" resultMap="fileResult">
+        SELECT t2.owner_id, t2.owner_cat, t2.owner_type, t2.uploader_id, t2.uploader_name,
+        <include refid="column-part-t"/>
+        FROM dyh_file_info t1
+        LEFT JOIN dyh_file_relate t2 ON t1.id = t2.file_id
+        WHERE t2.owner_id in (${ownerIds})
+        and t2.main_id = #{mainId}
+        and t2.owner_type in (${types})
+    </select>
 </mapper> 
\ No newline at end of file
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/domain/po/FileInfo.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/domain/po/FileInfo.java
index be72cfa..fd0db23 100644
--- a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/domain/po/FileInfo.java
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/domain/po/FileInfo.java
@@ -188,5 +188,4 @@
      */
     @TableField(exist = false)
     private Integer uploaderType;
-
 }
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/service/FileInfoService.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/service/FileInfoService.java
index 659a334..16a7070 100644
--- a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/service/FileInfoService.java
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/service/FileInfoService.java
@@ -1,5 +1,6 @@
 package cn.huge.module.file.service;
 
+import cn.huge.base.common.constant.FileCatEnum;
 import cn.huge.base.common.exception.ServiceException;
 import cn.huge.base.common.utils.DateUtils;
 import cn.huge.base.common.utils.IdUtils;
@@ -11,12 +12,20 @@
 import cn.huge.module.file.domain.dto.FileForCatListDTO;
 import cn.huge.module.file.domain.dto.UploaderDTO;
 import cn.huge.module.file.domain.po.FileInfo;
+import cn.huge.module.sys.constant.FileOwnerTypeBaseEnum;
+import cn.huge.module.sys.dto.FileIdInfoBaseDTO;
+import cn.huge.module.sys.dto.FileIdTypeInfoBaseDTO;
+import cn.huge.module.sys.dto.FileInfoBaseDTO;
+import cn.huge.module.sys.dto.FileTypeInfoBaseDTO;
 import cn.huge.module.file.domain.po.FileRelate;
 import cn.huge.module.file.utils.FtpUtils;
 import cn.huge.module.file.utils.FtpMultipartFileWrapper;
 import cn.huge.module.sys.constant.FileOwnerTypeBaseEnum;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -28,6 +37,12 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.*;
+import javax.annotation.PostConstruct;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @title: 附件信息表业务逻辑处理
@@ -141,6 +156,140 @@
     }
 
     /**
+     * 根据多个所属编号查询附件并先根据ownerId再根据附件类型分组
+     * @param terms
+     * @return List
+     */
+    public List<FileIdTypeInfoBaseDTO> listIdTypeInfoByOwnerIdList(Map<String, Object> terms, String mainId){
+        List<FileIdTypeInfoBaseDTO> fileTypeInfoBaseDTOList = new ArrayList<>();
+
+        List<FileInfo> fileInfoList = mapper.listByids(terms, mainId);
+        if(CollectionUtils.isNotEmpty(fileInfoList)){
+            fileTypeInfoBaseDTOList = this.getIdFileTypeInfoBaseDTOList(fileInfoList);
+        }
+
+        return fileTypeInfoBaseDTOList;
+    }
+
+    /**
+     * 根据多个编号查询
+     * @param fileInfoList 附件列表
+     * @return List<FileTypeInfoBaseDTO>
+     */
+    private List<FileIdTypeInfoBaseDTO> getIdFileTypeInfoBaseDTOList(List<FileInfo> fileInfoList){
+        List<FileIdTypeInfoBaseDTO> fileIdTypeInfoBaseDTOList = new ArrayList<>();
+        //把Id过滤出来
+        Set<String> ownerIdSet = new HashSet<>();
+        for(FileInfo fileInfo: fileInfoList){
+            ownerIdSet.add(fileInfo.getOwnerId());
+        }
+        //把附件放入对应的OwnerId下
+        Map<String, List<FileInfo>> map = new HashMap<>();
+        for(String ownerId: ownerIdSet) {
+            List<FileInfo> fileInfoListByOwnerIdList = new ArrayList<>();
+            for (FileInfo fileInfo : fileInfoList) {
+                if(ownerId.equals(fileInfo.getOwnerId())){
+                    fileInfoListByOwnerIdList.add(fileInfo);
+                }
+            }
+            if(CollectionUtils.isNotEmpty(fileInfoListByOwnerIdList)){
+                map.put(ownerId, fileInfoListByOwnerIdList);
+            }
+
+        }
+        //根据OwnerId编号
+        for(String ownerId: ownerIdSet){
+            if(map.containsKey(ownerId)){
+                FileIdTypeInfoBaseDTO fileIdTypeInfoBaseDTO = new FileIdTypeInfoBaseDTO();
+                fileIdTypeInfoBaseDTO.setOwnerId(ownerId);
+                List<FileInfo> ownerIdFileInfoList = map.get(ownerId);
+                if (CollectionUtils.isNotEmpty(ownerIdFileInfoList)) {
+                    List<FileTypeInfoBaseDTO> fileTypeInfoBaseDTOList = new ArrayList<>();
+
+                    Set<String> setTmp = new HashSet<>();
+                    for (FileInfo fileInfo: ownerIdFileInfoList) {
+                        if (ObjectUtils.isNotEmpty(fileInfo.getOwnerType())) {
+                            setTmp.add(fileInfo.getOwnerType());
+                        }
+                    }
+                    //根据文件类型分类
+                    for(String ownerType: setTmp){
+                        FileTypeInfoBaseDTO fileTypeInfoBaseDTO = new FileTypeInfoBaseDTO();
+                        fileTypeInfoBaseDTO.setOwnerType(ownerType);
+                        fileTypeInfoBaseDTO.setOwnerTypeName(FileOwnerTypeBaseEnum.getDes(ownerType));
+                        fileTypeInfoBaseDTO.setSize(ownerIdFileInfoList.size());
+                        List<FileInfoBaseDTO> fileInfoBaseDTOList = new ArrayList<>();
+                        for(FileInfo fileInfo: ownerIdFileInfoList){
+                            if(ownerType.equals(fileInfo.getOwnerType())){
+                                FileInfoBaseDTO fileInfoBaseDTO = new FileInfoBaseDTO();
+                                BeanUtils.copyProperties(fileInfo, fileInfoBaseDTO);
+                                fileInfoBaseDTO.setOwnerCatName(FileOwnerTypeBaseEnum.getDes(fileInfo.getOwnerCat()));
+                                fileInfoBaseDTO.setOwnerTypeName(FileOwnerTypeBaseEnum.getDes(fileInfo.getOwnerType()));
+                                fileInfoBaseDTOList.add(fileInfoBaseDTO);
+                            }
+                        }
+                        fileTypeInfoBaseDTO.setFileList(fileInfoBaseDTOList);
+                        fileTypeInfoBaseDTOList.add(fileTypeInfoBaseDTO);
+                    }
+                    fileIdTypeInfoBaseDTO.setFileList(fileTypeInfoBaseDTOList);
+                    fileIdTypeInfoBaseDTOList.add(fileIdTypeInfoBaseDTO);
+                }
+            }
+        }
+
+
+
+        return fileIdTypeInfoBaseDTOList;
+    }
+
+    /**
+     * 根据多个所属编号查询附件
+     * @param terms
+     * @return List
+     */
+    public List<FileIdInfoBaseDTO> listInfoByOwnerIdList(Map<String, Object> terms, String mainId) {
+        List<FileIdInfoBaseDTO> fileIdInfoBaseDTOList = new ArrayList<>();
+        List<FileInfo> fileInfoList = mapper.listByids(terms, mainId);
+        if(CollectionUtils.isNotEmpty(fileInfoList)){
+            fileIdInfoBaseDTOList = this.getFileInfoBaseDTOList(fileInfoList);
+        }
+        return fileIdInfoBaseDTOList;
+    }
+
+    /**
+     * 根据多个所属编号查询附件并根据ownerId分组
+     * @param fileInfoList 附件列表
+     * @return List<FileTypeInfoBaseDTO>
+     */
+    private List<FileIdInfoBaseDTO> getFileInfoBaseDTOList(List<FileInfo> fileInfoList){
+        List<FileIdInfoBaseDTO> fileIdInfoBaseDTOList = new ArrayList<>();
+        //把Id过滤出来
+        Set<String> ownerIdSet = new HashSet<>();
+        for(FileInfo fileInfo: fileInfoList){
+            ownerIdSet.add(fileInfo.getOwnerId());
+        }
+
+        for(String ownerId: ownerIdSet){
+            FileIdInfoBaseDTO fileIdInfoBaseDTO = new FileIdInfoBaseDTO();
+            fileIdInfoBaseDTO.setOwnerId(ownerId);
+            List<FileInfoBaseDTO> fileInfoBaseDTOList = new ArrayList<>();
+            for (FileInfo fileInfo : fileInfoList) {
+                if (ownerId.equals(fileInfo.getOwnerId())) {
+                    FileInfoBaseDTO fileInfoBaseDTO = new FileInfoBaseDTO();
+                    BeanUtils.copyProperties(fileInfo, fileInfoBaseDTO);
+                    // TODO: 2022/3/31 简化
+                    fileInfoBaseDTO.setOwnerCatName(FileOwnerTypeBaseEnum.getDes(fileInfo.getOwnerCat()));
+                    fileInfoBaseDTO.setOwnerTypeName(FileOwnerTypeBaseEnum.getDes(fileInfo.getOwnerType()));
+                    fileInfoBaseDTOList.add(fileInfoBaseDTO);
+                }
+            }
+            fileIdInfoBaseDTO.setFileList(fileInfoBaseDTOList);
+            fileIdInfoBaseDTOList.add(fileIdInfoBaseDTO);
+        }
+        return fileIdInfoBaseDTOList;
+    }
+
+    /**
      * web端上传附件,保存附件信息和业务关系
      * @param file 附件
      * @param ownerId 所属业务编号
@@ -219,6 +368,42 @@
     }
 
     /**
+     * 上传附件,保存附件信息和业务关系
+     * @param file 附件
+     * @param ownerId 所属业务编号
+     * @param ownerType 所属业务名称
+     * @param fileCount 第几份附件
+     * @param uploaderDTO 上传人信息
+     * @return
+     */
+    public FileInfo uploadFile(MultipartFile file, String ownerId, String ownerType, int fileCount, UploaderDTO uploaderDTO) {
+        try {
+            String fileId = utilsClient.getNewTimeId();
+            // 创建附件信息
+            FileInfo fileInfo = new FtpMultipartFileWrapper(file).toWebFileInfo(fileId);
+            // 上传到ftp服务器
+            FtpUtils ftpUtils = new FtpUtils();
+            ftpUtils.upload(fileInfo.getPath(), fileInfo.getFileName(), file.getInputStream());
+            // 保存附件信息
+            fileInfo.setName(FileOwnerTypeBaseEnum.getDes(ownerType) + BaseConsts.UNDER + fileCount);
+            fileInfo.setOwnerId(ownerId);
+            fileInfo.setOwnerCat(FileOwnerTypeBaseEnum.getCat(ownerType));
+            fileInfo.setOwnerCatName(FileOwnerTypeBaseEnum.getDes(fileInfo.getOwnerCat()));
+            fileInfo.setOwnerType(ownerType);
+            fileInfo.setOwnerTypeName(FileOwnerTypeBaseEnum.getDes(ownerType));
+            fileInfo.setCustId(uploaderDTO.getCustId());
+            mapper.insert(fileInfo);
+            // 保存业务关系
+            fileRelateService.saveByFileInfo(fileInfo);
+            return fileInfo;
+        } catch (Exception e) {
+            log.error("service方法[FileInfoService.uploadFile]调用异常:"+e, e);
+            throw new ServiceException("FileInfoService.uploadFile", e);
+        }
+    }
+
+
+    /**
      * 查看附件组件-分类查询附件
      * @param terms
      * @return
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/service/FileRelateService.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/service/FileRelateService.java
index 1e9f06d..cbd05da 100644
--- a/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/service/FileRelateService.java
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/file/service/FileRelateService.java
@@ -3,13 +3,22 @@
 import cn.huge.base.common.exception.ServiceException;
 import cn.huge.base.common.utils.DateUtils;
 import cn.huge.base.common.utils.IdUtils;
+import cn.huge.base.common.utils.ObjectUtils;
 import cn.huge.module.client.api.impl.UtilsClientImpl;
 import cn.huge.module.file.dao.mapper.FileRelateMapper;
+import cn.huge.module.file.domain.po.FileInfo;
 import cn.huge.module.file.domain.dto.UploaderDTO;
 import cn.huge.module.file.domain.po.FileInfo;
 import cn.huge.module.file.domain.po.FileRelate;
+import cn.huge.module.sys.constant.FileOwnerTypeBaseEnum;
+import cn.huge.module.sys.dto.FileInfoBaseDTO;
+import cn.huge.module.sys.dto.FileTypeInfoBaseDTO;
+import cn.huge.module.sys.dto.FileTypeTermsDTO;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import lombok.extern.slf4j.Slf4j;
@@ -20,9 +29,7 @@
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.PostConstruct;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @title: 附件关系表业务逻辑处理
@@ -173,4 +180,49 @@
         }
     }
 
+    /**
+     * 根据条件删除
+     * @param fileTypeTermsDTO 条件
+     */
+    public void removeOne(FileTypeTermsDTO fileTypeTermsDTO){
+        try{
+            if (StringUtils.isNotEmpty(fileTypeTermsDTO.getOwnerId())) {
+                QueryWrapper<FileRelate> fileRelateQueryWrapper = new QueryWrapper<>();
+                fileRelateQueryWrapper.eq("owner_id", fileTypeTermsDTO.getOwnerId());
+                if (StringUtils.isNotEmpty(fileTypeTermsDTO.getOwnerType())) {
+                    fileRelateQueryWrapper.eq("owner_type", fileTypeTermsDTO.getOwnerType());
+                }
+                if (CollectionUtils.isNotEmpty(fileTypeTermsDTO.getOwnerTypeList())) {
+                    fileRelateQueryWrapper.in("owner_type", fileTypeTermsDTO.getOwnerTypeList());
+                }
+                mapper.delete(fileRelateQueryWrapper);
+            }
+        }catch (Exception e){
+            log.error("service方法[FileRelateService.removeOne]调用异常:"+e, e);
+            throw new ServiceException("FileRelateService.removeOne", e);
+        }
+    }
+
+    /**
+     * 根据条件删除
+     * @param fileTypeTermsDTO 条件
+     */
+    public void removeAll(FileTypeTermsDTO fileTypeTermsDTO){
+        try{
+            if (CollectionUtils.isNotEmpty(fileTypeTermsDTO.getOwnerIdList())) {
+                QueryWrapper<FileRelate> fileRelateQueryWrapper = new QueryWrapper<>();
+                fileRelateQueryWrapper.in("owner_id", fileTypeTermsDTO.getOwnerIdList());
+                if (StringUtils.isNotEmpty(fileTypeTermsDTO.getOwnerType())) {
+                    fileRelateQueryWrapper.eq("owner_type", fileTypeTermsDTO.getOwnerType());
+                }
+                if (CollectionUtils.isNotEmpty(fileTypeTermsDTO.getOwnerTypeList())) {
+                    fileRelateQueryWrapper.in("owner_type", fileTypeTermsDTO.getOwnerTypeList());
+                }
+                mapper.delete(fileRelateQueryWrapper);
+            }
+        }catch (Exception e){
+            log.error("service方法[FileRelateService.removeAll]调用异常:"+e, e);
+            throw new ServiceException("FileRelateService.removeAll", e);
+        }
+    }
 }
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/controller/client/SyTimeLimitClientController.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/controller/client/SyTimeLimitClientController.java
new file mode 100644
index 0000000..b598003
--- /dev/null
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/controller/client/SyTimeLimitClientController.java
@@ -0,0 +1,207 @@
+package cn.huge.module.sy.controller.client;
+
+import cn.huge.base.common.utils.ReturnFailUtils;
+import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.module.sy.domain.po.SyTimeLimit;
+import cn.huge.module.sy.service.SyTimeLimitService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+/**
+ * @title: 系统时限配置表接口api-web端
+ * @description: 系统时限配置表接口api-web端
+ * @company: hugeinfo
+ * @author: wangwh
+ * @time: 2024-09-04 16:48:57
+ * @version: 1.0.0
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/client/syTimeLimit")
+public class SyTimeLimitClientController {
+
+    @Autowired(required = false)
+    private HttpServletRequest request;
+
+    @Autowired
+    private SyTimeLimitService service;
+
+    /**
+    * 获取请求URL参数
+    * @return Map<String, Object>
+    */
+    private Map<String, Object> getParameter(){
+        Map<String, Object> terms = Maps.newHashMap();
+        // 主键编号
+        String id = request.getParameter("id");
+        if (StringUtils.isNotBlank(id)){
+            terms.put("id", id);
+        }
+        // 时限类型
+        String limitType = request.getParameter("limitType");
+        if (StringUtils.isNotBlank(limitType)){
+            terms.put("limitType", limitType);
+        }
+        // 时限名称
+        String limitTypeName = request.getParameter("limitTypeName");
+        if (StringUtils.isNotBlank(limitTypeName)){
+            terms.put("limitTypeName", limitTypeName);
+        }
+        // 时限对应表
+        String limitTable = request.getParameter("limitTable");
+        if (StringUtils.isNotBlank(limitTable)){
+            terms.put("limitTable", limitTable);
+        }
+        // 期限
+        String timeTerm = request.getParameter("timeTerm");
+        if (StringUtils.isNotBlank(timeTerm)){
+            terms.put("timeTerm", timeTerm);
+        }
+        // 期限单位
+        String termUnit = request.getParameter("termUnit");
+        if (StringUtils.isNotBlank(termUnit)){
+            terms.put("termUnit", termUnit);
+        }
+        // 操作人编号
+        String operUserId = request.getParameter("operUserId");
+        if (StringUtils.isNotBlank(operUserId)){
+            terms.put("operUserId", operUserId);
+        }
+        // 操作人名称
+        String operUserName = request.getParameter("operUserName");
+        if (StringUtils.isNotBlank(operUserName)){
+            terms.put("operUserName", operUserName);
+        }
+        // 删除状态,0:未删除,1:已删除
+        String deleteStatus = request.getParameter("deleteStatus");
+        if (StringUtils.isNotBlank(deleteStatus)){
+            terms.put("deleteStatus", deleteStatus);
+        }
+        // 创建时间区间
+        String createStart = request.getParameter("createStart");
+        String createEnd = request.getParameter("createEnd");
+        if(StringUtils.isNotBlank(createStart) && StringUtils.isNotBlank(createEnd)) {
+            terms.put("createStart", createStart);
+            terms.put("createEnd", createEnd);
+        }
+        // 更新时间区间
+        String updateStart = request.getParameter("updateStart");
+        String updateEnd = request.getParameter("updateEnd");
+        if(StringUtils.isNotBlank(updateStart) && StringUtils.isNotBlank(updateEnd)) {
+            terms.put("updateStart", updateStart);
+            terms.put("updateEnd", updateEnd);
+        }
+        return terms;
+    }
+
+    /**
+    * 条件查询多个
+    * @url {ctx}/api/web/syTimeLimit/listQuery
+    * @return Object
+    */
+    @GetMapping("/listQuery")
+    public Object listQuery() {
+        try {
+            Map<String, Object> terms = getParameter();
+            return ReturnSucUtils.getRepInfo(service.listTerms(terms));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 条件分页查询
+    * @url {ctx}/api/web/syTimeLimit/pageQuery
+    * @param page 页码
+    * @param size 每页数量
+    * @return Object
+    */
+    @GetMapping("/pageQuery")
+    public Object pageQuery(@RequestParam(value = "page") int page, @RequestParam(value = "size") int size) {
+        try {
+            Map<String, Object> terms = getParameter();
+            Sort sort = Sort.by(Sort.Direction.DESC, "create_time");
+            PageRequest pageRequest = PageRequest.of(page-1, size, sort);
+            Page<SyTimeLimit> syTimeLimitPage = service.pageQuery(pageRequest, terms);
+            return ReturnSucUtils.getRepInfo( "处理成功", syTimeLimitPage);
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据编号查询单个
+    * @url {ctx}/api/web/syTimeLimit/getById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/getById")
+    public Object getById(@RequestParam(value = "id") String id) {
+        try {
+            return ReturnSucUtils.getRepInfo(service.getById(id));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据主键单个
+    * @url {ctx}/api/web/syTimeLimit/deleteById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/deleteById")
+    public Object deleteById(@RequestParam(value = "id") String id) {
+        try {
+            service.removeById(id);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 新增或更新对象
+    * @url {ctx}/api/web/syTimeLimit/saveSyTimeLimit
+    * @param syTimeLimit 实体对象
+    * @return Object
+    */
+    @PostMapping("/saveSyTimeLimit")
+    public Object saveSyTimeLimit(@RequestBody SyTimeLimit syTimeLimit) {
+        try {
+            service.saveSyTimeLimit(syTimeLimit);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+     * 条件分页查询
+     * @url {ctx}/api/web/syTimeLimit/getTimeLimit
+     * @param limitTable 时限对应表
+     * @param limitType 时限类型
+     * @return Object
+     */
+    @GetMapping("/getTimeLimit")
+    public Object getTimeLimit(@RequestParam(value = "limitTable") int limitTable, @RequestParam(value = "limitType") int limitType) {
+        try {
+            QueryWrapper<SyTimeLimit> syTimeLimitQueryWrapper = new QueryWrapper<>();
+            syTimeLimitQueryWrapper.eq("limit_table", limitTable).eq("limit_type", limitType);
+            SyTimeLimit syTimeLimit = service.getOne(syTimeLimitQueryWrapper);
+            return ReturnSucUtils.getRepInfo( "处理成功", syTimeLimit.getTimeTerm());
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+}
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/controller/web/SyTimeLimitWebController.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/controller/web/SyTimeLimitWebController.java
new file mode 100644
index 0000000..8c4dc66
--- /dev/null
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/controller/web/SyTimeLimitWebController.java
@@ -0,0 +1,209 @@
+package cn.huge.module.sy.controller.web;
+
+import cn.huge.base.common.utils.ReturnFailUtils;
+import cn.huge.base.common.utils.ReturnSucUtils;
+import cn.huge.module.sy.domain.po.SyTimeLimit;
+import cn.huge.module.sy.service.SyTimeLimitService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.google.common.collect.Maps;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Sort;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ * @title: 系统时限配置表接口api-web端
+ * @description: 系统时限配置表接口api-web端
+ * @company: hugeinfo
+ * @author: wangwh
+ * @time: 2024-09-04 16:48:57
+ * @version: 1.0.0
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/web/syTimeLimit")
+public class SyTimeLimitWebController {
+
+    @Autowired(required = false)
+    private HttpServletRequest request;
+
+    @Autowired
+    private SyTimeLimitService service;
+
+    /**
+    * 获取请求URL参数
+    * @return Map<String, Object>
+    */
+    private Map<String, Object> getParameter(){
+        Map<String, Object> terms = Maps.newHashMap();
+        // 主键编号
+        String id = request.getParameter("id");
+        if (StringUtils.isNotBlank(id)){
+            terms.put("id", id);
+        }
+        // 时限类型
+        String limitType = request.getParameter("limitType");
+        if (StringUtils.isNotBlank(limitType)){
+            terms.put("limitType", limitType);
+        }
+        // 时限名称
+        String limitTypeName = request.getParameter("limitTypeName");
+        if (StringUtils.isNotBlank(limitTypeName)){
+            terms.put("limitTypeName", limitTypeName);
+        }
+        // 时限对应表
+        String limitTable = request.getParameter("limitTable");
+        if (StringUtils.isNotBlank(limitTable)){
+            terms.put("limitTable", limitTable);
+        }
+        // 期限
+        String timeTerm = request.getParameter("timeTerm");
+        if (StringUtils.isNotBlank(timeTerm)){
+            terms.put("timeTerm", timeTerm);
+        }
+        // 期限单位
+        String termUnit = request.getParameter("termUnit");
+        if (StringUtils.isNotBlank(termUnit)){
+            terms.put("termUnit", termUnit);
+        }
+        // 操作人编号
+        String operUserId = request.getParameter("operUserId");
+        if (StringUtils.isNotBlank(operUserId)){
+            terms.put("operUserId", operUserId);
+        }
+        // 操作人名称
+        String operUserName = request.getParameter("operUserName");
+        if (StringUtils.isNotBlank(operUserName)){
+            terms.put("operUserName", operUserName);
+        }
+        // 删除状态,0:未删除,1:已删除
+        String deleteStatus = request.getParameter("deleteStatus");
+        if (StringUtils.isNotBlank(deleteStatus)){
+            terms.put("deleteStatus", deleteStatus);
+        }
+        // 创建时间区间
+        String createStart = request.getParameter("createStart");
+        String createEnd = request.getParameter("createEnd");
+        if(StringUtils.isNotBlank(createStart) && StringUtils.isNotBlank(createEnd)) {
+            terms.put("createStart", createStart);
+            terms.put("createEnd", createEnd);
+        }
+        // 更新时间区间
+        String updateStart = request.getParameter("updateStart");
+        String updateEnd = request.getParameter("updateEnd");
+        if(StringUtils.isNotBlank(updateStart) && StringUtils.isNotBlank(updateEnd)) {
+            terms.put("updateStart", updateStart);
+            terms.put("updateEnd", updateEnd);
+        }
+        return terms;
+    }
+
+    /**
+    * 条件查询多个
+    * @url {ctx}/api/web/syTimeLimit/listQuery
+    * @return Object
+    */
+    @GetMapping("/listQuery")
+    public Object listQuery() {
+        try {
+            Map<String, Object> terms = getParameter();
+            return ReturnSucUtils.getRepInfo(service.listTerms(terms));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 条件分页查询
+    * @url {ctx}/api/web/syTimeLimit/pageQuery
+    * @param page 页码
+    * @param size 每页数量
+    * @return Object
+    */
+    @GetMapping("/pageQuery")
+    public Object pageQuery(@RequestParam(value = "page") int page, @RequestParam(value = "size") int size) {
+        try {
+            Map<String, Object> terms = getParameter();
+            Sort sort = Sort.by(Sort.Direction.DESC, "create_time");
+            PageRequest pageRequest = PageRequest.of(page-1, size, sort);
+            Page<SyTimeLimit> syTimeLimitPage = service.pageQuery(pageRequest, terms);
+            return ReturnSucUtils.getRepInfo( "处理成功", syTimeLimitPage);
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据编号查询单个
+    * @url {ctx}/api/web/syTimeLimit/getById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/getById")
+    public Object getById(@RequestParam(value = "id") String id) {
+        try {
+            return ReturnSucUtils.getRepInfo(service.getById(id));
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 根据主键单个
+    * @url {ctx}/api/web/syTimeLimit/deleteById
+    * @param id 主键编号
+    * @return Object
+    */
+    @GetMapping("/deleteById")
+    public Object deleteById(@RequestParam(value = "id") String id) {
+        try {
+            service.removeById(id);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+    * 新增或更新对象
+    * @url {ctx}/api/web/syTimeLimit/saveSyTimeLimit
+    * @param syTimeLimit 实体对象
+    * @return Object
+    */
+    @PostMapping("/saveSyTimeLimit")
+    public Object saveSyTimeLimit(@RequestBody SyTimeLimit syTimeLimit) {
+        try {
+            service.saveSyTimeLimit(syTimeLimit);
+            return ReturnSucUtils.getRepInfo();
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+
+    /**
+     * 条件分页查询
+     * @url {ctx}/api/web/syTimeLimit/getTimeLimit
+     * @param limitTable 时限对应表
+     * @param limitType 时限类型
+     * @return Object
+     */
+    @GetMapping("/getTimeLimit")
+    public Object getTimeLimit(@RequestParam(value = "limitTable") int limitTable, @RequestParam(value = "limitType") int limitType) {
+        try {
+            QueryWrapper<SyTimeLimit> syTimeLimitQueryWrapper = new QueryWrapper<>();
+            syTimeLimitQueryWrapper.eq("limit_table", limitTable).eq("limit_type", limitType);
+            SyTimeLimit syTimeLimit = service.getOne(syTimeLimitQueryWrapper);
+            return ReturnSucUtils.getRepInfo( "处理成功", syTimeLimit.getTimeTerm());
+        } catch (Exception e) {
+            return ReturnFailUtils.getRepInfo();
+        }
+    }
+}
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/dao/mapper/SyTimeLimitMapper.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/dao/mapper/SyTimeLimitMapper.java
new file mode 100644
index 0000000..8d263cb
--- /dev/null
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/dao/mapper/SyTimeLimitMapper.java
@@ -0,0 +1,64 @@
+package cn.huge.module.sy.dao.mapper;
+
+import cn.huge.module.sy.domain.po.SyTimeLimit;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+* @title: 系统时限配置表持久层业务处理
+* @Description 此处仅涉及复杂SQL操作,务必不要在此再次写单表的CRUD操作,因为mybatisPlus已经实现。
+* @company: hugeinfo
+* @author: wangwh
+* @time: 2024-09-04 16:48:57
+* @version 1.0.0
+*/
+@Repository
+public interface SyTimeLimitMapper extends BaseMapper<SyTimeLimit>{
+
+    /**
+    * 更新对象
+    * @param entity 对象
+    */
+    void updateSyTimeLimit(@Param("entity") SyTimeLimit entity);
+
+    /**
+    * 条件更新对象
+    * @param entity 对象
+    * @param terms 条件
+    */
+    void updateSyTimeLimitTerms(@Param("entity") SyTimeLimit entity, @Param("terms") Map<String, Object> terms);
+
+    /**
+    * 根据编号物理删除
+    * @param id 查询条件集合
+    */
+    void deleteSyTimeLimit(@Param("id") String id);
+
+    /**
+    * 按条件查询结果集
+    * @param terms 查询条件集合
+    * @return List<SyTimeLimit>
+    */
+    List<SyTimeLimit> listTerms(@Param("terms") Map<String, Object> terms);
+
+    /**
+    * 按条件查询实体总数
+    * @param terms 查询条件集合
+    * @return long
+    */
+    long countTerms(@Param("terms") Map<String, Object> terms);
+
+    /**
+    * 按条件查询实体分页结果集
+    * @param page 分页对象
+    * @param terms 查询条件集合
+    * @return List<SyTimeLimit>
+    */
+    List<SyTimeLimit> pageTerms(@Param("page") PageRequest page, @Param("terms") Map<String, Object> terms);
+
+}
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/dao/mapper/xml/SyTimeLimitMapper.xml b/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/dao/mapper/xml/SyTimeLimitMapper.xml
new file mode 100644
index 0000000..91a0a70
--- /dev/null
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/dao/mapper/xml/SyTimeLimitMapper.xml
@@ -0,0 +1,166 @@
+<?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">
+<!-- 
+ * @title: 系统时限配置表
+ * @description: 自定义sql,请自行实现业务逻辑
+ * @company: hugeinfo
+ * @author: wangwh
+ * @time:2024-09-04 16:48:57
+ * @version 1.0.0
+-->
+<mapper namespace="cn.huge.module.sy.dao.mapper.SyTimeLimitMapper">
+    <!-- 结果集 -->
+    <resultMap id="dataResult" type="cn.huge.module.sy.domain.po.SyTimeLimit">
+            <result property="id" column="id"/>
+            <result property="limitType" column="limit_type"/>
+            <result property="limitTypeName" column="limit_type_name"/>
+            <result property="limitTable" column="limit_table"/>
+            <result property="timeTerm" column="time_term"/>
+            <result property="termUnit" column="term_unit"/>
+            <result property="operUserId" column="oper_user_id"/>
+            <result property="operUserName" column="oper_user_name"/>
+            <result property="deleteStatus" column="delete_status"/>
+            <result property="createTime" column="create_time"/>
+            <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <!-- 表 -->
+    <sql id='table-name'>dyh_sy_time_limit</sql>
+    <!-- 字段 -->
+    <sql id="column-part">
+        id,
+        limit_type,
+        limit_type_name,
+        limit_table,
+        time_term,
+        term_unit,
+        oper_user_id,
+        oper_user_name,
+        delete_status,
+        create_time,
+        update_time
+    </sql>
+    <!-- 更新实体字段 -->
+    <sql id="set-part">
+            <if test="entity.limitType != null">limit_type = #{entity.limitType},</if>
+            <if test="entity.limitTypeName != null">limit_type_name = #{entity.limitTypeName},</if>
+            <if test="entity.limitTable != null">limit_table = #{entity.limitTable},</if>
+            <if test="entity.timeTerm != null">time_term = #{entity.timeTerm},</if>
+            <if test="entity.termUnit != null">term_unit = #{entity.termUnit},</if>
+            <if test="entity.operUserId != null">oper_user_id = #{entity.operUserId},</if>
+            <if test="entity.operUserName != null">oper_user_name = #{entity.operUserName},</if>
+            <if test="entity.deleteStatus != null">delete_status = #{entity.deleteStatus},</if>
+            <if test="entity.createTime != null">create_time = #{entity.createTime},</if>
+            <if test="entity.updateTime != null">update_time = #{entity.updateTime}</if>
+    </sql>
+    <!-- 条件 -->
+    <sql id="where-part">
+        <if test="terms != null">
+            <where>
+                <if test="terms.id != null and terms.id !=''">
+                    and id = #{terms.id}
+                </if>
+                <if test="terms.limitType != null and terms.limitType !=''">
+                    and limit_type = #{terms.limitType}
+                </if>
+                <if test="terms.limitTypeName != null and terms.limitTypeName !=''">
+                    and limit_type_name = #{terms.limitTypeName}
+                </if>
+                <if test="terms.limitTable != null and terms.limitTable !=''">
+                    and limit_table = #{terms.limitTable}
+                </if>
+                <if test="terms.timeTerm != null and terms.timeTerm !=''">
+                    and time_term = #{terms.timeTerm}
+                </if>
+                <if test="terms.termUnit != null and terms.termUnit !=''">
+                    and term_unit = #{terms.termUnit}
+                </if>
+                <if test="terms.operUserId != null and terms.operUserId !=''">
+                    and oper_user_id = #{terms.operUserId}
+                </if>
+                <if test="terms.operUserName != null and terms.operUserName !=''">
+                    and oper_user_name = #{terms.operUserName}
+                </if>
+                <if test="terms.deleteStatus = null and terms.deleteStatus =''">
+                    and delete_status = 0
+                </if>
+                <if test="terms.deleteStatus != null and terms.deleteStatus !=''">
+                    and delete_status = #{terms.deleteStatus}
+                </if>
+                <if test="terms.createTime != null and terms.createTime !=''">
+                    and DATE_FORMAT(create_time,'%Y-%m-%d') = #{terms.createTime}
+                </if>
+                <if test="terms.createStart != null and terms.createStart !='' and terms.createEnd != null and terms.createEnd !=''">
+                    and (DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.createStart}
+                        and DATE_FORMAT(create_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.createEnd})
+                </if>
+                <if test="terms.updateTime != null and terms.updateTime !=''">
+                    and DATE_FORMAT(update_time,'%Y-%m-%d') = #{terms.updateTime}
+                </if>
+                <if test="terms.updateStart != null and terms.updateStart !='' and terms.updateEnd != null and terms.updateEnd !=''">
+                    and (DATE_FORMAT(update_time,'%Y-%m-%d') <![CDATA[ >= ]]> #{terms.updateStart}
+                        and DATE_FORMAT(update_time,'%Y-%m-%d') <![CDATA[ <= ]]> #{terms.updateEnd})
+                </if>
+            </where>
+        </if>
+    </sql>
+    <!-- 更新对象 -->
+    <update id="updateSyTimeLimit">
+        update
+        <include refid="table-name"/>
+        <set>
+            <include refid="set-part"/>
+        </set>
+        <where>
+            id = #{entity.id}
+        </where>
+    </update>
+    <!-- 条件更新对象 -->
+    <update id="updateSyTimeLimitTerms">
+        update
+        <include refid="table-name"/>
+        <set>
+            <include refid="set-part"/>
+        </set>
+        <include refid="where-part"/>
+    </update>
+    <!--  根据编号物理删除  -->
+    <delete id="deleteSyTimeLimit">
+        delete from
+        <include refid="table-name" />
+        where id = #{id}
+    </delete>
+    <!--  根据条件查询  -->
+    <select id="listTerms" resultMap="dataResult">
+        select
+        <include refid="column-part"/>
+        from
+        <include refid="table-name" />
+        <include refid="where-part"/>
+    </select>
+    <!--  根据条件统计  -->
+    <select id="countTerms" resultType="java.lang.Long">
+        select
+        COUNT(1)
+        from
+        <include refid="table-name" />
+        <include refid="where-part"/>
+    </select>
+    <!--  根据条件分页查询  -->
+    <select id="pageTerms" resultMap="dataResult">
+        SELECT
+        <include refid="column-part"/>
+        FROM
+        <include refid="table-name" />
+        <include refid="where-part"/>
+        <if test="page.sort != null">
+            <foreach collection="page.sort" item="s" index="index" separator="," open="order by ">
+                isnull(${s.property}), ${s.property} ${s.direction}
+            </foreach>
+        </if>
+        <if test="page.sort == null">
+            order by isnull(create_time), create_time desc
+        </if>
+        limit #{page.offset}, #{page.size}
+    </select>
+
+</mapper> 
\ No newline at end of file
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/domain/bo/SyTimeLimitBO.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/domain/bo/SyTimeLimitBO.java
new file mode 100644
index 0000000..b264ae3
--- /dev/null
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/domain/bo/SyTimeLimitBO.java
@@ -0,0 +1,17 @@
+package cn.huge.module.sy.domain.bo;
+
+import cn.huge.module.sy.domain.po.SyTimeLimit;
+
+/**
+ * @title: 系统时限配置表业务扩展类
+ * @description: 系统时限配置表业务扩展类
+ * @company: hugeinfo
+ * @author: wangwh
+ * @time: 2024-09-04 16:48:57
+ * @version: 1.0.0
+ * @see cn.huge.module.sy.domain.po.SyTimeLimit
+ */
+public class SyTimeLimitBO extends SyTimeLimit {
+
+
+}
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/domain/po/SyTimeLimit.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/domain/po/SyTimeLimit.java
new file mode 100644
index 0000000..a691189
--- /dev/null
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/domain/po/SyTimeLimit.java
@@ -0,0 +1,90 @@
+package cn.huge.module.sy.domain.po;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @title: 系统时限配置表数据库对应关系类
+ * @description: PO中的属性与数据表是一一对应关系,如需根据业务处理不同,请使用BO对象。
+ * @company:hugeinfo
+ * @author: wangwh
+ * @time: 2024-09-04 16:48:57
+ * @version 1.0.0
+ */
+@TableName(value = "dyh_sy_time_limit")
+@Data
+public class SyTimeLimit {
+
+    /**
+    * 主键编号
+    */
+    @TableId(value = "id")
+    private String id;
+
+    /**
+    * 时限类型
+    */
+    @TableField(value = "limit_type")
+    private String limitType;
+
+    /**
+    * 时限名称
+    */
+    @TableField(value = "limit_type_name")
+    private String limitTypeName;
+
+    /**
+    * 时限对应表
+    */
+    @TableField(value = "limit_table")
+    private String limitTable;
+
+    /**
+    * 期限
+    */
+    @TableField(value = "time_term")
+    private Integer timeTerm;
+
+    /**
+    * 期限单位
+    */
+    @TableField(value = "term_unit")
+    private String termUnit;
+
+    /**
+    * 操作人编号
+    */
+    @TableField(value = "oper_user_id")
+    private String operUserId;
+
+    /**
+    * 操作人名称
+    */
+    @TableField(value = "oper_user_name")
+    private String operUserName;
+
+    /**
+    * 删除状态,0:未删除,1:已删除
+    */
+    @TableLogic
+    @TableField(value = "delete_status")
+    private Integer deleteStatus;
+
+    /**
+    * 创建时间
+    */
+    @TableField(value = "create_time")
+    private Date createTime;
+
+    /**
+    * 状态时间
+    */
+    @TableField(value = "update_time")
+    private Date updateTime;
+
+}
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/service/SyTimeLimitService.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/service/SyTimeLimitService.java
new file mode 100644
index 0000000..f89b04c
--- /dev/null
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/sy/service/SyTimeLimitService.java
@@ -0,0 +1,133 @@
+package cn.huge.module.sy.service;
+
+import cn.huge.base.common.exception.ServiceException;
+import cn.huge.base.common.utils.DateUtils;
+import cn.huge.base.common.utils.IdUtils;
+import cn.huge.module.client.api.impl.UtilsClientImpl;
+import cn.huge.module.sy.dao.mapper.SyTimeLimitMapper;
+import cn.huge.module.sy.domain.po.SyTimeLimit;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.PostConstruct;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @title: 系统时限配置表业务逻辑处理
+ * @Description 系统时限配置表业务逻辑处理
+ * @company hugeinfo
+ * @author wangwh
+ * @Time 2024-09-04 16:48:57
+ * @version 1.0.0
+ */
+@Slf4j
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class SyTimeLimitService extends ServiceImpl<SyTimeLimitMapper, SyTimeLimit>{
+
+    @Autowired
+    private SyTimeLimitMapper mapper;
+
+    @Autowired
+    private UtilsClientImpl utilsClient;
+
+    /**
+    * 更新对象
+    * @param entity 对象
+    */
+    public void updateSyTimeLimit(SyTimeLimit entity){
+        try{
+            mapper.updateSyTimeLimit(entity);
+        }catch (Exception e){
+            log.error("[SyTimeLimitService.updateSyTimeLimit]调用失败,异常信息:"+e, e);
+            throw new ServiceException("SyTimeLimitService.updateSyTimeLimit", e);
+        }
+    }
+
+    /**
+    * 条件更新对象
+    * @param entity 对象
+    * @param terms 条件
+    */
+    public void updateSyTimeLimitTerms(SyTimeLimit entity, Map<String, Object> terms){
+        try{
+            mapper.updateSyTimeLimitTerms(entity, terms);
+        }catch (Exception e){
+            log.error("[SyTimeLimitService.updateSyTimeLimitTerms]调用失败,异常信息:"+e, e);
+            throw new ServiceException("SyTimeLimitService.updateSyTimeLimitTerms", e);
+        }
+    }
+
+    /**
+    * 根据编号物理删除
+    * @param id 查询条件集合
+    */
+    public void deleteSyTimeLimit(String id){
+        try{
+            mapper.deleteSyTimeLimit(id);
+        }catch (Exception e){
+            log.error("[SyTimeLimitService.deleteSyTimeLimit]调用失败,异常信息:"+e, e);
+            throw new ServiceException("SyTimeLimitService.deleteSyTimeLimit", e);
+        }
+    }
+
+    /**
+    * 按条件查询
+    * @param terms 条件
+    * @return List
+    */
+    public List<SyTimeLimit> listTerms(Map<String, Object> terms){
+        return mapper.listTerms(terms);
+    }
+
+    /**
+    * 按条件统计
+    * @param terms 条件
+    * @return long
+    */
+    public long countTerms(Map<String, Object> terms){
+        return mapper.countTerms(terms);
+    }
+
+    /**
+    * 按条件分页查询
+    * @param page 分页对象
+    * @param terms 条件
+    * @return Page
+    */
+    public Page<SyTimeLimit> pageQuery(PageRequest page, Map<String, Object> terms){
+        long total = mapper.countTerms(terms);
+        List<SyTimeLimit> content = mapper.pageTerms(page, terms);
+        return new PageImpl<SyTimeLimit>(content, page, total);
+    }
+
+    /**
+    * 新增或更新对象
+    * @param syTimeLimit 实体对象
+    */
+    public void saveSyTimeLimit(SyTimeLimit syTimeLimit){
+        try{
+            Date nowDate = DateUtils.getNowDate();
+            // 判断是否新增
+            if (IdUtils.checkNewId(syTimeLimit.getId())){
+                syTimeLimit.setId(utilsClient.getNewTimeId());
+                syTimeLimit.setCreateTime(nowDate);
+            }
+            syTimeLimit.setUpdateTime(nowDate);
+            this.saveOrUpdate(syTimeLimit);
+        }catch (Exception e){
+            log.error("[SyTimeLimitService.saveSyTimeLimit]调用失败,异常信息:"+e, e);
+            throw new ServiceException("SyTimeLimitService.saveSyTimeLimit", e);
+        }
+    }
+
+}
diff --git a/dyh-service/dyh-sys/src/main/java/cn/huge/module/utils/BaiduOcrUtils.java b/dyh-service/dyh-sys/src/main/java/cn/huge/module/utils/BaiduOcrUtils.java
index 93769d6..00d8834 100644
--- a/dyh-service/dyh-sys/src/main/java/cn/huge/module/utils/BaiduOcrUtils.java
+++ b/dyh-service/dyh-sys/src/main/java/cn/huge/module/utils/BaiduOcrUtils.java
@@ -6,9 +6,14 @@
 import cn.huge.module.sys.dto.IdcardOcrResultDTO;
 import com.baidu.aip.ocr.AipOcr;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.json.JSONArray;
 import org.json.JSONObject;
 
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @title: 百度云OCR工具类
@@ -28,6 +33,10 @@
     public static final String APP_ID = "27535980";
     public static final String API_KEY = "6U6tSA75gKf4UMXvHgDpzOC9";
     public static final String SECRET_KEY = "BBjjCDhy2sAVO0jfiaGn8OWIGE470lWU";
+    // 个人账号-18607214221
+    public static final String APP_ID_TEXT = "113806304";
+    public static final String API_KEY_TEXT = "ajKtDuIs8xr0XvjbUZLPGi8C";
+    public static final String SECRET_KEY_TEXT = "vgMrG5BJbUfGwKLda1yPWovTQWuRFWDB";
 
     public static void main(String[] args) {
 
@@ -81,6 +90,35 @@
         }
     }
 
+
+    public static Map<String, Object> ocrText(byte[] images) {
+        AipOcr client = new AipOcr(APP_ID_TEXT, API_KEY_TEXT, SECRET_KEY_TEXT);
+        // 传入可选参数调用接口
+        HashMap<String, String> options = new HashMap<String, String>();
+        options.put("language_type", "CHN_ENG");
+        options.put("detect_direction", "true");
+        options.put("detect_language", "true");
+        options.put("probability", "true");
+
+        Map<String, Object> map = new HashMap<String, Object>();
+        // 参数为本地图片二进制数组
+        JSONObject res = client.basicAccurateGeneral(images, options);
+        map.put("wordsResultNum", res.getInt("words_result_num"));
+        map.put("direction", res.getInt("direction"));
+
+        List<String> wordsResultList = new ArrayList<>();
+        JSONArray jsonArray = res.getJSONArray("words_result");
+        for(int i = 0; i < jsonArray.length(); i++){
+            JSONObject wordResult = jsonArray.getJSONObject(i);
+            String words = wordResult.getString("words");
+            if(StringUtils.isNotBlank(words)){
+                wordsResultList.add(words);
+            }
+        }
+        map.put("wordsResult", wordsResultList);
+        return map;
+    }
+
 }
 /**
  * -------------------_ooOoo_-------------------

--
Gitblit v1.8.0