From 1766ee87fb875535c104854aad95f5c21f31e7f8 Mon Sep 17 00:00:00 2001 From: buaixuexideshitongxue <2936013465@qq.com> Date: Fri, 20 Mar 2026 19:23:40 +0800 Subject: [PATCH] =?UTF-8?q?fix--=E6=A1=88=E4=BB=B6=E6=A0=B8=E6=9F=A5?= =?UTF-8?q?=E4=BA=8C=E7=BA=A7=E9=97=AE=E9=A2=98=E7=B1=BB=E5=9E=8B=E4=B8=8D?= =?UTF-8?q?=E5=87=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../subdatav/SubOneCaseVerifController.java | 1 + .../mapper/DataCaseVerifMapper.java | 5 +- .../service/subDatav/SubDatavServiceImpl.java | 174 ++++++++---------- 3 files changed, 84 insertions(+), 96 deletions(-) diff --git a/src/main/java/com/biutag/supervision/controller/subdatav/SubOneCaseVerifController.java b/src/main/java/com/biutag/supervision/controller/subdatav/SubOneCaseVerifController.java index 88d359e..c2da7cd 100644 --- a/src/main/java/com/biutag/supervision/controller/subdatav/SubOneCaseVerifController.java +++ b/src/main/java/com/biutag/supervision/controller/subdatav/SubOneCaseVerifController.java @@ -47,6 +47,7 @@ public class SubOneCaseVerifController { public Result getCaseProblemProperty(@RequestParam Integer departId, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { + endTime = DateUtil.endOfDay(endTime); List zfbaPieList = dataCaseVerifMapper.getCaseProblemProperty(beginTime, endTime, departId, 5); // 执法办案 List fwglPieList = dataCaseVerifMapper.getCaseProblemProperty(beginTime, endTime, departId, 1); // 服务管理 List jgjjPieList = dataCaseVerifMapper.getCaseProblemProperty(beginTime, endTime, departId,4); // 警规 diff --git a/src/main/java/com/biutag/supervision/mapper/DataCaseVerifMapper.java b/src/main/java/com/biutag/supervision/mapper/DataCaseVerifMapper.java index ba07189..ade739e 100644 --- a/src/main/java/com/biutag/supervision/mapper/DataCaseVerifMapper.java +++ b/src/main/java/com/biutag/supervision/mapper/DataCaseVerifMapper.java @@ -55,13 +55,12 @@ public interface DataCaseVerifMapper extends BaseMapper { "LEFT JOIN sup_depart sddd ON sdd.pid = sddd.id " + "WHERE " + "ng.check_status_code IN (1, 2, 3) " + - "AND sd.pid = #{departId} " + "AND ng.problemSourcesCode IN (17,18,19,20) " + "AND ng.crtTime BETWEEN #{beginTime} AND #{endTime} " + - "AND ng.businessTypeCode = #{businessType} " + + "AND npr.oneLevelCode = #{code} " + "AND (sd.id = #{departId} OR sdd.id = #{departId} OR sddd.id = #{departId}) " + "GROUP BY npr.twoLevelContent ") - List getCaseProblemProperty(Date beginTime, Date endTime, Integer departId, Integer businessType); + List getCaseProblemProperty(Date beginTime, Date endTime, Integer departId, Integer code); @Select(" SELECT matter as name, COUNT(*) as value from confinement " + diff --git a/src/main/java/com/biutag/supervision/service/subDatav/SubDatavServiceImpl.java b/src/main/java/com/biutag/supervision/service/subDatav/SubDatavServiceImpl.java index 46c3659..cd0fb80 100644 --- a/src/main/java/com/biutag/supervision/service/subDatav/SubDatavServiceImpl.java +++ b/src/main/java/com/biutag/supervision/service/subDatav/SubDatavServiceImpl.java @@ -41,6 +41,7 @@ import java.time.ZoneId; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; import static com.biutag.supervision.constants.enums.ProblemSourcesEnum.*; @@ -434,7 +435,6 @@ public class SubDatavServiceImpl implements SubDatavService { List fxsjChangedRankList = new ArrayList<>(); List jsdwChangedRankList = new ArrayList<>(); - List allRankList = new ArrayList<>(); for (SupDepart pcs : policeDeparts) { List negativeList = negativeMapper.getChangedRank(pcs.getId(), request.getBeginTime(), request.getEndTime()); @@ -442,17 +442,16 @@ public class SubDatavServiceImpl implements SubDatavService { if (totalPro == 0) { continue; } - long completed = negativeList.stream() - .filter(Objects::nonNull) - .filter(one -> ProcessingStatusEnum.completed.name().equals(one.getProcessingStatus())) - .count(); + // 办结数 + long completed = negativeList.stream().filter(Objects::nonNull).filter(one -> ProcessingStatusEnum.completed.name().equals(one.getProcessingStatus())).count(); + // 市局下发 long sjxf = negativeList.stream().filter(Objects::nonNull).filter(one -> Integer.valueOf(0).equals(one.getCrtDepartLevel())).count(); + // 县局下发 long xjxf = negativeList.stream().filter(Objects::nonNull).filter(one -> Integer.valueOf(2).equals(one.getCrtDepartLevel())).count(); String rate = BigDecimal.valueOf(completed) .multiply(BigDecimal.valueOf(100)) .divide(BigDecimal.valueOf(totalPro), 1, RoundingMode.HALF_UP) .toString(); - RankVo rankVo = new RankVo(); rankVo.setLabel(pcs.getShortName()); rankVo.setDepartId(pcs.getId()); @@ -463,7 +462,6 @@ public class SubDatavServiceImpl implements SubDatavService { rankVo.setValue(rate); rankVo.setRate(rate); fxsjChangedRankList.add(rankVo); - allRankList.add(rankVo); } for (SupDepart dw : teamDeparts) { @@ -482,7 +480,6 @@ public class SubDatavServiceImpl implements SubDatavService { .multiply(BigDecimal.valueOf(100)) .divide(BigDecimal.valueOf(totalPro), 1, RoundingMode.HALF_UP) .toString(); - RankVo rankVo = new RankVo(); rankVo.setLabel(dw.getShortName()); rankVo.setDepartId(dw.getId()); @@ -493,57 +490,31 @@ public class SubDatavServiceImpl implements SubDatavService { rankVo.setValue(rate); rankVo.setRate(rate); jsdwChangedRankList.add(rankVo); - allRankList.add(rankVo); } fxsjChangedRankList.sort(Comparator.comparingLong((RankVo vo) -> Long.parseLong(vo.getDenominator())).reversed()); jsdwChangedRankList.sort(Comparator.comparingLong((RankVo vo) -> Long.parseLong(vo.getDenominator())).reversed()); - long policeTotal = fxsjChangedRankList.stream().mapToLong(vo -> Long.parseLong(vo.getDenominator())).sum(); - long policeCompleted = fxsjChangedRankList.stream().mapToLong(vo -> Long.parseLong(vo.getNumerator())).sum(); - long policeProcessing = policeTotal - policeCompleted; - double policeRate = policeTotal == 0 ? 0.0 : BigDecimal.valueOf(policeCompleted) - .multiply(BigDecimal.valueOf(100)) - .divide(BigDecimal.valueOf(policeTotal), 1, RoundingMode.HALF_UP) - .doubleValue(); - long teamTotal = jsdwChangedRankList.stream().mapToLong(vo -> Long.parseLong(vo.getDenominator())).sum(); - long teamCompleted = jsdwChangedRankList.stream().mapToLong(vo -> Long.parseLong(vo.getNumerator())).sum(); - long teamProcessing = teamTotal - teamCompleted; - double teamRate = teamTotal == 0 ? 0.0 : BigDecimal.valueOf(teamCompleted) - .multiply(BigDecimal.valueOf(100)) - .divide(BigDecimal.valueOf(teamTotal), 1, RoundingMode.HALF_UP) - .doubleValue(); + long total = Stream.concat(fxsjChangedRankList.stream(), jsdwChangedRankList.stream()) + .mapToLong(vo -> Long.parseLong(vo.getDenominator())) + .sum(); - long total = policeTotal + teamTotal; - long completed = policeCompleted + teamCompleted; - long processing = policeProcessing + teamProcessing; + long completed = Stream.concat(fxsjChangedRankList.stream(), jsdwChangedRankList.stream()) + .mapToLong(vo -> Long.parseLong(vo.getNumerator())) + .sum(); + + long processing = total - completed; double rate = total == 0 ? 0.0 : BigDecimal.valueOf(completed) .multiply(BigDecimal.valueOf(100)) .divide(BigDecimal.valueOf(total), 1, RoundingMode.HALF_UP) .doubleValue(); - - DayTimeSuperviseVo fxsjRankOverview = new DayTimeSuperviseVo(); - fxsjRankOverview.setProTotal((int) policeTotal); - fxsjRankOverview.setProcessingNumber(policeProcessing); - fxsjRankOverview.setCompletedNumber(policeCompleted); - fxsjRankOverview.setCompletedRate(policeRate); - - DayTimeSuperviseVo jsdwRankOverview = new DayTimeSuperviseVo(); - jsdwRankOverview.setProTotal((int) teamTotal); - jsdwRankOverview.setProcessingNumber(teamProcessing); - jsdwRankOverview.setCompletedNumber(teamCompleted); - jsdwRankOverview.setCompletedRate(teamRate); - DayTimeSuperviseVo overview = new DayTimeSuperviseVo(); overview.setProTotal((int) total); overview.setProcessingNumber(processing); overview.setCompletedNumber(completed); overview.setCompletedRate(rate); - JSONObject data = new JSONObject() .fluentPut("overview", overview) - .fluentPut("fxsjRankOverview", fxsjRankOverview) - .fluentPut("jsdwRankOverview", jsdwRankOverview) .fluentPut("fxsjChangedRankList", fxsjChangedRankList) .fluentPut("jsdwChangedRankList", jsdwChangedRankList); return Result.success(data); @@ -663,72 +634,28 @@ public class SubDatavServiceImpl implements SubDatavService { fxsjYellowBetRankList.sort(Comparator.comparingInt((OrganizeProblemRankVo vo) -> Integer.parseInt(vo.getValue())).reversed()); jsdwYellowBetRankList.sort(Comparator.comparingInt((OrganizeProblemRankVo vo) -> Integer.parseInt(vo.getValue())).reversed()); - List totalNegativeList = new ArrayList<>(totalNegativeMap.values()); - long policeTotal = fxsjYellowBetRankList.stream().mapToLong(vo -> Long.parseLong(vo.getValue())).sum(); - long policeCompleted = 0L; - long policeProcessing = 0L; - long teamTotal = jsdwYellowBetRankList.stream().mapToLong(vo -> Long.parseLong(vo.getValue())).sum(); - long teamCompleted = 0L; - long teamProcessing = 0L; - for (SupDepart supDepart : policeDeparts) { - List negativeList = negativeMapper.getYellowBetNegativeList(supDepart.getId(), request.getBeginTime(), request.getEndTime(), request.getSpecialSupervision()); - policeCompleted += negativeList.stream() - .filter(item -> ProcessingStatusEnum.completed.name().equals(item.getProcessingStatus())) - .count(); - policeProcessing += negativeList.stream() - .filter(item -> ProcessingStatusEnum.processing.name().equals(item.getProcessingStatus())) - .count(); - } - for (SupDepart supDepart : teamDeparts) { - List negativeList = negativeMapper.getYellowBetNegativeList(supDepart.getId(), request.getBeginTime(), request.getEndTime(), request.getSpecialSupervision()); - teamCompleted += negativeList.stream() - .filter(item -> ProcessingStatusEnum.completed.name().equals(item.getProcessingStatus())) - .count(); - teamProcessing += negativeList.stream() - .filter(item -> ProcessingStatusEnum.processing.name().equals(item.getProcessingStatus())) - .count(); - } - - DayTimeSuperviseVo fxsjYellowBetOverview = new DayTimeSuperviseVo(); - fxsjYellowBetOverview.setProTotal((int) policeTotal); - fxsjYellowBetOverview.setProcessingNumber(policeProcessing); - fxsjYellowBetOverview.setCompletedNumber(policeCompleted); - fxsjYellowBetOverview.setCompletedRate(policeTotal == 0 - ? 0D - : BigDecimal.valueOf(policeCompleted).multiply(BigDecimal.valueOf(100)).divide(BigDecimal.valueOf(policeTotal), 2, RoundingMode.HALF_UP).doubleValue()); - - DayTimeSuperviseVo jsdwYellowBetOverview = new DayTimeSuperviseVo(); - jsdwYellowBetOverview.setProTotal((int) teamTotal); - jsdwYellowBetOverview.setProcessingNumber(teamProcessing); - jsdwYellowBetOverview.setCompletedNumber(teamCompleted); - jsdwYellowBetOverview.setCompletedRate(teamTotal == 0 - ? 0D - : BigDecimal.valueOf(teamCompleted).multiply(BigDecimal.valueOf(100)).divide(BigDecimal.valueOf(teamTotal), 2, RoundingMode.HALF_UP).doubleValue()); - long processingCount = totalNegativeList.stream() .filter(item -> ProcessingStatusEnum.processing.name().equals(item.getProcessingStatus())) .count(); + long completedCount = totalNegativeList.stream() .filter(item -> ProcessingStatusEnum.completed.name().equals(item.getProcessingStatus())) .count(); - - DayTimeSuperviseVo overview = new DayTimeSuperviseVo(); - overview.setProTotal(totalNegativeList.size()); - overview.setProcessingNumber(processingCount); - overview.setCompletedNumber(completedCount); + DayTimeSuperviseVo overView = new DayTimeSuperviseVo(); + overView.setProTotal(totalNegativeList.size()); + overView.setProcessingNumber(processingCount); + overView.setCompletedNumber(completedCount); double completedRate = totalNegativeList.isEmpty() ? 0D : BigDecimal.valueOf(completedCount) .multiply(BigDecimal.valueOf(100)) .divide(BigDecimal.valueOf(totalNegativeList.size()), 2, RoundingMode.HALF_UP) .doubleValue(); - overview.setCompletedRate(completedRate); + overView.setCompletedRate(completedRate); JSONObject data = new JSONObject() - .fluentPut("overview",overview) - .fluentPut("fxsjYellowBetOverview", fxsjYellowBetOverview) - .fluentPut("jsdwYellowBetOverview", jsdwYellowBetOverview) + .fluentPut("overview",overView) .fluentPut("fxsjYellowBetRankList", fxsjYellowBetRankList) .fluentPut("jsdwYellowBetRankList", jsdwYellowBetRankList); return Result.success(data); @@ -1374,6 +1301,67 @@ public class SubDatavServiceImpl implements SubDatavService { .divide(WAN, 2, RoundingMode.HALF_UP); } + + public Result mockData() { + List fxsj = new ArrayList<>(); + List jsdw = new ArrayList<>(); + + fxsj.add(build("城东派出所", "pcs_001", 15, 20, 8, 12)); + fxsj.add(build("城西派出所", "pcs_002", 10, 18, 6, 12)); + fxsj.add(build("开发区派出所", "pcs_003", 20, 30, 10, 20)); + + jsdw.add(build("刑侦大队", "team_001", 12, 15, 7, 8)); + jsdw.add(build("治安大队", "team_002", 8, 12, 5, 7)); + jsdw.add(build("网安大队", "team_003", 10, 25, 12, 13)); + + long total = Stream.concat(fxsj.stream(), jsdw.stream()) + .mapToLong(vo -> Long.parseLong(vo.getDenominator())) + .sum(); + + long completed = Stream.concat(fxsj.stream(), jsdw.stream()) + .mapToLong(vo -> Long.parseLong(vo.getNumerator())) + .sum(); + + long processing = total - completed; + + double rate = total == 0 ? 0.0 : + BigDecimal.valueOf(completed) + .multiply(BigDecimal.valueOf(100)) + .divide(BigDecimal.valueOf(total), 1, RoundingMode.HALF_UP) + .doubleValue(); + + DayTimeSuperviseVo overview = new DayTimeSuperviseVo(); + overview.setProTotal((int) total); + overview.setProcessingNumber(processing); + overview.setCompletedNumber(completed); + overview.setCompletedRate(rate); + + JSONObject data = new JSONObject() + .fluentPut("overview", overview) + .fluentPut("fxsjChangedRankList", fxsj) + .fluentPut("jsdwChangedRankList", jsdw); + + return Result.success(data); + } + + private RankVo build(String name, String id, int completed, int total, int city, int county) { + RankVo vo = new RankVo(); + vo.setLabel(name); + vo.setDepartId(id); + vo.setNumerator(String.valueOf(completed)); + vo.setDenominator(String.valueOf(total)); + vo.setCityNumber(String.valueOf(city)); + vo.setCountyNumber(String.valueOf(county)); + + String rate = BigDecimal.valueOf(completed) + .multiply(BigDecimal.valueOf(100)) + .divide(BigDecimal.valueOf(total), 1, RoundingMode.HALF_UP) + .toString(); + + vo.setRate(rate); + vo.setValue(rate); + return vo; + } // endregion