广州市综治平台后端
xusd
2 days ago f4e5da604604308b9f754de7e863c180fcedd8c9
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,6 +1313,31 @@
        return new PageImpl<CasePageDTO>(content, page, total);
    }
    /**
     * 统计调解过程
     * 计算案件的调解过程相关统计数据,包括不予受理率、化解中率、化解成功率、化解不成功率等
     *
     * @param terms 统计条件
     * @return 包含调解过程统计数据的DTO对象
     */
    public CaseStatisticsBaseDTO statisticsProcess(Map<String, Object> terms) {
        CaseStatisticsBaseDTO caseStatisticsBaseDTO = mapper.statisticsBaseProcess(terms);
        Integer baseTotalNum = dellNull(caseStatisticsBaseDTO.getRejectNum()) + dellNull(caseStatisticsBaseDTO.getProcessNum()) + dellNull(caseStatisticsBaseDTO.getFinishNum()) + dellNull(caseStatisticsBaseDTO.getFailNum());
        caseStatisticsBaseDTO.setRejectRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getRejectNum() * 100, baseTotalNum, 1));
        caseStatisticsBaseDTO.setProcessRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getProcessNum() * 100, baseTotalNum, 1));
        caseStatisticsBaseDTO.setFinishRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getFinishNum() * 100, baseTotalNum, 1));
        caseStatisticsBaseDTO.setFailRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getFailNum() * 100, baseTotalNum, 1));
        // 如果 baseTotalNum为0 设置 总数为0
        caseStatisticsBaseDTO.setTotalNum(baseTotalNum);
        Integer levelTotalNum = caseStatisticsBaseDTO.getOneLevelNum() + caseStatisticsBaseDTO.getTwoLevelNum() + caseStatisticsBaseDTO.getThreeLevelNum();
        caseStatisticsBaseDTO.setOneLevelRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getOneLevelNum() * 100, levelTotalNum, 1));
        caseStatisticsBaseDTO.setTwoLevelRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getTwoLevelNum() * 100, levelTotalNum, 1));
        caseStatisticsBaseDTO.setThreeLevelRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getThreeLevelNum() * 100, levelTotalNum, 1));
        return caseStatisticsBaseDTO;
    }
    /**
     * 纠纷态势
@@ -1391,16 +1422,8 @@
        }
        //基础数据统计
        terms.put("areaType", areaType);
        CaseStatisticsBaseDTO caseStatisticsBaseDTO = mapper.statisticsBase(terms);
        Integer baseTotalNum = dellNull(caseStatisticsBaseDTO.getResolveNum()) + dellNull(caseStatisticsBaseDTO.getUnResolveNum()) + dellNull(caseStatisticsBaseDTO.getResolveingNum());
        Integer resolveTotalNum = dellNull(caseStatisticsBaseDTO.getResolveNum()) + dellNull(caseStatisticsBaseDTO.getUnResolveNum());
        caseStatisticsBaseDTO.setResolveRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getResolveNum() * 100, resolveTotalNum, 1));
        caseStatisticsBaseDTO.setUnResolveRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getUnResolveNum() * 100, resolveTotalNum, 1));
        caseStatisticsBaseDTO.setResolveingRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getResolveingNum() * 100, baseTotalNum, 1));
        Integer levelTotalNum = caseStatisticsBaseDTO.getOneLevelNum() + caseStatisticsBaseDTO.getTwoLevelNum() + caseStatisticsBaseDTO.getThreeLevelNum();
        caseStatisticsBaseDTO.setOneLevelRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getOneLevelNum() * 100, levelTotalNum, 1));
        caseStatisticsBaseDTO.setTwoLevelRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getTwoLevelNum() * 100, levelTotalNum, 1));
        caseStatisticsBaseDTO.setThreeLevelRate(BigDecimalUtil.integerDivideDelZero(caseStatisticsBaseDTO.getThreeLevelNum() * 100, levelTotalNum, 1));
        // 调用统计调解过程的方法
        CaseStatisticsBaseDTO caseStatisticsBaseDTO = statisticsProcess(terms);
        //区域数据统计
        List<CaseStatisticsAreaDTO> caseStatisticsAreaDTOS = new ArrayList<>();
        if (!isLast) {
@@ -1467,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));
@@ -1528,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));
@@ -2103,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");
        //根据用户筛选区域范围
@@ -2167,314 +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));
        }
        // 重新获取纠纷类型统计(基于完整的选择类型条件)
        List<CaseStatisticsTypeDTO> caseStatisticsTypeDTOS = mapper.statisticsTypeFirst(terms);
        // 如果基于选择类型的查询结果为空,则使用全量数据进行纠纷类型统计
        if (ObjectUtils.isEmpty(caseStatisticsTypeDTOS)) {
            // 临时移除所有类型筛选条件,获取全量纠纷类型统计
            terms.remove("canal");
            terms.remove("canalSecond");
            terms.remove("canalList");
            terms.remove("canalSecondNot");
            terms.remove("canalSecondAll");
            caseStatisticsTypeDTOS = mapper.statisticsTypeFirst(terms);
        }
        if (ObjectUtils.isNotEmpty(caseStatisticsTypeDTOS)) {
            sortType(caseStatisticsTypeDTOS);
        }
        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;
    // }
    /**
     * 按系列案编号查询
@@ -2526,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());
@@ -2616,18 +2524,19 @@
                // 获取调解案号
                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.setCaseLevel(3);
                //获取一级类型
                SyCause syCause = sysClient.getParentCaseTypeById(caseInfo.getCaseType());
                if (ObjectUtils.isNotEmpty(syCause)) {
                    caseInfo.setCaseTypeFirst(syCause.getId());
                    caseInfo.setCaseTypeFirstName(syCause.getName());
                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());
//                if (ObjectUtils.isNotEmpty(syCause)) {
//                    caseInfo.setCaseTypeFirst(syCause.getId());
//                    caseInfo.setCaseTypeFirstName(syCause.getName());
//                }
                //默认小程序可见
                if (ObjectUtils.isNotEmpty(caseInfo.getCanal())) {
                    if (CaseBaseConstsEnum.CASE_CANAL_1.getIndex().equals(caseInfo.getCanal())) {
@@ -2636,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);
                }