Commit 9a6df217881d000909118846aa9dadf8513bcca6
1 parent
f945186c
feature(*): 修改个人考评
修改个人考评
Showing
6 changed files
with
84 additions
and
44 deletions
fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalRewardDist.java
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalRewardDistVO.java
... | ... | @@ -12,6 +12,7 @@ import lombok.EqualsAndHashCode; |
12 | 12 | import lombok.experimental.Accessors; |
13 | 13 | |
14 | 14 | import java.math.BigDecimal; |
15 | +import java.time.LocalDate; | |
15 | 16 | import java.util.List; |
16 | 17 | |
17 | 18 | /** |
... | ... | @@ -37,31 +38,37 @@ public class EvalRewardDistVO { |
37 | 38 | * 用户id |
38 | 39 | */ |
39 | 40 | private Long userId; |
40 | - | |
41 | 41 | /** |
42 | - * 考评id | |
42 | + * 考评组id | |
43 | 43 | */ |
44 | - private Long evalId; | |
45 | - | |
44 | + private Long evalGroupId; | |
46 | 45 | /** |
47 | - * 考评组编码 | |
46 | + * 考评排名组id | |
48 | 47 | */ |
49 | - private Long evalGroupId; | |
48 | + private Long evalGroupRankId; | |
49 | + /** | |
50 | + * 考评排名组阶段id | |
51 | + */ | |
52 | + private Long evalGroupRankStageId; | |
53 | + /** | |
54 | + * 考评排名组名称 | |
55 | + */ | |
56 | + private String evalGroupRankName; | |
50 | 57 | |
51 | 58 | /** |
52 | - * 考评类型; 1:活动考评 2:其他考评 | |
59 | + * 考评排名组阶段名称 | |
53 | 60 | */ |
54 | - private EvalTypeEnum evalType; | |
61 | + private String evalGroupRankStageName; | |
55 | 62 | |
56 | 63 | /** |
57 | - * 考评 | |
64 | + * 生效时间 | |
58 | 65 | */ |
59 | - private String evalName; | |
66 | + private LocalDate beginTime; | |
60 | 67 | |
61 | 68 | /** |
62 | - * 考评组 | |
69 | + * 结束时间 | |
63 | 70 | */ |
64 | - private String evalGroupName; | |
71 | + private LocalDate overTime; | |
65 | 72 | |
66 | 73 | /** |
67 | 74 | * 考评组id | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/kpi/EvalKpiBaseCalculator.java
... | ... | @@ -225,20 +225,37 @@ public abstract class EvalKpiBaseCalculator implements Calculator<EvalGroupUserS |
225 | 225 | protected Optional<BigDecimal> queryValue(EvalGroupUserShop obj, IndicatorCodeTypeEnum codeType, String indicatorCode) { |
226 | 226 | DimensionTypeEnum dimensionType = EvalScopeEnum.STAFF.equals(obj.getScopeType()) ? DimensionTypeEnum.STAFF : DimensionTypeEnum.SHOP; |
227 | 227 | if (IndicatorCodeTypeEnum.INDICATOR.equals(codeType)) { |
228 | - LambdaQueryWrapper<IndicatorUserStageValue> queryWrapper = Wrappers.<IndicatorUserStageValue>lambdaQuery() | |
229 | - .eq(IndicatorUserStageValue::getIndicatorCode, indicatorCode) | |
230 | - .eq(IndicatorUserStageValue::getBeginDate, obj.getBeginDate()) | |
231 | - .eq(IndicatorUserStageValue::getEndDate, obj.getDataDate()) | |
232 | - .eq(IndicatorUserStageValue::getDimensionType, dimensionType) | |
233 | - .eq(IndicatorUserStageValue::getYn, Boolean.TRUE) | |
234 | - .eq(IndicatorUserStageValue::getGroupId, obj.getGroupId()); | |
228 | + //多阶段查询 | |
229 | + if (Boolean.TRUE.equals(obj.getMultiStage())) { | |
230 | + LambdaQueryWrapper<IndicatorUserStageValue> queryWrapper = Wrappers.<IndicatorUserStageValue>lambdaQuery() | |
231 | + .eq(IndicatorUserStageValue::getIndicatorCode, indicatorCode) | |
232 | + .eq(IndicatorUserStageValue::getBeginDate, obj.getBeginDate()) | |
233 | + .eq(IndicatorUserStageValue::getEndDate, obj.getDataDate()) | |
234 | + .eq(IndicatorUserStageValue::getDimensionType, dimensionType) | |
235 | + .eq(IndicatorUserStageValue::getYn, Boolean.TRUE) | |
236 | + .eq(IndicatorUserStageValue::getGroupId, obj.getGroupId()); | |
237 | + if (EvalScopeEnum.STAFF.equals(obj.getScopeType())) { | |
238 | + queryWrapper.eq(IndicatorUserStageValue::getUserId, obj.getReferId()); | |
239 | + } else { | |
240 | + queryWrapper.eq(IndicatorUserStageValue::getShopId, obj.getReferId()); | |
241 | + } | |
242 | + IndicatorUserStageValue indicatorUserStageValue = indicatorUserStageValueService.getOne(queryWrapper, Boolean.FALSE); | |
243 | + return queryKpiIndicatorValue(indicatorUserStageValue); | |
244 | + } | |
245 | + //单阶段查询 | |
246 | + LambdaQueryWrapper<IndicatorUserValue> queryWrapper = Wrappers.<IndicatorUserValue>lambdaQuery() | |
247 | + .eq(IndicatorUserValue::getIndicatorCode, indicatorCode) | |
248 | + .eq(IndicatorUserValue::getDataDate, obj.getDataDate()) | |
249 | + .eq(IndicatorUserValue::getDimensionType, dimensionType) | |
250 | + .eq(IndicatorUserValue::getYn, Boolean.TRUE) | |
251 | + .eq(IndicatorUserValue::getGroupId, obj.getGroupId()); | |
235 | 252 | if (EvalScopeEnum.STAFF.equals(obj.getScopeType())) { |
236 | - queryWrapper.eq(IndicatorUserStageValue::getUserId, obj.getReferId()); | |
253 | + queryWrapper.eq(IndicatorUserValue::getUserId, obj.getReferId()); | |
237 | 254 | } else { |
238 | - queryWrapper.eq(IndicatorUserStageValue::getShopId, obj.getReferId()); | |
255 | + queryWrapper.eq(IndicatorUserValue::getShopId, obj.getReferId()); | |
239 | 256 | } |
240 | - IndicatorUserStageValue indicatorUserStageValue = indicatorUserStageValueService.getOne(queryWrapper, Boolean.FALSE); | |
241 | - return queryKpiIndicatorValue(indicatorUserStageValue); | |
257 | + IndicatorUserValue indicatorUserValue = indicatorUserValueService.getOne(queryWrapper, Boolean.FALSE); | |
258 | + return queryKpiIndicatorValue(indicatorUserValue); | |
242 | 259 | } |
243 | 260 | |
244 | 261 | EvalIndicatorValue evalIndicatorValue = evalIndicatorValueService.queryLastValue(obj.getReferId(), | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java
... | ... | @@ -183,7 +183,12 @@ public class EvalCalculateService { |
183 | 183 | log.error("考评排名组阶段[{}]不存在,终止计算!", JSON.toJSONString(evalGroup)); |
184 | 184 | return; |
185 | 185 | } |
186 | - List<EvalGroupUserShop> userShops = this.buildEvalGroupObj(evalGroup, evalGroupRankStage, localDate, scopeType); | |
186 | + EvalGroupRank evalGroupRank = evalGroupRankService.getById(evalGroup.getEvalGroupRankId()); | |
187 | + if (Objects.isNull(evalGroupRank)) { | |
188 | + log.error("考评组[{}]排名组不存在,终止计算!", evalGroup.getEvalGroupRankId()); | |
189 | + return; | |
190 | + } | |
191 | + List<EvalGroupUserShop> userShops = this.buildEvalGroupObj(evalGroup, evalGroupRank, evalGroupRankStage, localDate, scopeType); | |
187 | 192 | if (CollectionUtils.isEmpty(userShops)) { |
188 | 193 | log.error("考评组[{}]人员为空,终止计算!", evalGroupId); |
189 | 194 | return; |
... | ... | @@ -269,8 +274,7 @@ public class EvalCalculateService { |
269 | 274 | } |
270 | 275 | |
271 | 276 | |
272 | - public List<EvalGroupUserShop> buildEvalGroupObj(EvalGroup evalGroup, EvalGroupRankStage evalGroupRankStage, LocalDate localDate, EvalScopeEnum scopeType) { | |
273 | - LocalDate beginDate = evalGroupRankStage.getBeginTime(); | |
277 | + public List<EvalGroupUserShop> buildEvalGroupObj(EvalGroup evalGroup, EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage, LocalDate localDate, EvalScopeEnum scopeType) { | |
274 | 278 | List<EvalGroupUserShop> userShops = new ArrayList<>(); |
275 | 279 | if (EvalScopeEnum.STAFF.equals(scopeType)) { |
276 | 280 | List<EvalGroupUser> users = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery() |
... | ... | @@ -282,7 +286,7 @@ public class EvalCalculateService { |
282 | 286 | Map<Long, EvalUserPool> userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroup, evalGroupRankStage, users, localDate); |
283 | 287 | for (EvalGroupUser user : users) { |
284 | 288 | EvalUserPool userPool = userPoolMap.get(user.getUserId()); |
285 | - userShops.add(convertBO(user, userPool)); | |
289 | + userShops.add(convertBO(user, userPool, evalGroupRank, evalGroupRankStage)); | |
286 | 290 | } |
287 | 291 | return userShops; |
288 | 292 | } |
... | ... | @@ -291,7 +295,7 @@ public class EvalCalculateService { |
291 | 295 | for (Long shopId : evalGroup.getShopIds()) { |
292 | 296 | EvalShopPool shopPool = shopPoolBOMap.get(shopId); |
293 | 297 | Boolean ignored = ! distShopIds.contains(shopId); |
294 | - userShops.add(convertBO(shopPool, evalGroup, beginDate, localDate, ignored)); | |
298 | + userShops.add(convertBO(shopPool, evalGroup, evalGroupRank, evalGroupRankStage, localDate, ignored)); | |
295 | 299 | } |
296 | 300 | return userShops; |
297 | 301 | } |
... | ... | @@ -619,7 +623,7 @@ public class EvalCalculateService { |
619 | 623 | return poolDetail; |
620 | 624 | } |
621 | 625 | |
622 | - public EvalGroupUserShop convertBO(EvalGroupUser user, EvalUserPool userPool) { | |
626 | + public EvalGroupUserShop convertBO(EvalGroupUser user, EvalUserPool userPool, EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage) { | |
623 | 627 | EvalGroupUserShop userShop = new EvalGroupUserShop(); |
624 | 628 | userShop.setName(user.getUserName()); |
625 | 629 | userShop.setScopeType(EvalScopeEnum.STAFF); |
... | ... | @@ -628,7 +632,9 @@ public class EvalCalculateService { |
628 | 632 | userShop.setPostId(userPool.getPostId()); |
629 | 633 | userShop.setShopId(userPool.getShopId()); |
630 | 634 | userShop.setReferId(user.getUserId()); |
635 | + userShop.setBeginDate(evalGroupRankStage.getBeginTime()); | |
631 | 636 | userShop.setDataDate(user.getDataDate()); |
637 | + userShop.setMultiStage(evalGroupRank.getMultiStage()); | |
632 | 638 | userShop.setGroupId(user.getGroupId()); |
633 | 639 | userShop.setScore(BigDecimal.ZERO); |
634 | 640 | userShop.setReward(BigDecimal.ZERO); |
... | ... | @@ -636,7 +642,7 @@ public class EvalCalculateService { |
636 | 642 | return userShop; |
637 | 643 | } |
638 | 644 | |
639 | - public EvalGroupUserShop convertBO(EvalShopPool shopPool, EvalGroup evalGroup, LocalDate beginDate, LocalDate dataDate, Boolean ignored) { | |
645 | + public EvalGroupUserShop convertBO(EvalShopPool shopPool, EvalGroup evalGroup, EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage, LocalDate dataDate, Boolean ignored) { | |
640 | 646 | EvalGroupUserShop userShop = new EvalGroupUserShop(); |
641 | 647 | userShop.setName(shopPool.getShopName()); |
642 | 648 | userShop.setReferId(shopPool.getShopId()); |
... | ... | @@ -645,8 +651,9 @@ public class EvalCalculateService { |
645 | 651 | userShop.setScopeType(EvalScopeEnum.SHOP); |
646 | 652 | userShop.setEvalId(userShop.getEvalId()); |
647 | 653 | userShop.setEvalGroupId(evalGroup.getId()); |
648 | - userShop.setBeginDate(beginDate); | |
654 | + userShop.setBeginDate(evalGroupRankStage.getBeginTime()); | |
649 | 655 | userShop.setDataDate(dataDate); |
656 | + userShop.setMultiStage(evalGroupRank.getMultiStage()); | |
650 | 657 | userShop.setGroupId(evalGroup.getGroupId()); |
651 | 658 | userShop.setIgnored(ignored); |
652 | 659 | userShop.setScore(BigDecimal.ZERO); | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java
... | ... | @@ -285,14 +285,14 @@ public class EvalGroupPoolService { |
285 | 285 | //排名维度 |
286 | 286 | for (Map.Entry<Long, List<EvalUserPool>> rankEntry : rankPools.entrySet()) { |
287 | 287 | List<EvalUserPool> userRankPools = rankEntry.getValue(); |
288 | - double averageKpiScoreRatio = userRankPools.stream() | |
288 | + Double averageKpiScoreRatio = userRankPools.stream() | |
289 | 289 | .mapToDouble(r -> Optional.ofNullable(r.getScoreRatio()).orElse(BigDecimal.ZERO).doubleValue()) |
290 | 290 | .average() |
291 | 291 | .orElse(0); |
292 | 292 | BigDecimal reward = userRankPools.stream().map(EvalUserPool::getReward).reduce(BigDecimal.ZERO, BigDecimal::add); |
293 | 293 | EvalUserGroupRankVO rank = new EvalUserGroupRankVO(); |
294 | 294 | rank.setEvalGroupRankName(rankNameMap.getOrDefault(rankEntry.getKey(), "")); |
295 | - rank.setScoreRatio(new BigDecimal(averageKpiScoreRatio).multiply(Constant.ONE_HUNDRED)); | |
295 | + rank.setScoreRatio(new BigDecimal(averageKpiScoreRatio.toString()).multiply(Constant.ONE_HUNDRED)); | |
296 | 296 | rank.setReward(reward); |
297 | 297 | rank.setEvalGroupRankId(rankEntry.getKey()); |
298 | 298 | ranks.add(rank); |
... | ... | @@ -496,6 +496,10 @@ public class EvalGroupPoolService { |
496 | 496 | if (! TargetTypeEnum.NO.equals(paramVO.getTargetType())) { |
497 | 497 | paramVO.setReachValue(Optional.ofNullable(paramVO.getReachValue()).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED)); |
498 | 498 | } |
499 | + //有目标 | |
500 | + if (PublicUtil.isNotEmpty(paramVO.getExtraTargetType()) && (! TargetTypeEnum.NO.equals(paramVO.getExtraTargetType()))) { | |
501 | + paramVO.setExtraReachValue(Optional.ofNullable(paramVO.getExtraReachValue()).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED)); | |
502 | + } | |
499 | 503 | } |
500 | 504 | |
501 | 505 | for (EvalGroupIndicatorParamVO paramVO : Optional.ofNullable(detail.getLadderParams()).orElse(new ArrayList<>())) { |
... | ... | @@ -507,6 +511,10 @@ public class EvalGroupPoolService { |
507 | 511 | if (! TargetTypeEnum.NO.equals(paramVO.getTargetType())) { |
508 | 512 | paramVO.setReachValue(Optional.ofNullable(paramVO.getReachValue()).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED)); |
509 | 513 | } |
514 | + //有目标 | |
515 | + if (PublicUtil.isNotEmpty(paramVO.getExtraTargetType()) && (! TargetTypeEnum.NO.equals(paramVO.getExtraTargetType()))) { | |
516 | + paramVO.setExtraReachValue(Optional.ofNullable(paramVO.getExtraReachValue()).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED)); | |
517 | + } | |
510 | 518 | } |
511 | 519 | |
512 | 520 | for (EvalGroupIndicatorPreconditionVO preconditionVO : Optional.ofNullable(detail.getConds()).orElse(new ArrayList<>())) { |
... | ... | @@ -539,7 +547,6 @@ public class EvalGroupPoolService { |
539 | 547 | scopeType, dataDate, paramVos); |
540 | 548 | |
541 | 549 | for (EvalGroupIndicatorParamVO paramVO : paramVos) { |
542 | - String code = paramVO.getCode(); | |
543 | 550 | Long paramId = paramVO.getId(); |
544 | 551 | //无目标 |
545 | 552 | // if (TargetTypeEnum.NO.equals(paramVO.getTargetType())) { |
... | ... | @@ -552,8 +559,15 @@ public class EvalGroupPoolService { |
552 | 559 | Optional<EvalGroupIndicatorTargetHitLog> hitLogOptional = Optional.ofNullable(paramTargetHitLogMap.get(paramId)); |
553 | 560 | paramVO.setIndicatorValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getValue).orElse(BigDecimal.ZERO)); |
554 | 561 | paramVO.setReachValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO)); |
555 | - paramVO.setExtraReachValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO)); | |
562 | + paramVO.setExtraReachValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getExtraReachValue).orElse(BigDecimal.ZERO)); | |
556 | 563 | paramVO.setUseTarget(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getUseTarget).orElse(EvalUseTargetEnum.NO)); |
564 | + | |
565 | +// paramVO.setTargetCalcType(paramVO.getTargetCalcType()); | |
566 | +// paramVO.setTargetType(paramVO.getTargetType()); | |
567 | +// paramVO.setTargetValue(paramVO.getTargetValue()); | |
568 | +// paramVO.setExtraTargetCalcType(paramVO.getExtraTargetCalcType()); | |
569 | +// paramVO.setExtraTargetType(paramVO.getExtraTargetType()); | |
570 | +// paramVO.setExtraTargetValue(paramVO.getExtraTargetValue()); | |
557 | 571 | } |
558 | 572 | |
559 | 573 | Map<ParamTypeEnum, List<EvalGroupIndicatorParamVO>> indicatorParamMap = paramVos.stream() | ... | ... |