From dedc706e97fb2d9c30376b84e5250f3f91b0e34f Mon Sep 17 00:00:00 2001
From: xusd <330628789@qq.com>
Date: Mon, 16 Jun 2025 13:46:57 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseInfoMapper.java        |   15 +++++
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseStatisticsBaseDTO.java |   24 +++++--
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml     |   23 +++++++
 dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java          |   63 +++++++++++++-------
 4 files changed, 95 insertions(+), 30 deletions(-)

diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseInfoMapper.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseInfoMapper.java
index 8d30bc6..8589b5e 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseInfoMapper.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseInfoMapper.java
@@ -143,6 +143,21 @@
     CaseStatisticsBaseDTO statisticsBase(@Param("terms") Map<String, Object> terms);
 
     /**
+     * 统计分析(基础)新版
+     * 这通常用于获取基础的案例统计数据,如总数、化解成功数、化解不成功数、化解中数等
+     * 新版统计逻辑:
+     * - 化解中包括待受理(info_process <= 2)
+     * - 化解成功(info_process = 3 且 medi_result = '22_00025-1')
+     * - 化解不成功(info_process = 3 且 medi_result = '22_00025-2')
+     * - 不予受理(info_process = 4)
+     *
+     * @param terms 包含统计条件的键值对,如时间范围、地区等
+     * @return 返回一个对象,包含基础的案例统计数据
+     */
+    CaseStatisticsBaseDTO statisticsBaseProcess(@Param("terms") Map<String, Object> terms);
+
+
+    /**
      * 统计一级分类下的案例类型数据
      * 这通常用于获取最顶层的案例类型分布
      *
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml
index 12315b8..d6d9f03 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml
@@ -1106,6 +1106,29 @@
         LEFT JOIN dyh_ct_unit c ON b.belong_unit_id = c.id
         <include refid="where-part-all"/>
     </select>
+
+    <!--  统计分析(基础)-统计调解过程  -->
+    <select id="statisticsBaseProcess" resultType="cn.huge.module.cases.domain.dto.CaseStatisticsBaseDTO">
+        SELECT
+        count(1) as totalNum,
+        sum(case when b.medi_result = '22_00025-1' and a.info_process = 3 then 1 else 0 end) as resolveNum,
+        sum(case when a.info_process <![CDATA[ < ]]> 3 then 1 else 0 end) as resolveingNum,
+        sum(case when b.medi_result = '22_00025-2' and a.info_process = 3 then 1 else 0 end) as unResolveNum,
+        sum(case when a.case_level = 1 then 1 else 0 end) as oneLevelNum,
+        sum(case when a.case_level = 2 then 1 else 0 end) as twoLevelNum,
+        sum(case when a.case_level = 3 then 1 else 0 end) as threeLevelNum,
+        sum(case when a.info_process = 2 then 1
+                when a.info_process = 1 then 1   else 0 end) as processNum,
+        sum(case when a.info_process = 3 and b.medi_result = '22_00025-1' then 1 else 0 end) as finishNum,
+        sum(case when a.info_process = 4 then 1 else 0 end) as rejectNum,
+        sum(case when a.info_process = 3 and b.medi_result = '22_00025-2' then 1 else 0 end) as failNum
+        FROM
+        dyh_case_info a
+        inner JOIN dyh_case_info_unfold b on a.id = b.id
+        LEFT JOIN dyh_ct_unit c ON b.belong_unit_id = c.id
+        <include refid="where-part-all"/>
+    </select>
+
     <!--  统计分析(类型)  -->
     <select id="statisticsTypeFirst" resultType="cn.huge.module.cases.domain.dto.CaseStatisticsTypeDTO">
         SELECT
diff --git a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseStatisticsBaseDTO.java b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseStatisticsBaseDTO.java
index 1e0b05b..b560082 100644
--- a/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseStatisticsBaseDTO.java
+++ b/dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseStatisticsBaseDTO.java
@@ -10,15 +10,23 @@
 @Data
 public class CaseStatisticsBaseDTO {
     private Integer totalNum=0;//总记录数
-    private Integer processNum=0;//办理中数量
-    private Integer finishNum=0;//已结案数量
+    // private Integer processNum=0;//办理中数量
+    // private Integer finishNum=0;//已结案数量
+    // private Integer rejectNum=0;//不予受理数量
+    // private Integer resolveNum=0;//化解成功数量
+    // private String resolveRate;//化解成功率
+    // private Integer unResolveNum=0;//化解不成功数量
+    // private String unResolveRate;//化解不成功率
+    // private Integer resolveingNum=0;//化解中数量
+    // private String resolveingRate;//化解中率
     private Integer rejectNum=0;//不予受理数量
-    private Integer resolveNum=0;//化解成功数量
-    private String resolveRate;//化解成功率
-    private Integer unResolveNum=0;//化解不成功数量
-    private String unResolveRate;//化解不成功率
-    private Integer resolveingNum=0;//化解中数量
-    private String resolveingRate;//化解中率
+    private String rejectRate;//不予受理率
+    private Integer processNum=0;//化解中数量
+    private String processRate;//化解中率
+    private Integer finishNum=0;//化解成功数量
+    private String finishRate;//化解成功率
+    private Integer failNum=0;//化解不成功数量
+    private String failRate;//化解不成功率
 
     private Integer oneLevelNum=0;//1级事件数量
     private Integer twoLevelNum=0;//2级事件数量
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 47b46d7..fe1e6ae 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
@@ -1307,6 +1307,31 @@
         return new PageImpl<CasePageDTO>(content, page, total);
     }
 
+        /**
+     * 统计调解过程
+     * 计算案件的调解过程相关统计数据,包括不予受理率、化解中率、化解成功率、化解不成功率等
+     * 
+     * @param terms 统计条件
+     * @return 包含调解过程统计数据的DTO对象
+     */
+    public CaseStatisticsBaseDTO statisticsProcess(Map<String, Object> terms) {
+        CaseStatisticsBaseDTO caseStatisticsBaseDTO = mapper.statisticsBaseProcess(terms);
+        Integer baseTotalNum = dellNull(caseStatisticsBaseDTO.getRejectNum()) + dellNull(caseStatisticsBaseDTO.getProcessNum()) + dellNull(caseStatisticsBaseDTO.getFinishNum()) + dellNull(caseStatisticsBaseDTO.getFailNum());
+        caseStatisticsBaseDTO.setRejectRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getRejectNum() * 100, baseTotalNum, 1));
+        caseStatisticsBaseDTO.setProcessRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getProcessNum() * 100, baseTotalNum, 1));
+        caseStatisticsBaseDTO.setFinishRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getFinishNum() * 100, baseTotalNum, 1));
+        caseStatisticsBaseDTO.setFailRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getFailNum() * 100, baseTotalNum, 1));
+        // 如果 baseTotalNum为0 设置 总数为0
+        caseStatisticsBaseDTO.setTotalNum(baseTotalNum);
+        
+        Integer levelTotalNum = caseStatisticsBaseDTO.getOneLevelNum() + caseStatisticsBaseDTO.getTwoLevelNum() + caseStatisticsBaseDTO.getThreeLevelNum();
+        caseStatisticsBaseDTO.setOneLevelRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getOneLevelNum() * 100, levelTotalNum, 1));
+        caseStatisticsBaseDTO.setTwoLevelRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getTwoLevelNum() * 100, levelTotalNum, 1));
+        caseStatisticsBaseDTO.setThreeLevelRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getThreeLevelNum() * 100, levelTotalNum, 1));
+        
+        return caseStatisticsBaseDTO;
+    }
+    
 
     /**
      * 纠纷态势
@@ -1391,16 +1416,8 @@
         }
         //基础数据统计
         terms.put("areaType", areaType);
-        CaseStatisticsBaseDTO caseStatisticsBaseDTO = mapper.statisticsBase(terms);
-        Integer baseTotalNum = dellNull(caseStatisticsBaseDTO.getResolveNum()) + dellNull(caseStatisticsBaseDTO.getUnResolveNum()) + dellNull(caseStatisticsBaseDTO.getResolveingNum());
-        Integer resolveTotalNum = dellNull(caseStatisticsBaseDTO.getResolveNum()) + dellNull(caseStatisticsBaseDTO.getUnResolveNum());
-        caseStatisticsBaseDTO.setResolveRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getResolveNum() * 100, resolveTotalNum, 1));
-        caseStatisticsBaseDTO.setUnResolveRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getUnResolveNum() * 100, resolveTotalNum, 1));
-        caseStatisticsBaseDTO.setResolveingRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getResolveingNum() * 100, baseTotalNum, 1));
-        Integer levelTotalNum = caseStatisticsBaseDTO.getOneLevelNum() + caseStatisticsBaseDTO.getTwoLevelNum() + caseStatisticsBaseDTO.getThreeLevelNum();
-        caseStatisticsBaseDTO.setOneLevelRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getOneLevelNum() * 100, levelTotalNum, 1));
-        caseStatisticsBaseDTO.setTwoLevelRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getTwoLevelNum() * 100, levelTotalNum, 1));
-        caseStatisticsBaseDTO.setThreeLevelRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getThreeLevelNum() * 100, levelTotalNum, 1));
+        // 调用统计调解过程的方法
+        CaseStatisticsBaseDTO caseStatisticsBaseDTO = statisticsProcess(terms);
         //区域数据统计
         List<CaseStatisticsAreaDTO> caseStatisticsAreaDTOS = new ArrayList<>();
         if (!isLast) {
@@ -2199,20 +2216,22 @@
         for (String key : originalTypeTerms.keySet()) {
             terms.put(key, originalTypeTerms.get(key));
         }
-
+        
+        // 调用统计调解过程的方法
+        CaseStatisticsBaseDTO processStats = statisticsProcess(terms);
+        
+        // 将调解过程统计数据合并到统计结果中
+        statistics.setTotalNum(processStats.getTotalNum());
+        statistics.setRejectNum(processStats.getRejectNum());
+        statistics.setProcessNum(processStats.getProcessNum());
+        statistics.setFinishNum(processStats.getFinishNum());
+        statistics.setFailNum(processStats.getFailNum());
+        statistics.setRejectRate(processStats.getRejectRate());
+        statistics.setProcessRate(processStats.getProcessRate());
+        statistics.setFinishRate(processStats.getFinishRate());
+        statistics.setFailRate(processStats.getFailRate());
         // 重新获取纠纷类型统计(基于完整的选择类型条件)
         List<CaseStatisticsTypeDTO> caseStatisticsTypeDTOS = mapper.statisticsTypeFirst(terms);
-
-        // 如果基于选择类型的查询结果为空,则使用全量数据进行纠纷类型统计
-        if (ObjectUtils.isEmpty(caseStatisticsTypeDTOS)) {
-            // 临时移除所有类型筛选条件,获取全量纠纷类型统计
-            terms.remove("canal");
-            terms.remove("canalSecond");
-            terms.remove("canalList");
-            terms.remove("canalSecondNot");
-            terms.remove("canalSecondAll");
-            caseStatisticsTypeDTOS = mapper.statisticsTypeFirst(terms);
-        }
 
         if (ObjectUtils.isNotEmpty(caseStatisticsTypeDTOS)) {
             sortType(caseStatisticsTypeDTOS);

--
Gitblit v1.8.0