Blame view

fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardProportionCalculator.java 3.91 KB
2cf8122d   姜超   feature(*): 考评指标计算
1
2
  package cn.fw.morax.service.biz.calculator.eval.reward;
  
7e8fb0fe   姜超   feature(*): 考评计算修改
3
4
  import cn.fw.common.cache.locker.DistributedLocker;
  import cn.fw.morax.common.utils.PublicUtil;
7e8fb0fe   姜超   feature(*): 考评计算修改
5
  import cn.fw.morax.domain.bo.eval.EvalGroupUserShop;
7e8fb0fe   姜超   feature(*): 考评计算修改
6
7
  import cn.fw.morax.domain.db.eval.EvalGroupReward;
  import cn.fw.morax.domain.db.eval.EvalGroupRewardParam;
9bac7a5e   姜超   feature(*): 判断是否命...
8
  import cn.fw.morax.domain.db.eval.EvalGroupRewardPrecondition;
2cf8122d   姜超   feature(*): 考评指标计算
9
  import cn.fw.morax.domain.enums.EvalRewardCalMethodEnum;
7e8fb0fe   姜超   feature(*): 考评计算修改
10
11
12
13
14
  import cn.fw.morax.domain.enums.ParamTypeEnum;
  import cn.fw.morax.service.data.eval.EvalGroupService;
  import cn.fw.morax.service.data.eval.EvalGroupUserService;
  import lombok.Getter;
  import lombok.RequiredArgsConstructor;
2cf8122d   姜超   feature(*): 考评指标计算
15
  import lombok.extern.slf4j.Slf4j;
7e8fb0fe   姜超   feature(*): 考评计算修改
16
  import org.springframework.beans.factory.annotation.Value;
7e8fb0fe   姜超   feature(*): 考评计算修改
17
  import org.springframework.data.redis.core.StringRedisTemplate;
2cf8122d   姜超   feature(*): 考评指标计算
18
  import org.springframework.stereotype.Component;
7e8fb0fe   姜超   feature(*): 考评计算修改
19
  import org.springframework.util.CollectionUtils;
2cf8122d   姜超   feature(*): 考评指标计算
20
21
  
  import java.math.BigDecimal;
7e8fb0fe   姜超   feature(*): 考评计算修改
22
  import java.math.RoundingMode;
da42a3d8   姜超   feature(*): 计算考评代码优化
23
24
25
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
9f43aee0   姜超   feature(*): 计算考评修改
26
  import java.util.stream.Collectors;
2cf8122d   姜超   feature(*): 考评指标计算
27
28
29
30
31
32
33
34
  
  /**
   * @author jiangchao
   * @des: 总金额占比
   * @date 2023/2/1 11:03
   */
  @Component
  @Slf4j
7e8fb0fe   姜超   feature(*): 考评计算修改
35
  @RequiredArgsConstructor
6bd58854   姜超   feature(*): 考评导入修改
36
  public class EvalRewardProportionCalculator extends EvalRewardBaseCalculator {
2cf8122d   姜超   feature(*): 考评指标计算
37
  
2cf8122d   姜超   feature(*): 考评指标计算
38
39
40
41
42
43
      @Override
      public EvalRewardCalMethodEnum getCalMethod() {
          return EvalRewardCalMethodEnum.TOTAL_PROPORTION;
      }
  
      @Override
e2386ce2   姜超   feature(*): 考评计算得分修改
44
      public BigDecimal calculate(EvalGroupUserShop param, EvalGroupReward rewardBO) {
2cf8122d   姜超   feature(*): 考评指标计算
45
46
          return null;
      }
7e8fb0fe   姜超   feature(*): 考评计算修改
47
48
  
      @Override
e2386ce2   姜超   feature(*): 考评计算得分修改
49
      public void calculateGroup(List<EvalGroupUserShop> userShops, EvalGroupReward reward) {
9f43aee0   姜超   feature(*): 计算考评修改
50
          userShops = userShops.stream().filter(userShop -> Boolean.FALSE.equals(userShop.getIgnored())).collect(Collectors.toList());
7e8fb0fe   姜超   feature(*): 考评计算修改
51
52
53
          if (PublicUtil.isEmpty(userShops)) {
              return;
          }
9bac7a5e   姜超   feature(*): 判断是否命...
54
  
da42a3d8   姜超   feature(*): 计算考评代码优化
55
          initReward(userShops);
e2386ce2   姜超   feature(*): 考评计算得分修改
56
          final Long evalGroupRewardId = reward.getId();
9bac7a5e   姜超   feature(*): 判断是否命...
57
          List<EvalGroupRewardPrecondition> preconditions = queryPrecondition(evalGroupRewardId);
e2386ce2   姜超   feature(*): 考评计算得分修改
58
          BigDecimal money = reward.getMoney();
7e8fb0fe   姜超   feature(*): 考评计算修改
59
60
61
62
63
64
65
66
          List<EvalGroupRewardParam> params = queryProjectParam(evalGroupRewardId, ParamTypeEnum.COMMISSION);
          if (CollectionUtils.isEmpty(params)) {
              return;
          }
  
          BigDecimal totalCommissionValue = BigDecimal.ZERO;
          Map<Long, BigDecimal> referValueMap = new HashMap<>();
          for (EvalGroupUserShop userShop : userShops) {
6d467cb8   姜超   feature(*): 计算修改
67
              Long poolId = userShop.getPoolId();
7e8fb0fe   姜超   feature(*): 考评计算修改
68
69
              BigDecimal commissionValue = calculateParamValue(userShop, params);
  
6d467cb8   姜超   feature(*): 计算修改
70
71
              totalCommissionValue = totalCommissionValue.add(commissionValue);
              referValueMap.put(poolId, commissionValue);
7e8fb0fe   姜超   feature(*): 考评计算修改
72
73
          }
  
da42a3d8   姜超   feature(*): 计算考评代码优化
74
          for (EvalGroupUserShop userShop : userShops) {
9bac7a5e   姜超   feature(*): 判断是否命...
75
              boolean examined = examinePrecondition(userShop, preconditions);
9bac7a5e   姜超   feature(*): 判断是否命...
76
  
7f3e5385   姜超   feature(*): 展示占比字段
77
              BigDecimal commissionValue = referValueMap.getOrDefault(userShop.getPoolId(), BigDecimal.ZERO);
08c31209   姜超   feature(*): 考评详情
78
79
80
81
  
              BigDecimal proportion = BigDecimal.ZERO;
              BigDecimal rewardValue = BigDecimal.ZERO;
              if (totalCommissionValue.compareTo(BigDecimal.ZERO) > 0) {
2188d9d0   姜超   feature(*): 修改代码格式
82
83
                  proportion = commissionValue.divide(totalCommissionValue, 4, RoundingMode.DOWN);
                  rewardValue = proportion.multiply(money).divide(BigDecimal.ONE, 2, RoundingMode.DOWN);
08c31209   姜超   feature(*): 考评详情
84
              }
7e8fb0fe   姜超   feature(*): 考评计算修改
85
  
c4a10f17   姜超   feature(*): 保存排名名次修改
86
87
88
89
90
              //未通过条件,奖惩为0,保存日志
              if (!examined) {
                  rewardValue = BigDecimal.ZERO;
              }
  
da42a3d8   姜超   feature(*): 计算考评代码优化
91
92
              userShop.setEvalGroupRewardAmount(rewardValue);
              clearProjectHitLog(evalGroupRewardId, userShop);
08c31209   姜超   feature(*): 考评详情
93
94
              BigDecimal finalRewardValue = rewardValue;
              BigDecimal finalProportion = proportion;
da42a3d8   姜超   feature(*): 计算考评代码优化
95
              saveProjectHitLog(evalGroupRewardId, userShop, log -> {
08c31209   姜超   feature(*): 考评详情
96
                  log.setRewardValue(finalRewardValue);
7f3e5385   姜超   feature(*): 展示占比字段
97
98
                  log.setProportionValue(finalProportion);
                  log.setHitCommissionValue(commissionValue);
7e8fb0fe   姜超   feature(*): 考评计算修改
99
100
101
              });
          }
      }
08c31209   姜超   feature(*): 考评详情
102
  
2cf8122d   姜超   feature(*): 考评指标计算
103
  }