Commit 9f43aee0fbd6448a92cf5eb6d3746eede558ae4e
1 parent
62ff59ec
feature(*): 计算考评修改
计算考评修改
Showing
4 changed files
with
28 additions
and
49 deletions
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardProportionCalculator.java
... | ... | @@ -23,6 +23,7 @@ import java.math.RoundingMode; |
23 | 23 | import java.util.HashMap; |
24 | 24 | import java.util.List; |
25 | 25 | import java.util.Map; |
26 | +import java.util.stream.Collectors; | |
26 | 27 | |
27 | 28 | /** |
28 | 29 | * @author jiangchao |
... | ... | @@ -46,6 +47,7 @@ public class EvalRewardProportionCalculator extends EvalRewardBaseCalculator { |
46 | 47 | |
47 | 48 | @Override |
48 | 49 | public void calculateGroup(List<EvalGroupUserShop> userShops, EvalGroupReward reward) { |
50 | + userShops = userShops.stream().filter(userShop -> Boolean.FALSE.equals(userShop.getIgnored())).collect(Collectors.toList()); | |
49 | 51 | if (PublicUtil.isEmpty(userShops)) { |
50 | 52 | return; |
51 | 53 | } | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardRankCalculator.java
... | ... | @@ -45,6 +45,7 @@ public class EvalRewardRankCalculator extends EvalRewardBaseCalculator { |
45 | 45 | |
46 | 46 | @Override |
47 | 47 | public void calculateGroup(List<EvalGroupUserShop> userShops, EvalGroupReward reward) { |
48 | + userShops = userShops.stream().filter(userShop -> Boolean.FALSE.equals(userShop.getIgnored())).collect(Collectors.toList()); | |
48 | 49 | if (PublicUtil.isEmpty(userShops)) { |
49 | 50 | return; |
50 | 51 | } | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java
... | ... | @@ -116,7 +116,6 @@ public class EvalCalculateService { |
116 | 116 | log.info("定时任务【缓存需要计算的考评组】开始执行"); |
117 | 117 | List<EvalGroup> evalGroups = evalGroupService.getAllEffectGroups(localDate); |
118 | 118 | Set<Long> evalGroupIds = evalGroups.stream().map(EvalGroup::getId).collect(Collectors.toSet()); |
119 | -// Set<Long> evalGroupIds = evalGroupService.queryCalculableEvalGroupIds(localDate); | |
120 | 119 | if (CollectionUtils.isEmpty(evalGroupIds)) { |
121 | 120 | return; |
122 | 121 | } |
... | ... | @@ -282,23 +281,17 @@ public class EvalCalculateService { |
282 | 281 | |
283 | 282 | Map<Long, EvalUserPool> userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroup, evalGroupRankStage, users, localDate); |
284 | 283 | for (EvalGroupUser user : users) { |
285 | -// if (Boolean.TRUE.equals(user.getIgnored())) { | |
286 | -// continue; | |
287 | -// } | |
288 | 284 | EvalUserPool userPool = userPoolMap.get(user.getUserId()); |
289 | 285 | userShops.add(convertBO(user, userPool)); |
290 | 286 | } |
291 | 287 | return userShops; |
292 | 288 | } |
293 | - | |
294 | 289 | List<Long> distShopIds = this.getEvalDistShopIds(evalGroup); |
295 | - if (PublicUtil.isEmpty(distShopIds)) { | |
296 | - return new ArrayList<>(); | |
297 | - } | |
298 | 290 | Map<Long, EvalShopPool> shopPoolBOMap = evalPoolCommonService.inspectionShopPools(evalGroup, localDate, distShopIds); |
299 | - for (Long shopId : distShopIds) { | |
291 | + for (Long shopId : evalGroup.getShopIds()) { | |
300 | 292 | EvalShopPool shopPool = shopPoolBOMap.get(shopId); |
301 | - userShops.add(convertBO(shopPool, evalGroup, beginDate, localDate)); | |
293 | + Boolean ignored = ! distShopIds.contains(shopId); | |
294 | + userShops.add(convertBO(shopPool, evalGroup, beginDate, localDate, ignored)); | |
302 | 295 | } |
303 | 296 | return userShops; |
304 | 297 | } |
... | ... | @@ -643,7 +636,7 @@ public class EvalCalculateService { |
643 | 636 | return userShop; |
644 | 637 | } |
645 | 638 | |
646 | - public EvalGroupUserShop convertBO(EvalShopPool shopPool, EvalGroup evalGroup, LocalDate beginDate, LocalDate dataDate) { | |
639 | + public EvalGroupUserShop convertBO(EvalShopPool shopPool, EvalGroup evalGroup, LocalDate beginDate, LocalDate dataDate, Boolean ignored) { | |
647 | 640 | EvalGroupUserShop userShop = new EvalGroupUserShop(); |
648 | 641 | userShop.setName(shopPool.getShopName()); |
649 | 642 | userShop.setReferId(shopPool.getShopId()); |
... | ... | @@ -655,6 +648,7 @@ public class EvalCalculateService { |
655 | 648 | userShop.setBeginDate(beginDate); |
656 | 649 | userShop.setDataDate(dataDate); |
657 | 650 | userShop.setGroupId(evalGroup.getGroupId()); |
651 | + userShop.setIgnored(ignored); | |
658 | 652 | userShop.setScore(BigDecimal.ZERO); |
659 | 653 | userShop.setReward(BigDecimal.ZERO); |
660 | 654 | return userShop; | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalPoolCommonService.java
... | ... | @@ -17,6 +17,7 @@ import cn.fw.morax.service.data.salary.SalaryGroupUserService; |
17 | 17 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
18 | 18 | import lombok.AllArgsConstructor; |
19 | 19 | import lombok.extern.slf4j.Slf4j; |
20 | +import org.apache.commons.collections4.map.MultiKeyMap; | |
20 | 21 | import org.springframework.stereotype.Service; |
21 | 22 | import org.springframework.transaction.annotation.Transactional; |
22 | 23 | |
... | ... | @@ -58,17 +59,24 @@ public class EvalPoolCommonService { |
58 | 59 | .eq(EvalUserPool::getYn, Boolean.TRUE) |
59 | 60 | ); |
60 | 61 | |
61 | - Map<Long, EvalUserPool> userPoolMap = pools.stream().collect(Collectors.toMap(EvalUserPool::getUserId, Function.identity(), (v1, v2) -> { | |
62 | - log.error("同一个考评组、考评人员出现两条考评池数据。用户id:{},考评组:{}", v1.getUserId(), evalGroup); | |
63 | - return v1; | |
64 | - })); | |
62 | + //人员可能在考评组中出现多次(调岗) | |
63 | + MultiKeyMap<Long, EvalUserPool> userShopPostShopIdMap = new MultiKeyMap<>(); | |
64 | + for (EvalUserPool pool : pools) { | |
65 | + userShopPostShopIdMap.put(pool.getUserId(), pool.getShopId(), pool.getPostId(), pool); | |
66 | + } | |
65 | 67 | |
66 | 68 | for (EvalGroupUser user : users) { |
67 | - if (! userPoolMap.containsKey(user.getUserId())) { | |
69 | + if (! userShopPostShopIdMap.containsKey(user.getUserId(), user.getShopId(), user.getPostId())) { | |
68 | 70 | EvalUserPool userPool = inspectionUserPool(user); |
69 | - userPoolMap.put(userPool.getUserId(), userPool); | |
71 | + userShopPostShopIdMap.put(user.getUserId(), user.getShopId(), user.getPostId(), userPool); | |
70 | 72 | } |
71 | 73 | } |
74 | + | |
75 | + Map<Long, EvalUserPool> userPoolMap = userShopPostShopIdMap.values().stream().collect(Collectors.toMap(EvalUserPool::getUserId, Function.identity(), (v1, v2) -> { | |
76 | + log.error("同一个考评组、考评人员出现两条考评池数据。用户id:{},考评组:{}", v1.getUserId(), evalGroup); | |
77 | + return v1; | |
78 | + })); | |
79 | + | |
72 | 80 | return userPoolMap; |
73 | 81 | } |
74 | 82 | |
... | ... | @@ -87,45 +95,17 @@ public class EvalPoolCommonService { |
87 | 95 | return v1; |
88 | 96 | })); |
89 | 97 | |
90 | - if (PublicUtil.isEmpty(distShopIds)) { | |
91 | - return new HashMap<>(); | |
92 | - } | |
93 | - for (Long shopId : distShopIds) { | |
98 | + for (Long shopId : evalGroupShopIds) { | |
94 | 99 | if (! shopPoolMap.containsKey(shopId)) { |
95 | -// EvalShopPoolStatusEnum status = (distShopIds.contains(shopId)) | |
96 | -// ? EvalShopPoolStatusEnum.CALC_REWARD : EvalShopPoolStatusEnum.NO_REWARD; | |
97 | - EvalShopPool shopPool = this.inspectionShopPool(shopId, evalGroup, localDate, EvalShopPoolStatusEnum.CALC_REWARD); | |
100 | + EvalShopPoolStatusEnum status = (distShopIds.contains(shopId)) | |
101 | + ? EvalShopPoolStatusEnum.CALC_REWARD : EvalShopPoolStatusEnum.NO_REWARD; | |
102 | + EvalShopPool shopPool = this.createShopPoolData(shopId, evalGroup, localDate, status); | |
98 | 103 | shopPoolMap.put(shopId, shopPool); |
99 | 104 | } |
100 | 105 | } |
101 | 106 | return shopPoolMap; |
102 | 107 | } |
103 | 108 | |
104 | - /** | |
105 | - * 查询考评门店池 | |
106 | - * | |
107 | - * @return | |
108 | - */ | |
109 | - @Transactional(rollbackFor = Exception.class) | |
110 | - public EvalShopPool inspectionShopPool(Long shopId, EvalGroup evalGroup, LocalDate localDate, EvalShopPoolStatusEnum status) { | |
111 | - EvalShopPool evalShopPool = evalShopPoolService.getOne(Wrappers.<EvalShopPool>lambdaQuery() | |
112 | - .eq(EvalShopPool::getId, evalGroup.getId()) | |
113 | - .eq(EvalShopPool::getShopId, shopId) | |
114 | - .eq(EvalShopPool::getYn, Boolean.TRUE) | |
115 | - .eq(EvalShopPool::getMonthly, YearMonth.from(localDate).minusMonths(1)) | |
116 | - , Boolean.FALSE); | |
117 | - if (PublicUtil.isNotEmpty(evalShopPool)) { | |
118 | - evalShopPoolService.update(Wrappers.<EvalShopPool>lambdaUpdate() | |
119 | - .eq(EvalShopPool::getId, evalShopPool.getId()) | |
120 | - .set(EvalShopPool::getMonthly, YearMonth.from(localDate)) | |
121 | - .set(EvalShopPool::getUpdateTime, new Date()) | |
122 | - ); | |
123 | - evalShopPool.setMonthly(YearMonth.from(localDate)); | |
124 | - return evalShopPool; | |
125 | - } | |
126 | - return this.createShopPoolData(shopId, evalGroup, localDate, status); | |
127 | - } | |
128 | - | |
129 | 109 | @Transactional(rollbackFor = Exception.class) |
130 | 110 | public EvalShopPool createShopPoolData(Long shopId, EvalGroup evalGroup, LocalDate localDate, EvalShopPoolStatusEnum status) { |
131 | 111 | ShopDTO shopDTO = oopRpcService.queryShop(shopId); |
... | ... | @@ -159,6 +139,8 @@ public class EvalPoolCommonService { |
159 | 139 | EvalUserPool evalUserPool = evalUserPoolService.getOne(Wrappers.<EvalUserPool>lambdaQuery() |
160 | 140 | .eq(EvalUserPool::getEvalGroupRankStageId, user.getEvalGroupRankStageId()) |
161 | 141 | .eq(EvalUserPool::getUserId, user.getUserId()) |
142 | + .eq(EvalUserPool::getPostId, user.getPostId()) | |
143 | + .eq(EvalUserPool::getShopId, user.getShopId()) | |
162 | 144 | .eq(EvalUserPool::getMonthly, YearMonth.from(user.getDataDate())) |
163 | 145 | .eq(EvalUserPool::getYn, Boolean.TRUE) |
164 | 146 | , Boolean.FALSE); | ... | ... |