diff --git a/fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalUserReportTask.java b/fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalUserReportTask.java index 6303ccb..1cf0aa0 100644 --- a/fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalUserReportTask.java +++ b/fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalUserReportTask.java @@ -164,7 +164,7 @@ public class EvalUserReportTask { //人员维度 List reportUserValues = calcUser(userPools, evalGroupIndicators, evalUserReports, date); //门店维度 - calcShop(evalShopReports, rankCodes, reportUserValues, evalUserReports, date); + calcShop(shopPools, evalGroupIndicators, evalShopReports, date); } @@ -193,37 +193,33 @@ public class EvalUserReportTask { List userHitLogs = indicatorHitLogMap.getOrDefault(evalGroupIndicatorId, new ArrayList<>()); Map poolHitLogMap = userHitLogs.stream() .collect(Collectors.toMap(EvalGroupIndicatorHitLog::getPoolId, Function.identity(), (v1, v2) -> v1)); - for (EvalUserPool userPool : pools) { - if (! userPool.getEvalGroupId().equals(groupIndicator.getEvalGroupId())) { + for (EvalUserPool pool : pools) { + if (! pool.getEvalGroupId().equals(groupIndicator.getEvalGroupId())) { continue; } - Optional hitLog = Optional.ofNullable(poolHitLogMap.get(userPool.getId())); + + Optional hitLog = Optional.ofNullable(poolHitLogMap.get(pool.getId())); + if (pool.getDataDate().compareTo(date) != 0) { + hitLog = evalGroupIndicatorHitLogService.getHitLog(evalGroupIndicatorId, pool.getId(), EvalScopeEnum.STAFF, pool.getDataDate()); + } BigDecimal value = (ScoreWayEnum.LADDER.equals(scoreWay)) ? hitLog.map(EvalGroupIndicatorHitLog::getHitLadderValue).orElse(BigDecimal.ZERO) : hitLog.map(EvalGroupIndicatorHitLog::getHitCommissionValue).orElse(BigDecimal.ZERO); - Long evalUserReportId = userPoolReportIdMap.get(userPool.getId()); + Long evalUserReportId = userPoolReportIdMap.get(pool.getId()); reportUserValues.add(convertDB(evalUserReportId, groupIndicator, value, date, params)); } //是否有子指标 if (IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(codeType)) { for (EvalGroupIndicatorParam param : params) { - if (TargetTypeEnum.NO.equals(param.getTargetType())) { - Map userValueMap = queryUserOriginValue(param, userIds, date); - for (EvalUserPool userPool : pools) { - BigDecimal value = userValueMap.getOrDefault(userPool.getUserId(), BigDecimal.ZERO); - Long evalUserReportId = userPoolReportIdMap.get(userPool.getId()); - reportUserValues.add(convertParamDB(evalUserReportId, param, value, date)); - } - } else { - Map hitLogMap = queryTargetValue(param.getId(), poolIds, date); - for (EvalUserPool userPool : pools) { - EvalGroupIndicatorTargetHitLog hitLog = hitLogMap.get(userPool.getId()); - BigDecimal value = Optional.ofNullable(hitLog) - .map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED); - Long evalUserReportId = userPoolReportIdMap.get(userPool.getId()); - reportUserValues.add(convertParamDB(evalUserReportId, param, value, date)); - } + Map targetHitLogMap = queryTargetValue(param.getId(), poolIds, date, EvalScopeEnum.STAFF); + for (EvalUserPool pool : pools) { + Boolean staffChange = pool.getDataDate().compareTo(date) != 0; + EvalGroupIndicatorTargetHitLog targetHitLog = (staffChange) + ? queryTargetValue(param.getId(), pool.getId(), pool.getDataDate(), EvalScopeEnum.STAFF) : targetHitLogMap.get(pool.getId()); + BigDecimal value = this.getParamValue(targetHitLog); + Long evalUserReportId = userPoolReportIdMap.get(pool.getId()); + reportUserValues.add(convertParamDB(evalUserReportId, param, value, date)); } } } @@ -234,7 +230,7 @@ public class EvalUserReportTask { return reportUserValues; } - public List calcShop2(List pools, + public List calcShop(List pools, List evalGroupIndicators, List evalShopReports, LocalDate date) { @@ -258,15 +254,19 @@ public class EvalUserReportTask { List userHitLogs = indicatorHitLogMap.getOrDefault(evalGroupIndicatorId, new ArrayList<>()); Map poolHitLogMap = userHitLogs.stream() .collect(Collectors.toMap(EvalGroupIndicatorHitLog::getPoolId, Function.identity(), (v1, v2) -> v1)); - for (EvalShopPool shopPool : pools) { - if (! shopPool.getEvalGroupId().equals(groupIndicator.getEvalGroupId())) { + for (EvalShopPool pool : pools) { + if (! pool.getEvalGroupId().equals(groupIndicator.getEvalGroupId())) { continue; } - Optional hitLog = Optional.ofNullable(poolHitLogMap.get(shopPool.getId())); + + Optional hitLog = Optional.ofNullable(poolHitLogMap.get(pool.getId())); + if (pool.getDataDate().compareTo(date) != 0) { + hitLog = evalGroupIndicatorHitLogService.getHitLog(evalGroupIndicatorId, pool.getId(), EvalScopeEnum.SHOP, pool.getDataDate()); + } BigDecimal value = (ScoreWayEnum.LADDER.equals(scoreWay)) ? hitLog.map(EvalGroupIndicatorHitLog::getHitLadderValue).orElse(BigDecimal.ZERO) : hitLog.map(EvalGroupIndicatorHitLog::getHitCommissionValue).orElse(BigDecimal.ZERO); - Long evalUserReportId = shopPoolReportIdMap.get(shopPool.getId()); + Long evalUserReportId = shopPoolReportIdMap.get(pool.getId()); reportUserValues.add(convertDB(evalUserReportId, groupIndicator, value, date, params)); } @@ -274,37 +274,14 @@ public class EvalUserReportTask { if (IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(codeType)) { for (EvalGroupIndicatorParam param : params) { Map targetHitLogMap = queryTargetValue(param.getId(), poolIds, date, EvalScopeEnum.SHOP); - for (EvalShopPool pool : pools) { - EvalGroupIndicatorTargetHitLog hitLog = targetHitLogMap.get(pool.getId()); - EvalUseTargetEnum useTarget = hitLog.getUseTarget(); - - BigDecimal value = Optional.ofNullable(hitLog.getValue()).orElse(BigDecimal.ZERO); - if (EvalUseTargetEnum.FIRST_TARGET.equals(useTarget)) { - value = Optional.ofNullable(hitLog.getReachValue()).orElse(BigDecimal.ZERO); - } else if (EvalUseTargetEnum.EXTRA_TARGET.equals(useTarget)) { - - } - - BigDecimal value = Optional.ofNullable(hitLog) - .map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED); - Long evalUserReportId = userPoolReportIdMap.get(userPool.getId()); + Boolean staffChange = pool.getDataDate().compareTo(date) != 0; + EvalGroupIndicatorTargetHitLog targetHitLog = (staffChange) + ? queryTargetValue(param.getId(), pool.getId(), pool.getDataDate(), EvalScopeEnum.SHOP) : targetHitLogMap.get(pool.getId()); + BigDecimal value = this.getParamValue(targetHitLog); + Long evalUserReportId = shopPoolReportIdMap.get(pool.getId()); reportUserValues.add(convertParamDB(evalUserReportId, param, value, date)); } - - - - if (TargetTypeEnum.NO.equals(param.getTargetType())) { - Map userValueMap = queryUserOriginValue(param, userIds, date); - for (EvalShopPool shopPool : pools) { - BigDecimal value = userValueMap.getOrDefault(shopPool.getUserId(), BigDecimal.ZERO); - Long evalUserReportId = userPoolReportIdMap.get(userPool.getId()); - reportUserValues.add(convertParamDB(evalUserReportId, param, value, date)); - } - } else { - - - } } } } @@ -314,36 +291,27 @@ public class EvalUserReportTask { return reportUserValues; } - public void calcShop(List evalShopReports, - List rankCodes, - List reportUserValues, - List evalUserReports, - LocalDate date) { - List reportShopValues = new ArrayList<>(); - for (EvalUserReport shopReport : evalShopReports) { - - Set shopReportIds = evalUserReports.stream() - .filter(user -> shopReport.getShopId().equals(user.getShopId()) && Boolean.TRUE.equals(user.getInclusion())) - .map(EvalUserReport::getId).collect(Collectors.toSet()); - - final Long evalUserReportId = shopReport.getId(); - for (EvalUserRankCodeReport rankCode : rankCodes) { - final String code = rankCode.getCode(); - final IndicatorCodeTypeEnum codeType = rankCode.getCodeType(); - - Double averageRatioDouble = reportUserValues.stream() - .filter(user -> shopReportIds.contains(user.getEvalUserReportId()) && code.equals(user.getCode())) - .mapToDouble(userValue -> Optional.ofNullable(userValue.getValue()).orElse(BigDecimal.ZERO).doubleValue()) - .average() - .orElse(0); - BigDecimal value = new BigDecimal(averageRatioDouble.toString()); - EvalUserValueReport shopValue = new EvalUserValueReport(evalUserReportId, code, codeType, value, date); - reportShopValues.add(shopValue); - } + public BigDecimal getParamValue(EvalGroupIndicatorTargetHitLog hitLog) { + if (PublicUtil.isEmpty(hitLog) || PublicUtil.isEmpty(hitLog.getUseTarget())) { + return BigDecimal.ZERO; } - if (PublicUtil.isNotEmpty(reportShopValues)) { - evalUserValueReportService.saveBatch(reportShopValues); + BigDecimal value = null; + switch (hitLog.getUseTarget()) { + case NO: { + value = Optional.ofNullable(hitLog.getValue()).orElse(BigDecimal.ZERO); + break; + } + case FIRST_TARGET: { + value = Optional.ofNullable(hitLog.getReachValue()).orElse(BigDecimal.ZERO); + break; + } + case EXTRA_TARGET: { + value = Optional.ofNullable(hitLog.getExtraReachValue()).orElse(BigDecimal.ZERO); + break; + } } + + return value; } public List saveStaffReports(List pools, LocalDate date, Long evalUserRankReportId, Long evalUserRankStageReportId) { @@ -424,6 +392,19 @@ public class EvalUserReportTask { .collect(Collectors.toMap(EvalGroupIndicatorTargetHitLog::getPoolId, Function.identity(), (v1, v2) -> v1)); } + public EvalGroupIndicatorTargetHitLog queryTargetValue(Long referId, Long poolId, LocalDate dataDate, EvalScopeEnum scopeType) { + EvalGroupIndicatorTargetHitLog targetHitLog = evalGroupIndicatorTargetHitLogService.getOne(Wrappers.lambdaQuery() + .eq(EvalGroupIndicatorTargetHitLog::getReferId, referId) + .eq(EvalGroupIndicatorTargetHitLog::getTargetType, IndicatorTypeEnum.EXAMINE) + .eq(EvalGroupIndicatorTargetHitLog::getDataDate, dataDate) + .eq(EvalGroupIndicatorTargetHitLog::getPoolId, poolId) + .eq(EvalGroupIndicatorTargetHitLog::getScopeType, scopeType) + .eq(EvalGroupIndicatorTargetHitLog::getYn, Boolean.TRUE) + , Boolean.FALSE + ); + return targetHitLog; + } + public void cleanTodayData(LocalDate date) { evalUserRankReportService.remove(Wrappers.lambdaUpdate() .eq(EvalUserRankReport::getDataDate, date)