From b8476c155492c762d26ed4810fb3afab2c70e6a3 Mon Sep 17 00:00:00 2001 From: buaixuexideshitongxue <2936013465@qq.com> Date: Fri, 20 Mar 2026 11:39:47 +0800 Subject: [PATCH] =?UTF-8?q?feat--=E7=8E=B0=E5=9C=BA=E4=B8=93=E9=A1=B9?= =?UTF-8?q?=E4=BA=8C=E7=BA=A7=E5=AD=90=E5=B1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SubOneSupervisionNotifyController.java | 289 ++----------- .../request/subdatav/SubDataVRequest.java | 6 + .../service/subDatav/SubDatavService.java | 18 + .../service/subDatav/SubDatavServiceImpl.java | 394 +++++++++++++++++- 4 files changed, 430 insertions(+), 277 deletions(-) diff --git a/src/main/java/com/biutag/supervision/controller/subdatav/SubOneSupervisionNotifyController.java b/src/main/java/com/biutag/supervision/controller/subdatav/SubOneSupervisionNotifyController.java index 2d004ff..96b0f37 100644 --- a/src/main/java/com/biutag/supervision/controller/subdatav/SubOneSupervisionNotifyController.java +++ b/src/main/java/com/biutag/supervision/controller/subdatav/SubOneSupervisionNotifyController.java @@ -1,113 +1,49 @@ package com.biutag.supervision.controller.subdatav; -import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.ArrayUtil; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.biutag.supervision.constants.enums.InspectCaseEnum; -import com.biutag.supervision.constants.enums.ProblemSourcesEnum; -import com.biutag.supervision.constants.enums.ProcessingStatusEnum; -import com.biutag.supervision.mapper.CountyStreetDeptMapper; import com.biutag.supervision.mapper.NegativeMapper; import com.biutag.supervision.pojo.Result; -import com.biutag.supervision.pojo.entity.*; -import com.biutag.supervision.pojo.vo.*; -import com.biutag.supervision.service.*; -import com.biutag.supervision.util.CompletableUtils.CompletableFutureUtil; +import com.biutag.supervision.pojo.entity.News; +import com.biutag.supervision.pojo.request.subdatav.SubDataVRequest; +import com.biutag.supervision.pojo.vo.EchartsVo; +import com.biutag.supervision.service.NewsService; +import com.biutag.supervision.service.SubOneSupervisionNotifyService; +import com.biutag.supervision.service.subDatav.SubDatavService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.format.annotation.DateTimeFormat; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.concurrent.CompletableFuture; import static com.biutag.supervision.constants.WorkDynamicConstants.DCGZDT; import static com.biutag.supervision.constants.enums.ProblemSourcesEnum.*; - /** - * @Auther: sh - * @Date: 2024/12/17 10:58 - * @Description: 二级大屏现场督察 + * 二级大屏现场专项 */ @Slf4j @RestController @RequiredArgsConstructor @RequestMapping("datav/sub1/supervisonNotify") -@Tag(name = "现场督察二级大屏", description = "现场督察二级大屏") +@Tag(name = "现场专项二级大屏", description = "现场专项二级大屏") public class SubOneSupervisionNotifyController { - private final SubOneSupervisionNotifyService subOneSupervisionNotifyService; - private final NegativeMapper negativeMapper; private final NewsService newsService; - private final NegativeBlameService negativeBlameService; - private final CountyStreetDeptMapper countyStreetDeptMapper; - private final SuperviseReportService superviseReportService; - private final SupDepartService departService; -// region 左边 - - /** - * 获取日常督察情况 - * - * @param departId 部门id (分县市局ID) - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return - */ - @Operation(summary = "日常督察情况") - @GetMapping("/getSubOneChangedRank") - public Result getSubOneChangedRank(@RequestParam Integer departId, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { - DayTimeSuperviseVo policeRankOverview = negativeMapper.getPoliceRankOverview(departId, beginTime, endTime); - DayTimeSuperviseVo teamRankOverview = negativeMapper.getTeamRankOverview(departId, beginTime, endTime); - - List policeChangedRankList = negativeMapper.getPoliceChangedRankList(departId, beginTime, endTime); - List teamChangedRankList = negativeMapper.getTeamChangedRankList(departId, beginTime, endTime); - - DayTimeSuperviseVo vo = negativeMapper.selectRankOverview(departId,beginTime,endTime); - if(vo.getProTotal() == null || vo.getProTotal() == 0 || vo.getChanged() == 0){ - vo.setCorrectionRate(0.0); - }else{ - BigDecimal result = new BigDecimal(vo.getChanged() * 100) - .divide(new BigDecimal(vo.getProTotal()), 1, RoundingMode.HALF_UP); - vo.setCorrectionRate(result.doubleValue()); - } - + private final SubDatavService subDatavService; + private final NegativeMapper negativeMapper; - JSONObject data = new JSONObject() - .fluentPut("overview",vo) - .fluentPut("fxsjRankOverview", policeRankOverview) - .fluentPut("jsdwRankOverview", teamRankOverview) - .fluentPut("fxsjChangedRankList", policeChangedRankList) - .fluentPut("jsdwChangedRankList", teamChangedRankList); - return Result.success(data); + @Operation(summary = "现场督察卡片") + @PostMapping("/getSubOneChangedRank") + public Result getSubOneChangedRank(@RequestBody SubDataVRequest request) { + return subDatavService.getSubOneChangedRank(request); } - public Long isZero(Long val){ - return val != null?val:0L; - } - /** - * 问题类型占比 - * - * @param departId 部门id (分县市局ID) - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return - */ - @Operation(summary = "问题类型占比") + @Operation(summary = "问题涉及方面分布") @GetMapping("/getSubOneProblemTypeRate") public Result getSubOneProblemTypeRate(@RequestParam Integer departId, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @@ -117,144 +53,19 @@ public class SubOneSupervisionNotifyController { return Result.success(data); } -// endregion - -// region 中间 - - /** - * 大屏中央总览数据 - * - * @param departId 部门id (分县市局ID) - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return - */ - @Operation(summary = "中央总览数据") - @GetMapping("/getSubOneSupervisionNotifyCount") - public Result getAllSubOneSupervisionNotifyCount(@RequestParam Integer departId, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { - endTime = DateUtil.endOfDay(endTime); - //, ProblemSourcesEnum.SPDC.getValue() 去除视频督察 - //获取时间范围内 属于对应二级单位的数据 - List negatives = negativeMapper.selectList(new LambdaQueryWrapper().between(Negative::getCrtTime, beginTime, endTime) - .eq(Negative::getSecondInvolveDepartId,departId) - .in(Negative::getProblemSourcesCode, List.of(ProblemSourcesEnum.XCDC.getValue(), ProblemSourcesEnum.LMGZ.getValue(), ProblemSourcesEnum.ZXDC.getValue()))); - SupervisionNotifyOverView overView = new SupervisionNotifyOverView(); - //属实的 - List negativeIds = negatives.stream().filter(item -> InspectCaseEnum.isItTure(item.getCheckStatus())).map(Negative::getId).toList(); - overView.setProblemNumber(negatives.size()); - //已办结的 - overView.setCompletedNumber(negatives.stream().filter(item -> ProcessingStatusEnum.completed.name().equals(item.getProcessingStatus())).count()); - //办理中 - overView.setProcessingNumber(negatives.size() - overView.getCompletedNumber()); - //问题期数 - Long problemQuarter = superviseReportService.count(new LambdaQueryWrapper() - .eq(SuperviseReport::getCrtDepartId,departId) - .between(SuperviseReport::getCrtTime,beginTime,endTime)); - overView.setProblemQuarter(problemQuarter); - LambdaQueryWrapper queryWrapper=new LambdaQueryWrapper<>(); - List orgIds = departService.getAllNodeIds(String.valueOf(departId)); - queryWrapper.in(SuperviseReport::getCrtDepartId, orgIds); - overView.setReportNumber(superviseReportService.count(queryWrapper)); - // 办结率 -// overView.setCompletedRate(overView.getProblemNumber() == 0 ? 0: NumberUtil.roundHalfEven(NumberUtil.mul(NumberUtil.div(overView.getCompletedNumber(), overView.getProblemNumber()), 100), 0).doubleValue()); - CompletableFuture.allOf( - CompletableFutureUtil.runSyncObject(() -> { - //问责人数 - long personNumber = negativeIds.isEmpty() ? 0 : negativeBlameService.count(new LambdaQueryWrapper().in(NegativeBlame::getNegativeId, negativeIds) - .eq(NegativeBlame::getType, "personal") - .ne(NegativeBlame::getHandleResultName, "不予追责") - .isNotNull(NegativeBlame::getHandleResultName) - .ne(NegativeBlame::getHandleResultName, "")); - overView.setPersonNumber(personNumber); - }), - CompletableFutureUtil.runSyncObject(() -> { - //问责单位 - long departNumber = negativeIds.isEmpty() ? 0 : negativeBlameService.count(new LambdaQueryWrapper().in(NegativeBlame::getNegativeId, negativeIds) - .eq(NegativeBlame::getType, "department") - .ne(NegativeBlame::getHandleResultName, "不予追责") - .isNotNull(NegativeBlame::getHandleResultName) - .ne(NegativeBlame::getHandleResultName, "")); - overView.setDepartNumber(departNumber); - }) - ).join(); - JSONObject data = new JSONObject().fluentPut("overview", overView); - return Result.success(data); + @Operation(summary = "现场专项中心总览数据") + @PostMapping("/getSubOneSupervisionNotifyCount") + public Result getAllSubOneSupervisionNotifyCount(@RequestBody SubDataVRequest request) { + return subDatavService.getAllSubOneSupervisionNotifyCount(request); } - /** - * 地图小卡片 - * - * @param departId 部门id (分县市局ID) - * @param beginTime 开始时间 - * @param endTime 结束时间 - */ - @Operation(summary = "地图小卡片") - @GetMapping("/getSubOneSupervisionMap") - public Result getSubOneSupervisionMap(@RequestParam Integer departId, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { - - List streetDepts = countyStreetDeptMapper.selectList(new LambdaQueryWrapper().eq(CountyStreetDept::getDeptPid,departId)); - List overViews = new ArrayList<>(); - if(ArrayUtil.isNotEmpty(streetDepts)){ - streetDepts.forEach(s->{ - SuperviseMapIconVo superviseMapIconVo =new SuperviseMapIconVo(); - superviseMapIconVo.setName(s.getName()); - superviseMapIconVo.setDepartId(s.getDeptId()); - List negatives = negativeMapper.selectList(new LambdaQueryWrapper().between(Negative::getCrtTime, beginTime, endTime) - .eq(Negative::getThreeInvolveDepartId,s.getDeptId()) - .in(Negative::getProblemSourcesCode, List.of(ProblemSourcesEnum.XCDC.getValue(), ProblemSourcesEnum.LMGZ.getValue(), ProblemSourcesEnum.ZXDC.getValue()))); - if(!negatives.isEmpty()){ - List negativeIds = negatives.stream().filter(item -> InspectCaseEnum.isItTure(item.getCheckStatus())).map(Negative::getId).toList(); - // 办结率 -// superviseMapIconVo.setCompletedRate(superviseMapIconVo.getProblemNumber() == 0 ? 0: NumberUtil.roundHalfEven(NumberUtil.mul(NumberUtil.div(superviseMapIconVo.getCompletedNumber(), superviseMapIconVo.getProblemNumber()), 100), 0).doubleValue()); - //问责人数 、问责单位数 - CompletableFuture.allOf( - CompletableFutureUtil.runSyncObject(()->{ - superviseMapIconVo.setTotalPro(negatives.size()); - //已办理 - superviseMapIconVo.setCompletedNumber((int) negatives.stream().filter(item ->ProcessingStatusEnum.completed.name().equals(item.getProcessingStatus())).count()); - //办理中 - superviseMapIconVo.setProcessingNumber(negatives.size() - superviseMapIconVo.getCompletedNumber()); - }), - CompletableFutureUtil.runSyncObject(() -> { - //问责人数 - long personNumber = negativeIds.isEmpty() ? 0 : negativeBlameService.count(new LambdaQueryWrapper().in(NegativeBlame::getNegativeId, negativeIds) - .eq(NegativeBlame::getType, "personal") - .ne(NegativeBlame::getHandleResultName, "不予追责") - .isNotNull(NegativeBlame::getHandleResultName) - .ne(NegativeBlame::getHandleResultName, "")); - superviseMapIconVo.setPersonNum(String.valueOf(personNumber)); - }), - CompletableFutureUtil.runSyncObject(() -> { - //问责单位 - long departNumber = negativeIds.isEmpty() ? 0 : negativeBlameService.count(new LambdaQueryWrapper().in(NegativeBlame::getNegativeId, negativeIds) - .eq(NegativeBlame::getType, "department") - .ne(NegativeBlame::getHandleResultName, "不予追责") - .isNotNull(NegativeBlame::getHandleResultName) - .ne(NegativeBlame::getHandleResultName, "")); - superviseMapIconVo.setRelationOrg(String.valueOf(departNumber)); - }) - ).join(); - overViews.add(superviseMapIconVo); - } - }); - } - JSONObject data = new JSONObject().fluentPut("superviseTempMapVoList", overViews); - return Result.success(data); + @Operation(summary = "现场专项二级地图") + @PostMapping("/getSubOneSupervisionNotifyMap") + public Result getSubOneSupervisionNotifyMap(@RequestBody SubDataVRequest request) { + return subDatavService.getSubOneSupervisionNotifyMap(request); } - - /** - * 获取现场督察问题趋势 - * - * @param departId 部门id (分县市局ID) - * @param year 年份 - * @return List - */ @Operation(summary = "问题趋势") @GetMapping("/getSubOneSupervisionTrend") public Result getSubOneSupervisionTrend(@RequestParam Integer departId, @@ -264,51 +75,13 @@ public class SubOneSupervisionNotifyController { return Result.success(data); } -// endregion - -// region 右边 - - /** - * 黄赌毒数据 - * - * @param departId 部门id (分县市局ID) - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return JSONObject - */ @Operation(summary = "黄赌毒数据") - @GetMapping("/getSubOneYellowBetDrug") - public Result getYellowBetDrug(@RequestParam Integer departId, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime,@RequestParam Integer type) { - // 黄赌毒总览 - DayTimeSuperviseVo fxsjYellowBetOverview = negativeMapper.getSubOnePoliceYellowBetOverview(beginTime, endTime, departId, type); - DayTimeSuperviseVo jsdwYellowBetOverview = negativeMapper.getSubOneTeamYellowBetOverview(beginTime, endTime, departId, type); - // 黄毒赌列表 - List fxsjYellowBetRankList = negativeMapper.getSubOnePoliceYellowBetRankList(beginTime, endTime, departId, type); - List jsdwYellowBetRankList = negativeMapper.getSubOneTeamYellowBetRankList(beginTime, endTime, departId, type); - DayTimeSuperviseVo overview = new DayTimeSuperviseVo().addVO(fxsjYellowBetOverview,jsdwYellowBetOverview); - - JSONObject data = new JSONObject() - .fluentPut("overview",overview) - .fluentPut("fxsjYellowBetOverview", fxsjYellowBetOverview) - .fluentPut("jsdwYellowBetOverview", jsdwYellowBetOverview) - .fluentPut("fxsjYellowBetRankList", fxsjYellowBetRankList) - .fluentPut("jsdwYellowBetRankList", jsdwYellowBetRankList); - return Result.success(data); + @PostMapping("/getSubOneYellowBetDrug") + public Result getSubOneYellowBetDrug(@RequestBody SubDataVRequest request) { + return subDatavService.getSubOneYellowBetDrug(request); } - - - /** - * 督察工作动态 - * - * @param departId 部门id (分县市局ID) - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return JSONObject - */ - @Operation(summary = "督察工作动态") + @Operation(summary = "现场专项工作动态") @GetMapping("/getSubOneWorkDynamics") public Result> getSubOneWorkDynamics(@RequestParam Integer departId, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @@ -316,10 +89,4 @@ public class SubOneSupervisionNotifyController { List newsList = newsService.getWorkDynamics(beginTime, endTime, DCGZDT, departId.toString()); return Result.success(newsList); } - -// endregion - - } - - diff --git a/src/main/java/com/biutag/supervision/pojo/request/subdatav/SubDataVRequest.java b/src/main/java/com/biutag/supervision/pojo/request/subdatav/SubDataVRequest.java index 1ba716b..c13621e 100644 --- a/src/main/java/com/biutag/supervision/pojo/request/subdatav/SubDataVRequest.java +++ b/src/main/java/com/biutag/supervision/pojo/request/subdatav/SubDataVRequest.java @@ -31,6 +31,12 @@ public class SubDataVRequest implements ParamChecked { @Schema(description = "部门Id") private String departId; + @Schema(description = "专项督察类型") + private String specialSupervision; + + @Schema(description = "审计类型") + private String auditType; + @Override public void check() { if (Objects.isNull(beginTime) || Objects.isNull(endTime)){ diff --git a/src/main/java/com/biutag/supervision/service/subDatav/SubDatavService.java b/src/main/java/com/biutag/supervision/service/subDatav/SubDatavService.java index 55ac6f5..cd8edad 100644 --- a/src/main/java/com/biutag/supervision/service/subDatav/SubDatavService.java +++ b/src/main/java/com/biutag/supervision/service/subDatav/SubDatavService.java @@ -50,6 +50,7 @@ public interface SubDatavService { */ Result getSubOneVideoSuperviseMap(SubDataVRequest request); + /** * 维权抚慰 二级大屏 维权案件情况 * @param request @@ -116,4 +117,21 @@ public interface SubDatavService { // 案件来源占比 & 问责处理情况 Result getSubOneCaseSourceRateAndDealSituation(SubDataVRequest request); + + /** + * 现场专项二级现场督察卡片 + * @param request + * @return + */ + Result getSubOneChangedRank(SubDataVRequest request); + + + // 现场专项地图 + Result getSubOneSupervisionNotifyMap(SubDataVRequest request); + + // 现场专项中心总览数据 + Result getAllSubOneSupervisionNotifyCount(SubDataVRequest request); + + // 黄赌毒数据 + Result getSubOneYellowBetDrug(SubDataVRequest request); } 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 bff568c..be2eed7 100644 --- a/src/main/java/com/biutag/supervision/service/subDatav/SubDatavServiceImpl.java +++ b/src/main/java/com/biutag/supervision/service/subDatav/SubDatavServiceImpl.java @@ -73,23 +73,9 @@ public class SubDatavServiceImpl implements SubDatavService { @Resource private SupExternalDepartResourceService supExternalDepartResourceService; - @Resource - private DataCaseVerifResourceService dataCaseVerifResourceService; - - @Resource - private SupPoliceService supPoliceService; - - @Resource - private DataAuditResourceService dataAuditResourceService; - - @Resource - private NegativeService negativeService; - @Resource private RpcApplyMapper rpcApplyMapper; - @Resource - private RpcComfortPacksMapper rpcComfortPacksMapper; @Resource private DataPetitionComplaintMapper dataPetitionComplaintMapper; @@ -114,8 +100,6 @@ public class SubDatavServiceImpl implements SubDatavService { @Resource private NegativeMapper negativeMapper; - @Resource - private SuperviseReportService superviseReportService; @Resource private NegativeBlameResourceService negativeBlameResourceService; @@ -429,6 +413,384 @@ public class SubDatavServiceImpl implements SubDatavService { } // endregion + // region 现场专项二级 + // 现场督察卡片 + public Result getSubOneChangedRank(SubDataVRequest request) { + List level3ByPidSupDepartList = supDepartResourceService.getLevel3ByPidSupDepartList(request.getDepartId()); + List policeDeparts = level3ByPidSupDepartList.stream() + .filter(one -> StrUtil.isNotBlank(one.getStatisticsGroupId())) + .filter(one -> DepartGroupEnum.PCS.getId().equals(Integer.valueOf(one.getStatisticsGroupId()))) + .toList(); + List teamDeparts = level3ByPidSupDepartList.stream() + .filter(one -> { + String groupId = one.getStatisticsGroupId(); + return !StrUtil.isNotBlank(groupId) || !DepartGroupEnum.PCS.getId().equals(Integer.valueOf(groupId)); + }) + .toList(); + + 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()); + int totalPro = negativeList.size(); + if (totalPro == 0) { + continue; + } + 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()); + rankVo.setCityNumber(String.valueOf(sjxf)); + rankVo.setCountyNumber(String.valueOf(xjxf)); + rankVo.setNumerator(String.valueOf(completed)); + rankVo.setDenominator(String.valueOf(totalPro)); + rankVo.setValue(rate); + rankVo.setRate(rate); + fxsjChangedRankList.add(rankVo); + allRankList.add(rankVo); + } + + for (SupDepart dw : teamDeparts) { + List negativeList = negativeMapper.getChangedRank(dw.getId(), request.getBeginTime(), request.getEndTime()); + int totalPro = negativeList.size(); + if (totalPro == 0) { + continue; + } + 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(dw.getShortName()); + rankVo.setDepartId(dw.getId()); + rankVo.setCityNumber(String.valueOf(sjxf)); + rankVo.setCountyNumber(String.valueOf(xjxf)); + rankVo.setNumerator(String.valueOf(completed)); + rankVo.setDenominator(String.valueOf(totalPro)); + 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 = policeTotal + teamTotal; + long completed = policeCompleted + teamCompleted; + long processing = policeProcessing + teamProcessing; + 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); + } + + // 现场专项地图 + @Override + public Result getSubOneSupervisionNotifyMap(SubDataVRequest request) { + List superviseTempMapVoList = new ArrayList<>(); + List policeDeparts = supDepartMapper.selectPoliceDeparts(Integer.valueOf(request.getDepartId())); + List proCode = List.of(XCDC.getValue(), LMGZ.getValue(), ZXDC.getValue()); + + for (SupDepart supDepart : policeDeparts) { + List negatives = negativeMapper.getNegativeListData(supDepart.getId(), request.getBeginTime(), request.getEndTime(), proCode); + if (negatives.isEmpty()) { + continue; + } + + List completedList = negatives.stream().filter(item -> ProcessingStatusEnum.completed.name().equals(item.getProcessingStatus())).toList(); + List processingList = negatives.stream().filter(item -> ProcessingStatusEnum.processing.name().equals(item.getProcessingStatus())).toList(); + List negativeIds = negatives.stream() + .filter(item -> InspectCaseEnum.isItTure(item.getCheckStatus())) + .map(Negative::getId) + .toList(); + + long personNumber = negativeIds.isEmpty() ? 0 : negativeBlameService.count(new LambdaQueryWrapper() + .in(NegativeBlame::getNegativeId, negativeIds) + .eq(NegativeBlame::getType, "personal") + .ne(NegativeBlame::getHandleResultName, "涓嶄簣杩借矗") + .isNotNull(NegativeBlame::getHandleResultName) + .ne(NegativeBlame::getHandleResultName, "")); + long departNumber = negativeIds.isEmpty() ? 0 : negativeBlameService.count(new LambdaQueryWrapper() + .in(NegativeBlame::getNegativeId, negativeIds) + .eq(NegativeBlame::getType, "department") + .ne(NegativeBlame::getHandleResultName, "涓嶄簣杩借矗") + .isNotNull(NegativeBlame::getHandleResultName) + .ne(NegativeBlame::getHandleResultName, "")); + + SuperviseMapIconVo superviseMapIconVo = new SuperviseMapIconVo(); + superviseMapIconVo.setName(supDepart.getShortName()); + superviseMapIconVo.setDepartId(supDepart.getId()); + superviseMapIconVo.setTotalPro(negatives.size()); + superviseMapIconVo.setCompletedNumber(completedList.size()); + superviseMapIconVo.setProcessingNumber(processingList.size()); + superviseMapIconVo.setPersonNum(String.valueOf(personNumber)); + superviseMapIconVo.setRelationOrg(String.valueOf(departNumber)); + superviseTempMapVoList.add(superviseMapIconVo); + } + + JSONObject data = new JSONObject().fluentPut("superviseTempMapVoList", superviseTempMapVoList); + return Result.success(data); + } + + @Override + public Result getAllSubOneSupervisionNotifyCount(SubDataVRequest request) { + SupervisionNotifyOverView overView = new SupervisionNotifyOverView(); + List policeDeparts = supDepartMapper.selectPoliceDeparts(Integer.valueOf(request.getDepartId())); + List proCode = List.of(XCDC.getValue(), LMGZ.getValue(), ZXDC.getValue()); + + long problemNumber = 0L; + long processingNumber = 0L; + long completedNumber = 0L; + long reportNumber = 0L; + long departNumber = 0L; + long personNumber = 0L; + + for (SupDepart supDepart : policeDeparts) { + List negatives = negativeMapper.getNegativeListData(supDepart.getId(), request.getBeginTime(), request.getEndTime(), proCode); + if (CollectionUtil.isEmpty(negatives)) { + continue; + } + + List completedList = negatives.stream() + .filter(item -> ProcessingStatusEnum.completed.name().equals(item.getProcessingStatus())) + .toList(); + List processingList = negatives.stream() + .filter(item -> ProcessingStatusEnum.processing.name().equals(item.getProcessingStatus())) + .toList(); + List negativeIds = negatives.stream() + .filter(item -> CheckStatusEnum.TRUE_SET.contains(item.getCheckStatusCode()) + || CheckStatusEnum.PART_TRUE_SET.contains(item.getCheckStatusCode())) + .map(Negative::getId) + .toList(); + + List negativeBlames = Collections.emptyList(); + if (!negativeIds.isEmpty()) { + NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); + negativeBlameQueryParam.setNegativeIds(negativeIds); + negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam); + } + + List personalBlames = negativeBlames.stream() + .filter(one -> BlameType.personal.name().equals(one.getType())) + .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) + .filter(one -> !"不予追责".equals(one.getHandleResultName())) + .toList(); + + Set seenLead = new HashSet<>(); + List leadBlames = negativeBlames.stream() + .filter(one -> BlameType.personal.name().equals(one.getType())) + .filter(one -> StrUtil.isNotBlank(one.getLeadHandleResultName())) + .filter(one -> !"不予追责".equals(one.getLeadHandleResultName())) + .filter(one -> seenLead.add( + one.getNegativeId() + "_" + one.getLeadHandleResultName() + "_" + one.getLeadName() + )) + .toList(); + + List unitBlames = negativeBlames.stream() + .filter(one -> BlameType.department.name().equals(one.getType())) + .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) + .filter(one -> !"不予追责".equals(one.getHandleResultName())) + .toList(); + + problemNumber += negatives.size(); + processingNumber += processingList.size(); + completedNumber += completedList.size(); + reportNumber += 0L; + departNumber += unitBlames.size(); + personNumber += personalBlames.size() + leadBlames.size(); + } + + overView.setProblemNumber(Math.toIntExact(problemNumber)); + overView.setProcessingNumber(processingNumber); + overView.setCompletedNumber(completedNumber); + overView.setReportNumber(reportNumber); + overView.setDepartNumber(departNumber); + overView.setPersonNumber(personNumber); + return Result.success(new JSONObject().fluentPut("overview", overView)); + } + + @Override + public Result getSubOneYellowBetDrug(SubDataVRequest request) { + List fxsjYellowBetRankList = new ArrayList<>(); + List jsdwYellowBetRankList = new ArrayList<>(); + List level3ByPidSupDepartList = supDepartResourceService.getLevel3ByPidSupDepartList(request.getDepartId()); + List policeDeparts = level3ByPidSupDepartList.stream() + .filter(one -> StrUtil.isNotBlank(one.getStatisticsGroupId())) + .filter(one -> DepartGroupEnum.PCS.getId().equals(Integer.valueOf(one.getStatisticsGroupId()))) + .toList(); + List teamDeparts = level3ByPidSupDepartList.stream() + .filter(one -> { + String groupId = one.getStatisticsGroupId(); + return !StrUtil.isNotBlank(groupId) || !DepartGroupEnum.PCS.getId().equals(Integer.valueOf(groupId)); + }) + .toList(); + + Map totalNegativeMap = new LinkedHashMap<>(); + for (SupDepart pcs : policeDeparts) { + List negativeList = negativeMapper.getYellowBetNegativeList(pcs.getId(), request.getBeginTime(), request.getEndTime(), request.getSpecialSupervision()); + if (CollectionUtil.isEmpty(negativeList)) { + continue; + } + for (Negative negative : negativeList) { + totalNegativeMap.put(negative.getId(), negative); + } + OrganizeProblemRankVo organizeProblemRankVo = new OrganizeProblemRankVo(); + organizeProblemRankVo.setLabel(pcs.getShortName()); + organizeProblemRankVo.setValue(String.valueOf(negativeList.size())); + fxsjYellowBetRankList.add(organizeProblemRankVo); + } + + for (SupDepart dw : teamDeparts) { + List negativeList = negativeMapper.getYellowBetNegativeList(dw.getId(), request.getBeginTime(), request.getEndTime(), request.getSpecialSupervision()); + if (CollectionUtil.isEmpty(negativeList)) { + continue; + } + for (Negative negative : negativeList) { + totalNegativeMap.put(negative.getId(), negative); + } + OrganizeProblemRankVo organizeProblemRankVo = new OrganizeProblemRankVo(); + organizeProblemRankVo.setLabel(dw.getShortName()); + organizeProblemRankVo.setValue(String.valueOf(negativeList.size())); + jsdwYellowBetRankList.add(organizeProblemRankVo); + } + + 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); + 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); + + JSONObject data = new JSONObject() + .fluentPut("overview",overview) + .fluentPut("fxsjYellowBetOverview", fxsjYellowBetOverview) + .fluentPut("jsdwYellowBetOverview", jsdwYellowBetOverview) + .fluentPut("fxsjYellowBetRankList", fxsjYellowBetRankList) + .fluentPut("jsdwYellowBetRankList", jsdwYellowBetRankList); + return Result.success(data); + } + + + // endregion + // region 案件核查二级 // 排名 @Override