Browse Source

fix--问责数量修改

master
buaixuexideshitongxue 1 month ago
parent
commit
10074d37a2
  1. 623
      src/main/java/com/biutag/supervision/service/datav/DatavServiceImpl.java
  2. 134
      src/main/java/com/biutag/supervision/service/subDatav/SubDatavServiceImpl.java

623
src/main/java/com/biutag/supervision/service/datav/DatavServiceImpl.java

@ -435,39 +435,15 @@ public class DatavServiceImpl implements DatavService {
List<Negative> negatives = negativeResourceService.query(negativeQueryParam);
List<Negative> ssList = negatives.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList();
List<Negative> 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<NegativeBlame> negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam);
// 3. 个人问责
List<NegativeBlame> 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<String> seenLead = new HashSet<>();
List<NegativeBlame> 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<NegativeBlame> unitBlames = negativeBlames.stream()
.filter(one -> BlameType.department.name().equals(one.getType()))
.filter(one -> StrUtil.isNotBlank(one.getHandleResultName()))
.filter(one -> !"不予追责".equals(one.getHandleResultName()))
.toList();
// 使用统一的问责次数统计口径,便于核对大屏与导出逻辑差异
AccountabilityCountResult accountabilityCountResult = buildAccountabilityCountResult(negatives);
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()));
overview.setRelativeOrg(accountabilityCountResult.unitCount());
overview.setRelativePer(accountabilityCountResult.personTotalCount());
JSONObject data = new JSONObject().fluentPut("overview", overview);
return Result.success(data);
}
@ -487,41 +463,15 @@ public class DatavServiceImpl implements DatavService {
List<Negative> ssList = negatives.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList();
List<Negative> 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<NegativeBlame> negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam);
// 3. 个人问责
List<NegativeBlame> 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<String> seenLead = new HashSet<>();
List<NegativeBlame> 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<NegativeBlame> unitBlames = negativeBlames.stream()
.filter(one -> BlameType.department.name().equals(one.getType()))
.filter(one -> StrUtil.isNotBlank(one.getHandleResultName()))
.filter(one -> !"不予追责".equals(one.getHandleResultName()))
.toList();
// 使用统一的问责次数统计口径,便于核对大屏与导出逻辑差异
AccountabilityCountResult accountabilityCountResult = buildAccountabilityCountResult(negatives);
VideoSuperviseMapIconVo videoSuperviseMapIconVo = new VideoSuperviseMapIconVo();
videoSuperviseMapIconVo.setName(fxsj.getShortName());
videoSuperviseMapIconVo.setDepartId(fxsj.getId());
videoSuperviseMapIconVo.setDiscoverProblem(ssList.size());
videoSuperviseMapIconVo.setCompletionProblem(completedList.size());
videoSuperviseMapIconVo.setRelativeOrg(unitBlames.size());
videoSuperviseMapIconVo.setRelativePer(personalBlames.size() + leadBlames.size());
videoSuperviseMapIconVo.setRelativeOrg(Math.toIntExact(accountabilityCountResult.unitCount()));
videoSuperviseMapIconVo.setRelativePer(Math.toIntExact(accountabilityCountResult.personTotalCount()));
videoSuperviseMapIconVoList.add(videoSuperviseMapIconVo);
}
videoSuperviseMapIconVoList.forEach(VideoSuperviseMapIconVo::initDefaultIfNull);
@ -662,34 +612,8 @@ public class DatavServiceImpl implements DatavService {
superviseReportLambdaQueryWrapper.between(SuperviseReport::getCrtTime, request.getBeginTime(), request.getEndTime());
superviseReportLambdaQueryWrapper.eq(SuperviseReport::getType, "1");
List<SuperviseReport> superviseReportList = superviseReportService.list(superviseReportLambdaQueryWrapper);
List<String> 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<NegativeBlame> negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam);
// 3. 个人问责
List<NegativeBlame> 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<String> seenLead = new HashSet<>();
List<NegativeBlame> 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<NegativeBlame> unitBlames = negativeBlames.stream()
.filter(one -> BlameType.department.name().equals(one.getType()))
.filter(one -> StrUtil.isNotBlank(one.getHandleResultName()))
.filter(one -> !"不予追责".equals(one.getHandleResultName()))
.toList();
// 使用统一的问责次数统计口径,便于核对大屏与导出逻辑差异
AccountabilityCountResult accountabilityCountResult = buildAccountabilityCountResult(negatives);
// 通报问题数
overView.setProblemNumber(negatives.size());
@ -700,8 +624,8 @@ public class DatavServiceImpl implements DatavService {
// 已办结
overView.setCompletedNumber((long) completedList.size());
// 问责单位数
overView.setDepartNumber((long) unitBlames.size());
overView.setPersonNumber((long) (personalBlames.size() + leadBlames.size()));
overView.setDepartNumber(accountabilityCountResult.unitCount());
overView.setPersonNumber(accountabilityCountResult.personTotalCount());
return Result.success(overView);
}
@ -735,14 +659,15 @@ public class DatavServiceImpl implements DatavService {
.orElse(Collections.emptySet());
superviseReportLambdaQueryWrapper.in(CollectionUtil.isNotEmpty(allDepartIds), SuperviseReport::getCrtDepartId, allDepartIds);
List<SuperviseReport> superviseReportList = superviseReportService.list(superviseReportLambdaQueryWrapper);
BlameResult blameResult = this.buildBlameResult(negatives);
// 使用统一的问责次数统计口径,便于核对大屏与导出逻辑差异
AccountabilityCountResult accountabilityCountResult = buildAccountabilityCountResult(negatives);
superviseMapIconVo.setDepartId(fxsj.getId());
superviseMapIconVo.setName(fxsj.getShortName());
superviseMapIconVo.setTotalPro(negatives.size());
superviseMapIconVo.setProcessingNumber(processingList.size());
superviseMapIconVo.setCompletedNumber(completedList.size());
superviseMapIconVo.setRelationOrg(String.valueOf(blameResult.unitBlames().size()));
superviseMapIconVo.setPersonNum(String.valueOf(blameResult.personalBlames().size() + blameResult.leadBlames().size()));
superviseMapIconVo.setRelationOrg(String.valueOf(accountabilityCountResult.unitCount()));
superviseMapIconVo.setPersonNum(String.valueOf(accountabilityCountResult.personTotalCount()));
superviseMapIconVo.setReportNumber(String.valueOf(superviseReportList.size()));
superviseTempMapVoList.add(superviseMapIconVo);
}
@ -900,30 +825,8 @@ public class DatavServiceImpl implements DatavService {
List<Negative> 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<NegativeBlame> negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam);
// 3. 个人问责
List<NegativeBlame> 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<String> seenLead = new HashSet<>();
List<NegativeBlame> 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<NegativeBlame> unitBlames = negativeBlames.stream()
.filter(one -> BlameType.department.name().equals(one.getType()))
.filter(one -> StrUtil.isNotBlank(one.getHandleResultName()))
.filter(one -> !"不予追责".equals(one.getHandleResultName()))
.toList();
// 使用统一的问责次数统计口径,便于核对大屏与导出逻辑差异
AccountabilityCountResult accountabilityCountResult = buildAccountabilityCountResult(negatives);
//计算查实率(向上取整)
Double verificationRate = 0.0;
if (!dataCaseVerifs.isEmpty() || !jbNegatvieList.isEmpty()) {
@ -933,8 +836,8 @@ public class DatavServiceImpl implements DatavService {
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.setPunishPre(accountabilityCountResult.personTotalCount());
overview.setPunishOrg(accountabilityCountResult.unitCount());
overview.setRate(verificationRate);
JSONObject res = new JSONObject().fluentPut("overview", overview);
return Result.success(res);
@ -962,31 +865,8 @@ public class DatavServiceImpl implements DatavService {
List<Negative> ssNegative = negatives.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList();
// 交办案件数
List<Negative> jbNegatvieList = negatives.stream().filter(one -> ldjbCode.contains(one.getProblemSourcesCode())).toList();
NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam();
negativeBlameQueryParam.setNegativeIds(ssNegative.stream().map(Negative::getId).toList());
List<NegativeBlame> negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam);
// 3. 个人问责
List<NegativeBlame> 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<String> seenLead = new HashSet<>();
List<NegativeBlame> 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<NegativeBlame> unitBlames = negativeBlames.stream()
.filter(one -> BlameType.department.name().equals(one.getType()))
.filter(one -> StrUtil.isNotBlank(one.getHandleResultName()))
.filter(one -> !"不予追责".equals(one.getHandleResultName()))
.toList();
// 使用统一的问责次数统计口径,便于核对大屏与导出逻辑差异
AccountabilityCountResult accountabilityCountResult = buildAccountabilityCountResult(negatives);
Double verificationRate = 0.0;
if (!dataCaseVerifs.isEmpty() || !jbNegatvieList.isEmpty()) {
@ -999,8 +879,8 @@ public class DatavServiceImpl implements DatavService {
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.setPunishPre(Math.toIntExact(accountabilityCountResult.personTotalCount()));
caseVerificationMapVo.setPunishOrg(Math.toIntExact(accountabilityCountResult.unitCount()));
caseVerificationMapVo.setRate(verificationRate);
caseVerificationMapList.add(caseVerificationMapVo);
}
@ -1238,7 +1118,8 @@ public class DatavServiceImpl implements DatavService {
negativeQueryParam.setCrtTime(List.of(request.getBeginTime(), request.getEndTime()));
negativeQueryParam.setProblemSourcesCode(List.of(ZFTZSJ.getValue()));
List<Negative> negativeListData = negativeResourceService.query(negativeQueryParam);
BlameResult blameResult = this.buildBlameResult(negativeListData);
// 使用统一的问责次数统计口径,便于核对大屏与导出逻辑差异
AccountabilityCountResult accountabilityCountResult = buildAccountabilityCountResult(negativeListData);
BigDecimal zftzje = this.sumAmountInWan(reportProjects, ReportProject::getReportMoney);
BigDecimal zftzsjje = this.sumAmountInWan(reportProjects, ReportProject::getArchivingReduceMoney);
@ -1246,12 +1127,7 @@ public class DatavServiceImpl implements DatavService {
auditOverview.setAuditAmount(zftzje);
auditOverview.setAuditSjAmount(zftzsjje);
auditOverview.setNegativeNumber(negativeListData.size());
long accountableNumber = 0L;
if (blameResult != null) {
accountableNumber += blameResult.personalBlames() == null ? 0 : blameResult.personalBlames().size();
accountableNumber += blameResult.leadBlames() == null ? 0 : blameResult.leadBlames().size();
}
auditOverview.setAccountableNumber(accountableNumber);
auditOverview.setAccountableNumber(accountabilityCountResult.personTotalCount());
} else {
DataAuditQueryParam dataAuditQueryParam = new DataAuditQueryParam();
dataAuditQueryParam.setAuditTimeStart(toLocalDateTime(request.getBeginTime()));
@ -1262,19 +1138,15 @@ public class DatavServiceImpl implements DatavService {
negativeQueryParam.setCrtTime(List.of(request.getBeginTime(), request.getEndTime()));
negativeQueryParam.setProblemSourcesCode(List.of(request.getAuditType()));
List<Negative> negativeListData = negativeResourceService.query(negativeQueryParam);
BlameResult blameResult = this.buildBlameResult(negativeListData);
// 使用统一的问责次数统计口径,便于核对大屏与导出逻辑差异
AccountabilityCountResult accountabilityCountResult = buildAccountabilityCountResult(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());
long accountableNumber = 0L;
if (blameResult != null) {
accountableNumber += blameResult.personalBlames() == null ? 0 : blameResult.personalBlames().size();
accountableNumber += blameResult.leadBlames() == null ? 0 : blameResult.leadBlames().size();
}
auditOverview.setAccountableNumber(accountableNumber);
auditOverview.setAccountableNumber(accountabilityCountResult.personTotalCount());
}
JSONObject object = new JSONObject();
object.fluentPut("fxData", fxData);
@ -1329,7 +1201,8 @@ public class DatavServiceImpl implements DatavService {
negativeQueryParam.setCrtTime(List.of(request.getBeginTime(), request.getEndTime()));
negativeQueryParam.setProblemSourcesCode(GROUP_27_28_29_30);
List<Negative> negativeListData = negativeResourceService.query(negativeQueryParam);
BlameResult blameResult = this.buildBlameResult(negativeListData);
// 使用统一的问责次数统计口径,便于核对大屏与导出逻辑差异
AccountabilityCountResult accountabilityCountResult = buildAccountabilityCountResult(negativeListData);
// 政府投资总金额
BigDecimal zftzje = this.sumAmountInWan(reportProjects, ReportProject::getReportMoney);
// 政府投资审减金额
@ -1342,12 +1215,7 @@ public class DatavServiceImpl implements DatavService {
overview.setAuditAmount(zftzje.add(qtsjje));
overview.setAuditSjAmount(zftzsjje.add(qtsjwtje));
overview.setNegativeNumber(negativeListData.size());
long accountableNumber = 0L;
if (blameResult != null) {
accountableNumber += blameResult.personalBlames() == null ? 0 : blameResult.personalBlames().size();
accountableNumber += blameResult.leadBlames() == null ? 0 : blameResult.leadBlames().size();
}
overview.setAccountableNumber(accountableNumber);
overview.setAccountableNumber(accountabilityCountResult.personTotalCount());
return Result.success(overview);
}
@ -1384,7 +1252,8 @@ public class DatavServiceImpl implements DatavService {
List<Negative> negativeListData = negativeMapper.getNegativeListData(key, request.getBeginTime(), request.getEndTime(), GROUP_27_28_29_30);
BlameResult blameResult = this.buildBlameResult(negativeListData);
// 使用统一的问责次数统计口径,便于核对大屏与导出逻辑差异
AccountabilityCountResult accountabilityCountResult = buildAccountabilityCountResult(negativeListData);
// 政府投资总金额
BigDecimal zftzje = this.sumAmountInWan(reportProjects, ReportProject::getReportMoney);
// 政府投资审减金额
@ -1398,12 +1267,7 @@ public class DatavServiceImpl implements DatavService {
auditSuperviseMapIconVo.setAuditAmount(zftzje.add(qtsjje));
auditSuperviseMapIconVo.setAuditSjAmount(zftzsjje.add(qtsjwtje));
auditSuperviseMapIconVo.setNegativeNumber(negativeListData.size());
int accountableNumber = 0;
if (blameResult != null) {
accountableNumber += blameResult.personalBlames() == null ? 0 : blameResult.personalBlames().size();
accountableNumber += blameResult.leadBlames() == null ? 0 : blameResult.leadBlames().size();
}
auditSuperviseMapIconVo.setAccountableNumber(accountableNumber);
auditSuperviseMapIconVo.setAccountableNumber(Math.toIntExact(accountabilityCountResult.personTotalCount()));
auditSuperviseMapIconVoList.add(auditSuperviseMapIconVo);
}
JSONObject data = new JSONObject().fluentPut("auditSuperviseMapIconVoList", auditSuperviseMapIconVoList);
@ -1531,6 +1395,88 @@ public class DatavServiceImpl implements DatavService {
}
private static final Set<String> NO_ACCOUNTABILITY_SET = Set.of("不予问责", "不予追责");
private record AccountabilityCountResult(
long personalCount,
long leaderCount,
long personTotalCount,
long unitCount
) {}
private AccountabilityCountResult buildAccountabilityCountResult(List<Negative> negatives) {
if (CollectionUtil.isEmpty(negatives)) {
return new AccountabilityCountResult(0L, 0L, 0L, 0L);
}
List<String> effectiveNegativeIds = negatives.stream()
.filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode())
|| CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode()))
.map(Negative::getId)
.filter(StrUtil::isNotBlank)
.distinct()
.toList();
if (CollectionUtil.isEmpty(effectiveNegativeIds)) {
return new AccountabilityCountResult(0L, 0L, 0L, 0L);
}
NegativeBlameQueryParam param = new NegativeBlameQueryParam();
param.setNegativeIds(effectiveNegativeIds);
List<NegativeBlame> negativeBlames = negativeBlameResourceService.query(param);
if (CollectionUtil.isEmpty(negativeBlames)) {
return new AccountabilityCountResult(0L, 0L, 0L, 0L);
}
long personalCount = negativeBlames.stream()
.filter(one -> BlameType.personal.name().equals(one.getType()))
.filter(one -> StrUtil.isNotBlank(one.getBlameName()))
.flatMap(one -> splitValidAccountabilityResults(one.getHandleResultName()).stream()
.map(resultName -> one.getNegativeId() + "_" + one.getBlameName() + "_" + resultName))
.distinct()
.count();
long leaderCount = negativeBlames.stream()
.filter(one -> BlameType.personal.name().equals(one.getType()))
.filter(one -> StrUtil.isNotBlank(one.getLeadName()))
.flatMap(one -> splitValidAccountabilityResults(one.getLeadHandleResultName()).stream()
.map(resultName -> one.getNegativeId() + "_" + one.getLeadName() + "_" + resultName))
.distinct()
.count();
long unitCount = negativeBlames.stream()
.filter(one -> BlameType.department.name().equals(one.getType()))
.filter(one -> StrUtil.isNotBlank(one.getBlameName()))
.flatMap(one -> splitValidAccountabilityResults(one.getHandleResultName()).stream()
.map(resultName -> one.getNegativeId() + "_" + one.getBlameName() + "_" + resultName))
.distinct()
.count();
return new AccountabilityCountResult(
personalCount,
leaderCount,
personalCount + leaderCount,
unitCount
);
}
private List<String> splitValidAccountabilityResults(String raw) {
if (StrUtil.isBlank(raw)) {
return List.of();
}
return Arrays.stream(raw.split("[、,,]"))
.map(String::trim)
.filter(StrUtil::isNotBlank)
.filter(item -> !NO_ACCOUNTABILITY_SET.contains(item))
.distinct()
.toList();
}
public record BlameResult(
List<NegativeBlame> personalBlames,
List<NegativeBlame> leadBlames,
@ -1667,337 +1613,4 @@ public class DatavServiceImpl implements DatavService {
// endregion
public Result<JSONObject> getSubOneMailMapIcon() {
// ✅ 注意:这里的 name 必须和地图 geojson 区域名一致(一般是“xx街道/园区”)
// departId 仍然放派出所 dept_id,用于你点击打开弹窗时传参
List<MailMapIconVo> list = new ArrayList<>();
// 东屯渡街道 -> 东屯渡派出所(2990)
MailMapIconVo a = new MailMapIconVo();
a.setName("东屯渡街道");
a.setDepartId("2990");
a.setCountryTotal("32");
a.setPoliceTotal("18");
a.setCommissionerTotal("6");
a.setNumTotal("9");
a.setTotal(String.valueOf(32 + 18 + 9)); // total 不含 commissionerTotal
list.add(a);
// 定王台街道 -> 定王台派出所(1245)
MailMapIconVo b = new MailMapIconVo();
b.setName("定王台街道");
b.setDepartId("1245");
b.setCountryTotal("21");
b.setPoliceTotal("10");
b.setCommissionerTotal("4");
b.setNumTotal("7");
b.setTotal(String.valueOf(21 + 10 + 7));
list.add(b);
// 火星街道 -> 火星派出所(2985)
MailMapIconVo c = new MailMapIconVo();
c.setName("火星街道");
c.setDepartId("2985");
c.setCountryTotal("45");
c.setPoliceTotal("24");
c.setCommissionerTotal("9");
c.setNumTotal("14");
c.setTotal(String.valueOf(45 + 24 + 14));
list.add(c);
// 五里牌街道 -> 五里牌派出所(2971)
MailMapIconVo d = new MailMapIconVo();
d.setName("五里牌街道");
d.setDepartId("2971");
d.setCountryTotal("16");
d.setPoliceTotal("9");
d.setCommissionerTotal("3");
d.setNumTotal("5");
d.setTotal(String.valueOf(16 + 9 + 5));
list.add(d);
// 荷花园街道 -> 荷花园派出所(1247)
MailMapIconVo e = new MailMapIconVo();
e.setName("荷花园街道");
e.setDepartId("1247");
e.setCountryTotal("38");
e.setPoliceTotal("20");
e.setCommissionerTotal("7");
e.setNumTotal("11");
e.setTotal(String.valueOf(38 + 20 + 11));
list.add(e);
// 文艺路街道 -> 文艺路派出所(2946)
MailMapIconVo f = new MailMapIconVo();
f.setName("文艺路街道");
f.setDepartId("2946");
f.setCountryTotal("12");
f.setPoliceTotal("6");
f.setCommissionerTotal("2");
f.setNumTotal("3");
f.setTotal(String.valueOf(12 + 6 + 3));
list.add(f);
// 朝阳街街道 -> 朝阳街派出所(2960) (你表里就是“朝阳街街道”)
MailMapIconVo g = new MailMapIconVo();
g.setName("朝阳街街道");
g.setDepartId("2960");
g.setCountryTotal("27");
g.setPoliceTotal("13");
g.setCommissionerTotal("5");
g.setNumTotal("8");
g.setTotal(String.valueOf(27 + 13 + 8));
list.add(g);
// 韭菜园街道 -> 韭菜园派出所(2940)
MailMapIconVo h = new MailMapIconVo();
h.setName("韭菜园街道");
h.setDepartId("2940");
h.setCountryTotal("19");
h.setPoliceTotal("7");
h.setCommissionerTotal("3");
h.setNumTotal("6");
h.setTotal(String.valueOf(19 + 7 + 6));
list.add(h);
// 隆平高科技园 -> (dept_id=2898)
MailMapIconVo i = new MailMapIconVo();
i.setName("隆平高科技园");
i.setDepartId("2898");
i.setCountryTotal("8");
i.setPoliceTotal("4");
i.setCommissionerTotal("1");
i.setNumTotal("2");
i.setTotal(String.valueOf(8 + 4 + 2));
list.add(i);
// 马王堆街道 -> 马王堆派出所(3003)
MailMapIconVo j = new MailMapIconVo();
j.setName("马王堆街道");
j.setDepartId("3003");
j.setCountryTotal("33");
j.setPoliceTotal("15");
j.setCommissionerTotal("6");
j.setNumTotal("10");
j.setTotal(String.valueOf(33 + 15 + 10));
list.add(j);
// 马坡岭街道 -> 马坡岭派出所(3019)
MailMapIconVo k = new MailMapIconVo();
k.setName("马坡岭街道");
k.setDepartId("3019");
k.setCountryTotal("14");
k.setPoliceTotal("5");
k.setCommissionerTotal("2");
k.setNumTotal("4");
k.setTotal(String.valueOf(14 + 5 + 4));
list.add(k);
// 湘湖街道 -> 湘湖派出所(1246)
MailMapIconVo l = new MailMapIconVo();
l.setName("湘湖街道");
l.setDepartId("1246");
l.setCountryTotal("26");
l.setPoliceTotal("12");
l.setCommissionerTotal("4");
l.setNumTotal("7");
l.setTotal(String.valueOf(26 + 12 + 7));
list.add(l);
// 东岸街道 -> 东岸派出所(1248)
MailMapIconVo m = new MailMapIconVo();
m.setName("东岸街道");
m.setDepartId("1248");
m.setCountryTotal("11");
m.setPoliceTotal("4");
m.setCommissionerTotal("1");
m.setNumTotal("3");
m.setTotal(String.valueOf(11 + 4 + 3));
list.add(m);
// 东湖街道 -> 东湖派出所(3038)
MailMapIconVo n = new MailMapIconVo();
n.setName("东湖街道");
n.setDepartId("3038");
n.setCountryTotal("29");
n.setPoliceTotal("16");
n.setCommissionerTotal("5");
n.setNumTotal("9");
n.setTotal(String.valueOf(29 + 16 + 9));
list.add(n);
JSONObject data = new JSONObject().fluentPut("mailMapIconList", list);
return Result.success(data);
}
public Result<JSONObject> mockSubOneEntanglementAndMassMail() {
// ===== 分县市局 - 群体集访 =====
List<OrganizeProblemRankVo> fxsjMassMailList = new ArrayList<>();
OrganizeProblemRankVo v1 = new OrganizeProblemRankVo();
v1.setLabel("浏阳市局");
v1.setValue("126");
fxsjMassMailList.add(v1);
OrganizeProblemRankVo v2 = new OrganizeProblemRankVo();
v2.setLabel("宁乡市局");
v2.setValue("98");
fxsjMassMailList.add(v2);
OrganizeProblemRankVo v3 = new OrganizeProblemRankVo();
v3.setLabel("长沙县局");
v3.setValue("86");
fxsjMassMailList.add(v3);
OrganizeProblemRankVo v4 = new OrganizeProblemRankVo();
v4.setLabel("望城区局");
v4.setValue("74");
fxsjMassMailList.add(v4);
OrganizeProblemRankVo v5 = new OrganizeProblemRankVo();
v5.setLabel("岳麓分局");
v5.setValue("63");
fxsjMassMailList.add(v5);
// ===== 分县市局 - 领导接访 =====
List<OrganizeProblemRankVo> fxsjLeaderReviewMailList = new ArrayList<>();
OrganizeProblemRankVo v6 = new OrganizeProblemRankVo();
v6.setLabel("浏阳市局");
v6.setValue("34");
fxsjLeaderReviewMailList.add(v6);
OrganizeProblemRankVo v7 = new OrganizeProblemRankVo();
v7.setLabel("宁乡市局");
v7.setValue("28");
fxsjLeaderReviewMailList.add(v7);
OrganizeProblemRankVo v8 = new OrganizeProblemRankVo();
v8.setLabel("长沙县局");
v8.setValue("25");
fxsjLeaderReviewMailList.add(v8);
OrganizeProblemRankVo v9 = new OrganizeProblemRankVo();
v9.setLabel("望城区局");
v9.setValue("19");
fxsjLeaderReviewMailList.add(v9);
OrganizeProblemRankVo v10 = new OrganizeProblemRankVo();
v10.setLabel("岳麓分局");
v10.setValue("16");
fxsjLeaderReviewMailList.add(v10);
// ===== 局属单位 - 群体集访 =====
List<OrganizeProblemRankVo> bwzdMassMailList = new ArrayList<>();
OrganizeProblemRankVo b1 = new OrganizeProblemRankVo();
b1.setLabel("治安支队");
b1.setValue("47");
bwzdMassMailList.add(b1);
OrganizeProblemRankVo b2 = new OrganizeProblemRankVo();
b2.setLabel("刑侦支队");
b2.setValue("39");
bwzdMassMailList.add(b2);
OrganizeProblemRankVo b3 = new OrganizeProblemRankVo();
b3.setLabel("交警支队");
b3.setValue("33");
bwzdMassMailList.add(b3);
OrganizeProblemRankVo b4 = new OrganizeProblemRankVo();
b4.setLabel("网安支队");
b4.setValue("28");
bwzdMassMailList.add(b4);
// ===== 局属单位 - 领导接访 =====
List<OrganizeProblemRankVo> bwzdLeaderReviewMailList = new ArrayList<>();
OrganizeProblemRankVo b5 = new OrganizeProblemRankVo();
b5.setLabel("治安支队");
b5.setValue("14");
bwzdLeaderReviewMailList.add(b5);
OrganizeProblemRankVo b6 = new OrganizeProblemRankVo();
b6.setLabel("刑侦支队");
b6.setValue("11");
bwzdLeaderReviewMailList.add(b6);
OrganizeProblemRankVo b7 = new OrganizeProblemRankVo();
b7.setLabel("交警支队");
b7.setValue("9");
bwzdLeaderReviewMailList.add(b7);
OrganizeProblemRankVo b8 = new OrganizeProblemRankVo();
b8.setLabel("网安支队");
b8.setValue("6");
bwzdLeaderReviewMailList.add(b8);
// ===== 汇总(分县市局)=====
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);
}
public Result<JSONObject> getSubOneFirstAndRepeatMail() {
// 派出所 mock
List<OrganizeProblemRankVo> fxsjFirstRankList = new ArrayList<>();
List<OrganizeProblemRankVo> fxsjRepeatRankList = new ArrayList<>();
fxsjFirstRankList.add(new OrganizeProblemRankVo("芙蓉派出所", "15"));
fxsjFirstRankList.add(new OrganizeProblemRankVo("天心派出所", "12"));
fxsjFirstRankList.add(new OrganizeProblemRankVo("雨花派出所", "9"));
fxsjFirstRankList.add(new OrganizeProblemRankVo("开福派出所", "7"));
fxsjRepeatRankList.add(new OrganizeProblemRankVo("芙蓉派出所", "6"));
fxsjRepeatRankList.add(new OrganizeProblemRankVo("天心派出所", "5"));
fxsjRepeatRankList.add(new OrganizeProblemRankVo("雨花派出所", "3"));
fxsjRepeatRankList.add(new OrganizeProblemRankVo("开福派出所", "2"));
// 大队 mock
List<OrganizeProblemRankVo> bwzdFirstRankList = new ArrayList<>();
List<OrganizeProblemRankVo> bwzdRepeatRankList = new ArrayList<>();
bwzdFirstRankList.add(new OrganizeProblemRankVo("刑侦大队", "22"));
bwzdFirstRankList.add(new OrganizeProblemRankVo("治安大队", "18"));
bwzdFirstRankList.add(new OrganizeProblemRankVo("交警大队", "13"));
bwzdRepeatRankList.add(new OrganizeProblemRankVo("刑侦大队", "8"));
bwzdRepeatRankList.add(new OrganizeProblemRankVo("治安大队", "6"));
bwzdRepeatRankList.add(new OrganizeProblemRankVo("交警大队", "4"));
// 汇总(派出所)
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);
}
}

134
src/main/java/com/biutag/supervision/service/subDatav/SubDatavServiceImpl.java

@ -113,6 +113,7 @@ public class SubDatavServiceImpl implements SubDatavService {
private SuperviseReportService superviseReportService;
private static final String NO_BLAME = "不予追责";
private static final Set<String> NO_ACCOUNTABILITY_SET = Set.of("不予问责", "不予追责");
private static final BigDecimal WAN = new BigDecimal("10000");
@ -319,39 +320,15 @@ public class SubDatavServiceImpl implements SubDatavService {
List<Negative> negatives = negativeMapper.getNegativeListData(request.getDepartId(), request.getBeginTime(), request.getEndTime(), List.of(SPDC.getValue()));
List<Negative> ssList = negatives.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()) || CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList();
List<Negative> 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<NegativeBlame> negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam);
// 3. 个人问责
List<NegativeBlame> 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<String> seenLead = new HashSet<>();
List<NegativeBlame> 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<NegativeBlame> unitBlames = negativeBlames.stream()
.filter(one -> BlameType.department.name().equals(one.getType()))
.filter(one -> StrUtil.isNotBlank(one.getHandleResultName()))
.filter(one -> !"不予追责".equals(one.getHandleResultName()))
.toList();
// 与 DatavServiceImpl 保持一致:按“有效问题 + 多处理结果拆分 + negativeId/对象/处理结果去重”的口径统计。
AccountabilityCountResult accountabilityCountResult = buildAccountabilityCountResult(negatives);
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()));
overview.setRelativeOrg(accountabilityCountResult.unitCount());
overview.setRelativePer(accountabilityCountResult.personTotalCount());
JSONObject data = new JSONObject().fluentPut("overview", overview);
return Result.success(data);
}
@ -541,15 +518,16 @@ public class SubDatavServiceImpl implements SubDatavService {
superviseReportLambdaQueryWrapper.eq(SuperviseReport::getType, "1");
superviseReportLambdaQueryWrapper.eq(SuperviseReport::getCrtDepartId, supDepart.getId());
List<SuperviseReport> superviseReportList = superviseReportService.list(superviseReportLambdaQueryWrapper);
DatavServiceImpl.BlameResult blameResult = this.buildBlameResult(negatives);
// 与 DatavServiceImpl 保持一致:按“有效问题 + 多处理结果拆分 + negativeId/对象/处理结果去重”的口径统计。
AccountabilityCountResult accountabilityCountResult = buildAccountabilityCountResult(negatives);
SuperviseMapIconVo superviseMapIconVo = new SuperviseMapIconVo();
superviseMapIconVo.setName(supDepart.getShortName());
superviseMapIconVo.setDepartId(supDepart.getId());
superviseMapIconVo.setTotalPro(negatives.size());
superviseMapIconVo.setCompletedNumber(completedList.size());
superviseMapIconVo.setProcessingNumber(processingList.size());
superviseMapIconVo.setPersonNum(String.valueOf(blameResult.personalBlames().size() + blameResult.leadBlames().size()));
superviseMapIconVo.setRelationOrg(String.valueOf(blameResult.unitBlames().size()));
superviseMapIconVo.setPersonNum(String.valueOf(accountabilityCountResult.personTotalCount()));
superviseMapIconVo.setRelationOrg(String.valueOf(accountabilityCountResult.unitCount()));
superviseMapIconVo.setReportNumber(String.valueOf(superviseReportList.size()));
superviseTempMapVoList.add(superviseMapIconVo);
}
@ -578,13 +556,14 @@ public class SubDatavServiceImpl implements SubDatavService {
superviseReportLambdaQueryWrapper.eq(SuperviseReport::getType, "1");
superviseReportLambdaQueryWrapper.in(CollectionUtil.isNotEmpty(allDepartIds), SuperviseReport::getCrtDepartId, allDepartIds);
List<SuperviseReport> superviseReportList = superviseReportService.list(superviseReportLambdaQueryWrapper);
DatavServiceImpl.BlameResult blameResult = this.buildBlameResult(negatives);
// 与 DatavServiceImpl 保持一致:按“有效问题 + 多处理结果拆分 + negativeId/对象/处理结果去重”的口径统计。
AccountabilityCountResult accountabilityCountResult = buildAccountabilityCountResult(negatives);
overView.setProblemNumber(negatives.size());
overView.setProcessingNumber((long) processingList.size());
overView.setCompletedNumber((long) completedList.size());
overView.setReportNumber((long) superviseReportList.size());
overView.setDepartNumber((long) blameResult.unitBlames().size());
overView.setPersonNumber((long) (blameResult.leadBlames().size() + blameResult.personalBlames().size()));
overView.setDepartNumber(accountabilityCountResult.unitCount());
overView.setPersonNumber(accountabilityCountResult.personTotalCount());
return Result.success(new JSONObject().fluentPut("overview", overView));
}
@ -1190,6 +1169,93 @@ public class SubDatavServiceImpl implements SubDatavService {
) {
}
/**
* 统一问责统计口径
* 1. 仅统计核查属实部分属实的问题
* 2. 同一条问责记录中若包含多个处理结果按分隔符拆分后分别计数
* 3. 通过 negativeId + 问责对象 + 处理结果 去重避免重复累计
*/
private record AccountabilityCountResult(
long personalCount,
long leaderCount,
long personTotalCount,
long unitCount
) {
}
/**
* DatavServiceImpl 的问责人数问责单位数统计逻辑保持一致避免区县大屏与一级大屏口径不一致
*/
private AccountabilityCountResult buildAccountabilityCountResult(List<Negative> negatives) {
if (CollectionUtil.isEmpty(negatives)) {
return new AccountabilityCountResult(0L, 0L, 0L, 0L);
}
List<String> effectiveNegativeIds = negatives.stream()
.filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode())
|| CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode()))
.map(Negative::getId)
.filter(StrUtil::isNotBlank)
.distinct()
.toList();
if (CollectionUtil.isEmpty(effectiveNegativeIds)) {
return new AccountabilityCountResult(0L, 0L, 0L, 0L);
}
NegativeBlameQueryParam param = new NegativeBlameQueryParam();
param.setNegativeIds(effectiveNegativeIds);
List<NegativeBlame> negativeBlames = negativeBlameResourceService.query(param);
if (CollectionUtil.isEmpty(negativeBlames)) {
return new AccountabilityCountResult(0L, 0L, 0L, 0L);
}
long personalCount = negativeBlames.stream()
.filter(one -> BlameType.personal.name().equals(one.getType()))
.filter(one -> StrUtil.isNotBlank(one.getBlameName()))
.flatMap(one -> splitValidAccountabilityResults(one.getHandleResultName()).stream()
.map(resultName -> one.getNegativeId() + "_" + one.getBlameName() + "_" + resultName))
.distinct()
.count();
long leaderCount = negativeBlames.stream()
.filter(one -> BlameType.personal.name().equals(one.getType()))
.filter(one -> StrUtil.isNotBlank(one.getLeadName()))
.flatMap(one -> splitValidAccountabilityResults(one.getLeadHandleResultName()).stream()
.map(resultName -> one.getNegativeId() + "_" + one.getLeadName() + "_" + resultName))
.distinct()
.count();
long unitCount = negativeBlames.stream()
.filter(one -> BlameType.department.name().equals(one.getType()))
.filter(one -> StrUtil.isNotBlank(one.getBlameName()))
.flatMap(one -> splitValidAccountabilityResults(one.getHandleResultName()).stream()
.map(resultName -> one.getNegativeId() + "_" + one.getBlameName() + "_" + resultName))
.distinct()
.count();
return new AccountabilityCountResult(
personalCount,
leaderCount,
personalCount + leaderCount,
unitCount
);
}
private List<String> splitValidAccountabilityResults(String raw) {
if (StrUtil.isBlank(raw)) {
return List.of();
}
return Arrays.stream(raw.split("[、,,]"))
.map(String::trim)
.filter(StrUtil::isNotBlank)
.filter(item -> !NO_ACCOUNTABILITY_SET.contains(item))
.distinct()
.toList();
}
public DatavServiceImpl.BlameResult buildBlameResult(List<Negative> negativeListData) {
if (CollUtil.isEmpty(negativeListData)) {
return new DatavServiceImpl.BlameResult(List.of(), List.of(), List.of());

Loading…
Cancel
Save