Commit b4782e5be7613ad6e6e77d7667cf9600fabf8781
1 parent
501244c6
feature(*): 考评报表抽取修改
考评报表抽取修改
Showing
2 changed files
with
40 additions
and
41 deletions
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()) |