diff --git a/fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java b/fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java index c9e381c..84d7430 100644 --- a/fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java +++ b/fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java @@ -65,10 +65,10 @@ public class EvalGroupUserShop { */ private Long referId; -// /** -// * 多阶段 -// */ -// private Boolean multiStage; + /** + * 多阶段 + */ + private Boolean multiStage; /** * 数据开始日期 diff --git a/fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalRewardDist.java b/fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalRewardDist.java index 046ecdd..2e93512 100644 --- a/fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalRewardDist.java +++ b/fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalRewardDist.java @@ -49,11 +49,6 @@ public class EvalRewardDist extends BaseAuditableTimeEntity queryValue(EvalGroupUserShop obj, IndicatorCodeTypeEnum codeType, String indicatorCode) { DimensionTypeEnum dimensionType = EvalScopeEnum.STAFF.equals(obj.getScopeType()) ? DimensionTypeEnum.STAFF : DimensionTypeEnum.SHOP; if (IndicatorCodeTypeEnum.INDICATOR.equals(codeType)) { - LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery() - .eq(IndicatorUserStageValue::getIndicatorCode, indicatorCode) - .eq(IndicatorUserStageValue::getBeginDate, obj.getBeginDate()) - .eq(IndicatorUserStageValue::getEndDate, obj.getDataDate()) - .eq(IndicatorUserStageValue::getDimensionType, dimensionType) - .eq(IndicatorUserStageValue::getYn, Boolean.TRUE) - .eq(IndicatorUserStageValue::getGroupId, obj.getGroupId()); + //多阶段查询 + if (Boolean.TRUE.equals(obj.getMultiStage())) { + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery() + .eq(IndicatorUserStageValue::getIndicatorCode, indicatorCode) + .eq(IndicatorUserStageValue::getBeginDate, obj.getBeginDate()) + .eq(IndicatorUserStageValue::getEndDate, obj.getDataDate()) + .eq(IndicatorUserStageValue::getDimensionType, dimensionType) + .eq(IndicatorUserStageValue::getYn, Boolean.TRUE) + .eq(IndicatorUserStageValue::getGroupId, obj.getGroupId()); + if (EvalScopeEnum.STAFF.equals(obj.getScopeType())) { + queryWrapper.eq(IndicatorUserStageValue::getUserId, obj.getReferId()); + } else { + queryWrapper.eq(IndicatorUserStageValue::getShopId, obj.getReferId()); + } + IndicatorUserStageValue indicatorUserStageValue = indicatorUserStageValueService.getOne(queryWrapper, Boolean.FALSE); + return queryKpiIndicatorValue(indicatorUserStageValue); + } + //单阶段查询 + LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery() + .eq(IndicatorUserValue::getIndicatorCode, indicatorCode) + .eq(IndicatorUserValue::getDataDate, obj.getDataDate()) + .eq(IndicatorUserValue::getDimensionType, dimensionType) + .eq(IndicatorUserValue::getYn, Boolean.TRUE) + .eq(IndicatorUserValue::getGroupId, obj.getGroupId()); if (EvalScopeEnum.STAFF.equals(obj.getScopeType())) { - queryWrapper.eq(IndicatorUserStageValue::getUserId, obj.getReferId()); + queryWrapper.eq(IndicatorUserValue::getUserId, obj.getReferId()); } else { - queryWrapper.eq(IndicatorUserStageValue::getShopId, obj.getReferId()); + queryWrapper.eq(IndicatorUserValue::getShopId, obj.getReferId()); } - IndicatorUserStageValue indicatorUserStageValue = indicatorUserStageValueService.getOne(queryWrapper, Boolean.FALSE); - return queryKpiIndicatorValue(indicatorUserStageValue); + IndicatorUserValue indicatorUserValue = indicatorUserValueService.getOne(queryWrapper, Boolean.FALSE); + return queryKpiIndicatorValue(indicatorUserValue); } EvalIndicatorValue evalIndicatorValue = evalIndicatorValueService.queryLastValue(obj.getReferId(), diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java index 0197d8d..f449f58 100644 --- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java +++ b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java @@ -183,7 +183,12 @@ public class EvalCalculateService { log.error("考评排名组阶段[{}]不存在,终止计算!", JSON.toJSONString(evalGroup)); return; } - List userShops = this.buildEvalGroupObj(evalGroup, evalGroupRankStage, localDate, scopeType); + EvalGroupRank evalGroupRank = evalGroupRankService.getById(evalGroup.getEvalGroupRankId()); + if (Objects.isNull(evalGroupRank)) { + log.error("考评组[{}]排名组不存在,终止计算!", evalGroup.getEvalGroupRankId()); + return; + } + List userShops = this.buildEvalGroupObj(evalGroup, evalGroupRank, evalGroupRankStage, localDate, scopeType); if (CollectionUtils.isEmpty(userShops)) { log.error("考评组[{}]人员为空,终止计算!", evalGroupId); return; @@ -269,8 +274,7 @@ public class EvalCalculateService { } - public List buildEvalGroupObj(EvalGroup evalGroup, EvalGroupRankStage evalGroupRankStage, LocalDate localDate, EvalScopeEnum scopeType) { - LocalDate beginDate = evalGroupRankStage.getBeginTime(); + public List buildEvalGroupObj(EvalGroup evalGroup, EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage, LocalDate localDate, EvalScopeEnum scopeType) { List userShops = new ArrayList<>(); if (EvalScopeEnum.STAFF.equals(scopeType)) { List users = evalGroupUserService.list(Wrappers.lambdaQuery() @@ -282,7 +286,7 @@ public class EvalCalculateService { Map userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroup, evalGroupRankStage, users, localDate); for (EvalGroupUser user : users) { EvalUserPool userPool = userPoolMap.get(user.getUserId()); - userShops.add(convertBO(user, userPool)); + userShops.add(convertBO(user, userPool, evalGroupRank, evalGroupRankStage)); } return userShops; } @@ -291,7 +295,7 @@ public class EvalCalculateService { for (Long shopId : evalGroup.getShopIds()) { EvalShopPool shopPool = shopPoolBOMap.get(shopId); Boolean ignored = ! distShopIds.contains(shopId); - userShops.add(convertBO(shopPool, evalGroup, beginDate, localDate, ignored)); + userShops.add(convertBO(shopPool, evalGroup, evalGroupRank, evalGroupRankStage, localDate, ignored)); } return userShops; } @@ -619,7 +623,7 @@ public class EvalCalculateService { return poolDetail; } - public EvalGroupUserShop convertBO(EvalGroupUser user, EvalUserPool userPool) { + public EvalGroupUserShop convertBO(EvalGroupUser user, EvalUserPool userPool, EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage) { EvalGroupUserShop userShop = new EvalGroupUserShop(); userShop.setName(user.getUserName()); userShop.setScopeType(EvalScopeEnum.STAFF); @@ -628,7 +632,9 @@ public class EvalCalculateService { userShop.setPostId(userPool.getPostId()); userShop.setShopId(userPool.getShopId()); userShop.setReferId(user.getUserId()); + userShop.setBeginDate(evalGroupRankStage.getBeginTime()); userShop.setDataDate(user.getDataDate()); + userShop.setMultiStage(evalGroupRank.getMultiStage()); userShop.setGroupId(user.getGroupId()); userShop.setScore(BigDecimal.ZERO); userShop.setReward(BigDecimal.ZERO); @@ -636,7 +642,7 @@ public class EvalCalculateService { return userShop; } - public EvalGroupUserShop convertBO(EvalShopPool shopPool, EvalGroup evalGroup, LocalDate beginDate, LocalDate dataDate, Boolean ignored) { + public EvalGroupUserShop convertBO(EvalShopPool shopPool, EvalGroup evalGroup, EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage, LocalDate dataDate, Boolean ignored) { EvalGroupUserShop userShop = new EvalGroupUserShop(); userShop.setName(shopPool.getShopName()); userShop.setReferId(shopPool.getShopId()); @@ -645,8 +651,9 @@ public class EvalCalculateService { userShop.setScopeType(EvalScopeEnum.SHOP); userShop.setEvalId(userShop.getEvalId()); userShop.setEvalGroupId(evalGroup.getId()); - userShop.setBeginDate(beginDate); + userShop.setBeginDate(evalGroupRankStage.getBeginTime()); userShop.setDataDate(dataDate); + userShop.setMultiStage(evalGroupRank.getMultiStage()); userShop.setGroupId(evalGroup.getGroupId()); userShop.setIgnored(ignored); userShop.setScore(BigDecimal.ZERO); diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java index 3324b05..aa442f8 100644 --- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java +++ b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java @@ -285,14 +285,14 @@ public class EvalGroupPoolService { //排名维度 for (Map.Entry> rankEntry : rankPools.entrySet()) { List userRankPools = rankEntry.getValue(); - double averageKpiScoreRatio = userRankPools.stream() + Double averageKpiScoreRatio = userRankPools.stream() .mapToDouble(r -> Optional.ofNullable(r.getScoreRatio()).orElse(BigDecimal.ZERO).doubleValue()) .average() .orElse(0); BigDecimal reward = userRankPools.stream().map(EvalUserPool::getReward).reduce(BigDecimal.ZERO, BigDecimal::add); EvalUserGroupRankVO rank = new EvalUserGroupRankVO(); rank.setEvalGroupRankName(rankNameMap.getOrDefault(rankEntry.getKey(), "")); - rank.setScoreRatio(new BigDecimal(averageKpiScoreRatio).multiply(Constant.ONE_HUNDRED)); + rank.setScoreRatio(new BigDecimal(averageKpiScoreRatio.toString()).multiply(Constant.ONE_HUNDRED)); rank.setReward(reward); rank.setEvalGroupRankId(rankEntry.getKey()); ranks.add(rank); @@ -496,6 +496,10 @@ public class EvalGroupPoolService { if (! TargetTypeEnum.NO.equals(paramVO.getTargetType())) { paramVO.setReachValue(Optional.ofNullable(paramVO.getReachValue()).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED)); } + //有目标 + if (PublicUtil.isNotEmpty(paramVO.getExtraTargetType()) && (! TargetTypeEnum.NO.equals(paramVO.getExtraTargetType()))) { + paramVO.setExtraReachValue(Optional.ofNullable(paramVO.getExtraReachValue()).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED)); + } } for (EvalGroupIndicatorParamVO paramVO : Optional.ofNullable(detail.getLadderParams()).orElse(new ArrayList<>())) { @@ -507,6 +511,10 @@ public class EvalGroupPoolService { if (! TargetTypeEnum.NO.equals(paramVO.getTargetType())) { paramVO.setReachValue(Optional.ofNullable(paramVO.getReachValue()).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED)); } + //有目标 + if (PublicUtil.isNotEmpty(paramVO.getExtraTargetType()) && (! TargetTypeEnum.NO.equals(paramVO.getExtraTargetType()))) { + paramVO.setExtraReachValue(Optional.ofNullable(paramVO.getExtraReachValue()).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED)); + } } for (EvalGroupIndicatorPreconditionVO preconditionVO : Optional.ofNullable(detail.getConds()).orElse(new ArrayList<>())) { @@ -539,7 +547,6 @@ public class EvalGroupPoolService { scopeType, dataDate, paramVos); for (EvalGroupIndicatorParamVO paramVO : paramVos) { - String code = paramVO.getCode(); Long paramId = paramVO.getId(); //无目标 // if (TargetTypeEnum.NO.equals(paramVO.getTargetType())) { @@ -552,8 +559,15 @@ public class EvalGroupPoolService { Optional hitLogOptional = Optional.ofNullable(paramTargetHitLogMap.get(paramId)); paramVO.setIndicatorValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getValue).orElse(BigDecimal.ZERO)); paramVO.setReachValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO)); - paramVO.setExtraReachValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO)); + paramVO.setExtraReachValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getExtraReachValue).orElse(BigDecimal.ZERO)); paramVO.setUseTarget(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getUseTarget).orElse(EvalUseTargetEnum.NO)); + +// paramVO.setTargetCalcType(paramVO.getTargetCalcType()); +// paramVO.setTargetType(paramVO.getTargetType()); +// paramVO.setTargetValue(paramVO.getTargetValue()); +// paramVO.setExtraTargetCalcType(paramVO.getExtraTargetCalcType()); +// paramVO.setExtraTargetType(paramVO.getExtraTargetType()); +// paramVO.setExtraTargetValue(paramVO.getExtraTargetValue()); } Map> indicatorParamMap = paramVos.stream()