广州市综治平台后端
1 files added
23 files modified
1894 ■■■■ changed files
dyh-service/dyh-base/src/main/java/cn/huge/module/mediate/constant/CaseBaseConstsEnum.java 1 ●●●● patch | view | raw | blame | history
dyh-service/dyh-cust/src/main/java/cn/huge/module/client/api/impl/SysClientImpl.java 6 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dto/CtUnitTreeDTO.java 1 ●●●● patch | view | raw | blame | history
dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtAccountService.java 6 ●●●● patch | view | raw | blame | history
dyh-service/dyh-cust/src/main/java/cn/huge/module/utils/TreeUtils.java 47 ●●●● patch | view | raw | blame | history
dyh-service/dyh-disp/src/main/resources/config/application.yml 4 ●●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/controller/AnalysisWebController.java 5 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/dao/mapper/xml/AnalysisMapper.xml 507 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/domain/dto/TimeoutTaskInfoDTO.java 11 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/java/cn/huge/module/casebook/controller/web/CaseBookWebController.java 1 ●●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/java/cn/huge/module/casebook/service/CasebookInfoService.java 4 ●●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java 100 ●●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseTaskWebController.java 76 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml 40 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseStatisticsBaseDTO.java 17 ●●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseEvaluateService.java 26 ●●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java 612 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseTaskService.java 8 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/java/cn/huge/module/flow/service/FlowInfoService.java 2 ●●● patch | view | raw | blame | history
dyh-service/dyh-mediate/src/main/resources/config/application.yml 4 ●●●● patch | view | raw | blame | history
dyh-service/dyh-sys/src/main/java/cn/huge/module/timer/GridCityCaseTimer.java 371 ●●●● patch | view | raw | blame | history
dyh-service/dyh-sys/src/main/resources/config/application.yml 4 ●●●● patch | view | raw | blame | history
dyh-service/dyh-utils/src/main/java/cn/huge/module/mediate/utils/CaseNoUtils.java 24 ●●●● patch | view | raw | blame | history
sql/20250620.sql 17 ●●●●● patch | view | raw | blame | history
dyh-service/dyh-base/src/main/java/cn/huge/module/mediate/constant/CaseBaseConstsEnum.java
@@ -26,6 +26,7 @@
    CASE_CANAL_SECOND_5("22_00003-5", "劳动争议"),
    CASE_CANAL_SECOND_6("22_00003-6", "信访"),
    CASE_CANAL_SECOND_7("22_00003-7", "专项治理"),
    CASE_CANAL_SECOND_8("22_00003-8", "部门排查"),
    /**
     * 来访形式,24_00002-1:来访,24_00002-2:线上,24_00002-3:排查
     */
dyh-service/dyh-cust/src/main/java/cn/huge/module/client/api/impl/SysClientImpl.java
@@ -91,6 +91,12 @@
                if (item.isLastOrgRole() && item.getRoleName().contains("调度干部")) {
                    BeanUtils.copyProperties(item, nowRoleDTO);
                }
                if (item.isLastOrgRole() && item.getRoleCode().equals("22_00024-2")) {
                    BeanUtils.copyProperties(item, nowRoleDTO);
                }
//                if (item.isLastOrgRole() && item.getRoleName().contains("领导")) {
//                    BeanUtils.copyProperties(item, nowRoleDTO);
//                }
                if (item.getRoleName().contains("(M)")) {
                    BeanUtils.copyProperties(item, roleDTO);
                }
dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/dto/CtUnitTreeDTO.java
@@ -14,5 +14,6 @@
    private String label;//对象名称
    private String parentId;//父类ID
    private Boolean checkable;
    private Double sort;//排序
    private List<CtUnitTreeDTO> children;//子类集合
}
dyh-service/dyh-cust/src/main/java/cn/huge/module/ctuser/service/CtAccountService.java
@@ -626,7 +626,7 @@
        } else if (parts.length >= 4) {
            return parts[0] + parts[1] + parts[2] + "-" + parts[3];
        } else if (parts.length >= 5) {
            return parts[0] + parts[1] + parts[2] + "-" + parts[3]+"-" + parts[4];
            return parts[0] + parts[1] + parts[2] + "-" + parts[3] + "-" + parts[4];
        } else {
            return input; // 或抛出异常
        }
@@ -674,7 +674,7 @@
        GridUserRoleVo gridUserRoleVo = new GridUserRoleVo();
        gridUserRoleVo.setUserId(userId);
        GridUserRoleDTO userRoleDTO = sysClient.getUserRoleList(gridUserRoleVo);
        if (StringUtils.isEmpty(userRoleDTO.getRoleName()) || !userRoleDTO.getRoleName().contains("(M)")) {
        if (StringUtils.isEmpty(userRoleDTO.getRoleName()) || (!userRoleDTO.getRoleName().contains("(M)") && !userRoleDTO.getRoleName().contains("领导") && !userRoleDTO.getRoleName().contains("调度干部"))) {
            return ReturnFailUtils.getRepInfo("该用户没有矛调系统的权限");
        }
        CtUserole ctUserole = new CtUserole();
@@ -730,7 +730,7 @@
            switch (grade) {
                case 1:
                    //市级级
                    ctUnit.setLevel(grade );
                    ctUnit.setLevel(grade);
                    ctUnit.setUnitGrade(grade);
                    ctUnit.setUnitType(UserBaseConsts.UNIT_TYPE_102);
                    ctUnit.setParentId("2024000000000001");
dyh-service/dyh-cust/src/main/java/cn/huge/module/utils/TreeUtils.java
@@ -4,9 +4,7 @@
import cn.huge.module.ctuser.dto.CtUnitTreeDTO;
import org.apache.commons.collections.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.*;
/**
 * @author zhouxiantao
@@ -60,20 +58,22 @@
        List<CtUnitTreeDTO> termsList = new ArrayList<>();
        if(ObjectUtils.isNotEmpty(termsSet)){
            for (CtUnitTreeDTO selectTermDTO : termsSet) {
                termsList.add(selectTermDTO);
            }
            termsList.sort((o1, o2)->{
                String s1 = o1.getValue().replaceAll("[^0-9]", "");
                String s1 = selectTermDTO.getValue().replaceAll("[^0-9]", "");
                if(ObjectUtils.isEmpty(s1)){
                    s1 = "0";
                }
                String s2 = o2.getValue().replaceAll("[^0-9]", "");
                if(ObjectUtils.isEmpty(s2)){
                    s2 = "0";
                }
                Double totalScore1 = Double.valueOf(s1);
                Double totalScore2 = Double.valueOf(s2);
                if(totalScore1 < totalScore2) {
                selectTermDTO.setSort(totalScore1);
                String area = getArea(selectTermDTO.getLabel());
                if(ObjectUtils.isNotEmpty(area)){
                    selectTermDTO.setSort(Double.valueOf(area));
                }
                termsList.add(selectTermDTO);
            }
            termsList.sort((o1, o2)->{
                Double totalScore1 = o1.getSort();
                Double totalScore2 = o2.getSort();
                if(totalScore1 > totalScore2) {
                    return 1;
                }else if (totalScore1.equals(totalScore2)) {
                    return 0;
@@ -85,4 +85,25 @@
        return termsList;
    }
    public static String getArea(String areaName) {
        Map<String, String> map = new HashMap<>();
        map.put("越秀区", "2");
        map.put("海珠区", "3");
        map.put("荔湾区", "4");
        map.put("天河区", "5");
        map.put("白云区", "6");
        map.put("黄埔区", "7");
        map.put("花都区", "8");
        map.put("番禺区", "9");
        map.put("南沙区", "10");
        map.put("从化区", "11");
        map.put("增城区", "12");
        for (String s : map.keySet()) {
            if(areaName.contains(s)){
                return map.get(s);
            }
        }
        return null;
    }
}
dyh-service/dyh-disp/src/main/resources/config/application.yml
@@ -3,8 +3,8 @@
  profiles:
    active:
#      - dev
#      - test
      - prod
      - test
#      - prod
  devtools:
    restart:
dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/controller/AnalysisWebController.java
@@ -205,6 +205,11 @@
        if (StringUtils.isNotBlank(assistUnitId)){
            terms.put("assistUnitId", assistUnitId);
        }
        //任务是否完成
        String taskStatus = request.getParameter("taskStatus");
        if (StringUtils.isNotBlank(taskStatus)){
            terms.put("taskStatus", taskStatus);
        }
        return terms;
    }
    /**
dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/dao/mapper/xml/AnalysisMapper.xml
@@ -29,13 +29,14 @@
                t1.road,
            </if>
            <if test="terms.queRoad != null and terms.queRoad !=''">
                (case when t1.village_name = '' or t1.village_name is null then '本级' else t1.village_name end)as groupName,
                (case when t1.village_name = '' or t1.village_name is null then '本级' else t1.village_name end)as
                groupName,
                t1.village as groupCode,
                t1.village,
            </if>
<!--            <if test="terms.unitIds != null and terms.unitIds !=''">-->
<!--                t1.unit_name as groupName,-->
<!--            </if>-->
            <!--            <if test="terms.unitIds != null and terms.unitIds !=''">-->
            <!--                t1.unit_name as groupName,-->
            <!--            </if>-->
        </if>
    </sql>
@@ -54,9 +55,9 @@
            <if test="terms.queRoad != null and terms.queRoad !=''">
                (case when t1.village = '' or t1.village is null then '本级' else t1.village end)
            </if>
<!--            <if test="terms.unitIds != null and terms.unitIds !=''">-->
<!--                t1.id-->
<!--            </if>-->
            <!--            <if test="terms.unitIds != null and terms.unitIds !=''">-->
            <!--                t1.id-->
            <!--            </if>-->
        </if>
    </sql>
@@ -101,16 +102,20 @@
            <if test="terms.unitIds != null and terms.unitIds !=''">
                and t1.id in(${terms.unitIds})
            </if>
        </if>
    </sql>
    <!--  统计任务平均时长  -->
    <select id="statisticsAVG" resultType="cn.huge.module.analysis.domain.dto.AvgDurationDTO">
        select AVG(case when (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP') and t2.status = 2 then ROUND(DATEDIFF(SECOND, t2.create_time, t2.handle_time) / 3600.0, 2) end) as fp,
            AVG(case when (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL')  and t2.status = 2 then ROUND(DATEDIFF(SECOND, t2.create_time, t2.handle_time) / 3600.0, 2) end) as sl,
            AVG(case when (t2.node_id = 'BLFK' and t2.status = '2') and t2.status = 2 then ROUND(DATEDIFF(SECOND, t2.create_time, t2.handle_time) / 3600.0, 2) end) as blz
            from dyh_ct_unit t1 left join dyh_case_task t2 on t1.id = t2.handle_unit_id
                left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        select AVG(case when (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id =
        'DFP') and t2.status = 2 then ROUND(DATEDIFF(SECOND, t2.create_time, t2.handle_time) / 3600.0, 2) end) as fp,
        AVG(case when (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL')
        and t2.status = 2 then ROUND(DATEDIFF(SECOND, t2.create_time, t2.handle_time) / 3600.0, 2) end) as sl,
        AVG(case when (t2.node_id = 'BLFK' and t2.status = '2') and t2.status = 2 then ROUND(DATEDIFF(SECOND,
        t2.create_time, t2.handle_time) / 3600.0, 2) end) as blz
        from dyh_ct_unit t1 left join dyh_case_task t2 on t1.id = t2.handle_unit_id
        left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        where
        t1.delete_status = 0
        and t2.delete_status = 0
@@ -122,29 +127,59 @@
    <select id="statisticsGroupAVG" resultType="cn.huge.module.analysis.domain.dto.AvgDurationGroupDTO">
        select
        <include refid="selectPart"/>
        AVG(case when (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP') and t2.status = 2 then ROUND(DATEDIFF(SECOND, t2.create_time, t2.handle_time) / 3600.0, 2) end) as fp,
        count(case when (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP') and t2.status = 2 then t2.id end) as fps,
        AVG(case when (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL')  and t2.status = 2 then ROUND(DATEDIFF(SECOND, t2.create_time, t2.handle_time) / 3600.0, 2) end) as sl,
        count(case when (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL')  and t2.status = 2 then t2.id end) as sls,
        AVG(case when (t2.node_id = 'BLFK' and t2.status = '2') and t2.status = 2 then ROUND(DATEDIFF(SECOND, t2.create_time, t2.handle_time) / 3600.0, 2) end) as blz,
        AVG(case when (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP')
        and t2.status = 2 then ROUND(DATEDIFF(SECOND, t2.create_time, t2.handle_time) / 3600.0, 2) end) as fp,
        count(case when (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP')
        and t2.status = 2 then t2.id end) as fps,
        AVG(case when (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL')
        and t2.status = 2 then ROUND(DATEDIFF(SECOND, t2.create_time, t2.handle_time) / 3600.0, 2) end) as sl,
        count(case when (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL')
        and t2.status = 2 then t2.id end) as sls,
        AVG(case when (t2.node_id = 'BLFK' and t2.status = '2') and t2.status = 2 then ROUND(DATEDIFF(SECOND,
        t2.create_time, t2.handle_time) / 3600.0, 2) end) as blz,
        count(case when (t2.node_id = 'BLFK' and t2.status = '2') and t2.status = 2 then t2.id end) as bls
        from dyh_ct_unit t1 left join dyh_case_task t2 on t1.id = t2.handle_unit_id
            left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        where
        t1.delete_status = 0
        and t2.delete_status = 0
        and t3.delete_status = 0
        <include refid="statisticsAVG-wherePart"/>
        group by <include refid="groupPart"/>
        group by
        <include refid="groupPart"/>
    </select>
    <!--  分组统计任务  -->
    <select id="statisticsQuantity" resultType="cn.huge.module.analysis.domain.dto.StatisticsGroupDTO">
        select
        count(case when (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP') and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1)) then t2.id end) as fpcs,
        count(case when (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL') and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1)) then t2.id end) as slcs
        <if test="terms.taskStatus != null and terms.taskStatus == 1 ">
            count(case when (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP')
            and ((t2.overtime_status = 1 and t2.status = 2)) then t2.id end) as
            fpcs,
            count(case when (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL')
            and ((t2.overtime_status = 1 and t2.status = 2)) then t2.id end) as
            slcs
        </if>
        <if test="terms.taskStatus != null and terms.taskStatus == 0">
            count(case when (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP')
            and ((sysdate > expire_time and t2.status = 1)) then t2.id end) as
            fpcs,
            count(case when (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL')
            and ((sysdate > expire_time and t2.status = 1)) then t2.id end) as
            slcs
        </if>
        <if test="terms.taskStatus == null or terms.taskStatus ==''">
            count(case when (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP')
            and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1)) then t2.id end) as
            fpcs,
            count(case when (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL')
            and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1)) then t2.id end) as
            slcs
        </if>
        from dyh_ct_unit t1 left join dyh_case_task t2 on t1.id = t2.cande_unit_id
            left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        where
        t1.delete_status = 0
        and t2.delete_status = 0
@@ -155,10 +190,14 @@
    <!--  首页-统计超时任务  -->
    <select id="homeStatisticsQuantity" resultType="cn.huge.module.analysis.domain.dto.StatisticsGroupDTO">
        select
        count(case when (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP') and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1)) then t2.id end) as fpcs,
        count(case when (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL') and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1)) then t2.id end) as slcs
        count(case when (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP')
        and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1)) then t2.id end) as
        fpcs,
        count(case when (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL')
        and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1)) then t2.id end) as
        slcs
        from dyh_ct_unit t1 left join dyh_case_task t2 on t1.id = t2.cande_unit_id
            left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        where
        t1.delete_status = 0
        and t2.delete_status = 0
@@ -212,7 +251,8 @@
        from
        (
        select ROUND(DATEDIFF(SECOND, t2.appear_time, t2.audit_time) / 3600.0, 2) as usetime_hour
        from dyh_ct_unit t1 left join dyh_case_appear t2 on t1.id = t2.audit_unit_id left join dyh_case_info t3 on t2.case_id = t3.id
        from dyh_ct_unit t1 left join dyh_case_appear t2 on t1.id = t2.audit_unit_id left join dyh_case_info t3 on
        t2.case_id = t3.id
        where t2.apply_status = 1
        <if test="terms != null">
            <if test="terms.closeStart != null and terms.closeStart !='' and terms.closeEnd != null and terms.closeEnd !=''">
@@ -223,7 +263,8 @@
        </if>
        union all
        select ROUND(DATEDIFF(SECOND, t2.apply_time, t2.audit_time) / 3600.0, 2) as usetime_hour
        from dyh_ct_unit t1 left join dyh_case_assist_apply t2 on t1.id = t2.audit_unit_id left join dyh_case_info t3 on t2.case_id = t3.id
        from dyh_ct_unit t1 left join dyh_case_assist_apply t2 on t1.id = t2.audit_unit_id left join dyh_case_info t3 on
        t2.case_id = t3.id
        where t2.apply_status = 1
        <if test="terms != null">
            <if test="terms.closeStart != null and terms.closeStart !='' and terms.closeEnd != null and terms.closeEnd !=''">
@@ -234,7 +275,8 @@
        </if>
        union all
        select ROUND(DATEDIFF(SECOND, t2.return_time, t2.audit_time) / 3600.0, 2) as usetime_hour
        from dyh_ct_unit t1 left join dyh_case_return t2 on t1.id = t2.audit_unit_id left join dyh_case_info t3 on t2.case_id = t3.id
        from dyh_ct_unit t1 left join dyh_case_return t2 on t1.id = t2.audit_unit_id left join dyh_case_info t3 on
        t2.case_id = t3.id
        where t2.return_status = 1
        <if test="terms != null">
            <if test="terms.closeStart != null and terms.closeStart !='' and terms.closeEnd != null and terms.closeEnd !=''">
@@ -245,7 +287,8 @@
        </if>
        union all
        select ROUND(DATEDIFF(SECOND, t2.apply_time, t2.audit_time) / 3600.0, 2) as usetime_hour
        from dyh_ct_unit t1 left join dyh_case_windup_apply t2 on t1.id = t2.audit_unit_id left join dyh_case_info t3 on t2.case_id = t3.id
        from dyh_ct_unit t1 left join dyh_case_windup_apply t2 on t1.id = t2.audit_unit_id left join dyh_case_info t3 on
        t2.case_id = t3.id
        where t2.apply_status = 1
        <if test="terms != null">
            <if test="terms.closeStart != null and terms.closeStart !='' and terms.closeEnd != null and terms.closeEnd !=''">
@@ -261,12 +304,14 @@
    <select id="statisticsApplyGroup" resultType="cn.huge.module.analysis.domain.dto.AvgDurationGroupDTO">
        select
        <include refid="selectPart"/>
               avg(usetime_hour) as sp,
                count(distinct ownerId) as sps
        avg(usetime_hour) as sp,
        count(distinct ownerId) as sps
        from
        (
        select ROUND(DATEDIFF(SECOND, t2.appear_time, t2.audit_time) / 3600.0, 2) as usetime_hour, t2.id as ownerId, t1.*
        from dyh_ct_unit t1 left join dyh_case_appear t2 on t1.id = t2.audit_unit_id left join dyh_case_info t3 on t2.case_id = t3.id
        select ROUND(DATEDIFF(SECOND, t2.appear_time, t2.audit_time) / 3600.0, 2) as usetime_hour, t2.id as ownerId,
        t1.*
        from dyh_ct_unit t1 left join dyh_case_appear t2 on t1.id = t2.audit_unit_id left join dyh_case_info t3 on
        t2.case_id = t3.id
        where t2.apply_status = 1 and t2.audit_time != t2.appear_time
        <if test="terms != null">
            <if test="terms.closeStart != null and terms.closeStart !='' and terms.closeEnd != null and terms.closeEnd !=''">
@@ -277,7 +322,8 @@
        </if>
        union all
        select ROUND(DATEDIFF(SECOND, t2.apply_time, t2.audit_time) / 3600.0, 2) as usetime_hour, t2.id as ownerId, t1.*
        from dyh_ct_unit t1 left join dyh_case_assist_apply t2 on t1.id = t2.audit_unit_id left join dyh_case_info t3 on t2.case_id = t3.id
        from dyh_ct_unit t1 left join dyh_case_assist_apply t2 on t1.id = t2.audit_unit_id left join dyh_case_info t3 on
        t2.case_id = t3.id
        where t2.apply_status = 1 and t2.audit_time != t2.apply_time
        <if test="terms != null">
            <if test="terms.closeStart != null and terms.closeStart !='' and terms.closeEnd != null and terms.closeEnd !=''">
@@ -287,8 +333,10 @@
            <include refid="statisticsApplyAVG-wherePart"/>
        </if>
        union all
        select ROUND(DATEDIFF(SECOND, t2.return_time, t2.audit_time) / 3600.0, 2) as usetime_hour, t2.id as ownerId, t1.*
        from dyh_ct_unit t1 left join dyh_case_return t2 on t1.id = t2.audit_unit_id left join dyh_case_info t3 on t2.case_id = t3.id
        select ROUND(DATEDIFF(SECOND, t2.return_time, t2.audit_time) / 3600.0, 2) as usetime_hour, t2.id as ownerId,
        t1.*
        from dyh_ct_unit t1 left join dyh_case_return t2 on t1.id = t2.audit_unit_id left join dyh_case_info t3 on
        t2.case_id = t3.id
        where t2.return_status = 1 and t2.audit_time!= t2.return_time
        <if test="terms != null">
            <if test="terms.closeStart != null and terms.closeStart !='' and terms.closeEnd != null and terms.closeEnd !=''">
@@ -299,7 +347,8 @@
        </if>
        union all
        select ROUND(DATEDIFF(SECOND, t2.apply_time, t2.audit_time) / 3600.0, 2) as usetime_hour, t2.id as ownerId, t1.*
        from dyh_ct_unit t1 left join dyh_case_windup_apply t2 on t1.id = t2.audit_unit_id left join dyh_case_info t3 on t2.case_id = t3.id
        from dyh_ct_unit t1 left join dyh_case_windup_apply t2 on t1.id = t2.audit_unit_id left join dyh_case_info t3 on
        t2.case_id = t3.id
        where t2.apply_status = 1 and t2.audit_time != t2.apply_time
        <if test="terms != null">
            <if test="terms.closeStart != null and terms.closeStart !='' and terms.closeEnd != null and terms.closeEnd !=''">
@@ -309,7 +358,8 @@
            <include refid="statisticsApplyAVG-wherePart"/>
        </if>
        ) t1
        group by <include refid="groupPart"/>
        group by
        <include refid="groupPart"/>
    </select>
    <!-- 条件 -->
@@ -354,12 +404,14 @@
        <if test="terms.unitIds != null and terms.unitIds !=''">
            and t1.id in(${terms.unitIds})
        </if>
    </sql>
    <!--  统计督办平均时长  -->
    <select id="statisticsSuperviseAVG" resultType="cn.huge.module.analysis.domain.dto.AvgDurationDTO">
        select AVG(ROUND(DATEDIFF(SECOND, t2.sup_time, t2.reply_time) / 3600.0, 2)) as db
        from dyh_ct_unit t1 left join dyh_case_supervise t2 on t1.id = t2.quilt_unit_id left join dyh_case_info t3 on t2.case_id = t3.id
        from dyh_ct_unit t1 left join dyh_case_supervise t2 on t1.id = t2.quilt_unit_id left join dyh_case_info t3 on
        t2.case_id = t3.id
        where
        <include refid="statisticsSuperviseAVG-wherePart"/>
        and t2.sup_status = 1
@@ -367,20 +419,34 @@
    <!--  分组统计督办平均时长  -->
    <select id="statisticsSuperviseGroup" resultType="cn.huge.module.analysis.domain.dto.AvgDurationGroupDTO">
        select <include refid="selectPart"/>
               AVG(ROUND(DATEDIFF(SECOND, t2.sup_time, t2.reply_time) / 3600.0, 2)) as db, count(case when sup_status = 1 then t2.id end ) as hfs
        from dyh_ct_unit t1 left join dyh_case_supervise t2 on t1.id = t2.quilt_unit_id left join dyh_case_info t3 on t2.case_id = t3.id
        select
        <include refid="selectPart"/>
        AVG(ROUND(DATEDIFF(SECOND, t2.sup_time, t2.reply_time) / 3600.0, 2)) as db, count(case when sup_status = 1 then
        t2.id end ) as hfs
        from dyh_ct_unit t1 left join dyh_case_supervise t2 on t1.id = t2.quilt_unit_id left join dyh_case_info t3 on
        t2.case_id = t3.id
        where
        <include refid="statisticsSuperviseAVG-wherePart"/>
        and t2.sup_status = 1
        group by <include refid="groupPart"/>
        group by
        <include refid="groupPart"/>
    </select>
    <!--  分组查询超时数量  -->
    <select id="statisticsSuperviseQuantity" resultType="cn.huge.module.analysis.domain.dto.StatisticsGroupDTO">
        select
            count(case when ((sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0) or (t2.overtime_status = '1')) then t2.id end) as dbcs
        from dyh_ct_unit t1 left join dyh_case_supervise t2 on t1.id = t2.quilt_unit_id left join dyh_case_info t3 on t2.case_id = t3.id
        <if test="terms.taskStatus != null and terms.taskStatus == 1 ">
            count(case when (t2.overtime_status = '1') then t2.id end) as dbcs
        </if>
        <if test="terms.taskStatus != null and terms.taskStatus == 0">
            count(case when (sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0) then t2.id end) as dbcs
        </if>
        <if test="terms.taskStatus == null or terms.taskStatus ==''">
            count(case when ((sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0) or
            (t2.overtime_status = '1')) then t2.id end) as dbcs
        </if>
        from dyh_ct_unit t1 left join dyh_case_supervise t2 on t1.id = t2.quilt_unit_id left join dyh_case_info t3 on
        t2.case_id = t3.id
        where
        <include refid="statisticsSuperviseAVG-wherePart"/>
    </select>
@@ -388,14 +454,17 @@
    <!--  首页-查询超时数量  -->
    <select id="homeStatisticsSuperviseQuantity" resultType="cn.huge.module.analysis.domain.dto.StatisticsGroupDTO">
        select
        count(case when ((sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0) or (t2.overtime_status = '1')) then t2.id end) as dbcs
        from dyh_ct_unit t1 left join dyh_case_supervise t2 on t1.id = t2.quilt_unit_id left join dyh_case_info t3 on t2.case_id = t3.id
        count(case when ((sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0) or
        (t2.overtime_status = '1')) then t2.id end) as dbcs
        from dyh_ct_unit t1 left join dyh_case_supervise t2 on t1.id = t2.quilt_unit_id left join dyh_case_info t3 on
        t2.case_id = t3.id
        where
        <include refid="statisticsSuperviseAVG-wherePart"/>
    </select>
    <!--  统计重复来访案件数量  -->
    <select id="countRepeatedCases" resultType="cn.huge.module.analysis.domain.dto.CountRepeateDto" parameterType="cn.huge.module.analysis.domain.vo.CountRepeateVo">
    <select id="countRepeatedCases" resultType="cn.huge.module.analysis.domain.dto.CountRepeateDto"
            parameterType="cn.huge.module.analysis.domain.vo.CountRepeateVo">
        WITH RepeatedPersons AS (
        SELECT true_name, mobile, certi_no
        FROM gzdyh_test.dyh_case_person
@@ -408,7 +477,8 @@
        MinCaseIds AS (
        SELECT rp.true_name, rp.mobile, rp.certi_no, MIN(p.case_id) as min_case_id
        FROM RepeatedPersons rp
        JOIN gzdyh_test.dyh_case_person p ON rp.true_name = p.true_name AND rp.mobile = p.mobile AND rp.certi_no = p.certi_no
        JOIN gzdyh_test.dyh_case_person p ON rp.true_name = p.true_name AND rp.mobile = p.mobile AND rp.certi_no =
        p.certi_no
        GROUP BY rp.true_name, rp.mobile, rp.certi_no
        ),
        FilteredCases AS (
@@ -478,15 +548,15 @@
            GROUP BY case_type_first_name
        </if>
        <if test="groupByArea != null and groupByArea != ''">
<!--            AND road_name is not NULL-->
            <!--            AND road_name is not NULL-->
            GROUP BY area_name
        </if>
        <if test="groupByRoad != null and groupByRoad != ''">
<!--            AND road_name is not NULL-->
            <!--            AND road_name is not NULL-->
            GROUP BY road_name
        </if>
        <if test="groupByTime != null and groupByTime != ''">
            GROUP BY  groupByType
            GROUP BY groupByType
        </if>
    </select>
@@ -495,31 +565,51 @@
        select
        COUNT(1)
        from dyh_ct_unit t1 left join dyh_case_task t2 on t1.id = t2.cande_unit_id
            left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        where
        t1.delete_status = 0
        and t2.delete_status = 0
        and t3.delete_status = 0
        <include refid="statisticsAVG-wherePart"/>
        and (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP') and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1))
        and (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP')
        <if test="terms.taskStatus != null and terms.taskStatus == 1 ">
            and (t2.overtime_status = 1 and t2.status = 2)
        </if>
        <if test="terms.taskStatus != null and terms.taskStatus == 0">
            and (sysdate > expire_time and t2.status = 1)
        </if>
        <if test="terms.taskStatus == null or terms.taskStatus ==''">
            and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1))
        </if>
    </select>
    <!--  查询分派超时案件  -->
    <select id="listFPQuantity" resultType="cn.huge.module.analysis.domain.dto.TimeoutTaskInfoDTO">
        select t2.case_id as caseId, t2.id as caseTaskId, t2.create_time as turnaroundTime,
        (case t2.status when 2 then t2.overtime_hour when 1 then DATEDIFF(hh, t2.expire_time, sysdate) end) as timeLimit,
        select t2.case_id as caseId, t2.id as caseTaskId, t2.create_time as turnaroundTime, t2.node_name as nodeName,
        (case t2.status when 1 then 0 when 2 then 1 end) as taskStatus,
        (case t2.status when 2 then t2.overtime_hour when 1 then DATEDIFF(hh, t2.expire_time, sysdate) end) as
        timeLimit,
        t3.case_level as caseGrade, t3.canal_name as caseSource, t4.mediator as mediator, t3.status_name as statusName,
        concat_ws('', ifnull(t3.case_type_first_name, ''), '/' , ifnull(t3.case_type_name, '')) as caseType,
        concat(t3.que_area_name, t3.que_road_name) as queAddress, t2.cande_unit_name as candeUnitName,
        (select count(1) from dyh_case_supervise where case_id = t2.case_id) as superviseCount
        from dyh_ct_unit t1 left join dyh_case_task t2 on t1.id = t2.cande_unit_id
            left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        where
        t1.delete_status = 0
        and t2.delete_status = 0
        and t3.delete_status = 0
        <include refid="statisticsAVG-wherePart"/>
        and (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP') and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1))
        and (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP')
        <if test="terms.taskStatus != null and terms.taskStatus == 1 ">
            and (t2.overtime_status = 1 and t2.status = 2)
        </if>
        <if test="terms.taskStatus != null and terms.taskStatus == 0">
            and (sysdate > expire_time and t2.status = 1)
        </if>
        <if test="terms.taskStatus == null or terms.taskStatus ==''">
            and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1))
        </if>
        <if test="page.sort != null">
            <foreach collection="page.sort" item="s" index="index" separator="," open="order by ">
                isnull(${s.property}), ${s.property} ${s.direction}
@@ -536,7 +626,7 @@
        select
        COUNT(1)
        from dyh_ct_unit t1 left join dyh_case_task t2 on t1.id = t2.cande_unit_id
            left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        where
        t1.delete_status = 0
        and t2.delete_status = 0
@@ -544,19 +634,29 @@
        <include refid="statisticsAVG-wherePart"/>
        and
        (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL')
          and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1) )
        <if test="terms.taskStatus != null and terms.taskStatus == 1 ">
            and (t2.overtime_status = 1 and t2.status = 2)
        </if>
        <if test="terms.taskStatus != null and terms.taskStatus == 0">
            and (sysdate > expire_time and t2.status = 1)
        </if>
        <if test="terms.taskStatus == null or terms.taskStatus ==''">
            and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1))
        </if>
    </select>
    <!--  查询受理超时案件  -->
    <select id="listSLQuantity" resultType="cn.huge.module.analysis.domain.dto.TimeoutTaskInfoDTO">
        select t2.case_id as caseId, t2.id as caseTaskId,t2.create_time as turnaroundTime,
        (case t2.status when 2 then t2.overtime_hour when 1 then DATEDIFF(hh, t2.expire_time, sysdate) end) as timeLimit,
        select t2.case_id as caseId, t2.id as caseTaskId,t2.create_time as turnaroundTime, t2.node_name as nodeName,
        (case t2.status when 1 then 0 when 2 then 1 end) as taskStatus,
        (case t2.status when 2 then t2.overtime_hour when 1 then DATEDIFF(hh, t2.expire_time, sysdate) end) as
        timeLimit,
        t3.case_level as caseGrade, t3.canal_name as caseSource, t4.mediator as mediator, t3.status_name as statusName,
        concat_ws('', ifnull(t3.case_type_first_name, ''), '/' , ifnull(t3.case_type_name, '')) as caseType,
        concat(t3.que_area_name, t3.que_road_name) as queAddress, t2.cande_unit_name as candeUnitName,
        (select count(1) from dyh_case_supervise where case_id = t2.case_id) as superviseCount
        from dyh_ct_unit t1 left join dyh_case_task t2 on t1.id = t2.cande_unit_id
            left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        where
        t1.delete_status = 0
        and t2.delete_status = 0
@@ -564,7 +664,15 @@
        <include refid="statisticsAVG-wherePart"/>
        and
        (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL')
          and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1))
        <if test="terms.taskStatus != null and terms.taskStatus == 1 ">
            and (t2.overtime_status = 1 and t2.status = 2)
        </if>
        <if test="terms.taskStatus != null and terms.taskStatus == 0">
            and (sysdate > expire_time and t2.status = 1)
        </if>
        <if test="terms.taskStatus == null or terms.taskStatus ==''">
            and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1))
        </if>
        <if test="page.sort != null">
            <foreach collection="page.sort" item="s" index="index" separator="," open="order by ">
                isnull(${s.property}), ${s.property} ${s.direction}
@@ -581,25 +689,42 @@
        select
        COUNT(1)
        from dyh_ct_unit t1 left join dyh_case_supervise t2 on t1.id = t2.quilt_unit_id
            left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        where
        <include refid="statisticsSuperviseAVG-wherePart"/>
        and ((sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0) or (t2.overtime_status = '1'))
        <if test="terms.taskStatus != null and terms.taskStatus == 1 ">
            and  (t2.overtime_status = '1')
        </if>
        <if test="terms.taskStatus != null and terms.taskStatus == 0">
            and (sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0)
        </if>
        <if test="terms.taskStatus == null or terms.taskStatus ==''">
            and ((sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0) or (t2.overtime_status = '1'))
        </if>
    </select>
    <!--  查询督办超时案件  -->
    <select id="listDBQuantity" resultType="cn.huge.module.analysis.domain.dto.TimeoutTaskInfoDTO">
        select t2.case_id as caseId, t2.sup_time as turnaroundTime,
        (case t2.sup_status when 1 then t2.overtime_hour when 0 then DATEDIFF(hh, DATEADD(hour, t2.reply_term, t2.sup_time), sysdate) end) as timeLimit,
               t3.case_level as caseGrade,t3.canal_name as caseSource, t4.mediator as mediator, t3.status_name as statusName,
               concat_ws('', ifnull(t3.case_type_first_name, ''), '/' , ifnull(t3.case_type_name, '')) as caseType,
            concat(t3.que_area_name, t3.que_road_name) as queAddress, t2.quilt_unit_name as candeUnitName,
            (select count(1) from dyh_case_supervise where case_id = t2.case_id) as superviseCount
        select t2.case_id as caseId, t2.sup_time as turnaroundTime, '督办回复' as nodeName, t2.sup_status as taskStatus,
        (case t2.sup_status when 1 then t2.overtime_hour when 0 then DATEDIFF(hh, DATEADD(hour, t2.reply_term,
        t2.sup_time), sysdate) end) as timeLimit,
        t3.case_level as caseGrade,t3.canal_name as caseSource, t4.mediator as mediator, t3.status_name as statusName,
        concat_ws('', ifnull(t3.case_type_first_name, ''), '/' , ifnull(t3.case_type_name, '')) as caseType,
        concat(t3.que_area_name, t3.que_road_name) as queAddress, t2.quilt_unit_name as candeUnitName,
        (select count(1) from dyh_case_supervise where case_id = t2.case_id) as superviseCount
        from dyh_ct_unit t1 left join dyh_case_supervise t2 on t1.id = t2.quilt_unit_id
            left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        where
        <include refid="statisticsSuperviseAVG-wherePart"/>
        and ((sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0) or (t2.overtime_status = '1'))
        <if test="terms.taskStatus != null and terms.taskStatus == 1 ">
            and  (t2.overtime_status = '1')
        </if>
        <if test="terms.taskStatus != null and terms.taskStatus == 0">
            and (sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0)
        </if>
        <if test="terms.taskStatus == null or terms.taskStatus ==''">
            and ((sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0) or (t2.overtime_status = '1'))
        </if>
        <if test="page.sort != null">
            <foreach collection="page.sort" item="s" index="index" separator="," open="order by ">
                isnull(${s.property}), ${s.property} ${s.direction}
@@ -615,60 +740,97 @@
    <select id="countAllQuantity" resultType="java.lang.Long">
        select sum(zs)
        from(
            select
                COUNT(1) as zs
            from dyh_ct_unit t1 left join dyh_case_task t2 on t1.id = t2.cande_unit_id
                                left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
            where
                t1.delete_status = 0
              and t2.delete_status = 0
              and t3.delete_status = 0
                <include refid="statisticsAVG-wherePart"/>
              and((t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP')
                or (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL'))
              and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1))
            union
            select
                COUNT(1) as zs
            from dyh_ct_unit t1 left join dyh_case_supervise t2 on t1.id = t2.quilt_unit_id
                                left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
            where
        select
        COUNT(1) as zs
        from dyh_ct_unit t1 left join dyh_case_task t2 on t1.id = t2.cande_unit_id
        left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        where
        t1.delete_status = 0
        and t2.delete_status = 0
        and t3.delete_status = 0
        <include refid="statisticsAVG-wherePart"/>
        and((t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP')
        or (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL'))
        <if test="terms.taskStatus != null and terms.taskStatus == 1 ">
            and (t2.overtime_status = 1 and t2.status = 2)
        </if>
        <if test="terms.taskStatus != null and terms.taskStatus == 0">
            and (sysdate > expire_time and t2.status = 1)
        </if>
        <if test="terms.taskStatus == null or terms.taskStatus ==''">
            and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1))
        </if>
        union
        select
        COUNT(1) as zs
        from dyh_ct_unit t1 left join dyh_case_supervise t2 on t1.id = t2.quilt_unit_id
        left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        where
        <include refid="statisticsSuperviseAVG-wherePart"/>
            and ((sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0) or (t2.overtime_status = '1'))
        )
        <if test="terms.taskStatus != null and terms.taskStatus == 1 ">
            and (t2.overtime_status = '1')
        </if>
        <if test="terms.taskStatus != null and terms.taskStatus == 0">
            and (sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0)
        </if>
        <if test="terms.taskStatus == null or terms.taskStatus ==''">
            and ((sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0) or (t2.overtime_status =
            '1'))
        </if>)
    </select>
    <!--  查询督办超时案件  -->
    <select id="listAllQuantity" resultType="cn.huge.module.analysis.domain.dto.TimeoutTaskInfoDTO">
        select * from(
            select t2.case_id as caseId, t2.id as caseTaskId, t2.create_time as turnaroundTime,
            (case t2.status when 2 then t2.overtime_hour when 1 then DATEDIFF(hh, t2.expire_time, sysdate) end) as timeLimit,
            t3.case_level as caseGrade, t3.canal_name as caseSource, t4.mediator as mediator, t3.status_name as statusName,
            concat_ws('', ifnull(t3.case_type_first_name, ''), '/' , ifnull(t3.case_type_name, '')) as caseType,
            concat(t3.que_area_name, t3.que_road_name) as queAddress, t2.cande_unit_name as candeUnitName,
            (select count(1) from dyh_case_supervise where case_id = t2.case_id) as superviseCount
            from dyh_ct_unit t1 left join dyh_case_task t2 on t1.id = t2.cande_unit_id
                left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
            where
            t1.delete_status = 0
            and t2.delete_status = 0
            and t3.delete_status = 0
            <include refid="statisticsAVG-wherePart"/>
            and ((t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP')
                or (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL'))
        select t2.case_id as caseId, t2.id as caseTaskId, t2.create_time as turnaroundTime, t2.node_name as nodeName,
        (case t2.status when 1 then 0 when 2 then 1 end) as taskStatus,
        (case t2.status when 2 then t2.overtime_hour when 1 then DATEDIFF(hh, t2.expire_time, sysdate) end) as
        timeLimit,
        t3.case_level as caseGrade, t3.canal_name as caseSource, t4.mediator as mediator, t3.status_name as statusName,
        concat_ws('', ifnull(t3.case_type_first_name, ''), '/' , ifnull(t3.case_type_name, '')) as caseType,
        concat(t3.que_area_name, t3.que_road_name) as queAddress, t2.cande_unit_name as candeUnitName,
        (select count(1) from dyh_case_supervise where case_id = t2.case_id) as superviseCount
        from dyh_ct_unit t1 left join dyh_case_task t2 on t1.id = t2.cande_unit_id
        left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        where
        t1.delete_status = 0
        and t2.delete_status = 0
        and t3.delete_status = 0
        <include refid="statisticsAVG-wherePart"/>
        and ((t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP')
        or (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL'))
        <if test="terms.taskStatus != null and terms.taskStatus == 1 ">
            and (t2.overtime_status = 1 and t2.status = 2)
        </if>
        <if test="terms.taskStatus != null and terms.taskStatus == 0">
            and (sysdate > expire_time and t2.status = 1)
        </if>
        <if test="terms.taskStatus == null or terms.taskStatus ==''">
            and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1))
            union all
            select t2.case_id as caseId, null as caseTaskId, t2.sup_time as turnaroundTime,
            (case t2.sup_status when 1 then t2.overtime_hour when 0 then DATEDIFF(hh, DATEADD(hour, t2.reply_term, t2.sup_time), sysdate) end) as timeLimit,
            t3.case_level as caseGrade,t3.canal_name as caseSource, t4.mediator as mediator, t3.status_name as statusName,
            concat_ws('', ifnull(t3.case_type_first_name, ''), '/' , ifnull(t3.case_type_name, '')) as caseType,
            concat(t3.que_area_name, t3.que_road_name) as queAddress, t2.quilt_unit_name as candeUnitName,
            (select count(1) from dyh_case_supervise where case_id = t2.case_id) as superviseCount
            from dyh_ct_unit t1 left join dyh_case_supervise t2 on t1.id = t2.quilt_unit_id
                left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
            where
            <include refid="statisticsSuperviseAVG-wherePart"/>
            and ((sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0) or (t2.overtime_status = '1'))
        </if>
        union all
        select t2.case_id as caseId, null as caseTaskId, t2.sup_time as turnaroundTime, '督办回复' as nodeName,
        t2.sup_status as taskStatus,
        (case t2.sup_status when 1 then t2.overtime_hour when 0 then DATEDIFF(hh, DATEADD(hour, t2.reply_term,
        t2.sup_time), sysdate) end) as timeLimit,
        t3.case_level as caseGrade,t3.canal_name as caseSource, t4.mediator as mediator, t3.status_name as statusName,
        concat_ws('', ifnull(t3.case_type_first_name, ''), '/' , ifnull(t3.case_type_name, '')) as caseType,
        concat(t3.que_area_name, t3.que_road_name) as queAddress, t2.quilt_unit_name as candeUnitName,
        (select count(1) from dyh_case_supervise where case_id = t2.case_id) as superviseCount
        from dyh_ct_unit t1 left join dyh_case_supervise t2 on t1.id = t2.quilt_unit_id
        left join dyh_case_info t3 on t2.case_id = t3.id left join dyh_case_info_unfold t4 on t3.id = t4.id
        where
        <include refid="statisticsSuperviseAVG-wherePart"/>
        <if test="terms.taskStatus != null and terms.taskStatus == 1 ">
            and (t2.overtime_status = '1')
        </if>
        <if test="terms.taskStatus != null and terms.taskStatus == 0">
            and (sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0)
        </if>
        <if test="terms.taskStatus == null or terms.taskStatus ==''">
            and ((sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0) or (t2.overtime_status =
            '1'))
        </if>
        )
        <if test="page.sort != null">
            <foreach collection="page.sort" item="s" index="index" separator="," open="order by ">
@@ -679,6 +841,7 @@
            order by isnull(t2.sup_time), t2.sup_time desc
        </if>
        limit #{page.offset}, #{page.size}
    </select>
    <sql id="statisticsCirculation-wherePart">
@@ -730,18 +893,19 @@
        count(distinct case when t3.zxsl_status = 1 then t4.id end) as zxsl,
        count(distinct case when t3.zxsl_status = 0 and (t4.node_id = 'JAGD' or t4.node_id = 'BLFK'
        or t4.node_id = 'JASH' or t4.node_id = 'JASH_EJ' or t4.node_id = 'JASH_YJ') then t4.id end) as lzsl,
--         count(distinct case when t3.zxsl_status = 0 and (((t4.node_id = 'ZJ_DFP' or t4.node_id = 'QJ_DFP'
--         or t4.node_id = 'SJ_DFP' or t4.node_id = 'DFP' or t4.node_id = 'QJ_DSL' or t4.node_id = 'SJ_DSL'
--         or t4.node_id = 'DSL' or t4.node_id = 'ZJ_DSL')and t4.handle_result !=3)
--         or t4.node_id = 'SJ_SBSH'
--         or t4.node_id = 'SJ_HTSH' or t4.node_id = 'QJ_HTSH' or t4.node_id = 'QJ_SBSH' or t4.node_id = 'ZJ_HTSH'
--         or t4.node_id = 'JASQ' or t4.node_id = 'HTSH'
--         ) then t4.id end) as lzz,
        -- count(distinct case when t3.zxsl_status = 0 and (((t4.node_id = 'ZJ_DFP' or t4.node_id = 'QJ_DFP'
        -- or t4.node_id = 'SJ_DFP' or t4.node_id = 'DFP' or t4.node_id = 'QJ_DSL' or t4.node_id = 'SJ_DSL'
        -- or t4.node_id = 'DSL' or t4.node_id = 'ZJ_DSL')and t4.handle_result !=3)
        -- or t4.node_id = 'SJ_SBSH'
        -- or t4.node_id = 'SJ_HTSH' or t4.node_id = 'QJ_HTSH' or t4.node_id = 'QJ_SBSH' or t4.node_id = 'ZJ_HTSH'
        -- or t4.node_id = 'JASQ' or t4.node_id = 'HTSH'
        -- ) then t4.id end) as lzz,
        count(distinct case when (t3.zxsl_status = 0 and (t4.node_id = 'ZJ_DFP' or t4.node_id = 'QJ_DFP'
        or t4.node_id = 'SJ_DFP' or t4.node_id = 'DFP' or t4.node_id = 'QJ_DSL' or t4.node_id = 'SJ_DSL'
        or t4.node_id = 'DSL' or t4.node_id = 'ZJ_DSL')and t4.handle_result =3) then t4.id end) as bysl
        from
        dyh_ct_unit t1 left join dyh_case_info_unfold t2 on t2.belong_unit_id = t1.id left join dyh_case_info t3 on t2.id = t3.id
        dyh_ct_unit t1 left join dyh_case_info_unfold t2 on t2.belong_unit_id = t1.id left join dyh_case_info t3 on
        t2.id = t3.id
        left join(SELECT case_id, node_id, create_time, cande_unit_id, id, status,handle_result
        FROM (
        SELECT case_id, node_id, create_time, cande_unit_id, id, status,handle_result,
@@ -752,7 +916,8 @@
        group by s.case_id) t4 on t2.id = t4.case_id
        where t1.delete_status = 0 and t3.delete_status = 0
        <include refid="statisticsCirculation-wherePart"/>
        group by <include refid="groupPart"/>
        group by
        <include refid="groupPart"/>
    </select>
    <!-- 分组查询字段 -->
@@ -829,10 +994,10 @@
                village as code,
                'queVillage' as region
            </if>
<!--            <if test="terms.unitIds != null and terms.unitIds !=''">-->
<!--                unit_name as name,-->
<!--                id as code-->
<!--            </if>-->
            <!--            <if test="terms.unitIds != null and terms.unitIds !=''">-->
            <!--                unit_name as name,-->
            <!--                id as code-->
            <!--            </if>-->
        </if>
        from dyh_ct_unit
        where
@@ -863,12 +1028,14 @@
        <if test="terms.unitIds != null and terms.unitIds !=''">
            and id in(${terms.unitIds})
        </if>
        group by <include refid="groupALLPart"/>
        group by
        <include refid="groupALLPart"/>
    </select>
    <!--  查询下属所有属地  -->
    <select id="listSubordinateTerritory" resultType="string">
        select <include refid="selectALLPart"/>
        select
        <include refid="selectALLPart"/>
        from dyh_ct_unit
        where
        delete_status = 0
@@ -898,22 +1065,21 @@
        <if test="terms.unitIds != null and terms.unitIds !=''">
            and id in(${terms.unitIds})
        </if>
        group by <include refid="groupALLPart"/>
        group by
        <include refid="groupALLPart"/>
    </select>
    <!--  获取所有下属组织包括自己  -->
    <select id="getAllParentUnit" resultType="string">
        SELECT id
        FROM dyh_ct_unit
        START WITH id = #{unitId}
        FROM dyh_ct_unit START WITH id = #{unitId}
        CONNECT BY PRIOR id = parent_id;
    </select>
    <!--  获取所有下属组织包括自己  -->
    <select id="getAllDeptParentUnit" resultType="string">
        SELECT id
        FROM dyh_ct_unit
                 START WITH id = #{unitId}
        FROM dyh_ct_unit START WITH id = #{unitId}
        CONNECT BY PRIOR id = parent_id and unit_type != 101 and unit_type != 103;
    </select>
@@ -946,11 +1112,11 @@
                t3.village as code,
                'queVillage' as region,
            </if>
<!--            <if test="terms.unitIds != null and terms.unitIds !=''">-->
<!--                (case when t3.unit_name = '' or t3.unit_name is null then '本级' else t3.unit_name end)as name,-->
<!--                t3.id as code,-->
<!--                'unitId' as region,-->
<!--            </if>-->
            <!--            <if test="terms.unitIds != null and terms.unitIds !=''">-->
            <!--                (case when t3.unit_name = '' or t3.unit_name is null then '本级' else t3.unit_name end)as name,-->
            <!--                t3.id as code,-->
            <!--                'unitId' as region,-->
            <!--            </if>-->
        </if>
        count(distinct t1.id) as total
        FROM dyh_case_info t1 left join dyh_case_info_unfold t2 on t1.id = t2.id
@@ -995,7 +1161,7 @@
                and t2.mediate_unit_id = #{terms.mediateUnitId}
            </if>
            <if test="terms.assistUnitId != null and terms.assistUnitId !=''">
                and t2.assist_unit_id  = #{terms.assistUnitId}
                and t2.assist_unit_id = #{terms.assistUnitId}
            </if>
        </if>
        group by
@@ -1027,8 +1193,8 @@
        FROM dyh_case_info t1 left join dyh_case_info_unfold t2 on t1.id = t2.id
        left join dyh_ct_unit t3 on t2.belong_unit_id = t3.id
        where t1.delete_status = 0
          and t3.delete_status = 0
          and t2.is_risk = 1
        and t3.delete_status = 0
        and t2.is_risk = 1
        <if test="terms != null">
            <if test="terms.queProv != null and terms.queProv !=''">
                and t3.prov = #{terms.queProv}
@@ -1066,7 +1232,7 @@
                and t2.mediate_unit_id = #{terms.mediateUnitId}
            </if>
            <if test="terms.assistUnitId != null and terms.assistUnitId !=''">
                and t2.assist_unit_id  = #{terms.assistUnitId}
                and t2.assist_unit_id = #{terms.assistUnitId}
            </if>
        </if>
        group by t1.case_type_first_name order by count(t1.case_type_first_name) desc limit 3
@@ -1076,7 +1242,7 @@
    <select id="getZZZXUnitId" resultType="string">
        select id from dyh_ct_unit
        where delete_status = 0
          and (unit_type = 101 or unit_type = 103)
        and (unit_type = 101 or unit_type = 103)
        <if test="terms.queProv != null and terms.queProv !=''">
            and prov = #{terms.queProv}
        </if>
@@ -1110,8 +1276,10 @@
        and t2.delete_status = 0
        and t3.delete_status = 0
        <include refid="statisticsAVG-wherePart"/>
        and (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP') and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1))
        group by <include refid="groupPart"/>
        and (t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP') and
        ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1))
        group by
        <include refid="groupPart"/>
        order by quantity asc
    </select>
@@ -1128,8 +1296,10 @@
        and t3.delete_status = 0
        <include refid="statisticsAVG-wherePart"/>
        and
        (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL') and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1) )
        group by <include refid="groupPart"/>
        (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL') and
        ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1) )
        group by
        <include refid="groupPart"/>
        order by quantity asc
    </select>
@@ -1143,7 +1313,8 @@
        where
        <include refid="statisticsSuperviseAVG-wherePart"/>
        and ((sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0) or (t2.overtime_status = '1'))
        group by <include refid="groupPart"/>
        group by
        <include refid="groupPart"/>
        order by quantity asc
    </select>
@@ -1167,7 +1338,8 @@
        and((t2.node_id = 'ZJ_DFP' or t2.node_id = 'QJ_DFP' or t2.node_id = 'SJ_DFP' or t2.node_id = 'DFP')
        or (t2.node_id = 'ZJ_DSL' or t2.node_id = 'QJ_DSL' or t2.node_id = 'SJ_DSL' or t2.node_id = 'DSL'))
        and ((t2.overtime_status = 1 and t2.status = 2) or (sysdate > expire_time and t2.status = 1))
        group by <include refid="groupPart"/>
        group by
        <include refid="groupPart"/>
        union all
        select
        <include refid="selectPart"/>
@@ -1177,8 +1349,10 @@
        where
        <include refid="statisticsSuperviseAVG-wherePart"/>
        and ((sysdate > DATEADD(hour, t2.reply_term, t2.sup_time) and t2.sup_status = 0) or (t2.overtime_status = '1'))
        group by <include refid="groupPart"/>
        )t1 group by <include refid="groupPart"/>
        group by
        <include refid="groupPart"/>
        )t1 group by
        <include refid="groupPart"/>
        order by quantity asc
    </select>
@@ -1249,7 +1423,8 @@
        select
        count(1)
        from
        dyh_ct_unit t1 left join dyh_case_info_unfold t2 on t2.belong_unit_id = t1.id left join dyh_case_info t3 on t2.id = t3.id
        dyh_ct_unit t1 left join dyh_case_info_unfold t2 on t2.belong_unit_id = t1.id left join dyh_case_info t3 on
        t2.id = t3.id
        left join(SELECT case_id, node_id, create_time, cande_unit_id, id, status,handle_result
        FROM (
        SELECT case_id, node_id, create_time, cande_unit_id, id, status,handle_result,
@@ -1268,7 +1443,8 @@
        <if test="terms.caseStatus != null and terms.caseStatus == 3">
            and t3.zxsl_status = 0
            and ((t4.node_id in ('ZJ_DFP', 'QJ_DFP', 'SJ_DFP', 'DFP', 'QJ_DSL', 'SJ_DSL', 'DSL', 'ZJ_DSL')
            and t4.handle_result !=3) or t4.node_id in ('SJ_SBSH', 'SJ_HTSH', 'QJ_HTSH', 'QJ_SBSH', 'ZJ_HTSH', 'JASQ', 'HTSH'))
            and t4.handle_result !=3) or t4.node_id in ('SJ_SBSH', 'SJ_HTSH', 'QJ_HTSH', 'QJ_SBSH', 'ZJ_HTSH', 'JASQ',
            'HTSH'))
        </if>
        <if test="terms.caseStatus != null and terms.caseStatus == 4">
            and t3.zxsl_status = 0
@@ -1280,7 +1456,8 @@
    <select id="listStatisticsCirculation" resultMap="dataResult-CasePageDTO">
        select
        t3.id, t3.status,t3.status_name,t3.canal,t3.canal_name,t3.canal_second,t3.canal_second_name,t3.case_level,t3.case_type,
        t3.id,
        t3.status,t3.status_name,t3.canal,t3.canal_name,t3.canal_second,t3.canal_second_name,t3.case_level,t3.case_type,
        t3.case_type_name,t3.case_type_first_name,t3.input_unit_id,t3.input_unit_name,t3.create_time,t3.plaintiffs,t3.defendants,
        IF(t1.city_name is null,t3.que_city_name,t1.city_name) as que_city_name,
        IF(t1.area_name is null,t3.que_area_name,t1.area_name) as que_area_name,
@@ -1292,7 +1469,8 @@
        t2.assist_unit_name,t2.close_time,t2.agree_type,t2.agree_type_name,t2.agree_content,t2.windup_content,
        t4.id
        from
        dyh_ct_unit t1 left join dyh_case_info_unfold t2 on t2.belong_unit_id = t1.id left join dyh_case_info t3 on t2.id = t3.id
        dyh_ct_unit t1 left join dyh_case_info_unfold t2 on t2.belong_unit_id = t1.id left join dyh_case_info t3 on
        t2.id = t3.id
        left join(SELECT case_id, node_id, create_time, cande_unit_id, id, status,handle_result
        FROM (
        SELECT case_id, node_id, create_time, cande_unit_id, id, status,handle_result,
@@ -1311,7 +1489,8 @@
        <if test="terms.caseStatus != null and terms.caseStatus == 3">
            and t3.zxsl_status = 0
            and ((t4.node_id in ('ZJ_DFP', 'QJ_DFP', 'SJ_DFP', 'DFP', 'QJ_DSL', 'SJ_DSL', 'DSL', 'ZJ_DSL')
            and t4.handle_result !=3) or t4.node_id in ('SJ_SBSH', 'SJ_HTSH', 'QJ_HTSH', 'QJ_SBSH', 'ZJ_HTSH', 'JASQ', 'HTSH'))
            and t4.handle_result !=3) or t4.node_id in ('SJ_SBSH', 'SJ_HTSH', 'QJ_HTSH', 'QJ_SBSH', 'ZJ_HTSH', 'JASQ',
            'HTSH'))
        </if>
        <if test="terms.caseStatus != null and terms.caseStatus == 4">
            and t3.zxsl_status = 0
dyh-service/dyh-mediate/src/main/java/cn/huge/module/analysis/domain/dto/TimeoutTaskInfoDTO.java
@@ -63,4 +63,15 @@
     * 督办次数
     */
    private String superviseCount;
    /**
     * 超时节点
     */
    private String nodeName;
    /**
     * 节点处理状态
     */
    private Integer taskStatus;
}
dyh-service/dyh-mediate/src/main/java/cn/huge/module/casebook/controller/web/CaseBookWebController.java
@@ -19,6 +19,7 @@
import org.springframework.data.domain.Sort;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
dyh-service/dyh-mediate/src/main/java/cn/huge/module/casebook/service/CasebookInfoService.java
@@ -1666,6 +1666,10 @@
                caseInfo.setCaseNo(utilsClient.createCaseNo(ctUnitDTO.getArea()));
                caseInfo.setCreateTime(nowDate);
                caseInfo.setUpdateTime(nowDate);
                if (caseInfo.getCanal().equals(CaseBaseConstsEnum.CASE_CANAL_3.getIndex())) {
                    caseInfo.setCanalSecond(CaseBaseConstsEnum.CASE_CANAL_SECOND_8.getIndex());
                    caseInfo.setCanalSecondName(CaseBaseConstsEnum.CASE_CANAL_SECOND_8.getDes());
                }
                caseInfoList.add(caseInfo);
                // 保存所有当事人
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseInfoWebController.java
@@ -175,7 +175,7 @@
        //经办人ID
        String systemSource = request.getParameter("systemSource");
        if (StringUtils.isNotBlank(mediator)) {
        if (StringUtils.isNotBlank(systemSource)) {
            terms.put("systemSource", systemSource);
        }
@@ -1307,83 +1307,41 @@
            // 查询类型 1-本系统,2-12345,3-人民调解,4-信访,5-劳动仲裁,6-非警务纠纷
            String ledgerType = request.getParameter("ledgerType");
            if("1".equals(ledgerType)){
                terms.put("canalList", Arrays.asList("22_00001-1","22_00001-2","22_00001-3"));
            }else if("2".equals(ledgerType)){
                terms.put("canal", "22_00001-4");
                terms.put("canalSecond", "22_00003-3");
                terms.put("canalSecondNot", "22_00003-2");
            }else if("6".equals(ledgerType)){
                terms.put("canal", "22_00001-4");
                terms.put("canalSecond", "22_00003-4");
                terms.put("canalSecondNot", "22_00003-2");
            }else if("4".equals(ledgerType)){
                terms.put("canal", "22_00001-4");
                terms.put("canalSecond", "22_00003-6");
                terms.put("canalSecondNot", "22_00003-2");
            }else if("5".equals(ledgerType)){
                terms.put("canal", "22_00001-4");
                terms.put("canalSecond", "22_00003-5");
                terms.put("canalSecondNot", "22_00003-2");
            }else if("3".equals(ledgerType)){
                terms.put("canal", "22_00001-4");
                terms.put("canalSecond", "22_00003-1");
                terms.put("canalSecondNot", "22_00003-2");
            }else{
                terms.put("canalSecondAll", "22_00003-2");
            //所有表里面的数据都是本系统,其他的后续会新建表存储
            if(ObjectUtils.isNotEmpty(ledgerType) && !"1".equals(ledgerType)){
                terms.put("canal", "-1");
            }
            return ReturnSucUtils.getRepInfo("处理成功", service.ledger(terms, userId));
            return ReturnSucUtils.getRepInfo("处理成功", service.ledger(terms, userId, ledgerType));
        } catch (Exception e) {
            log.error("Controller接口[CaseInfoWebController.ledger]请求异常:" + e, e);
            return ReturnFailUtils.getRepInfo();
        }
    }
    // /**
    //  * 解纷态势
    //  *
    //  * @return Object
    //  * @url {ctx}/api/web/caseInfo/ledger
    //  * @CurrentUser String userId
    //  */
    // @GetMapping("/ledger")
    // public Object ledger(@CurrentUser String userId) {
    //     try {
    //         Map<String, Object> terms = getParameterAll();
    //         // 查询类型 1-本系统,2-12345,3-人民调解,4-信访,5-劳动仲裁,6-非警务纠纷
    //         String ledgerType = request.getParameter("ledgerType");
    //
    //         if("1".equals(ledgerType)){
    //             terms.put("canalList", Arrays.asList("22_00001-1","22_00001-2","22_00001-3"));
    //         }else if("2".equals(ledgerType)){
    //             terms.put("canal", "22_00001-4");
    //             terms.put("canalSecond", "22_00003-3");
    //             terms.put("canalSecondNot", "22_00003-2");
    //         }else if("3".equals(ledgerType)){
    //             terms.put("canal", "22_00001-4");
    //             terms.put("canalSecond", "22_00003-4");
    //             terms.put("canalSecondNot", "22_00003-2");
    //         }else if("4".equals(ledgerType)){
    //             terms.put("canal", "22_00001-4");
    //             terms.put("canalSecond", "22_00003-6");
    //             terms.put("canalSecondNot", "22_00003-2");
    //         }else if("5".equals(ledgerType)){
    //             terms.put("canal", "22_00001-4");
    //             terms.put("canalSecond", "22_00003-5");
    //             terms.put("canalSecondNot", "22_00003-2");
    //         }else if("6".equals(ledgerType)){
    //             terms.put("canal", "22_00001-4");
    //             terms.put("canalSecond", "22_00003-1");
    //             terms.put("canalSecondNot", "22_00003-2");
    //         }else{
    //             terms.put("canalSecondAll", "22_00003-2");
    //         }
    //         return ReturnSucUtils.getRepInfo("处理成功", service.ledger(terms, userId));
    //     } catch (Exception e) {
    //         log.error("Controller接口[CaseInfoWebController.ledger]请求异常:" + e, e);
    //         return ReturnFailUtils.getRepInfo();
    //     }
    // }
    /**
     * 解纷态势
     *
     * @return Object
     * @url {ctx}/api/web/caseInfo/ledgerCount
     * @CurrentUser String userId
     */
    @GetMapping("/ledgerCount")
    public Object ledgerCount(@CurrentUser String userId) {
        try {
            Map<String, Object> terms = getParameterAll();
            // 查询类型 1-本系统,2-12345,3-人民调解,4-信访,5-劳动仲裁,6-非警务纠纷
            String ledgerType = request.getParameter("ledgerType");
            //所有表里面的数据都是本系统,其他的后续会新建表存储
            if(ObjectUtils.isNotEmpty(ledgerType) && !"1".equals(ledgerType)){
                terms.put("canal", "-1");
            }
            return ReturnSucUtils.getRepInfo("处理成功", service.ledgerCount(terms, userId));
        } catch (Exception e) {
            log.error("Controller接口[CaseInfoWebController.ledger]请求异常:" + e, e);
            return ReturnFailUtils.getRepInfo();
        }
    }
    /**
     * 查询重复事项
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/controller/web/CaseTaskWebController.java
@@ -424,6 +424,13 @@
                terms.put("partyName", partyName);
            }
            CtUserDTO loginUser = custClient.clientGetUserAll(userId);
            CtUnitDTO unitById = custClient.getUnitById(loginUser.getUnitId());
            //如果是政法委,赋予综治中心查看案件的权限,政法委不接收案子处理,只负责指导,所以可以直接赋予
            if (201 == unitById.getUnitType()) {
                CtUnitDTO bjZzzx = custClient.getBjZzzx(unitById.getId());
                if (bjZzzx != null)
                    loginUser.setUnitId(bjZzzx.getId());
            }
            if (status == 1) {
                terms.put("candeUnitId", loginUser.getUnitId());
            } else {
@@ -513,6 +520,13 @@
                terms.put("partyName", partyName);
            }
            CtUserDTO loginUser = custClient.clientGetUserAll(userId);
            CtUnitDTO unitById = custClient.getUnitById(loginUser.getUnitId());
            //如果是政法委,赋予综治中心查看案件的权限,政法委不接收案子处理,只负责指导,所以可以直接赋予
            if (201 == unitById.getUnitType()) {
                CtUnitDTO bjZzzx = custClient.getBjZzzx(unitById.getId());
                if (bjZzzx != null)
                    loginUser.setUnitId(bjZzzx.getId());
            }
            if (status == 1) {
                terms.put("candeUnitId", loginUser.getUnitId());
            } else {
@@ -660,6 +674,13 @@
                terms.put("partyName", partyName);
            }
            CtUserDTO loginUser = custClient.clientGetUserAll(userId);
            CtUnitDTO unitById = custClient.getUnitById(loginUser.getUnitId());
            //如果是政法委,赋予综治中心查看案件的权限,政法委不接收案子处理,只负责指导,所以可以直接赋予
            if (201 == unitById.getUnitType()) {
                CtUnitDTO bjZzzx = custClient.getBjZzzx(unitById.getId());
                if (bjZzzx != null)
                    loginUser.setUnitId(bjZzzx.getId());
            }
            // 不予受理,查询case_dismiss表
            if (status == 3) {
                terms.put("disUnitId", loginUser.getUnitId());
@@ -710,10 +731,17 @@
            }
            terms.put("caseTaskType", caseTaskType);
            CtUserDTO loginUser = custClient.clientGetUserAll(userId);
            CtUnitDTO unitById = custClient.getUnitById(loginUser.getUnitId());
            //如果是政法委,赋予综治中心查看案件的权限,政法委不接收案子处理,只负责指导,所以可以直接赋予
            if (201 == unitById.getUnitType()) {
                CtUnitDTO bjZzzx = custClient.getBjZzzx(unitById.getId());
                if (bjZzzx != null)
                    loginUser.setUnitId(bjZzzx.getId());
            }
            terms.put("candeUnitId", loginUser.getUnitId());
            String mediatorType = request.getParameter("mediatorType");
            if(ObjectUtils.isNotEmpty(mediatorType)){
            if (ObjectUtils.isNotEmpty(mediatorType)) {
                terms.put("mediatorType", mediatorType);
                terms.put("mediatorId", loginUser.getId());
            }
@@ -791,6 +819,13 @@
                terms.put("partyName", partyName);
            }
            CtUserDTO loginUser = custClient.clientGetUserAll(userId);
            CtUnitDTO unitById = custClient.getUnitById(loginUser.getUnitId());
            //如果是政法委,赋予综治中心查看案件的权限,政法委不接收案子处理,只负责指导,所以可以直接赋予
            if (201 == unitById.getUnitType()) {
                CtUnitDTO bjZzzx = custClient.getBjZzzx(unitById.getId());
                if (bjZzzx != null)
                    loginUser.setUnitId(bjZzzx.getId());
            }
            if (caseTaskType == 1) {
                terms.put("applyUnitId", loginUser.getUnitId());
            } else {
@@ -939,6 +974,13 @@
            }
            PageRequest pageRequest = PageRequest.of(page - 1, size, sort);
            CtUserDTO loginUser = custClient.clientGetUserAll(userId);
            CtUnitDTO unitById = custClient.getUnitById(loginUser.getUnitId());
            //如果是政法委,赋予综治中心查看案件的权限,政法委不接收案子处理,只负责指导,所以可以直接赋予
            if (201 == unitById.getUnitType()) {
                CtUnitDTO bjZzzx = custClient.getBjZzzx(unitById.getId());
                if (bjZzzx != null)
                    loginUser.setUnitId(bjZzzx.getId());
            }
            terms.put("auditUnitId", loginUser.getUnitId());
            terms.put("applyStatus", status);
            return ReturnSucUtils.getRepInfo(service.pageMyTaskSh(pageRequest, type, terms));
@@ -1017,6 +1059,13 @@
            }
            PageRequest pageRequest = PageRequest.of(page - 1, size, sort);
            CtUserDTO loginUser = custClient.clientGetUserAll(userId);
            CtUnitDTO unitById = custClient.getUnitById(loginUser.getUnitId());
            //如果是政法委,赋予综治中心查看案件的权限,政法委不接收案子处理,只负责指导,所以可以直接赋予
            if (201 == unitById.getUnitType()) {
                CtUnitDTO bjZzzx = custClient.getBjZzzx(unitById.getId());
                if (bjZzzx != null)
                    loginUser.setUnitId(bjZzzx.getId());
            }
            terms.put("applyUnitId", loginUser.getUnitId());
            return ReturnSucUtils.getRepInfo(service.pageMyTaskShWSQD(pageRequest, terms));
        } catch (Exception e) {
@@ -1091,6 +1140,13 @@
            }
            PageRequest pageRequest = PageRequest.of(page - 1, size, sort);
            CtUserDTO loginUser = custClient.clientGetUserAll(userId);
            CtUnitDTO unitById = custClient.getUnitById(loginUser.getUnitId());
            //如果是政法委,赋予综治中心查看案件的权限,政法委不接收案子处理,只负责指导,所以可以直接赋予
            if (201 == unitById.getUnitType()) {
                CtUnitDTO bjZzzx = custClient.getBjZzzx(unitById.getId());
                if (bjZzzx != null)
                    loginUser.setUnitId(bjZzzx.getId());
            }
            Page<FrontPageListDTO> frontPageListDTOPage = null;
            if (StringUtils.isNotBlank(loginUser.getUnitId())) {
                terms.put("type", status);
@@ -1341,6 +1397,13 @@
            }
            CtUserDTO loginUser = custClient.clientGetUserAll(userId);
            CtUnitDTO unitById = custClient.getUnitById(loginUser.getUnitId());
            //如果是政法委,赋予综治中心查看案件的权限,政法委不接收案子处理,只负责指导,所以可以直接赋予
            if (201 == unitById.getUnitType()) {
                CtUnitDTO bjZzzx = custClient.getBjZzzx(unitById.getId());
                if (bjZzzx != null)
                    loginUser.setUnitId(bjZzzx.getId());
            }
            terms.put("handleUnitId", loginUser.getUnitId());
            // 排序
            Sort sort = null;
@@ -1488,22 +1551,23 @@
    /**
     * 测试接口
     * @url {ctx}/api/web/caseTask/test
     *
     * @return Object
     * @url {ctx}/api/web/caseTask/test
     */
    @GetMapping("/test")
    public Object test(@RequestParam(value = "caseId") String caseId,
                              @RequestParam(value = "oldTaskId") String oldTaskId, @RequestParam(value = "newTaskId") String newTaskId,
                              @RequestParam(value = "oldProcess") String oldProcess,@RequestParam(value = "newProcess") String newProcess,
                       @RequestParam(value = "oldTaskId") String oldTaskId, @RequestParam(value = "newTaskId") String newTaskId,
                       @RequestParam(value = "oldProcess") String oldProcess, @RequestParam(value = "newProcess") String newProcess,
                       @RequestParam(value = "ownerIds") String ownerIds, @RequestParam(value = "userId") String userId,
                       @RequestParam(value = "handleStatus") String handleStatus) {
        try {
            CaseTask oldTask = null;
            if(StringUtils.isNotBlank(oldTaskId)){
            if (StringUtils.isNotBlank(oldTaskId)) {
                oldTask = service.getById(oldTaskId);
            }
            CaseTask newTask = null;
            if(StringUtils.isNotBlank(newTaskId)){
            if (StringUtils.isNotBlank(newTaskId)) {
                newTask = service.getById(newTaskId);
            }
            List<String> ownerIdList = Arrays.asList(ownerIds.split(","));
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/dao/mapper/xml/CaseInfoMapper.xml
@@ -411,22 +411,6 @@
                <if test="terms.mediatorId != null and terms.mediatorId !=''">
                    and b.mediator_id = #{terms.mediatorId}
                </if>
                <if test="terms.visitTimeStart != null and terms.visitTimeStart !='' and terms.visitTimeEnd != null and terms.visitTimeEnd !=''">
                    and (DATE_FORMAT(a.visit_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ >= ]]> #{terms.visitTimeStart}
                    and DATE_FORMAT(a.visit_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ <= ]]> #{terms.visitTimeEnd})
                </if>
                <if test="terms.createStart != null and terms.createStart !='' and terms.createEnd != null and terms.createEnd !=''">
                    and (DATE_FORMAT(a.create_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ >= ]]> #{terms.createStart}
                    and DATE_FORMAT(a.create_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ <= ]]> #{terms.createEnd})
                </if>
                <if test="terms.closeStart != null and terms.closeStart !='' and terms.closeEnd != null and terms.closeEnd !=''">
                    and (DATE_FORMAT(b.close_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ >= ]]> #{terms.closeStart}
                    and DATE_FORMAT(b.close_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ <= ]]> #{terms.closeEnd})
                </if>
                <if test="terms.fileStart != null and terms.fileStart !='' and terms.fileEnd != null and terms.fileEnd !=''">
                    and (DATE_FORMAT(b.file_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ >= ]]> #{terms.fileStart}
                    and DATE_FORMAT(b.file_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ <= ]]> #{terms.fileEnd})
                </if>
                <if test='terms.queCity != null and terms.queCity !="" and terms.statistics != null and terms.areaType == "1"'>
                    and (b.belong_unit_id is not null and c.city = #{terms.queCity}
                    <if test="terms.unitGrades != null and terms.unitGrades.size > 0">
@@ -575,7 +559,23 @@
                    and b.agree_type = #{terms.agreeType}
                </if>
                <if test="terms.systemSource != null and terms.systemSource !=''">
                    and b.sys_source = #{systemSource}
                    and b.sys_source = #{terms.systemSource}
                </if>
                <if test="terms.visitTimeStart != null and terms.visitTimeStart !='' and terms.visitTimeEnd != null and terms.visitTimeEnd !=''">
                    and (DATE_FORMAT(a.visit_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ >= ]]> #{terms.visitTimeStart}
                    and DATE_FORMAT(a.visit_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ <= ]]> #{terms.visitTimeEnd})
                </if>
                <if test="terms.createStart != null and terms.createStart !='' and terms.createEnd != null and terms.createEnd !=''">
                    and (a.create_time <![CDATA[ >= ]]> #{terms.createStart}
                    and a.create_time <![CDATA[ <= ]]> #{terms.createEnd})
                </if>
                <if test="terms.closeStart != null and terms.closeStart !='' and terms.closeEnd != null and terms.closeEnd !=''">
                    and (DATE_FORMAT(b.close_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ >= ]]> #{terms.closeStart}
                    and DATE_FORMAT(b.close_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ <= ]]> #{terms.closeEnd})
                </if>
                <if test="terms.fileStart != null and terms.fileStart !='' and terms.fileEnd != null and terms.fileEnd !=''">
                    and (DATE_FORMAT(b.file_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ >= ]]> #{terms.fileStart}
                    and DATE_FORMAT(b.file_time,'%Y-%m-%d %H:%i:%s') <![CDATA[ <= ]]> #{terms.fileEnd})
                </if>
            </where>
        </if>
@@ -1124,7 +1124,11 @@
                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
        sum(case when a.info_process = 3 and b.medi_result = '22_00025-2' then 1 else 0 end) as failNum,
        sum(case when a.canal_second = '22_00003-8' then 1 else 0 end) as bmpcNum,
        sum(case when a.canal_second = '22_00003-2' then 1 else 0 end) as wgpcNum,
        sum(case when a.canal_second = '22_00003-1' then 1 else 0 end) as fjwjfNum,
        sum(case when a.canal_second = '22_00003-7' then 1 else 0 end) as zxjfNum
        FROM
        dyh_case_info a
        inner JOIN dyh_case_info_unfold b on a.id = b.id
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/domain/dto/CaseStatisticsBaseDTO.java
@@ -1,6 +1,8 @@
package cn.huge.module.cases.domain.dto;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
@@ -28,6 +30,15 @@
    private Integer failNum=0;//化解不成功数量
    private String failRate;//化解不成功率
    private Integer bmpcNum;//部门排查
    private String bmpcCode="22_00003-8";//部门排查编码
    private Integer wgpcNum;//网格排查
    private String wgpcCode="22_00003-2";//网格排查编码
    private Integer fjwjfNum;//非警务纠纷
    private String fjwjfCode="22_00003-1";//非警务纠纷编码
    private Integer zxjfNum;//专项纠纷
    private String zxjfCode="22_00003-7";//专项纠纷编码
    private Integer oneLevelNum=0;//1级事件数量
    private Integer twoLevelNum=0;//2级事件数量
    private Integer threeLevelNum=0;//3级事件数量
@@ -43,7 +54,7 @@
    private CaseStatisticsSourceDTO oneSecondSource;//非警务纠纷
    private CaseStatisticsSourceDTO twoSecondSource;//12345
    private CaseStatisticsSourceDTO threeSecondSource;//网格上报
    private List<CaseStatisticsTypeDTO> typeList;//纠纷类型集合
    private List<CaseStatisticsTypeDTO> typeList = new ArrayList<>();//纠纷类型集合
    private List<CasePageDTO> caseList;//案件集合(实时动态)
@@ -61,8 +72,8 @@
    private String xfRate;//信访占比
    private Integer ldzcNum=0;//劳动仲裁数
    private String ldzcRate;//劳动仲裁占比
    private Integer fjwjfNum=0;//非警务纠纷数
    private String fjwjfRate;//非警务纠纷占比
    private Integer tzfjwjfNum=0;//非警务纠纷数
    private String tzfjwjfRate;//非警务纠纷占比
//    private Integer allNum=0;//全部数
//    private Integer sysNum=0;//本系统数
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseEvaluateService.java
@@ -266,7 +266,7 @@
            Date nowDate = DateUtils.getNowDate();
            // 查询当事人评价任务
            QueryWrapper<CaseTask> caseTaskQueryWrapper = new QueryWrapper<>();
            caseTaskQueryWrapper.in("case_id", idList).eq("node_id", FlowNodeEnum.FLOW_NODE_DSRPJ.getIndex());
            caseTaskQueryWrapper.in("case_id", idList).eq("node_id", FlowNodeEnum.FLOW_NODE_DSRPJ.getIndex()).orderByDesc("create_time");
            List<CaseTask> dsrpjCaseTaskList = caseTaskService.list(caseTaskQueryWrapper);
            for(CaseTask dsrpjCaseTask: dsrpjCaseTaskList){
                // 完成当前当事人评价节点任务
@@ -285,14 +285,19 @@
                CaseTask jagdCaseTask = new CaseTask();
                jagdCaseTask.setId(utilsClient.getNewTimeId());
                jagdCaseTask.setCaseId(dsrpjCaseTask.getCaseId());
                jagdCaseTask.setFlowableId(jagdFlowNode.getFlowableId());
                jagdCaseTask.setProcessInstanceId(jagdFlowNode.getProcessInstanceId());
                jagdCaseTask.setProcessTaskId(jagdFlowNode.getProcessTaskId());
                jagdCaseTask.setNodeType(jagdFlowNode.getNodeType());
                jagdCaseTask.setNodeId(jagdFlowNode.getNodeId());
                jagdCaseTask.setNodeName(jagdFlowNode.getNodeName());
                jagdCaseTask.setFlowId(jagdFlowNode.getFlowId());
                jagdCaseTask.setNodeShowName(jagdFlowNode.getNodeShowName());
                if(jagdFlowNode!=null){
                    jagdCaseTask.setFlowableId(jagdFlowNode.getFlowableId());
                    jagdCaseTask.setProcessInstanceId(jagdFlowNode.getProcessInstanceId());
                    jagdCaseTask.setProcessTaskId(jagdFlowNode.getProcessTaskId());
                    jagdCaseTask.setNodeType(jagdFlowNode.getNodeType());
                    jagdCaseTask.setNodeId(jagdFlowNode.getNodeId());
                    jagdCaseTask.setNodeName(jagdFlowNode.getNodeName());
                    jagdCaseTask.setFlowId(jagdFlowNode.getFlowId());
                    jagdCaseTask.setNodeShowName(jagdFlowNode.getNodeShowName());
                    if (jagdFlowNode.getExpire() != 0) {
                        jagdCaseTask.setExpireTime(syHolidayService.getExpiryDay(nowDate, jagdFlowNode.getExpire()));
                    }
                }
                jagdCaseTask.setCaseTaskType(CaseTaskConsts.CASE_TASK_TYPE_1);
                // 任务所属单位:结案申请组织
                caseTaskQueryWrapper.clear();
@@ -306,9 +311,6 @@
                jagdCaseTask.setReadStatus(CaseTaskConsts.READ_STATUS_0);
                jagdCaseTask.setStatus(CaseTaskConsts.TASK_STATUS_2);
                // 任务处理时限
                if (jagdFlowNode.getExpire() != 0) {
                    jagdCaseTask.setExpireTime(syHolidayService.getExpiryDay(nowDate, jagdFlowNode.getExpire()));
                }
                jagdCaseTask.setHandleUnitId(jasqCaseTaskList.get(0).getHandleUnitId());
                jagdCaseTask.setHandleUnitName(jasqCaseTaskList.get(0).getHandleUnitName());
                jagdCaseTask.setHandleDeptId(jasqCaseTaskList.get(0).getHandleDeptId());
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseInfoService.java
@@ -310,13 +310,19 @@
            generateQrCodeRequestVo.setBusinessSource("02");
            generateQrCodeRequestVo.setGenerateUnifiedCode(true);
            generateQrCodeRequestVo.setInfoSource("03");
            String area = this.formatGridCode(ctUnitDTO.getArea());
            log.info("xsdgridCode:{}",registerSaveDTO.getQueArea());
            String area = this.formatGridCode(registerSaveDTO.getQueArea());
            log.info("xsdgridCode:{}",area);
            generateQrCodeRequestVo.setGridCode(area);
            caseInfo.setCaseRef(sysClient.getCaseRefByGenerateQrCode(generateQrCodeRequestVo));
            // 获取调解案号
            caseInfo.setCaseNo(utilsClient.createCaseNo(ctUnitDTO.getArea()));
            caseInfo.setVisitWay(CaseBaseConstsEnum.getVisitWayByCanal(caseInfo.getCanal()).getIndex());
            caseInfo.setVisitWayName(CaseBaseConstsEnum.getVisitWayByCanal(caseInfo.getCanal()).getDes());
            if (caseInfo.getCanal().equals(CaseBaseConstsEnum.CASE_CANAL_3.getIndex())) {
                caseInfo.setCanalSecond(CaseBaseConstsEnum.CASE_CANAL_SECOND_8.getIndex());
                caseInfo.setCanalSecondName(CaseBaseConstsEnum.CASE_CANAL_SECOND_8.getDes());
            }
            //默认小程序可见
            if (ObjectUtils.isNotEmpty(caseInfo.getCanal())) {
                if (CaseBaseConstsEnum.CASE_CANAL_1.getIndex().equals(caseInfo.getCanal())) {
@@ -1134,7 +1140,7 @@
        }
        if (ObjectUtils.isNotEmpty(content)) {
            for (CasePageDTO casePageDTO : content) {
                if (CaseBaseConstsEnum.CASE_CANAL_4.getIndex().equals(casePageDTO.getCanal())) {
                if (StringUtils.isNotEmpty(casePageDTO.getCanalSecondName())) {
                    casePageDTO.setCanalName(casePageDTO.getCanalName() + "-" + casePageDTO.getCanalSecondName());
                }
                StringBuffer sb = new StringBuffer();
@@ -1307,10 +1313,10 @@
        return new PageImpl<CasePageDTO>(content, page, total);
    }
        /**
    /**
     * 统计调解过程
     * 计算案件的调解过程相关统计数据,包括不予受理率、化解中率、化解成功率、化解不成功率等
     *
     *
     * @param terms 统计条件
     * @return 包含调解过程统计数据的DTO对象
     */
@@ -1323,15 +1329,15 @@
        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;
    }
    /**
     * 纠纷态势
@@ -1484,29 +1490,8 @@
            }
            areaTotal = areaTotal + caseStatisticsAreaDTO.getCaseNum();
            //本及:承办单位是本及和没有承办单位并且没有下级区域编码
//            if(ObjectUtils.isEmpty(caseStatisticsAreaDTO.getAreaCode()) || unitGrades.contains(caseStatisticsAreaDTO.getUnitGrade())){
//                allArea.setCaseNum(dellNull(caseStatisticsAreaDTO.getCaseNum()) + dellNull(allArea.getCaseNum()));
//                allArea.setResolveNum(dellNull(caseStatisticsAreaDTO.getResolveNum()) + dellNull(allArea.getResolveNum()));
//                allArea.setUnResolveNum(dellNull(caseStatisticsAreaDTO.getUnResolveNum()) + dellNull(allArea.getUnResolveNum()));
//                allArea.setResolveingNum(dellNull(caseStatisticsAreaDTO.getResolveingNum()) + dellNull(allArea.getResolveingNum()));
//            }else{
//                areaList.add(caseStatisticsAreaDTO);
//                areaCodeList.add(caseStatisticsAreaDTO.getAreaCode());
//            }
        }
        areaList.add(allArea);
//        if ("1".equals(areaType)) {
//            Map<String, String> area = getArea();
//            for (String areaName : area.keySet()) {
//                if (!areaNames.contains(areaName)) {
//                    CaseStatisticsAreaDTO areaChild = new CaseStatisticsAreaDTO();
//                    areaChild.setAreaCode(area.get(areaName));
//                    areaChild.setAreaName(areaName);
//                    areaList.add(areaChild);
//                }
//            }
//        }
        List<QueAreaDTO> queArea = listAreaByType(areaCode);
        log.info("listAreaByType {}", JSON.toJSONString(queArea));
@@ -1545,12 +1530,6 @@
            } else {
                otherCaseNum = otherCaseNum + dellNull(caseStatisticsTypeDTO.getCaseNum());
            }
//            if (i > 5) {
//                otherCaseNum = otherCaseNum + dellNull(caseStatisticsTypeDTO.getCaseNum());
//            } else {
//                typeList.add(caseStatisticsTypeDTO);
//            }
        }
        for (CaseStatisticsTypeDTO caseStatisticsTypeDTO : typeList) {
            caseStatisticsTypeDTO.setCaseRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsTypeDTO.getCaseNum() * 100, typeTotalNum, 1));
@@ -2120,34 +2099,220 @@
        return caseOverviewDetailDTOs;
    }
    public CaseStatisticsBaseDTO ledger(Map<String, Object> terms, String userId) throws IOException {
        // 备份原始的类型筛选条件,用于后续恢复
        Map<String, Object> originalTypeTerms = new HashMap<>();
        if (terms.containsKey("canal")) {
            originalTypeTerms.put("canal", terms.get("canal"));
    public CaseStatisticsBaseDTO ledger(Map<String, Object> terms, String userId,String ledgerType) throws IOException {
        terms.put("statistics", "1");
        CtUnitDTO ctUnitDTO = null;
        if (ObjectUtils.isNotEmpty(userId)) {
            ctUnitDTO = custClient.getUnitByUserId(userId);
        }
        if (terms.containsKey("canalSecond")) {
            originalTypeTerms.put("canalSecond", terms.get("canalSecond"));
        }
        if (terms.containsKey("canalList")) {
            originalTypeTerms.put("canalList", terms.get("canalList"));
        }
        if (terms.containsKey("canalSecondNot")) {
            originalTypeTerms.put("canalSecondNot", terms.get("canalSecondNot"));
        }
        if (terms.containsKey("canalSecondAll")) {
            originalTypeTerms.put("canalSecondAll", terms.get("canalSecondAll"));
        String areaCode = null;
        //目前没有村居数据,所以单位等级是4的也归集到3里面
        if (ObjectUtils.isNotEmpty(ctUnitDTO)) {
            if (ctUnitDTO.getUnitGrade().equals(1)) {
                terms.put("queCity", ctUnitDTO.getCity());
            } else if (ctUnitDTO.getUnitGrade().equals(2)) {
                terms.put("queArea", ctUnitDTO.getArea());
            } else if (ctUnitDTO.getUnitGrade().equals(3)) {
                terms.put("queRoad", ctUnitDTO.getRoad());
            } else if (ctUnitDTO.getUnitGrade().equals(4)) {
                terms.put("queVillage", ctUnitDTO.getVillage());
            }
        }
        // 临时移除类型筛选条件,以便 statistics 获取全量数据
        terms.remove("canal");
        terms.remove("canalSecond");
        terms.remove("canalList");
        terms.remove("canalSecondNot");
        terms.remove("canalSecondAll");
        //目前没有村居,所以区和街道进来都是按街道展示
        String areaType = null;
        String childAreaType = null;
        List<Integer> unitGrades = new ArrayList<>();
        List<Integer> childUnitGrades = new ArrayList<>();
        String childUnitGradeStr = null;
        String unitGradeStr = null;
        Boolean isLast = false;
        if (ObjectUtils.isNotEmpty(terms.get("queVillage"))) {
            terms.remove("queArea");
            terms.remove("queCity");
            terms.remove("queRoad");
            areaType = "4";
            childAreaType = "5";
            areaCode = terms.get("queVillage") + "";
            unitGrades.add(4);
            childUnitGrades.add(5);
            childUnitGradeStr = "5";
            unitGradeStr = "4";
            isLast = true;
        } else if (ObjectUtils.isNotEmpty(terms.get("queRoad"))) {
            terms.remove("queArea");
            terms.remove("queCity");
            areaType = "3";
            childAreaType = "4";
            areaCode = terms.get("queRoad") + "";
            unitGrades.add(3);
            childUnitGrades.add(4);
            childUnitGradeStr = "4";
            unitGradeStr = "3";
        } else if (ObjectUtils.isNotEmpty(terms.get("queArea"))) {
            terms.remove("queCity");
            areaType = "2";
            childAreaType = "3";
            areaCode = terms.get("queArea") + "";
            unitGrades.add(2);
            childUnitGrades.add(3);
            childUnitGrades.add(4);
            childUnitGradeStr = "3,4";
            unitGradeStr = "2";
        } else {
            areaType = "1";
            childAreaType = "2";
            unitGrades.add(1);
            childUnitGrades.add(2);
            childUnitGrades.add(3);
            childUnitGrades.add(4);
            if (ObjectUtils.isNotEmpty(ctUnitDTO)) {
                areaCode = ctUnitDTO.getCity();
            } else {
                areaCode = "440100";
            }
            childUnitGradeStr = "2,3,4";
            unitGradeStr = "1";
        }
        //基础数据统计
        terms.put("areaType", areaType);
        // 调用统计调解过程的方法
        CaseStatisticsBaseDTO caseStatisticsBaseDTO = new CaseStatisticsBaseDTO();
        List<String> areaCodeList = new ArrayList<>();
        List<CaseStatisticsAreaDTO> areaList = new ArrayList<>();
        //本系统或者全部的时候才去查询数据
        if(ObjectUtils.isEmpty(ledgerType) || "1".equals(ledgerType)){
            caseStatisticsBaseDTO = statisticsProcess(terms);
            //区域数据统计
            List<CaseStatisticsAreaDTO> caseStatisticsAreaDTOS = new ArrayList<>();
            if (!isLast) {
                terms.put("areaType", childAreaType);
                terms.put("unitGrades", childUnitGrades);
                caseStatisticsAreaDTOS = mapper.statisticsArea(terms);
                if (ObjectUtils.isEmpty(caseStatisticsAreaDTOS)) {
                    caseStatisticsAreaDTOS = new ArrayList<>();
                } else {
                    for (CaseStatisticsAreaDTO caseStatisticsAreaDTO : caseStatisticsAreaDTOS) {
                        caseStatisticsAreaDTO.setAreaType(childAreaType);
                        caseStatisticsAreaDTO.setUnitGrades(childUnitGradeStr);
                        if ("4".equals(childAreaType)) {
                            caseStatisticsAreaDTO.setQueVillage(caseStatisticsAreaDTO.getAreaCode());
                        } else if ("3".equals(childAreaType)) {
                            caseStatisticsAreaDTO.setQueRoad(caseStatisticsAreaDTO.getAreaCode());
                        } else if ("2".equals(childAreaType)) {
                            caseStatisticsAreaDTO.setQueArea(caseStatisticsAreaDTO.getAreaCode());
                        }
                    }
                }
            }
            //本级区数据
            terms.put("areaType", areaType);
            terms.put("unitGrades", unitGrades);
            List<CaseStatisticsAreaDTO> allAreas = mapper.statisticsArea(terms);
            CaseStatisticsAreaDTO allArea = new CaseStatisticsAreaDTO();
            if (ObjectUtils.isNotEmpty(allAreas)) {
                allArea = allAreas.get(0);
            }
            terms.remove("unitGrades");
            allArea.setAreaName("本级");
            allArea.setAreaCode("0");
            allArea.setAreaType(areaType);
            allArea.setUnitGrades(unitGradeStr);
            if (ObjectUtils.isNotEmpty(terms.get("queVillage"))) {
                allArea.setQueVillage(terms.get("queVillage") + "");
            }
            if (ObjectUtils.isNotEmpty(terms.get("queRoad"))) {
                allArea.setQueRoad(terms.get("queRoad") + "");
            }
            if (ObjectUtils.isNotEmpty(terms.get("queArea"))) {
                allArea.setQueArea(terms.get("queArea") + "");
            }
            if (ObjectUtils.isNotEmpty(terms.get("queCity"))) {
                allArea.setQueCity(terms.get("queCity") + "");
            }
            List<String> areaNames = new ArrayList<>();//为兼容白云区数据
            Integer areaTotal = allArea.getCaseNum();
            for (CaseStatisticsAreaDTO caseStatisticsAreaDTO : caseStatisticsAreaDTOS) {
                areaNames.add(caseStatisticsAreaDTO.getAreaName());
                if (ObjectUtils.isEmpty(caseStatisticsAreaDTO.getAreaCode())) {
                    allArea.setCaseNum(dellNull(caseStatisticsAreaDTO.getCaseNum()) + dellNull(allArea.getCaseNum()));
                    allArea.setResolveNum(dellNull(caseStatisticsAreaDTO.getResolveNum()) + dellNull(allArea.getResolveNum()));
                    allArea.setUnResolveNum(dellNull(caseStatisticsAreaDTO.getUnResolveNum()) + dellNull(allArea.getUnResolveNum()));
                    allArea.setResolveingNum(dellNull(caseStatisticsAreaDTO.getResolveingNum()) + dellNull(allArea.getResolveingNum()));
                    allArea.setRejectNum(dellNull(caseStatisticsAreaDTO.getRejectNum()) + dellNull(allArea.getRejectNum()));
                } else {
                    areaList.add(caseStatisticsAreaDTO);
                    areaCodeList.add(caseStatisticsAreaDTO.getAreaCode());
                }
                areaTotal = areaTotal + caseStatisticsAreaDTO.getCaseNum();
            }
            areaList.add(allArea);
            //纠纷类型统计
            List<CaseStatisticsTypeDTO> caseStatisticsTypeDTOS = mapper.statisticsTypeFirst(terms);
            if (ObjectUtils.isNotEmpty(caseStatisticsTypeDTOS)) {
                sortType(caseStatisticsTypeDTOS);
            }
            Integer typeTotalNum = 0;
            Integer otherCaseNum = 0;
            int i = 1;
            List<CaseStatisticsTypeDTO> typeList = new ArrayList<>();
            for (CaseStatisticsTypeDTO caseStatisticsTypeDTO : caseStatisticsTypeDTOS) {
                typeTotalNum = typeTotalNum + dellNull(caseStatisticsTypeDTO.getCaseNum());
                if (i < 6 && !"其他".equals(caseStatisticsTypeDTO.getCaseTypeName())) {
                    typeList.add(caseStatisticsTypeDTO);
                    i++;
                } else {
                    otherCaseNum = otherCaseNum + dellNull(caseStatisticsTypeDTO.getCaseNum());
                }
            }
            for (CaseStatisticsTypeDTO caseStatisticsTypeDTO : typeList) {
                caseStatisticsTypeDTO.setCaseRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsTypeDTO.getCaseNum() * 100, typeTotalNum, 1));
            }
            if (otherCaseNum > 0) {
                CaseStatisticsTypeDTO caseStatisticsTypeDTO = new CaseStatisticsTypeDTO();
                caseStatisticsTypeDTO.setCaseTypeName("其他");
                caseStatisticsTypeDTO.setCaseNum(otherCaseNum);
                caseStatisticsTypeDTO.setCaseRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsTypeDTO.getCaseNum() * 100, typeTotalNum, 1));
                typeList.add(caseStatisticsTypeDTO);
                caseStatisticsBaseDTO.setTypeList(typeList);
            }
        }
        List<QueAreaDTO> queArea = listAreaByType(areaCode);
        log.info("listAreaByType {}", JSON.toJSONString(queArea));
        for (QueAreaDTO caseAreaDTO : queArea) {
            if (!areaCodeList.contains(caseAreaDTO.getAreaCode())) {
                CaseStatisticsAreaDTO areaChild = new CaseStatisticsAreaDTO();
                areaChild.setAreaCode(caseAreaDTO.getAreaCode());
                areaChild.setAreaName(caseAreaDTO.getAreaName());
                areaChild.setCaseNum(0);
                areaChild.setResolveNum(0);
                areaChild.setUnResolveNum(0);
                areaChild.setResolveingNum(0);
                areaList.add(areaChild);
            }
        }
        if (ObjectUtils.isNotEmpty(areaList)) {
            sortArea(areaList);
        }
        caseStatisticsBaseDTO.setAreaList(areaList);
        return caseStatisticsBaseDTO;
    }
    public CaseStatisticsBaseDTO ledgerCount(Map<String, Object> terms, String userId) throws IOException {
        // 获取全量基础统计数据
        CaseStatisticsBaseDTO statistics = statistics(terms, userId);
        CaseStatisticsBaseDTO statistics = new CaseStatisticsBaseDTO();
        terms.put("statistics", "1");
        //根据用户筛选区域范围
@@ -2184,316 +2349,40 @@
        terms.remove("canalSecond");
        terms.remove("canal");
        terms.put("areaType", areaType);
        terms.put("canalList", Arrays.asList("22_00001-1", "22_00001-2", "22_00001-3"));
        CaseStatisticsBaseDTO caseStatisticsBaseDTO1 = mapper.statisticsBase(terms);
        statistics.setSysNum(caseStatisticsBaseDTO1.getTotalNum());
        terms.remove("canalList");
        terms.put("canal", "22_00001-4");
        terms.put("canalSecond", "22_00003-3");
        CaseStatisticsBaseDTO caseStatisticsBaseDTO2 = mapper.statisticsBase(terms);
        statistics.setOttffNum(caseStatisticsBaseDTO2.getTotalNum());
        terms.put("canalSecond", "22_00003-4");
        CaseStatisticsBaseDTO caseStatisticsBaseDTO3 = mapper.statisticsBase(terms);
        statistics.setRmtjNum(caseStatisticsBaseDTO3.getTotalNum());
        terms.put("canalSecond", "22_00003-6");
        CaseStatisticsBaseDTO caseStatisticsBaseDTO4 = mapper.statisticsBase(terms);
        statistics.setXfNum(caseStatisticsBaseDTO4.getTotalNum());
        terms.put("canalSecond", "22_00003-5");
        CaseStatisticsBaseDTO caseStatisticsBaseDTO5 = mapper.statisticsBase(terms);
        statistics.setLdzcNum(caseStatisticsBaseDTO5.getTotalNum());
        terms.put("canalSecond", "22_00003-1");
        CaseStatisticsBaseDTO caseStatisticsBaseDTO6 = mapper.statisticsBase(terms);
        statistics.setFjwjfNum(caseStatisticsBaseDTO6.getTotalNum());
        // 重新计算纠纷类型统计,基于用户选择的类型
        terms.remove("canalSecond");
        terms.remove("canal");
        terms.remove("canalList");
        terms.remove("canalSecondNot");
        terms.remove("canalSecondAll");
        // 恢复所有原始类型筛选条件进行纠纷类型统计
        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.isNotEmpty(caseStatisticsTypeDTOS)) {
            sortType(caseStatisticsTypeDTOS);
        }
        Integer typeTotalNum = 0;
        Integer otherCaseNum = 0;
        int i = 1;
        List<CaseStatisticsTypeDTO> typeList = new ArrayList<>();
        for (CaseStatisticsTypeDTO caseStatisticsTypeDTO : caseStatisticsTypeDTOS) {
            typeTotalNum = typeTotalNum + dellNull(caseStatisticsTypeDTO.getCaseNum());
            if (i < 6 && !"其他".equals(caseStatisticsTypeDTO.getCaseTypeName())) {
                typeList.add(caseStatisticsTypeDTO);
                i++;
            } else {
                otherCaseNum = otherCaseNum + dellNull(caseStatisticsTypeDTO.getCaseNum());
            }
        }
        for (CaseStatisticsTypeDTO caseStatisticsTypeDTO : typeList) {
            caseStatisticsTypeDTO.setCaseRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsTypeDTO.getCaseNum() * 100, typeTotalNum, 1));
        }
        if (otherCaseNum > 0) {
            CaseStatisticsTypeDTO caseStatisticsTypeDTO = new CaseStatisticsTypeDTO();
            caseStatisticsTypeDTO.setCaseTypeName("其他");
            caseStatisticsTypeDTO.setCaseNum(otherCaseNum);
            caseStatisticsTypeDTO.setCaseRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsTypeDTO.getCaseNum() * 100, typeTotalNum, 1));
            typeList.add(caseStatisticsTypeDTO);
        }
        statistics.setTypeList(typeList);
//        terms.remove("canalList");
//        terms.put("canal", "22_00001-4");
//        terms.put("canalSecond", "22_00003-3");
//        CaseStatisticsBaseDTO caseStatisticsBaseDTO2 = mapper.statisticsBase(terms);
//        statistics.setOttffNum(caseStatisticsBaseDTO2.getTotalNum());
//        terms.put("canalSecond", "22_00003-4");
//        CaseStatisticsBaseDTO caseStatisticsBaseDTO3 = mapper.statisticsBase(terms);
//        statistics.setRmtjNum(caseStatisticsBaseDTO3.getTotalNum());
//        terms.put("canalSecond", "22_00003-6");
//        CaseStatisticsBaseDTO caseStatisticsBaseDTO4 = mapper.statisticsBase(terms);
//        statistics.setXfNum(caseStatisticsBaseDTO4.getTotalNum());
//        terms.put("canalSecond", "22_00003-5");
//        CaseStatisticsBaseDTO caseStatisticsBaseDTO5 = mapper.statisticsBase(terms);
//        statistics.setLdzcNum(caseStatisticsBaseDTO5.getTotalNum());
//        terms.put("canalSecond", "22_00003-1");
//        CaseStatisticsBaseDTO caseStatisticsBaseDTO6 = mapper.statisticsBase(terms);
//        statistics.setTzfjwjfNum(caseStatisticsBaseDTO6.getTotalNum());
        // 根据原始类型筛选条件计算总数和比率
        // 注意:比率计算应该始终基于所有类型的总数,而不是选择的特定类型数量
        Integer allNum = statistics.getSysNum() + statistics.getOttffNum() + statistics.getRmtjNum() + statistics.getXfNum() + statistics.getLdzcNum() + statistics.getFjwjfNum();
        Integer allNum = statistics.getSysNum() + statistics.getOttffNum() + statistics.getRmtjNum() + statistics.getXfNum() + statistics.getLdzcNum() + statistics.getTzfjwjfNum();
        statistics.setSysRate(BigDecimalUtil.integerDivideDelZero(statistics.getSysNum() * 100, allNum, 1));
        statistics.setOttffRate(BigDecimalUtil.integerDivideDelZero(statistics.getOttffNum() * 100, allNum, 1));
        statistics.setRmtjRate(BigDecimalUtil.integerDivideDelZero(statistics.getRmtjNum() * 100, allNum, 1));
        statistics.setXfRate(BigDecimalUtil.integerDivideDelZero(statistics.getXfNum() * 100, allNum, 1));
        statistics.setLdzcRate(BigDecimalUtil.integerDivideDelZero(statistics.getLdzcNum() * 100, allNum, 1));
        statistics.setFjwjfRate(BigDecimalUtil.integerDivideDelZero(statistics.getFjwjfNum() * 100, allNum, 1));
        statistics.setTzfjwjfRate(BigDecimalUtil.integerDivideDelZero(statistics.getTzfjwjfNum() * 100, allNum, 1));
        statistics.setAllNum(allNum);
        // 重新计算地区统计(areaList),基于用户选择的类型
        // 清除之前的筛选条件
        terms.remove("canal");
        terms.remove("canalSecond");
        terms.remove("canalList");
        terms.remove("canalSecondNot");
        terms.remove("canalSecondAll");
        // 恢复所有原始类型筛选条件进行地区统计
        for (String key : originalTypeTerms.keySet()) {
            terms.put(key, originalTypeTerms.get(key));
        }
        // 从原有逻辑中获取区域相关变量
        String childAreaType = null;
        List<Integer> childUnitGrades = new ArrayList<>();
        String childUnitGradeStr = null;
        String unitGradeStr = null;
        Boolean isLast = false;
        List<Integer> unitGrades = new ArrayList<>();
        if (ObjectUtils.isNotEmpty(terms.get("queVillage"))) {
            childAreaType = "5";
            childUnitGrades.add(5);
            childUnitGradeStr = "5";
            unitGradeStr = "4";
            unitGrades.add(4);
            isLast = true;
        } else if (ObjectUtils.isNotEmpty(terms.get("queRoad"))) {
            childAreaType = "4";
            childUnitGrades.add(4);
            childUnitGradeStr = "4";
            unitGradeStr = "3";
            unitGrades.add(3);
        } else if (ObjectUtils.isNotEmpty(terms.get("queArea"))) {
            childAreaType = "3";
            childUnitGrades.add(3);
            childUnitGrades.add(4);
            childUnitGradeStr = "3,4";
            unitGradeStr = "2";
            unitGrades.add(2);
        } else {
            childAreaType = "2";
            childUnitGrades.add(2);
            childUnitGrades.add(3);
            childUnitGrades.add(4);
            childUnitGradeStr = "2,3,4";
            unitGradeStr = "1";
            unitGrades.add(1);
        }
        // 重新计算地区统计
        List<CaseStatisticsAreaDTO> areaStatistics = new ArrayList<>();
        if (!isLast) {
            terms.put("areaType", childAreaType);
            terms.put("unitGrades", childUnitGrades);
            areaStatistics = mapper.statisticsArea(terms);
            if (ObjectUtils.isEmpty(areaStatistics)) {
                areaStatistics = new ArrayList<>();
            } else {
                for (CaseStatisticsAreaDTO areaDTO : areaStatistics) {
                    areaDTO.setAreaType(childAreaType);
                    areaDTO.setUnitGrades(childUnitGradeStr);
                    if ("4".equals(childAreaType)) {
                        areaDTO.setQueVillage(areaDTO.getAreaCode());
                    } else if ("3".equals(childAreaType)) {
                        areaDTO.setQueRoad(areaDTO.getAreaCode());
                    } else if ("2".equals(childAreaType)) {
                        areaDTO.setQueArea(areaDTO.getAreaCode());
                    }
                }
            }
        }
        // 本级区数据
        terms.put("areaType", areaType);
        terms.put("unitGrades", unitGrades);
        List<CaseStatisticsAreaDTO> allAreas = mapper.statisticsArea(terms);
        CaseStatisticsAreaDTO allArea = new CaseStatisticsAreaDTO();
        if (ObjectUtils.isNotEmpty(allAreas)) {
            allArea = allAreas.get(0);
        }
        terms.remove("unitGrades");
        allArea.setAreaName("本级");
        allArea.setAreaCode("0");
        allArea.setAreaType(areaType);
        allArea.setUnitGrades(unitGradeStr);
        if (ObjectUtils.isNotEmpty(terms.get("queVillage"))) {
            allArea.setQueVillage(terms.get("queVillage") + "");
        }
        if (ObjectUtils.isNotEmpty(terms.get("queRoad"))) {
            allArea.setQueRoad(terms.get("queRoad") + "");
        }
        if (ObjectUtils.isNotEmpty(terms.get("queArea"))) {
            allArea.setQueArea(terms.get("queArea") + "");
        }
        if (ObjectUtils.isNotEmpty(terms.get("queCity"))) {
            allArea.setQueCity(terms.get("queCity") + "");
        }
        List<String> areaCodeList = new ArrayList<>();
        List<CaseStatisticsAreaDTO> areaList = new ArrayList<>();
        for (CaseStatisticsAreaDTO areaDTO : areaStatistics) {
            if (ObjectUtils.isEmpty(areaDTO.getAreaCode())) {
                allArea.setCaseNum(dellNull(areaDTO.getCaseNum()) + dellNull(allArea.getCaseNum()));
                allArea.setResolveNum(dellNull(areaDTO.getResolveNum()) + dellNull(allArea.getResolveNum()));
                allArea.setUnResolveNum(dellNull(areaDTO.getUnResolveNum()) + dellNull(allArea.getUnResolveNum()));
                allArea.setResolveingNum(dellNull(areaDTO.getResolveingNum()) + dellNull(allArea.getResolveingNum()));
                allArea.setRejectNum(dellNull(areaDTO.getRejectNum()) + dellNull(allArea.getRejectNum()));
            } else {
                areaList.add(areaDTO);
                areaCodeList.add(areaDTO.getAreaCode());
            }
        }
        areaList.add(allArea);
        // 添加没有数据的区域(数量为0)
        String areaCode = null;
        if (ObjectUtils.isNotEmpty(terms.get("queVillage"))) {
            areaCode = terms.get("queVillage") + "";
        } else if (ObjectUtils.isNotEmpty(terms.get("queRoad"))) {
            areaCode = terms.get("queRoad") + "";
        } else if (ObjectUtils.isNotEmpty(terms.get("queArea"))) {
            areaCode = terms.get("queArea") + "";
        } else {
            areaCode = terms.get("queCity") != null ? terms.get("queCity") + "" : "440100";
        }
        List<QueAreaDTO> queArea = listAreaByType(areaCode);
        for (QueAreaDTO caseAreaDTO : queArea) {
            if (!areaCodeList.contains(caseAreaDTO.getAreaCode())) {
                CaseStatisticsAreaDTO areaChild = new CaseStatisticsAreaDTO();
                areaChild.setAreaCode(caseAreaDTO.getAreaCode());
                areaChild.setAreaName(caseAreaDTO.getAreaName());
                areaChild.setCaseNum(0);
                areaChild.setResolveNum(0);
                areaChild.setUnResolveNum(0);
                areaChild.setResolveingNum(0);
                areaList.add(areaChild);
            }
        }
        if (ObjectUtils.isNotEmpty(areaList)) {
            sortArea(areaList);
        }
        // 更新statistics中的areaList
        statistics.setAreaList(areaList);
        return statistics;
    }
    // public CaseStatisticsBaseDTO ledger(Map<String, Object> terms, String userId) throws IOException {
    //     CaseStatisticsBaseDTO statistics = statistics(terms, userId);
    //
    //     terms.put("statistics", "1");
    //     //根据用户筛选区域范围
    //     CtUnitDTO ctUnitDTO = custClient.getUnitByUserId(userId);
    //     //目前没有村居数据,所以单位等级是4的也归集到3里面
    //     String areaType = null;
    //     terms.remove("unitGrade");
    //     terms.remove("canal");
    //     if (ctUnitDTO.getUnitGrade().equals(1)) {
    //         terms.put("queCity", ctUnitDTO.getCity());
    //     } else if (ctUnitDTO.getUnitGrade().equals(2)) {
    //         terms.put("queArea", ctUnitDTO.getArea());
    //     } else if (ctUnitDTO.getUnitGrade().equals(3)) {
    //         terms.put("queRoad", ctUnitDTO.getRoad());
    //     } else if (ctUnitDTO.getUnitGrade().equals(4)) {
    //         terms.put("queVillage", ctUnitDTO.getRoad());
    //     }
    //     if (ObjectUtils.isNotEmpty(terms.get("queVillage"))) {
    //         terms.remove("queArea");
    //         terms.remove("queCity");
    //         terms.remove("queRoad");
    //         areaType = "4";
    //     } else if (ObjectUtils.isNotEmpty(terms.get("queRoad"))) {
    //         terms.remove("queArea");
    //         terms.remove("queCity");
    //         areaType = "3";
    //     } else if (ObjectUtils.isNotEmpty(terms.get("queArea"))) {
    //         terms.remove("queCity");
    //         areaType = "2";
    //     } else {
    //         areaType = "1";
    //     }
    //     //基础数据统计
    //     terms.remove("canalSecond");
    //     terms.remove("canal");
    //     terms.put("areaType", areaType);
    //     terms.put("canalList", Arrays.asList("22_00001-1", "22_00001-2", "22_00001-3"));
    //     CaseStatisticsBaseDTO caseStatisticsBaseDTO1 = mapper.statisticsBase(terms);
    //     statistics.setSysNum(caseStatisticsBaseDTO1.getTotalNum());
    //     terms.remove("canalList");
    //     terms.put("canal", "22_00001-4");
    //     terms.put("canalSecond", "22_00003-3");
    //     CaseStatisticsBaseDTO caseStatisticsBaseDTO2 = mapper.statisticsBase(terms);
    //     statistics.setOttffNum(caseStatisticsBaseDTO2.getTotalNum());
    //     terms.put("canalSecond", "22_00003-4");
    //     CaseStatisticsBaseDTO caseStatisticsBaseDTO3 = mapper.statisticsBase(terms);
    //     statistics.setRmtjNum(caseStatisticsBaseDTO3.getTotalNum());
    //     terms.put("canalSecond", "22_00003-6");
    //     CaseStatisticsBaseDTO caseStatisticsBaseDTO4 = mapper.statisticsBase(terms);
    //     statistics.setXfNum(caseStatisticsBaseDTO4.getTotalNum());
    //     terms.put("canalSecond", "22_00003-5");
    //     CaseStatisticsBaseDTO caseStatisticsBaseDTO5 = mapper.statisticsBase(terms);
    //     statistics.setLdzcNum(caseStatisticsBaseDTO5.getTotalNum());
    //     terms.put("canalSecond", "22_00003-1");
    //     CaseStatisticsBaseDTO caseStatisticsBaseDTO6 = mapper.statisticsBase(terms);
    //     statistics.setFjwjfNum(caseStatisticsBaseDTO6.getTotalNum());
    //
    //     Integer allNum = statistics.getSysNum() + statistics.getOttffNum() + statistics.getRmtjNum() + statistics.getXfNum() + statistics.getLdzcNum() + statistics.getFjwjfNum();
    //     statistics.setSysRate(BigDecimalUtil.integerDivideDelZero(statistics.getSysNum() * 100, allNum, 1));
    //     statistics.setOttffRate(BigDecimalUtil.integerDivideDelZero(statistics.getOttffNum() * 100, allNum, 1));
    //     statistics.setRmtjRate(BigDecimalUtil.integerDivideDelZero(statistics.getRmtjNum() * 100, allNum, 1));
    //     statistics.setXfRate(BigDecimalUtil.integerDivideDelZero(statistics.getXfNum() * 100, allNum, 1));
    //     statistics.setLdzcRate(BigDecimalUtil.integerDivideDelZero(statistics.getLdzcNum() * 100, allNum, 1));
    //     statistics.setFjwjfRate(BigDecimalUtil.integerDivideDelZero(statistics.getFjwjfNum() * 100, allNum, 1));
    //     statistics.setAllNum(allNum);
    //     return statistics;
    // }
    /**
     * 按系列案编号查询
@@ -2545,9 +2434,9 @@
            } else {
                terms.put("queryType", 3);
            }
            log.info("xsd:{}",terms);
            log.info("xsd:{}", terms);
            CtUnitDTO ctUnitDTO = mapper.getUnitByGridCode(terms);
            log.info("xsd:ctUnitDTO{}",ctUnitDTO);
            log.info("xsd:ctUnitDTO{}", ctUnitDTO);
            if (ObjectUtils.isNotEmpty(ctUnitDTO)) {
                if (StringUtils.isNotBlank(ctUnitDTO.getCity()) && StringUtils.isNotBlank(ctUnitDTO.getCityName())) {
                    registerSaveDTO.setQueCity(ctUnitDTO.getCity());
@@ -2635,11 +2524,12 @@
                // 获取调解案号
                caseInfo.setCaseNo(utilsClient.createCaseNo(ctUnitDTO.getArea()));
                caseInfo.setVisitWay(CaseBaseConstsEnum.VISIT_WAY_3.getIndex());
                caseInfo.setVisitWayName(CaseBaseConstsEnum.VISIT_WAY_3.getDes());
                caseInfo.setCanal(CaseBaseConstsEnum.CASE_CANAL_4.getIndex());
                caseInfo.setCanalName(CaseBaseConstsEnum.CASE_CANAL_4.getDes());
                caseInfo.setVisitWay(CaseBaseConstsEnum.VISIT_WAY_4.getIndex());
                caseInfo.setVisitWayName(CaseBaseConstsEnum.VISIT_WAY_4.getDes());
                if (StringUtils.isEmpty(caseInfo.getCanal())) {
                    caseInfo.setCanal(CaseBaseConstsEnum.CASE_CANAL_4.getIndex());
                    caseInfo.setCanalName(CaseBaseConstsEnum.CASE_CANAL_4.getDes());
                }
                caseInfo.setCaseLevel(3);
//                //获取一级类型
//                SyCause syCause = sysClient.getParentCaseTypeById(caseInfo.getCaseType());
@@ -2655,9 +2545,9 @@
                }
                //todo case_title生成、经纬度转换
                caseInfo.setInputWay(CaseBaseConsts.INPUT_WAY_1);
                if(registerSaveDTO.getCreateTime()!=null){
                if (registerSaveDTO.getCreateTime() != null) {
                    caseInfo.setCreateTime(registerSaveDTO.getCreateTime());
                }else {
                } else {
                    caseInfo.setCreateTime(nowDate);
                }
dyh-service/dyh-mediate/src/main/java/cn/huge/module/cases/service/CaseTaskService.java
@@ -651,6 +651,14 @@
                    lfdj.setNodeShowName("自行排查");
                    lfdj.setHandleUserName(caseInfo.getInputUserName());
                    lfdj.setHandleUnitName(caseInfo.getInputUnitName());
                    if(CaseBaseConstsEnum.CASE_CANAL_SECOND_2.getIndex().equals(caseInfo.getCanalSecond())){
                        lfdj.setHandleUserName("系统自动获取");
                        lfdj.setHandleUnitName(caseInfo.getCanalSecondName());
                    }
                    if(CaseBaseConstsEnum.CASE_CANAL_SECOND_7.getIndex().equals(caseInfo.getCanalSecond())){
                        lfdj.setHandleUserName("系统自动获取");
                        lfdj.setHandleUnitName(caseInfo.getCanalSecondName());
                    }
                }
                if (CaseBaseConstsEnum.CASE_CANAL_4.getIndex().equals(caseInfo.getCanal())) {
                    lfdj.setNodeShowName("协同推送");
dyh-service/dyh-mediate/src/main/java/cn/huge/module/flow/service/FlowInfoService.java
@@ -234,8 +234,8 @@
            return flowNode;
        }catch (Exception e){
            log.error("service方法[FlowInfoService.completeByTaskId]调用异常:"+e, e);
            throw new ServiceException("FlowInfoService.completeByTaskId", e);
        }
        return null;
    }
    /**
dyh-service/dyh-mediate/src/main/resources/config/application.yml
@@ -3,8 +3,8 @@
  profiles:
    active:
#      - dev
#        - test
        - prod
        - test
#        - prod
  devtools:
    restart:
dyh-service/dyh-sys/src/main/java/cn/huge/module/timer/GridCityCaseTimer.java
@@ -73,6 +73,7 @@
        Date nowDate = DateUtils.getNowDate();
        List<String> canalSecondList = new ArrayList<>();
        canalSecondList.add("12");
        canalSecondList.add("13");
        canalSecondList.add("07");
        // 获取东八区的当前时间
        ZonedDateTime now = ZonedDateTime.now(TARGET_ZONE);
@@ -147,7 +148,7 @@
                                String fxdj = "";
                                String zrmj = "";
                                String zrga = "";
                                String jyff="";
                                String jyff = "";
                                String tcr = "";
                                String tcqk = "";
                                String tcjg = "";
@@ -155,101 +156,93 @@
                                String certiNo = "";
                                String plaintiffs = "";
                                String phone = "";
                                if ("07".equals(canalSecond)) {
                                    if (StringUtils.isNotBlank(gridCaseInfoDTO.getLinkman())) {
                                        uploadPolice = AesUtils.decrypt(gridCaseInfoDTO.getLinkman(), "W90akz7tA7tyMn5tNTynG69YM2E8jGfF");
                                    }
                                    if (StringUtils.isNotBlank(gridCaseInfoDTO.getContactTel())) {
                                        uploadPolicePhone = AesUtils.decrypt(gridCaseInfoDTO.getContactTel(), "W90akz7tA7tyMn5tNTynG69YM2E8jGfF");
                                    }
                                } else if ("12".equals(canalSecond)) {
                                    if (StringUtils.isNotBlank(gridCaseInfoDTO.getLinkman())) {
                                        uploadPolice = AesUtils.decrypt(gridCaseInfoDTO.getLinkman(), "W90akz7tA7tyMn5tNTynG69YM2E8jGfF");
                                    }
                                    if (StringUtils.isNotBlank(gridCaseInfoDTO.getContactTel())) {
                                        uploadPolicePhone = AesUtils.decrypt(gridCaseInfoDTO.getContactTel(), "W90akz7tA7tyMn5tNTynG69YM2E8jGfF");
                                    }
                                    try {
                                        if (StringUtils.isNotBlank(gridCaseInfoDTO.getExtInfo())) {
                                            JSONObject jsonObject = JSON.parseObject(gridCaseInfoDTO.getExtInfo());
                                            zrga = jsonObject.get("tcdwMc").toString();
                                            zrmj = jsonObject.get("zrmj").toString();
                                            fxdj = jsonObject.get("fxdj").toString();
                                            jfmc = jsonObject.get("jfmc").toString();
                                            registerSaveDTO.setGridHandle(zrga + "--" + zrmj);
                                        }
                                    } catch (Exception e) {
                                        log.error("解析extInfo失败,事件id:{" + gridCaseInfoDTO.getId() + "}; 解析内容:" + gridCaseInfoDTO.getExtInfo() + "失败原因:" + e.getMessage());
                                    }
                                    try {
                                        if (StringUtils.isNotBlank(gridCaseInfoDTO.getExtInfoTcqk())) {
                                            List<Map<String, Object>> expInfoTcqkMapList = JSON.parseObject(gridCaseInfoDTO.getExtInfoTcqk(),
                                                    new TypeReference<List<Map<String, Object>>>() {
                                                    });
                                            for (Map expInfoMap : expInfoTcqkMapList) {
                                                tcr = expInfoMap.get("tcr").toString();
                                                tcqk = expInfoMap.get("tcqk").toString();
                                                tcjg = expInfoMap.get("tcjgMc").toString();
                                                tcfa = expInfoMap.get("tcfa").toString();
                                            }
                                        }
                                    } catch (Exception e) {
                                        log.error("解析extInfo失败,事件id:{" + gridCaseInfoDTO.getId() + "}; 解析内容:" + gridCaseInfoDTO.getExtInfo() + "失败原因:" + e.getMessage());
                                    }
                                    registerSaveDTO.setTcqk(uploadPolice+" -- "+uploadPolicePhone+" -- "+fxdj+" -- "+zrmj+" -- "+tcr+" -- "+tcfa+" -- "+tcqk);
                                    try {
                                        if (StringUtils.isNotBlank(gridCaseInfoDTO.getExtInfoRisk())) {
                                            List<Map<String, Object>> expInfoMapList = JSON.parseObject(gridCaseInfoDTO.getExtInfoRisk(),
                                                    new TypeReference<List<Map<String, Object>>>() {
                                                    });
                                            List<CasePersonDTO> casePersonDTOList = new ArrayList<>();
                                            for (Map expInfoMap : expInfoMapList) {
                                                CasePersonDTO casePersonDTO = new CasePersonDTO();
                                                String name = "";
                                                certiNo = "";
                                                String mobile = "";
                                                if (StringUtils.isNotBlank(expInfoMap.get("cardNumber").toString())) {
                                                    certiNo = expInfoMap.get("cardNumber").toString();
                                                }
                                                if (StringUtils.isNotBlank(expInfoMap.get("name").toString())) {
                                                    name = expInfoMap.get("name").toString();
                                                }
                                                if (StringUtils.isNotBlank(expInfoMap.get("contactPhone").toString())) {
                                                    mobile = expInfoMap.get("contactPhone").toString();
                                                }
                                                casePersonDTO.setMobile(mobile);
                                                casePersonDTO.setTrueName(name);
                                                casePersonDTO.setCertiNo(certiNo);
                                                casePersonDTOList.add(casePersonDTO);
                                                gridEvent.setCertiNo(certiNo);
                                                if (StringUtils.isNotBlank(plaintiffs)) {
                                                    if (!plaintiffs.contains(name))
                                                        plaintiffs = plaintiffs + "," + name;
                                                } else {
                                                    plaintiffs = name;
                                                }
                                                if (StringUtils.isNotBlank(phone)) {
                                                    if (!phone.contains(mobile))
                                                        phone = phone + "," + mobile;
                                                } else {
                                                    phone = mobile;
                                                }
                                                if (StringUtils.isNotBlank(gridEvent.getCertiNo())) {
                                                    gridEvent.setCertiNo(gridEvent.getCertiNo() + "," + certiNo);
                                                } else {
                                                    gridEvent.setCertiNo(certiNo);
                                                }
                                            }
                                            registerSaveDTO.setPersonList(casePersonDTOList);
                                        }
                                    } catch (Exception e) {
                                        log.error("解析extInfo失败,事件id:{" + gridCaseInfoDTO.getId() + "}; 解析内容:" + gridCaseInfoDTO.getExtInfo() + "失败原因:" + e.getMessage());
                                if (StringUtils.isNotBlank(gridCaseInfoDTO.getLinkman())) {
                                    uploadPolice = AesUtils.decrypt(gridCaseInfoDTO.getLinkman(), "W90akz7tA7tyMn5tNTynG69YM2E8jGfF");
                                }
                                if (StringUtils.isNotBlank(gridCaseInfoDTO.getContactTel())) {
                                    uploadPolicePhone = AesUtils.decrypt(gridCaseInfoDTO.getContactTel(), "W90akz7tA7tyMn5tNTynG69YM2E8jGfF");
                                }
                                try {
                                    if (StringUtils.isNotBlank(gridCaseInfoDTO.getExtInfo())) {
                                        JSONObject jsonObject = JSON.parseObject(gridCaseInfoDTO.getExtInfo());
                                        zrga = jsonObject.get("tcdwMc").toString();
                                        zrmj = jsonObject.get("zrmj").toString();
                                        fxdj = jsonObject.get("fxdj").toString();
                                        jfmc = jsonObject.get("jfmc").toString();
                                        registerSaveDTO.setGridHandle(zrga + "--" + zrmj);
                                    }
                                } catch (Exception e) {
                                    log.error("解析extInfo失败,事件id:{" + gridCaseInfoDTO.getId() + "}; 解析内容:" + gridCaseInfoDTO.getExtInfo() + "失败原因:" + e.getMessage());
                                }
                                try {
                                    if (StringUtils.isNotBlank(gridCaseInfoDTO.getExtInfoTcqk())) {
                                        List<Map<String, Object>> expInfoTcqkMapList = JSON.parseObject(gridCaseInfoDTO.getExtInfoTcqk(),
                                                new TypeReference<List<Map<String, Object>>>() {
                                                });
                                        for (Map expInfoMap : expInfoTcqkMapList) {
                                            tcr = expInfoMap.get("tcr").toString();
                                            tcqk = expInfoMap.get("tcqk").toString();
                                            tcjg = expInfoMap.get("tcjgMc").toString();
                                            tcfa = expInfoMap.get("tcfa").toString();
                                        }
                                    }
                                } catch (Exception e) {
                                    log.error("解析extInfo失败,事件id:{" + gridCaseInfoDTO.getId() + "}; 解析内容:" + gridCaseInfoDTO.getExtInfo() + "失败原因:" + e.getMessage());
                                }
                                registerSaveDTO.setTcqk(uploadPolice + " -- " + uploadPolicePhone + " -- " + fxdj + " -- " + zrmj + " -- " + tcr + " -- " + tcfa + " -- " + tcqk);
                                try {
                                    if (StringUtils.isNotBlank(gridCaseInfoDTO.getExtInfoRisk())) {
                                        List<Map<String, Object>> expInfoMapList = JSON.parseObject(gridCaseInfoDTO.getExtInfoRisk(),
                                                new TypeReference<List<Map<String, Object>>>() {
                                                });
                                        List<CasePersonDTO> casePersonDTOList = new ArrayList<>();
                                        for (Map expInfoMap : expInfoMapList) {
                                            CasePersonDTO casePersonDTO = new CasePersonDTO();
                                            String name = "";
                                            certiNo = "";
                                            String mobile = "";
                                            if (StringUtils.isNotBlank(expInfoMap.get("cardNumber").toString())) {
                                                certiNo = expInfoMap.get("cardNumber").toString();
                                            }
                                            if (StringUtils.isNotBlank(expInfoMap.get("name").toString())) {
                                                name = expInfoMap.get("name").toString();
                                            }
                                            if (StringUtils.isNotBlank(expInfoMap.get("contactPhone").toString())) {
                                                mobile = expInfoMap.get("contactPhone").toString();
                                            }
                                            casePersonDTO.setMobile(mobile);
                                            casePersonDTO.setTrueName(name);
                                            casePersonDTO.setCertiNo(certiNo);
                                            casePersonDTOList.add(casePersonDTO);
                                            gridEvent.setCertiNo(certiNo);
                                            if (StringUtils.isNotBlank(plaintiffs)) {
                                                if (!plaintiffs.contains(name))
                                                    plaintiffs = plaintiffs + "," + name;
                                            } else {
                                                plaintiffs = name;
                                            }
                                            if (StringUtils.isNotBlank(phone)) {
                                                if (!phone.contains(mobile))
                                                    phone = phone + "," + mobile;
                                            } else {
                                                phone = mobile;
                                            }
                                            if (StringUtils.isNotBlank(gridEvent.getCertiNo())) {
                                                gridEvent.setCertiNo(gridEvent.getCertiNo() + "," + certiNo);
                                            } else {
                                                gridEvent.setCertiNo(certiNo);
                                            }
                                        }
                                        registerSaveDTO.setPersonList(casePersonDTOList);
                                    }
                                } catch (Exception e) {
                                    log.error("解析extInfo失败,事件id:{" + gridCaseInfoDTO.getId() + "}; 解析内容:" + gridCaseInfoDTO.getExtInfo() + "失败原因:" + e.getMessage());
                                }
                                registerSaveDTO.setId(IdUtils.getNewTimeId());
                                BeanUtils.copyProperties(gridCaseInfoDTO, gridEvent);
                                registerSaveDTO.setCreateTime(DateUtils.StringToDate(gridCaseInfoDTO.getCreateTime(),"yyyy-MM-dd HH:mm:ss"));
                                registerSaveDTO.setCreateTime(DateUtils.StringToDate(gridCaseInfoDTO.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
                                gridEvent.setLinkman(uploadPolice);
                                gridEvent.setSystemId(gridCaseInfoDTO.getSystemId());
                                gridEvent.setContactTel(uploadPolicePhone);
@@ -261,9 +254,18 @@
                                log.info("xsd保存事件:{}" + gridEvent);
                                //设置二级事件来源
                                if (canalSecond.equals("12")) {
                                    registerSaveDTO.setCanal(CaseBaseConstsEnum.CASE_CANAL_4.getIndex());
                                    registerSaveDTO.setCanalName(CaseBaseConstsEnum.CASE_CANAL_4.getDes());
                                    registerSaveDTO.setCanalSecond(CaseBaseConstsEnum.CASE_CANAL_SECOND_1.getIndex());
                                    registerSaveDTO.setCanalSecondName(CaseBaseConstsEnum.CASE_CANAL_SECOND_1.getDes());
                                } else if (canalSecond.equals("13")) {
                                    registerSaveDTO.setCanal(CaseBaseConstsEnum.CASE_CANAL_3.getIndex());
                                    registerSaveDTO.setCanalName(CaseBaseConstsEnum.CASE_CANAL_3.getDes());
                                    registerSaveDTO.setCanalSecond(CaseBaseConstsEnum.CASE_CANAL_SECOND_7.getIndex());
                                    registerSaveDTO.setCanalSecondName(CaseBaseConstsEnum.CASE_CANAL_SECOND_7.getDes());
                                } else {
                                    registerSaveDTO.setCanal(CaseBaseConstsEnum.CASE_CANAL_3.getIndex());
                                    registerSaveDTO.setCanalName(CaseBaseConstsEnum.CASE_CANAL_3.getDes());
                                    registerSaveDTO.setCanalSecond(CaseBaseConstsEnum.CASE_CANAL_SECOND_2.getIndex());
                                    registerSaveDTO.setCanalSecondName(CaseBaseConstsEnum.CASE_CANAL_SECOND_2.getDes());
                                }
@@ -320,7 +322,6 @@
                                registerSaveDTO.setPhone(phone);
                                String dyhUnitId = gridCaseTaskService.getGridUnitIdByUnitId(gridCode);
                                if (StringUtils.isNotBlank(dyhUnitId)) {
                                    registerSaveDTO.setWantUnitId(dyhUnitId);
                                } else {
                                    log.info("网格组织查询不到对应组织:" + gridCode);
                                }
@@ -352,7 +353,7 @@
        if (parts.length == 3) {
            return parts[0] + parts[1] + parts[2];
        } else if (parts.length >= 4) {
            return parts[0] + parts[1] + parts[2]+"-"+parts[3];
            return parts[0] + parts[1] + parts[2] + "-" + parts[3];
        } else {
            return input; // 或抛出异常
        }
@@ -368,6 +369,7 @@
        Date nowDate = DateUtils.getNowDate();
        List<String> canalSecondList = new ArrayList<>();
        canalSecondList.add("12");
        canalSecondList.add("13");
        canalSecondList.add("07");
        log.info("startTime:" + startTime);
        log.info("endTime:" + endTime);
@@ -430,7 +432,7 @@
                                String fxdj = "";
                                String zrmj = "";
                                String zrga = "";
                                String jyff="";
                                String jyff = "";
                                String tcr = "";
                                String tcqk = "";
                                String tcjg = "";
@@ -438,100 +440,92 @@
                                String certiNo = "";
                                String plaintiffs = "";
                                String phone = "";
                                if ("07".equals(canalSecond)) {
                                    if (StringUtils.isNotBlank(gridCaseInfoDTO.getLinkman())) {
                                        uploadPolice = AesUtils.decrypt(gridCaseInfoDTO.getLinkman(), "W90akz7tA7tyMn5tNTynG69YM2E8jGfF");
                                    }
                                    if (StringUtils.isNotBlank(gridCaseInfoDTO.getContactTel())) {
                                        uploadPolicePhone = AesUtils.decrypt(gridCaseInfoDTO.getContactTel(), "W90akz7tA7tyMn5tNTynG69YM2E8jGfF");
                                    }
                                } else if ("12".equals(canalSecond)) {
                                    if (StringUtils.isNotBlank(gridCaseInfoDTO.getLinkman())) {
                                        uploadPolice = AesUtils.decrypt(gridCaseInfoDTO.getLinkman(), "W90akz7tA7tyMn5tNTynG69YM2E8jGfF");
                                    }
                                    if (StringUtils.isNotBlank(gridCaseInfoDTO.getContactTel())) {
                                        uploadPolicePhone = AesUtils.decrypt(gridCaseInfoDTO.getContactTel(), "W90akz7tA7tyMn5tNTynG69YM2E8jGfF");
                                    }
                                    try {
                                        if (StringUtils.isNotBlank(gridCaseInfoDTO.getExtInfo())) {
                                            JSONObject jsonObject = JSON.parseObject(gridCaseInfoDTO.getExtInfo());
                                            zrga = jsonObject.get("tcdwMc").toString();
                                            zrmj = jsonObject.get("zrmj").toString();
                                            fxdj = jsonObject.get("fxdj").toString();
                                            jfmc = jsonObject.get("jfmc").toString();
                                            registerSaveDTO.setGridHandle(zrga + "--" + zrmj);
                                        }
                                    } catch (Exception e) {
                                        log.error("解析extInfo失败,事件id:{" + gridCaseInfoDTO.getId() + "}; 解析内容:" + gridCaseInfoDTO.getExtInfo() + "失败原因:" + e.getMessage());
                                    }
                                    try {
                                        if (StringUtils.isNotBlank(gridCaseInfoDTO.getExtInfoTcqk())) {
                                            List<Map<String, Object>> expInfoTcqkMapList = JSON.parseObject(gridCaseInfoDTO.getExtInfoTcqk(),
                                                    new TypeReference<List<Map<String, Object>>>() {
                                                    });
                                            for (Map expInfoMap : expInfoTcqkMapList) {
                                                tcr = expInfoMap.get("tcr").toString();
                                                tcqk = expInfoMap.get("tcqk").toString();
                                                tcjg = expInfoMap.get("tcjgMc").toString();
                                                tcfa = expInfoMap.get("tcfa").toString();
                                            }
                                        }
                                    } catch (Exception e) {
                                        log.error("解析extInfo失败,事件id:{" + gridCaseInfoDTO.getId() + "}; 解析内容:" + gridCaseInfoDTO.getExtInfo() + "失败原因:" + e.getMessage());
                                    }
                                    registerSaveDTO.setTcqk(uploadPolice+" -- "+uploadPolicePhone+" -- "+fxdj+" -- "+zrmj+" -- "+tcr+" -- "+tcfa+" -- "+tcqk);
                                    try {
                                        if (StringUtils.isNotBlank(gridCaseInfoDTO.getExtInfoRisk())) {
                                            List<Map<String, Object>> expInfoMapList = JSON.parseObject(gridCaseInfoDTO.getExtInfoRisk(),
                                                    new TypeReference<List<Map<String, Object>>>() {
                                                    });
                                            List<CasePersonDTO> casePersonDTOList = new ArrayList<>();
                                            for (Map expInfoMap : expInfoMapList) {
                                                CasePersonDTO casePersonDTO = new CasePersonDTO();
                                                String name = "";
                                                certiNo = "";
                                                String mobile = "";
                                                if (StringUtils.isNotBlank(expInfoMap.get("cardNumber").toString())) {
                                                    certiNo = expInfoMap.get("cardNumber").toString();
                                                }
                                                if (StringUtils.isNotBlank(expInfoMap.get("name").toString())) {
                                                    name = expInfoMap.get("name").toString();
                                                }
                                                if (StringUtils.isNotBlank(expInfoMap.get("contactPhone").toString())) {
                                                    mobile = expInfoMap.get("contactPhone").toString();
                                                }
                                                casePersonDTO.setMobile(mobile);
                                                casePersonDTO.setTrueName(name);
                                                casePersonDTO.setCertiNo(certiNo);
                                                casePersonDTOList.add(casePersonDTO);
                                                gridEvent.setCertiNo(certiNo);
                                                if (StringUtils.isNotBlank(plaintiffs)) {
                                                    if (!plaintiffs.contains(name))
                                                        plaintiffs = plaintiffs + "," + name;
                                                } else {
                                                    plaintiffs = name;
                                                }
                                                if (StringUtils.isNotBlank(phone)) {
                                                    if (!phone.contains(mobile))
                                                        phone = phone + "," + mobile;
                                                } else {
                                                    phone = mobile;
                                                }
                                                if (StringUtils.isNotBlank(gridEvent.getCertiNo())) {
                                                    gridEvent.setCertiNo(gridEvent.getCertiNo() + "," + certiNo);
                                                } else {
                                                    gridEvent.setCertiNo(certiNo);
                                                }
                                            }
                                            registerSaveDTO.setPersonList(casePersonDTOList);
                                        }
                                    } catch (Exception e) {
                                        log.error("解析extInfo失败,事件id:{" + gridCaseInfoDTO.getId() + "}; 解析内容:" + gridCaseInfoDTO.getExtInfo() + "失败原因:" + e.getMessage());
                                if (StringUtils.isNotBlank(gridCaseInfoDTO.getLinkman())) {
                                    uploadPolice = AesUtils.decrypt(gridCaseInfoDTO.getLinkman(), "W90akz7tA7tyMn5tNTynG69YM2E8jGfF");
                                }
                                if (StringUtils.isNotBlank(gridCaseInfoDTO.getContactTel())) {
                                    uploadPolicePhone = AesUtils.decrypt(gridCaseInfoDTO.getContactTel(), "W90akz7tA7tyMn5tNTynG69YM2E8jGfF");
                                }
                                try {
                                    if (StringUtils.isNotBlank(gridCaseInfoDTO.getExtInfo())) {
                                        JSONObject jsonObject = JSON.parseObject(gridCaseInfoDTO.getExtInfo());
                                        zrga = jsonObject.get("tcdwMc").toString();
                                        zrmj = jsonObject.get("zrmj").toString();
                                        fxdj = jsonObject.get("fxdj").toString();
                                        jfmc = jsonObject.get("jfmc").toString();
                                        registerSaveDTO.setGridHandle(zrga + "--" + zrmj);
                                    }
                                } catch (Exception e) {
                                    log.error("解析extInfo失败,事件id:{" + gridCaseInfoDTO.getId() + "}; 解析内容:" + gridCaseInfoDTO.getExtInfo() + "失败原因:" + e.getMessage());
                                }
                                try {
                                    if (StringUtils.isNotBlank(gridCaseInfoDTO.getExtInfoTcqk())) {
                                        List<Map<String, Object>> expInfoTcqkMapList = JSON.parseObject(gridCaseInfoDTO.getExtInfoTcqk(),
                                                new TypeReference<List<Map<String, Object>>>() {
                                                });
                                        for (Map expInfoMap : expInfoTcqkMapList) {
                                            tcr = expInfoMap.get("tcr").toString();
                                            tcqk = expInfoMap.get("tcqk").toString();
                                            tcjg = expInfoMap.get("tcjgMc").toString();
                                            tcfa = expInfoMap.get("tcfa").toString();
                                        }
                                    }
                                } catch (Exception e) {
                                    log.error("解析extInfo失败,事件id:{" + gridCaseInfoDTO.getId() + "}; 解析内容:" + gridCaseInfoDTO.getExtInfo() + "失败原因:" + e.getMessage());
                                }
                                registerSaveDTO.setTcqk(uploadPolice + " -- " + uploadPolicePhone + " -- " + fxdj + " -- " + zrmj + " -- " + tcr + " -- " + tcfa + " -- " + tcqk);
                                try {
                                    if (StringUtils.isNotBlank(gridCaseInfoDTO.getExtInfoRisk())) {
                                        List<Map<String, Object>> expInfoMapList = JSON.parseObject(gridCaseInfoDTO.getExtInfoRisk(),
                                                new TypeReference<List<Map<String, Object>>>() {
                                                });
                                        List<CasePersonDTO> casePersonDTOList = new ArrayList<>();
                                        for (Map expInfoMap : expInfoMapList) {
                                            CasePersonDTO casePersonDTO = new CasePersonDTO();
                                            String name = "";
                                            certiNo = "";
                                            String mobile = "";
                                            if (StringUtils.isNotBlank(expInfoMap.get("cardNumber").toString())) {
                                                certiNo = expInfoMap.get("cardNumber").toString();
                                            }
                                            if (StringUtils.isNotBlank(expInfoMap.get("name").toString())) {
                                                name = expInfoMap.get("name").toString();
                                            }
                                            if (StringUtils.isNotBlank(expInfoMap.get("contactPhone").toString())) {
                                                mobile = expInfoMap.get("contactPhone").toString();
                                            }
                                            casePersonDTO.setMobile(mobile);
                                            casePersonDTO.setTrueName(name);
                                            casePersonDTO.setCertiNo(certiNo);
                                            casePersonDTOList.add(casePersonDTO);
                                            gridEvent.setCertiNo(certiNo);
                                            if (StringUtils.isNotBlank(plaintiffs)) {
                                                if (!plaintiffs.contains(name))
                                                    plaintiffs = plaintiffs + "," + name;
                                            } else {
                                                plaintiffs = name;
                                            }
                                            if (StringUtils.isNotBlank(phone)) {
                                                if (!phone.contains(mobile))
                                                    phone = phone + "," + mobile;
                                            } else {
                                                phone = mobile;
                                            }
                                            if (StringUtils.isNotBlank(gridEvent.getCertiNo())) {
                                                gridEvent.setCertiNo(gridEvent.getCertiNo() + "," + certiNo);
                                            } else {
                                                gridEvent.setCertiNo(certiNo);
                                            }
                                        }
                                        registerSaveDTO.setPersonList(casePersonDTOList);
                                    }
                                } catch (Exception e) {
                                    log.error("解析extInfo失败,事件id:{" + gridCaseInfoDTO.getId() + "}; 解析内容:" + gridCaseInfoDTO.getExtInfo() + "失败原因:" + e.getMessage());
                                }
                                registerSaveDTO.setId(IdUtils.getNewTimeId());
                                registerSaveDTO.setCreateTime(DateUtils.StringToDate(gridCaseInfoDTO.getCreateTime(),"yyyy-MM-dd HH:mm:ss"));
                                registerSaveDTO.setCreateTime(DateUtils.StringToDate(gridCaseInfoDTO.getCreateTime(), "yyyy-MM-dd HH:mm:ss"));
                                BeanUtils.copyProperties(gridCaseInfoDTO, gridEvent);
                                gridEvent.setSystemId(gridCaseInfoDTO.getSystemId());
                                gridEvent.setLinkman(uploadPolice);
@@ -544,9 +538,18 @@
                                log.info("xsd保存事件:{}" + gridEvent);
                                //设置二级事件来源
                                if (canalSecond.equals("12")) {
                                    registerSaveDTO.setCanal(CaseBaseConstsEnum.CASE_CANAL_4.getIndex());
                                    registerSaveDTO.setCanalName(CaseBaseConstsEnum.CASE_CANAL_4.getDes());
                                    registerSaveDTO.setCanalSecond(CaseBaseConstsEnum.CASE_CANAL_SECOND_1.getIndex());
                                    registerSaveDTO.setCanalSecondName(CaseBaseConstsEnum.CASE_CANAL_SECOND_1.getDes());
                                } else if (canalSecond.equals("13")) {
                                    registerSaveDTO.setCanal(CaseBaseConstsEnum.CASE_CANAL_3.getIndex());
                                    registerSaveDTO.setCanalName(CaseBaseConstsEnum.CASE_CANAL_3.getDes());
                                    registerSaveDTO.setCanalSecond(CaseBaseConstsEnum.CASE_CANAL_SECOND_7.getIndex());
                                    registerSaveDTO.setCanalSecondName(CaseBaseConstsEnum.CASE_CANAL_SECOND_7.getDes());
                                } else {
                                    registerSaveDTO.setCanal(CaseBaseConstsEnum.CASE_CANAL_3.getIndex());
                                    registerSaveDTO.setCanalName(CaseBaseConstsEnum.CASE_CANAL_3.getDes());
                                    registerSaveDTO.setCanalSecond(CaseBaseConstsEnum.CASE_CANAL_SECOND_2.getIndex());
                                    registerSaveDTO.setCanalSecondName(CaseBaseConstsEnum.CASE_CANAL_SECOND_2.getDes());
                                }
dyh-service/dyh-sys/src/main/resources/config/application.yml
@@ -3,8 +3,8 @@
  profiles:
    active:
#      - dev
#        - test
        - prod
        - test
#        - prod
  devtools:
    restart:
dyh-service/dyh-utils/src/main/java/cn/huge/module/mediate/utils/CaseNoUtils.java
@@ -19,17 +19,17 @@
    /**
     * 常量前缀
     */
    public static String CASE_NO_SIGN_TH = "天河调";
    public static String CASE_NO_SIGN_HZ = "海珠调";
    public static String CASE_NO_SIGN_LW = "荔湾调";
    public static String CASE_NO_SIGN_YX = "越秀调";
    public static String CASE_NO_SIGN_PY = "番禺调";
    public static String CASE_NO_SIGN_HD = "花都调";
    public static String CASE_NO_SIGN_BY = "粤云调";
    public static String CASE_NO_SIGN_NS = "南沙调";
    public static String CASE_NO_SIGN_HP = "黄埔调";
    public static String CASE_NO_SIGN_ZC = "增城调";
    public static String CASE_NO_SIGN_CH = "从化调";
    public static String CASE_NO_SIGN_TH = "穗天综调";
    public static String CASE_NO_SIGN_HZ = "穗海综调";
    public static String CASE_NO_SIGN_LW = "穗荔综调";
    public static String CASE_NO_SIGN_YX = "穗越综调";
    public static String CASE_NO_SIGN_PY = "穗番综调";
    public static String CASE_NO_SIGN_HD = "穗花综调";
    public static String CASE_NO_SIGN_BY = "穗云综调";
    public static String CASE_NO_SIGN_NS = "穗南综调";
    public static String CASE_NO_SIGN_HP = "穗埔综调";
    public static String CASE_NO_SIGN_ZC = "穗增综调";
    public static String CASE_NO_SIGN_CH = "穗从综调";
    public static String CASE_NO_SIGN_GZ = "粤调";
    /**
@@ -136,7 +136,7 @@
        StringBuffer caseNoSign = new StringBuffer();
        // 设置年号
        int year = DateUtils.getYear(DateUtils.getNowDate());
        caseNoSign.append("(").append(year).append(")");
        caseNoSign.append(year);
        if (GzRegionBaseEnum.AREA_1.getIndex().equals(area)){
            caseNoSign.append(CASE_NO_SIGN_TH);
        }else if (GzRegionBaseEnum.AREA_2.getIndex().equals(area)){
sql/20250620.sql
New file
@@ -0,0 +1,17 @@
#添加索引
CREATE INDEX idx_canal ON "HUGETEST".dyh_case_info(canal);
CREATE INDEX idx_case_ref ON "HUGETEST".dyh_case_info(case_ref);
CREATE INDEX idx_case_type ON "HUGETEST".dyh_case_info(case_type);
CREATE INDEX idx_area_road_village ON "HUGETEST".dyh_case_info(que_area, que_road, que_village);
CREATE INDEX idx_source ON "HUGETEST".dyh_case_info(source);
CREATE INDEX idx_input_unit_id ON "HUGETEST".dyh_case_info(input_unit_id);
CREATE INDEX idx_status ON "HUGETEST".dyh_case_info(status);
CREATE INDEX idx_process ON "HUGETEST".dyh_case_info(process);
CREATE INDEX idx_belong_unit_id ON "HUGETEST".dyh_case_info_unfold(belong_unit_id);
CREATE INDEX idx_mediate_unit_id ON "HUGETEST".dyh_case_info_unfold(mediate_unit_id);
CREATE INDEX idx_medi_result ON "HUGETEST".dyh_case_info_unfold(medi_result);
CREATE INDEX idx_unit_grade ON "HUGETEST".dyh_ct_unit(unit_grade);
CREATE INDEX idx_unit_type ON "HUGETEST".dyh_ct_unit(unit_type);
CREATE INDEX idx_area_road_village ON "HUGETEST".dyh_ct_unit(area, road, village);