Commit 9bac7a5e6e24c2051d14ca58eeaa743ccddf7a63

Authored by 姜超
1 parent f8a8c4c5

feature(*): 判断是否命中奖惩条件

判断是否命中奖惩条件
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;
... ...