From fd57cbd61ca4094ac9857fdc3f5cf8c0ac7a887c Mon Sep 17 00:00:00 2001 From: buaixuexideshitongxue <2936013465@qq.com> Date: Wed, 18 Mar 2026 20:47:53 +0800 Subject: [PATCH] =?UTF-8?q?fix--=E6=A1=88=E4=BB=B6=E6=A0=B8=E6=9F=A5?= =?UTF-8?q?=E5=A4=A7=E5=B1=8F=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datav/DataVCaseVerifController.java | 12 +- .../subdatav/SubOneCaseVerifController.java | 139 ++----- .../mapper/DataCaseVerifMapper.java | 9 +- .../supervision/mapper/NegativeMapper.java | 6 +- .../pojo/vo/CaseVerificationMapVo.java | 36 +- .../supdepart/SupDepartResourceService.java | 8 + .../service/datav/DatavService.java | 35 ++ .../service/datav/DatavServiceImpl.java | 341 +++++++++++++++++- 8 files changed, 454 insertions(+), 132 deletions(-) diff --git a/src/main/java/com/biutag/supervision/controller/datav/DataVCaseVerifController.java b/src/main/java/com/biutag/supervision/controller/datav/DataVCaseVerifController.java index e08d3b7..4bc2159 100644 --- a/src/main/java/com/biutag/supervision/controller/datav/DataVCaseVerifController.java +++ b/src/main/java/com/biutag/supervision/controller/datav/DataVCaseVerifController.java @@ -18,7 +18,7 @@ import org.springframework.web.bind.annotation.*; import java.util.Date; import java.util.List; -import static com.biutag.supervision.constants.enums.ProblemSourcesEnum.A12389; +import static com.biutag.supervision.constants.enums.ProblemSourcesEnum.*; /** * @author wxc @@ -85,13 +85,14 @@ public class DataVCaseVerifController { @Operation(summary = "查处问题趋势") @GetMapping("/getCaseVerificationTrend") public Result getCaseVerificationTrend(@RequestParam Integer year) { - List proTrendList = negativeMapper.getTrend(year, A12389.getValue()); + List proTrendList = negativeMapper.getTrend(year, A12389.getValue(), SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); JSONObject data = new JSONObject().fluentPut("proTrendList", proTrendList); return Result.success(data); } // region 右边 + @Deprecated @Operation(summary = "案件来源占比 & 问责处理情况") @GetMapping("/getCaseSourceRateAndDealSituation") public Result getCaseSourceRateAndDealSituation(@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @@ -105,6 +106,13 @@ public class DataVCaseVerifController { return Result.success(data); } + @Operation(summary = "案件来源占比 & 问责处理情况") + @PostMapping("/getCaseSourceRateAndDealSituation") + public Result getCaseSourceRateAndDealSituation(@RequestBody DataVRequest request) { + return datavService.getCaseSourceRateAndDealSituation(request); + } + + @Operation(summary = "禁闭处理情况") @GetMapping("/getConfinementBar") 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 dd393ea..6a650d8 100644 --- a/src/main/java/com/biutag/supervision/controller/subdatav/SubOneCaseVerifController.java +++ b/src/main/java/com/biutag/supervision/controller/subdatav/SubOneCaseVerifController.java @@ -1,34 +1,24 @@ package com.biutag.supervision.controller.subdatav; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.NumberUtil; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.biutag.supervision.mapper.DataCaseVerifMapper; import com.biutag.supervision.mapper.NegativeMapper; import com.biutag.supervision.pojo.Result; -import com.biutag.supervision.pojo.entity.DataCaseVerif; -import com.biutag.supervision.pojo.entity.Negative; -import com.biutag.supervision.pojo.vo.CaseVerificationCountVo; -import com.biutag.supervision.pojo.vo.CaseVerificationMapVo; +import com.biutag.supervision.pojo.request.subdatav.SubDataVRequest; import com.biutag.supervision.pojo.vo.EchartsVo; -import com.biutag.supervision.pojo.vo.OrganizeProblemRankVo; +import com.biutag.supervision.service.datav.DatavService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.format.annotation.DateTimeFormat; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; -import java.util.Arrays; import java.util.Date; import java.util.List; import static com.biutag.supervision.constants.enums.ProblemSourcesEnum.*; -import static com.biutag.supervision.constants.enums.ProblemSourcesEnum.SJJB; /** * @Auther: sh @@ -43,36 +33,15 @@ import static com.biutag.supervision.constants.enums.ProblemSourcesEnum.SJJB; public class SubOneCaseVerifController { private final NegativeMapper negativeMapper; private final DataCaseVerifMapper dataCaseVerifMapper; + private final DatavService datavService; - /** - * 案件核查大屏分县市局排名 - * - * @param departId 部门id (分县市局ID) - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return Result - */ @Operation(summary = "分县市局排名") - @GetMapping("/getSubOneCaseVerificationRank") - public Result getSubOneCaseVerificationRank(@RequestParam Integer departId, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { - List fxsjRankList = negativeMapper.getPoliceCaseVerificationRank(beginTime, endTime, departId); - List jsdwRankList = negativeMapper.getTeamCaseVerificationRank(beginTime, endTime, departId); - JSONObject data = new JSONObject() - .fluentPut("fxsjRankList", fxsjRankList) - .fluentPut("jsdwRankList", jsdwRankList); - return Result.success(data); + @PostMapping("/getSubOneCaseVerificationRank") + public Result getSubOneCaseVerificationRank(@RequestBody SubDataVRequest request) { + return datavService.getSubOneCaseVerificationRank(request); } - /** - * 案件问题类型 - * - * @param departId 部门id (分县市局ID) - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return Result - */ + @Operation(summary = "案件问题性质") @GetMapping("/getSubOneCaseProblemProperty") public Result getCaseProblemProperty(@RequestParam Integer departId, @@ -91,64 +60,25 @@ public class SubOneCaseVerifController { // region 中间 - /** - * 案件核查大屏中央数据总览 - * - * @param departId 部门id (分县市局ID) - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return Result - */ @Operation(summary = "中央数据总览") - @GetMapping("/getSubOneAllCaseVerificationCount") - public Result getSubOneAllCaseVerificationCount(@RequestParam Integer departId, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { - - endTime= DateUtil.endOfDay(endTime); - CaseVerificationCountVo overview = negativeMapper.getSuboOneAllCaseVerificationCount(beginTime, endTime, departId); - long total =dataCaseVerifMapper.selectCount( - new LambdaQueryWrapper().between(DataCaseVerif::getCreateTime,beginTime,endTime) - .eq(DataCaseVerif::getSecondDepartId,departId) - ); - overview.setTotal((int) total); - - List list = Arrays.asList( A12389.getValue(),SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); - long confirmed = negativeMapper.selectCount(new LambdaQueryWrapper() - .eq(Negative::getSecondInvolveDepartId,departId) - .in(Negative::getProblemSourcesCode,list).between(Negative::getCrtTime,beginTime,endTime)); - - - overview.setConfirmed((int) confirmed); - if(total != 0 && confirmed != 0) { - overview.setRate(NumberUtil.div((Number) (confirmed * 100),total ).doubleValue()); - }else{ - overview.setRate(0.00); - } - JSONObject res = new JSONObject().fluentPut("overview", overview); - return Result.success(res); + @PostMapping("/getSubOneAllCaseVerificationCount") + public Result getSubOneAllCaseVerificationCount(@RequestBody SubDataVRequest request) { + return datavService.getSubOneAllCaseVerificationCount(request); } - /** - * 案件核查大屏地图 - * - * @param departId 部门id (分县市局ID) - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return Result - */ + + @Operation(summary = "地图Icon数据") - @GetMapping("/getSubOneCaseVerificationMap") + @PostMapping("/getSubOneCaseVerificationMap") // @Cacheable(cacheNames = "Supervision:Screen:SubOneCaseVerificationMap", key = "#departId+'_'+#beginTime.getTime() + '_' +#endTime.getTime()") - public Result getSubOneCaseVerificationMap(@RequestParam Integer departId, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, - @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { - List caseVerificationMapList = negativeMapper.getSubOneCaseVerificationMap(beginTime, endTime, departId); - JSONObject res = new JSONObject().fluentPut("caseVerificationMapList", caseVerificationMapList); - return Result.success(res); + public Result getSubOneCaseVerificationMap(@RequestBody SubDataVRequest request) { + return datavService.getSubOneCaseVerificationMap(request); + } + + /** * 查处问题趋势 * @@ -164,10 +94,7 @@ public class SubOneCaseVerifController { JSONObject data = new JSONObject().fluentPut("proTrendList", proTrendList); return Result.success(data); } -// endregion - - // region 右边 /** * 案件来源占比 和 问责处理情况 @@ -188,30 +115,26 @@ public class SubOneCaseVerifController { .fluentPut("caseSourceRateList", caseSourceRateList) .fluentPut("dealSituationPieList", dealSituationPieList); return Result.success(data); -// return null; } - /** - * 禁闭处理情况 和 停职处理情况 - * - * @param departId 部门id (分县市局ID) - * @param beginTime 开始时间 - * @param endTime 结束时间 - * @return Result - */ + @Operation(summary = "案件来源占比 & 问责处理情况") + @PostMapping("/getSubOneCaseSourceRateAndDealSituation") + public Result getSubOneCaseSourceRateAndDealSituation(@RequestBody SubDataVRequest request) { + return datavService.getSubOneCaseSourceRateAndDealSituation(request); + } + + + @Operation(summary = "禁闭处理情况 & 停职处理情况") @GetMapping("/getSubOneConfinementAndPause") public Result getSubOneConfinement(@RequestParam Integer departId, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime) { -// List jbclList = negativeMapper.getSubOneConfinementAndPause(beginTime, endTime,departId, 1); // 禁闭 -// List tzclList = negativeMapper.getSubOneConfinementAndPause(beginTime, endTime, departId,2); // 停职 -// JSONObject data = new JSONObject() -// .fluentPut("jbclList", jbclList) -// .fluentPut("tzclList", tzclList); -// return Result.success(data); - return Result.success(null); + endTime = DateUtil.endOfDay(endTime); + List list =dataCaseVerifMapper.getSubOneConfinement(departId, beginTime,endTime); + JSONObject jsonObject =new JSONObject().fluentPut("confinementList",list); + return Result.success(jsonObject); } diff --git a/src/main/java/com/biutag/supervision/mapper/DataCaseVerifMapper.java b/src/main/java/com/biutag/supervision/mapper/DataCaseVerifMapper.java index 6d380e2..c0b8b4f 100644 --- a/src/main/java/com/biutag/supervision/mapper/DataCaseVerifMapper.java +++ b/src/main/java/com/biutag/supervision/mapper/DataCaseVerifMapper.java @@ -50,7 +50,7 @@ public interface DataCaseVerifMapper extends BaseMapper { " negative_problem_relation npr LEFT JOIN " + " negative ng on npr.negativeId = ng.id " + " where npr.oneLevelCode = #{code} " + - " and ng.problemSourcesCode in (17) " + + " and ng.problemSourcesCode in (17, 18, 19, 20) " + " and ng.crtTime BETWEEN #{beginTime} AND #{endTime} " + " GROUP BY twoLevelContent ") List getCaseTypeNumber(Date beginTime, Date endTime, Integer code); @@ -75,4 +75,11 @@ public interface DataCaseVerifMapper extends BaseMapper { " AND dcv.discovery_time >= #{beginTime} " + " AND dcv.discovery_time < #{endTime}") List getListData(@Param("secondDepartId") String secondDepartId, @Param("beginTime") Date beginTime, @Param("endTime") Date endTime); + + @Select(" SELECT matter as name, COUNT(*) as value from confinement cf " + + " left join sup_depart sd on cf.org_id = sd.id " + + " WHERE start_time BETWEEN #{beginTime} AND #{endTime} " + + " and sd.id = #{departId} " + + " GROUP BY matter ") + List getSubOneConfinement(Integer departId, Date beginTime, Date endTime); } diff --git a/src/main/java/com/biutag/supervision/mapper/NegativeMapper.java b/src/main/java/com/biutag/supervision/mapper/NegativeMapper.java index 17b5e03..ba4e5a4 100644 --- a/src/main/java/com/biutag/supervision/mapper/NegativeMapper.java +++ b/src/main/java/com/biutag/supervision/mapper/NegativeMapper.java @@ -245,7 +245,7 @@ public interface NegativeMapper extends BaseMapper { "INNER JOIN negative_blame nb ON nb.negativeId=ng.id " + "WHERE handleResultName is NOT NULL " + "AND ng.crtTime BETWEEN #{beginTime} AND #{endTime} " + - "AND ng.problemSourcesCode in (17) " + + "AND ng.problemSourcesCode in (17, 18, 19, 20) " + "AND ng.check_status_code in (1, 2, 3) " + "GROUP BY nb.handleResultName") List getDealSituation(Date beginTime, Date endTime); @@ -613,7 +613,7 @@ public interface NegativeMapper extends BaseMapper { "COUNT(*) AS `value` FROM negative ng " + "INNER JOIN sup_depart sd ON ng.involveDepartId=sd.id " + "INNER JOIN negative_problem_relation npr ON ng.id=npr.negativeId " + - "WHERE ng.checkStatus!=3 " + + "WHERE ng.check_status_code in (1, 2, 3) " + "AND sd.pid = #{departId} " + "AND ng.problemSourcesCode IN (17,18,19,20) " + "AND ng.crtTime BETWEEN #{beginTime} AND #{endTime} " + @@ -682,7 +682,7 @@ public interface NegativeMapper extends BaseMapper { @Select("SELECT problemSources AS name, count(ng.id) AS value " + "FROM negative ng " + - "WHERE problemSourcesCode IN (17) AND crtTime BETWEEN #{beginTime} AND #{endTime} " + + "WHERE problemSourcesCode IN (17, 18, 19, 20) AND crtTime BETWEEN #{beginTime} AND #{endTime} " + "GROUP BY problemSources") List getCaseSourceRate(Date beginTime, Date endTime); diff --git a/src/main/java/com/biutag/supervision/pojo/vo/CaseVerificationMapVo.java b/src/main/java/com/biutag/supervision/pojo/vo/CaseVerificationMapVo.java index 8319e8a..1d99335 100644 --- a/src/main/java/com/biutag/supervision/pojo/vo/CaseVerificationMapVo.java +++ b/src/main/java/com/biutag/supervision/pojo/vo/CaseVerificationMapVo.java @@ -1,5 +1,6 @@ package com.biutag.supervision.pojo.vo; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.io.Serializable; @@ -13,11 +14,34 @@ import java.io.Serializable; public class CaseVerificationMapVo implements Serializable { private String name; private String departId; - private Integer total; // 总案件数 - private Integer confirmed; // 已查实案件数 - private Integer dealCasePro; // 查处理案件数 - private Integer punishPre; // 问责人数 - private Integer punishOrg; // 问责单位数 - private Double rate; // 查实率 + + @Schema(description = "案件总数") + private Integer total; + + @Schema(description = "已查实案件数") + private Integer confirmed; + + @Schema(description = "查处案件数") + private Integer dealCasePro; + + @Schema(description = "问责人数") + private Integer punishPre; + + @Schema(description = "问责单位数") + private Integer punishOrg; + + @Schema(description = "查实率") + private Double rate; + + + public void initDefaultIfNull() { + this.total = this.total == null ? 0 : this.total; + this.confirmed = this.confirmed == null ? 0 : this.confirmed; + this.dealCasePro = this.dealCasePro == null ? 0 : this.dealCasePro; + this.punishPre = this.punishPre == null ? 0 : this.punishPre; + this.punishOrg = this.punishOrg == null ? 0 : this.punishOrg; + this.rate = this.rate == null ? 0.0 : this.rate; + } + } diff --git a/src/main/java/com/biutag/supervision/repository/supdepart/SupDepartResourceService.java b/src/main/java/com/biutag/supervision/repository/supdepart/SupDepartResourceService.java index acf209c..8757e5d 100644 --- a/src/main/java/com/biutag/supervision/repository/supdepart/SupDepartResourceService.java +++ b/src/main/java/com/biutag/supervision/repository/supdepart/SupDepartResourceService.java @@ -51,6 +51,14 @@ public class SupDepartResourceService extends BaseDAO { + public List getLevel3ByPidSupDepartList(String pid){ + SupDepartQueryParam supDepartGroupParam = new SupDepartQueryParam(); + supDepartGroupParam.setLevel("3"); + supDepartGroupParam.setPid(pid); + return this.query(supDepartGroupParam); + } + + /** 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 ab6aa78..c75276d 100644 --- a/src/main/java/com/biutag/supervision/service/datav/DatavService.java +++ b/src/main/java/com/biutag/supervision/service/datav/DatavService.java @@ -292,4 +292,39 @@ public interface DatavService { * @return */ Result getCaseVerificationMap(DataVRequest request); + + /** + * 案件核查 一级大屏 案件来源占比 & 问责处理情况 + * @param request + * @return + */ + 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 9717f29..2f70377 100644 --- a/src/main/java/com/biutag/supervision/service/datav/DatavServiceImpl.java +++ b/src/main/java/com/biutag/supervision/service/datav/DatavServiceImpl.java @@ -2,7 +2,6 @@ package com.biutag.supervision.service.datav; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -243,7 +242,7 @@ public class DatavServiceImpl implements DatavService { queryWrapper12337.and(wrapper -> wrapper .in("third_depart_id", allDepartIds) .or() - .in("second_depart_id", allDepartIds) ); + .in("second_depart_id", allDepartIds)); long xf12337Count = dataPetition12337Mapper.selectCount(queryWrapper12337); // 国家信访 DataPetitionComplaintQueryParam countryParam = new DataPetitionComplaintQueryParam(); @@ -441,14 +440,18 @@ public class DatavServiceImpl implements DatavService { // 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())); + 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(); @@ -478,12 +481,12 @@ public class DatavServiceImpl implements DatavService { .filter(one -> !"不予追责".equals(one.getHandleResultName())) .toList(); //计算查实率(向上取整) - Double verificationRate = 0.0; + Double verificationRate = 0.0; if (!dataCaseVerifs.isEmpty()) { - double rawRate = (double) ssNegative.size() / dataCaseVerifs.size() * 100; + double rawRate = (double) ssNegative.size() / (dataCaseVerifs.size() + jbNegatvieList.size()) * 100; verificationRate = Math.round(rawRate * 10) / 10.0; } - overview.setTotal(dataCaseVerifs.size()); + overview.setTotal(dataCaseVerifs.size() + jbNegatvieList.size()); overview.setConfirmed(ssNegative.size()); overview.setDealCasePro((long) negatives.size()); overview.setPunishPre((long) (personalBlames.size() + leadBlames.size())); @@ -1123,7 +1126,7 @@ public class DatavServiceImpl implements DatavService { List negativeList = negativeMapper.getChangedRank(fxsj.getId(), request.getBeginTime(), request.getEndTime()); // 问题数 int totalPro = negativeList.size(); - if (totalPro==0){ + if (totalPro == 0) { continue; } // 办结数 @@ -1704,7 +1707,7 @@ public class DatavServiceImpl implements DatavService { @Override public Result getCaseVerificationRank(DataVRequest request) { - List proCode = List.of(A12389.getValue()); + List proCode = List.of(A12389.getValue(), SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); SupDepartQueryParam supDepartQueryParam = new SupDepartQueryParam(); supDepartQueryParam.setStatisticsGroupId(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId()); List fxsjDw = supDepartResourceService.query(supDepartQueryParam); @@ -1754,10 +1757,15 @@ public class DatavServiceImpl implements DatavService { @Override public Result getCaseVerificationMap(DataVRequest request) { + + // 交办 + Set ldjbCode = Set.of(SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); + + SupDepartQueryParam supDepartQueryParam = new SupDepartQueryParam(); supDepartQueryParam.setStatisticsGroupId(DepartGroupEnum.COUNTY_CITY_BUREAUS.getId()); List fxsjDw = supDepartResourceService.query(supDepartQueryParam); - List proCode = List.of(A12389.getValue()); + List proCode = List.of(A12389.getValue(), SLDJB.getValue(), ZDDJB.getValue(), SJJB.getValue()); List caseVerificationMapList = new ArrayList<>(); for (SupDepart fxsj : fxsjDw) { @@ -1766,6 +1774,8 @@ public class DatavServiceImpl implements DatavService { List dataCaseVerifs = dataCaseVerifMapper.getListData(fxsj.getId(), request.getBeginTime(), request.getEndTime()); List negatives = negativeMapper.getNegativeListData(fxsj.getId(), 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); @@ -1792,15 +1802,259 @@ public class DatavServiceImpl implements DatavService { .filter(one -> !"不予追责".equals(one.getHandleResultName())) .toList(); - Double verificationRate = 0.0; + Double verificationRate = 0.0; if (!dataCaseVerifs.isEmpty()) { - double rawRate = (double) ssNegative.size() / dataCaseVerifs.size() * 100; + double rawRate = (double) ssNegative.size() / (dataCaseVerifs.size() + jbNegatvieList.size()) * 100; verificationRate = Math.round(rawRate * 10) / 10.0; } CaseVerificationMapVo caseVerificationMapVo = new CaseVerificationMapVo(); caseVerificationMapVo.setName(fxsj.getShortName()); caseVerificationMapVo.setDepartId(fxsj.getId()); - caseVerificationMapVo.setTotal(dataCaseVerifs.size()); + 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); + } + JSONObject res = new JSONObject().fluentPut("caseVerificationMapList", caseVerificationMapList); + 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<>(); + 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); + + + // 案件来源占比 + // 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); + + } + + + @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()); @@ -1808,10 +2062,73 @@ public class DatavServiceImpl implements DatavService { 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); + } + + private List filterZero(List list) { + return list.stream() + .filter(e -> e.getValue() != null && e.getValue() > 0) + .toList(); + } + + public Result getSubOneMailMapIcon() { // ✅ 注意:这里的 name 必须和地图 geojson 区域名一致(一般是“xx街道/园区”)