package cn.huge.module.analysis.service; import cn.huge.base.common.exception.ServiceException; import cn.huge.base.common.utils.ObjectUtils; import cn.huge.module.analysis.dao.mapper.AnalysisMapper; import cn.huge.module.analysis.domain.dto.*; import cn.huge.module.analysis.domain.dto.CountRepeateDto; import cn.huge.module.analysis.domain.vo.CountRepeateVo; import cn.huge.module.cases.domain.dto.CasePageDTO; import cn.huge.module.cases.domain.po.CaseInfo; import cn.huge.module.client.api.impl.CustClientImpl; import cn.huge.module.cust.dto.CtUnitDTO; import cn.huge.module.cust.dto.CtUserDTO; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import dm.jdbc.util.StringUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.common.engine.impl.util.CollectionUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.text.DecimalFormat; import java.util.*; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; /** * @author wangwh * @version 1.0.0 * @title: 纠纷信息主表业务逻辑处理 * @Description 纠纷信息主表业务逻辑处理 * @company hugeinfo * @Time 2024-08-27 10:00:57 */ @Slf4j @Service @Transactional(rollbackFor = Exception.class) public class AnalysisService extends ServiceImpl { @Autowired private AnalysisMapper mapper; @Autowired private CustClientImpl custClient; /** * 统计重复来访案件数量 *

* 此方法用于计算在特定条件下重复来访的案件数量它接收一个 CountRepeateVo 对象作为参数, * 该对象包含了查询条件,如时间范围、案件类型等信息通过调用 analysisMapper 中的 * countRepeatedCases 方法,传递这些查询条件,从而获取重复来访案件的统计结果 * * @param countRepeateVo 包含查询条件的 CountRepeateVo 对象,用于指定统计的范围和条件 * @return 返回一个 CountRepeateDto 对象列表,每个对象代表一组符合查询条件的重复来访案件及其数量 */ public List countRepeatedCases(CountRepeateVo countRepeateVo) { return mapper.countRepeatedCases(countRepeateVo); } /** * 根据时间统计重复案件的数量 * 该方法根据提供的查询条件(创建时间或关闭时间),计算在指定时间范围内重复出现的案件数量 * 并根据时间范围的长度(天、月、年)对结果进行分组 * * @param countRepeateVo 包含查询条件的CountRepeateVo对象,用于指定时间范围 * @return 返回一个CountRepeateDto对象列表,每个对象代表在指定时间范围内按天、月或年分组的重复案件数量 */ public List countRepeatedCasesByTime(CountRepeateVo countRepeateVo) { // 定义日期时间格式器,用于解析输入的日期时间字符串 DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd"); // 定义时间类型字符串常量,用于后续根据时间范围设置查询条件 String dayTypeStr = "day"; String monthTypeStr = "month"; String yearTypeStr = "year"; LocalDate start; LocalDate end; // 检查是否提供了结案时间范围,如果没有,则使用登记时间范围 if ((StringUtil.isEmpty(countRepeateVo.getCloseStart())) && (StringUtil.isEmpty(countRepeateVo.getCloseEnd()))) { // 判断 countRepeateVo.getCreateStart() 和 countRepeateVo.getCreateEnd() 长度是否和10 // 如果长度为10,表示只有日期没有时间,需要添加时间 if (countRepeateVo.getCreateStart().length() <= 10) { countRepeateVo.setCreateStart(countRepeateVo.getCreateStart() + " 00:00:00"); countRepeateVo.setCreateEnd(countRepeateVo.getCreateEnd() + " 23:59:59"); } // 解析开始和结束日期时间 start = LocalDate.parse(countRepeateVo.getCreateStart(), DATE_TIME_FORMATTER); end = LocalDate.parse(countRepeateVo.getCreateEnd(), DATE_TIME_FORMATTER); } else { // 如果提供了结案时间范围,进行类似的处理 if (countRepeateVo.getCloseStart().length() <= 10) { countRepeateVo.setCloseStart(countRepeateVo.getCloseStart() + " 00:00:00"); countRepeateVo.setCloseEnd(countRepeateVo.getCloseEnd() + " 23:59:59"); } start = LocalDate.parse(countRepeateVo.getCloseStart(), DATE_TIME_FORMATTER); end = LocalDate.parse(countRepeateVo.getCloseEnd(), DATE_TIME_FORMATTER); } // 计算开始和结束日期之间的天数 long daysBetween = java.time.temporal.ChronoUnit.DAYS.between(start, end); // 根据天数设置查询条件的分组时间类型 if (daysBetween < 15) { countRepeateVo.setGroupByTime(dayTypeStr); } else if ((daysBetween >= 15) && (daysBetween < 365)) { countRepeateVo.setGroupByTime(monthTypeStr); } else { countRepeateVo.setGroupByTime(yearTypeStr); } // 调用方法计算重复案件的数量 List countRepeateDtoList = this.countRepeatedCases(countRepeateVo); // 如果结果列表不为空,进一步处理结果 if (!countRepeateDtoList.isEmpty()) { String timeFormatter = ""; // 根据分组时间类型设置时间格式化字符串 if (dayTypeStr.equals(countRepeateVo.getGroupByTime())) { timeFormatter = "日"; } else if (monthTypeStr.equals(countRepeateVo.getGroupByTime())) { timeFormatter = "月"; } else if (yearTypeStr.equals(countRepeateVo.getGroupByTime())) { timeFormatter = "年"; } // 遍历结果列表,格式化分组类型字段 for (CountRepeateDto countRepeateDto : countRepeateDtoList) { // 按 “-”切割字符串,获取最后一个元素 String[] split = countRepeateDto.getGroupByType().split("-"); String lastElement = split[split.length - 1]; // 设置格式化后的分组类型 countRepeateDto.setGroupByType(lastElement + timeFormatter); } } // 返回结果列表 return countRepeateDtoList; } /** * 根据地区统计重复案件的数量 * 此方法根据输入的查询条件(包括街道、区域和城市编码),决定统计时是按区域还是按街道聚合 * 然后调用 countRepeatedCases 方法进行统计,并根据结果调整分组类型描述 * * @param countRepeateVo 包含查询条件的对象,用于指定统计范围 * @return 返回一个包含统计结果的列表 */ public List countRepeatedCasesByArea(CountRepeateVo countRepeateVo) { // 判断 countRepeateVo 的 queRoad 是否为空 // 如果 queRoad 和 queArea 都为空且 queCity 不为空,则设置 groupByArea 为 true 根据 区 聚合 if (StringUtil.isEmpty(countRepeateVo.getQueRoad()) && StringUtil.isEmpty(countRepeateVo.getQueArea()) && !StringUtil.isEmpty(countRepeateVo.getQueCity())) { countRepeateVo.setGroupByArea("true"); } // 如果 queRoad 为空且 queArea 不为空,则设置 groupByRoad 为 true 根据 街道 聚合 else if (StringUtil.isEmpty(countRepeateVo.getQueRoad()) && !StringUtil.isEmpty(countRepeateVo.getQueArea())) { countRepeateVo.setGroupByRoad("true"); } // 调用 countRepeatedCases 方法进行统计 List countRepeateDtoList = this.countRepeatedCases(countRepeateVo); // 检查统计结果的第一个元素的 groupByType 是否为空,如果为空则设置为 "本级" if (StringUtil.isEmpty(countRepeateDtoList.get(0).getGroupByType())) { countRepeateDtoList.get(0).setGroupByType("本级"); } // 返回统计结果列表 return countRepeateDtoList; } /** * 效能分析-平均时长 * * @param terms 条件 */ public AvgDurationDTO AvgDuration(Map terms, CtUserDTO loginUser, CtUnitDTO ctUnitDTO) { try { //拷贝一个条件,避免影响原参数 Map minimumPermissionsTerms = new HashMap<>(terms); AvgDurationDTO avgDurationDTO = new AvgDurationDTO(); AvgDurationDTO avgDurationDTO1 = mapper.statisticsAVG(minimumPermissionsTerms); AvgDurationDTO avgDurationDTO2 = mapper.statisticsApplyAVG(minimumPermissionsTerms); AvgDurationDTO avgDurationDTO3 = mapper.statisticsSuperviseAVG(minimumPermissionsTerms); //合并结果 if (ObjectUtils.isNotEmpty(avgDurationDTO1)) { avgDurationDTO.setFp(avgDurationDTO1.getFp()); avgDurationDTO.setSl(avgDurationDTO1.getSl()); avgDurationDTO.setBlz(avgDurationDTO1.getBlz()); } if (ObjectUtils.isNotEmpty(avgDurationDTO2)) { avgDurationDTO.setSp(avgDurationDTO2.getSp()); } if (ObjectUtils.isNotEmpty(avgDurationDTO3)) { avgDurationDTO.setDb(avgDurationDTO3.getDb()); } if (!terms.containsKey("queCity")) { Map AVGTerms = new HashMap<>(terms); if (terms.containsKey("queVillage")) { AVGTerms.remove("queVillage"); AVGTerms.put("queRoad", ctUnitDTO.getRoad()); } else if (terms.containsKey("queRoad")) { AVGTerms.remove("queRoad"); AVGTerms.put("queArea", ctUnitDTO.getArea()); } else if (terms.containsKey("queArea")) { AVGTerms.remove("queArea"); AVGTerms.put("queCity", ctUnitDTO.getCity()); } //查询平均值 AvgDurationDTO avgDurationDTOpjz1 = mapper.statisticsAVG(AVGTerms); AvgDurationDTO avgDurationDTOpjz2 = mapper.statisticsApplyAVG(AVGTerms); AvgDurationDTO avgDurationDTOpjz3 = mapper.statisticsSuperviseAVG(AVGTerms); //计算、封装平均值 if (ObjectUtils.isNotEmpty(avgDurationDTO)) { if (ObjectUtils.isNotEmpty(avgDurationDTOpjz1)) { double fp = avgDurationDTO.getFp(); double fppjz = avgDurationDTOpjz1.getFp(); if (fppjz != 0.0) { double pfPercentage = ((fp - fppjz) / fppjz) * 100; avgDurationDTO.setFppjz(pfPercentage); } else { if (fp != 0.0) { avgDurationDTO.setFppjz(100.0); } else { avgDurationDTO.setFppjz(0.0); } } double sl = avgDurationDTO.getSl(); double slpjz = avgDurationDTOpjz1.getSl(); if (slpjz != 0.0) { double slPercentage = ((sl - slpjz) / slpjz) * 100; avgDurationDTO.setSlpjz(slPercentage); } else { if (sl != 0.0) { avgDurationDTO.setSlpjz(100.0); } else { avgDurationDTO.setSlpjz(0.0); } } double blz = avgDurationDTO.getBlz(); double blzpjz = avgDurationDTOpjz1.getBlz(); if (blzpjz != 0.0) { double blzPercentage = ((blz - blzpjz) / blzpjz) * 100; avgDurationDTO.setBlzpjz(blzPercentage); } else { if (blz != 0.0) { avgDurationDTO.setBlzpjz(100.0); } else { avgDurationDTO.setBlzpjz(0.0); } } } if (ObjectUtils.isNotEmpty(avgDurationDTOpjz2)) { double sp = avgDurationDTO.getSp(); double sppjz = avgDurationDTOpjz2.getSp(); if (sppjz != 0.0) { double spPercentage = ((sp - sppjz) / sppjz) * 100; avgDurationDTO.setSppjz(spPercentage); } else { if (sp != 0.0) { avgDurationDTO.setSppjz(100.0); } else { avgDurationDTO.setSppjz(0.0); } } } if (ObjectUtils.isNotEmpty(avgDurationDTOpjz3)) { double db = avgDurationDTO.getDb(); double dbpjz = avgDurationDTOpjz3.getDb(); if (dbpjz != 0.0) { double dbPercentage = ((db - dbpjz) / dbpjz) * 100; avgDurationDTO.setDbpjz(dbPercentage); } else { if (db != 0.0) { avgDurationDTO.setDbpjz(100.0); } else { avgDurationDTO.setDbpjz(0.0); } } } } } //小数点取后两位 DecimalFormat df = new DecimalFormat("#.00"); avgDurationDTO.setFp(Double.parseDouble(df.format(avgDurationDTO.getFp()))); avgDurationDTO.setFppjz(Double.parseDouble(df.format(avgDurationDTO.getFppjz()))); avgDurationDTO.setSl(Double.parseDouble(df.format(avgDurationDTO.getSl()))); avgDurationDTO.setSlpjz(Double.parseDouble(df.format(avgDurationDTO.getSlpjz()))); avgDurationDTO.setBlz(Double.parseDouble(df.format(avgDurationDTO.getBlz()))); avgDurationDTO.setBlzpjz(Double.parseDouble(df.format(avgDurationDTO.getBlzpjz()))); avgDurationDTO.setSp(Double.parseDouble(df.format(avgDurationDTO.getSp()))); avgDurationDTO.setSppjz(Double.parseDouble(df.format(avgDurationDTO.getSppjz()))); avgDurationDTO.setDb(Double.parseDouble(df.format(avgDurationDTO.getDb()))); avgDurationDTO.setDbpjz(Double.parseDouble(df.format(avgDurationDTO.getDbpjz()))); return avgDurationDTO; } catch (Exception e) { log.error("[AnalysisService.AvgDuration]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.AvgDuration", e); } } /** * 效能分析-平均时长-分组列表 * * @param terms 条件 */ public AvgDurationAllDTO AvgDurationGroup(Map terms, int sortType, int sortColmn) { try { //获取所有下属组织 List regionList = mapper.listRegion(terms); regionList.add(0, "本级"); AvgDurationAllDTO avgDurationAllDTO = new AvgDurationAllDTO(); //查出各地区数据 List avgDurationGroupDTOList = mapper.statisticsGroupAVG(terms); List avgDurationGroupDTOList1 = mapper.statisticsApplyGroup(terms); List avgDurationGroupDTOList2 = mapper.statisticsSuperviseGroup(terms); //把审批和督办的数据组装到总数据中 List avgDurationGroupDTOListOld = new ArrayList<>(); for (String region : regionList) { boolean flag = false; AvgDurationGroupDTO avgDurationGroupDTOOld = new AvgDurationGroupDTO(); avgDurationGroupDTOOld.setGroupName(region); for (AvgDurationGroupDTO avgDurationGroupDTO : avgDurationGroupDTOList) { if (avgDurationGroupDTOOld.getGroupName().equals(avgDurationGroupDTO.getGroupName())) { flag = true; avgDurationGroupDTOOld.setSl(avgDurationGroupDTO.getSl()); avgDurationGroupDTOOld.setSls(avgDurationGroupDTO.getSls()); avgDurationGroupDTOOld.setFp(avgDurationGroupDTO.getFp()); avgDurationGroupDTOOld.setFps(avgDurationGroupDTO.getFps()); avgDurationGroupDTOOld.setBlz(avgDurationGroupDTO.getBlz()); avgDurationGroupDTOOld.setBls(avgDurationGroupDTO.getBls()); } } for (AvgDurationGroupDTO avgDurationGroupDTO1 : avgDurationGroupDTOList1) { if (avgDurationGroupDTOOld.getGroupName().equals(avgDurationGroupDTO1.getGroupName())) { flag = true; avgDurationGroupDTOOld.setSp(avgDurationGroupDTO1.getSp()); avgDurationGroupDTOOld.setSps(avgDurationGroupDTO1.getSps()); } } for (AvgDurationGroupDTO avgDurationGroupDTO2 : avgDurationGroupDTOList2) { if (avgDurationGroupDTOOld.getGroupName().equals(avgDurationGroupDTO2.getGroupName())) { flag = true; avgDurationGroupDTOOld.setDb(avgDurationGroupDTO2.getDb()); avgDurationGroupDTOOld.setHfs(avgDurationGroupDTO2.getHfs()); } } if (flag) { avgDurationGroupDTOListOld.add(avgDurationGroupDTOOld); } } //设置平均值对象 AvgDurationGroupDTO avgDurationGroupDTOAll = new AvgDurationGroupDTO(); avgDurationGroupDTOAll.setGroupName("平均值"); //设置小数点取后两位方法 DecimalFormat df = new DecimalFormat("#.00"); //生成不参与计算的下属组织数据, List avgDurationGroupDTOListNew = new ArrayList<>(); int fpsSize = 0; int slsSize = 0; int blsSize = 0; int spsSize = 0; int hfsSize = 0; if (0 == sortColmn || 0 == sortType) { for (String region : regionList) { AvgDurationGroupDTO avgDurationGroupDTONew = new AvgDurationGroupDTO(); for (AvgDurationGroupDTO avgDurationGroupDTO : avgDurationGroupDTOListOld) { if (region.equals(avgDurationGroupDTO.getGroupName())) { if (0 != avgDurationGroupDTO.getFps()) { fpsSize += 1; } if (0 != avgDurationGroupDTO.getSls()) { slsSize += 1; } if (0 != avgDurationGroupDTO.getBls()) { blsSize += 1; } if (0 != avgDurationGroupDTO.getSps()) { spsSize += 1; } if (0 != avgDurationGroupDTO.getHfs()) { hfsSize += 1; } //设置小数点取后两位 avgDurationGroupDTO.setFp(Double.parseDouble(df.format(avgDurationGroupDTO.getFp()))); avgDurationGroupDTO.setSl(Double.parseDouble(df.format(avgDurationGroupDTO.getSl()))); avgDurationGroupDTO.setBlz(Double.parseDouble(df.format(avgDurationGroupDTO.getBlz()))); avgDurationGroupDTO.setSp(Double.parseDouble(df.format(avgDurationGroupDTO.getSp()))); avgDurationGroupDTO.setDb(Double.parseDouble(df.format(avgDurationGroupDTO.getDb()))); BeanUtils.copyProperties(avgDurationGroupDTO, avgDurationGroupDTONew); //累加各项数据 avgDurationGroupDTOAll.setFp(avgDurationGroupDTOAll.getFp() + avgDurationGroupDTO.getFp() * avgDurationGroupDTO.getFps()); avgDurationGroupDTOAll.setFps(avgDurationGroupDTOAll.getFps() + avgDurationGroupDTO.getFps()); avgDurationGroupDTOAll.setSl(avgDurationGroupDTOAll.getSl() + avgDurationGroupDTO.getSl() * avgDurationGroupDTO.getSls()); avgDurationGroupDTOAll.setSls(avgDurationGroupDTOAll.getSls() + avgDurationGroupDTO.getSls()); avgDurationGroupDTOAll.setBlz(avgDurationGroupDTOAll.getBlz() + avgDurationGroupDTO.getBlz() * avgDurationGroupDTO.getBls()); avgDurationGroupDTOAll.setBls(avgDurationGroupDTOAll.getBls() + avgDurationGroupDTO.getBls()); avgDurationGroupDTOAll.setSp(avgDurationGroupDTOAll.getSp() + avgDurationGroupDTO.getSp() * avgDurationGroupDTO.getSps()); avgDurationGroupDTOAll.setSps(avgDurationGroupDTOAll.getSps() + avgDurationGroupDTO.getSps()); avgDurationGroupDTOAll.setDb(avgDurationGroupDTOAll.getDb() + avgDurationGroupDTO.getDb() * avgDurationGroupDTO.getHfs()); avgDurationGroupDTOAll.setHfs(avgDurationGroupDTOAll.getHfs() + avgDurationGroupDTO.getHfs()); } } avgDurationGroupDTONew.setGroupName(region); avgDurationGroupDTOListNew.add(avgDurationGroupDTONew); } } else { List satisfiedList = new ArrayList<>(); List notSatisfiedList = new ArrayList<>(); //根据排序条件把数量为0的和不为0的数据分开,将不为0的数据排序 if (1 == sortColmn) { for (AvgDurationGroupDTO avgDurationAllDTO1 : avgDurationGroupDTOListOld) { if (0 != avgDurationAllDTO1.getFps()) { satisfiedList.add(avgDurationAllDTO1); } else { notSatisfiedList.add(avgDurationAllDTO1); } } if (1 == sortType) { satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getFp)); } else { satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getFp).reversed()); } } else if (2 == sortColmn) { for (AvgDurationGroupDTO avgDurationAllDTO1 : avgDurationGroupDTOListOld) { if (0 != avgDurationAllDTO1.getSls()) { satisfiedList.add(avgDurationAllDTO1); } else { notSatisfiedList.add(avgDurationAllDTO1); } } if (1 == sortType) { satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getSl)); } else { satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getSl).reversed()); } } else if (3 == sortColmn) { for (AvgDurationGroupDTO avgDurationAllDTO1 : avgDurationGroupDTOListOld) { if (0 != avgDurationAllDTO1.getBls()) { satisfiedList.add(avgDurationAllDTO1); } else { notSatisfiedList.add(avgDurationAllDTO1); } } if (1 == sortType) { satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getBlz)); } else { satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getBlz).reversed()); } } else if (4 == sortColmn) { for (AvgDurationGroupDTO avgDurationAllDTO1 : avgDurationGroupDTOListOld) { if (0 != avgDurationAllDTO1.getSls()) { satisfiedList.add(avgDurationAllDTO1); } else { notSatisfiedList.add(avgDurationAllDTO1); } } if (1 == sortType) { satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getSp)); } else { satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getSp).reversed()); } } else if (5 == sortColmn) { for (AvgDurationGroupDTO avgDurationAllDTO1 : avgDurationGroupDTOListOld) { if (0 != avgDurationAllDTO1.getHfs()) { satisfiedList.add(avgDurationAllDTO1); } else { notSatisfiedList.add(avgDurationAllDTO1); } } if (1 == sortType) { satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getDb)); } else { satisfiedList.sort(Comparator.comparing(AvgDurationGroupDTO::getDb).reversed()); } } //清除列表数据,把不为0的数据先放入集合中,再将为0的数据放入集合中 avgDurationGroupDTOListOld.clear(); avgDurationGroupDTOListOld.addAll(satisfiedList); avgDurationGroupDTOListOld.addAll(notSatisfiedList); for (String region : regionList) { boolean flag = true; AvgDurationGroupDTO avgDurationGroupDTONew = new AvgDurationGroupDTO(); for (AvgDurationGroupDTO avgDurationGroupDTO : avgDurationGroupDTOListOld) { if (region.equals(avgDurationGroupDTO.getGroupName())) { if (0 != avgDurationGroupDTO.getFps()) { fpsSize += 1; } if (0 != avgDurationGroupDTO.getSls()) { slsSize += 1; } if (0 != avgDurationGroupDTO.getBls()) { blsSize += 1; } if (0 != avgDurationGroupDTO.getSps()) { spsSize += 1; } if (0 != avgDurationGroupDTO.getHfs()) { hfsSize += 1; } flag = false; //设置小数点取后两位 avgDurationGroupDTO.setFp(Double.parseDouble(df.format(avgDurationGroupDTO.getFp()))); avgDurationGroupDTO.setSl(Double.parseDouble(df.format(avgDurationGroupDTO.getSl()))); avgDurationGroupDTO.setBlz(Double.parseDouble(df.format(avgDurationGroupDTO.getBlz()))); avgDurationGroupDTO.setSp(Double.parseDouble(df.format(avgDurationGroupDTO.getSp()))); avgDurationGroupDTO.setDb(Double.parseDouble(df.format(avgDurationGroupDTO.getDb()))); //累加各项数据 avgDurationGroupDTOAll.setFp(avgDurationGroupDTOAll.getFp() + avgDurationGroupDTO.getFp() * avgDurationGroupDTO.getFps()); avgDurationGroupDTOAll.setFps(avgDurationGroupDTOAll.getFps() + avgDurationGroupDTO.getFps()); avgDurationGroupDTOAll.setSl(avgDurationGroupDTOAll.getSl() + avgDurationGroupDTO.getSl() * avgDurationGroupDTO.getSls()); avgDurationGroupDTOAll.setSls(avgDurationGroupDTOAll.getSls() + avgDurationGroupDTO.getSls()); avgDurationGroupDTOAll.setBlz(avgDurationGroupDTOAll.getBlz() + avgDurationGroupDTO.getBlz() * avgDurationGroupDTO.getBls()); avgDurationGroupDTOAll.setBls(avgDurationGroupDTOAll.getBls() + avgDurationGroupDTO.getBls()); avgDurationGroupDTOAll.setSp(avgDurationGroupDTOAll.getSp() + avgDurationGroupDTO.getSp() * avgDurationGroupDTO.getSps()); avgDurationGroupDTOAll.setSps(avgDurationGroupDTOAll.getSps() + avgDurationGroupDTO.getSps()); avgDurationGroupDTOAll.setDb(avgDurationGroupDTOAll.getDb() + avgDurationGroupDTO.getDb() * avgDurationGroupDTO.getHfs()); avgDurationGroupDTOAll.setHfs(avgDurationGroupDTOAll.getHfs() + avgDurationGroupDTO.getHfs()); } } if (flag) { avgDurationGroupDTONew.setGroupName(region); avgDurationGroupDTOListNew.add(avgDurationGroupDTONew); } } avgDurationGroupDTOListNew.addAll(0, avgDurationGroupDTOListOld); } //计算平均值 if (0 == avgDurationGroupDTOAll.getFps() || 0.0 == avgDurationGroupDTOAll.getFp()) { avgDurationGroupDTOAll.setFp(0.0); } else { avgDurationGroupDTOAll.setFp(Double.parseDouble(df.format(avgDurationGroupDTOAll.getFp() / avgDurationGroupDTOAll.getFps()))); } if (0 != fpsSize && 0 != avgDurationGroupDTOAll.getFps()) { avgDurationGroupDTOAll.setFps(Double.parseDouble(df.format(avgDurationGroupDTOAll.getFps() / fpsSize))); } else { avgDurationGroupDTOAll.setFps(0.0); } if (0 == avgDurationGroupDTOAll.getSls() || 0.0 == avgDurationGroupDTOAll.getSl()) { avgDurationGroupDTOAll.setSl(0.0); } else { avgDurationGroupDTOAll.setSl(Double.parseDouble(df.format(avgDurationGroupDTOAll.getSl() / avgDurationGroupDTOAll.getSls()))); } if (0 != slsSize && 0 != avgDurationGroupDTOAll.getSls()) { avgDurationGroupDTOAll.setSls(Double.parseDouble(df.format(avgDurationGroupDTOAll.getSls() / slsSize))); } else { avgDurationGroupDTOAll.setSls(0.0); } if (0 == avgDurationGroupDTOAll.getBls() || 0.0 == avgDurationGroupDTOAll.getBlz()) { avgDurationGroupDTOAll.setBlz(0.0); } else { avgDurationGroupDTOAll.setBlz(Double.parseDouble(df.format(avgDurationGroupDTOAll.getBlz() / avgDurationGroupDTOAll.getBls()))); } if (0 != blsSize && 0 != avgDurationGroupDTOAll.getBls()) { avgDurationGroupDTOAll.setBls(Double.parseDouble(df.format(avgDurationGroupDTOAll.getBls() / blsSize))); } else { avgDurationGroupDTOAll.setBls(0.0); } if (0 == avgDurationGroupDTOAll.getSps() || 0.0 == avgDurationGroupDTOAll.getSp()) { avgDurationGroupDTOAll.setSp(0.0); } else { avgDurationGroupDTOAll.setSp(Double.parseDouble(df.format(avgDurationGroupDTOAll.getSp() / avgDurationGroupDTOAll.getSps()))); } if (0 != spsSize && 0 != avgDurationGroupDTOAll.getSps()) { avgDurationGroupDTOAll.setSps(Double.parseDouble(df.format(avgDurationGroupDTOAll.getSps() / spsSize))); } else { avgDurationGroupDTOAll.setSps(0.0); } if (0 == avgDurationGroupDTOAll.getHfs() || 0.0 == avgDurationGroupDTOAll.getDb()) { avgDurationGroupDTOAll.setDb(0.0); } else { avgDurationGroupDTOAll.setDb(Double.parseDouble(df.format(avgDurationGroupDTOAll.getDb() / avgDurationGroupDTOAll.getHfs()))); } if (0 != hfsSize && 0 != avgDurationGroupDTOAll.getHfs()) { avgDurationGroupDTOAll.setHfs(Double.parseDouble(df.format(avgDurationGroupDTOAll.getHfs() / hfsSize))); } else { avgDurationGroupDTOAll.setHfs(0.0); } avgDurationAllDTO.setAvgDurationDTO(avgDurationGroupDTOAll); avgDurationAllDTO.setAvgDurationGroupDTOList(avgDurationGroupDTOListNew); return avgDurationAllDTO; } catch (Exception e) { log.error("[AnalysisService.AvgDuration]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.AvgDuration", e); } } /** * 效能分析-平均时长-分组列表 * * @param terms 条件 */ public AvgDurationAllDTO AvgDurationChartsGroup(Map terms) { try { //获取所有下属组织 List regionList = mapper.listRegion(terms); regionList.add(0, "本级"); AvgDurationAllDTO avgDurationAllDTO = new AvgDurationAllDTO(); //查出各地区数据 List avgDurationGroupDTOList = mapper.statisticsGroupAVG(terms); List avgDurationGroupDTOList1 = mapper.statisticsApplyGroup(terms); List avgDurationGroupDTOList2 = mapper.statisticsSuperviseGroup(terms); //把审批和督办的数据组装到总数据中 List avgDurationGroupDTOListOld = new ArrayList<>(); for (String region : regionList) { boolean flag = false; AvgDurationGroupDTO avgDurationGroupDTOOld = new AvgDurationGroupDTO(); avgDurationGroupDTOOld.setGroupName(region); for (AvgDurationGroupDTO avgDurationGroupDTO : avgDurationGroupDTOList) { if (avgDurationGroupDTOOld.getGroupName().equals(avgDurationGroupDTO.getGroupName())) { flag = true; avgDurationGroupDTOOld.setSl(avgDurationGroupDTO.getSl()); avgDurationGroupDTOOld.setSls(avgDurationGroupDTO.getSls()); avgDurationGroupDTOOld.setFp(avgDurationGroupDTO.getFp()); avgDurationGroupDTOOld.setFps(avgDurationGroupDTO.getFps()); avgDurationGroupDTOOld.setBlz(avgDurationGroupDTO.getBlz()); avgDurationGroupDTOOld.setBls(avgDurationGroupDTO.getBls()); } } for (AvgDurationGroupDTO avgDurationGroupDTO1 : avgDurationGroupDTOList1) { if (avgDurationGroupDTOOld.getGroupName().equals(avgDurationGroupDTO1.getGroupName())) { flag = true; avgDurationGroupDTOOld.setSp(avgDurationGroupDTO1.getSp()); avgDurationGroupDTOOld.setSps(avgDurationGroupDTO1.getSps()); } } for (AvgDurationGroupDTO avgDurationGroupDTO2 : avgDurationGroupDTOList2) { if (avgDurationGroupDTOOld.getGroupName().equals(avgDurationGroupDTO2.getGroupName())) { flag = true; avgDurationGroupDTOOld.setDb(avgDurationGroupDTO2.getDb()); avgDurationGroupDTOOld.setHfs(avgDurationGroupDTO2.getHfs()); } } if (flag) { avgDurationGroupDTOListOld.add(avgDurationGroupDTOOld); } } //设置小数点取后两位方法 DecimalFormat df = new DecimalFormat("#.00"); //生成不参与计算的下属组织数据 List avgDurationGroupDTOListNew = new ArrayList<>(); for (String region : regionList) { AvgDurationGroupDTO avgDurationGroupDTONew = new AvgDurationGroupDTO(); for (AvgDurationGroupDTO avgDurationGroupDTO : avgDurationGroupDTOListOld) { if (region.equals(avgDurationGroupDTO.getGroupName())) { avgDurationGroupDTONew.setFps(avgDurationGroupDTO.getFps()); avgDurationGroupDTONew.setSls(avgDurationGroupDTO.getSls()); avgDurationGroupDTONew.setBls(avgDurationGroupDTO.getBls()); avgDurationGroupDTONew.setSps(avgDurationGroupDTO.getSps()); avgDurationGroupDTONew.setHfs(avgDurationGroupDTO.getHfs()); //设置小数点取后两位 avgDurationGroupDTONew.setFp(Double.parseDouble(df.format(avgDurationGroupDTO.getFp()))); avgDurationGroupDTONew.setSl(Double.parseDouble(df.format(avgDurationGroupDTO.getSl()))); avgDurationGroupDTONew.setBlz(Double.parseDouble(df.format(avgDurationGroupDTO.getBlz()))); avgDurationGroupDTONew.setSp(Double.parseDouble(df.format(avgDurationGroupDTO.getSp()))); avgDurationGroupDTONew.setDb(Double.parseDouble(df.format(avgDurationGroupDTO.getDb()))); } } avgDurationGroupDTONew.setGroupName(region); avgDurationGroupDTOListNew.add(avgDurationGroupDTONew); } avgDurationAllDTO.setAvgDurationGroupDTOList(avgDurationGroupDTOListNew); return avgDurationAllDTO; } catch (Exception e) { log.error("[AnalysisService.AvgDuration]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.AvgDuration", e); } } /** * 效能分析-超时任务 * * @param terms 条件 */ public StatisticsGroupDTO TimeoutTask(Map terms, CtUnitDTO ctUnitDTO) { try { StatisticsGroupDTO statisticsGroupDTO = mapper.statisticsQuantity(terms); StatisticsGroupDTO statisticsGroupDTO1 = mapper.statisticsSuperviseQuantity(terms); statisticsGroupDTO.setDbcs(statisticsGroupDTO1.getDbcs()); return statisticsGroupDTO; } catch (Exception e) { log.error("[AnalysisService.TimeoutTask]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.TimeoutTask", e); } } /** * 效能分析-超时任务 * * @param terms 条件 */ public List listTimeOutTaskGroup(Map terms, CtUnitDTO ctUnitDTO, int queryType) { try { List timeOutTaskGroupDTOList = new ArrayList<>(); if (1 == queryType) { timeOutTaskGroupDTOList = mapper.countFPQuantityGroup(terms); } else if (2 == queryType) { timeOutTaskGroupDTOList = mapper.countSLQuantityGroup(terms); } else if (3 == queryType) { timeOutTaskGroupDTOList = mapper.countDBQuantityGroup(terms); } else if (4 == queryType) { timeOutTaskGroupDTOList = mapper.countAllQuantityGroup(terms); } List regionList = mapper.listRegion(terms); regionList.add(0, "本级"); List timeOutTaskGroupDTOListAll = new ArrayList<>(); for (String region : regionList) { TimeOutTaskGroupDTO timeOutTaskGroupDTO1 = new TimeOutTaskGroupDTO(); for (TimeOutTaskGroupDTO timeOutTaskGroupDTO : timeOutTaskGroupDTOList) { if (region.equals(timeOutTaskGroupDTO.getGroupName())) { timeOutTaskGroupDTO1.setQuantity(timeOutTaskGroupDTO.getQuantity()); } } timeOutTaskGroupDTO1.setGroupName(region); timeOutTaskGroupDTOListAll.add(timeOutTaskGroupDTO1); } return timeOutTaskGroupDTOListAll; } catch (Exception e) { log.error("[AnalysisService.listTimeOutTaskGroup]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.listTimeOutTaskGroup", e); } } /** * 首页-效能分析超时任务统计 * * @param ctUnitDTO 登录账号组织信息 */ public int homeTimeoutTask(CtUnitDTO ctUnitDTO) { try { Map terms = new HashMap<>(); if (ctUnitDTO.getUnitType() == 101 || ctUnitDTO.getUnitType() == 103) { //根据组织级别来往terms中传入最大的查询范围 if (!terms.containsKey("city") || !terms.containsKey("area") || !terms.containsKey("road") || !terms.containsKey("village")) { terms.put("unitGrade", ctUnitDTO.getUnitGrade()); switch (ctUnitDTO.getUnitGrade()) { case 1: terms.put("queCity", ctUnitDTO.getCity()); break; case 2: terms.put("queArea", ctUnitDTO.getArea()); break; case 3: terms.put("queRoad", ctUnitDTO.getRoad()); break; case 4: terms.put("queRoad", ctUnitDTO.getVillage()); break; } } } else { List unitIdList = new ArrayList<>(); String unitIds = new String(); //当该组织不为综治中心和村居时只查自己及下属组织 unitIdList = this.getAllParentUnit(ctUnitDTO.getId()); unitIds = unitIdList.stream().map(String::valueOf).collect(Collectors.joining("','")); if (StringUtils.isNotBlank(unitIds)) { unitIds = "'" + unitIds + "'"; } terms.put("unitIds", unitIds); } // 获取当前日期 LocalDate currentDate = LocalDate.now(); // 获取当前月份的起始时间(当月1日) LocalDate startOfMonth = currentDate.withDayOfMonth(1); // 获取当前月份的结束时间(当月最后一天) LocalDate endOfMonth = currentDate.withDayOfMonth(currentDate.lengthOfMonth()); // 格式化日期为合适的字符串格式,方便用于SQL语句中(这里以常见的 yyyy-MM-dd 为例) DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); String startDateStr = startOfMonth.format(formatter); String endDateStr = endOfMonth.format(formatter); terms.put("createStart", startDateStr); terms.put("createEnd", endDateStr); int fpcsTotal = 0; int slcsTotal = 0; int dbcsTotal = 0; StatisticsGroupDTO statisticsGroupDTOList1 = mapper.homeStatisticsQuantity(terms); StatisticsGroupDTO statisticsGroupDTOList2 = mapper.homeStatisticsSuperviseQuantity(terms); if (ObjectUtils.isNotEmpty(statisticsGroupDTOList1)) { fpcsTotal = statisticsGroupDTOList1.getFpcs(); slcsTotal = statisticsGroupDTOList1.getSlcs(); } if (ObjectUtils.isNotEmpty(statisticsGroupDTOList2)) { dbcsTotal = statisticsGroupDTOList2.getDbcs(); } return fpcsTotal + slcsTotal + dbcsTotal; } catch (Exception e) { log.error("[AnalysisService.TimeoutTask]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.TimeoutTask", e); } } /** * 分页查询分派超时案件 * * @param page 分页对象 * @param terms 条件 * @return Page */ public Page pageFPQuantity(PageRequest page, Map terms) { try { long total = mapper.countFPQuantity(terms); List timeoutTaskInfoDTOList = mapper.listFPQuantity(page, terms); return new PageImpl(timeoutTaskInfoDTOList, page, total); } catch (Exception e) { log.error("[AnalysisService.pageFPQuantity]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.pageFPQuantity", e); } } /** * 分页查询受理超时案件 * * @param page 分页对象 * @param terms 条件 * @return Page */ public Page pageSLQuantity(PageRequest page, Map terms) { try { long total = mapper.countSLQuantity(terms); List timeoutTaskInfoDTOList = mapper.listSLQuantity(page, terms); return new PageImpl(timeoutTaskInfoDTOList, page, total); } catch (Exception e) { log.error("[AnalysisService.pageSLQuantity]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.pageSLQuantity", e); } } /** * 分页查询分派超时案件 * * @param page 分页对象 * @param terms 条件 * @return Page */ public Page pageDBQuantity(PageRequest page, Map terms) { try { long total = mapper.countDBQuantity(terms); List timeoutTaskInfoDTOList = mapper.listDBQuantity(page, terms); return new PageImpl(timeoutTaskInfoDTOList, page, total); } catch (Exception e) { log.error("[AnalysisService.pageDBQuantity]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.pageDBQuantity", e); } } /** * 分页查询全部超时案件 * * @param page 分页对象 * @param terms 条件 * @return Page */ public Page pageAllQuantity(PageRequest page, Map terms) { try { long total = mapper.countAllQuantity(terms); List timeoutTaskInfoDTOList = mapper.listAllQuantity(page, terms); return new PageImpl(timeoutTaskInfoDTOList, page, total); } catch (Exception e) { log.error("[AnalysisService.pageAllQuantity]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.pageDBQuantity", e); } } /** * 分组任务流转统计 * * @param terms 条件 * @return Page */ public StatisticsCirculationAllDTO statisticsCirculation(Map terms, int sortType, int sortColmn) { try { StatisticsCirculationAllDTO statisticsCirculationAllDTO = new StatisticsCirculationAllDTO(); List statisticsCirculationDTONewList = new ArrayList<>(); //小数点取后两位 DecimalFormat df = new DecimalFormat("#.00"); List statisticsCirculationDTOList = mapper.statisticsCirculation(terms); List regionList = mapper.listRegion(terms); regionList.add(0, "本级"); if (0 == sortColmn || 0 == sortType) { for (String region : regionList) { StatisticsCirculationDTO statisticsCirculationDTONew = new StatisticsCirculationDTO(); for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) { if (region.equals(statisticsCirculationDTO.getGroupName())) { double zxsl = Double.valueOf(statisticsCirculationDTO.getZxsl()); double bysl = Double.valueOf(statisticsCirculationDTO.getBysl()); double lzsl = Double.valueOf(statisticsCirculationDTO.getLzsl()); double zdj = Double.valueOf(statisticsCirculationDTO.getZdj()); double lzz = zdj - zxsl - bysl - lzsl; double lzl = (lzz + lzsl) / zdj * 100; statisticsCirculationDTO.setLzl(Double.parseDouble(df.format(lzl))); statisticsCirculationDTO.setLzz((int) lzz); BeanUtils.copyProperties(statisticsCirculationDTO, statisticsCirculationDTONew); } } statisticsCirculationDTONew.setGroupName(region); statisticsCirculationDTONewList.add(statisticsCirculationDTONew); } } else { for (String region : regionList) { boolean flag = true; StatisticsCirculationDTO statisticsCirculationDTONew = new StatisticsCirculationDTO(); for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) { if (region.equals(statisticsCirculationDTO.getGroupName())) { flag = false; BeanUtils.copyProperties(statisticsCirculationDTO, statisticsCirculationDTONew); double zxsl = Double.valueOf(statisticsCirculationDTO.getZxsl()); double bysl = Double.valueOf(statisticsCirculationDTO.getBysl()); double lzsl = Double.valueOf(statisticsCirculationDTO.getLzsl()); double zdj = Double.valueOf(statisticsCirculationDTO.getZdj()); double lzz = zdj - zxsl - bysl - lzsl; double lzl = (lzz + lzsl) / zdj * 100; statisticsCirculationDTO.setLzl(Double.parseDouble(df.format(lzl))); statisticsCirculationDTO.setLzz((int) lzz); } } if (flag) { statisticsCirculationDTONew.setGroupName(region); statisticsCirculationDTONewList.add(statisticsCirculationDTONew); } } List satisfiedList = new ArrayList<>(); List notSatisfiedList = new ArrayList<>(); //排序 if (1 == sortColmn) { for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) { if (0 != statisticsCirculationDTO.getLzl()) { satisfiedList.add(statisticsCirculationDTO); } else { notSatisfiedList.add(statisticsCirculationDTO); } } if (1 == sortType) { satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getLzl)); } else { satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getLzl).reversed()); } } else if (2 == sortColmn) { for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) { if (0 != statisticsCirculationDTO.getZdj()) { satisfiedList.add(statisticsCirculationDTO); } else { notSatisfiedList.add(statisticsCirculationDTO); } } if (1 == sortType) { satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getZdj)); } else { satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getZdj).reversed()); } } else if (3 == sortColmn) { for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) { if (0 != statisticsCirculationDTO.getZxsl()) { satisfiedList.add(statisticsCirculationDTO); } else { notSatisfiedList.add(statisticsCirculationDTO); } } if (1 == sortType) { satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getZxsl)); } else { satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getZxsl).reversed()); } } else if (4 == sortColmn) { for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) { if (0 != statisticsCirculationDTO.getLzsl()) { satisfiedList.add(statisticsCirculationDTO); } else { notSatisfiedList.add(statisticsCirculationDTO); } } if (1 == sortType) { satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getLzsl)); } else { satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getLzsl).reversed()); } } else if (5 == sortColmn) { for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) { if (0 != statisticsCirculationDTO.getLzz()) { satisfiedList.add(statisticsCirculationDTO); } else { notSatisfiedList.add(statisticsCirculationDTO); } } if (1 == sortType) { satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getLzz)); } else { satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getLzz).reversed()); } } else if (6 == sortColmn) { for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) { if (0 != statisticsCirculationDTO.getBysl()) { satisfiedList.add(statisticsCirculationDTO); } else { notSatisfiedList.add(statisticsCirculationDTO); } } if (1 == sortType) { satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getBysl)); } else { satisfiedList.sort(Comparator.comparing(StatisticsCirculationDTO::getBysl).reversed()); } } statisticsCirculationDTOList.clear(); statisticsCirculationDTOList.addAll(satisfiedList); statisticsCirculationDTOList.addAll(notSatisfiedList); statisticsCirculationDTONewList.addAll(0, statisticsCirculationDTOList); } StatisticsCirculationDTO statisticsCirculationDTOTolal = new StatisticsCirculationDTO(); //计算平均值 int lzzTotal = 0; int zdjTotal = 0; int zxslTotal = 0; int lzslTotal = 0; int byslTotal = 0; for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) { lzzTotal += statisticsCirculationDTO.getLzz(); zdjTotal += statisticsCirculationDTO.getZdj(); zxslTotal += statisticsCirculationDTO.getZxsl(); lzslTotal += statisticsCirculationDTO.getLzsl(); byslTotal += statisticsCirculationDTO.getBysl(); } StatisticsCirculationDTO statisticsCirculationDTOAVG = new StatisticsCirculationDTO(); statisticsCirculationDTOAVG.setGroupName("平均值"); double lzlAVG = 0; if (!CollectionUtils.isEmpty(statisticsCirculationDTOList)) { //添加平均值 double statisticsCirculationDTOListSize = 0.0; if (0 != (lzzTotal + lzslTotal) && 0 != zdjTotal) { lzlAVG = (Double.valueOf(lzzTotal) + Double.valueOf(lzslTotal)) / Double.valueOf(zdjTotal) * 100; } statisticsCirculationDTOListSize = statisticsCirculationDTOList.size(); statisticsCirculationDTOAVG.setLzl(Double.parseDouble(df.format(lzlAVG))); statisticsCirculationDTOAVG.setLzz(Double.parseDouble(df.format(lzzTotal / statisticsCirculationDTOListSize))); statisticsCirculationDTOAVG.setZdj(Double.parseDouble(df.format(zdjTotal / statisticsCirculationDTOListSize))); statisticsCirculationDTOAVG.setZxsl(Double.parseDouble(df.format(zxslTotal / statisticsCirculationDTOListSize))); statisticsCirculationDTOAVG.setLzsl(Double.parseDouble(df.format(lzslTotal / statisticsCirculationDTOListSize))); statisticsCirculationDTOAVG.setBysl(Double.parseDouble(df.format(byslTotal / statisticsCirculationDTOListSize))); //添加合计 statisticsCirculationDTOTolal.setGroupName("合计"); statisticsCirculationDTOTolal.setZdj(zdjTotal); statisticsCirculationDTOTolal.setZxsl(zxslTotal); statisticsCirculationDTOTolal.setLzsl(lzslTotal); statisticsCirculationDTOTolal.setBysl(byslTotal); statisticsCirculationDTOTolal.setLzz(lzzTotal); statisticsCirculationDTOTolal.setLzl(Double.parseDouble(df.format(lzlAVG))); } statisticsCirculationAllDTO.setStatisticsCirculationDTOList(statisticsCirculationDTONewList); List statisticsCirculationDTOMain = new ArrayList<>(); statisticsCirculationDTOMain.add(statisticsCirculationDTOAVG); statisticsCirculationDTOMain.add(statisticsCirculationDTOTolal); statisticsCirculationAllDTO.setStatisticsCirculationDTO(statisticsCirculationDTOMain); //格式化成string类型 return statisticsCirculationAllDTO; } catch (Exception e) { log.error("[AnalysisService.statisticsCirculation]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.statisticsCirculation", e); } } /** * 分组任务流转统计 * * @param terms 条件 * @return Page */ public List statisticsCirculationCharts(Map terms) { try { List statisticsCirculationDTONewList = new ArrayList<>(); //小数点取后两位 DecimalFormat df = new DecimalFormat("#.00"); List statisticsCirculationDTOList = mapper.statisticsCirculation(terms); List regionList = mapper.listRegion(terms); regionList.add(0, "本级"); for (String region : regionList) { StatisticsCirculationDTO statisticsCirculationDTONew = new StatisticsCirculationDTO(); for (StatisticsCirculationDTO statisticsCirculationDTO : statisticsCirculationDTOList) { if (region.equals(statisticsCirculationDTO.getGroupName())) { double zxsl = Double.valueOf(statisticsCirculationDTO.getZxsl()); double bysl = Double.valueOf(statisticsCirculationDTO.getBysl()); double lzsl = Double.valueOf(statisticsCirculationDTO.getLzsl()); double zdj = Double.valueOf(statisticsCirculationDTO.getZdj()); double lzz = zdj - zxsl - bysl - lzsl; double lzl = (lzz + lzsl) / zdj * 100; statisticsCirculationDTO.setLzl(Double.parseDouble(df.format(lzl))); statisticsCirculationDTO.setLzz((int) lzz); BeanUtils.copyProperties(statisticsCirculationDTO, statisticsCirculationDTONew); } } statisticsCirculationDTONew.setGroupName(region); statisticsCirculationDTONewList.add(statisticsCirculationDTONew); } return statisticsCirculationDTONewList; } catch (Exception e) { log.error("[AnalysisService.statisticsCirculationCharts]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.statisticsCirculationCharts", e); } } /** * 分页查询分派超时案件 * * @param unitId 组织编号 * @return Page */ public List getAllParentUnit(String unitId) { try { return mapper.getAllParentUnit(unitId); } catch (Exception e) { log.error("[AnalysisService.getAllParentUnit]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.getAllParentUnit", e); } } /** * 解纷态势-分组查询扬言极端数量 * * @param terms 条件 * @param ctUnitDTO 单位信息 */ public List statisticsYYJDQuantity(Map terms, CtUnitDTO ctUnitDTO) { try { if (terms.containsKey("village")) { terms.put("queVillage", terms.get("village")); terms.remove("village"); } else if (terms.containsKey("road")) { terms.put("queRoad", terms.get("road")); terms.remove("road"); } else if (terms.containsKey("area")) { terms.put("queArea", terms.get("area")); terms.remove("area"); } else if (terms.containsKey("city")) { terms.put("queCity", terms.get("city")); terms.remove("city"); } else if (terms.containsKey("prov")) { terms.put("queProv", terms.get("prov")); terms.remove("prov"); } else { terms.put("queProv", terms.get("prov")); } String zzzxunitId = mapper.getZZZXUnitId(terms); List statisticsYYJDQuantity = mapper.statisticsYYJDQuantity(terms); //查出下级单位 List allLevelGroupYYJDDTOList = mapper.listSubordinateTerritory1(terms); //把查询数放到完整的数组里(本级的最后再处理) terms.remove("queVillage"); terms.remove("queRoad"); terms.remove("queArea"); terms.remove("queCity"); terms.remove("queProv"); Map terms1 = new HashMap<>(); terms1.putAll(terms); for (LevelGroupYYJDDTO a : allLevelGroupYYJDDTOList) { for (LevelGroupYYJDDTO b : statisticsYYJDQuantity) { if (a.getName().equals(b.getName())) { terms1.put(b.getRegion(), b.getCode()); String caseTypes = this.getCaseTypeByRegion(terms1); a.setName(b.getName()); a.setTotal(b.getTotal()); a.setCode(b.getCode()); a.setCommonType(caseTypes); a.setRegion(b.getRegion()); } } } //先排序其他单位 if (terms.containsKey("sortType")) { if (terms.get("sortType").equals("1")) { allLevelGroupYYJDDTOList.sort(Comparator.comparing(LevelGroupYYJDDTO::getTotal)); } else { allLevelGroupYYJDDTOList.sort(Comparator.comparing(LevelGroupYYJDDTO::getTotal).reversed()); } } else { allLevelGroupYYJDDTOList.sort(Comparator.comparing(LevelGroupYYJDDTO::getTotal).reversed()); } //最后再把本级放在第一位 LevelGroupYYJDDTO levelGroupYYJDDTO = new LevelGroupYYJDDTO(); levelGroupYYJDDTO.setName("本级"); levelGroupYYJDDTO.setCode(zzzxunitId); levelGroupYYJDDTO.setRegion("unitId"); for (LevelGroupYYJDDTO c : statisticsYYJDQuantity) { if (c.getName().equals(levelGroupYYJDDTO.getName())) { Map terms2 = new HashMap<>(); terms2.putAll(terms); List unitIdList = mapper.getAllDeptParentUnit(zzzxunitId); String unitIds = unitIdList.stream().map(String::valueOf).collect(Collectors.joining("','")); unitIds = "'" + unitIds + "'"; terms2.put("unitId", unitIds); String caseTypes = this.getCaseTypeByRegion(terms2); levelGroupYYJDDTO.setName(c.getName()); levelGroupYYJDDTO.setTotal(c.getTotal()); levelGroupYYJDDTO.setCommonType(caseTypes); } } //村居级别时,根据村居组织编号判断是否一致,一致时即为本级 boolean isOk = true; if (103 == ctUnitDTO.getUnitType() && StringUtils.isNotBlank(ctUnitDTO.getVillage())) { for (LevelGroupYYJDDTO d : allLevelGroupYYJDDTOList) { if (d.getCode().equals(ctUnitDTO.getVillage())) { isOk = false; d.setName("本级"); } } } if (isOk) { allLevelGroupYYJDDTOList.add(0, levelGroupYYJDDTO); } return allLevelGroupYYJDDTOList; } catch (Exception e) { log.error("[AnalysisService.statisticsYYJDQuantity]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.statisticsYYJDQuantity", e); } } /** * 分页查询分派超时案件 * * @param terms 组织编号 * @return string */ public String getCaseTypeByRegion(Map terms) { try { List caseTypeList = mapper.listCaseTypeByRegion(terms); String caseTypes = new String(); caseTypes = caseTypeList.stream().collect(Collectors.joining("、")); return caseTypes; } catch (Exception e) { log.error("[AnalysisService.getCaseTypeByRegion]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.getCaseTypeByRegion", e); } } /** * 获取所有下属组织包括自己(除村居外) * * @param unitId 组织编号 */ public List getAllDeptParentUnit(String unitId) { try { List unitIdList = mapper.getAllDeptParentUnit(unitId); return unitIdList; } catch (Exception e) { log.error("[AnalysisService.getAllDeptParentUnit]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.getAllDeptParentUnit", e); } } /** * 查询流转情况列表 * * @param page 组织编号 */ public Page listStatisticsCirculation(Map terms, PageRequest page) { try { long total = mapper.countStatisticsCirculation(terms); List content = mapper.listStatisticsCirculation(page, terms); for (CasePageDTO casePageDTO : content) { StringBuffer sb = new StringBuffer(); if (ObjectUtils.isNotEmpty(casePageDTO.getQueAreaName())) { sb.append("/"); sb.append(casePageDTO.getQueAreaName()); } if (ObjectUtils.isNotEmpty(casePageDTO.getQueRoadName())) { sb.append("/"); sb.append(casePageDTO.getQueRoadName()); } if (ObjectUtils.isNotEmpty(casePageDTO.getQueVillageName())) { sb.append("/"); sb.append(casePageDTO.getQueVillageName()); } if (ObjectUtils.isEmpty(sb)) { sb.append("/"); sb.append(casePageDTO.getQueCityName()); } if (sb.length() > 1) { casePageDTO.setAreaName(sb.substring(1, sb.length())); } } return new PageImpl(content, page, total); } catch (Exception e) { log.error("[AnalysisService.listStatisticsCirculation]调用失败,异常信息:" + e, e); throw new ServiceException("AnalysisService.listStatisticsCirculation", e); } } }