Commit c4a10f17f053202c3069caf44248db5ccb83e34f
1 parent
220b9724
feature(*): 保存排名名次修改
保存排名名次修改
Showing
8 changed files
with
127 additions
and
25 deletions
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroupRewardRankLog.java
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
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<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<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<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<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<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<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<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 | } | ... | ... |