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,7 +25,8 @@ import java.util.List;
25 @EqualsAndHashCode(callSuper = false) 25 @EqualsAndHashCode(callSuper = false)
26 @Accessors(chain = true) 26 @Accessors(chain = true)
27 @TableName(autoResultMap = true) 27 @TableName(autoResultMap = true)
28 -public class EvalUserRankStageReport extends BaseEntity<EvalUserRankStageReport, Long> { 28 +public class
  29 +EvalUserRankStageReport extends BaseEntity<EvalUserRankStageReport, Long> {
29 30
30 private static final long serialVersionUID = 1L; 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,6 +40,7 @@ import org.springframework.transaction.TransactionStatus;
40 import org.springframework.transaction.annotation.Transactional; 40 import org.springframework.transaction.annotation.Transactional;
41 41
42 import java.math.BigDecimal; 42 import java.math.BigDecimal;
  43 +import java.math.RoundingMode;
43 import java.time.LocalDate; 44 import java.time.LocalDate;
44 import java.time.YearMonth; 45 import java.time.YearMonth;
45 import java.time.temporal.TemporalAdjusters; 46 import java.time.temporal.TemporalAdjusters;
@@ -68,8 +69,6 @@ public class EvalUserReportTask { @@ -68,8 +69,6 @@ public class EvalUserReportTask {
68 private final EvalUserRankStageReportService evalUserRankStageReportService; 69 private final EvalUserRankStageReportService evalUserRankStageReportService;
69 private final EvalUserValueReportService evalUserValueReportService; 70 private final EvalUserValueReportService evalUserValueReportService;
70 private final EvalGroupIndicatorService evalGroupIndicatorService; 71 private final EvalGroupIndicatorService evalGroupIndicatorService;
71 - private final IndicatorUserValueService indicatorUserValueService;  
72 - private final EvalIndicatorValueService evalIndicatorValueService;  
73 private final PlatformTransactionManager platformTransactionManager; 72 private final PlatformTransactionManager platformTransactionManager;
74 private final EvalUserRankReportService evalUserRankReportService; 73 private final EvalUserRankReportService evalUserRankReportService;
75 private final EvalGroupRankStageService evalGroupRankStageService; 74 private final EvalGroupRankStageService evalGroupRankStageService;
@@ -185,9 +184,6 @@ public class EvalUserReportTask { @@ -185,9 +184,6 @@ public class EvalUserReportTask {
185 List<EvalUserValueReport> reportUserValues = calcUser(userPools, evalGroupIndicators, evalUserReports, dataDate); 184 List<EvalUserValueReport> reportUserValues = calcUser(userPools, evalGroupIndicators, evalUserReports, dataDate);
186 //门店维度 185 //门店维度
187 calcShop(shopPools, evalGroupIndicators, evalShopReports, dataDate); 186 calcShop(shopPools, evalGroupIndicators, evalShopReports, dataDate);
188 - //管理者维度  
189 - //门店维度  
190 - calcShop(shopPools, evalGroupIndicators, evalShopReports, dataDate);  
191 //门店维度 187 //门店维度
192 calcManager(userPools, reportUserValues, rankCodes, evalUserReports, rankStageReport, date); 188 calcManager(userPools, reportUserValues, rankCodes, evalUserReports, rankStageReport, date);
193 } 189 }
@@ -323,7 +319,7 @@ public class EvalUserReportTask { @@ -323,7 +319,7 @@ public class EvalUserReportTask {
323 if (PublicUtil.isEmpty(pools)) { 319 if (PublicUtil.isEmpty(pools)) {
324 return; 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 List<ManagerDTO> managerDTOS = ehrRpcService.getRealTimeShopManager(new ArrayList<>(shopIds)); 323 List<ManagerDTO> managerDTOS = ehrRpcService.getRealTimeShopManager(new ArrayList<>(shopIds));
328 log.info("查询门店实时管理者:{},{}", JSON.toJSONString(shopIds), JSON.toJSONString(managerDTOS)); 324 log.info("查询门店实时管理者:{},{}", JSON.toJSONString(shopIds), JSON.toJSONString(managerDTOS));
329 if (PublicUtil.isEmpty(managerDTOS)) { 325 if (PublicUtil.isEmpty(managerDTOS)) {
@@ -342,7 +338,8 @@ public class EvalUserReportTask { @@ -342,7 +338,8 @@ public class EvalUserReportTask {
342 if (PublicUtil.isEmpty(managerStaffDimReportIds)) { 338 if (PublicUtil.isEmpty(managerStaffDimReportIds)) {
343 continue; 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 for (EvalUserRankCodeReport codeReport : rankCodes) { 344 for (EvalUserRankCodeReport codeReport : rankCodes) {
348 BigDecimal value = calcAverageValue(reportUserValues, managerStaffDimReportIds, codeReport.getCode()); 345 BigDecimal value = calcAverageValue(reportUserValues, managerStaffDimReportIds, codeReport.getCode());
@@ -428,6 +425,7 @@ public class EvalUserReportTask { @@ -428,6 +425,7 @@ public class EvalUserReportTask {
428 report.setScoreRatio(shopPool.getScoreRatio().multiply(Constant.ONE_HUNDRED)); 425 report.setScoreRatio(shopPool.getScoreRatio().multiply(Constant.ONE_HUNDRED));
429 report.setEvalUserRankStageReportId(evalUserRankStageReportId); 426 report.setEvalUserRankStageReportId(evalUserRankStageReportId);
430 report.setShopId(shopPool.getShopId()); 427 report.setShopId(shopPool.getShopId());
  428 + report.setEvalShopPoolId(shopPool.getId());
431 report.setShopName(shopPool.getShopName()); 429 report.setShopName(shopPool.getShopName());
432 report.setDataDate(date); 430 report.setDataDate(date);
433 evalShopReports.add(report); 431 evalShopReports.add(report);
@@ -436,33 +434,6 @@ public class EvalUserReportTask { @@ -436,33 +434,6 @@ public class EvalUserReportTask {
436 return evalShopReports; 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 public Map<Long, EvalGroupIndicatorTargetHitLog> queryTargetValue(Long referId, List<Long> poolIds, LocalDate dataDate, EvalScopeEnum scopeType) { 437 public Map<Long, EvalGroupIndicatorTargetHitLog> queryTargetValue(Long referId, List<Long> poolIds, LocalDate dataDate, EvalScopeEnum scopeType) {
467 List<EvalGroupIndicatorTargetHitLog> targetHitLogs = evalGroupIndicatorTargetHitLogService.list(Wrappers.<EvalGroupIndicatorTargetHitLog>lambdaQuery() 438 List<EvalGroupIndicatorTargetHitLog> targetHitLogs = evalGroupIndicatorTargetHitLogService.list(Wrappers.<EvalGroupIndicatorTargetHitLog>lambdaQuery()
468 .eq(EvalGroupIndicatorTargetHitLog::getReferId, referId) 439 .eq(EvalGroupIndicatorTargetHitLog::getReferId, referId)
@@ -611,16 +582,18 @@ public class EvalUserReportTask { @@ -611,16 +582,18 @@ public class EvalUserReportTask {
611 return reportRankStage; 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 EvalUserReport evalUserReport = new EvalUserReport(); 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 evalUserReport.setDimension(ReportDimensionEnum.MANAGER); 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 evalUserReport.setUserId(manager.getStaffId()); 595 evalUserReport.setUserId(manager.getStaffId());
622 evalUserReport.setUserName(manager.getStaffName()); 596 evalUserReport.setUserName(manager.getStaffName());
623 - evalUserReport.setDataDate(date);  
624 if (managerMap.containsKey(manager.getStaffId())) { 597 if (managerMap.containsKey(manager.getStaffId())) {
625 StaffBaseInfoDTO staffInfo = managerMap.get(manager.getStaffId()); 598 StaffBaseInfoDTO staffInfo = managerMap.get(manager.getStaffId());
626 evalUserReport.setShopId(staffInfo.getShopId()); 599 evalUserReport.setShopId(staffInfo.getShopId());
@@ -645,6 +618,31 @@ public class EvalUserReportTask { @@ -645,6 +618,31 @@ public class EvalUserReportTask {
645 .distinct() 618 .distinct()
646 .collect(Collectors.toList()); 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 evalUserReportService.save(evalUserReport); 646 evalUserReportService.save(evalUserReport);
649 EvalUserExtraReport evalUserExtraReport = EvalUserExtraReport.builder() 647 EvalUserExtraReport evalUserExtraReport = EvalUserExtraReport.builder()
650 .evalUserReportId(evalUserReport.getId()) 648 .evalUserReportId(evalUserReport.getId())