Commit b4782e5be7613ad6e6e77d7667cf9600fabf8781

Authored by 姜超
1 parent 501244c6

feature(*): 考评报表抽取修改

考评报表抽取修改
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalUserRankStageReport.java
... ... @@ -25,7 +25,8 @@ import java.util.List;
25 25 @EqualsAndHashCode(callSuper = false)
26 26 @Accessors(chain = true)
27 27 @TableName(autoResultMap = true)
28   -public class EvalUserRankStageReport extends BaseEntity<EvalUserRankStageReport, Long> {
  28 +public class
  29 +EvalUserRankStageReport extends BaseEntity<EvalUserRankStageReport, Long> {
29 30  
30 31 private static final long serialVersionUID = 1L;
31 32  
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalUserReportTask.java
... ... @@ -40,6 +40,7 @@ import org.springframework.transaction.TransactionStatus;
40 40 import org.springframework.transaction.annotation.Transactional;
41 41  
42 42 import java.math.BigDecimal;
  43 +import java.math.RoundingMode;
43 44 import java.time.LocalDate;
44 45 import java.time.YearMonth;
45 46 import java.time.temporal.TemporalAdjusters;
... ... @@ -68,8 +69,6 @@ public class EvalUserReportTask {
68 69 private final EvalUserRankStageReportService evalUserRankStageReportService;
69 70 private final EvalUserValueReportService evalUserValueReportService;
70 71 private final EvalGroupIndicatorService evalGroupIndicatorService;
71   - private final IndicatorUserValueService indicatorUserValueService;
72   - private final EvalIndicatorValueService evalIndicatorValueService;
73 72 private final PlatformTransactionManager platformTransactionManager;
74 73 private final EvalUserRankReportService evalUserRankReportService;
75 74 private final EvalGroupRankStageService evalGroupRankStageService;
... ... @@ -185,9 +184,6 @@ public class EvalUserReportTask {
185 184 List<EvalUserValueReport> reportUserValues = calcUser(userPools, evalGroupIndicators, evalUserReports, dataDate);
186 185 //门店维度
187 186 calcShop(shopPools, evalGroupIndicators, evalShopReports, dataDate);
188   - //管理者维度
189   - //门店维度
190   - calcShop(shopPools, evalGroupIndicators, evalShopReports, dataDate);
191 187 //门店维度
192 188 calcManager(userPools, reportUserValues, rankCodes, evalUserReports, rankStageReport, date);
193 189 }
... ... @@ -323,7 +319,7 @@ public class EvalUserReportTask {
323 319 if (PublicUtil.isEmpty(pools)) {
324 320 return;
325 321 }
326   - List<Long> shopIds = pools.stream().map(EvalUserPool::getShopId).collect(Collectors.toList());
  322 + List<Long> shopIds = pools.stream().map(EvalUserPool::getShopId).distinct().collect(Collectors.toList());
327 323 List<ManagerDTO> managerDTOS = ehrRpcService.getRealTimeShopManager(new ArrayList<>(shopIds));
328 324 log.info("查询门店实时管理者:{},{}", JSON.toJSONString(shopIds), JSON.toJSONString(managerDTOS));
329 325 if (PublicUtil.isEmpty(managerDTOS)) {
... ... @@ -342,7 +338,8 @@ public class EvalUserReportTask {
342 338 if (PublicUtil.isEmpty(managerStaffDimReportIds)) {
343 339 continue;
344 340 }
345   - final Long managerEvalUserReportId = this.saveManagerDimDB(manager, rankStageReport, managerMap, manageStaffIds, date);
  341 + EvalUserReport evalUserReport = createManager(rankStageReport, date);
  342 + final Long managerEvalUserReportId = this.saveManagerDimDB(evalUserReport, manager, pools, managerMap, manageStaffIds);
346 343  
347 344 for (EvalUserRankCodeReport codeReport : rankCodes) {
348 345 BigDecimal value = calcAverageValue(reportUserValues, managerStaffDimReportIds, codeReport.getCode());
... ... @@ -428,6 +425,7 @@ public class EvalUserReportTask {
428 425 report.setScoreRatio(shopPool.getScoreRatio().multiply(Constant.ONE_HUNDRED));
429 426 report.setEvalUserRankStageReportId(evalUserRankStageReportId);
430 427 report.setShopId(shopPool.getShopId());
  428 + report.setEvalShopPoolId(shopPool.getId());
431 429 report.setShopName(shopPool.getShopName());
432 430 report.setDataDate(date);
433 431 evalShopReports.add(report);
... ... @@ -436,33 +434,6 @@ public class EvalUserReportTask {
436 434 return evalShopReports;
437 435 }
438 436  
439   - public Map<Long, BigDecimal> queryUserOriginValue(EvalGroupIndicatorParam param, List<Long> userIds, LocalDate dataDate) {
440   - final String code = param.getCode();
441   - final IndicatorCodeTypeEnum codeType = param.getCodeType();
442   - Map<Long, BigDecimal> referValueMap = Maps.newHashMapWithExpectedSize(userIds.size());
443   - //无目标
444   - if (IndicatorCodeTypeEnum.INDICATOR.equals(codeType)) {
445   - List<IndicatorUserValue> indicatorUserValues = indicatorUserValueService.list(Wrappers.<IndicatorUserValue>lambdaQuery()
446   - .eq(IndicatorUserValue::getIndicatorCode, code)
447   - .eq(IndicatorUserValue::getDataDate, dataDate)
448   - .in(IndicatorUserValue::getUserId, userIds)
449   - .eq(IndicatorUserValue::getDimensionType, DimensionTypeEnum.STAFF)
450   - .eq(IndicatorUserValue::getYn, Boolean.TRUE)
451   - );
452   - for (IndicatorUserValue userValue : indicatorUserValues) {
453   - referValueMap.put(userValue.getUserId(), commonService.queryIndicatorValueVO(code, userValue,
454   - param.getTargetType(), param.getDataType()));
455   - }
456   - return referValueMap;
457   - }
458   - for (Long userId : userIds) {
459   - EvalIndicatorValue evalIndicatorValue = evalIndicatorValueService.queryLastValue(userId,
460   - DimensionTypeEnum.STAFF, code, dataDate);
461   - referValueMap.put(userId, commonService.queryEvalIndicatorValueVO(code, evalIndicatorValue, param.getTargetType(), param.getDataType()));
462   - }
463   - return referValueMap;
464   - }
465   -
466 437 public Map<Long, EvalGroupIndicatorTargetHitLog> queryTargetValue(Long referId, List<Long> poolIds, LocalDate dataDate, EvalScopeEnum scopeType) {
467 438 List<EvalGroupIndicatorTargetHitLog> targetHitLogs = evalGroupIndicatorTargetHitLogService.list(Wrappers.<EvalGroupIndicatorTargetHitLog>lambdaQuery()
468 439 .eq(EvalGroupIndicatorTargetHitLog::getReferId, referId)
... ... @@ -611,16 +582,18 @@ public class EvalUserReportTask {
611 582 return reportRankStage;
612 583 }
613 584  
614   - public Long saveManagerDimDB(ManagerDTO manager, EvalUserRankStageReport rankStageReport,
615   - Map<Long, StaffBaseInfoDTO> managerMap,
616   - List<Long> manageStaffIds, LocalDate date) {
  585 + public EvalUserReport createManager(EvalUserRankStageReport rankStageReport, LocalDate date) {
617 586 EvalUserReport evalUserReport = new EvalUserReport();
618   - evalUserReport.setEvalUserRankReportId(rankStageReport.getEvalGroupRankId());
619   - evalUserReport.setEvalUserRankStageReportId(rankStageReport.getEvalGroupRankStageId());
  587 + evalUserReport.setEvalUserRankReportId(rankStageReport.getEvalUserRankReportId());
  588 + evalUserReport.setEvalUserRankStageReportId(rankStageReport.getId());
620 589 evalUserReport.setDimension(ReportDimensionEnum.MANAGER);
  590 + evalUserReport.setDataDate(date);
  591 + return evalUserReport;
  592 + }
  593 +
  594 + public Long saveManagerDimDB(EvalUserReport evalUserReport, ManagerDTO manager, List<EvalUserPool> pools, Map<Long, StaffBaseInfoDTO> managerMap, List<Long> manageStaffIds) {
621 595 evalUserReport.setUserId(manager.getStaffId());
622 596 evalUserReport.setUserName(manager.getStaffName());
623   - evalUserReport.setDataDate(date);
624 597 if (managerMap.containsKey(manager.getStaffId())) {
625 598 StaffBaseInfoDTO staffInfo = managerMap.get(manager.getStaffId());
626 599 evalUserReport.setShopId(staffInfo.getShopId());
... ... @@ -645,6 +618,31 @@ public class EvalUserReportTask {
645 618 .distinct()
646 619 .collect(Collectors.toList());
647 620  
  621 + Double averageScoreDouble = pools.stream()
  622 + .filter(pool -> manageStaffIds.contains(pool.getUserId()))
  623 + .mapToDouble(userValue -> Optional.ofNullable(userValue.getScore()).orElse(BigDecimal.ZERO).doubleValue())
  624 + .average()
  625 + .orElse(0);
  626 + BigDecimal score = new BigDecimal(averageScoreDouble.toString()).divide(BigDecimal.ONE, 4, RoundingMode.HALF_UP);
  627 +
  628 + Double averageScoreRatioDouble = pools.stream()
  629 + .filter(pool -> manageStaffIds.contains(pool.getUserId()))
  630 + .mapToDouble(userValue -> Optional.ofNullable(userValue.getScoreRatio()).orElse(BigDecimal.ZERO).doubleValue())
  631 + .average()
  632 + .orElse(0);
  633 + BigDecimal scoreRatio = new BigDecimal(averageScoreRatioDouble.toString()).divide(BigDecimal.ONE, 4, RoundingMode.HALF_UP);
  634 +
  635 + Double averageRewardDouble = pools.stream()
  636 + .filter(pool -> manageStaffIds.contains(pool.getUserId()))
  637 + .mapToDouble(userValue -> Optional.ofNullable(userValue.getScore()).orElse(BigDecimal.ZERO).doubleValue())
  638 + .average()
  639 + .orElse(0);
  640 + BigDecimal reward = new BigDecimal(averageRewardDouble.toString()).divide(BigDecimal.ONE, 4, RoundingMode.HALF_UP);
  641 +
  642 + evalUserReport.setScore(score);
  643 + evalUserReport.setScoreRatio(scoreRatio.multiply(Constant.ONE_HUNDRED));
  644 + evalUserReport.setReward(reward);
  645 +
648 646 evalUserReportService.save(evalUserReport);
649 647 EvalUserExtraReport evalUserExtraReport = EvalUserExtraReport.builder()
650 648 .evalUserReportId(evalUserReport.getId())
... ...