Browse Source

研判分析--基础模板step3

master
buaixuexideshitongxue 2 weeks ago
parent
commit
5708035e26
  1. 4
      src/main/java/com/biutag/supervision/pojo/dto/report/unitInvestigation/UnitInvestigationItem.java
  2. 4
      src/main/java/com/biutag/supervision/pojo/vo/NegativeQueryVo.java
  3. 330
      src/main/java/com/biutag/supervision/service/report/ReportDataServiceImpl.java

4
src/main/java/com/biutag/supervision/pojo/dto/report/unitInvestigation/UnitInvestigationItem.java

@ -4,6 +4,8 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
/**
* @ClassName UnitInvestigationItem
* @Description TODO
@ -30,5 +32,5 @@ public class UnitInvestigationItem {
private Integer verifiedProblemCount;
@Schema(description = "查实率", example = "75.00%")
private String verifiedRate;
private BigDecimal verifiedRate;
}

4
src/main/java/com/biutag/supervision/pojo/vo/NegativeQueryVo.java

@ -205,4 +205,8 @@ public class NegativeQueryVo {
@Schema(description = "下发层级")
private Integer crtDepartLevel;
@Schema(description = "核查结论code")
private String checkStatusCode;
}

330
src/main/java/com/biutag/supervision/service/report/ReportDataServiceImpl.java

@ -1,13 +1,19 @@
package com.biutag.supervision.service.report;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.biutag.supervision.constants.enums.CheckStatusEnum;
import com.biutag.supervision.constants.enums.ProcessingStatusEnum;
import com.biutag.supervision.pojo.dto.DepartAndSubDepartDto;
import com.biutag.supervision.pojo.dto.report.OverviewSection;
import com.biutag.supervision.pojo.dto.report.ReportViewModel;
import com.biutag.supervision.pojo.dto.report.accountability.AccountabilityDepartmentSection;
import com.biutag.supervision.pojo.dto.report.accountability.AccountabilityOverviewSection;
import com.biutag.supervision.pojo.dto.report.accountability.AccountabilityPersonalSection;
import com.biutag.supervision.pojo.dto.report.accountability.AccountabilityTypeItem;
import com.biutag.supervision.pojo.dto.report.businessLine.BusinessLineDetailSection;
import com.biutag.supervision.pojo.dto.report.businessLine.BusinessLineOverviewSection;
import com.biutag.supervision.pojo.dto.report.OverviewSection;
import com.biutag.supervision.pojo.dto.report.ReportViewModel;
import com.biutag.supervision.pojo.dto.report.businessLine.BusinessLinePersonRankItem;
import com.biutag.supervision.pojo.dto.report.businessLine.BusinessLineRankItem;
import com.biutag.supervision.pojo.dto.report.unitInvestigation.UnitInvestigationItem;
@ -15,17 +21,20 @@ import com.biutag.supervision.pojo.dto.report.unitInvestigation.UnitInvestigatio
import com.biutag.supervision.pojo.entity.NegativeBlame;
import com.biutag.supervision.pojo.enums.report.TrendEnum;
import com.biutag.supervision.pojo.param.NegativeQueryParam;
import com.biutag.supervision.pojo.param.SupDepartGroupParam;
import com.biutag.supervision.pojo.param.negativeBlame.NegativeBlameQueryParam;
import com.biutag.supervision.pojo.vo.DictProblemSourceTree;
import com.biutag.supervision.pojo.vo.NegativeQueryVo;
import com.biutag.supervision.repository.negative.NegativeResourceService;
import com.biutag.supervision.repository.negativeBlame.NegativeBlameResourceService;
import com.biutag.supervision.repository.supdepart.SupDepartResourceService;
import com.biutag.supervision.service.NegativeQueryService;
import com.biutag.supervision.service.SupDictProblemSourceService;
import com.biutag.supervision.util.DateCompareRangeUtil;
import com.biutag.supervision.util.ReportTrendUtil;
import com.biutag.supervision.util.TimeUtil;
import jakarta.annotation.Resource;
import lombok.Data;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@ -48,6 +57,9 @@ public class ReportDataServiceImpl implements ReportDataService {
@Resource
private SupDictProblemSourceService supDictProblemSourceService;
@Resource
private SupDepartResourceService supDepartResourceService;
@Override
public ReportViewModel buildViewModel(NegativeQueryParam request) {
String periodStart = TimeUtil.formatDate(request.getCrtTime().get(0));
@ -60,62 +72,137 @@ public class ReportDataServiceImpl implements ReportDataService {
vm.setBusinessLineDetailSections(buildBusinessLineDetailSections(request, periodStart, periodEnd));
vm.setUnitInvestigationSection(buildUnitInvestigationSection(request, periodStart, periodEnd));
vm.setAccountabilityOverviewSection(buildAccountabilityOverviewSection(request, periodStart, periodEnd));
// vm.setAccountabilityUnitDetailSection();
vm.setAccountabilityUnitDetailSection(buildAccountabilityUnitDetailSection(request, periodStart, periodEnd));
vm.setAccountabilityPersonOverviewSection(buildAccountabilityPersonOverviewSection(request, periodStart, periodEnd));
return vm;
}
private AccountabilityPersonalSection buildAccountabilityPersonOverviewSection(NegativeQueryParam request, String periodStart, String periodEnd) {
NegativeQueryParam ztnegativeQueryParam = request.newQueryParam();
List<NegativeQueryVo> ztNegativeList = negativeQueryService.page(ztnegativeQueryParam).getRecords();
List<String> ztNegativeIds = ztNegativeList.stream().map(NegativeQueryVo::getId).toList();
AccountabilityStats accountabilityStats = buildAccountabilityStats(ztNegativeIds);
// 个人问责
Map<String, List<NegativeBlame>> leadMap = accountabilityStats.getLeadBlames().stream().collect(Collectors.groupingBy(NegativeBlame::getLeadHandleResultName));
Map<String, List<NegativeBlame>> personMap = accountabilityStats.getPersonalBlames().stream().collect(Collectors.groupingBy(NegativeBlame::getHandleResultName));
Map<String, List<NegativeBlame>> mergedMap = new HashMap<>(personMap);
leadMap.forEach((key, value) ->
mergedMap.merge(key, value, (list1, list2) -> {
List<NegativeBlame> list = new ArrayList<>(list1);
list.addAll(list2);
return list;
})
);
AccountabilityPersonalSection accountabilityPersonalSection = new AccountabilityPersonalSection();
accountabilityPersonalSection.setTotalCount(accountabilityStats.getPersonal());
// 构造 typeItems
List<AccountabilityTypeItem> typeItems = mergedMap.entrySet().stream()
.map(entry -> {
AccountabilityTypeItem item = new AccountabilityTypeItem();
item.setTypeName(entry.getKey());
item.setCount(entry.getValue().size());
return item;
})
.sorted(Comparator.comparing(AccountabilityTypeItem::getCount).reversed())
.toList();
accountabilityPersonalSection.setTypeItems(typeItems);
return accountabilityPersonalSection;
}
/**
* 单位问责情况
*
* @param request
* @param periodStart
* @param periodEnd
* @return
*/
private AccountabilityDepartmentSection buildAccountabilityUnitDetailSection(NegativeQueryParam request, String periodStart, String periodEnd) {
NegativeQueryParam ztnegativeQueryParam = request.newQueryParam();
List<NegativeQueryVo> ztNegativeList = negativeQueryService.page(ztnegativeQueryParam).getRecords();
List<String> ztNegativeIds = ztNegativeList.stream().map(NegativeQueryVo::getId).toList();
AccountabilityStats accountabilityStats = buildAccountabilityStats(ztNegativeIds);
// 单位问责
Map<String, List<NegativeBlame>> unitMap = accountabilityStats.getUnitBlames().stream().collect(Collectors.groupingBy(NegativeBlame::getHandleResultName));
AccountabilityDepartmentSection accountabilityDepartmentSection = new AccountabilityDepartmentSection();
accountabilityDepartmentSection.setTotalCount(accountabilityStats.getUnit());
// 构造 typeItems
List<AccountabilityTypeItem> typeItems = unitMap.entrySet().stream()
.map(entry -> {
AccountabilityTypeItem item = new AccountabilityTypeItem();
item.setTypeName(entry.getKey());
item.setCount(entry.getValue().size());
return item;
})
.sorted(Comparator.comparing(AccountabilityTypeItem::getCount).reversed())
.toList();
accountabilityDepartmentSection.setTypeItems(typeItems);
return accountabilityDepartmentSection;
}
/**
* 问责追责总览
*
* @param request
* @param periodStart
* @param periodEnd
* @return
*/
private AccountabilityOverviewSection buildAccountabilityOverviewSection(NegativeQueryParam request, String periodStart, String periodEnd) {
return null;
// 总体数据
NegativeQueryParam ztnegativeQueryParam = request.newQueryParam();
List<NegativeQueryVo> ztNegativeList = negativeQueryService.page(ztnegativeQueryParam).getRecords();
List<String> tzNegativeIds = ztNegativeList.stream().map(NegativeQueryVo::getId).toList();
AccountabilityStats accountabilityStats = buildAccountabilityStats(tzNegativeIds);
AccountabilityOverviewSection accountabilityOverviewSection = new AccountabilityOverviewSection();
accountabilityOverviewSection.setPeriodStart(periodStart);
accountabilityOverviewSection.setPeriodEnd(periodEnd);
accountabilityOverviewSection.setProblemTypeCount(ztNegativeList.size());
accountabilityOverviewSection.setPersonalAccountabilityCount(accountabilityStats.personal);
accountabilityOverviewSection.setDepartmentAccountabilityCount(accountabilityStats.unit);
return accountabilityOverviewSection;
}
private UnitInvestigationOverviewSection buildUnitInvestigationSection(NegativeQueryParam request,
String periodStart,
String periodEnd) {
DateCompareRangeUtil.CompareDateRange compareDateRange = DateCompareRangeUtil.buildCompareDateRange(request.getCrtTime().get(0), request.getCrtTime().get(1));
// 总体数据
NegativeQueryParam ztnegativeQueryParam = request.newQueryParam();
List<NegativeQueryVo> ztNegativeList = negativeQueryService.page(ztnegativeQueryParam).getRecords();
SupDepartGroupParam supDepartGroupParam = new SupDepartGroupParam();
supDepartGroupParam.setParentLevel(2);
supDepartGroupParam.setChildLevel(3);
Map<String, DepartAndSubDepartDto> departAndSubDepart = supDepartResourceService.getDepartAndSubDepart(supDepartGroupParam);
List<UnitInvestigationItem> topUnits = new ArrayList<>();
for (DepartAndSubDepartDto value : departAndSubDepart.values()) {
Set<String> allDepartIds = value.getAllDepartIds();
List<NegativeQueryVo> voList = ztNegativeList.stream().filter(one -> allDepartIds.contains(one.getInvolveDepartId())).toList();
if (CollectionUtil.isNotEmpty(voList)){
UnitInvestigationItem unitInvestigationItem = new UnitInvestigationItem();
unitInvestigationItem.setUnitName(value.getParentName());
unitInvestigationItem.setIssuedProblemCount(voList.size());
List<NegativeQueryVo> csList = voList.stream()
.filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode())
|| CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode()))
.toList();
unitInvestigationItem.setVerifiedProblemCount(csList.size());
unitInvestigationItem.setVerifiedRate(ReportTrendUtil.percent(csList.size(), voList.size()));
topUnits.add(unitInvestigationItem);
}
}
topUnits.sort(Comparator.comparing(UnitInvestigationItem::getVerifiedProblemCount).reversed());
UnitInvestigationOverviewSection section = new UnitInvestigationOverviewSection();
section.setPeriodStart(periodStart);
section.setPeriodEnd(periodEnd);
List<UnitInvestigationItem> topUnits = new ArrayList<>();
UnitInvestigationItem item1 = new UnitInvestigationItem();
item1.setRank(1);
item1.setUnitName("北京市分公司");
item1.setIssuedProblemCount(28);
item1.setVerifiedProblemCount(21);
item1.setVerifiedRate("75.00");
UnitInvestigationItem item2 = new UnitInvestigationItem();
item2.setRank(2);
item2.setUnitName("上海市分公司");
item2.setIssuedProblemCount(24);
item2.setVerifiedProblemCount(17);
item2.setVerifiedRate("70.83");
UnitInvestigationItem item3 = new UnitInvestigationItem();
item3.setRank(3);
item3.setUnitName("广东省分公司");
item3.setIssuedProblemCount(19);
item3.setVerifiedProblemCount(13);
item3.setVerifiedRate("68.42");
topUnits.add(item1);
topUnits.add(item2);
topUnits.add(item3);
section.setTopUnits(topUnits);
return section;
}
/**
* 业务条线的明细
*
* @param request
* @param periodStart
* @param periodEnd
@ -246,6 +333,7 @@ public class ReportDataServiceImpl implements ReportDataService {
/**
* 业务条线的总览
*
* @param request
* @param periodStart
* @param periodEnd
@ -314,40 +402,69 @@ public class ReportDataServiceImpl implements ReportDataService {
// 分县市局下发数据
List<NegativeQueryVo> fxsjxfNegativeList = ztNegativeList.stream().filter(one -> Objects.equals(2, one.getCrtDepartLevel())).toList();
// 办结数据
List<NegativeQueryVo> bjNegativeList = ztNegativeList.stream().filter(one -> ProcessingStatusEnum.completed.getLabel().equals(one.getProcessingStatus())).toList();
List<NegativeQueryVo> bjNegativeList = ztNegativeList.stream().filter(one -> ProcessingStatusEnum.completed.name().equals(one.getProcessingStatus())).toList();
// 办结中属实数据
List<NegativeQueryVo> bjssNegativeList = bjNegativeList.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatus())).toList();
List<NegativeQueryVo> bjssNegativeList = bjNegativeList.stream().filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode())).toList();
// 办结中基本属实数据
List<NegativeQueryVo> bjjbssNegativeList = bjNegativeList.stream().filter(one -> CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatus())).toList();
List<NegativeQueryVo> bjjbssNegativeList = bjNegativeList.stream().filter(one -> CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode())).toList();
// 办结中不属实数据
List<NegativeQueryVo> bjbssNegativeList = bjNegativeList.stream().filter(one -> CheckStatusEnum.FALSE_SET.contains(one.getCheckStatus())).toList();
List<NegativeQueryVo> bjbssNegativeList = bjNegativeList.stream().filter(one -> CheckStatusEnum.FALSE_SET.contains(one.getCheckStatusCode())).toList();
// 属实 基本属实中的问责数据
List<String> ssNegativeIds = Stream.concat(bjssNegativeList.stream(), bjjbssNegativeList.stream())
.map(NegativeQueryVo::getId).filter(StrUtil::isNotBlank).distinct().toList();
NegativeBlameQueryParam negativeBlameQueryParam = new NegativeBlameQueryParam();
negativeBlameQueryParam.setNegativeIds(ssNegativeIds);
List<NegativeBlame> negativeBlames = negativeBlameResourceService.query(negativeBlameQueryParam);
// 个人问责
List<NegativeBlame> grwzNegativeBlames = negativeBlames.stream().filter(one -> "personal".equals(one.getType()))
.filter(one -> StrUtil.isNotBlank(one.getHandleResultName()))
.filter(one -> !"不予追责".equals(one.getHandleResultName())).toList();
// 单位问责
List<NegativeBlame> dwwzNegativeBlames = negativeBlames.stream()
.filter(one -> "department".equals(one.getType()))
.filter(one -> StrUtil.isNotBlank(one.getHandleResultName()))
.filter(one -> !"不予追责".equals(one.getHandleResultName())).toList();
AccountabilityStats currentAccountabilityStats = buildAccountabilityStats(ssNegativeIds);
// ==================== 环比问责数据 ====================
// 环比办结数据
List<NegativeQueryVo> hbBjNegativeList = hbNegativList.stream()
.filter(one -> ProcessingStatusEnum.completed.name().equals(one.getProcessingStatus()))
.toList();
// 环比办结中属实数据
List<NegativeQueryVo> hbBjssNegativeList = hbBjNegativeList.stream()
.filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()))
.toList();
// 环比办结中基本属实数据
List<NegativeQueryVo> hbBjjbssNegativeList = hbBjNegativeList.stream()
.filter(one -> CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode()))
.toList();
// 环比属实 + 基本属实中的问责数据
List<String> hbNegativeIds = Stream.concat(hbBjssNegativeList.stream(), hbBjjbssNegativeList.stream())
.map(NegativeQueryVo::getId)
.filter(StrUtil::isNotBlank)
.distinct()
.toList();
AccountabilityStats momAccountabilityStats = buildAccountabilityStats(hbNegativeIds);
int hbAccountabilityTotal = momAccountabilityStats.getTotal();
// ==================== 同比问责数据 ====================
// 同比办结数据
List<NegativeQueryVo> tbBjNegativeList = tbNegativList.stream()
.filter(one -> ProcessingStatusEnum.completed.name().equals(one.getProcessingStatus()))
.toList();
// 同比办结中属实数据
List<NegativeQueryVo> tbBjssNegativeList = tbBjNegativeList.stream()
.filter(one -> CheckStatusEnum.TRUE_SET.contains(one.getCheckStatusCode()))
.toList();
// 同比办结中基本属实数据
List<NegativeQueryVo> tbBjjbssNegativeList = tbBjNegativeList.stream()
.filter(one -> CheckStatusEnum.PART_TRUE_SET.contains(one.getCheckStatusCode()))
.toList();
// 同比属实 + 基本属实中的问责数据
List<String> tbNegativeIds = Stream.concat(tbBjssNegativeList.stream(), tbBjjbssNegativeList.stream())
.map(NegativeQueryVo::getId)
.filter(StrUtil::isNotBlank)
.distinct()
.toList();
AccountabilityStats yoyAccountabilityStats = buildAccountabilityStats(tbNegativeIds);
int tbAccountabilityTotal = yoyAccountabilityStats.getTotal();
// 总问责数
int accountabilityTotal = currentAccountabilityStats.getTotal();
// 个人问责数
int personalAccountability = currentAccountabilityStats.getPersonal();
// 单位问责数
int unitAccountability = currentAccountabilityStats.getUnit();
// 第一段
int current = ztNegativeList.size();
int mom = hbNegativList.size();
int yoy = tbNegativList.size();
// 第二段
int closedCount = bjNegativeList.size(); // 总办结
int verifiedCount = bjssNegativeList.size(); // 查实
int basicallyVerifiedCount = bjjbssNegativeList.size();// 基本属实
int unverifiedCount = bjbssNegativeList.size(); // 不属实
OverviewSection overviewSection = new OverviewSection();
// 时间
overviewSection.setPeriodStart(periodStart);
@ -367,10 +484,10 @@ public class ReportDataServiceImpl implements ReportDataService {
overviewSection.setCountyIssued(fxsjxfNegativeList.size());
overviewSection.setCountyRate(ReportTrendUtil.percent(fxsjxfNegativeList.size(), ztNegativeList.size()));
// 办结总数据
overviewSection.setClosedCount(closedCount);
overviewSection.setVerifiedCount(verifiedCount);
overviewSection.setBasicallyVerifiedCount(basicallyVerifiedCount);
overviewSection.setUnverifiedCount(unverifiedCount);
overviewSection.setClosedCount(bjNegativeList.size());
overviewSection.setVerifiedCount(bjssNegativeList.size());
overviewSection.setBasicallyVerifiedCount(bjjbssNegativeList.size());
overviewSection.setUnverifiedCount(bjbssNegativeList.size());
// 办结查实率
// 1) 本期/环比/同比 查实率(都是 %,BigDecimal)
BigDecimal curVerifiedRate = calcVerifiedRate(ztNegativeList);
@ -383,7 +500,14 @@ public class ReportDataServiceImpl implements ReportDataService {
// 4) 查实率同比(注意:率对率)
overviewSection.setVerifiedYoyRate(ReportTrendUtil.calcRate(curVerifiedRate, yoyVerifiedRate));
overviewSection.setVerifiedYoyTrend(ReportTrendUtil.calcTrend(curVerifiedRate, yoyVerifiedRate));
// 5) 问责数据
overviewSection.setAccountabilityTotal(accountabilityTotal);
overviewSection.setPersonalAccountability(personalAccountability);
overviewSection.setUnitAccountability(unitAccountability);
overviewSection.setAccountabilityMomRate(ReportTrendUtil.calcRate(accountabilityTotal, hbAccountabilityTotal));
overviewSection.setAccountabilityMomTrend(ReportTrendUtil.calcTrend(accountabilityTotal, hbAccountabilityTotal));
overviewSection.setAccountabilityYoyRate(ReportTrendUtil.calcRate(accountabilityTotal, tbAccountabilityTotal));
overviewSection.setAccountabilityYoyTrend(ReportTrendUtil.calcTrend(accountabilityTotal, tbAccountabilityTotal));
// 集中问题
Map.Entry<String, Long> problemEntry = ReportTrendUtil.topBy(NegativeQueryVo::getProblemSources, bjssNegativeList, bjjbssNegativeList);
String problemSource = problemEntry != null ? problemEntry.getKey() : null;
@ -401,7 +525,7 @@ public class ReportDataServiceImpl implements ReportDataService {
// 查实率
private BigDecimal calcVerifiedRate(List<NegativeQueryVo> list) {
// 办结
List<NegativeQueryVo> closed = list.stream().filter(n -> n.getCompleteDate() != null).toList();
List<NegativeQueryVo> closed = list.stream().filter(one -> ProcessingStatusEnum.completed.name().equals(one.getProcessingStatus())).toList();
int closedCount = closed.size();
if (closedCount == 0) {
@ -410,12 +534,12 @@ public class ReportDataServiceImpl implements ReportDataService {
// 属实
int verified = (int) closed.stream()
.filter(n -> CheckStatusEnum.TRUE_SET.contains(n.getCheckStatus()))
.filter(n -> CheckStatusEnum.TRUE_SET.contains(n.getCheckStatusCode()))
.count();
// 基本属实
int partVerified = (int) closed.stream()
.filter(n -> CheckStatusEnum.PART_TRUE_SET.contains(n.getCheckStatus()))
.filter(n -> CheckStatusEnum.PART_TRUE_SET.contains(n.getCheckStatusCode()))
.count();
// 查实率 = (属实 + 基本属实) / 办结
@ -437,4 +561,80 @@ public class ReportDataServiceImpl implements ReportDataService {
: StrUtil.blankToDefault(child.getLabel(), "未归类");
}
private AccountabilityStats buildAccountabilityStats(List<String> negativeIds) {
AccountabilityStats stats = new AccountabilityStats();
if (CollUtil.isEmpty(negativeIds)) {
return stats;
}
NegativeBlameQueryParam queryParam = new NegativeBlameQueryParam();
queryParam.setNegativeIds(negativeIds);
List<NegativeBlame> negativeBlames = negativeBlameResourceService.query(queryParam);
// 个人问责
List<NegativeBlame> personalBlames = negativeBlames.stream()
.filter(one -> "personal".equals(one.getType()))
.filter(one -> StrUtil.isNotBlank(one.getHandleResultName()))
.filter(one -> !"不予追责".equals(one.getHandleResultName()))
.toList();
// 个人问责中的领导问责
Set<String> seenLead = new HashSet<>();
List<NegativeBlame> leadBlames = personalBlames.stream()
.filter(one -> StrUtil.isNotBlank(one.getLeadHandleResultName()))
.filter(one -> !"不予追责".equals(one.getLeadHandleResultName()))
.filter(one -> seenLead.add(one.getNegativeId() + "_" + one.getLeadHandleResultName() + "_" + one.getLeadName()))
.toList();
// 单位问责
List<NegativeBlame> unitBlames = negativeBlames.stream()
.filter(one -> "department".equals(one.getType()))
.filter(one -> StrUtil.isNotBlank(one.getHandleResultName()))
.filter(one -> !"不予追责".equals(one.getHandleResultName()))
.toList();
int personalCount = personalBlames.size() + leadBlames.size();
int unitCount = unitBlames.size();
stats.setPersonal(personalCount);
stats.setUnit(unitCount);
stats.setTotal(personalCount + unitCount);
stats.setPersonalBlames(personalBlames);
stats.setLeadBlames(leadBlames);
stats.setUnitBlames(unitBlames);
return stats;
}
@Data
private static class AccountabilityStats {
/**
* 问责总数 = 个人问责 + 领导问责 + 单位问责
*/
private int total;
/**
* 个人问责数 = 个人问责 + 领导问责
*/
private int personal;
/**
* 单位问责数
*/
private int unit;
/**
* 个人问责
*/
private List<NegativeBlame> personalBlames = new ArrayList<>();
/**
* 领导问责
*/
private List<NegativeBlame> leadBlames = new ArrayList<>();
/**
* 单位问责
*/
private List<NegativeBlame> unitBlames = new ArrayList<>();
}
}
Loading…
Cancel
Save