From 0eb4fb764343970f950070e03bdcfcf6e3550ac5 Mon Sep 17 00:00:00 2001 From: buaixuexideshitongxue <2936013465@qq.com> Date: Thu, 19 Mar 2026 16:09:52 +0800 Subject: [PATCH] =?UTF-8?q?fix--=E4=BF=AE=E6=94=B9=E4=B8=80=E4=B8=8B?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=BD=8D=E7=BD=AE=EF=BC=8C=E6=97=A0=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datav/DataVMailViewController.java | 1 - .../subdatav/SubOneCaseVerifController.java | 12 +- .../subdatav/SubOneMailViewController.java | 12 +- .../subdatav/SubOneRightsController.java | 30 +- .../SubOneVideoSuperviseController.java | 10 +- .../service/datav/DatavService.java | 125 - .../service/datav/DatavServiceImpl.java | 2389 ++++++----------- .../service/subDatav/SubDatavService.java | 91 + .../service/subDatav/SubDatavServiceImpl.java | 913 ++++++- 9 files changed, 1891 insertions(+), 1692 deletions(-) diff --git a/src/main/java/com/biutag/supervision/controller/datav/DataVMailViewController.java b/src/main/java/com/biutag/supervision/controller/datav/DataVMailViewController.java index 0f50062..3bd363c 100644 --- a/src/main/java/com/biutag/supervision/controller/datav/DataVMailViewController.java +++ b/src/main/java/com/biutag/supervision/controller/datav/DataVMailViewController.java @@ -126,6 +126,5 @@ public class DataVMailViewController { }); return Result.success(blameMap); } - // endregion } 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 6a650d8..e86dbc9 100644 --- a/src/main/java/com/biutag/supervision/controller/subdatav/SubOneCaseVerifController.java +++ b/src/main/java/com/biutag/supervision/controller/subdatav/SubOneCaseVerifController.java @@ -7,7 +7,7 @@ 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.service.datav.DatavService; +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; @@ -33,12 +33,12 @@ import static com.biutag.supervision.constants.enums.ProblemSourcesEnum.*; public class SubOneCaseVerifController { private final NegativeMapper negativeMapper; private final DataCaseVerifMapper dataCaseVerifMapper; - private final DatavService datavService; + private final SubDatavService subDatavService; @Operation(summary = "分县市局排名") @PostMapping("/getSubOneCaseVerificationRank") public Result getSubOneCaseVerificationRank(@RequestBody SubDataVRequest request) { - return datavService.getSubOneCaseVerificationRank(request); + return subDatavService.getSubOneCaseVerificationRank(request); } @@ -63,7 +63,7 @@ public class SubOneCaseVerifController { @Operation(summary = "中央数据总览") @PostMapping("/getSubOneAllCaseVerificationCount") public Result getSubOneAllCaseVerificationCount(@RequestBody SubDataVRequest request) { - return datavService.getSubOneAllCaseVerificationCount(request); + return subDatavService.getSubOneAllCaseVerificationCount(request); } @@ -73,7 +73,7 @@ public class SubOneCaseVerifController { @PostMapping("/getSubOneCaseVerificationMap") // @Cacheable(cacheNames = "Supervision:Screen:SubOneCaseVerificationMap", key = "#departId+'_'+#beginTime.getTime() + '_' +#endTime.getTime()") public Result getSubOneCaseVerificationMap(@RequestBody SubDataVRequest request) { - return datavService.getSubOneCaseVerificationMap(request); + return subDatavService.getSubOneCaseVerificationMap(request); } @@ -121,7 +121,7 @@ public class SubOneCaseVerifController { @Operation(summary = "案件来源占比 & 问责处理情况") @PostMapping("/getSubOneCaseSourceRateAndDealSituation") public Result getSubOneCaseSourceRateAndDealSituation(@RequestBody SubDataVRequest request) { - return datavService.getSubOneCaseSourceRateAndDealSituation(request); + return subDatavService.getSubOneCaseSourceRateAndDealSituation(request); } diff --git a/src/main/java/com/biutag/supervision/controller/subdatav/SubOneMailViewController.java b/src/main/java/com/biutag/supervision/controller/subdatav/SubOneMailViewController.java index 1ad86f3..7918c6d 100644 --- a/src/main/java/com/biutag/supervision/controller/subdatav/SubOneMailViewController.java +++ b/src/main/java/com/biutag/supervision/controller/subdatav/SubOneMailViewController.java @@ -10,7 +10,7 @@ import com.biutag.supervision.pojo.vo.BlameStats; import com.biutag.supervision.pojo.vo.EchartsVo; import com.biutag.supervision.pojo.vo.MailMapIconVo; import com.biutag.supervision.service.DataMailService; -import com.biutag.supervision.service.datav.DatavService; +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; @@ -40,13 +40,13 @@ public class SubOneMailViewController { private final DataPetitionComplaintMapper dataPetitionComplaintMapper; private final DataPetition12337Mapper dataPetition12337Mapper; private final NegativeBlameMapper negativeBlameMapper; - private final DatavService datavService; + private final SubDatavService subDatavService; // region 左边 @Operation(summary = "初访重访情况") @PostMapping("/getSubOneFirstAndRepeatMail") public Result getSubOneFirstAndRepeatMail(@RequestBody SubDataVRequest request) { - return datavService.getSubOneFirstAndRepeatMail(request); + return subDatavService.getSubOneFirstAndRepeatMail(request); } // endregion @@ -56,7 +56,7 @@ public class SubOneMailViewController { @Operation(summary = "信访数据大屏中央数据统计 && 信访投诉占比") @PostMapping("/getSubOneAllMailCount") public Result getSubOneAllMailCount(@RequestBody SubDataVRequest request) { - return datavService.getSubOneAllMailCount(request); + return subDatavService.getSubOneAllMailCount(request); } @@ -64,7 +64,7 @@ public class SubOneMailViewController { @Operation(summary = "信访数据中央地图小图标数据") @PostMapping("/getSubOneMailMapIcon") public Result getSubOneMailMapIcon(@RequestBody SubDataVRequest request) { - return datavService.getSubOneMailMapIcon(request); + return subDatavService.getSubOneMailMapIcon(request); } @Operation(summary = "信访数据中央地图小图标数据") @@ -101,7 +101,7 @@ public class SubOneMailViewController { @Operation(summary = "群众集访情况") @PostMapping("/getSubOneEntanglementAndMassMail") public Result getSubOneEntanglementAndMassMail(@RequestBody SubDataVRequest request) { - return datavService.getSubOneEntanglementAndMassMail(request); + return subDatavService.getSubOneEntanglementAndMassMail(request); } // endregion diff --git a/src/main/java/com/biutag/supervision/controller/subdatav/SubOneRightsController.java b/src/main/java/com/biutag/supervision/controller/subdatav/SubOneRightsController.java index 74de20b..2e29d0f 100644 --- a/src/main/java/com/biutag/supervision/controller/subdatav/SubOneRightsController.java +++ b/src/main/java/com/biutag/supervision/controller/subdatav/SubOneRightsController.java @@ -1,20 +1,14 @@ package com.biutag.supervision.controller.subdatav; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.biutag.supervision.constants.enums.RpcApplyTypeEnum; import com.biutag.supervision.mapper.CountyStreetDeptMapper; import com.biutag.supervision.mapper.RpcApplyMapper; -import com.biutag.supervision.mapper.RpcInfringerResultMapper; import com.biutag.supervision.pojo.Result; import com.biutag.supervision.pojo.entity.CountyStreetDept; -import com.biutag.supervision.pojo.entity.RpcApply; import com.biutag.supervision.pojo.request.subdatav.SubDataVRequest; import com.biutag.supervision.pojo.vo.ComfortMapIconVo; -import com.biutag.supervision.service.RpcApplyService; -import com.biutag.supervision.service.datav.DatavService; +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; @@ -26,8 +20,6 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; /** * @Auther: sh @@ -44,58 +36,56 @@ public class SubOneRightsController { private final RpcApplyMapper rpcApplyMapper; private final CountyStreetDeptMapper countyStreetDeptMapper; - private final RpcApplyService rpcApplyService; - private final RpcInfringerResultMapper rpcInfringerResultMapper; - private final DatavService datavService; + private final SubDatavService subDatavService; @Operation(summary = "维权案件情况") @PostMapping("/getSubRightsBarList") public Result getSubRightsBarList(@RequestBody SubDataVRequest request) { - return datavService.getSubRightsBarList(request); + return subDatavService.getSubRightsBarList(request); } @Operation(summary = "抚慰金额情况") @PostMapping("/getSubComfortMoneyBarList") public Result getSubComfortMoneyBarList(@RequestBody SubDataVRequest request) { - return datavService.getSubComfortMoneyBarList(request); + return subDatavService.getSubComfortMoneyBarList(request); } @Operation(summary = "案件类别占比") @PostMapping("/getSubCaseType") public Result getSubCaseType(@RequestBody SubDataVRequest request) { - return datavService.getSubCaseType(request); + return subDatavService.getSubCaseType(request); } @Operation(summary = "大屏中央总览数据") @PostMapping("/getSubOneALlComfortCount") public Result getSubOneALlComfortCount(@RequestBody SubDataVRequest request) { - return datavService.getSubOneALlComfortCount(request); + return subDatavService.getSubOneALlComfortCount(request); } @Operation(summary = "打处情况") @PostMapping("/getSubHitState") public Result getSubHitState(@RequestBody SubDataVRequest request) { - return datavService.getSubHitState(request); + return subDatavService.getSubHitState(request); } @Operation(summary = "抚慰情况") @PostMapping("/getSubComfortState") public Result getSubComfortState(@RequestBody SubDataVRequest request) { - return datavService.getSubComfortState(request); + return subDatavService.getSubComfortState(request); } @Operation(summary = "民辅警受伤情况") @PostMapping("/getSubPoliceHurtSituationAndHurtType") public Result getSubPoliceHurtSituationAndHurtType(@RequestBody SubDataVRequest request) { - return datavService.getSubPoliceHurtSituationAndHurtType(request); + return subDatavService.getSubPoliceHurtSituationAndHurtType(request); } @Operation(summary = "发案情况占比") @PostMapping("/getSubOneCaseAriseSituationRate") public Result getSubOneCaseAriseSituationRate(@RequestBody SubDataVRequest request) { - return datavService.getSubOneCaseAriseSituationRate(request); + return subDatavService.getSubOneCaseAriseSituationRate(request); } // endregion 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 1d58ac0..cd60137 100644 --- a/src/main/java/com/biutag/supervision/controller/subdatav/SubOneVideoSuperviseController.java +++ b/src/main/java/com/biutag/supervision/controller/subdatav/SubOneVideoSuperviseController.java @@ -5,7 +5,7 @@ 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.service.SubOneVideoSuperviseService; -import com.biutag.supervision.service.datav.DatavService; +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; @@ -29,13 +29,13 @@ import static com.biutag.supervision.constants.enums.ProblemSourcesEnum.SPDC; public class SubOneVideoSuperviseController { private final SubOneVideoSuperviseService subOneVideoSuperviseService; - private final DatavService datavService; + private final SubDatavService subDatavService; @Operation(summary = "问题数排名") @PostMapping("/getSubOneVideoSuperviseProblemRank") public Result getSubOneVideoSuperviseProblemRank(@RequestBody SubDataVRequest request) { - return datavService.getSubOneVideoSuperviseProblemRank(request); + return subDatavService.getSubOneVideoSuperviseProblemRank(request); } @@ -44,14 +44,14 @@ public class SubOneVideoSuperviseController { @Operation(summary = "视频督察二级大屏中央数据") @PostMapping("/getSubOneAllVideoSuperviseCount") public Result getSubOneAllVideoSuperviseCount(@RequestBody SubDataVRequest request) { - return datavService.getSubOneAllVideoSuperviseCount(request); + return subDatavService.getSubOneAllVideoSuperviseCount(request); } @Operation(summary = "地图Icon数据") @PostMapping("/getSubOneVideoSuperviseMap") public Result getSubOneVideoSuperviseMap(@RequestBody SubDataVRequest request) { - return datavService.getSubOneVideoSuperviseMap(request); + return subDatavService.getSubOneVideoSuperviseMap(request); } 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 b46558a..1e2e65e 100644 --- a/src/main/java/com/biutag/supervision/service/datav/DatavService.java +++ b/src/main/java/com/biutag/supervision/service/datav/DatavService.java @@ -3,7 +3,6 @@ package com.biutag.supervision.service.datav; import com.alibaba.fastjson.JSONObject; import com.biutag.supervision.pojo.Result; import com.biutag.supervision.pojo.request.datav.DataVRequest; -import com.biutag.supervision.pojo.request.subdatav.SubDataVRequest; import com.biutag.supervision.pojo.vo.AuditOverview; import com.biutag.supervision.pojo.vo.SupervisionNotifyOverView; @@ -100,57 +99,6 @@ public interface DatavService { */ Result getPoliceHurtSituationAndHurtType(DataVRequest request); - /** - * 维权抚慰 二级大屏 维权案件情况 - * @param request - * @return - */ - Result getSubRightsBarList(SubDataVRequest request); - - Result getSubComfortMoneyBarList(SubDataVRequest request); - - /** - * 总览 - * @param request - * @return - */ - Result getSubOneALlComfortCount(SubDataVRequest request); - - /** - * 案件类别占比 - * @param request - * @return - */ - Result getSubCaseType(SubDataVRequest request); - - /** - * 二级 抚慰情况 - * @param request - * @return - */ - Result getSubComfortState(SubDataVRequest request); - - /** - * 二级 民辅警受伤情况 - * @param request - * @return - */ - Result getSubPoliceHurtSituationAndHurtType(SubDataVRequest request); - - /** - * 二级 发案情况占比 - * @param request - * @return - */ - Result getSubOneCaseAriseSituationRate(SubDataVRequest request); - - /** - * 二级 维权打处情况 - * @param request - * @return - */ - Result getSubHitState(SubDataVRequest request); - /** * 信访一级 初访重访情况 * @param request @@ -180,33 +128,7 @@ public interface DatavService { */ Result getMailMapIcon(DataVRequest request); - /** - * 信访二级 初重情况 - * @param request - * @return - */ - Result getSubOneFirstAndRepeatMail(SubDataVRequest request); - /** - * 二级信访 总览数据 - * @param request - * @return - */ - Result getSubOneAllMailCount(SubDataVRequest request); - - /** - * 信访二级 集访情况 - * @param request - * @return - */ - Result getSubOneEntanglementAndMassMail(SubDataVRequest request); - - /** - * 信访二级 地图数据 - * @param request - * @return - */ - Result getSubOneMailMapIcon(SubDataVRequest request); /** * 视频督察一级大屏问题排名 @@ -258,26 +180,6 @@ public interface DatavService { */ 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); /** * 案件核查 分县市局排名 @@ -300,33 +202,6 @@ public interface DatavService { */ Result getCaseSourceRateAndDealSituation(DataVRequest request); - /** - * 案件核查二级大屏 分县市局排名 - * @param request - * @return - */ - Result getSubOneCaseVerificationRank(SubDataVRequest request); - - /** - * 案件核查二级大屏 总览 - * @param request - * @return - */ - Result getSubOneAllCaseVerificationCount(SubDataVRequest request); - - /** - * 案件核查二级 地图 - * @param request - * @return - */ - Result getSubOneCaseVerificationMap(SubDataVRequest request); - - /** - * 案件核查二级 案件来源占比 & 问责处理情况 - * @param request - * @return - */ - Result getSubOneCaseSourceRateAndDealSituation(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 8fc7475..406614d 100644 --- a/src/main/java/com/biutag/supervision/service/datav/DatavServiceImpl.java +++ b/src/main/java/com/biutag/supervision/service/datav/DatavServiceImpl.java @@ -138,179 +138,10 @@ public class DatavServiceImpl implements DatavService { private final String VALID_SIGN = "terminated"; private final String EX_SOURCE = "局长信箱"; - @Override - public Result getAuditMap(DataVRequest request) { - List auditSuperviseMapIconVoList = new ArrayList<>(); - SupDepartGroupParam supDepartGroupParam = new SupDepartGroupParam(); - supDepartGroupParam.setGroupId(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId()); - supDepartGroupParam.setParentLevel(2); - supDepartGroupParam.setChildLevel(3); - Map departAndSubDepart = supDepartResourceService.getDepartAndSubDepart(supDepartGroupParam); - - for (Map.Entry entry : departAndSubDepart.entrySet()) { - String key = entry.getKey(); - DepartAndSubDepartDto value = entry.getValue(); - Set allDepartIds = value.getAllDepartIds(); - AuditSuperviseMapIconVo auditSuperviseMapIconVo = AuditSuperviseMapIconVo.of(key, value.getParentName()); - - - // 项目数 - ReportProjectQueryParam reportProjectQueryParam = new ReportProjectQueryParam(); - reportProjectQueryParam.setArchivingStart(request.getBeginTime()); - reportProjectQueryParam.setArchivingEnd(request.getEndTime()); - reportProjectQueryParam.setAuditUnitIds(allDepartIds); - reportProjectQueryParam.setDeleteFlag(DeleteStatusEnum.NO.getCode()); - reportProjectQueryParam.setNode(ReportProjectNodeEnum.END.getCode()); - List reportProjectList = reportProjectResourceService.query(reportProjectQueryParam); - // 其他审计项目 - DataAuditQueryParam dataAuditQueryParam = new DataAuditQueryParam(); - dataAuditQueryParam.setAuditTimeStart(request.getBeginTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); - dataAuditQueryParam.setAuditTimeEnd(request.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); - dataAuditQueryParam.setSecondLevelDeptId(Long.valueOf(entry.getKey())); - List dataAuditList = dataAuditResourceService.query(dataAuditQueryParam); - Integer reportProjectNumber = reportProjectList.size() + dataAuditList.size(); - auditSuperviseMapIconVo.setReportProjectNumber(reportProjectNumber); - - NegativeQueryParam negativeQueryParam = new NegativeQueryParam(); - List dates = Arrays.asList(request.getBeginTime(), request.getEndTime()); - negativeQueryParam.setCrtTime(dates); - negativeQueryParam.setInvolveDepartIds(allDepartIds); - negativeQueryParam.setProblemSourcesCode(List.of(ProblemSourcesEnum.ZFTZSJ.getValue(), - ProblemSourcesEnum.ZFSACFSS.getValue(), - ProblemSourcesEnum.JJZRSJ.getValue(), - ProblemSourcesEnum.ZXSJ.getValue())); - List negativeList = negativeResourceService.query(negativeQueryParam); - // 查处问题数 - auditSuperviseMapIconVo.setCheckProNumber(negativeList.size()); - if (CollectionUtil.isNotEmpty(negativeList)) { - // 追责问责数 - Set negativeIds = negativeList.stream().map(Negative::getId).collect(Collectors.toSet()); - if (CollectionUtil.isNotEmpty(negativeIds)) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.in(NegativeBlame::getNegativeId, negativeIds); - wrapper.ne(NegativeBlame::getHandleResultName, "不予追责"); - int rushProNumber = (int) negativeBlameService.count(wrapper); - auditSuperviseMapIconVo.setRushProNumber(rushProNumber); - } - // 整改问题数 - long rectifyNumber = negativeList.stream().filter(one -> Objects.equals(one.getIsRectifyCode(), "1")).count(); - auditSuperviseMapIconVo.setRectifyNumber((int) rectifyNumber); - } - auditSuperviseMapIconVoList.add(auditSuperviseMapIconVo); - } - JSONObject data = new JSONObject().fluentPut("auditSuperviseMapIconVoList", auditSuperviseMapIconVoList); - return Result.success(data); - } - - /** - * 获取一级首页的地图数据 - * - * @param request - * @return - */ - @Override - public Result getGlobalMap(DataVRequest request) { - List globalMapIconVoList = new ArrayList<>(); - SupDepartGroupParam supDepartGroupParam = new SupDepartGroupParam(); - supDepartGroupParam.setGroupId(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId()); - supDepartGroupParam.setParentLevel(2); - supDepartGroupParam.setChildLevel(3); - Map departAndSubDepart = supDepartResourceService.getDepartAndSubDepart(supDepartGroupParam); - - for (Map.Entry entry : departAndSubDepart.entrySet()) { - String departId = entry.getKey(); - DepartAndSubDepartDto departDto = entry.getValue(); - Set allDepartIds = departDto.getAllDepartIds(); - GlobalMapIconVo globalMapIconVo = GlobalMapIconVo.of(departId, departDto.getParentName()); - List dates = Arrays.asList(request.getBeginTime(), request.getEndTime()); - // 现场督查 - NegativeQueryParam group13Param = new NegativeQueryParam(); - group13Param.setCrtTime(dates); - group13Param.setInvolveDepartIds(allDepartIds); - group13Param.setProblemSourcesCode(ProblemSourcesEnum.GROUP_13); - long supervisionProCount = negativeResourceService.count(group13Param); - - // 数字督察 - NegativeQueryParam group14To16Param = new NegativeQueryParam(); - group14To16Param.setCrtTime(dates); - group14To16Param.setInvolveDepartIds(allDepartIds); - group14To16Param.setProblemSourcesCode(ProblemSourcesEnum.GROUP_14_15_16); - long numSupervisionProCount = negativeResourceService.count(group14To16Param); - - // 案件核查 - NegativeQueryParam group17To20Param = new NegativeQueryParam(); - group17To20Param.setCrtTime(dates); - group17To20Param.setInvolveDepartIds(allDepartIds); - group17To20Param.setProblemSourcesCode(ProblemSourcesEnum.GROUP_17_18_19_20); - long caseVerificationProCount = negativeResourceService.count(group17To20Param); - - // 12337 - QueryWrapper queryWrapper12337 = new QueryWrapper<>(); - queryWrapper12337.between("discover_time", request.getBeginTime(), request.getEndTime()); - queryWrapper12337.and(wrapper -> wrapper - .in("third_depart_id", allDepartIds) - .or() - .in("second_depart_id", allDepartIds)); - long xf12337Count = dataPetition12337Mapper.selectCount(queryWrapper12337); - // 国家信访 - DataPetitionComplaintQueryParam countryParam = new DataPetitionComplaintQueryParam(); - countryParam.setCreateTime(dates); - countryParam.setSecondDepartIds(Collections.singleton(departDto.getParentId())); - countryParam.setProblemSourcesCode(ProblemSourcesEnum.GJXFPT.getValue()); - long countryMail = dataPetitionComplaintResourceService.count(countryParam); - // 公安部门信访 - DataPetitionComplaintQueryParam policeParam = new DataPetitionComplaintQueryParam(); - policeParam.setCreateTime(dates); - policeParam.setSecondDepartIds(Collections.singleton(departDto.getParentId())); - policeParam.setProblemSourcesCode(ProblemSourcesEnum.GABXF.getValue()); - long policeMail = dataPetitionComplaintResourceService.count(policeParam); - // 审计项目数 - ReportProjectQueryParam reportProjectQueryParam = new ReportProjectQueryParam(); - reportProjectQueryParam.setArchivingStart(request.getBeginTime()); - reportProjectQueryParam.setArchivingEnd(request.getEndTime()); - reportProjectQueryParam.setAuditUnitIds(allDepartIds); - long reportProjectCount = reportProjectResourceService.count(reportProjectQueryParam); - // 局长信箱 - SupExternalDepartQueryParam supExternalDepartQueryParam = new SupExternalDepartQueryParam(); - supExternalDepartQueryParam.setInternalIds(Collections.singleton(departDto.getParentId())); - supExternalDepartQueryParam.setSource("局长信箱"); - List supExternalDepartList = supExternalDepartResourceService.query(supExternalDepartQueryParam); - SupExternalDepart depart = Optional - .ofNullable(supExternalDepartList) - .filter(list -> !list.isEmpty()) - .map(list -> list.get(0)) - .orElseThrow(() -> new RuntimeException("未查询到" + departDto.getParentName() + "的外部部门信息")); - -// MailQueryParam mailQueryParam = new MailQueryParam(); -// mailQueryParam.setSecondDeptId(depart.getExternalId()); -// mailQueryParam.setMailTime(dates); -// long mailCount = mailResourceService.count(mailQueryParam); - - QueryWrapper mailQueryWrapper = new QueryWrapper<>(); - mailQueryWrapper.ne("mail_state", VALID_SIGN); - mailQueryWrapper.between("mail_time", request.getBeginTime(), request.getEndTime()); - mailQueryWrapper.in("second_dept_id", depart.getExternalId()); - long mailCount = mailMapper.selectCount(mailQueryWrapper); - globalMapIconVo.setSupervisionPro(supervisionProCount); - globalMapIconVo.setNumSupervisionPro(numSupervisionProCount); - globalMapIconVo.setCaseVerificationPro(caseVerificationProCount); - globalMapIconVo.setComplaintPro(xf12337Count + countryMail + policeMail); - globalMapIconVo.setAuditPro(reportProjectCount); - globalMapIconVo.setMailboxNumber(mailCount); - globalMapIconVo.calcTotal(); - globalMapIconVoList.add(globalMapIconVo); - } - JSONObject data = new JSONObject().fluentPut("globalTempMapVoList", globalMapIconVoList); - return Result.success(data); - } + // region 首页一级大屏 - /** - * 获取一级首页的机构问题排名 - * - * @param request - * @return - */ + // 获取一级首页的机构问题排名 @Override public Result getOrganizationRank(DataVRequest request) { Map fxsjDepartAndSubDepartData = getDepartAndSubDepartData(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId()); @@ -361,12 +192,8 @@ public class DatavServiceImpl implements DatavService { return Result.success(res); } - /** - * 获取一级首页中间总览数据 - * - * @param request - * @return - */ + + //获取一级首页中间总览数据 @Override public Result getAllGlobalCount(DataVRequest request) { @@ -431,1000 +258,170 @@ public class DatavServiceImpl implements DatavService { return Result.success(data); } - /** - * @return 部门和子部门映射数据 - */ - public Map getDepartAndSubDepartData(Integer groupId) { - // 创建参数对象 + //获取一级首页的地图数据 + @Override + public Result getGlobalMap(DataVRequest request) { + List globalMapIconVoList = new ArrayList<>(); SupDepartGroupParam supDepartGroupParam = new SupDepartGroupParam(); - supDepartGroupParam.setGroupId(groupId); + supDepartGroupParam.setGroupId(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId()); supDepartGroupParam.setParentLevel(2); supDepartGroupParam.setChildLevel(3); + Map departAndSubDepart = supDepartResourceService.getDepartAndSubDepart(supDepartGroupParam); - // 调用服务获取数据 - return supDepartResourceService.getDepartAndSubDepart(supDepartGroupParam); - } - - // region 案件核查 - @Override - public Result getAllCaseVerificationCount(DataVRequest request) { - // 交办 - Set ldjbCode = Set.of(SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); - CaseVerificationCountVo overview = new CaseVerificationCountVo(); - LambdaQueryWrapper dataCaseVerifLambdaQueryWrapper = new LambdaQueryWrapper<>(); - dataCaseVerifLambdaQueryWrapper.between(DataCaseVerif::getCreateTime, request.getBeginTime(), request.getEndTime()); - List dataCaseVerifs = dataCaseVerifMapper.selectList(dataCaseVerifLambdaQueryWrapper); - NegativeQueryParam negativeQueryParam = new NegativeQueryParam(); - negativeQueryParam.setCrtTime(List.of(request.getBeginTime(), request.getEndTime())); - negativeQueryParam.setProblemSourcesCode(List.of(A12389.getValue(), SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue())); - List negatives = negativeResourceService.query(negativeQueryParam); - // 交办案件数 - List jbNegatvieList = negatives.stream().filter(one -> ldjbCode.contains(one.getProblemSourcesCode())).toList(); - // 属实问题 - List ssNegative = negatives.stream() - .filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList(); + for (Map.Entry entry : departAndSubDepart.entrySet()) { + String departId = entry.getKey(); + DepartAndSubDepartDto departDto = entry.getValue(); + Set allDepartIds = departDto.getAllDepartIds(); + GlobalMapIconVo globalMapIconVo = GlobalMapIconVo.of(departId, departDto.getParentName()); + List dates = Arrays.asList(request.getBeginTime(), request.getEndTime()); + // 现场督查 + NegativeQueryParam group13Param = new NegativeQueryParam(); + group13Param.setCrtTime(dates); + group13Param.setInvolveDepartIds(allDepartIds); + group13Param.setProblemSourcesCode(ProblemSourcesEnum.GROUP_13); + long supervisionProCount = negativeResourceService.count(group13Param); - NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); - negativeBlameQueryParam.setNegativeIds(ssNegative.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(); - //计算查实率(向上取整) - Double verificationRate = 0.0; - if (!dataCaseVerifs.isEmpty()) { - double rawRate = (double) ssNegative.size() / (dataCaseVerifs.size() + jbNegatvieList.size()) * 100; - verificationRate = Math.round(rawRate * 10) / 10.0; - } - overview.setTotal(dataCaseVerifs.size() + jbNegatvieList.size()); - overview.setConfirmed(ssNegative.size()); - overview.setDealCasePro((long) negatives.size()); - overview.setPunishPre((long) (personalBlames.size() + leadBlames.size())); - overview.setPunishOrg((long) unitBlames.size()); - overview.setRate(verificationRate); - JSONObject res = new JSONObject().fluentPut("overview", overview); - return Result.success(res); - } + // 数字督察 + NegativeQueryParam group14To16Param = new NegativeQueryParam(); + group14To16Param.setCrtTime(dates); + group14To16Param.setInvolveDepartIds(allDepartIds); + group14To16Param.setProblemSourcesCode(ProblemSourcesEnum.GROUP_14_15_16); + long numSupervisionProCount = negativeResourceService.count(group14To16Param); - /** - * 审计大屏 审计项目类型 - * - * @param request - * @return - */ - @Override - public Result getAuditType(DataVRequest request) { - DataAuditQueryParam dataAuditQueryParam = new DataAuditQueryParam(); - dataAuditQueryParam.setAuditTimeStart(request.getBeginTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); - dataAuditQueryParam.setAuditTimeEnd(request.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); - List dataAuditList = dataAuditResourceService.query(dataAuditQueryParam); - List barData = dataAuditList.stream() - .collect(Collectors.groupingBy(DataAudit::getAuditTypeName, Collectors.counting())) - .entrySet().stream() - .map(entry -> new EchartsVo(entry.getKey(), entry.getValue().intValue())) - .collect(Collectors.toList()); - ReportProjectQueryParam reportProjectQueryParam = new ReportProjectQueryParam(); - reportProjectQueryParam.setPublicationDateStart(request.getBeginTime()); - reportProjectQueryParam.setPublicationDateEnd(request.getEndTime()); - List reportProjects = reportProjectResourceService.query(reportProjectQueryParam); - if (CollectionUtil.isNotEmpty(reportProjects)) { - EchartsVo echartsVo = new EchartsVo(); - echartsVo.setName("政府投资审计"); - echartsVo.setValue(reportProjects.size()); - barData.add(echartsVo); - } - JSONObject object = new JSONObject(); - object.fluentPut("barData", barData); - return Result.success(object); - } - - @Override - public Result getAuditTrend(Integer year) { - // 其他审计 - List auditTrend = dataAuditResourceService.getAuditTrend(year); - // 政府投资审计 - List invertTrend = reportProjectResourceService.getReportProjectTrend(year); - // 将两个列表转换为 Map,key 为月份名称,value 为数量 - Map auditMap = auditTrend.stream().collect(Collectors.toMap(EchartsVo::getName, EchartsVo::getValue)); - Map invertMap = invertTrend.stream().collect(Collectors.toMap(EchartsVo::getName, EchartsVo::getValue)); - // 生成合并后的列表 - List mergedList = new ArrayList<>(); - for (int i = 1; i <= 12; i++) { - String monthName = i + "月"; - int auditValue = auditMap.getOrDefault(monthName, 0); - int invertValue = invertMap.getOrDefault(monthName, 0); - mergedList.add(new EchartsVo(monthName, auditValue + invertValue)); - } - - JSONObject object = new JSONObject(); - object.fluentPut("auditTrend", mergedList); - return Result.success(object); - } - - @Override - public Result aduitOverview(DataVRequest request) { - Date beginTime = request.getBeginTime(); - Date endTime = request.getEndTime(); - List negatives = negativeService.list(new LambdaQueryWrapper().between(Negative::getCrtTime, beginTime, DateUtil.endOfDay(endTime)) - .in(Negative::getProblemSourcesCode, List.of(ProblemSourcesEnum.ZFTZSJ.getValue(), ProblemSourcesEnum.ZFSACFSS.getValue(), ProblemSourcesEnum.JJZRSJ.getValue(), ProblemSourcesEnum.ZXSJ.getValue()))); - BlameResult blameResult = buildBlameResult(negatives); - // 政府投资数据 - ReportProjectQueryParam reportProjectQueryParam = new ReportProjectQueryParam(); - reportProjectQueryParam.setArchivingStart(beginTime); - reportProjectQueryParam.setArchivingEnd(endTime); - reportProjectQueryParam.setDeleteFlag(DeleteStatusEnum.NO.getCode()); - reportProjectQueryParam.setNode(ReportProjectNodeEnum.END.getCode()); - List reportProjects = reportProjectResourceService.query(reportProjectQueryParam); - // 政府投资审计金额 - BigDecimal zftzje = reportProjects.stream().map(ReportProject::getReportMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP); - // 政府投资审减金额 - BigDecimal zftzsjje = reportProjects.stream().map(ReportProject::getArchivingReduceMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP); - // 其他审计数据 - DataAuditQueryParam dataAuditQueryParam = new DataAuditQueryParam(); - dataAuditQueryParam.setAuditTimeStart(request.getBeginTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); - dataAuditQueryParam.setAuditTimeEnd(request.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); - List dataAuditList = dataAuditResourceService.query(dataAuditQueryParam); - // 其他审计金额 - BigDecimal qtsjje = dataAuditList.stream().map(DataAudit::getAuditAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); - // 发现问题金额 - BigDecimal fxwtje = dataAuditList.stream().map(DataAudit::getIssueAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); - - - // 最后得出的总的项目数量 - int projectNumber = reportProjects.size() + dataAuditList.size(); - // 审计总金额 - BigDecimal auditAmount = zftzje.add(qtsjje); - // - AuditOverview overview = new AuditOverview(); - overview.setProjectNumber(new BigDecimal(projectNumber)); - overview.setAuditAmount(auditAmount); - overview.setAuditSjAmount(zftzsjje); - overview.setAuditWtAmount(fxwtje); - overview.setNegativeNumber(negatives.size()); - overview.setAccountableNumber((long) (blameResult.personalBlames().size() + blameResult.leadBlames().size())); - return Result.success(overview); - } - - @Override - public Result getRightsBarList(DataVRequest request) { - List countyRightsBarList = new ArrayList<>(); - List bureauRightsBarList = new ArrayList<>(); - SupDepartQueryParam supDepartQueryParam = new SupDepartQueryParam(); - supDepartQueryParam.setStatisticsGroupId(3); - List fxsjDw = supDepartResourceService.query(supDepartQueryParam); - supDepartQueryParam.setStatisticsGroupId(4); - List bwzdDw = supDepartResourceService.query(supDepartQueryParam); - for (SupDepart supDepart : fxsjDw) { - List rpcApplyList = rpcApplyMapper.selectRightsList(supDepart.getId(), request.getBeginTime(), request.getEndTime()); - if (CollectionUtil.isNotEmpty(rpcApplyList)) { - BarItem barItem = new BarItem(supDepart.getShortName(), new BigDecimal(rpcApplyList.size())); - countyRightsBarList.add(barItem); - } - } - - for (SupDepart supDepart : bwzdDw) { - List rpcApplyList = rpcApplyMapper.selectRightsList(supDepart.getId(), request.getBeginTime(), request.getEndTime()); - if (CollectionUtil.isNotEmpty(rpcApplyList)) { - BarItem barItem = new BarItem(supDepart.getShortName(), new BigDecimal(rpcApplyList.size())); - bureauRightsBarList.add(barItem); - } - } - JSONObject object = new JSONObject(); - countyRightsBarList.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue())); - bureauRightsBarList.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue())); - object.fluentPut("countyRightsBarList", countyRightsBarList); - object.fluentPut("bureauRightsBarList", bureauRightsBarList); - return Result.success(object); - } - - @Override - public Result getComfortMoneyBarList(DataVRequest request) { - List countyComfortMoneyBarList = rpcComfortPacksMapper.getComfortMoneyBarList(request.getBeginTime(), request.getEndTime(), 3); - List bureauComfortMoneyBarList = rpcComfortPacksMapper.getComfortMoneyBarList(request.getBeginTime(), request.getEndTime(), 4); - JSONObject object = new JSONObject(); - object.fluentPut("countyComfortMoneyBarList", countyComfortMoneyBarList); - object.fluentPut("bureauComfortMoneyBarList", bureauComfortMoneyBarList); - return Result.success(object); - } - - @Override - public Result getCaseAriseSituationRate(DataVRequest request) { - Date beginTime = request.getBeginTime(); - Date endTime = request.getEndTime(); - // 发案环节 - List incidentLinkList = rpcApplyMapper.getIncidentLink(beginTime, endTime); - // 发案警种 - List incidentPoliceList = rpcApplyMapper.getIncidentPolice(beginTime, endTime); - // 发案单位 - SupDepartQueryParam supDepartQueryParam = new SupDepartQueryParam(); - supDepartQueryParam.setStatisticsGroupId(3); - List fxsjDw = supDepartResourceService.query(supDepartQueryParam); - List incidentOrgList = new ArrayList<>(); - for (SupDepart supDepart : fxsjDw) { - List rpcApplyList = rpcApplyMapper.getIncidentOrg(beginTime, endTime, supDepart.getId()); - if (CollectionUtil.isNotEmpty(rpcApplyList)) { - EchartsVo barItem = new EchartsVo(supDepart.getShortName(), rpcApplyList.size()); - incidentOrgList.add(barItem); - } - } - JSONObject data = new JSONObject() - .fluentPut("incidentLinkList", incidentLinkList) - .fluentPut("incidentPoliceTypeList", incidentPoliceList) - .fluentPut("incidentOrgList", incidentOrgList); - return Result.success(data); - } - - @Override - public Result getPoliceHurtSituationAndHurtType(DataVRequest request) { - List comfortInjuryCategory = rpcApplyMapper.selectComfortInjuryCategory(request.getBeginTime(), request.getEndTime()); - JSONObject data = new JSONObject() - .fluentPut("comfortInjuryCategory", comfortInjuryCategory); - return Result.success(data); - } - - /** - * 维权抚慰 二级大屏 维权案件情况 - * - * @param request - * @return - */ - @Override - public Result getSubRightsBarList(SubDataVRequest request) { - // 维权案件情况 - 派出所 - List pcsList = rpcApplyMapper.selectSubPcsProtectRightsBarList(request.getBeginTime(), request.getEndTime(), Integer.valueOf(request.getDepartId()), 10); - // 维权案件情况 - 大队 - List dbList = rpcApplyMapper.selectSubDdProtectRightsBarList(request.getBeginTime(), request.getEndTime(), Integer.valueOf(request.getDepartId()), 10); - - JSONObject data = new JSONObject() - .fluentPut("fxsjRightsRankList", pcsList) - .fluentPut("jsdwRightsRankList", dbList); - return Result.success(data); - } - - - @Override - public Result getSubComfortMoneyBarList(SubDataVRequest request) { - List fxsjComfortMoneyRank = rpcApplyMapper.getSubPcComfortMoneyBarList(request.getBeginTime(), request.getEndTime(), request.getDepartId(), 10); - List jsdwComfortMoneyRank = rpcApplyMapper.getSubDdComfortMoneyBarList(request.getBeginTime(), request.getEndTime(), request.getDepartId(), 10); - JSONObject data = new JSONObject() - .fluentPut("fxsjComfortMoneyRank", fxsjComfortMoneyRank) - .fluentPut("jsdwComfortMoneyRank", jsdwComfortMoneyRank); - return Result.success(data); - } - - - @Override - public Result getSubCaseType(SubDataVRequest request) { - List crownCaseBar = rpcApplyMapper.selectSubCaseData(request.getBeginTime(), request.getEndTime(), "1", Integer.valueOf(request.getDepartId())); - //案件类别 - 行政 - List administrativeCase = rpcApplyMapper.selectSubCaseData(request.getBeginTime(), request.getEndTime(), "2", Integer.valueOf(request.getDepartId())); - JSONObject data = new JSONObject().fluentPut("crownCaseBar", crownCaseBar).fluentPut("administrativeCase", administrativeCase); - return Result.success(data); - } - - @Override - public Result getSubComfortState(SubDataVRequest request) { - List comfortSituationList = rpcApplyMapper.getSubComfortState(request.getBeginTime(), request.getEndTime(), request.getDepartId()); - JSONObject data = new JSONObject().fluentPut("comfortSituationList", comfortSituationList); - return Result.success(data); - } - - @Override - public Result getSubHitState(SubDataVRequest request) { - List pieItems = rpcApplyMapper.getSubHitState(request.getBeginTime(), request.getEndTime(), request.getDepartId()); - JSONObject data = new JSONObject().fluentPut("PunishmentSituation", pieItems); - return Result.success(data); - } - - @Override - public Result getSubPoliceHurtSituationAndHurtType(SubDataVRequest request) { - List policeHurtSituationList = rpcApplyMapper.getSubPoliceHurtSituationAndHurtType(request.getBeginTime(), request.getEndTime(), request.getDepartId()); // 人数情况 - JSONObject data = new JSONObject().fluentPut("policeHurtSituationList", policeHurtSituationList); - return Result.success(data); - } - - @Override - public Result getSubOneCaseAriseSituationRate(SubDataVRequest request) { - List incidentLinkList = rpcApplyMapper.getSubIncidentLinkList(request.getBeginTime(), request.getEndTime(), request.getDepartId()); - List incidentPoliceList = rpcApplyMapper.getSubIncidentPoliceList(request.getBeginTime(), request.getEndTime(), request.getDepartId()); - List incidentOrgList = rpcApplyMapper.getSubIncidentOrgList(request.getBeginTime(), request.getEndTime(), request.getDepartId()); - JSONObject data = new JSONObject() - .fluentPut("incidentLinkList", incidentLinkList) - .fluentPut("incidentPoliceTypeList", incidentPoliceList) - .fluentPut("incidentOrgList", incidentOrgList); - return Result.success(data); - } - - @Override - public Result getSubOneALlComfortCount(SubDataVRequest request) { - ComfortCountVO comfortOverview = new ComfortCountVO(); - Date beginTime = request.getBeginTime(); - Date endTime = request.getEndTime(); - String departId = request.getDepartId(); - comfortOverview.setComfortCaseTotal(Long.valueOf(rpcApplyMapper.selectMapRightsNumber(beginTime, endTime, departId))); - comfortOverview.setHurtTotal(Long.valueOf(rpcApplyMapper.selectMapVictimNumber(beginTime, endTime, departId))); - comfortOverview.setComfortTotal(rpcApplyMapper.selectMapComfortPersonNumber(beginTime, endTime, departId)); - List tortNames = rpcApplyMapper.selectMaptHitPersonNumber(beginTime, endTime, departId); - long initialListSize = tortNames.size(); - long hitPersonNumber = tortNames.stream() - .filter(s -> s.contains(",")).toList().size(); - // 筛选出包含逗号的名称 - long nums = tortNames.stream() - .filter(s -> s.contains(",")) - .mapToLong(s -> s.split(",").length) // 拆分每个名称并计算拆分后的数组长度 - .sum();// 计算所有拆分后数组长度的总和 - if (tortNames.stream().noneMatch(s -> s.contains(","))) { - comfortOverview.setHitTotal(initialListSize); - } else { - comfortOverview.setHitTotal(initialListSize + nums - hitPersonNumber); - } - comfortOverview.setComfortMoney(rpcApplyMapper.selectMapComfortMoney(beginTime, endTime, departId)); - JSONObject data = new JSONObject().fluentPut("comfortOverview", comfortOverview); - return Result.success(data); - - } - - - @Override - public Result getFirstAndRepeatMail(DataVRequest request) { - Date beginTime = request.getBeginTime(); - Date endTime = request.getEndTime(); - // 分县市局 - List fxsjFirstRankList = dataPetitionComplaintMapper.getMailRank(beginTime, endTime, 3, RepeatEnum.FIRST_MAIL.getId()); - List fxsjRepeatRankList = dataPetitionComplaintMapper.getMailRank(beginTime, endTime, 3, RepeatEnum.REPEAT_MAIL.getId()); - // 局属单位 - List bwzdFirstRankList = dataPetitionComplaintMapper.getMailRank(beginTime, endTime, 4, RepeatEnum.FIRST_MAIL.getId()); - List bwzdRepeatRankList = dataPetitionComplaintMapper.getMailRank(beginTime, endTime, 4, RepeatEnum.REPEAT_MAIL.getId()); - // 汇总(分县市局) - MailFirstAndRepeatOverviewVo fxsjOverview = new MailFirstAndRepeatOverviewVo(); - fxsjOverview.setFirstMail(fxsjFirstRankList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); - fxsjOverview.setRepeatMail(fxsjRepeatRankList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); - fxsjOverview.setLeaderMail(0); - // 汇总(局属单位) - MailFirstAndRepeatOverviewVo bwzdOverview = new MailFirstAndRepeatOverviewVo(); - bwzdOverview.setFirstMail(bwzdFirstRankList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); - bwzdOverview.setRepeatMail(bwzdRepeatRankList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); - bwzdOverview.setLeaderMail(0); - JSONObject data = new JSONObject() - .fluentPut("fxsjOverview", fxsjOverview) - .fluentPut("bwzdOverview", bwzdOverview) - .fluentPut("fxsjFirstRankList", fxsjFirstRankList) - .fluentPut("fxsjRepeatRankList", fxsjRepeatRankList) - .fluentPut("bwzdFirstRankList", bwzdFirstRankList) - .fluentPut("bwzdRepeatRankList", bwzdRepeatRankList); - - return Result.success(data); - } - - @Override - public Result getAllMailCount(DataVRequest request) { - MailOverviewVo overview = dataMailService.mailCount(request.getBeginTime(), request.getEndTime()); - long totalMail = overview.getCountryMail() + overview.getPoliceMail() + overview.getNumberMail(); - overview.setTotalMail(totalMail); - JSONObject data = new JSONObject().fluentPut("overview", overview); - return Result.success(data); - } - - @Override - public Result getEntanglementAndMassMail(DataVRequest request) { - Date beginTime = request.getBeginTime(); - Date endTime = request.getEndTime(); - // 分县市局 - List fxsjMassMailList = dataPetitionComplaintMapper.getMassMailRank(beginTime, endTime, 3); - List fxsjLeaderReviewMailList = dataPetitionComplaintMapper.getMailLeaderRank(beginTime, endTime, 3); - // 局属单位 - List bwzdMassMailList = dataPetitionComplaintMapper.getMassMailRank(beginTime, endTime, 4); - List bwzdLeaderReviewMailList = dataPetitionComplaintMapper.getMailLeaderRank(beginTime, endTime, 4); - // 汇总(分县市局) - MailEntanglementMassOverviewVo fxsjOverview = new MailEntanglementMassOverviewVo(); - fxsjOverview.setEntanglement(0); - fxsjOverview.setMass(fxsjMassMailList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); - fxsjOverview.setLeaderReview(fxsjLeaderReviewMailList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); - // 汇总(局属单位) - MailEntanglementMassOverviewVo bwzdOverview = new MailEntanglementMassOverviewVo(); - bwzdOverview.setEntanglement(0); - bwzdOverview.setMass(bwzdMassMailList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); - bwzdOverview.setLeaderReview(bwzdLeaderReviewMailList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); - JSONObject data = new JSONObject() - .fluentPut("fxsjOverview", fxsjOverview) - .fluentPut("bwzdOverview", bwzdOverview) - .fluentPut("fxsjMassMailList", fxsjMassMailList) - .fluentPut("bwzdMassMailList", bwzdMassMailList) - .fluentPut("fxsjLeaderReviewMailList", fxsjLeaderReviewMailList) - .fluentPut("bwzdLeaderReviewMailList", bwzdLeaderReviewMailList); - return Result.success(data); - } - - @Override - public Result getMailMapIcon(DataVRequest request) { - List res = new ArrayList<>(); - Date beginTime = request.getBeginTime(); - Date endTime = request.getEndTime(); - // 查询所有分县市局 - SupDepartQueryParam supDepartQueryParam = new SupDepartQueryParam(); - supDepartQueryParam.setStatisticsGroupId(3); - List fxsjDw = supDepartResourceService.query(supDepartQueryParam); - for (SupDepart supDepart : fxsjDw) { - MailMapIconVo mapIconVo = new MailMapIconVo(); - mapIconVo.setName(supDepart.getShortName()); - mapIconVo.setDepartId(supDepart.getId()); - res.add(mapIconVo); - } - for (MailMapIconVo re : res) { - String departId = re.getDepartId(); - // 国家信访 - Long countryTotal = dataPetitionComplaintMapper.selectMailBySourceCode(beginTime, endTime, GJXFPT.getValue(), departId); - // 公安信访 - Long policeTotal = dataPetitionComplaintMapper.selectMailBySourceCode(beginTime, endTime, GABXF.getValue(), departId); - // 12337 - Long numTotal = dataPetition12337Service.count(new LambdaQueryWrapper().between(DataPetition12337::getDiscoverTime, beginTime, endTime).eq(DataPetition12337::getSecondDepartId, departId)); - // 局长信箱 - QueryWrapper subOneMailQueryWrapper = new QueryWrapper<>(); - String exDepartId = supExternalDepartMapper.getExIdByInId(departId.toString(), EX_SOURCE); - subOneMailQueryWrapper.ne("mail_state", VALID_SIGN); - subOneMailQueryWrapper.eq("second_dept_id", exDepartId); - subOneMailQueryWrapper.between("create_time", beginTime, endTime); - Long commissionerTotal = mailMapper.selectCount(subOneMailQueryWrapper); - // 总数 - Long total = countryTotal + policeTotal + numTotal; - //国家信访 - re.setCountryTotal(countryTotal.toString()); - //公安部信访 - re.setPoliceTotal(policeTotal.toString()); - //局长信箱 - re.setCommissionerTotal(commissionerTotal.toString()); - //12337信访 - re.setNumTotal(numTotal.toString()); - re.setTotal(total.toString()); - } - JSONObject data = new JSONObject().fluentPut("mailMapIconList", res); - return Result.success(data); - } - - @Override - public Result getSubOneFirstAndRepeatMail(SubDataVRequest request) { - Date beginTime = request.getBeginTime(); - Date endTime = request.getEndTime(); - // 派出所 - List fxsjFirstRankList = dataPetitionComplaintMapper.getSubMailRank(beginTime, endTime, 10, RepeatEnum.FIRST_MAIL.getId(), request.getDepartId()); - List fxsjRepeatRankList = dataPetitionComplaintMapper.getSubMailRank(beginTime, endTime, 10, RepeatEnum.REPEAT_MAIL.getId(), request.getDepartId()); - // 大队 - List bwzdFirstRankList = dataPetitionComplaintMapper.getSubMailRank(beginTime, endTime, null, RepeatEnum.FIRST_MAIL.getId(), request.getDepartId()); - List bwzdRepeatRankList = dataPetitionComplaintMapper.getSubMailRank(beginTime, endTime, null, RepeatEnum.REPEAT_MAIL.getId(), request.getDepartId()); - // 汇总(派出所) - MailFirstAndRepeatOverviewVo fxsjOverview = new MailFirstAndRepeatOverviewVo(); - fxsjOverview.setFirstMail(fxsjFirstRankList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); - fxsjOverview.setRepeatMail(fxsjRepeatRankList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); - fxsjOverview.setLeaderMail(0); - // 汇总(大队) - MailFirstAndRepeatOverviewVo bwzdOverview = new MailFirstAndRepeatOverviewVo(); - bwzdOverview.setFirstMail(bwzdFirstRankList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); - bwzdOverview.setRepeatMail(bwzdRepeatRankList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); - bwzdOverview.setLeaderMail(0); - JSONObject data = new JSONObject() - .fluentPut("fxsjOverview", fxsjOverview) - .fluentPut("bwzdOverview", bwzdOverview) - .fluentPut("fxsjFirstRankList", fxsjFirstRankList) - .fluentPut("fxsjRepeatRankList", fxsjRepeatRankList) - .fluentPut("bwzdFirstRankList", bwzdFirstRankList) - .fluentPut("bwzdRepeatRankList", bwzdRepeatRankList); -// return getSubOneFirstAndRepeatMail(); - return Result.success(data); - } - - @Override - public Result getSubOneAllMailCount(SubDataVRequest request) { - MailOverviewVo overview = new MailOverviewVo(); - Date beginTime = request.getBeginTime(); - Date endTime = request.getEndTime(); - String departId = request.getDepartId(); - // 国家信访 - Long countryTotal = dataPetitionComplaintMapper.selectMailBySourceCode(beginTime, endTime, GJXFPT.getValue(), departId); - // 公安信访 - Long policeTotal = dataPetitionComplaintMapper.selectMailBySourceCode(beginTime, endTime, GABXF.getValue(), departId); - // 12337 - Long numTotal = dataPetition12337Service.count(new LambdaQueryWrapper().between(DataPetition12337::getDiscoverTime, beginTime, endTime).eq(DataPetition12337::getSecondDepartId, departId)); - // 局长信箱 - QueryWrapper subOneMailQueryWrapper = new QueryWrapper<>(); - String exDepartId = supExternalDepartMapper.getExIdByInId(departId.toString(), "局长信箱"); - subOneMailQueryWrapper.ne("mail_state", VALID_SIGN); - subOneMailQueryWrapper.eq("second_dept_id", exDepartId); - subOneMailQueryWrapper.between("create_time", beginTime, endTime); - Long commissionerTotal = mailMapper.selectCount(subOneMailQueryWrapper); - // 总数 - Long total = countryTotal + policeTotal + numTotal; - //国家信访 - overview.setCountryMail(countryTotal); - //公安部信访 - overview.setPoliceMail(policeTotal); - //局长信箱 - overview.setManageMail(commissionerTotal); - //12337信访 - overview.setNumberMail(numTotal); - overview.setTotalMail(total); -// overview.setCountryMail(120L); // 国家信访 -// overview.setPoliceMail(45L); // 公安部信访 -// overview.setNumberMail(30L); // 12337 -// overview.setManageMail(20L); // 局长信箱 -// overview.setTotalMail(120L + 45L + 30L); - JSONObject data = new JSONObject().fluentPut("overview", overview); - return Result.success(data); - } - - @Override - public Result getSubOneEntanglementAndMassMail(SubDataVRequest request) { - Date beginTime = request.getBeginTime(); - Date endTime = request.getEndTime(); - String departId = request.getDepartId(); - // 分县市局 - List fxsjMassMailList = dataPetitionComplaintMapper.getSubOneMassMailRank(beginTime, endTime, 10, departId); - List fxsjLeaderReviewMailList = dataPetitionComplaintMapper.getSubOneMailLeaderRank(beginTime, endTime, 10, departId); - // 局属单位 - List bwzdMassMailList = dataPetitionComplaintMapper.getSubOneMassMailRank(beginTime, endTime, null, departId); - List bwzdLeaderReviewMailList = dataPetitionComplaintMapper.getMailLeaderRank(beginTime, endTime, 4); - // 汇总(分县市局) - MailEntanglementMassOverviewVo fxsjOverview = new MailEntanglementMassOverviewVo(); - fxsjOverview.setEntanglement(0); - fxsjOverview.setMass(fxsjMassMailList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); - fxsjOverview.setLeaderReview(fxsjLeaderReviewMailList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); - // 汇总(局属单位) - MailEntanglementMassOverviewVo bwzdOverview = new MailEntanglementMassOverviewVo(); - bwzdOverview.setEntanglement(0); - bwzdOverview.setMass(bwzdMassMailList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); - bwzdOverview.setLeaderReview(bwzdLeaderReviewMailList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); - JSONObject data = new JSONObject() - .fluentPut("fxsjOverview", fxsjOverview) - .fluentPut("bwzdOverview", bwzdOverview) - .fluentPut("fxsjMassMailList", fxsjMassMailList) - .fluentPut("bwzdMassMailList", bwzdMassMailList) - .fluentPut("fxsjLeaderReviewMailList", fxsjLeaderReviewMailList) - .fluentPut("bwzdLeaderReviewMailList", bwzdLeaderReviewMailList); -// return mockSubOneEntanglementAndMassMail(); - return Result.success(data); - } - - @Override - public Result getSubOneMailMapIcon(SubDataVRequest request) { - List res = new ArrayList<>(); - String departId = request.getDepartId(); - Date beginTime = request.getBeginTime(); - Date endTime = request.getEndTime(); - // 查该区县局下属所有派出所 - List policeDeparts = supDepartMapper.selectPoliceDeparts(Integer.valueOf(departId)); - for (SupDepart supDepart : policeDeparts) { - MailMapIconVo mapIconVo = new MailMapIconVo(); - mapIconVo.setName(supDepart.getShortName()); - mapIconVo.setDepartId(supDepart.getId()); - res.add(mapIconVo); - } - // 查询国家信访和公安部信访数据 - for (MailMapIconVo re : res) { - String policeDepartId = re.getDepartId(); - // 国家 - Long countryTotal = dataPetitionComplaintMapper.selectPoliceMailBySourceCode(beginTime, endTime, GJXFPT.getValue(), policeDepartId); - // 公安 - Long policeTotal = dataPetitionComplaintMapper.selectPoliceMailBySourceCode(beginTime, endTime, GABXF.getValue(), policeDepartId); - // 12337 数据 - LambdaQueryWrapper dataPetition12337LambdaQueryWrapper = new LambdaQueryWrapper<>(); - dataPetition12337LambdaQueryWrapper.between(DataPetition12337::getDiscoverTime, beginTime, endTime); - dataPetition12337LambdaQueryWrapper.eq(DataPetition12337::getThirdDepartId, re.getDepartId()); - Long numTotal = dataPetition12337Service.count(dataPetition12337LambdaQueryWrapper); - // 局长信箱 - String exDepartId = supExternalDepartMapper.getExIdByInId(policeDepartId, EX_SOURCE); - Long manageMail = 0L; - if (exDepartId != null) { - QueryWrapper qw = new QueryWrapper<>(); - qw.ne("mail_state", VALID_SIGN); - qw.eq("three_dept_id", exDepartId); - qw.between("create_time", beginTime, endTime); - manageMail = mailMapper.selectCount(qw); - } - long country = countryTotal == null ? 0L : countryTotal; - long police = policeTotal == null ? 0L : policeTotal; - long num = numTotal == null ? 0L : numTotal; - long manage = manageMail == null ? 0L : manageMail; - Long total = country + police + num; - re.setCountryTotal(String.valueOf(country)); - re.setPoliceTotal(String.valueOf(police)); - re.setCommissionerTotal(String.valueOf(manage)); - re.setNumTotal(String.valueOf(num)); - re.setTotal(total.toString()); - } - JSONObject data = new JSONObject().fluentPut("mailMapIconList", res); -// return getSubOneMailMapIcon(); - return Result.success(data); - } - - @Override - public Result getVideoSuperviseProblemRank(DataVRequest request) { - List fxsjVideoSuperviseProblemRankList = new ArrayList<>(); - List jsdwVideoSuperviseProblemRankList = 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); - for (SupDepart fxsj : fxsjDw) { - List fxsjList = negativeMapper.getVideoSuperviseProblemRank(fxsj.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(fxsj.getShortName()); - organizeProblemRankVo.setCityNumber(String.valueOf(sjxf)); - organizeProblemRankVo.setCountyNumber(String.valueOf(xjxf)); - organizeProblemRankVo.setValue(String.valueOf(total)); - fxsjVideoSuperviseProblemRankList.add(organizeProblemRankVo); - } - for (SupDepart jsdw : jsdwDw) { - List fxsjList = negativeMapper.getVideoSuperviseProblemRank(jsdw.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(jsdw.getShortName()); - organizeProblemRankVo.setCityNumber(String.valueOf(sjxf)); - organizeProblemRankVo.setCountyNumber(String.valueOf(xjxf)); - organizeProblemRankVo.setValue(String.valueOf(total)); - jsdwVideoSuperviseProblemRankList.add(organizeProblemRankVo); - } - // 排序 - fxsjVideoSuperviseProblemRankList.sort( - Comparator.comparingLong((OrganizeProblemRankVo vo) -> Long.parseLong(vo.getValue())) - .reversed() - ); - jsdwVideoSuperviseProblemRankList.sort( - Comparator.comparingLong((OrganizeProblemRankVo vo) -> Long.parseLong(vo.getValue())) - .reversed() - ); - - JSONObject data = new JSONObject(); - data.fluentPut("fxsjVideoSuperviseProblemRankList", fxsjVideoSuperviseProblemRankList); - data.fluentPut("jsdwVideoSuperviseProblemRankList", jsdwVideoSuperviseProblemRankList); - return Result.success(data); - } - - @Override - public Result getChangedRank(DataVRequest request) { - List fxsjChangedRankList = new ArrayList<>(); - List jsdwChangedRankList = 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); - for (SupDepart fxsj : fxsjDw) { - List negativeList = negativeMapper.getChangedRank(fxsj.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(fxsj.getShortName()); - rankVo.setDepartId(fxsj.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); - } - for (SupDepart jsdw : jsdwDw) { - List negativeList = negativeMapper.getChangedRank(jsdw.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(jsdw.getShortName()); - rankVo.setDepartId(jsdw.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); - } - - fxsjChangedRankList.sort( - Comparator.comparingLong((RankVo vo) -> Long.parseLong(vo.getDenominator())) - .reversed() - ); - - jsdwChangedRankList.sort( - Comparator.comparingLong((RankVo vo) -> Long.parseLong(vo.getDenominator())) - .reversed() - ); - - long total = Stream.concat(fxsjChangedRankList.stream(), jsdwChangedRankList.stream()) - .mapToLong(vo -> Long.parseLong(vo.getDenominator())) - .sum(); - - 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 overview = new DayTimeSuperviseVo(); - overview.setProTotal((int) total); - overview.setProcessingNumber(processing); - overview.setCompletedNumber(completed); - overview.setCompletedRate(rate); - JSONObject data = new JSONObject() - .fluentPut("fxsjChangedRankList", fxsjChangedRankList) - .fluentPut("jsdwChangedRankList", jsdwChangedRankList) - .fluentPut("overview", overview); - return Result.success(data); - } - - @Override - public Result getSupervisionNotifyCount(DataVRequest request) { - SupervisionNotifyOverView overView = new SupervisionNotifyOverView(); - List proCode = List.of(XCDC.getValue(), LMGZ.getValue(), ZXDC.getValue()); - LambdaQueryWrapper negativeLambdaQueryWrapper = new LambdaQueryWrapper<>(); - negativeLambdaQueryWrapper.between(Negative::getCrtTime, request.getBeginTime(), request.getEndTime()); - negativeLambdaQueryWrapper.in(Negative::getProblemSourcesCode, proCode); - List negatives = negativeMapper.selectList(negativeLambdaQueryWrapper); - - 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(); - - LambdaQueryWrapper superviseReportLambdaQueryWrapper = new LambdaQueryWrapper<>(); -// UserAuth user = UserContextHolder.getCurrentUser(); -// // 权限 -// if (!AppConstants.USER_TYPE_SUPER.equals(user.getUserType()) && !user.getRoleCodes().contains(RoleCodeEnum.FIRST_ADMIN.getCode())) { -// if (user.getAuthDepartIds().isEmpty() || user.getRoleCodes().isEmpty()) { -// //特殊处理 -// overView.setReportNumber(0L); -// } -// List orgIds = supDepartService.getAllNodeIds(user.getAuthDepartIds()); -// superviseReportLambdaQueryWrapper.in(SuperviseReport::getCrtDepartId, orgIds); -// } - superviseReportLambdaQueryWrapper.between(SuperviseReport::getCrtTime, request.getBeginTime(), request.getEndTime()); - 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(); - - 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()); - // 通报期数 - overView.setReportNumber((long) superviseReportList.size()); - // 办理中 - 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); - } - - @Override - public Result getSupervisionNotifyMap(DataVRequest request) { - List superviseTempMapVoList = new ArrayList<>(); - SupDepartQueryParam supDepartQueryParam = new SupDepartQueryParam(); - supDepartQueryParam.setStatisticsGroupId(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId()); - List fxsjDw = supDepartResourceService.query(supDepartQueryParam); - List proCode = List.of(XCDC.getValue(), LMGZ.getValue(), ZXDC.getValue()); - - for (SupDepart fxsj : fxsjDw) { - SuperviseMapIconVo superviseMapIconVo = new SuperviseMapIconVo(); + // 案件核查 + NegativeQueryParam group17To20Param = new NegativeQueryParam(); + group17To20Param.setCrtTime(dates); + group17To20Param.setInvolveDepartIds(allDepartIds); + group17To20Param.setProblemSourcesCode(ProblemSourcesEnum.GROUP_17_18_19_20); + long caseVerificationProCount = negativeResourceService.count(group17To20Param); - List negatives = negativeMapper.getNegativeListData(fxsj.getId(), request.getBeginTime(), request.getEndTime(), proCode); - 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(); - // 暂不用通报期数 -// LambdaQueryWrapper superviseReportLambdaQueryWrapper = new LambdaQueryWrapper<>(); -// superviseReportLambdaQueryWrapper.between(SuperviseReport::getCrtTime, request.getBeginTime(), request.getEndTime()); -// 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(); + // 12337 + QueryWrapper queryWrapper12337 = new QueryWrapper<>(); + queryWrapper12337.between("discover_time", request.getBeginTime(), request.getEndTime()); + queryWrapper12337.and(wrapper -> wrapper + .in("third_depart_id", allDepartIds) + .or() + .in("second_depart_id", allDepartIds)); + long xf12337Count = dataPetition12337Mapper.selectCount(queryWrapper12337); + // 国家信访 + DataPetitionComplaintQueryParam countryParam = new DataPetitionComplaintQueryParam(); + countryParam.setCreateTime(dates); + countryParam.setSecondDepartIds(Collections.singleton(departDto.getParentId())); + countryParam.setProblemSourcesCode(ProblemSourcesEnum.GJXFPT.getValue()); + long countryMail = dataPetitionComplaintResourceService.count(countryParam); + // 公安部门信访 + DataPetitionComplaintQueryParam policeParam = new DataPetitionComplaintQueryParam(); + policeParam.setCreateTime(dates); + policeParam.setSecondDepartIds(Collections.singleton(departDto.getParentId())); + policeParam.setProblemSourcesCode(ProblemSourcesEnum.GABXF.getValue()); + long policeMail = dataPetitionComplaintResourceService.count(policeParam); + // 审计项目数 + ReportProjectQueryParam reportProjectQueryParam = new ReportProjectQueryParam(); + reportProjectQueryParam.setArchivingStart(request.getBeginTime()); + reportProjectQueryParam.setArchivingEnd(request.getEndTime()); + reportProjectQueryParam.setAuditUnitIds(allDepartIds); + long reportProjectCount = reportProjectResourceService.count(reportProjectQueryParam); + // 局长信箱 + SupExternalDepartQueryParam supExternalDepartQueryParam = new SupExternalDepartQueryParam(); + supExternalDepartQueryParam.setInternalIds(Collections.singleton(departDto.getParentId())); + supExternalDepartQueryParam.setSource("局长信箱"); + List supExternalDepartList = supExternalDepartResourceService.query(supExternalDepartQueryParam); + SupExternalDepart depart = Optional + .ofNullable(supExternalDepartList) + .filter(list -> !list.isEmpty()) + .map(list -> list.get(0)) + .orElseThrow(() -> new RuntimeException("未查询到" + departDto.getParentName() + "的外部部门信息")); +// MailQueryParam mailQueryParam = new MailQueryParam(); +// mailQueryParam.setSecondDeptId(depart.getExternalId()); +// mailQueryParam.setMailTime(dates); +// long mailCount = mailResourceService.count(mailQueryParam); - NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); - negativeBlameQueryParam.setNegativeIds(negativeIds); - List negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam); + QueryWrapper mailQueryWrapper = new QueryWrapper<>(); + mailQueryWrapper.ne("mail_state", VALID_SIGN); + mailQueryWrapper.between("mail_time", request.getBeginTime(), request.getEndTime()); + mailQueryWrapper.in("second_dept_id", depart.getExternalId()); + long mailCount = mailMapper.selectCount(mailQueryWrapper); - // 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); + globalMapIconVo.setSupervisionPro(supervisionProCount); + globalMapIconVo.setNumSupervisionPro(numSupervisionProCount); + globalMapIconVo.setCaseVerificationPro(caseVerificationProCount); + globalMapIconVo.setComplaintPro(xf12337Count + countryMail + policeMail); + globalMapIconVo.setAuditPro(reportProjectCount); + globalMapIconVo.setMailboxNumber(mailCount); + globalMapIconVo.calcTotal(); + globalMapIconVoList.add(globalMapIconVo); } - JSONObject data = new JSONObject().fluentPut("superviseTempMapVoList", superviseTempMapVoList); + JSONObject data = new JSONObject().fluentPut("globalTempMapVoList", globalMapIconVoList); return Result.success(data); } + // endregion - + // region 视频督察一级 + // 视频督察一级大屏问题排名 @Override - public Result getYellowBetDrug(DataVRequest request) { - List countyRankList = new ArrayList<>(); - List bureauRankList = new ArrayList<>(); + public Result getVideoSuperviseProblemRank(DataVRequest request) { + List fxsjVideoSuperviseProblemRankList = new ArrayList<>(); + List jsdwVideoSuperviseProblemRankList = 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)) { + List fxsjList = negativeMapper.getVideoSuperviseProblemRank(fxsj.getId(), request.getBeginTime(), request.getEndTime()); + // 总数 + long total = fxsjList.size(); + if (total == 0) { continue; } - for (Negative negative : negativeList) { - totalNegativeMap.put(negative.getId(), negative); - } + // 市局下发 + 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(fxsj.getShortName()); - organizeProblemRankVo.setValue(String.valueOf(negativeList.size())); - countyRankList.add(organizeProblemRankVo); - + organizeProblemRankVo.setCityNumber(String.valueOf(sjxf)); + organizeProblemRankVo.setCountyNumber(String.valueOf(xjxf)); + organizeProblemRankVo.setValue(String.valueOf(total)); + fxsjVideoSuperviseProblemRankList.add(organizeProblemRankVo); } - for (SupDepart jsdw : jsdwDw) { - List negativeList = negativeMapper.getYellowBetNegativeList(jsdw.getId(), request.getBeginTime(), request.getEndTime(), request.getSpecialSupervision()); - if (CollectionUtil.isEmpty(negativeList)) { + List fxsjList = negativeMapper.getVideoSuperviseProblemRank(jsdw.getId(), request.getBeginTime(), request.getEndTime()); + // 总数 + long total = fxsjList.size(); + if (total == 0) { continue; } - for (Negative negative : negativeList) { - totalNegativeMap.put(negative.getId(), negative); - } + // 市局下发 + 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(jsdw.getShortName()); - organizeProblemRankVo.setValue(String.valueOf(negativeList.size())); - bureauRankList.add(organizeProblemRankVo); + organizeProblemRankVo.setCityNumber(String.valueOf(sjxf)); + organizeProblemRankVo.setCountyNumber(String.valueOf(xjxf)); + organizeProblemRankVo.setValue(String.valueOf(total)); + jsdwVideoSuperviseProblemRankList.add(organizeProblemRankVo); } + // 排序 + fxsjVideoSuperviseProblemRankList.sort( + Comparator.comparingLong((OrganizeProblemRankVo vo) -> Long.parseLong(vo.getValue())) + .reversed() + ); + jsdwVideoSuperviseProblemRankList.sort( + Comparator.comparingLong((OrganizeProblemRankVo vo) -> Long.parseLong(vo.getValue())) + .reversed() + ); - // 排序 - 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); + JSONObject data = new JSONObject(); + data.fluentPut("fxsjVideoSuperviseProblemRankList", fxsjVideoSuperviseProblemRankList); + data.fluentPut("jsdwVideoSuperviseProblemRankList", jsdwVideoSuperviseProblemRankList); return Result.success(data); } - + // 视频督察一级 总览 @Override public Result getAllVideoSuperviseCount(DataVRequest request) { @@ -1471,6 +468,8 @@ public class DatavServiceImpl implements DatavService { return Result.success(data); } + + // 视频督察一级地图数据 @Override public Result getVideoSuperviseMap(DataVRequest request) { @@ -1525,93 +524,143 @@ public class DatavServiceImpl implements DatavService { return Result.success(data); } + // endregion + // region 现场专项一级 + // 现场专项一级大屏 现场督察卡片 @Override - public Result getSubOneVideoSuperviseProblemRank(SubDataVRequest request) { - - - List policeVideoSuperviseProblemRankList = new ArrayList<>(); - List teamVideoSuperviseProblemRankList = new ArrayList<>(); - SupDepartQueryParam supDepartGroupParam = new SupDepartQueryParam(); - supDepartGroupParam.setLevel("3"); - supDepartGroupParam.setPid(request.getDepartId()); - List supDepartList = supDepartResourceService.query(supDepartGroupParam); - // 派出所 - List pcsList = supDepartList.stream() - .filter(one -> StrUtil.isNotBlank(one.getStatisticsGroupId())) - .filter(one -> DepartGroupEnum.PCS.getId().equals(Integer.valueOf(one.getStatisticsGroupId()))) - .toList(); - - // 大队 - List dwList = supDepartList.stream() - .filter(one -> { - String groupId = one.getStatisticsGroupId(); - return !StrUtil.isNotBlank(groupId) - || !DepartGroupEnum.PCS.getId().equals(Integer.valueOf(groupId)); - }) - .toList(); - - for (SupDepart pcs : pcsList) { - List fxsjList = negativeMapper.getVideoSuperviseProblemRank(pcs.getId(), request.getBeginTime(), request.getEndTime()); - // 总数 - long total = fxsjList.size(); - if (total == 0) { + public Result getChangedRank(DataVRequest request) { + List fxsjChangedRankList = new ArrayList<>(); + List jsdwChangedRankList = 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); + for (SupDepart fxsj : fxsjDw) { + List negativeList = negativeMapper.getChangedRank(fxsj.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 = fxsjList.stream().filter(one -> Integer.valueOf(0).equals(one.getCrtDepartLevel())).count(); + long sjxf = negativeList.stream().filter(Objects::nonNull).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); + 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(fxsj.getShortName()); + rankVo.setDepartId(fxsj.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); } - - - for (SupDepart dw : dwList) { - List fxsjList = negativeMapper.getVideoSuperviseProblemRank(dw.getId(), request.getBeginTime(), request.getEndTime()); - // 总数 - long total = fxsjList.size(); - if (total == 0) { + for (SupDepart jsdw : jsdwDw) { + List negativeList = negativeMapper.getChangedRank(jsdw.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 = fxsjList.stream().filter(one -> Integer.valueOf(0).equals(one.getCrtDepartLevel())).count(); + long sjxf = negativeList.stream().filter(Objects::nonNull).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); + 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(jsdw.getShortName()); + rankVo.setDepartId(jsdw.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); } - // 排序 - policeVideoSuperviseProblemRankList.sort( - Comparator.comparingLong((OrganizeProblemRankVo vo) -> Long.parseLong(vo.getValue())) + fxsjChangedRankList.sort( + Comparator.comparingLong((RankVo vo) -> Long.parseLong(vo.getDenominator())) .reversed() ); - teamVideoSuperviseProblemRankList.sort( - Comparator.comparingLong((OrganizeProblemRankVo vo) -> Long.parseLong(vo.getValue())) + + jsdwChangedRankList.sort( + Comparator.comparingLong((RankVo vo) -> Long.parseLong(vo.getDenominator())) .reversed() ); - JSONObject data = new JSONObject(); - data.fluentPut("policeVideoSuperviseProblemRankList", policeVideoSuperviseProblemRankList); - data.fluentPut("teamVideoSuperviseProblemRankList", teamVideoSuperviseProblemRankList); + + long total = Stream.concat(fxsjChangedRankList.stream(), jsdwChangedRankList.stream()) + .mapToLong(vo -> Long.parseLong(vo.getDenominator())) + .sum(); + + 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 overview = new DayTimeSuperviseVo(); + overview.setProTotal((int) total); + overview.setProcessingNumber(processing); + overview.setCompletedNumber(completed); + overview.setCompletedRate(rate); + JSONObject data = new JSONObject() + .fluentPut("fxsjChangedRankList", fxsjChangedRankList) + .fluentPut("jsdwChangedRankList", jsdwChangedRankList) + .fluentPut("overview", overview); 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(); + public Result getSupervisionNotifyCount(DataVRequest request) { + SupervisionNotifyOverView overView = new SupervisionNotifyOverView(); + List proCode = List.of(XCDC.getValue(), LMGZ.getValue(), ZXDC.getValue()); + LambdaQueryWrapper negativeLambdaQueryWrapper = new LambdaQueryWrapper<>(); + negativeLambdaQueryWrapper.between(Negative::getCrtTime, request.getBeginTime(), request.getEndTime()); + negativeLambdaQueryWrapper.in(Negative::getProblemSourcesCode, proCode); + List negatives = negativeMapper.selectList(negativeLambdaQueryWrapper); + 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(); + + LambdaQueryWrapper superviseReportLambdaQueryWrapper = new LambdaQueryWrapper<>(); +// UserAuth user = UserContextHolder.getCurrentUser(); +// // 权限 +// if (!AppConstants.USER_TYPE_SUPER.equals(user.getUserType()) && !user.getRoleCodes().contains(RoleCodeEnum.FIRST_ADMIN.getCode())) { +// if (user.getAuthDepartIds().isEmpty() || user.getRoleCodes().isEmpty()) { +// //特殊处理 +// overView.setReportNumber(0L); +// } +// List orgIds = supDepartService.getAllNodeIds(user.getAuthDepartIds()); +// superviseReportLambdaQueryWrapper.in(SuperviseReport::getCrtDepartId, orgIds); +// } + superviseReportLambdaQueryWrapper.between(SuperviseReport::getCrtTime, request.getBeginTime(), request.getEndTime()); + 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(); + NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); - negativeBlameQueryParam.setNegativeIds(ssList.stream().map(Negative::getId).toList()); + negativeBlameQueryParam.setNegativeIds(negativeIds); List negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam); // 3. 个人问责 @@ -1637,77 +686,163 @@ public class DatavServiceImpl implements DatavService { .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); + // 通报问题数 + overView.setProblemNumber(negatives.size()); + // 通报期数 + overView.setReportNumber((long) superviseReportList.size()); + // 办理中 + 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); } + // 现场专项一级地图 @Override - public Result getSubOneVideoSuperviseMap(SubDataVRequest request) { + public Result getSupervisionNotifyMap(DataVRequest request) { + List superviseTempMapVoList = new ArrayList<>(); + SupDepartQueryParam supDepartQueryParam = new SupDepartQueryParam(); + supDepartQueryParam.setStatisticsGroupId(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId()); + List fxsjDw = supDepartResourceService.query(supDepartQueryParam); + List proCode = List.of(XCDC.getValue(), LMGZ.getValue(), ZXDC.getValue()); - List videoSuperviseMapIconVoList = new ArrayList<>(); - String departId = request.getDepartId(); - Date beginTime = request.getBeginTime(); - Date endTime = request.getEndTime(); + for (SupDepart fxsj : fxsjDw) { + SuperviseMapIconVo superviseMapIconVo = new SuperviseMapIconVo(); - List proCode = List.of(SPDC.getValue()); + List negatives = negativeMapper.getNegativeListData(fxsj.getId(), request.getBeginTime(), request.getEndTime(), proCode); + 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(); + // 暂不用通报期数 +// LambdaQueryWrapper superviseReportLambdaQueryWrapper = new LambdaQueryWrapper<>(); +// superviseReportLambdaQueryWrapper.between(SuperviseReport::getCrtTime, request.getBeginTime(), request.getEndTime()); +// 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(); + + + 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); - // 查该区县局下属所有派出所 - List policeDeparts = supDepartMapper.selectPoliceDeparts(Integer.valueOf(departId)); - for (SupDepart pcs : policeDeparts) { + } - List negatives = negativeMapper.getNegativeListData(pcs.getId(), request.getBeginTime(), request.getEndTime(), proCode); + 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); + } - 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); + // 排序 + 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(); - // 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(); + 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(); - 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); + 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); - } - videoSuperviseMapIconVoList.forEach(VideoSuperviseMapIconVo::initDefaultIfNull); - JSONObject data = new JSONObject().fluentPut("videoSuperviseMapIconVoList", videoSuperviseMapIconVoList); + JSONObject data = new JSONObject() + .fluentPut("overView", overView) +// .fluentPut("countyOverview", countyOverview) + .fluentPut("countyRankList", countyRankList) +// .fluentPut("bureauOverview", bureauOverview) + .fluentPut("bureauRankList", bureauRankList); return Result.success(data); } + // endregion - + // region案件核查一级 + // 案件核查一级分县市局排名 @Override public Result getCaseVerificationRank(DataVRequest request) { List proCode = List.of(A12389.getValue(), SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); @@ -1758,6 +893,66 @@ public class DatavServiceImpl implements DatavService { return Result.success(data); } + // 案件核查一级总览数据 + @Override + public Result getAllCaseVerificationCount(DataVRequest request) { + // 交办 + Set ldjbCode = Set.of(SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); + CaseVerificationCountVo overview = new CaseVerificationCountVo(); + LambdaQueryWrapper dataCaseVerifLambdaQueryWrapper = new LambdaQueryWrapper<>(); + dataCaseVerifLambdaQueryWrapper.between(DataCaseVerif::getCreateTime, request.getBeginTime(), request.getEndTime()); + List dataCaseVerifs = dataCaseVerifMapper.selectList(dataCaseVerifLambdaQueryWrapper); + NegativeQueryParam negativeQueryParam = new NegativeQueryParam(); + negativeQueryParam.setCrtTime(List.of(request.getBeginTime(), request.getEndTime())); + negativeQueryParam.setProblemSourcesCode(List.of(A12389.getValue(), SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue())); + List negatives = negativeResourceService.query(negativeQueryParam); + // 交办案件数 + List jbNegatvieList = negatives.stream().filter(one -> ldjbCode.contains(one.getProblemSourcesCode())).toList(); + // 属实问题 + List ssNegative = negatives.stream() + .filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList(); + + NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); + negativeBlameQueryParam.setNegativeIds(ssNegative.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(); + //计算查实率(向上取整) + Double verificationRate = 0.0; + if (!dataCaseVerifs.isEmpty()) { + double rawRate = (double) ssNegative.size() / (dataCaseVerifs.size() + jbNegatvieList.size()) * 100; + verificationRate = Math.round(rawRate * 10) / 10.0; + } + overview.setTotal(dataCaseVerifs.size() + jbNegatvieList.size()); + overview.setConfirmed(ssNegative.size()); + overview.setDealCasePro((long) negatives.size()); + overview.setPunishPre((long) (personalBlames.size() + leadBlames.size())); + overview.setPunishOrg((long) unitBlames.size()); + overview.setRate(verificationRate); + JSONObject res = new JSONObject().fluentPut("overview", overview); + return Result.success(res); + } + + // 案件核查一级地图数据 @Override public Result getCaseVerificationMap(DataVRequest request) { @@ -1825,12 +1020,12 @@ public class DatavServiceImpl implements DatavService { return Result.success(res); } + + // 案件核查 一级大屏 案件来源占比 & 问责处理情况 @Override public Result getCaseSourceRateAndDealSituation(DataVRequest request) { - List caseSourceRateList = new ArrayList<>(); List dealSituationPieList = new ArrayList<>(); - // 交办 Set ldjbCode = Set.of(SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); LambdaQueryWrapper dataCaseVerifLambdaQueryWrapper = new LambdaQueryWrapper<>(); @@ -1841,7 +1036,6 @@ public class DatavServiceImpl implements DatavService { negativeQueryParam.setProblemSourcesCode(List.of(A12389.getValue(), SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue())); List negatives = negativeResourceService.query(negativeQueryParam); - // 案件来源占比 // 1、找到案件核查案件数 caseSourceRateList.add(new EchartsVo("12389投诉", dataCaseVerifs.size())); @@ -1877,313 +1071,450 @@ public class DatavServiceImpl implements DatavService { caseSourceRateList = filterZero(caseSourceRateList); dealSituationPieList = filterZero(dealSituationPieList); JSONObject data = new JSONObject() - .fluentPut("caseSourceRateList", caseSourceRateList) - .fluentPut("dealSituationPieList", dealSituationPieList); + .fluentPut("caseSourceRateList", caseSourceRateList) + .fluentPut("dealSituationPieList", dealSituationPieList); + return Result.success(data); + + } + + // endregion案件核查一级 + + // region 信访投诉一级 + // 一级初重信访 + @Override + public Result getFirstAndRepeatMail(DataVRequest request) { + Date beginTime = request.getBeginTime(); + Date endTime = request.getEndTime(); + // 分县市局 + List fxsjFirstRankList = dataPetitionComplaintMapper.getMailRank(beginTime, endTime, 3, RepeatEnum.FIRST_MAIL.getId()); + List fxsjRepeatRankList = dataPetitionComplaintMapper.getMailRank(beginTime, endTime, 3, RepeatEnum.REPEAT_MAIL.getId()); + // 局属单位 + List bwzdFirstRankList = dataPetitionComplaintMapper.getMailRank(beginTime, endTime, 4, RepeatEnum.FIRST_MAIL.getId()); + List bwzdRepeatRankList = dataPetitionComplaintMapper.getMailRank(beginTime, endTime, 4, RepeatEnum.REPEAT_MAIL.getId()); + // 汇总(分县市局) + MailFirstAndRepeatOverviewVo fxsjOverview = new MailFirstAndRepeatOverviewVo(); + fxsjOverview.setFirstMail(fxsjFirstRankList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); + fxsjOverview.setRepeatMail(fxsjRepeatRankList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); + fxsjOverview.setLeaderMail(0); + // 汇总(局属单位) + MailFirstAndRepeatOverviewVo bwzdOverview = new MailFirstAndRepeatOverviewVo(); + bwzdOverview.setFirstMail(bwzdFirstRankList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); + bwzdOverview.setRepeatMail(bwzdRepeatRankList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); + bwzdOverview.setLeaderMail(0); + JSONObject data = new JSONObject() + .fluentPut("fxsjOverview", fxsjOverview) + .fluentPut("bwzdOverview", bwzdOverview) + .fluentPut("fxsjFirstRankList", fxsjFirstRankList) + .fluentPut("fxsjRepeatRankList", fxsjRepeatRankList) + .fluentPut("bwzdFirstRankList", bwzdFirstRankList) + .fluentPut("bwzdRepeatRankList", bwzdRepeatRankList); + + return Result.success(data); + } + + // 一级信访投诉占比 & 中央数据统计 + @Override + public Result getAllMailCount(DataVRequest request) { + MailOverviewVo overview = dataMailService.mailCount(request.getBeginTime(), request.getEndTime()); + long totalMail = overview.getCountryMail() + overview.getPoliceMail() + overview.getNumberMail(); + overview.setTotalMail(totalMail); + JSONObject data = new JSONObject().fluentPut("overview", overview); + return Result.success(data); + } + + + // 一级信访地图 + @Override + public Result getMailMapIcon(DataVRequest request) { + List res = new ArrayList<>(); + Date beginTime = request.getBeginTime(); + Date endTime = request.getEndTime(); + // 查询所有分县市局 + SupDepartQueryParam supDepartQueryParam = new SupDepartQueryParam(); + supDepartQueryParam.setStatisticsGroupId(3); + List fxsjDw = supDepartResourceService.query(supDepartQueryParam); + for (SupDepart supDepart : fxsjDw) { + MailMapIconVo mapIconVo = new MailMapIconVo(); + mapIconVo.setName(supDepart.getShortName()); + mapIconVo.setDepartId(supDepart.getId()); + res.add(mapIconVo); + } + for (MailMapIconVo re : res) { + String departId = re.getDepartId(); + // 国家信访 + Long countryTotal = dataPetitionComplaintMapper.selectMailBySourceCode(beginTime, endTime, GJXFPT.getValue(), departId); + // 公安信访 + Long policeTotal = dataPetitionComplaintMapper.selectMailBySourceCode(beginTime, endTime, GABXF.getValue(), departId); + // 12337 + Long numTotal = dataPetition12337Service.count(new LambdaQueryWrapper().between(DataPetition12337::getDiscoverTime, beginTime, endTime).eq(DataPetition12337::getSecondDepartId, departId)); + // 局长信箱 + QueryWrapper subOneMailQueryWrapper = new QueryWrapper<>(); + String exDepartId = supExternalDepartMapper.getExIdByInId(departId.toString(), EX_SOURCE); + subOneMailQueryWrapper.ne("mail_state", VALID_SIGN); + subOneMailQueryWrapper.eq("second_dept_id", exDepartId); + subOneMailQueryWrapper.between("create_time", beginTime, endTime); + Long commissionerTotal = mailMapper.selectCount(subOneMailQueryWrapper); + // 总数 + Long total = countryTotal + policeTotal + numTotal; + //国家信访 + re.setCountryTotal(countryTotal.toString()); + //公安部信访 + re.setPoliceTotal(policeTotal.toString()); + //局长信箱 + re.setCommissionerTotal(commissionerTotal.toString()); + //12337信访 + re.setNumTotal(numTotal.toString()); + re.setTotal(total.toString()); + } + JSONObject data = new JSONObject().fluentPut("mailMapIconList", res); + return Result.success(data); + } + + // 一级信访集访情况 + @Override + public Result getEntanglementAndMassMail(DataVRequest request) { + Date beginTime = request.getBeginTime(); + Date endTime = request.getEndTime(); + // 分县市局 + List fxsjMassMailList = dataPetitionComplaintMapper.getMassMailRank(beginTime, endTime, 3); + List fxsjLeaderReviewMailList = dataPetitionComplaintMapper.getMailLeaderRank(beginTime, endTime, 3); + // 局属单位 + List bwzdMassMailList = dataPetitionComplaintMapper.getMassMailRank(beginTime, endTime, 4); + List bwzdLeaderReviewMailList = dataPetitionComplaintMapper.getMailLeaderRank(beginTime, endTime, 4); + // 汇总(分县市局) + MailEntanglementMassOverviewVo fxsjOverview = new MailEntanglementMassOverviewVo(); + fxsjOverview.setEntanglement(0); + fxsjOverview.setMass(fxsjMassMailList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); + fxsjOverview.setLeaderReview(fxsjLeaderReviewMailList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); + // 汇总(局属单位) + MailEntanglementMassOverviewVo bwzdOverview = new MailEntanglementMassOverviewVo(); + bwzdOverview.setEntanglement(0); + bwzdOverview.setMass(bwzdMassMailList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); + bwzdOverview.setLeaderReview(bwzdLeaderReviewMailList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); + JSONObject data = new JSONObject() + .fluentPut("fxsjOverview", fxsjOverview) + .fluentPut("bwzdOverview", bwzdOverview) + .fluentPut("fxsjMassMailList", fxsjMassMailList) + .fluentPut("bwzdMassMailList", bwzdMassMailList) + .fluentPut("fxsjLeaderReviewMailList", fxsjLeaderReviewMailList) + .fluentPut("bwzdLeaderReviewMailList", bwzdLeaderReviewMailList); return Result.success(data); - } + // endregion + // region审计监督一级 @Override - public Result getSubOneCaseVerificationRank(SubDataVRequest request) { + public Result getAuditNegativeVo(DataVRequest request) { + // 排名 + 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); + List fxData = buildAuditNegativeVoList(fxsjDw, request); + List jsData = buildAuditNegativeVoList(jsdwDw, request); + // 总览 + AuditOverview auditOverview = new AuditOverview(); + if (ZFTZSJ.getValue().equals(request.getAuditType())) { + ReportProjectQueryParam reportProjectQueryParam = new ReportProjectQueryParam(); + reportProjectQueryParam.setPublicationDateStart(request.getBeginTime()); + reportProjectQueryParam.setPublicationDateEnd(request.getEndTime()); + List reportProjects = reportProjectResourceService.query(reportProjectQueryParam); + NegativeQueryParam negativeQueryParam = new NegativeQueryParam(); + negativeQueryParam.setCrtTime(List.of(request.getBeginTime(), request.getEndTime())); + negativeQueryParam.setProblemSourcesCode(List.of(ZFTZSJ.getValue())); + List negativeListData = negativeResourceService.query(negativeQueryParam); + BlameResult blameResult = this.buildBlameResult(negativeListData); + BigDecimal zftzje = this.sumAmountInWan(reportProjects, ReportProject::getReportMoney); + BigDecimal zftzsjje = this.sumAmountInWan(reportProjects, ReportProject::getArchivingReduceMoney); - List proCode = List.of(A12389.getValue(), SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); - List level3ByPidSupDepartList = supDepartResourceService.getLevel3ByPidSupDepartList(request.getDepartId()); - // 派出所 - List pcsList = level3ByPidSupDepartList.stream() - .filter(one -> StrUtil.isNotBlank(one.getStatisticsGroupId())) - .filter(one -> DepartGroupEnum.PCS.getId().equals(Integer.valueOf(one.getStatisticsGroupId()))) - .toList(); - // 大队 - List dwList = level3ByPidSupDepartList.stream() - .filter(one -> { - String groupId = one.getStatisticsGroupId(); - return !StrUtil.isNotBlank(groupId) - || !DepartGroupEnum.PCS.getId().equals(Integer.valueOf(groupId)); - }) - .toList(); - List fxsjRankList = new ArrayList<>(); - List jsdwRankList = new ArrayList<>(); - for (SupDepart pcs : pcsList) { - List negatives = negativeMapper.getNegativeListData(pcs.getId(), request.getBeginTime(), request.getEndTime(), proCode); - if (CollectionUtil.isEmpty(negatives)) { - continue; - } + auditOverview.setProjectNumber(BigDecimal.valueOf(reportProjects.size())); + auditOverview.setAuditAmount(zftzje); + auditOverview.setAuditSjAmount(zftzsjje); + auditOverview.setNegativeNumber(negativeListData.size()); + auditOverview.setAccountableNumber((long) (blameResult.personalBlames().size() + blameResult.leadBlames().size())); + } else { + DataAuditQueryParam dataAuditQueryParam = new DataAuditQueryParam(); + dataAuditQueryParam.setAuditTimeStart(toLocalDateTime(request.getBeginTime())); + dataAuditQueryParam.setAuditTimeEnd(toLocalDateTime(request.getEndTime())); + dataAuditQueryParam.setAuditType(request.getAuditType()); + List dataAuditList = dataAuditResourceService.query(dataAuditQueryParam); + NegativeQueryParam negativeQueryParam = new NegativeQueryParam(); + negativeQueryParam.setCrtTime(List.of(request.getBeginTime(), request.getEndTime())); + negativeQueryParam.setProblemSourcesCode(List.of(request.getAuditType())); + List negativeListData = negativeResourceService.query(negativeQueryParam); + BlameResult blameResult = this.buildBlameResult(negativeListData); + BigDecimal je = this.sumAmount(dataAuditList, DataAudit::getAuditAmount, new BigDecimal(1)); + BigDecimal zsjje = this.sumAmount(dataAuditList, DataAudit::getIssueAmount, new BigDecimal(1)); + auditOverview.setProjectNumber(BigDecimal.valueOf(dataAuditList.size())); + auditOverview.setAuditAmount(je); + auditOverview.setAuditSjAmount(zsjje); + auditOverview.setNegativeNumber(negativeListData.size()); + auditOverview.setAccountableNumber((long) (blameResult.personalBlames().size() + blameResult.leadBlames().size())); - OrganizeProblemRankVo organizeProblemRankVo = new OrganizeProblemRankVo(); - organizeProblemRankVo.setLabel(pcs.getShortName()); - organizeProblemRankVo.setValue(String.valueOf(negatives.size())); - fxsjRankList.add(organizeProblemRankVo); } - for (SupDepart dw : dwList) { - List negatives = negativeMapper.getNegativeListData(dw.getId(), request.getBeginTime(), request.getEndTime(), proCode); - if (CollectionUtil.isEmpty(negatives)) { - continue; - } - OrganizeProblemRankVo organizeProblemRankVo = new OrganizeProblemRankVo(); - organizeProblemRankVo.setLabel(dw.getShortName()); - organizeProblemRankVo.setValue(String.valueOf(negatives.size())); - jsdwRankList.add(organizeProblemRankVo); + JSONObject object = new JSONObject(); + object.fluentPut("fxData", fxData); + object.fluentPut("jsData", jsData); + object.fluentPut("leftOverview", auditOverview); + return Result.success(object); + } + + + // 审计项目类型 + @Override + public Result getAuditType(DataVRequest request) { + DataAuditQueryParam dataAuditQueryParam = new DataAuditQueryParam(); + dataAuditQueryParam.setAuditTimeStart(request.getBeginTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + dataAuditQueryParam.setAuditTimeEnd(request.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + List dataAuditList = dataAuditResourceService.query(dataAuditQueryParam); + List barData = dataAuditList.stream() + .collect(Collectors.groupingBy(DataAudit::getAuditTypeName, Collectors.counting())) + .entrySet().stream() + .map(entry -> new EchartsVo(entry.getKey(), entry.getValue().intValue())) + .collect(Collectors.toList()); + ReportProjectQueryParam reportProjectQueryParam = new ReportProjectQueryParam(); + reportProjectQueryParam.setPublicationDateStart(request.getBeginTime()); + reportProjectQueryParam.setPublicationDateEnd(request.getEndTime()); + List reportProjects = reportProjectResourceService.query(reportProjectQueryParam); + if (CollectionUtil.isNotEmpty(reportProjects)) { + EchartsVo echartsVo = new EchartsVo(); + echartsVo.setName("政府投资审计"); + echartsVo.setValue(reportProjects.size()); + barData.add(echartsVo); } + JSONObject object = new JSONObject(); + object.fluentPut("barData", barData); + return Result.success(object); + } - // 排序 - fxsjRankList.sort( - Comparator.comparingLong((OrganizeProblemRankVo vo) -> Long.parseLong(vo.getValue())) - .reversed() - ); - jsdwRankList.sort( - Comparator.comparingLong((OrganizeProblemRankVo vo) -> Long.parseLong(vo.getValue())) - .reversed() - ); + // 审计总览 + @Override + public Result aduitOverview(DataVRequest request) { + Date beginTime = request.getBeginTime(); + Date endTime = request.getEndTime(); + List negatives = negativeService.list(new LambdaQueryWrapper().between(Negative::getCrtTime, beginTime, DateUtil.endOfDay(endTime)) + .in(Negative::getProblemSourcesCode, List.of(ProblemSourcesEnum.ZFTZSJ.getValue(), ProblemSourcesEnum.ZFSACFSS.getValue(), ProblemSourcesEnum.JJZRSJ.getValue(), ProblemSourcesEnum.ZXSJ.getValue()))); + BlameResult blameResult = buildBlameResult(negatives); + // 政府投资数据 + ReportProjectQueryParam reportProjectQueryParam = new ReportProjectQueryParam(); + reportProjectQueryParam.setArchivingStart(beginTime); + reportProjectQueryParam.setArchivingEnd(endTime); + reportProjectQueryParam.setDeleteFlag(DeleteStatusEnum.NO.getCode()); + reportProjectQueryParam.setNode(ReportProjectNodeEnum.END.getCode()); + List reportProjects = reportProjectResourceService.query(reportProjectQueryParam); + // 政府投资审计金额 + BigDecimal zftzje = reportProjects.stream().map(ReportProject::getReportMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP); + // 政府投资审减金额 + BigDecimal zftzsjje = reportProjects.stream().map(ReportProject::getArchivingReduceMoney).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP); + // 其他审计数据 + DataAuditQueryParam dataAuditQueryParam = new DataAuditQueryParam(); + dataAuditQueryParam.setAuditTimeStart(request.getBeginTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + dataAuditQueryParam.setAuditTimeEnd(request.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + List dataAuditList = dataAuditResourceService.query(dataAuditQueryParam); + // 其他审计金额 + BigDecimal qtsjje = dataAuditList.stream().map(DataAudit::getAuditAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + // 发现问题金额 + BigDecimal fxwtje = dataAuditList.stream().map(DataAudit::getIssueAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); - JSONObject data = new JSONObject() - .fluentPut("fxsjRankList", fxsjRankList) - .fluentPut("jsdwRankList", jsdwRankList); - return Result.success(data); + + // 最后得出的总的项目数量 + int projectNumber = reportProjects.size() + dataAuditList.size(); + // 审计总金额 + BigDecimal auditAmount = zftzje.add(qtsjje); + // + AuditOverview overview = new AuditOverview(); + overview.setProjectNumber(new BigDecimal(projectNumber)); + overview.setAuditAmount(auditAmount); + overview.setAuditSjAmount(zftzsjje); + overview.setAuditWtAmount(fxwtje); + overview.setNegativeNumber(negatives.size()); + overview.setAccountableNumber((long) (blameResult.personalBlames().size() + blameResult.leadBlames().size())); + return Result.success(overview); } + // 审计地图 @Override - public Result getSubOneAllCaseVerificationCount(SubDataVRequest request) { - // 交办 - Set ldjbCode = Set.of(SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); + public Result getAuditMap(DataVRequest request) { + List auditSuperviseMapIconVoList = new ArrayList<>(); + SupDepartGroupParam supDepartGroupParam = new SupDepartGroupParam(); + supDepartGroupParam.setGroupId(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId()); + supDepartGroupParam.setParentLevel(2); + supDepartGroupParam.setChildLevel(3); + Map departAndSubDepart = supDepartResourceService.getDepartAndSubDepart(supDepartGroupParam); - List proCode = List.of(A12389.getValue(), SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); + for (Map.Entry entry : departAndSubDepart.entrySet()) { + String key = entry.getKey(); + DepartAndSubDepartDto value = entry.getValue(); + Set allDepartIds = value.getAllDepartIds(); + AuditSuperviseMapIconVo auditSuperviseMapIconVo = AuditSuperviseMapIconVo.of(key, value.getParentName()); - LambdaQueryWrapper dataCaseVerifLambdaQueryWrapper = new LambdaQueryWrapper<>(); - dataCaseVerifLambdaQueryWrapper.between(DataCaseVerif::getCreateTime, request.getBeginTime(), request.getEndTime()); - List dataCaseVerifs = dataCaseVerifMapper.getListData(request.getDepartId(), request.getBeginTime(), request.getEndTime()); - List negatives = negativeMapper.getNegativeListData(request.getDepartId(), request.getBeginTime(), request.getEndTime(), proCode); - List ssNegative = negatives.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList(); - // 交办案件数 - List jbNegatvieList = negatives.stream().filter(one -> ldjbCode.contains(one.getProblemSourcesCode())).toList(); - NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); - negativeBlameQueryParam.setNegativeIds(ssNegative.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(); + // 项目数 + ReportProjectQueryParam reportProjectQueryParam = new ReportProjectQueryParam(); + reportProjectQueryParam.setArchivingStart(request.getBeginTime()); + reportProjectQueryParam.setArchivingEnd(request.getEndTime()); + reportProjectQueryParam.setAuditUnitIds(allDepartIds); + reportProjectQueryParam.setDeleteFlag(DeleteStatusEnum.NO.getCode()); + reportProjectQueryParam.setNode(ReportProjectNodeEnum.END.getCode()); + List reportProjectList = reportProjectResourceService.query(reportProjectQueryParam); + // 其他审计项目 + DataAuditQueryParam dataAuditQueryParam = new DataAuditQueryParam(); + dataAuditQueryParam.setAuditTimeStart(request.getBeginTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + dataAuditQueryParam.setAuditTimeEnd(request.getEndTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); + dataAuditQueryParam.setSecondLevelDeptId(Long.valueOf(entry.getKey())); + List dataAuditList = dataAuditResourceService.query(dataAuditQueryParam); + Integer reportProjectNumber = reportProjectList.size() + dataAuditList.size(); + auditSuperviseMapIconVo.setReportProjectNumber(reportProjectNumber); - Double verificationRate = 0.0; - if (!dataCaseVerifs.isEmpty()) { - double rawRate = (double) ssNegative.size() / (dataCaseVerifs.size() + jbNegatvieList.size()) * 100; - verificationRate = Math.round(rawRate * 10) / 10.0; + NegativeQueryParam negativeQueryParam = new NegativeQueryParam(); + List dates = Arrays.asList(request.getBeginTime(), request.getEndTime()); + negativeQueryParam.setCrtTime(dates); + negativeQueryParam.setInvolveDepartIds(allDepartIds); + negativeQueryParam.setProblemSourcesCode(List.of(ProblemSourcesEnum.ZFTZSJ.getValue(), + ProblemSourcesEnum.ZFSACFSS.getValue(), + ProblemSourcesEnum.JJZRSJ.getValue(), + ProblemSourcesEnum.ZXSJ.getValue())); + List negativeList = negativeResourceService.query(negativeQueryParam); + // 查处问题数 + auditSuperviseMapIconVo.setCheckProNumber(negativeList.size()); + if (CollectionUtil.isNotEmpty(negativeList)) { + // 追责问责数 + Set negativeIds = negativeList.stream().map(Negative::getId).collect(Collectors.toSet()); + if (CollectionUtil.isNotEmpty(negativeIds)) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.in(NegativeBlame::getNegativeId, negativeIds); + wrapper.ne(NegativeBlame::getHandleResultName, "不予追责"); + int rushProNumber = (int) negativeBlameService.count(wrapper); + auditSuperviseMapIconVo.setRushProNumber(rushProNumber); + } + // 整改问题数 + long rectifyNumber = negativeList.stream().filter(one -> Objects.equals(one.getIsRectifyCode(), "1")).count(); + auditSuperviseMapIconVo.setRectifyNumber((int) rectifyNumber); + } + auditSuperviseMapIconVoList.add(auditSuperviseMapIconVo); } - CaseVerificationCountVo overview = new CaseVerificationCountVo(); - overview.setTotal(dataCaseVerifs.size() + jbNegatvieList.size()); - overview.setConfirmed(ssNegative.size()); - overview.setDealCasePro((long) negatives.size()); - overview.setPunishPre((long) (personalBlames.size() + leadBlames.size())); - overview.setPunishOrg((long) unitBlames.size()); - overview.setRate(verificationRate); - JSONObject res = new JSONObject().fluentPut("overview", overview); - return Result.success(res); + JSONObject data = new JSONObject().fluentPut("auditSuperviseMapIconVoList", auditSuperviseMapIconVoList); + return Result.success(data); } + // 审计工作趋势 @Override - public Result getSubOneCaseVerificationMap(SubDataVRequest request) { + public Result getAuditTrend(Integer year) { + // 其他审计 + List auditTrend = dataAuditResourceService.getAuditTrend(year); + // 政府投资审计 + List invertTrend = reportProjectResourceService.getReportProjectTrend(year); + // 将两个列表转换为 Map,key 为月份名称,value 为数量 + Map auditMap = auditTrend.stream().collect(Collectors.toMap(EchartsVo::getName, EchartsVo::getValue)); + Map invertMap = invertTrend.stream().collect(Collectors.toMap(EchartsVo::getName, EchartsVo::getValue)); + // 生成合并后的列表 + List mergedList = new ArrayList<>(); + for (int i = 1; i <= 12; i++) { + String monthName = i + "月"; + int auditValue = auditMap.getOrDefault(monthName, 0); + int invertValue = invertMap.getOrDefault(monthName, 0); + mergedList.add(new EchartsVo(monthName, auditValue + invertValue)); + } - // 交办 - Set ldjbCode = Set.of(SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); - List proCode = List.of(A12389.getValue(), SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); - // 查该区县局下属所有派出所 - List policeDeparts = supDepartMapper.selectPoliceDeparts(Integer.valueOf(request.getDepartId())); - List caseVerificationMapList = new ArrayList<>(); - for (SupDepart pcs : policeDeparts) { - // 案件核查 - LambdaQueryWrapper dataCaseVerifLambdaQueryWrapper = new LambdaQueryWrapper<>(); - dataCaseVerifLambdaQueryWrapper.between(DataCaseVerif::getCreateTime, request.getBeginTime(), request.getEndTime()); - dataCaseVerifLambdaQueryWrapper.eq(DataCaseVerif::getThirdDepartId, pcs.getId()); - List dataCaseVerifs = dataCaseVerifMapper.selectList(dataCaseVerifLambdaQueryWrapper); + JSONObject object = new JSONObject(); + object.fluentPut("auditTrend", mergedList); + return Result.success(object); + } - // 所有查处数据 - List negatives = negativeMapper.getNegativeListData(pcs.getId(), request.getBeginTime(), request.getEndTime(), proCode); - // 交办案件数 - List jbNegatvieList = negatives.stream().filter(one -> ldjbCode.contains(one.getProblemSourcesCode())).toList(); - // 问责情况 - List ssNegative = negatives.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList(); - NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); - negativeBlameQueryParam.setNegativeIds(ssNegative.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(); + // endregion审计一级 - int totalCaseCount = dataCaseVerifs.size() + jbNegatvieList.size(); - double verificationRate = 0.0; - if (totalCaseCount > 0) { - double rawRate = (double) ssNegative.size() / totalCaseCount * 100; - verificationRate = Math.round(rawRate * 10) / 10.0; + // region 维权抚慰一级 + // 维权案件情况 + @Override + public Result getRightsBarList(DataVRequest request) { + List countyRightsBarList = new ArrayList<>(); + List bureauRightsBarList = new ArrayList<>(); + SupDepartQueryParam supDepartQueryParam = new SupDepartQueryParam(); + supDepartQueryParam.setStatisticsGroupId(3); + List fxsjDw = supDepartResourceService.query(supDepartQueryParam); + supDepartQueryParam.setStatisticsGroupId(4); + List bwzdDw = supDepartResourceService.query(supDepartQueryParam); + for (SupDepart supDepart : fxsjDw) { + List rpcApplyList = rpcApplyMapper.selectRightsList(supDepart.getId(), request.getBeginTime(), request.getEndTime()); + if (CollectionUtil.isNotEmpty(rpcApplyList)) { + BarItem barItem = new BarItem(supDepart.getShortName(), new BigDecimal(rpcApplyList.size())); + countyRightsBarList.add(barItem); } + } - CaseVerificationMapVo caseVerificationMapVo = new CaseVerificationMapVo(); - caseVerificationMapVo.setName(pcs.getShortName()); - caseVerificationMapVo.setDepartId(pcs.getId()); - caseVerificationMapVo.setTotal(dataCaseVerifs.size() + jbNegatvieList.size()); - caseVerificationMapVo.setConfirmed(ssNegative.size()); - caseVerificationMapVo.setDealCasePro(negatives.size()); - caseVerificationMapVo.setPunishPre(personalBlames.size() + leadBlames.size()); - caseVerificationMapVo.setPunishOrg(unitBlames.size()); - caseVerificationMapVo.setRate(verificationRate); - caseVerificationMapList.add(caseVerificationMapVo); + for (SupDepart supDepart : bwzdDw) { + List rpcApplyList = rpcApplyMapper.selectRightsList(supDepart.getId(), request.getBeginTime(), request.getEndTime()); + if (CollectionUtil.isNotEmpty(rpcApplyList)) { + BarItem barItem = new BarItem(supDepart.getShortName(), new BigDecimal(rpcApplyList.size())); + bureauRightsBarList.add(barItem); + } } - caseVerificationMapList.forEach(CaseVerificationMapVo::initDefaultIfNull); - JSONObject res = new JSONObject().fluentPut("caseVerificationMapList", caseVerificationMapList); - return Result.success(res); + JSONObject object = new JSONObject(); + countyRightsBarList.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue())); + bureauRightsBarList.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue())); + object.fluentPut("countyRightsBarList", countyRightsBarList); + object.fluentPut("bureauRightsBarList", bureauRightsBarList); + return Result.success(object); } + // 抚慰金额情况 @Override - public Result getSubOneCaseSourceRateAndDealSituation(SubDataVRequest request) { - List caseSourceRateList = new ArrayList<>(); - List dealSituationPieList = new ArrayList<>(); - - // 总 - List proCode = List.of(A12389.getValue(), SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); - // 交办 - Set ldjbCode = Set.of(SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); - // 案件核查 || 12389 - List dataCaseVerifs = dataCaseVerifMapper.getListData(request.getDepartId(), request.getBeginTime(), request.getEndTime()); - // 交办 - List negatives = negativeMapper.getNegativeListData(request.getDepartId(), request.getBeginTime(), request.getEndTime(), proCode); - - // 案件来源占比 - // 1、找到案件核查案件数 - caseSourceRateList.add(new EchartsVo("12389投诉", dataCaseVerifs.size())); - // 2、找交办案件数 - Map> groupedByProblemSource = negatives.stream() - .filter(one -> StrUtil.isNotBlank(one.getProblemSourcesCode())) - .filter(one -> StrUtil.isNotBlank(one.getProblemSources())) - .filter(one -> ldjbCode.contains(one.getProblemSourcesCode())) - .collect(Collectors.groupingBy(Negative::getProblemSources)); - for (Map.Entry> entry : groupedByProblemSource.entrySet()) { - EchartsVo echartsVo = new EchartsVo(); - echartsVo.setName(entry.getKey()); - echartsVo.setValue(entry.getValue().size()); - caseSourceRateList.add(echartsVo); - } + public Result getComfortMoneyBarList(DataVRequest request) { + List countyComfortMoneyBarList = rpcComfortPacksMapper.getComfortMoneyBarList(request.getBeginTime(), request.getEndTime(), 3); + List bureauComfortMoneyBarList = rpcComfortPacksMapper.getComfortMoneyBarList(request.getBeginTime(), request.getEndTime(), 4); + JSONObject object = new JSONObject(); + object.fluentPut("countyComfortMoneyBarList", countyComfortMoneyBarList); + object.fluentPut("bureauComfortMoneyBarList", bureauComfortMoneyBarList); + return Result.success(object); + } - // 问责处理情况 - List ssNegative = negatives.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList(); - NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); - negativeBlameQueryParam.setNegativeIds(ssNegative.stream().map(Negative::getId).toList()); - List negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam); - Map> blames = negativeBlames.stream() - .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) - .filter(one -> !"不予追责".equals(one.getHandleResultName())) - .collect(Collectors.groupingBy(NegativeBlame::getHandleResultName)); - for (Map.Entry> entry : blames.entrySet()) { - EchartsVo echartsVo = new EchartsVo(); - echartsVo.setName(entry.getKey()); - echartsVo.setValue(entry.getValue().size()); - dealSituationPieList.add(echartsVo); - } - // 过滤0 - caseSourceRateList = filterZero(caseSourceRateList); - dealSituationPieList = filterZero(dealSituationPieList); + // 民辅警受伤情况 + @Override + public Result getPoliceHurtSituationAndHurtType(DataVRequest request) { + List comfortInjuryCategory = rpcApplyMapper.selectComfortInjuryCategory(request.getBeginTime(), request.getEndTime()); JSONObject data = new JSONObject() - .fluentPut("caseSourceRateList", caseSourceRateList) - .fluentPut("dealSituationPieList", dealSituationPieList); + .fluentPut("comfortInjuryCategory", comfortInjuryCategory); return Result.success(data); } - + // 发案情况占比 @Override - public Result getAuditNegativeVo(DataVRequest request) { - // 排名 + public Result getCaseAriseSituationRate(DataVRequest request) { + Date beginTime = request.getBeginTime(); + Date endTime = request.getEndTime(); + // 发案环节 + List incidentLinkList = rpcApplyMapper.getIncidentLink(beginTime, endTime); + // 发案警种 + List incidentPoliceList = rpcApplyMapper.getIncidentPolice(beginTime, endTime); + // 发案单位 SupDepartQueryParam supDepartQueryParam = new SupDepartQueryParam(); - supDepartQueryParam.setStatisticsGroupId(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId()); + supDepartQueryParam.setStatisticsGroupId(3); List fxsjDw = supDepartResourceService.query(supDepartQueryParam); - SupDepartQueryParam jsdwQueryParam = new SupDepartQueryParam(); - jsdwQueryParam.setStatisticsGroupId(DepartGroupEnum.BUREAU_AFFILIATED.getId()); - List jsdwDw = supDepartResourceService.query(jsdwQueryParam); - List fxData = buildAuditNegativeVoList(fxsjDw, request); - List jsData = buildAuditNegativeVoList(jsdwDw, request); - // 总览 - AuditOverview auditOverview = new AuditOverview(); - if (ZFTZSJ.getValue().equals(request.getAuditType())) { - ReportProjectQueryParam reportProjectQueryParam = new ReportProjectQueryParam(); - reportProjectQueryParam.setPublicationDateStart(request.getBeginTime()); - reportProjectQueryParam.setPublicationDateEnd(request.getEndTime()); - List reportProjects = reportProjectResourceService.query(reportProjectQueryParam); - NegativeQueryParam negativeQueryParam = new NegativeQueryParam(); - negativeQueryParam.setCrtTime(List.of(request.getBeginTime(), request.getEndTime())); - negativeQueryParam.setProblemSourcesCode(List.of(ZFTZSJ.getValue())); - List negativeListData = negativeResourceService.query(negativeQueryParam); - BlameResult blameResult = this.buildBlameResult(negativeListData); - BigDecimal zftzje = this.sumAmountInWan(reportProjects, ReportProject::getReportMoney); - BigDecimal zftzsjje = this.sumAmountInWan(reportProjects, ReportProject::getArchivingReduceMoney); - - auditOverview.setProjectNumber(BigDecimal.valueOf(reportProjects.size())); - auditOverview.setAuditAmount(zftzje); - auditOverview.setAuditSjAmount(zftzsjje); - auditOverview.setNegativeNumber(negativeListData.size()); - auditOverview.setAccountableNumber((long) (blameResult.personalBlames().size() + blameResult.leadBlames().size())); - } else { - DataAuditQueryParam dataAuditQueryParam = new DataAuditQueryParam(); - dataAuditQueryParam.setAuditTimeStart(toLocalDateTime(request.getBeginTime())); - dataAuditQueryParam.setAuditTimeEnd(toLocalDateTime(request.getEndTime())); - dataAuditQueryParam.setAuditType(request.getAuditType()); - List dataAuditList = dataAuditResourceService.query(dataAuditQueryParam); - NegativeQueryParam negativeQueryParam = new NegativeQueryParam(); - negativeQueryParam.setCrtTime(List.of(request.getBeginTime(), request.getEndTime())); - negativeQueryParam.setProblemSourcesCode(List.of(request.getAuditType())); - List negativeListData = negativeResourceService.query(negativeQueryParam); - BlameResult blameResult = this.buildBlameResult(negativeListData); - BigDecimal je = this.sumAmount(dataAuditList, DataAudit::getAuditAmount, new BigDecimal(1)); - BigDecimal zsjje = this.sumAmount(dataAuditList, DataAudit::getIssueAmount, new BigDecimal(1)); - auditOverview.setProjectNumber(BigDecimal.valueOf(dataAuditList.size())); - auditOverview.setAuditAmount(je); - auditOverview.setAuditSjAmount(zsjje); - auditOverview.setNegativeNumber(negativeListData.size()); - auditOverview.setAccountableNumber((long) (blameResult.personalBlames().size() + blameResult.leadBlames().size())); - + List incidentOrgList = new ArrayList<>(); + for (SupDepart supDepart : fxsjDw) { + List rpcApplyList = rpcApplyMapper.getIncidentOrg(beginTime, endTime, supDepart.getId()); + if (CollectionUtil.isNotEmpty(rpcApplyList)) { + EchartsVo barItem = new EchartsVo(supDepart.getShortName(), rpcApplyList.size()); + incidentOrgList.add(barItem); + } } - JSONObject object = new JSONObject(); - object.fluentPut("fxData", fxData); - object.fluentPut("jsData", jsData); - object.fluentPut("leftOverview", auditOverview); - return Result.success(object); + JSONObject data = new JSONObject() + .fluentPut("incidentLinkList", incidentLinkList) + .fluentPut("incidentPoliceTypeList", incidentPoliceList) + .fluentPut("incidentOrgList", incidentOrgList); + return Result.success(data); } + // endregion + + + // region 辅助方法 private List filterZero(List list) { return list.stream() .filter(e -> e.getValue() != null && e.getValue() > 0) @@ -2303,6 +1634,26 @@ public class DatavServiceImpl implements DatavService { .divide(WAN, 2, RoundingMode.HALF_UP); } + /** + * @return 部门和子部门映射数据 + */ + public Map getDepartAndSubDepartData(Integer groupId) { + // 创建参数对象 + SupDepartGroupParam supDepartGroupParam = new SupDepartGroupParam(); + supDepartGroupParam.setGroupId(groupId); + supDepartGroupParam.setParentLevel(2); + supDepartGroupParam.setChildLevel(3); + + // 调用服务获取数据 + return supDepartResourceService.getDepartAndSubDepart(supDepartGroupParam); + } + + // endregion + + + + + public Result getSubOneMailMapIcon() { // ✅ 注意:这里的 name 必须和地图 geojson 区域名一致(一般是“xx街道/园区”) 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 3cb80c7..55ac6f5 100644 --- a/src/main/java/com/biutag/supervision/service/subDatav/SubDatavService.java +++ b/src/main/java/com/biutag/supervision/service/subDatav/SubDatavService.java @@ -25,4 +25,95 @@ public interface SubDatavService { * @return */ Result getSubOneAllCount(SubDataVRequest request); + + + /** + * 视频督察 二级问题数排名 + * @param request + * @return + */ + Result getSubOneVideoSuperviseProblemRank(SubDataVRequest request); + + + /** + * 视频督察 二级总览 + * @param request + * @return + */ + Result getSubOneAllVideoSuperviseCount(SubDataVRequest request); + + + /** + * 视频督察 二级地图 + * @param request + * @return + */ + Result getSubOneVideoSuperviseMap(SubDataVRequest request); + + /** + * 维权抚慰 二级大屏 维权案件情况 + * @param request + * @return + */ + Result getSubRightsBarList(SubDataVRequest request); + + /** + * 维权抚慰 二级大屏 金额情况 + * @param request + * @return + */ + Result getSubComfortMoneyBarList(SubDataVRequest request); + + + /** + * 维权抚慰 二级大屏 案件类别占比 + * @param request + * @return + */ + Result getSubCaseType(SubDataVRequest request); + + + /** + * 总览 + * @param request + * @return + */ + Result getSubOneALlComfortCount(SubDataVRequest request); + + + // 维权打处情况 + Result getSubHitState(SubDataVRequest request); + + // 抚慰情况 + Result getSubComfortState(SubDataVRequest request); + + // 民辅警受伤情况 + Result getSubPoliceHurtSituationAndHurtType(SubDataVRequest request); + + // 发案情况 + Result getSubOneCaseAriseSituationRate(SubDataVRequest request); + + // 信访 初访重访情况 + Result getSubOneFirstAndRepeatMail(SubDataVRequest request); + + // 信访数据大屏中央数据统计 && 信访投诉占比 + Result getSubOneAllMailCount(SubDataVRequest request); + + // 信访地图 + Result getSubOneMailMapIcon(SubDataVRequest request); + + // 集访 + Result getSubOneEntanglementAndMassMail(SubDataVRequest request); + + // 案件核查分县市局排名 + Result getSubOneCaseVerificationRank(SubDataVRequest request); + + // 案件核查总览 + Result getSubOneAllCaseVerificationCount(SubDataVRequest request); + + // 地图 + Result getSubOneCaseVerificationMap(SubDataVRequest request); + + // 案件来源占比 & 问责处理情况 + Result getSubOneCaseSourceRateAndDealSituation(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 e4b58e3..bff568c 100644 --- a/src/main/java/com/biutag/supervision/service/subDatav/SubDatavServiceImpl.java +++ b/src/main/java/com/biutag/supervision/service/subDatav/SubDatavServiceImpl.java @@ -1,30 +1,48 @@ package com.biutag.supervision.service.subDatav; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; -import com.biutag.supervision.constants.enums.DepartGroupEnum; -import com.biutag.supervision.constants.enums.ProblemSourcesEnum; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.biutag.supervision.constants.enums.*; +import com.biutag.supervision.mapper.*; import com.biutag.supervision.pojo.Result; import com.biutag.supervision.pojo.dto.DepartAndSubDepartDto; -import com.biutag.supervision.pojo.entity.SupDepart; -import com.biutag.supervision.pojo.entity.SupExternalDepart; +import com.biutag.supervision.pojo.dto.common.BarItem; +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.param.*; +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.GlobalOverViewVo; -import com.biutag.supervision.pojo.vo.OrganizeProblemRankVo; +import com.biutag.supervision.pojo.vo.*; +import com.biutag.supervision.repository.dataAudit.DataAuditResourceService; import com.biutag.supervision.repository.dataCaseVerif.DataCaseVerifResourceService; 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.NegativeBlameService; +import com.biutag.supervision.service.*; +import com.biutag.supervision.service.datav.DatavServiceImpl; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; +import static com.biutag.supervision.constants.enums.ProblemSourcesEnum.*; + /** * @ClassName SubDatavServiceImpl * @Description 区县大屏服务层 @@ -35,14 +53,13 @@ import java.util.stream.Collectors; public class SubDatavServiceImpl implements SubDatavService { @Resource - private SupDepartResourceService supDepartResourceService; + private ReportProjectResourceService reportProjectResourceService; @Resource private NegativeResourceService negativeResourceService; - @Resource - private ReportProjectResourceService reportProjectResourceService; + private SupDepartResourceService supDepartResourceService; @Resource private NegativeBlameService negativeBlameService; @@ -59,7 +76,63 @@ public class SubDatavServiceImpl implements SubDatavService { @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; + + @Resource + private DataMailService dataMailService; + + @Resource + private MailMapper mailMapper; + + @Resource + private DataPetition12337Mapper dataPetition12337Mapper; + @Resource + private SupExternalDepartMapper supExternalDepartMapper; + @Resource + private DataPetition12337Service dataPetition12337Service; + + @Resource + private SupDepartMapper supDepartMapper; + + @Resource + private NegativeMapper negativeMapper; + + @Resource + private SuperviseReportService superviseReportService; + + @Resource + private NegativeBlameResourceService negativeBlameResourceService; + + @Resource + private DataCaseVerifMapper dataCaseVerifMapper; + + private static final String NO_BLAME = "不予追责"; + + private static final BigDecimal WAN = new BigDecimal("10000"); + + private final String VALID_SIGN = "terminated"; + private final String EX_SOURCE = "局长信箱"; + + + // region 首页二级大屏 + // 问题排名 @Override public Result getSubOneOrganizationRank(SubDataVRequest request) { SupDepartQueryParam supDepartQueryParam = new SupDepartQueryParam(); @@ -85,6 +158,7 @@ public class SubDatavServiceImpl implements SubDatavService { } + // 二级首页总览数据 @Override public Result getSubOneAllCount(SubDataVRequest request) { @@ -167,7 +241,826 @@ public class SubDatavServiceImpl implements SubDatavService { return Result.success(data); } + // endregion + + // region 视频督察二级 + // 视频督察 二级问题数排名 + @Override + public Result getSubOneVideoSuperviseProblemRank(SubDataVRequest request) { + List policeVideoSuperviseProblemRankList = new ArrayList<>(); + List teamVideoSuperviseProblemRankList = new ArrayList<>(); + SupDepartQueryParam supDepartGroupParam = new SupDepartQueryParam(); + supDepartGroupParam.setLevel("3"); + supDepartGroupParam.setPid(request.getDepartId()); + List supDepartList = supDepartResourceService.query(supDepartGroupParam); + // 派出所 + List pcsList = supDepartList.stream() + .filter(one -> StrUtil.isNotBlank(one.getStatisticsGroupId())) + .filter(one -> DepartGroupEnum.PCS.getId().equals(Integer.valueOf(one.getStatisticsGroupId()))) + .toList(); + + // 大队 + List dwList = supDepartList.stream() + .filter(one -> { + String groupId = one.getStatisticsGroupId(); + return !StrUtil.isNotBlank(groupId) + || !DepartGroupEnum.PCS.getId().equals(Integer.valueOf(groupId)); + }) + .toList(); + + 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); + } + // endregion + + // region 案件核查二级 + // 排名 + @Override + public Result getSubOneCaseVerificationRank(SubDataVRequest request) { + + List proCode = List.of(A12389.getValue(), SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); + List level3ByPidSupDepartList = supDepartResourceService.getLevel3ByPidSupDepartList(request.getDepartId()); + // 派出所 + List pcsList = level3ByPidSupDepartList.stream() + .filter(one -> StrUtil.isNotBlank(one.getStatisticsGroupId())) + .filter(one -> DepartGroupEnum.PCS.getId().equals(Integer.valueOf(one.getStatisticsGroupId()))) + .toList(); + // 大队 + List dwList = level3ByPidSupDepartList.stream() + .filter(one -> { + String groupId = one.getStatisticsGroupId(); + return !StrUtil.isNotBlank(groupId) + || !DepartGroupEnum.PCS.getId().equals(Integer.valueOf(groupId)); + }) + .toList(); + List fxsjRankList = new ArrayList<>(); + List jsdwRankList = new ArrayList<>(); + for (SupDepart pcs : pcsList) { + List negatives = negativeMapper.getNegativeListData(pcs.getId(), request.getBeginTime(), request.getEndTime(), proCode); + if (CollectionUtil.isEmpty(negatives)) { + continue; + } + + OrganizeProblemRankVo organizeProblemRankVo = new OrganizeProblemRankVo(); + organizeProblemRankVo.setLabel(pcs.getShortName()); + organizeProblemRankVo.setValue(String.valueOf(negatives.size())); + fxsjRankList.add(organizeProblemRankVo); + } + for (SupDepart dw : dwList) { + List negatives = negativeMapper.getNegativeListData(dw.getId(), request.getBeginTime(), request.getEndTime(), proCode); + if (CollectionUtil.isEmpty(negatives)) { + continue; + } + OrganizeProblemRankVo organizeProblemRankVo = new OrganizeProblemRankVo(); + organizeProblemRankVo.setLabel(dw.getShortName()); + organizeProblemRankVo.setValue(String.valueOf(negatives.size())); + jsdwRankList.add(organizeProblemRankVo); + } + + // 排序 + fxsjRankList.sort( + Comparator.comparingLong((OrganizeProblemRankVo vo) -> Long.parseLong(vo.getValue())) + .reversed() + ); + jsdwRankList.sort( + Comparator.comparingLong((OrganizeProblemRankVo vo) -> Long.parseLong(vo.getValue())) + .reversed() + ); + + JSONObject data = new JSONObject() + .fluentPut("fxsjRankList", fxsjRankList) + .fluentPut("jsdwRankList", jsdwRankList); + return Result.success(data); + } + + // 总览 + @Override + public Result getSubOneAllCaseVerificationCount(SubDataVRequest request) { + // 交办 + Set ldjbCode = Set.of(SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); + + List proCode = List.of(A12389.getValue(), SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); + + LambdaQueryWrapper dataCaseVerifLambdaQueryWrapper = new LambdaQueryWrapper<>(); + dataCaseVerifLambdaQueryWrapper.between(DataCaseVerif::getCreateTime, request.getBeginTime(), request.getEndTime()); + List dataCaseVerifs = dataCaseVerifMapper.getListData(request.getDepartId(), request.getBeginTime(), request.getEndTime()); + List negatives = negativeMapper.getNegativeListData(request.getDepartId(), request.getBeginTime(), request.getEndTime(), proCode); + List ssNegative = negatives.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList(); + // 交办案件数 + List jbNegatvieList = negatives.stream().filter(one -> ldjbCode.contains(one.getProblemSourcesCode())).toList(); + NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); + negativeBlameQueryParam.setNegativeIds(ssNegative.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(); + + Double verificationRate = 0.0; + if (!dataCaseVerifs.isEmpty()) { + double rawRate = (double) ssNegative.size() / (dataCaseVerifs.size() + jbNegatvieList.size()) * 100; + verificationRate = Math.round(rawRate * 10) / 10.0; + } + CaseVerificationCountVo overview = new CaseVerificationCountVo(); + overview.setTotal(dataCaseVerifs.size() + jbNegatvieList.size()); + overview.setConfirmed(ssNegative.size()); + overview.setDealCasePro((long) negatives.size()); + overview.setPunishPre((long) (personalBlames.size() + leadBlames.size())); + overview.setPunishOrg((long) unitBlames.size()); + overview.setRate(verificationRate); + JSONObject res = new JSONObject().fluentPut("overview", overview); + return Result.success(res); + } + + // 地图 + @Override + public Result getSubOneCaseVerificationMap(SubDataVRequest request) { + + // 交办 + Set ldjbCode = Set.of(SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); + List proCode = List.of(A12389.getValue(), SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); + // 查该区县局下属所有派出所 + List policeDeparts = supDepartMapper.selectPoliceDeparts(Integer.valueOf(request.getDepartId())); + List caseVerificationMapList = new ArrayList<>(); + for (SupDepart pcs : policeDeparts) { + // 案件核查 + LambdaQueryWrapper dataCaseVerifLambdaQueryWrapper = new LambdaQueryWrapper<>(); + dataCaseVerifLambdaQueryWrapper.between(DataCaseVerif::getCreateTime, request.getBeginTime(), request.getEndTime()); + dataCaseVerifLambdaQueryWrapper.eq(DataCaseVerif::getThirdDepartId, pcs.getId()); + List dataCaseVerifs = dataCaseVerifMapper.selectList(dataCaseVerifLambdaQueryWrapper); + + // 所有查处数据 + List negatives = negativeMapper.getNegativeListData(pcs.getId(), request.getBeginTime(), request.getEndTime(), proCode); + // 交办案件数 + List jbNegatvieList = negatives.stream().filter(one -> ldjbCode.contains(one.getProblemSourcesCode())).toList(); + // 问责情况 + List ssNegative = negatives.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList(); + NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); + negativeBlameQueryParam.setNegativeIds(ssNegative.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(); + + int totalCaseCount = dataCaseVerifs.size() + jbNegatvieList.size(); + double verificationRate = 0.0; + if (totalCaseCount > 0) { + double rawRate = (double) ssNegative.size() / totalCaseCount * 100; + verificationRate = Math.round(rawRate * 10) / 10.0; + } + + CaseVerificationMapVo caseVerificationMapVo = new CaseVerificationMapVo(); + caseVerificationMapVo.setName(pcs.getShortName()); + caseVerificationMapVo.setDepartId(pcs.getId()); + caseVerificationMapVo.setTotal(dataCaseVerifs.size() + jbNegatvieList.size()); + caseVerificationMapVo.setConfirmed(ssNegative.size()); + caseVerificationMapVo.setDealCasePro(negatives.size()); + caseVerificationMapVo.setPunishPre(personalBlames.size() + leadBlames.size()); + caseVerificationMapVo.setPunishOrg(unitBlames.size()); + caseVerificationMapVo.setRate(verificationRate); + caseVerificationMapList.add(caseVerificationMapVo); + } + caseVerificationMapList.forEach(CaseVerificationMapVo::initDefaultIfNull); + JSONObject res = new JSONObject().fluentPut("caseVerificationMapList", caseVerificationMapList); + return Result.success(res); + } + + // 案件来源占比 & 问责处理情况 + @Override + public Result getSubOneCaseSourceRateAndDealSituation(SubDataVRequest request) { + List caseSourceRateList = new ArrayList<>(); + List dealSituationPieList = new ArrayList<>(); + + // 总 + List proCode = List.of(A12389.getValue(), SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); + // 交办 + Set ldjbCode = Set.of(SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); + // 案件核查 || 12389 + List dataCaseVerifs = dataCaseVerifMapper.getListData(request.getDepartId(), request.getBeginTime(), request.getEndTime()); + // 交办 + List negatives = negativeMapper.getNegativeListData(request.getDepartId(), request.getBeginTime(), request.getEndTime(), proCode); + + // 案件来源占比 + // 1、找到案件核查案件数 + caseSourceRateList.add(new EchartsVo("12389投诉", dataCaseVerifs.size())); + // 2、找交办案件数 + Map> groupedByProblemSource = negatives.stream() + .filter(one -> StrUtil.isNotBlank(one.getProblemSourcesCode())) + .filter(one -> StrUtil.isNotBlank(one.getProblemSources())) + .filter(one -> ldjbCode.contains(one.getProblemSourcesCode())) + .collect(Collectors.groupingBy(Negative::getProblemSources)); + for (Map.Entry> entry : groupedByProblemSource.entrySet()) { + EchartsVo echartsVo = new EchartsVo(); + echartsVo.setName(entry.getKey()); + echartsVo.setValue(entry.getValue().size()); + caseSourceRateList.add(echartsVo); + } + + // 问责处理情况 + List ssNegative = negatives.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList(); + NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam(); + negativeBlameQueryParam.setNegativeIds(ssNegative.stream().map(Negative::getId).toList()); + List negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam); + Map> blames = negativeBlames.stream() + .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) + .filter(one -> !"不予追责".equals(one.getHandleResultName())) + .collect(Collectors.groupingBy(NegativeBlame::getHandleResultName)); + for (Map.Entry> entry : blames.entrySet()) { + EchartsVo echartsVo = new EchartsVo(); + echartsVo.setName(entry.getKey()); + echartsVo.setValue(entry.getValue().size()); + dealSituationPieList.add(echartsVo); + } + // 过滤0 + caseSourceRateList = filterZero(caseSourceRateList); + dealSituationPieList = filterZero(dealSituationPieList); + + JSONObject data = new JSONObject() + .fluentPut("caseSourceRateList", caseSourceRateList) + .fluentPut("dealSituationPieList", dealSituationPieList); + return Result.success(data); + } + + // endregion + + // region 信访投诉二级 + @Override + public Result getSubOneFirstAndRepeatMail(SubDataVRequest request) { + Date beginTime = request.getBeginTime(); + Date endTime = request.getEndTime(); + // 派出所 + List fxsjFirstRankList = dataPetitionComplaintMapper.getSubMailRank(beginTime, endTime, 10, RepeatEnum.FIRST_MAIL.getId(), request.getDepartId()); + List fxsjRepeatRankList = dataPetitionComplaintMapper.getSubMailRank(beginTime, endTime, 10, RepeatEnum.REPEAT_MAIL.getId(), request.getDepartId()); + // 大队 + List bwzdFirstRankList = dataPetitionComplaintMapper.getSubMailRank(beginTime, endTime, null, RepeatEnum.FIRST_MAIL.getId(), request.getDepartId()); + List bwzdRepeatRankList = dataPetitionComplaintMapper.getSubMailRank(beginTime, endTime, null, RepeatEnum.REPEAT_MAIL.getId(), request.getDepartId()); + // 汇总(派出所) + MailFirstAndRepeatOverviewVo fxsjOverview = new MailFirstAndRepeatOverviewVo(); + fxsjOverview.setFirstMail(fxsjFirstRankList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); + fxsjOverview.setRepeatMail(fxsjRepeatRankList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); + fxsjOverview.setLeaderMail(0); + // 汇总(大队) + MailFirstAndRepeatOverviewVo bwzdOverview = new MailFirstAndRepeatOverviewVo(); + bwzdOverview.setFirstMail(bwzdFirstRankList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); + bwzdOverview.setRepeatMail(bwzdRepeatRankList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); + bwzdOverview.setLeaderMail(0); + JSONObject data = new JSONObject() + .fluentPut("fxsjOverview", fxsjOverview) + .fluentPut("bwzdOverview", bwzdOverview) + .fluentPut("fxsjFirstRankList", fxsjFirstRankList) + .fluentPut("fxsjRepeatRankList", fxsjRepeatRankList) + .fluentPut("bwzdFirstRankList", bwzdFirstRankList) + .fluentPut("bwzdRepeatRankList", bwzdRepeatRankList); +// return getSubOneFirstAndRepeatMail(); + return Result.success(data); + } + + // 信访数据大屏中央数据统计 && 信访投诉占比 + @Override + public Result getSubOneAllMailCount(SubDataVRequest request) { + MailOverviewVo overview = new MailOverviewVo(); + Date beginTime = request.getBeginTime(); + Date endTime = request.getEndTime(); + String departId = request.getDepartId(); + // 国家信访 + Long countryTotal = dataPetitionComplaintMapper.selectMailBySourceCode(beginTime, endTime, GJXFPT.getValue(), departId); + // 公安信访 + Long policeTotal = dataPetitionComplaintMapper.selectMailBySourceCode(beginTime, endTime, GABXF.getValue(), departId); + // 12337 + Long numTotal = dataPetition12337Service.count(new LambdaQueryWrapper().between(DataPetition12337::getDiscoverTime, beginTime, endTime).eq(DataPetition12337::getSecondDepartId, departId)); + // 局长信箱 + QueryWrapper subOneMailQueryWrapper = new QueryWrapper<>(); + String exDepartId = supExternalDepartMapper.getExIdByInId(departId.toString(), "局长信箱"); + subOneMailQueryWrapper.ne("mail_state", VALID_SIGN); + subOneMailQueryWrapper.eq("second_dept_id", exDepartId); + subOneMailQueryWrapper.between("create_time", beginTime, endTime); + Long commissionerTotal = mailMapper.selectCount(subOneMailQueryWrapper); + // 总数 + Long total = countryTotal + policeTotal + numTotal; + //国家信访 + overview.setCountryMail(countryTotal); + //公安部信访 + overview.setPoliceMail(policeTotal); + //局长信箱 + overview.setManageMail(commissionerTotal); + //12337信访 + overview.setNumberMail(numTotal); + overview.setTotalMail(total); +// overview.setCountryMail(120L); // 国家信访 +// overview.setPoliceMail(45L); // 公安部信访 +// overview.setNumberMail(30L); // 12337 +// overview.setManageMail(20L); // 局长信箱 +// overview.setTotalMail(120L + 45L + 30L); + JSONObject data = new JSONObject().fluentPut("overview", overview); + return Result.success(data); + } + + // 信访地图 + @Override + public Result getSubOneMailMapIcon(SubDataVRequest request) { + List res = new ArrayList<>(); + String departId = request.getDepartId(); + Date beginTime = request.getBeginTime(); + Date endTime = request.getEndTime(); + // 查该区县局下属所有派出所 + List policeDeparts = supDepartMapper.selectPoliceDeparts(Integer.valueOf(departId)); + for (SupDepart supDepart : policeDeparts) { + MailMapIconVo mapIconVo = new MailMapIconVo(); + mapIconVo.setName(supDepart.getShortName()); + mapIconVo.setDepartId(supDepart.getId()); + res.add(mapIconVo); + } + // 查询国家信访和公安部信访数据 + for (MailMapIconVo re : res) { + String policeDepartId = re.getDepartId(); + // 国家 + Long countryTotal = dataPetitionComplaintMapper.selectPoliceMailBySourceCode(beginTime, endTime, GJXFPT.getValue(), policeDepartId); + // 公安 + Long policeTotal = dataPetitionComplaintMapper.selectPoliceMailBySourceCode(beginTime, endTime, GABXF.getValue(), policeDepartId); + // 12337 数据 + LambdaQueryWrapper dataPetition12337LambdaQueryWrapper = new LambdaQueryWrapper<>(); + dataPetition12337LambdaQueryWrapper.between(DataPetition12337::getDiscoverTime, beginTime, endTime); + dataPetition12337LambdaQueryWrapper.eq(DataPetition12337::getThirdDepartId, re.getDepartId()); + Long numTotal = dataPetition12337Service.count(dataPetition12337LambdaQueryWrapper); + // 局长信箱 + String exDepartId = supExternalDepartMapper.getExIdByInId(policeDepartId, EX_SOURCE); + Long manageMail = 0L; + if (exDepartId != null) { + QueryWrapper qw = new QueryWrapper<>(); + qw.ne("mail_state", VALID_SIGN); + qw.eq("three_dept_id", exDepartId); + qw.between("create_time", beginTime, endTime); + manageMail = mailMapper.selectCount(qw); + } + long country = countryTotal == null ? 0L : countryTotal; + long police = policeTotal == null ? 0L : policeTotal; + long num = numTotal == null ? 0L : numTotal; + long manage = manageMail == null ? 0L : manageMail; + Long total = country + police + num; + re.setCountryTotal(String.valueOf(country)); + re.setPoliceTotal(String.valueOf(police)); + re.setCommissionerTotal(String.valueOf(manage)); + re.setNumTotal(String.valueOf(num)); + re.setTotal(total.toString()); + } + JSONObject data = new JSONObject().fluentPut("mailMapIconList", res); +// return getSubOneMailMapIcon(); + return Result.success(data); + } + + // 集访 + @Override + public Result getSubOneEntanglementAndMassMail(SubDataVRequest request) { + Date beginTime = request.getBeginTime(); + Date endTime = request.getEndTime(); + String departId = request.getDepartId(); + // 分县市局 + List fxsjMassMailList = dataPetitionComplaintMapper.getSubOneMassMailRank(beginTime, endTime, 10, departId); + List fxsjLeaderReviewMailList = dataPetitionComplaintMapper.getSubOneMailLeaderRank(beginTime, endTime, 10, departId); + // 局属单位 + List bwzdMassMailList = dataPetitionComplaintMapper.getSubOneMassMailRank(beginTime, endTime, null, departId); + List bwzdLeaderReviewMailList = dataPetitionComplaintMapper.getMailLeaderRank(beginTime, endTime, 4); + // 汇总(分县市局) + MailEntanglementMassOverviewVo fxsjOverview = new MailEntanglementMassOverviewVo(); + fxsjOverview.setEntanglement(0); + fxsjOverview.setMass(fxsjMassMailList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); + fxsjOverview.setLeaderReview(fxsjLeaderReviewMailList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); + // 汇总(局属单位) + MailEntanglementMassOverviewVo bwzdOverview = new MailEntanglementMassOverviewVo(); + bwzdOverview.setEntanglement(0); + bwzdOverview.setMass(bwzdMassMailList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); + bwzdOverview.setLeaderReview(bwzdLeaderReviewMailList.stream().mapToInt(OrganizeProblemRankVo::getValueAsInt).sum()); + JSONObject data = new JSONObject() + .fluentPut("fxsjOverview", fxsjOverview) + .fluentPut("bwzdOverview", bwzdOverview) + .fluentPut("fxsjMassMailList", fxsjMassMailList) + .fluentPut("bwzdMassMailList", bwzdMassMailList) + .fluentPut("fxsjLeaderReviewMailList", fxsjLeaderReviewMailList) + .fluentPut("bwzdLeaderReviewMailList", bwzdLeaderReviewMailList); +// return mockSubOneEntanglementAndMassMail(); + return Result.success(data); + } + // endregion + + // region 维权抚慰二级 + // 二级大屏 维权案件情况 + @Override + public Result getSubRightsBarList(SubDataVRequest request) { + // 维权案件情况 - 派出所 + List pcsList = rpcApplyMapper.selectSubPcsProtectRightsBarList(request.getBeginTime(), request.getEndTime(), Integer.valueOf(request.getDepartId()), 10); + // 维权案件情况 - 大队 + List dbList = rpcApplyMapper.selectSubDdProtectRightsBarList(request.getBeginTime(), request.getEndTime(), Integer.valueOf(request.getDepartId()), 10); + + JSONObject data = new JSONObject() + .fluentPut("fxsjRightsRankList", pcsList) + .fluentPut("jsdwRightsRankList", dbList); + return Result.success(data); + } + + // 金额情况 + @Override + public Result getSubComfortMoneyBarList(SubDataVRequest request) { + List fxsjComfortMoneyRank = rpcApplyMapper.getSubPcComfortMoneyBarList(request.getBeginTime(), request.getEndTime(), request.getDepartId(), 10); + List jsdwComfortMoneyRank = rpcApplyMapper.getSubDdComfortMoneyBarList(request.getBeginTime(), request.getEndTime(), request.getDepartId(), 10); + JSONObject data = new JSONObject() + .fluentPut("fxsjComfortMoneyRank", fxsjComfortMoneyRank) + .fluentPut("jsdwComfortMoneyRank", jsdwComfortMoneyRank); + return Result.success(data); + } + + // 维权抚慰 二级大屏 案件类别占比 + @Override + public Result getSubCaseType(SubDataVRequest request) { + List crownCaseBar = rpcApplyMapper.selectSubCaseData(request.getBeginTime(), request.getEndTime(), "1", Integer.valueOf(request.getDepartId())); + //案件类别 - 行政 + List administrativeCase = rpcApplyMapper.selectSubCaseData(request.getBeginTime(), request.getEndTime(), "2", Integer.valueOf(request.getDepartId())); + JSONObject data = new JSONObject().fluentPut("crownCaseBar", crownCaseBar).fluentPut("administrativeCase", administrativeCase); + return Result.success(data); + } + + + // 维权抚慰 二级大屏 案件类别占比 + @Override + public Result getSubOneALlComfortCount(SubDataVRequest request) { + ComfortCountVO comfortOverview = new ComfortCountVO(); + Date beginTime = request.getBeginTime(); + Date endTime = request.getEndTime(); + String departId = request.getDepartId(); + comfortOverview.setComfortCaseTotal(Long.valueOf(rpcApplyMapper.selectMapRightsNumber(beginTime, endTime, departId))); + comfortOverview.setHurtTotal(Long.valueOf(rpcApplyMapper.selectMapVictimNumber(beginTime, endTime, departId))); + comfortOverview.setComfortTotal(rpcApplyMapper.selectMapComfortPersonNumber(beginTime, endTime, departId)); + List tortNames = rpcApplyMapper.selectMaptHitPersonNumber(beginTime, endTime, departId); + long initialListSize = tortNames.size(); + long hitPersonNumber = tortNames.stream() + .filter(s -> s.contains(",")).toList().size(); + // 筛选出包含逗号的名称 + long nums = tortNames.stream() + .filter(s -> s.contains(",")) + .mapToLong(s -> s.split(",").length) // 拆分每个名称并计算拆分后的数组长度 + .sum();// 计算所有拆分后数组长度的总和 + if (tortNames.stream().noneMatch(s -> s.contains(","))) { + comfortOverview.setHitTotal(initialListSize); + } else { + comfortOverview.setHitTotal(initialListSize + nums - hitPersonNumber); + } + comfortOverview.setComfortMoney(rpcApplyMapper.selectMapComfortMoney(beginTime, endTime, departId)); + JSONObject data = new JSONObject().fluentPut("comfortOverview", comfortOverview); + return Result.success(data); + + } + + + @Override + public Result getSubHitState(SubDataVRequest request) { + List pieItems = rpcApplyMapper.getSubHitState(request.getBeginTime(), request.getEndTime(), request.getDepartId()); + JSONObject data = new JSONObject().fluentPut("PunishmentSituation", pieItems); + return Result.success(data); + } + + + @Override + public Result getSubComfortState(SubDataVRequest request) { + List comfortSituationList = rpcApplyMapper.getSubComfortState(request.getBeginTime(), request.getEndTime(), request.getDepartId()); + JSONObject data = new JSONObject().fluentPut("comfortSituationList", comfortSituationList); + return Result.success(data); + } + + + @Override + public Result getSubPoliceHurtSituationAndHurtType(SubDataVRequest request) { + List policeHurtSituationList = rpcApplyMapper.getSubPoliceHurtSituationAndHurtType(request.getBeginTime(), request.getEndTime(), request.getDepartId()); // 人数情况 + JSONObject data = new JSONObject().fluentPut("policeHurtSituationList", policeHurtSituationList); + return Result.success(data); + } + + + @Override + public Result getSubOneCaseAriseSituationRate(SubDataVRequest request) { + List incidentLinkList = rpcApplyMapper.getSubIncidentLinkList(request.getBeginTime(), request.getEndTime(), request.getDepartId()); + List incidentPoliceList = rpcApplyMapper.getSubIncidentPoliceList(request.getBeginTime(), request.getEndTime(), request.getDepartId()); + List incidentOrgList = rpcApplyMapper.getSubIncidentOrgList(request.getBeginTime(), request.getEndTime(), request.getDepartId()); + JSONObject data = new JSONObject() + .fluentPut("incidentLinkList", incidentLinkList) + .fluentPut("incidentPoliceTypeList", incidentPoliceList) + .fluentPut("incidentOrgList", incidentOrgList); + return Result.success(data); + } + // endregion + + // region 辅助方法 + private List filterZero(List list) { + return list.stream() + .filter(e -> e.getValue() != null && e.getValue() > 0) + .toList(); + } + + + public record BlameResult( + List personalBlames, + List leadBlames + ) { + } + + public DatavServiceImpl.BlameResult buildBlameResult(List negativeListData) { + if (CollUtil.isEmpty(negativeListData)) { + return new DatavServiceImpl.BlameResult(List.of(), List.of()); + } + // 1. 筛选有效 negative + List validNegatives = negativeListData.stream() + .filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) + || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())) + .toList(); + if (CollUtil.isEmpty(validNegatives)) { + return new DatavServiceImpl.BlameResult(List.of(), List.of()); + } + // 2. 查询问责数据 + NegativeBlameQueryParam param = new NegativeBlameQueryParam(); + param.setNegativeIds(validNegatives.stream() + .map(Negative::getId) + .toList()); + List negativeBlames = negativeBlameResourceService.query(param); + if (CollUtil.isEmpty(negativeBlames)) { + return new DatavServiceImpl.BlameResult(List.of(), List.of()); + } + // 3. 个人问责 + List personalBlames = negativeBlames.stream() + .filter(one -> BlameType.personal.name().equals(one.getType())) + .filter(one -> StrUtil.isNotBlank(one.getHandleResultName())) + .filter(one -> !NO_BLAME.equals(one.getHandleResultName())) + .toList(); + // 4. 领导问责(去重) + Set seenLead = new HashSet<>(); + List leadBlames = negativeBlames.stream() + .filter(one -> StrUtil.isNotBlank(one.getLeadHandleResultName())) + .filter(one -> !NO_BLAME.equals(one.getLeadHandleResultName())) + .filter(one -> seenLead.add( + one.getNegativeId() + "_" + one.getLeadHandleResultName() + "_" + one.getLeadName() + )) + .toList(); + return new DatavServiceImpl.BlameResult(personalBlames, leadBlames); + } + + private LocalDateTime toLocalDateTime(Date date) { + if (date == null) { + return null; + } + return date.toInstant() + .atZone(ZoneId.systemDefault()) + .toLocalDateTime(); + } + + private long calculateRate(long numerator, long denominator) { + if (denominator == 0) { + return 0L; + } + return (numerator * 100 + denominator / 2) / denominator; + } + + private List buildAuditNegativeVoList(List departs, DataVRequest request) { + List result = new ArrayList<>(); + for (SupDepart depart : departs) { + List negativeListData = negativeMapper.getNegativeListData( + depart.getId(), + request.getBeginTime(), + request.getEndTime(), + List.of(request.getAuditType()) + ); + + long numerator = negativeListData.stream() + .filter(one -> "1".equals(one.getIsRectifyCode())) + .count(); + long denominator = negativeListData.size(); + AuditNegativeVo vo = new AuditNegativeVo(); + vo.setLabel(depart.getShortName()); + vo.setNumerator(numerator); + vo.setDenominator(denominator); + vo.setValue(calculateRate(numerator, denominator)); + result.add(vo); + } + return result.stream() + // 过滤没有问题数据的 + .filter(vo -> vo.getDenominator() > 0) + // 按整改率降序 + .sorted(Comparator.comparing(AuditNegativeVo::getValue).reversed()) + .toList(); + } + + + private BigDecimal sumAmount(List list, Function mapper, BigDecimal divisor) { + BigDecimal sum = list.stream() + .map(mapper) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + if (divisor == null || BigDecimal.ONE.compareTo(divisor) == 0) { + return sum; + } + + return sum.divide(divisor, 2, RoundingMode.HALF_UP); + } + + private BigDecimal sumAmountInWan(List list, Function mapper) { + return list.stream() + .map(mapper) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .divide(WAN, 2, RoundingMode.HALF_UP); + } + // endregion }