From 38ed972baf5a7098f250d47d111c3809456e79ff Mon Sep 17 00:00:00 2001 From: buaixuexideshitongxue <2936013465@qq.com> Date: Tue, 17 Mar 2026 11:44:01 +0800 Subject: [PATCH] =?UTF-8?q?fix--=E8=A7=86=E9=A2=91=E7=9D=A3=E5=AF=9F?= =?UTF-8?q?=E5=A4=A7=E5=B1=8F=E6=8E=A5=E5=8F=A3sql=E6=94=B9=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constants/enums/DepartGroupEnum.java | 3 +- .../datav/DataVGlobalController.java | 67 --- .../DataVSupervisionNotifyController.java | 73 +-- .../datav/DataVVideoSuperviseController.java | 103 +--- .../SubOneVideoSuperviseController.java | 110 +--- .../supervision/mapper/NegativeMapper.java | 14 +- .../pojo/request/datav/DataVRequest.java | 3 + .../pojo/vo/VideoSuperviseCountVo.java | 10 + .../service/datav/DatavService.java | 43 ++ .../service/datav/DatavServiceImpl.java | 492 +++++++++++++++--- 10 files changed, 527 insertions(+), 391 deletions(-) diff --git a/src/main/java/com/biutag/supervision/constants/enums/DepartGroupEnum.java b/src/main/java/com/biutag/supervision/constants/enums/DepartGroupEnum.java index 160743f..b8a72e8 100644 --- a/src/main/java/com/biutag/supervision/constants/enums/DepartGroupEnum.java +++ b/src/main/java/com/biutag/supervision/constants/enums/DepartGroupEnum.java @@ -12,7 +12,8 @@ import lombok.Getter; public enum DepartGroupEnum { COUNTY_CITY_BUREAUS(3, "分县市局"), - BUREAU_AFFILIATED(4, "局属单位"); + BUREAU_AFFILIATED(4, "局属单位"), + PCS(12, "派出所"); private Integer id; diff --git a/src/main/java/com/biutag/supervision/controller/datav/DataVGlobalController.java b/src/main/java/com/biutag/supervision/controller/datav/DataVGlobalController.java index 02c95c6..0420208 100644 --- a/src/main/java/com/biutag/supervision/controller/datav/DataVGlobalController.java +++ b/src/main/java/com/biutag/supervision/controller/datav/DataVGlobalController.java @@ -113,33 +113,6 @@ public class DataVGlobalController { //region 中间 - /** - * 获取首页大屏中央数据 - * - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return Result - */ - @Operation(summary = "大屏中央数据") - @GetMapping("/getAllGlobalCount") - public Result getAllGlobalCount(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { - endTime = DateUtil.endOfDay(endTime); - // 获取数据大屏中央总数概览 - GlobalOverViewVo overview = negativeMapper.getAllGlobalCount(beginTime, endTime); - long caseVerificationPro =dataCaseVerifMapper.selectCount(new LambdaQueryWrapper().between(DataCaseVerif::getCreateTime,beginTime,endTime)); - overview.setCaseVerificationPro(caseVerificationPro); - MailOverviewVo vo = dataMailService.mailCount(beginTime, endTime); - // 局长信箱 -// long mailboxNumber = negativeService.count(new LambdaQueryWrapper().between(Negative::getCrtTime, beginTime, endTime).eq(Negative::getProblemSourcesCode, ProblemSourcesEnum.JZXX.getValue())); - long mailboxNumber = mailMapper.selectMailDataCount(beginTime,endTime); - overview.setMailboxNumber(mailboxNumber); - - overview.setComplaintPro(vo.getCountryMail() + vo.getPoliceMail() + vo.getNumberMail()); - JSONObject data = new JSONObject().fluentPut("overview", overview); - return Result.success(data); - } - /** * 获取首页大屏中央数据 * @@ -152,46 +125,6 @@ public class DataVGlobalController { return datavService.getAllGlobalCount(request); } - /** - * 地图数据 - * - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return Result - * 弃用 请看 {@link #getGlobalMap(DataVRequest)} - */ - @Operation(summary = "首页大屏地图Icon数据") - @Deprecated - @GetMapping("/getGlobalMap") -// @Cacheable(cacheNames = "Supervision:Screen:GlobalMap", key = "#beginTime.getTime()+'_'+#endTime.getTime()") - public Result getGlobalMap(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { - Date bigEndTime = DateUtil.endOfDay(endTime); - // 地图数据 - List mapIconVos = new ArrayList<>(); - List list = supDepartMapper.selectList(new LambdaQueryWrapper().eq(SupDepart::getStatisticsGroupId,"3")); - list.forEach((s)->{ - Integer departId =Integer.valueOf(s.getId()); - GlobalMapIconVo vos=new GlobalMapIconVo(); - GlobalOverViewVo overview = negativeMapper.getSuoOneAllGlobalCount(departId, beginTime, bigEndTime); - MailOverviewVo vo = dataMailService.mailCount(departId,beginTime, bigEndTime); - // 局长信箱 - long mailboxNumber = negativeService.count(new LambdaQueryWrapper() - .between(Negative::getCrtTime, beginTime, bigEndTime) - .eq(Negative::getProblemSourcesCode, ProblemSourcesEnum.JZXX.getValue()) - .eq(Negative::getSecondInvolveDepartId,departId) - ); - overview.setMailboxNumber(mailboxNumber); - - overview.setComplaintPro(vo.getCountryMail() + vo.getPoliceMail() + vo.getNumberMail()); - BeanUtil.copyProperties(overview,vos); - vos.setName(s.getShortName()); - vos.setDepartId(s.getId()); - mapIconVos.add(vos); - }); - JSONObject data = new JSONObject().fluentPut("globalTempMapVoList", mapIconVos); - return Result.success(data); - } @Operation(description = "首页大屏地图Icon数据") diff --git a/src/main/java/com/biutag/supervision/controller/datav/DataVSupervisionNotifyController.java b/src/main/java/com/biutag/supervision/controller/datav/DataVSupervisionNotifyController.java index 8bc4835..13d6a86 100644 --- a/src/main/java/com/biutag/supervision/controller/datav/DataVSupervisionNotifyController.java +++ b/src/main/java/com/biutag/supervision/controller/datav/DataVSupervisionNotifyController.java @@ -47,7 +47,7 @@ public class DataVSupervisionNotifyController { } - @Operation(summary = "问题类型占比") + @Operation(summary = "问题涉及方面分布") @GetMapping("/getProblemTypeRate") public Result getProblemTypeRate(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { @@ -73,41 +73,7 @@ public class DataVSupervisionNotifyController { - /** - * 地图小卡片 - * - * @param beginTime 开始时间 - * @param endTime 结束时间 - */ - @Operation(summary = "获取现场专项地图数据") - @GetMapping("/getSupervisionNotifyMap") - public Result getSupervisionNotifyMap(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { - endTime = DateUtil.endOfDay(endTime); - //地图数据 - List superviseTempMapVoList = negativeMapper.getSupervisionMapIconData(beginTime, endTime); - //数据补充 - Date finalEndTime = endTime; - superviseTempMapVoList.forEach(s->{ - String relationOrg =negativeMapper.getSupervisionMapStringData(beginTime, finalEndTime,"department",s.getDepartId()) ; - String personNum =negativeMapper.getSupervisionMapStringData(beginTime, finalEndTime,"personal",s.getDepartId()) ;; - // String completedRate = negativeMapper.getSupervisionMapCompletedRate(beginTime, finalEndTime,s.getDepartId()); -// double rate = s.getTotalPro() == 0 ? 0: NumberUtil.round((double) s.getCompletedNumber() / s.getTotalPro() * 100, 2).doubleValue(); -// s.setCompletedRate(String.valueOf(rate)); - s.setPersonNum(personNum); - s.setRelationOrg(relationOrg); - }); - JSONObject data = new JSONObject().fluentPut("superviseTempMapVoList", superviseTempMapVoList); - return Result.success(data); - } - - /** - * 获取现场督察问题趋势 - * - * @param year 年份 - * @return List - */ @Operation(summary = "问题趋势") @GetMapping("/getSupervisionTrend") public Result getSupervisionTrend(@RequestParam Integer year) { @@ -120,43 +86,12 @@ public class DataVSupervisionNotifyController { // region 右边 - /** - * 获取问题数 - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return JSONObject - */ @Operation(summary = "黄赌毒数据") - @GetMapping("/getYellowBetDrug") - public Result getYellowBetDrug(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, - String dictValue) { - endTime = DateUtil.endOfDay(endTime); - // 分县市局 - DayTimeSuperviseVo countyOverview = negativeMapper.getYellowBetOverview(beginTime, endTime, 3, dictValue); - List countyRankList = negativeMapper.getYellowBetRankList(beginTime, endTime, 3, dictValue); - // 局属单位 - DayTimeSuperviseVo bureauOverview = negativeMapper.getYellowBetOverview(beginTime, endTime, 4, dictValue); - List bureauRankList = negativeMapper.getYellowBetRankList(beginTime, endTime, 4, dictValue); - - DayTimeSuperviseVo overView = new DayTimeSuperviseVo().addVO(countyOverview,bureauOverview); - - JSONObject data = new JSONObject() - .fluentPut("overView",overView) - .fluentPut("countyOverview", countyOverview) - .fluentPut("countyRankList", countyRankList) - .fluentPut("bureauOverview", bureauOverview) - .fluentPut("bureauRankList", bureauRankList); - return Result.success(data); + @PostMapping("/getYellowBetDrug") + public Result getYellowBetDrug(@RequestBody DataVRequest request) { + return datavService.getYellowBetDrug(request); } - /** - * 督察工作动态 - * - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return JSONObject - */ @Operation(summary = "督察工作动态") @GetMapping("/getWorkDynamics") public Result> getWorkDynamics(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, diff --git a/src/main/java/com/biutag/supervision/controller/datav/DataVVideoSuperviseController.java b/src/main/java/com/biutag/supervision/controller/datav/DataVVideoSuperviseController.java index 9c70b57..acd0d85 100644 --- a/src/main/java/com/biutag/supervision/controller/datav/DataVVideoSuperviseController.java +++ b/src/main/java/com/biutag/supervision/controller/datav/DataVVideoSuperviseController.java @@ -2,25 +2,12 @@ package com.biutag.supervision.controller.datav; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.biutag.supervision.constants.enums.BlameType; -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.NegativeMapper; import com.biutag.supervision.mapper.WvpDeviceChannelMapper; import com.biutag.supervision.pojo.Result; -import com.biutag.supervision.pojo.entity.Negative; -import com.biutag.supervision.pojo.entity.NegativeBlame; -import com.biutag.supervision.pojo.entity.SupPolice; import com.biutag.supervision.pojo.entity.WvpDeviceChannel; import com.biutag.supervision.pojo.request.datav.DataVRequest; import com.biutag.supervision.pojo.vo.EchartsVo; -import com.biutag.supervision.pojo.vo.OrganizeProblemRankVo; -import com.biutag.supervision.pojo.vo.VideoSuperviseCountVo; -import com.biutag.supervision.pojo.vo.VideoSuperviseMapIconVo; -import com.biutag.supervision.service.NegativeBlameService; -import com.biutag.supervision.service.SupPoliceService; import com.biutag.supervision.service.datav.DatavService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; @@ -28,8 +15,8 @@ import lombok.RequiredArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; -import java.util.*; -import java.util.stream.Collectors; +import java.util.Date; +import java.util.List; import static com.biutag.supervision.constants.enums.ProblemSourcesEnum.SPDC; @@ -45,10 +32,7 @@ import static com.biutag.supervision.constants.enums.ProblemSourcesEnum.SPDC; public class DataVVideoSuperviseController { private final NegativeMapper negativeMapper; - private final NegativeBlameService blameService; private final WvpDeviceChannelMapper wvpDeviceChannelMapper; - - private final SupPoliceService policeService; private final DatavService datavService; @@ -89,88 +73,19 @@ public class DataVVideoSuperviseController { //endregion //region 中间 - - /** - * 获取视频督察中央数据 - * - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return Result - */ @Operation(summary = "中央数据") - @GetMapping("/getAllVideoSuperviseCount") - public Result getAllVideoSuperviseCount(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { - endTime = DateUtil.endOfDay(endTime); - // 获取视频督察中央数据 - // VideoSuperviseCountVo overview = negativeMapper.getAllVideoSuperviseCount(beginTime, endTime); - VideoSuperviseCountVo overview = new VideoSuperviseCountVo(); - List negatives = negativeMapper.selectList(new LambdaQueryWrapper().between(Negative::getCrtTime, beginTime, endTime) - .eq(Negative::getProblemSourcesCode, SPDC.getValue())); - overview.setTotal(negatives.size()); - overview.setCompletionProblem(negatives.stream().filter(item -> ProcessingStatusEnum.completed.name().equals(item.getProcessingStatus())).count()); - List trueValue = List.of(InspectCaseEnum.TRUE.getValue(), InspectCaseEnum.PARTIALLY_TRUE.getValue()); - overview.setDiscoverProblem(negatives.stream().filter(item -> Objects.nonNull(item.getCheckStatus()) && trueValue.contains(item.getCheckStatus())).count()); - if (negatives.isEmpty()) { - overview.setRelativeOrg(0L); - overview.setRelativePer(0L); - } else { - List blames = blameService.list(new LambdaQueryWrapper() - .in(NegativeBlame::getNegativeId, negatives.stream().map(Negative::getId).toList()) - .isNotNull(NegativeBlame::getHandleResultCode) - .ne(NegativeBlame::getHandleResultCode, "") - .ne(NegativeBlame::getHandleResultName, "不予追责")); - List departBlames = blames.stream().filter(item -> BlameType.department.name().equals(item.getType())).toList(); - if (departBlames.isEmpty()) { - overview.setRelativeOrg(0L); - } else { - long count = policeService.list(new LambdaQueryWrapper().in(SupPolice::getEmpNo, departBlames.stream().map(NegativeBlame::getBlameEmpNo).collect(Collectors.toSet()))).stream().map(SupPolice::getOrgId).distinct().count(); - overview.setRelativeOrg(count); - } - overview.setRelativePer(blames.stream().filter(item -> BlameType.personal.name().equals(item.getType())).count()); - } - - JSONObject data = new JSONObject().fluentPut("overview", overview); - return Result.success(data); + @PostMapping("/getAllVideoSuperviseCount") + public Result getAllVideoSuperviseCount(@RequestBody DataVRequest request) { + return datavService.getAllVideoSuperviseCount(request); } - /** - * 获取视频督察地图数据 - * - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return - */ @Operation(summary = "获取视频督察地图数据") - @GetMapping("/getVideoSuperviseMap") - public Result getVideoSuperviseMap(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { - - // 优化1: 快速失败检查 - if (beginTime == null || endTime == null) { - return Result.success(new JSONObject().fluentPut("videoSuperviseMapIconVoList", Collections.emptyList())); - } - - - endTime =DateUtil.endOfDay(endTime); - - // 地图数据 - List videoSuperviseMapIconVoList = Optional.ofNullable(negativeMapper.getVideoSuperviseMapIconInfo(beginTime, endTime)). - orElseGet(ArrayList::new); - - videoSuperviseMapIconVoList.forEach(VideoSuperviseMapIconVo::initDefaultIfNull); -// List list = negativeMapper.selectRelativePer(beginTime,endTime); -// videoSuperviseMapIconVoList.forEach(s->{ -// List echartsVoList= list.stream().filter(b->b.getName().contains(s.getDepartId())).toList(); -// if(!echartsVoList.isEmpty()){ -// int relativePer = echartsVoList.get(0).getValue(); -// s.setRelativePer(relativePer); -// } -// }); - JSONObject data = new JSONObject().fluentPut("videoSuperviseMapIconVoList", videoSuperviseMapIconVoList); - return Result.success(data); + @PostMapping("/getVideoSuperviseMap") + public Result getVideoSuperviseMap(@RequestBody DataVRequest request) { + return datavService.getVideoSuperviseMap(request); } + // 获取视频督察大屏中央问题趋势统计 @Operation(summary = "问题趋势统计") @GetMapping("/getVideoSuperviseTrend") diff --git a/src/main/java/com/biutag/supervision/controller/subdatav/SubOneVideoSuperviseController.java b/src/main/java/com/biutag/supervision/controller/subdatav/SubOneVideoSuperviseController.java index 9a14c97..1d58ac0 100644 --- a/src/main/java/com/biutag/supervision/controller/subdatav/SubOneVideoSuperviseController.java +++ b/src/main/java/com/biutag/supervision/controller/subdatav/SubOneVideoSuperviseController.java @@ -1,27 +1,19 @@ package com.biutag.supervision.controller.subdatav; -import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONObject; -import com.biutag.supervision.mapper.NegativeMapper; import com.biutag.supervision.pojo.Result; +import com.biutag.supervision.pojo.request.subdatav.SubDataVRequest; import com.biutag.supervision.pojo.vo.EchartsVo; -import com.biutag.supervision.pojo.vo.OrganizeProblemRankVo; -import com.biutag.supervision.pojo.vo.VideoSuperviseCountVo; -import com.biutag.supervision.pojo.vo.VideoSuperviseMapIconVo; import com.biutag.supervision.service.SubOneVideoSuperviseService; +import com.biutag.supervision.service.datav.DatavService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; 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.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.Optional; import static com.biutag.supervision.constants.enums.ProblemSourcesEnum.SPDC; @@ -37,90 +29,33 @@ import static com.biutag.supervision.constants.enums.ProblemSourcesEnum.SPDC; public class SubOneVideoSuperviseController { private final SubOneVideoSuperviseService subOneVideoSuperviseService; - private final NegativeMapper negativeMapper; - // region 左边 - - /** - * 问题数排名 - * - * @param departId 部门id(分县市局ID) - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return - */ + private final DatavService datavService; + + @Operation(summary = "问题数排名") - @GetMapping("/getSubOneVideoSuperviseProblemRank") - public Result getSubOneVideoSuperviseProblemRank(@RequestParam Integer departId, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { - List policeVideoSuperviseProblemRankList = subOneVideoSuperviseService.getSuboOneVideoSuperviseProblemRank(beginTime, endTime, 10, departId); - List teamVideoSuperviseProblemRankList = subOneVideoSuperviseService.getSuboOneVideoSuperviseProblemRank(beginTime, endTime, -1, departId); - JSONObject data = new JSONObject(); - data.fluentPut("policeVideoSuperviseProblemRankList", policeVideoSuperviseProblemRankList); - data.fluentPut("teamVideoSuperviseProblemRankList", teamVideoSuperviseProblemRankList); - return Result.success(data); + @PostMapping("/getSubOneVideoSuperviseProblemRank") + public Result getSubOneVideoSuperviseProblemRank(@RequestBody SubDataVRequest request) { + return datavService.getSubOneVideoSuperviseProblemRank(request); } - // endregion - // region 中间 - /** - * 中央总览数据 - * - * @param departId 部门id(分县市局ID) - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return Result - */ + @Operation(summary = "视频督察二级大屏中央数据") - @GetMapping("/getSubOneAllVideoSuperviseCount") - public Result getSubOneAllVideoSuperviseCount(@RequestParam Integer departId, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { - endTime =DateUtil.endOfDay(endTime); - VideoSuperviseCountVo overview = subOneVideoSuperviseService.getSubOneAllVideoSuperviseCount(beginTime, DateUtil.endOfDay(endTime), departId); - JSONObject data = new JSONObject().fluentPut("overview", overview); - return Result.success(data); + @PostMapping("/getSubOneAllVideoSuperviseCount") + public Result getSubOneAllVideoSuperviseCount(@RequestBody SubDataVRequest request) { + return datavService.getSubOneAllVideoSuperviseCount(request); } - /** - * 地图Icon数据 - * - * @param departId 部门id(分县市局ID) - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return - */ @Operation(summary = "地图Icon数据") - @GetMapping("/getSubOneVideoSuperviseMap") - public Result getSubOneVideoSuperviseMap(@RequestParam Integer departId, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { - endTime =DateUtil.endOfDay(endTime); - // 地图数据 - List videoSuperviseMapIconVoList = Optional.ofNullable(negativeMapper.getSubOneVideoSuperviseMapIconInfo(beginTime, endTime, departId)). - orElseGet(ArrayList::new); - List list =negativeMapper.selectSubOneRelativePer(beginTime,endTime,departId); - videoSuperviseMapIconVoList.forEach(s->{ - List echartsVoList= list.stream().filter(b->b.getName().contains(s.getDepartId())).toList(); - if(!echartsVoList.isEmpty()){ - int relativePer = echartsVoList.get(0).getValue(); - s.setRelativePer(relativePer); - } - }); - JSONObject data = new JSONObject().fluentPut("videoSuperviseMapIconVoList", videoSuperviseMapIconVoList); - return Result.success(data); + @PostMapping("/getSubOneVideoSuperviseMap") + public Result getSubOneVideoSuperviseMap(@RequestBody SubDataVRequest request) { + return datavService.getSubOneVideoSuperviseMap(request); } - /** - * 视频督察二级数据大屏问题趋势统计 - * @param departId 部门id(分县市局ID) - * @param year 年份 - * @return - */ + @Operation(summary = "问题趋势统计") @GetMapping("/getSubOneVideoSuperviseTrend") public Result getSubOneVideoSuperviseTrend(@RequestParam Integer departId, @RequestParam Integer year) { @@ -129,18 +64,10 @@ public class SubOneVideoSuperviseController { return Result.success(jsonObject); } - // endregion - // region 右边 - /** - * 视频督察二级数据大屏问题类型占比 - * @param departId 部门id(分县市局ID) - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return - */ + @Operation(summary = "视频督察二级数据大屏问题类型占比") @GetMapping("/getSubOneVideoSuperviseProblemTypeRate") public Result getSubOneVideoSuperviseProblemTypeRate(@RequestParam Integer departId, @@ -150,6 +77,5 @@ public class SubOneVideoSuperviseController { JSONObject jsonObject = new JSONObject().fluentPut("subOneVideoSuperviseProblemTypeRate", subOneVideoSuperviseProblemTypeRate); return Result.success(jsonObject); } - // endregion } diff --git a/src/main/java/com/biutag/supervision/mapper/NegativeMapper.java b/src/main/java/com/biutag/supervision/mapper/NegativeMapper.java index e86de11..f5827ca 100644 --- a/src/main/java/com/biutag/supervision/mapper/NegativeMapper.java +++ b/src/main/java/com/biutag/supervision/mapper/NegativeMapper.java @@ -183,7 +183,7 @@ public interface NegativeMapper extends BaseMapper { @Select("SELECT npr.oneLevelContent as name, count(*) value FROM negative ng, negative_problem_relation npr " + "WHERE ng.id = npr.negativeId " + "AND ng.problemSourcesCode in (13,14, 15) " + - "and ng.checkStatus<>3 " + + "and ng.check_status_code in (1, 2, 3) " + "AND ng.crtTime BETWEEN #{beginTime} AND #{endTime} " + "AND oneLevelContent is NOT NULL " + "GROUP BY oneLevelContent ") @@ -1090,5 +1090,17 @@ public interface NegativeMapper extends BaseMapper { @Param("codes") List codes ); + @Select("select ng.* from negative ng " + + "LEFT JOIN sup_depart sd on ng.involveDepartId = sd.id " + + "LEFT JOIN sup_depart sdd on sd.pid = sdd.id " + + "LEFT JOIN sup_depart sddd on sdd.pid = sddd.id " + + "where " + + "ng.special_supervision =#{specialSupervision} " + + "and ng.crtTime >= #{beginTime} " + + "and ng.crtTime <= #{endTime} " + + "AND (sd.id =#{id} OR sdd.id=#{id} or sddd.id=#{id});" + ) + List getYellowBetNegativeList(String id, Date beginTime, Date endTime, String specialSupervision); + // endregion } diff --git a/src/main/java/com/biutag/supervision/pojo/request/datav/DataVRequest.java b/src/main/java/com/biutag/supervision/pojo/request/datav/DataVRequest.java index bc3a5f7..1f0555d 100644 --- a/src/main/java/com/biutag/supervision/pojo/request/datav/DataVRequest.java +++ b/src/main/java/com/biutag/supervision/pojo/request/datav/DataVRequest.java @@ -27,6 +27,9 @@ public class DataVRequest implements ParamChecked { @Schema(description = "结束时间") private Date endTime; + @Schema(description = "专项督察类型") + private String specialSupervision; + @Override public void check() { diff --git a/src/main/java/com/biutag/supervision/pojo/vo/VideoSuperviseCountVo.java b/src/main/java/com/biutag/supervision/pojo/vo/VideoSuperviseCountVo.java index baf4aed..7e44b30 100644 --- a/src/main/java/com/biutag/supervision/pojo/vo/VideoSuperviseCountVo.java +++ b/src/main/java/com/biutag/supervision/pojo/vo/VideoSuperviseCountVo.java @@ -1,5 +1,6 @@ package com.biutag.supervision.pojo.vo; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -14,10 +15,19 @@ import lombok.NoArgsConstructor; @NoArgsConstructor public class VideoSuperviseCountVo { + @Schema(description = "问题数") private Integer total; + + @Schema(description = "查实问题数") private Long discoverProblem; + + @Schema(description = "办结问题数") private Long completionProblem; + + @Schema(description = "问责单位问题数") private Long relativeOrg; + + @Schema(description = "问责个人数") private Long relativePer; private Double completionRate; } diff --git a/src/main/java/com/biutag/supervision/service/datav/DatavService.java b/src/main/java/com/biutag/supervision/service/datav/DatavService.java index 9bb5ab2..0e94925 100644 --- a/src/main/java/com/biutag/supervision/service/datav/DatavService.java +++ b/src/main/java/com/biutag/supervision/service/datav/DatavService.java @@ -235,4 +235,47 @@ public interface DatavService { * @return */ Result getSupervisionNotifyMap(DataVRequest request); + + /** + * 现场专项一级--黄赌毒 + * @param request + * @return + */ + Result getYellowBetDrug(DataVRequest request); + + + /** + * 视频督察 地图数据 + * @param request + * @return + */ + Result getVideoSuperviseMap(DataVRequest request); + + /** + * 视频督察 总览 + * @param request + * @return + */ + Result getAllVideoSuperviseCount(DataVRequest request); + + /** + * 视频督察 问题数排名 + * @param request + * @return + */ + Result getSubOneVideoSuperviseProblemRank(SubDataVRequest request); + + /** + * 视频督察 二级总览 + * @param request + * @return + */ + Result getSubOneAllVideoSuperviseCount(SubDataVRequest request); + + /** + * 视频督察 二级地图 + * @param request + * @return + */ + Result getSubOneVideoSuperviseMap(SubDataVRequest request); } diff --git a/src/main/java/com/biutag/supervision/service/datav/DatavServiceImpl.java b/src/main/java/com/biutag/supervision/service/datav/DatavServiceImpl.java index 9c9834b..03f5f8f 100644 --- a/src/main/java/com/biutag/supervision/service/datav/DatavServiceImpl.java +++ b/src/main/java/com/biutag/supervision/service/datav/DatavServiceImpl.java @@ -3,11 +3,10 @@ package com.biutag.supervision.service.datav; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.StrUtil; 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.common.UserContextHolder; -import com.biutag.supervision.constants.AppConstants; import com.biutag.supervision.constants.enums.*; import com.biutag.supervision.constants.enums.invest.DeleteStatusEnum; import com.biutag.supervision.constants.enums.invest.ReportProjectNodeEnum; @@ -19,9 +18,9 @@ import com.biutag.supervision.pojo.dto.common.PieItem; import com.biutag.supervision.pojo.entity.*; import com.biutag.supervision.pojo.entity.mailbox.Mail; import com.biutag.supervision.pojo.entity.report.ReportProject; -import com.biutag.supervision.pojo.model.UserAuth; import com.biutag.supervision.pojo.param.*; import com.biutag.supervision.pojo.param.dataAudit.DataAuditQueryParam; +import com.biutag.supervision.pojo.param.negativeBlame.NegativeBlameQueryParam; import com.biutag.supervision.pojo.request.datav.DataVRequest; import com.biutag.supervision.pojo.request.subdatav.SubDataVRequest; import com.biutag.supervision.pojo.vo.*; @@ -30,11 +29,11 @@ import com.biutag.supervision.repository.dataCaseVerif.DataCaseVerifResourceServ import com.biutag.supervision.repository.dataPetitionComplaint.DataPetitionComplaintResourceService; import com.biutag.supervision.repository.mail.MailResourceService; import com.biutag.supervision.repository.negative.NegativeResourceService; +import com.biutag.supervision.repository.negativeBlame.NegativeBlameResourceService; import com.biutag.supervision.repository.reportproject.ReportProjectResourceService; import com.biutag.supervision.repository.supExternalDepart.SupExternalDepartResourceService; import com.biutag.supervision.repository.supdepart.SupDepartResourceService; import com.biutag.supervision.service.*; -import com.biutag.supervision.util.CompletableUtils.CompletableFutureUtil; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -43,7 +42,6 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.time.ZoneId; import java.util.*; -import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -92,26 +90,12 @@ public class DatavServiceImpl implements DatavService { @Resource private NegativeService negativeService; - @Resource - private RpcApplyService rpcApplyService; - - @Resource - private SupDepartService supDepartService; - @Resource private RpcApplyMapper rpcApplyMapper; - @Resource - private RpcPacksComfortService rpcPacksComfortService; - @Resource - private RpcComfortPacksService rpcComfortPacksService; - @Resource private RpcComfortPacksMapper rpcComfortPacksMapper; - @Resource - private RpcApplyPersonService rpcApplyPersonService; - @Resource private DataPetitionComplaintMapper dataPetitionComplaintMapper; @@ -135,7 +119,8 @@ public class DatavServiceImpl implements DatavService { @Resource private SuperviseReportService superviseReportService; - + @Resource + private NegativeBlameResourceService negativeBlameResourceService; private final String VALID_SIGN = "terminated"; private final String EX_SOURCE = "局长信箱"; @@ -1053,7 +1038,7 @@ public class DatavServiceImpl implements DatavService { List fxsjList = negativeMapper.getVideoSuperviseProblemRank(fxsj.getId(), request.getBeginTime(), request.getEndTime()); // 总数 long total = fxsjList.size(); - if (total==0){ + if (total == 0) { continue; } // 市局下发 @@ -1071,7 +1056,7 @@ public class DatavServiceImpl implements DatavService { List fxsjList = negativeMapper.getVideoSuperviseProblemRank(jsdw.getId(), request.getBeginTime(), request.getEndTime()); // 总数 long total = fxsjList.size(); - if (total==0){ + if (total == 0) { continue; } // 市局下发 @@ -1140,10 +1125,10 @@ public class DatavServiceImpl implements DatavService { fxsjChangedRankList.add(rankVo); } for (SupDepart jsdw : jsdwDw) { - List negativeList = negativeMapper.getChangedRank(jsdw.getId(), request.getBeginTime(), request.getEndTime()); + List negativeList = negativeMapper.getChangedRank(jsdw.getId(), request.getBeginTime(), request.getEndTime()); // 问题数 int totalPro = negativeList.size(); - if (totalPro==0){ + if (totalPro == 0) { continue; } // 办结数 @@ -1188,9 +1173,9 @@ public class DatavServiceImpl implements DatavService { 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(); + .multiply(BigDecimal.valueOf(100)) + .divide(BigDecimal.valueOf(total), 1, RoundingMode.HALF_UP) + .doubleValue(); DayTimeSuperviseVo overview = new DayTimeSuperviseVo(); overview.setProTotal((int) total); overview.setProcessingNumber(processing); @@ -1230,26 +1215,33 @@ public class DatavServiceImpl implements DatavService { superviseReportLambdaQueryWrapper.eq(SuperviseReport::getType, "1"); List superviseReportList = superviseReportService.list(superviseReportLambdaQueryWrapper); List negativeIds = negatives.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).map(Negative::getId).toList(); - CompletableFuture.allOf( - CompletableFutureUtil.runSyncObject(() -> { - long personNumber = negativeIds.isEmpty() ? 0 : negativeBlameService.count(new LambdaQueryWrapper().in(NegativeBlame::getNegativeId, negativeIds) - .eq(NegativeBlame::getType, "personal") - .isNotNull(NegativeBlame::getBlameName) - .ne(NegativeBlame::getBlameName, "") - .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(); + + NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); + negativeBlameQueryParam.setNegativeIds(negativeIds); + List negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam); + + // 3. 个人问责 + List personalBlames = negativeBlames.stream() + .filter(one -> BlameType.personal.name().equals(one.getType())) + .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) + .filter(one -> !"不予追责".equals(one.getHandleResultName())) + .toList(); + // 4. 领导问责(按 negativeId + 领导姓名 + 领导处理结果 去重) + 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(); + // 5. 单位问责 + List unitBlames = negativeBlames.stream() + .filter(one -> BlameType.department.name().equals(one.getType())) + .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) + .filter(one -> !"不予追责".equals(one.getHandleResultName())) + .toList(); // 通报问题数 overView.setProblemNumber(negatives.size()); @@ -1259,6 +1251,9 @@ public class DatavServiceImpl implements DatavService { overView.setProcessingNumber((long) processingList.size()); // 已办结 overView.setCompletedNumber((long) completedList.size()); + // 问责单位数 + overView.setDepartNumber((long) unitBlames.size()); + overView.setPersonNumber((long) (personalBlames.size() + leadBlames.size())); return Result.success(overView); } @@ -1282,37 +1277,400 @@ public class DatavServiceImpl implements DatavService { // superviseReportLambdaQueryWrapper.eq(SuperviseReport::getType, "1"); // List superviseReportList = superviseReportService.list(superviseReportLambdaQueryWrapper); List negativeIds = negatives.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).map(Negative::getId).toList(); - CompletableFuture.allOf( - CompletableFutureUtil.runSyncObject(() -> { - long personNumber = negativeIds.isEmpty() ? 0 : negativeBlameService.count(new LambdaQueryWrapper().in(NegativeBlame::getNegativeId, negativeIds) - .eq(NegativeBlame::getType, "personal") - .isNotNull(NegativeBlame::getBlameName) - .ne(NegativeBlame::getBlameName, "") - .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(); + + + NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); + negativeBlameQueryParam.setNegativeIds(negativeIds); + List negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam); + + // 3. 个人问责 + List personalBlames = negativeBlames.stream() + .filter(one -> BlameType.personal.name().equals(one.getType())) + .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) + .filter(one -> !"不予追责".equals(one.getHandleResultName())) + .toList(); + // 4. 领导问责(按 negativeId + 领导姓名 + 领导处理结果 去重) + 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(); + // 5. 单位问责 + List unitBlames = negativeBlames.stream() + .filter(one -> BlameType.department.name().equals(one.getType())) + .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) + .filter(one -> !"不予追责".equals(one.getHandleResultName())) + .toList(); superviseMapIconVo.setDepartId(fxsj.getId()); superviseMapIconVo.setName(fxsj.getShortName()); superviseMapIconVo.setTotalPro(negatives.size()); superviseMapIconVo.setProcessingNumber(processingList.size()); superviseMapIconVo.setCompletedNumber(completedList.size()); + superviseMapIconVo.setRelationOrg(String.valueOf(unitBlames.size())); + superviseMapIconVo.setPersonNum(String.valueOf(personalBlames.size() + leadBlames.size())); superviseTempMapVoList.add(superviseMapIconVo); } JSONObject data = new JSONObject().fluentPut("superviseTempMapVoList", superviseTempMapVoList); return Result.success(data); } + + @Override + public Result getYellowBetDrug(DataVRequest request) { + List countyRankList = new ArrayList<>(); + List bureauRankList = new ArrayList<>(); + SupDepartQueryParam supDepartQueryParam = new SupDepartQueryParam(); + supDepartQueryParam.setStatisticsGroupId(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId()); + List fxsjDw = supDepartResourceService.query(supDepartQueryParam); + SupDepartQueryParam jsdwQueryParam = new SupDepartQueryParam(); + jsdwQueryParam.setStatisticsGroupId(DepartGroupEnum.BUREAU_AFFILIATED.getId()); + List jsdwDw = supDepartResourceService.query(jsdwQueryParam); + Map totalNegativeMap = new LinkedHashMap<>(); + for (SupDepart fxsj : fxsjDw) { + List negativeList = negativeMapper.getYellowBetNegativeList(fxsj.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(fxsj.getShortName()); + organizeProblemRankVo.setValue(String.valueOf(negativeList.size())); + countyRankList.add(organizeProblemRankVo); + + } + + for (SupDepart jsdw : jsdwDw) { + List negativeList = negativeMapper.getYellowBetNegativeList(jsdw.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(jsdw.getShortName()); + organizeProblemRankVo.setValue(String.valueOf(negativeList.size())); + bureauRankList.add(organizeProblemRankVo); + } + + // 排序 + countyRankList.sort(Comparator.comparingInt((OrganizeProblemRankVo vo) -> Integer.parseInt(vo.getValue())).reversed()); + bureauRankList.sort(Comparator.comparingInt((OrganizeProblemRankVo vo) -> Integer.parseInt(vo.getValue())).reversed()); + List totalNegativeList = new ArrayList<>(totalNegativeMap.values()); +// List processingList = totalNegativeList.stream().filter(item -> ProcessingStatusEnum.processing.name().equals(item.getProcessingStatus())).toList(); +// List completedList = totalNegativeList.stream().filter(item -> ProcessingStatusEnum.completed.name().equals(item.getProcessingStatus())).toList(); + + 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("countyOverview", countyOverview) + .fluentPut("countyRankList", countyRankList) +// .fluentPut("bureauOverview", bureauOverview) + .fluentPut("bureauRankList", bureauRankList); + return Result.success(data); + } + + + @Override + public Result getAllVideoSuperviseCount(DataVRequest request) { + + NegativeQueryParam negativeQueryParam = new NegativeQueryParam(); + negativeQueryParam.setProblemSourcesCode(List.of(SPDC.getValue())); + negativeQueryParam.setCrtTime(List.of(request.getBeginTime(), request.getEndTime())); + List negatives = negativeResourceService.query(negativeQueryParam); + List ssList = negatives.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList(); + List completedList = negatives.stream().filter(item -> ProcessingStatusEnum.completed.name().equals(item.getProcessingStatus())).toList(); + NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); + negativeBlameQueryParam.setNegativeIds(ssList.stream().map(Negative::getId).toList()); + List negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam); + + // 3. 个人问责 + List personalBlames = negativeBlames.stream() + .filter(one -> BlameType.personal.name().equals(one.getType())) + .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) + .filter(one -> !"不予追责".equals(one.getHandleResultName())) + .toList(); + // 4. 领导问责(按 negativeId + 领导姓名 + 领导处理结果 去重) + 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(); + // 5. 单位问责 + List unitBlames = negativeBlames.stream() + .filter(one -> BlameType.department.name().equals(one.getType())) + .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) + .filter(one -> !"不予追责".equals(one.getHandleResultName())) + .toList(); + + VideoSuperviseCountVo overview = new VideoSuperviseCountVo(); + overview.setTotal(negatives.size()); + overview.setCompletionProblem((long) completedList.size()); + overview.setDiscoverProblem((long) ssList.size()); + overview.setRelativeOrg((long) unitBlames.size()); + overview.setRelativePer((long) (personalBlames.size() + leadBlames.size())); + JSONObject data = new JSONObject().fluentPut("overview", overview); + return Result.success(data); + } + + @Override + public Result getVideoSuperviseMap(DataVRequest request) { + + SupDepartQueryParam supDepartQueryParam = new SupDepartQueryParam(); + supDepartQueryParam.setStatisticsGroupId(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId()); + List fxsjDw = supDepartResourceService.query(supDepartQueryParam); + List proCode = List.of(SPDC.getValue()); + List videoSuperviseMapIconVoList = new ArrayList<>(); + for (SupDepart fxsj : fxsjDw) { + List negatives = negativeMapper.getNegativeListData(fxsj.getId(), request.getBeginTime(), request.getEndTime(), proCode); + + List ssList = negatives.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList(); + List completedList = negatives.stream().filter(item -> ProcessingStatusEnum.completed.name().equals(item.getProcessingStatus())).toList(); + NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); + negativeBlameQueryParam.setNegativeIds(ssList.stream().map(Negative::getId).toList()); + List negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam); + + // 3. 个人问责 + List personalBlames = negativeBlames.stream() + .filter(one -> BlameType.personal.name().equals(one.getType())) + .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) + .filter(one -> !"不予追责".equals(one.getHandleResultName())) + .toList(); + // 4. 领导问责(按 negativeId + 领导姓名 + 领导处理结果 去重) + Set seenLead = new HashSet<>(); + List leadBlames = negativeBlames.stream() + .filter(one -> StrUtil.isNotBlank(one.getLeadHandleResultName())) + .filter(one -> !"不予追责".equals(one.getLeadHandleResultName())) + .filter(one -> seenLead.add( + one.getNegativeId() + "_" + one.getLeadHandleResultName() + "_" + one.getLeadName() + )) + .toList(); + // 5. 单位问责 + List unitBlames = negativeBlames.stream() + .filter(one -> BlameType.department.name().equals(one.getType())) + .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) + .filter(one -> !"不予追责".equals(one.getHandleResultName())) + .toList(); + + + VideoSuperviseMapIconVo videoSuperviseMapIconVo = new VideoSuperviseMapIconVo(); + videoSuperviseMapIconVo.setName(fxsj.getShortName()); + videoSuperviseMapIconVo.setDepartId(fxsj.getId()); + videoSuperviseMapIconVo.setDiscoverProblem(ssList.size()); + videoSuperviseMapIconVo.setCompletionProblem(completedList.size()); + videoSuperviseMapIconVo.setRelativeOrg(unitBlames.size()); + videoSuperviseMapIconVo.setRelativePer(personalBlames.size() + leadBlames.size()); + videoSuperviseMapIconVoList.add(videoSuperviseMapIconVo); + } + videoSuperviseMapIconVoList.forEach(VideoSuperviseMapIconVo::initDefaultIfNull); + JSONObject data = new JSONObject().fluentPut("videoSuperviseMapIconVoList", videoSuperviseMapIconVoList); + return Result.success(data); + } + + + @Override + public Result getSubOneVideoSuperviseProblemRank(SubDataVRequest request) { + + + List policeVideoSuperviseProblemRankList = new ArrayList<>(); + List teamVideoSuperviseProblemRankList = new ArrayList<>(); + SupDepartQueryParam supDepartGroupParam = new SupDepartQueryParam(); + supDepartGroupParam.setLevel("2"); + List supDepartList = supDepartResourceService.query(supDepartGroupParam); + Map> partitionedMap = supDepartList.stream() + .collect(Collectors.partitioningBy(one -> + request.getDepartId().equals(one.getPid()) && + DepartGroupEnum.PCS.getId().equals(Integer.valueOf(one.getStatisticsGroupId())) + )); + + List pcsList = partitionedMap.get(true); // 派出所 + List dwList = partitionedMap.get(false); // 大队 + + for (SupDepart pcs : pcsList) { + List fxsjList = negativeMapper.getVideoSuperviseProblemRank(pcs.getId(), request.getBeginTime(), request.getEndTime()); + // 总数 + long total = fxsjList.size(); + if (total == 0) { + continue; + } + // 市局下发 + long sjxf = fxsjList.stream().filter(one -> Integer.valueOf(0).equals(one.getCrtDepartLevel())).count(); + // 县局下发 + long xjxf = fxsjList.stream().filter(one -> Integer.valueOf(2).equals(one.getCrtDepartLevel())).count(); + OrganizeProblemRankVo organizeProblemRankVo = new OrganizeProblemRankVo(); + organizeProblemRankVo.setLabel(pcs.getShortName()); + organizeProblemRankVo.setCityNumber(String.valueOf(sjxf)); + organizeProblemRankVo.setCountyNumber(String.valueOf(xjxf)); + organizeProblemRankVo.setValue(String.valueOf(total)); + policeVideoSuperviseProblemRankList.add(organizeProblemRankVo); + } + + + for (SupDepart dw : dwList) { + List fxsjList = negativeMapper.getVideoSuperviseProblemRank(dw.getId(), request.getBeginTime(), request.getEndTime()); + // 总数 + long total = fxsjList.size(); + if (total == 0) { + continue; + } + // 市局下发 + long sjxf = fxsjList.stream().filter(one -> Integer.valueOf(0).equals(one.getCrtDepartLevel())).count(); + // 县局下发 + long xjxf = fxsjList.stream().filter(one -> Integer.valueOf(2).equals(one.getCrtDepartLevel())).count(); + OrganizeProblemRankVo organizeProblemRankVo = new OrganizeProblemRankVo(); + organizeProblemRankVo.setLabel(dw.getShortName()); + organizeProblemRankVo.setCityNumber(String.valueOf(sjxf)); + organizeProblemRankVo.setCountyNumber(String.valueOf(xjxf)); + organizeProblemRankVo.setValue(String.valueOf(total)); + teamVideoSuperviseProblemRankList.add(organizeProblemRankVo); + } + + // 排序 + policeVideoSuperviseProblemRankList.sort( + Comparator.comparingLong((OrganizeProblemRankVo vo) -> Long.parseLong(vo.getValue())) + .reversed() + ); + teamVideoSuperviseProblemRankList.sort( + Comparator.comparingLong((OrganizeProblemRankVo vo) -> Long.parseLong(vo.getValue())) + .reversed() + ); + JSONObject data = new JSONObject(); + data.fluentPut("policeVideoSuperviseProblemRankList", policeVideoSuperviseProblemRankList); + data.fluentPut("teamVideoSuperviseProblemRankList", teamVideoSuperviseProblemRankList); + return Result.success(data); + } + + @Override + public Result getSubOneAllVideoSuperviseCount(SubDataVRequest request) { + List negatives = negativeMapper.getNegativeListData(request.getDepartId(), request.getBeginTime(), request.getEndTime(), List.of(SPDC.getValue())); + List ssList = negatives.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList(); + List completedList = negatives.stream().filter(item -> ProcessingStatusEnum.completed.name().equals(item.getProcessingStatus())).toList(); + NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); + negativeBlameQueryParam.setNegativeIds(ssList.stream().map(Negative::getId).toList()); + List negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam); + + // 3. 个人问责 + List personalBlames = negativeBlames.stream() + .filter(one -> BlameType.personal.name().equals(one.getType())) + .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) + .filter(one -> !"不予追责".equals(one.getHandleResultName())) + .toList(); + // 4. 领导问责(按 negativeId + 领导姓名 + 领导处理结果 去重) + 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(); + // 5. 单位问责 + List unitBlames = negativeBlames.stream() + .filter(one -> BlameType.department.name().equals(one.getType())) + .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) + .filter(one -> !"不予追责".equals(one.getHandleResultName())) + .toList(); + + VideoSuperviseCountVo overview = new VideoSuperviseCountVo(); + overview.setTotal(negatives.size()); + overview.setCompletionProblem((long) completedList.size()); + overview.setDiscoverProblem((long) ssList.size()); + overview.setRelativeOrg((long) unitBlames.size()); + overview.setRelativePer((long) (personalBlames.size() + leadBlames.size())); + JSONObject data = new JSONObject().fluentPut("overview", overview); + return Result.success(data); + } + + @Override + public Result getSubOneVideoSuperviseMap(SubDataVRequest request) { + + List videoSuperviseMapIconVoList = new ArrayList<>(); + String departId = request.getDepartId(); + Date beginTime = request.getBeginTime(); + Date endTime = request.getEndTime(); + + List proCode = List.of(SPDC.getValue()); + + // 查该区县局下属所有派出所 + List policeDeparts = supDepartMapper.selectPoliceDeparts(Integer.valueOf(departId)); + for (SupDepart pcs : policeDeparts) { + + List negatives = negativeMapper.getNegativeListData(pcs.getId(), request.getBeginTime(), request.getEndTime(), proCode); + + List ssList = negatives.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList(); + List completedList = negatives.stream().filter(item -> ProcessingStatusEnum.completed.name().equals(item.getProcessingStatus())).toList(); + NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); + negativeBlameQueryParam.setNegativeIds(ssList.stream().map(Negative::getId).toList()); + List negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam); + + // 3. 个人问责 + List personalBlames = negativeBlames.stream() + .filter(one -> BlameType.personal.name().equals(one.getType())) + .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) + .filter(one -> !"不予追责".equals(one.getHandleResultName())) + .toList(); + // 4. 领导问责(按 negativeId + 领导姓名 + 领导处理结果 去重) + Set seenLead = new HashSet<>(); + List leadBlames = negativeBlames.stream() + .filter(one -> StrUtil.isNotBlank(one.getLeadHandleResultName())) + .filter(one -> !"不予追责".equals(one.getLeadHandleResultName())) + .filter(one -> seenLead.add( + one.getNegativeId() + "_" + one.getLeadHandleResultName() + "_" + one.getLeadName() + )) + .toList(); + // 5. 单位问责 + List unitBlames = negativeBlames.stream() + .filter(one -> BlameType.department.name().equals(one.getType())) + .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) + .filter(one -> !"不予追责".equals(one.getHandleResultName())) + .toList(); + + + VideoSuperviseMapIconVo videoSuperviseMapIconVo = new VideoSuperviseMapIconVo(); + videoSuperviseMapIconVo.setName(pcs.getShortName()); + videoSuperviseMapIconVo.setDepartId(pcs.getId()); + videoSuperviseMapIconVo.setDiscoverProblem(ssList.size()); + videoSuperviseMapIconVo.setCompletionProblem(completedList.size()); + videoSuperviseMapIconVo.setRelativeOrg(unitBlames.size()); + videoSuperviseMapIconVo.setRelativePer(personalBlames.size() + leadBlames.size()); + videoSuperviseMapIconVoList.add(videoSuperviseMapIconVo); + + } + videoSuperviseMapIconVoList.forEach(VideoSuperviseMapIconVo::initDefaultIfNull); + JSONObject data = new JSONObject().fluentPut("videoSuperviseMapIconVoList", videoSuperviseMapIconVoList); + return Result.success(data); + } + public Result getSubOneMailMapIcon() { // ✅ 注意:这里的 name 必须和地图 geojson 区域名一致(一般是“xx街道/园区”)