广州市综治平台后端
huangh
2025-06-16 7f5c97eb5f34d31f2d73d846ab6fd2d36a9145c5
feat: 解纷台账添加纠纷过程统计字段
4 files modified
123 ■■■■ changed files
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/CaseInfoMapper.java 15 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml 23 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseStatisticsBaseDTO.java 24 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java 61 ●●●●● patch | view | raw | blame | history
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);
    /**
     * 统计一级分类下的案例类型数据
     * 这通常用于获取最顶层的案例类型分布
     *
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
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级事件数量
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) {
@@ -2200,19 +2217,21 @@
            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);