Commit c4a10f17f053202c3069caf44248db5ccb83e34f

Authored by 姜超
1 parent 220b9724

feature(*): 保存排名名次修改

保存排名名次修改
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroupRewardRankLog.java
... ... @@ -60,6 +60,10 @@ public class EvalGroupRewardRankLog extends BaseAuditableTimeEntity<EvalGroupRew
60 60 * 排名
61 61 */
62 62 private Integer rank;
  63 + /**
  64 + * 命中
  65 + */
  66 + private Boolean hit;
63 67  
64 68 /**
65 69 * 数据日期
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalGroupRewardHitLogVO.java 0 → 100644
  1 +package cn.fw.morax.domain.vo.eval;
  2 +
  3 +import cn.fw.common.data.entity.BaseAuditableTimeEntity;
  4 +import cn.fw.morax.domain.enums.EvalScopeEnum;
  5 +import com.baomidou.mybatisplus.annotation.TableName;
  6 +import lombok.*;
  7 +
  8 +import java.math.BigDecimal;
  9 +import java.time.LocalDate;
  10 +
  11 +/**
  12 + * 指标命中记录
  13 + *
  14 + * @author : kurisu
  15 + * @version : 2.0
  16 + * @className : KpiGroupIndicatorHitLog
  17 + * @description : 指标命中记录
  18 + * @date : 2022-12-13 10:27
  19 + */
  20 +@Data
  21 +public class EvalGroupRewardHitLogVO {
  22 + /**
  23 + * id
  24 + */
  25 + private Long id;
  26 + /**
  27 + * 员工id
  28 + */
  29 + private Long poolId;
  30 +
  31 + /**
  32 + * 考评范围; 1:门店考评 2:人员考评
  33 + */
  34 + private EvalScopeEnum scopeType;
  35 + /**
  36 + * 奖惩项id
  37 + */
  38 + private Long evalGroupRewardId;
  39 + /**
  40 + * 命中的奖惩配置项
  41 + */
  42 + private Long evalGroupRewardLaddersId;
  43 + /**
  44 + * 奖惩值
  45 + */
  46 + private BigDecimal rewardValue;
  47 + /**
  48 + * 命中的台阶指标值
  49 + */
  50 + private BigDecimal hitLadderValue;
  51 + /**
  52 + * 命中的提成指标值
  53 + */
  54 + private BigDecimal hitCommissionValue;
  55 + /**
  56 + * 占比
  57 + */
  58 + private BigDecimal proportionValue;
  59 + /**
  60 + * 数据日期
  61 + */
  62 + private LocalDate dataDate;
  63 + /**
  64 + * 集团id
  65 + */
  66 + private Long groupId;
  67 + /**
  68 + * 逻辑删除
  69 + */
  70 + private Boolean yn;
  71 +}
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalGroupRewardRankLogVO.java
... ... @@ -60,6 +60,10 @@ public class EvalGroupRewardRankLogVO {
60 60 * 排名
61 61 */
62 62 private Integer rank;
  63 + /**
  64 + * 命中
  65 + */
  66 + private Boolean hit;
63 67  
64 68 /**
65 69 * 数据日期
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/controller/app/EvalPoolController.java
... ... @@ -198,7 +198,7 @@ public class EvalPoolController {
198 198 }
199 199  
200 200 /**
201   - * 门店、人员考评条件指标排名
  201 + * 门店、人员考评条件指标排名(排名条件使用)
202 202 *
203 203 * @param preconditionId
204 204 * @param dataDate
... ... @@ -212,7 +212,7 @@ public class EvalPoolController {
212 212 }
213 213  
214 214 /**
215   - * 门店、人员考评提成指标排名
  215 + * 门店、人员考评提成指标排名(排名计算使用)
216 216 *
217 217 * @param evalGroupRewardId
218 218 * @param dataDate
... ... @@ -225,7 +225,19 @@ public class EvalPoolController {
225 225 return success(evalGroupPoolService.queryRewardCommissionRank(evalGroupRewardId, dataDate));
226 226 }
227 227  
228   -
  228 + /**
  229 + * 门店、人员考评奖惩占比(占比计算使用)
  230 + *
  231 + * @param evalGroupRewardId
  232 + * @param dataDate
  233 + * @return
  234 + */
  235 + @GetMapping("/reward-proportion")
  236 + @ControllerMethod("门店、人员考评奖惩占比")
  237 + public Message<List<EvalGroupRewardHitLogVO>> queryRewardProportion(Long evalGroupRewardId,
  238 + @NotNull(message = "日期不能为空") @RequestParam("dataDate") LocalDate dataDate) {
  239 + return success(evalGroupPoolService.queryRewardProportion(evalGroupRewardId, dataDate));
  240 + }
229 241  
230 242  
231 243 /**
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardBaseCalculator.java
... ... @@ -174,6 +174,7 @@ public abstract class EvalRewardBaseCalculator implements Calculator&lt;EvalGroupUs
174 174 *
175 175 * @return
176 176 */
  177 + @Transactional(rollbackFor = Exception.class)
177 178 protected void examineRankPreconditions(List<EvalGroupUserShop> userShops, List<EvalGroupRewardPrecondition> preconditions) {
178 179 if (CollectionUtils.isEmpty(preconditions)) {
179 180 return;
... ... @@ -201,6 +202,7 @@ public abstract class EvalRewardBaseCalculator implements Calculator&lt;EvalGroupUs
201 202 List<EvalGroupRewardRankLog> matchRankLogs = rankLogs.stream().filter(rankLog -> {
202 203 return rankLog.getRank() > _startIndex && rankLog.getRank() <= _endIndex;
203 204 }).collect(Collectors.toList());
  205 + updateHitRankLog(matchRankLogs);
204 206  
205 207 AtomicInteger rank = new AtomicInteger(0);
206 208 for (EvalGroupRewardRankLog rankLog : matchRankLogs) {
... ... @@ -238,6 +240,7 @@ public abstract class EvalRewardBaseCalculator implements Calculator&lt;EvalGroupUs
238 240 return params;
239 241 }
240 242  
  243 + @Transactional(rollbackFor = Exception.class)
241 244 protected void saveTargetHitLog(EvalGroupUserShop userShop, Long rewardReferId, IndicatorTypeEnum targetType, BigDecimal value, BigDecimal reachValue) {
242 245 evalGroupRewardTargetHitLogService.remove(Wrappers.<EvalGroupRewardTargetHitLog>lambdaQuery()
243 246 .eq(EvalGroupRewardTargetHitLog::getPoolId, userShop.getPoolId())
... ... @@ -259,6 +262,7 @@ public abstract class EvalRewardBaseCalculator implements Calculator&lt;EvalGroupUs
259 262 evalGroupRewardTargetHitLogService.save(log);
260 263 }
261 264  
  265 + @Transactional(rollbackFor = Exception.class)
262 266 protected void savePreHitLog(EvalGroupUserShop userShop, EvalGroupRewardPrecondition precondition, Consumer<EvalGroupRewardPreconditionHitLog> consumer) {
263 267 evalGroupRewardPreconditionHitLogService.remove(Wrappers.<EvalGroupRewardPreconditionHitLog>lambdaQuery()
264 268 .eq(EvalGroupRewardPreconditionHitLog::getPoolId, userShop.getPoolId())
... ... @@ -469,6 +473,7 @@ public abstract class EvalRewardBaseCalculator implements Calculator&lt;EvalGroupUs
469 473 .targetType(RankIndicatorTypeEnum.REWARD_COMMISSION)
470 474 .value(commissionValue)
471 475 .reachValue(commissionValue)
  476 + .hit(Boolean.FALSE)
472 477 .dataDate(userShop.getDataDate())
473 478 .groupId(userShop.getGroupId())
474 479 .build();
... ... @@ -514,6 +519,7 @@ public abstract class EvalRewardBaseCalculator implements Calculator&lt;EvalGroupUs
514 519 return rankLogs;
515 520 }
516 521  
  522 + @Transactional(rollbackFor = Exception.class)
517 523 public void saveRankLogs(Long evalGroupRewardId, List<EvalGroupRewardRankLog> rankLogs, RankIndicatorTypeEnum targetType) {
518 524 Set<Long> poolIds = rankLogs.stream().map(EvalGroupRewardRankLog::getPoolId).collect(Collectors.toSet());
519 525 EvalGroupRewardRankLog rankLog = rankLogs.stream().findFirst().get();
... ... @@ -528,6 +534,17 @@ public abstract class EvalRewardBaseCalculator implements Calculator&lt;EvalGroupUs
528 534 evalGroupRewardRankLogService.saveBatch(rankLogs);
529 535 }
530 536  
  537 + @Transactional(rollbackFor = Exception.class)
  538 + public void updateHitRankLog(List<EvalGroupRewardRankLog> matchRankLogs) {
  539 + if (PublicUtil.isEmpty(matchRankLogs)) {
  540 + return;
  541 + }
  542 + evalGroupRewardRankLogService.update(Wrappers.<EvalGroupRewardRankLog>lambdaUpdate()
  543 + .eq(EvalGroupRewardRankLog::getId, matchRankLogs.stream().map(EvalGroupRewardRankLog::getId).collect(Collectors.toList()))
  544 + .set(EvalGroupRewardRankLog::getHit, Boolean.TRUE)
  545 + );
  546 + }
  547 +
531 548 /**
532 549 * 初始化奖惩值
533 550 *
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardProportionCalculator.java
... ... @@ -69,25 +69,8 @@ public class EvalRewardProportionCalculator extends EvalRewardBaseCalculator {
69 69 referValueMap.put(poolId, commissionValue);
70 70 }
71 71  
72   - if (BigDecimal.ZERO.compareTo(totalCommissionValue) == 0) {
73   - for (EvalGroupUserShop userShop : userShops) {
74   - BigDecimal proportion = BigDecimal.ZERO;
75   - BigDecimal rewardValue = BigDecimal.ZERO;
76   - userShop.setEvalGroupRewardAmount(rewardValue);
77   - clearProjectHitLog(evalGroupRewardId, userShop);
78   - saveProjectHitLog(evalGroupRewardId, userShop, log -> {
79   - log.setRewardValue(rewardValue);
80   - log.setHitCommissionValue(proportion);
81   - });
82   - }
83   - }
84   -
85 72 for (EvalGroupUserShop userShop : userShops) {
86 73 boolean examined = examinePrecondition(userShop, preconditions);
87   - if (!examined) {
88   - userShop.setEvalGroupRewardAmount(BigDecimal.ZERO);
89   - continue;
90   - }
91 74  
92 75 BigDecimal commissionValue = referValueMap.getOrDefault(userShop.getPoolId(), BigDecimal.ZERO);
93 76  
... ... @@ -98,6 +81,11 @@ public class EvalRewardProportionCalculator extends EvalRewardBaseCalculator {
98 81 rewardValue = proportion.multiply(money).divide(BigDecimal.ONE, 2, RoundingMode.DOWN);
99 82 }
100 83  
  84 + //未通过条件,奖惩为0,保存日志
  85 + if (!examined) {
  86 + rewardValue = BigDecimal.ZERO;
  87 + }
  88 +
101 89 userShop.setEvalGroupRewardAmount(rewardValue);
102 90 clearProjectHitLog(evalGroupRewardId, userShop);
103 91 BigDecimal finalRewardValue = rewardValue;
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardRankCalculator.java
... ... @@ -5,6 +5,7 @@ import cn.fw.morax.domain.bo.eval.EvalGroupUserShop;
5 5 import cn.fw.morax.domain.db.eval.*;
6 6 import cn.fw.morax.domain.enums.*;
7 7 import cn.fw.morax.service.biz.CommonService;
  8 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
8 9 import com.sun.org.apache.regexp.internal.RE;
9 10 import lombok.Getter;
10 11 import lombok.RequiredArgsConstructor;
... ... @@ -71,6 +72,7 @@ public class EvalRewardRankCalculator extends EvalRewardBaseCalculator {
71 72 final BigDecimal money = ladder.getMoney();
72 73  
73 74 List<EvalGroupRewardRankLog> matchRankLogs = matchRank(rankType, personCount, ladder, rankLogs);
  75 + updateHitRankLog(matchRankLogs);
74 76  
75 77 for (EvalGroupRewardRankLog rankLog : matchRankLogs) {
76 78 EvalGroupUserShop userShop = poolUserShopMap.get(rankLog.getPoolId());
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java
... ... @@ -1246,10 +1246,6 @@ public class EvalGroupPoolService {
1246 1246 }
1247 1247  
1248 1248 public List<EvalGroupRewardRankLogVO> queryRewardCommissionRank(Long evalGroupRewardId, LocalDate dataDate) {
1249   -// EvalGroupRewardPrecondition precondition = evalGroupRewardPreconditionService.getById(preconditionId);
1250   -// BV.notNull(precondition, "奖惩条件不存在");
1251   -// final DataTypeEnum dataType = precondition.getDataType();
1252   -// final TargetTypeEnum targetType = precondition.getTargetType();
1253 1249 List<EvalGroupRewardRankLog> rankLogs = evalGroupRewardRankLogService.list(Wrappers.<EvalGroupRewardRankLog>lambdaQuery()
1254 1250 .eq(EvalGroupRewardRankLog::getDataDate, dataDate)
1255 1251 .eq(EvalGroupRewardRankLog::getReferId, evalGroupRewardId)
... ... @@ -1259,7 +1255,15 @@ public class EvalGroupPoolService {
1259 1255 Collections.sort(rankLogs);
1260 1256  
1261 1257 List<EvalGroupRewardRankLogVO> rankLogVOs = PublicUtil.copyList(rankLogs, EvalGroupRewardRankLogVO.class);
1262   -// rankLogVOs.stream().forEach(rankLog -> rankLog.convertValueToPercent(dataType, targetType));
1263 1258 return rankLogVOs;
1264 1259 }
  1260 +
  1261 + public List<EvalGroupRewardHitLogVO> queryRewardProportion(Long evalGroupRewardId, LocalDate dataDate) {
  1262 + List<EvalGroupRewardHitLog> rewardHitLogs = evalGroupRewardHitLogService.list(Wrappers.<EvalGroupRewardHitLog>lambdaQuery()
  1263 + .eq(EvalGroupRewardHitLog::getEvalGroupRewardId, evalGroupRewardId)
  1264 + .eq(EvalGroupRewardHitLog::getDataDate, dataDate)
  1265 + );
  1266 + List<EvalGroupRewardHitLogVO> hitLogVOS = PublicUtil.copyList(rewardHitLogs, EvalGroupRewardHitLogVO.class);
  1267 + return hitLogVOS;
  1268 + }
1265 1269 }
... ...