Commit 9bac7a5e6e24c2051d14ca58eeaa743ccddf7a63
1 parent
f8a8c4c5
feature(*): 判断是否命中奖惩条件
判断是否命中奖惩条件
Showing
9 changed files
with
72 additions
and
25 deletions
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalGroupRewardPreconditionVO.java
... | ... | @@ -47,13 +47,22 @@ public class EvalGroupRewardPreconditionVO{ |
47 | 47 | */ |
48 | 48 | private IndicatorCodeTypeEnum codeType; |
49 | 49 | |
50 | - | |
51 | 50 | /** |
52 | 51 | * 数据类型;1:台数 2:百分比 3:金额 |
53 | 52 | */ |
54 | 53 | private DataTypeEnum dataType; |
55 | 54 | |
56 | 55 | /** |
56 | + * 条件值 | |
57 | + */ | |
58 | + private BigDecimal rankCondValue; | |
59 | + | |
60 | + /** | |
61 | + * 排名 | |
62 | + */ | |
63 | + private Integer rank; | |
64 | + | |
65 | + /** | |
57 | 66 | * 项目编码 |
58 | 67 | */ |
59 | 68 | private String code; | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardFixationCalculator.java
... | ... | @@ -33,9 +33,6 @@ public class EvalRewardFixationCalculator extends EvalRewardBaseCalculator { |
33 | 33 | final Long evalGroupRewardId = reward.getId(); |
34 | 34 | List<EvalGroupRewardPrecondition> preconditions = queryPrecondition(evalGroupRewardId); |
35 | 35 | boolean examined = examinePrecondition(userShop, preconditions); |
36 | - if (!examined) { | |
37 | - return BigDecimal.ZERO; | |
38 | - } | |
39 | 36 | |
40 | 37 | BigDecimal stairValue = reward.getMoney(); |
41 | 38 | List<EvalGroupRewardParam> params = queryProjectParam(evalGroupRewardId, ParamTypeEnum.COMMISSION); |
... | ... | @@ -44,6 +41,9 @@ public class EvalRewardFixationCalculator extends EvalRewardBaseCalculator { |
44 | 41 | } |
45 | 42 | |
46 | 43 | final BigDecimal commissionValue = calculateParamValue(userShop, params); |
44 | + if (!examined) { | |
45 | + return BigDecimal.ZERO; | |
46 | + } | |
47 | 47 | final BigDecimal salaryValue = stairValue.multiply(commissionValue).divide(BigDecimal.ONE, 2, RoundingMode.HALF_UP); |
48 | 48 | |
49 | 49 | clearProjectHitLog(evalGroupRewardId, userShop); | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardLadderCalculator.java
... | ... | @@ -44,9 +44,7 @@ public class EvalRewardLadderCalculator extends EvalRewardBaseCalculator { |
44 | 44 | } |
45 | 45 | List<EvalGroupRewardPrecondition> preconditions = queryPrecondition(evalGroupRewardId); |
46 | 46 | boolean examined = examinePrecondition(userShop, preconditions); |
47 | - if (!examined) { | |
48 | - return BigDecimal.ZERO; | |
49 | - } | |
47 | + | |
50 | 48 | List<EvalGroupRewardParam> ladderParams = queryProjectParam(evalGroupRewardId, ParamTypeEnum.LADDER); |
51 | 49 | if (CollectionUtils.isEmpty(ladderParams)) { |
52 | 50 | log.error("配置id[{}]的台阶项不存在", evalGroupRewardId); |
... | ... | @@ -68,6 +66,9 @@ public class EvalRewardLadderCalculator extends EvalRewardBaseCalculator { |
68 | 66 | List<EvalGroupRewardParam> rewardParams = queryProjectParam(evalGroupRewardId, ParamTypeEnum.COMMISSION); |
69 | 67 | commissionValue = calculateParamValue(userShop, rewardParams); |
70 | 68 | |
69 | + if (!examined) { | |
70 | + return BigDecimal.ZERO; | |
71 | + } | |
71 | 72 | rewardValue = money.multiply(commissionValue).divide(BigDecimal.ONE, 2, RoundingMode.HALF_UP); |
72 | 73 | |
73 | 74 | final BigDecimal _rewardValue = rewardValue; | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardLadderDoubleCalculator.java
... | ... | @@ -45,9 +45,7 @@ public class EvalRewardLadderDoubleCalculator extends EvalRewardBaseCalculator { |
45 | 45 | } |
46 | 46 | List<EvalGroupRewardPrecondition> preconditions = queryPrecondition(evalGroupRewardId); |
47 | 47 | boolean examined = examinePrecondition(userShop, preconditions); |
48 | - if (!examined) { | |
49 | - return BigDecimal.ZERO; | |
50 | - } | |
48 | + | |
51 | 49 | List<EvalGroupRewardParam> ladderParams = queryProjectParam(evalGroupRewardId, ParamTypeEnum.LADDER); |
52 | 50 | if (CollectionUtils.isEmpty(ladderParams)) { |
53 | 51 | log.error("配置id[{}]的台阶项不存在", evalGroupRewardId); |
... | ... | @@ -69,6 +67,9 @@ public class EvalRewardLadderDoubleCalculator extends EvalRewardBaseCalculator { |
69 | 67 | BigDecimal rewardValue = null; |
70 | 68 | List<EvalGroupRewardParam> rewardParams = queryProjectParam(evalGroupRewardId, ParamTypeEnum.COMMISSION); |
71 | 69 | commissionValue = calculateParamValue(userShop, rewardParams); |
70 | + if (!examined) { | |
71 | + return BigDecimal.ZERO; | |
72 | + } | |
72 | 73 | //翻倍奖励 |
73 | 74 | if (PublicUtil.isNotEmpty(capMoney)) { |
74 | 75 | rewardValue = calculateDouble(commissionValue, money, capMoney); | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardProportionCalculator.java
... | ... | @@ -5,6 +5,7 @@ import cn.fw.morax.common.utils.PublicUtil; |
5 | 5 | import cn.fw.morax.domain.bo.eval.EvalGroupUserShop; |
6 | 6 | import cn.fw.morax.domain.db.eval.EvalGroupReward; |
7 | 7 | import cn.fw.morax.domain.db.eval.EvalGroupRewardParam; |
8 | +import cn.fw.morax.domain.db.eval.EvalGroupRewardPrecondition; | |
8 | 9 | import cn.fw.morax.domain.enums.EvalRewardCalMethodEnum; |
9 | 10 | import cn.fw.morax.domain.enums.ParamTypeEnum; |
10 | 11 | import cn.fw.morax.service.data.eval.EvalGroupService; |
... | ... | @@ -48,8 +49,10 @@ public class EvalRewardProportionCalculator extends EvalRewardBaseCalculator { |
48 | 49 | if (PublicUtil.isEmpty(userShops)) { |
49 | 50 | return; |
50 | 51 | } |
52 | + | |
51 | 53 | initReward(userShops); |
52 | 54 | final Long evalGroupRewardId = reward.getId(); |
55 | + List<EvalGroupRewardPrecondition> preconditions = queryPrecondition(evalGroupRewardId); | |
53 | 56 | BigDecimal money = reward.getMoney(); |
54 | 57 | List<EvalGroupRewardParam> params = queryProjectParam(evalGroupRewardId, ParamTypeEnum.COMMISSION); |
55 | 58 | if (CollectionUtils.isEmpty(params)) { |
... | ... | @@ -80,6 +83,12 @@ public class EvalRewardProportionCalculator extends EvalRewardBaseCalculator { |
80 | 83 | } |
81 | 84 | |
82 | 85 | for (EvalGroupUserShop userShop : userShops) { |
86 | + boolean examined = examinePrecondition(userShop, preconditions); | |
87 | + if (!examined) { | |
88 | + userShop.setEvalGroupRewardAmount(BigDecimal.ZERO); | |
89 | + continue; | |
90 | + } | |
91 | + | |
83 | 92 | BigDecimal commissionValue = referValueMap.getOrDefault(userShop.getPoolId(), BigDecimal.ZERO); |
84 | 93 | |
85 | 94 | BigDecimal proportion = BigDecimal.ZERO; | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardRankCalculator.java
... | ... | @@ -6,6 +6,7 @@ import cn.fw.morax.domain.bo.eval.EvalGroupUserShop; |
6 | 6 | import cn.fw.morax.domain.db.eval.EvalGroupReward; |
7 | 7 | import cn.fw.morax.domain.db.eval.EvalGroupRewardLadders; |
8 | 8 | import cn.fw.morax.domain.db.eval.EvalGroupRewardParam; |
9 | +import cn.fw.morax.domain.db.eval.EvalGroupRewardPrecondition; | |
9 | 10 | import cn.fw.morax.domain.enums.EvalRewardCalMethodEnum; |
10 | 11 | import cn.fw.morax.domain.enums.ParamTypeEnum; |
11 | 12 | import cn.fw.morax.domain.enums.RankTypeEnum; |
... | ... | @@ -63,6 +64,7 @@ public class EvalRewardRankCalculator extends EvalRewardBaseCalculator { |
63 | 64 | final Long evalGroupRewardId = reward.getId(); |
64 | 65 | final String key = getRank() + evalGroupRewardId; |
65 | 66 | RankTypeEnum rankType = reward.getRankType(); |
67 | + List<EvalGroupRewardPrecondition> preconditions = queryPrecondition(evalGroupRewardId); | |
66 | 68 | List<EvalGroupRewardParam> params = queryProjectParam(evalGroupRewardId, ParamTypeEnum.LADDER); |
67 | 69 | if (CollectionUtils.isEmpty(params)) { |
68 | 70 | return; |
... | ... | @@ -102,8 +104,12 @@ public class EvalRewardRankCalculator extends EvalRewardBaseCalculator { |
102 | 104 | |
103 | 105 | Set<String> referIdStrs = zSetOps.reverseRange(startIndex, endIndex); |
104 | 106 | for (String referIdStr : referIdStrs) { |
105 | - | |
106 | 107 | EvalGroupUserShop userShop = rewardObjectBOMap.get(referIdStr); |
108 | + boolean examined = examinePrecondition(userShop, preconditions); | |
109 | + if (!examined) { | |
110 | + userShop.setEvalGroupRewardAmount(BigDecimal.ZERO); | |
111 | + continue; | |
112 | + } | |
107 | 113 | userShop.setEvalGroupRewardAmount(money); |
108 | 114 | BigDecimal hitCommissionValue = referCommonMap.get(referIdStr); |
109 | 115 | clearProjectHitLog(evalGroupRewardId, userShop); | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java
... | ... | @@ -48,6 +48,7 @@ import static cn.fw.common.businessvalidator.Validator.BV; |
48 | 48 | public class EvalGroupPoolService { |
49 | 49 | |
50 | 50 | private final EvalGroupIndicatorPreconditionLaddersService evalGroupIndicatorPreconditionLaddersService; |
51 | + private final EvalGroupRewardPreconditionHitLogService evalGroupRewardPreconditionHitLogService; | |
51 | 52 | private final EvalGroupIndicatorPreconditionService evalGroupIndicatorPreconditionService; |
52 | 53 | private final EvalGroupIndicatorTargetHitLogService evalGroupIndicatorTargetHitLogService; |
53 | 54 | private final EvalGroupRewardTargetHitLogService evalGroupRewardTargetHitLogService; |
... | ... | @@ -576,7 +577,7 @@ public class EvalGroupPoolService { |
576 | 577 | reward.setLadders(this.getLadderVos(reward, hitLadderId)); |
577 | 578 | |
578 | 579 | //条件 |
579 | - reward.setConds(getConds(evalPoolId, referId, evalGroupRewardId, dataDate)); | |
580 | + reward.setConds(getConds(evalPoolId, scopeType, referId, evalGroupRewardId, dataDate)); | |
580 | 581 | |
581 | 582 | //处理百分数 |
582 | 583 | processRewardPercent(reward); |
... | ... | @@ -594,7 +595,7 @@ public class EvalGroupPoolService { |
594 | 595 | return Optional.ofNullable(indicatorHitLog); |
595 | 596 | } |
596 | 597 | |
597 | - public List<EvalGroupRewardPreconditionVO> getConds(Long poolId, Long userId, Long evalGroupRewardId, LocalDate dataDate) { | |
598 | + public List<EvalGroupRewardPreconditionVO> getConds(Long poolId, EvalScopeEnum scopeType, Long referId, Long evalGroupRewardId, LocalDate dataDate) { | |
598 | 599 | List<EvalGroupRewardPrecondition> preconditions = evalGroupRewardPreconditionService.list(Wrappers.<EvalGroupRewardPrecondition>lambdaQuery() |
599 | 600 | .eq(EvalGroupRewardPrecondition::getEvalGroupRewardId, evalGroupRewardId) |
600 | 601 | .eq(EvalGroupRewardPrecondition::getYn, Boolean.TRUE) |
... | ... | @@ -603,29 +604,49 @@ public class EvalGroupPoolService { |
603 | 604 | List<EvalGroupRewardPreconditionVO> preconditionVos = PublicUtil.copyList(preconditions, EvalGroupRewardPreconditionVO.class); |
604 | 605 | for (EvalGroupRewardPreconditionVO precondition : preconditionVos) { |
605 | 606 | if (TargetTypeEnum.NO.equals(precondition.getTargetType())) { |
606 | - IndicatorUserValue indicatorUserValue = indicatorUserValueService.getOne(Wrappers.<IndicatorUserValue>lambdaQuery() | |
607 | - .in(IndicatorUserValue::getIndicatorCode, precondition.getCode()) | |
608 | - .eq(IndicatorUserValue::getDataDate, dataDate) | |
609 | - .eq(IndicatorUserValue::getUserId, userId) | |
610 | - .eq(IndicatorUserValue::getYn, Boolean.TRUE) | |
611 | - , Boolean.FALSE | |
612 | - ); | |
607 | + LambdaQueryWrapper<IndicatorUserValue> queryWrapper = Wrappers.<IndicatorUserValue>lambdaQuery() | |
608 | + .in(IndicatorUserValue::getIndicatorCode, precondition.getCode()) | |
609 | + .eq(IndicatorUserValue::getDataDate, dataDate) | |
610 | + .eq(IndicatorUserValue::getYn, Boolean.TRUE); | |
611 | + if (EvalScopeEnum.STAFF.equals(scopeType)) { | |
612 | + queryWrapper.eq(IndicatorUserValue::getUserId, referId); | |
613 | + } else { | |
614 | + queryWrapper.eq(IndicatorUserValue::getShopId, referId); | |
615 | + } | |
616 | + IndicatorUserValue indicatorUserValue = indicatorUserValueService.getOne(queryWrapper, Boolean.FALSE); | |
613 | 617 | BigDecimal indicatorOriginValue = commonService.queryIndicatorValue(precondition.getCode(), indicatorUserValue); |
614 | 618 | precondition.setIndicatorValue(indicatorOriginValue); |
619 | + precondition.setHit(indicatorOriginValue.compareTo(precondition.getCondValue()) >= 0); | |
615 | 620 | } else { |
616 | 621 | EvalGroupRewardTargetHitLog targetHitLog = evalGroupRewardTargetHitLogService.getOne(Wrappers.<EvalGroupRewardTargetHitLog>lambdaQuery() |
617 | 622 | .in(EvalGroupRewardTargetHitLog::getReferId, precondition.getId()) |
618 | 623 | .eq(EvalGroupRewardTargetHitLog::getDataDate, dataDate) |
619 | 624 | .eq(EvalGroupRewardTargetHitLog::getPoolId, poolId) |
620 | - .eq(EvalGroupRewardTargetHitLog::getScopeType, EvalScopeEnum.STAFF) | |
625 | + .eq(EvalGroupRewardTargetHitLog::getScopeType, scopeType) | |
621 | 626 | .eq(EvalGroupRewardTargetHitLog::getYn, Boolean.TRUE), |
622 | 627 | Boolean.FALSE |
623 | 628 | ); |
624 | 629 | Optional<EvalGroupRewardTargetHitLog> hitLog = Optional.ofNullable(targetHitLog); |
625 | 630 | precondition.setIndicatorValue(hitLog.map(EvalGroupRewardTargetHitLog::getValue).orElse(BigDecimal.ZERO)); |
626 | 631 | precondition.setReachValue(hitLog.map(EvalGroupRewardTargetHitLog::getReachValue).orElse(BigDecimal.ZERO)); |
632 | + precondition.setHit(precondition.getReachValue().compareTo(precondition.getCondValue()) >= 0); | |
633 | + } | |
634 | + if (ConditionTypeEnum.RANK.equals(precondition.getCondType())) { | |
635 | + EvalGroupRewardPreconditionHitLog preconditionHitLog = evalGroupRewardPreconditionHitLogService.getOne(Wrappers.<EvalGroupRewardPreconditionHitLog>lambdaQuery() | |
636 | + .eq(EvalGroupRewardPreconditionHitLog::getPreconditionId, precondition.getId()) | |
637 | + .eq(EvalGroupRewardPreconditionHitLog::getDataDate, dataDate) | |
638 | + .eq(EvalGroupRewardPreconditionHitLog::getPoolId, poolId) | |
639 | + .eq(EvalGroupRewardPreconditionHitLog::getScopeType, scopeType) | |
640 | + .eq(EvalGroupRewardPreconditionHitLog::getYn, Boolean.TRUE) | |
641 | + , Boolean.FALSE | |
642 | + ); | |
643 | + if (PublicUtil.isNotEmpty(preconditionHitLog)) { | |
644 | + Optional<EvalGroupRewardPreconditionHitLog> condOption = Optional.ofNullable(preconditionHitLog); | |
645 | + precondition.setRankCondValue(condOption.map(EvalGroupRewardPreconditionHitLog::getCondValue).orElse(BigDecimal.ZERO)); | |
646 | + precondition.setRank(condOption.map(EvalGroupRewardPreconditionHitLog::getRank).orElse(0)); | |
647 | + precondition.setHit(precondition.getRankCondValue().intValue() >= precondition.getRank()); | |
648 | + } | |
627 | 649 | } |
628 | -// precondition.convertValueToPercent(); | |
629 | 650 | } |
630 | 651 | return preconditionVos; |
631 | 652 | } | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/EvalGroupRewardPreconditionHitLogService.java
... | ... | @@ -21,8 +21,8 @@ import java.util.List; |
21 | 21 | public interface EvalGroupRewardPreconditionHitLogService extends IService<EvalGroupRewardPreconditionHitLog> { |
22 | 22 | |
23 | 23 | List<EvalGroupRewardPreconditionVO> getHitVos(Long poolId, |
24 | + EvalScopeEnum scopeType, | |
24 | 25 | Long evalGroupRewardId, |
25 | - LocalDate dataDate, | |
26 | - EvalScopeEnum scopeType); | |
26 | + LocalDate dataDate); | |
27 | 27 | |
28 | 28 | } | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/impl/EvalGroupRewardPreconditionHitLogServiceImpl.java
... | ... | @@ -26,7 +26,7 @@ public class EvalGroupRewardPreconditionHitLogServiceImpl |
26 | 26 | implements EvalGroupRewardPreconditionHitLogService { |
27 | 27 | |
28 | 28 | @Override |
29 | - public List<EvalGroupRewardPreconditionVO> getHitVos(Long poolId, Long evalGroupRewardId, LocalDate dataDate, EvalScopeEnum scopeType) { | |
29 | + public List<EvalGroupRewardPreconditionVO> getHitVos(Long poolId, EvalScopeEnum scopeType, Long evalGroupRewardId, LocalDate dataDate) { | |
30 | 30 | List<EvalGroupRewardPreconditionVO> preconditionVOS = this.baseMapper.getHitVos(poolId, evalGroupRewardId, dataDate, scopeType.getValue()); |
31 | 31 | preconditionVOS.stream().forEach(EvalGroupRewardPreconditionVO::convertToPercent); |
32 | 32 | return preconditionVOS; | ... | ... |