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,6 +23,7 @@ import java.math.RoundingMode; | ||
23 | import java.util.HashMap; | 23 | import java.util.HashMap; |
24 | import java.util.List; | 24 | import java.util.List; |
25 | import java.util.Map; | 25 | import java.util.Map; |
26 | +import java.util.stream.Collectors; | ||
26 | 27 | ||
27 | /** | 28 | /** |
28 | * @author jiangchao | 29 | * @author jiangchao |
@@ -46,6 +47,7 @@ public class EvalRewardProportionCalculator extends EvalRewardBaseCalculator { | @@ -46,6 +47,7 @@ public class EvalRewardProportionCalculator extends EvalRewardBaseCalculator { | ||
46 | 47 | ||
47 | @Override | 48 | @Override |
48 | public void calculateGroup(List<EvalGroupUserShop> userShops, EvalGroupReward reward) { | 49 | public void calculateGroup(List<EvalGroupUserShop> userShops, EvalGroupReward reward) { |
50 | + userShops = userShops.stream().filter(userShop -> Boolean.FALSE.equals(userShop.getIgnored())).collect(Collectors.toList()); | ||
49 | if (PublicUtil.isEmpty(userShops)) { | 51 | if (PublicUtil.isEmpty(userShops)) { |
50 | return; | 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,6 +45,7 @@ public class EvalRewardRankCalculator extends EvalRewardBaseCalculator { | ||
45 | 45 | ||
46 | @Override | 46 | @Override |
47 | public void calculateGroup(List<EvalGroupUserShop> userShops, EvalGroupReward reward) { | 47 | public void calculateGroup(List<EvalGroupUserShop> userShops, EvalGroupReward reward) { |
48 | + userShops = userShops.stream().filter(userShop -> Boolean.FALSE.equals(userShop.getIgnored())).collect(Collectors.toList()); | ||
48 | if (PublicUtil.isEmpty(userShops)) { | 49 | if (PublicUtil.isEmpty(userShops)) { |
49 | return; | 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,7 +116,6 @@ public class EvalCalculateService { | ||
116 | log.info("定时任务【缓存需要计算的考评组】开始执行"); | 116 | log.info("定时任务【缓存需要计算的考评组】开始执行"); |
117 | List<EvalGroup> evalGroups = evalGroupService.getAllEffectGroups(localDate); | 117 | List<EvalGroup> evalGroups = evalGroupService.getAllEffectGroups(localDate); |
118 | Set<Long> evalGroupIds = evalGroups.stream().map(EvalGroup::getId).collect(Collectors.toSet()); | 118 | Set<Long> evalGroupIds = evalGroups.stream().map(EvalGroup::getId).collect(Collectors.toSet()); |
119 | -// Set<Long> evalGroupIds = evalGroupService.queryCalculableEvalGroupIds(localDate); | ||
120 | if (CollectionUtils.isEmpty(evalGroupIds)) { | 119 | if (CollectionUtils.isEmpty(evalGroupIds)) { |
121 | return; | 120 | return; |
122 | } | 121 | } |
@@ -282,23 +281,17 @@ public class EvalCalculateService { | @@ -282,23 +281,17 @@ public class EvalCalculateService { | ||
282 | 281 | ||
283 | Map<Long, EvalUserPool> userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroup, evalGroupRankStage, users, localDate); | 282 | Map<Long, EvalUserPool> userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroup, evalGroupRankStage, users, localDate); |
284 | for (EvalGroupUser user : users) { | 283 | for (EvalGroupUser user : users) { |
285 | -// if (Boolean.TRUE.equals(user.getIgnored())) { | ||
286 | -// continue; | ||
287 | -// } | ||
288 | EvalUserPool userPool = userPoolMap.get(user.getUserId()); | 284 | EvalUserPool userPool = userPoolMap.get(user.getUserId()); |
289 | userShops.add(convertBO(user, userPool)); | 285 | userShops.add(convertBO(user, userPool)); |
290 | } | 286 | } |
291 | return userShops; | 287 | return userShops; |
292 | } | 288 | } |
293 | - | ||
294 | List<Long> distShopIds = this.getEvalDistShopIds(evalGroup); | 289 | List<Long> distShopIds = this.getEvalDistShopIds(evalGroup); |
295 | - if (PublicUtil.isEmpty(distShopIds)) { | ||
296 | - return new ArrayList<>(); | ||
297 | - } | ||
298 | Map<Long, EvalShopPool> shopPoolBOMap = evalPoolCommonService.inspectionShopPools(evalGroup, localDate, distShopIds); | 290 | Map<Long, EvalShopPool> shopPoolBOMap = evalPoolCommonService.inspectionShopPools(evalGroup, localDate, distShopIds); |
299 | - for (Long shopId : distShopIds) { | 291 | + for (Long shopId : evalGroup.getShopIds()) { |
300 | EvalShopPool shopPool = shopPoolBOMap.get(shopId); | 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 | return userShops; | 296 | return userShops; |
304 | } | 297 | } |
@@ -643,7 +636,7 @@ public class EvalCalculateService { | @@ -643,7 +636,7 @@ public class EvalCalculateService { | ||
643 | return userShop; | 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 | EvalGroupUserShop userShop = new EvalGroupUserShop(); | 640 | EvalGroupUserShop userShop = new EvalGroupUserShop(); |
648 | userShop.setName(shopPool.getShopName()); | 641 | userShop.setName(shopPool.getShopName()); |
649 | userShop.setReferId(shopPool.getShopId()); | 642 | userShop.setReferId(shopPool.getShopId()); |
@@ -655,6 +648,7 @@ public class EvalCalculateService { | @@ -655,6 +648,7 @@ public class EvalCalculateService { | ||
655 | userShop.setBeginDate(beginDate); | 648 | userShop.setBeginDate(beginDate); |
656 | userShop.setDataDate(dataDate); | 649 | userShop.setDataDate(dataDate); |
657 | userShop.setGroupId(evalGroup.getGroupId()); | 650 | userShop.setGroupId(evalGroup.getGroupId()); |
651 | + userShop.setIgnored(ignored); | ||
658 | userShop.setScore(BigDecimal.ZERO); | 652 | userShop.setScore(BigDecimal.ZERO); |
659 | userShop.setReward(BigDecimal.ZERO); | 653 | userShop.setReward(BigDecimal.ZERO); |
660 | return userShop; | 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,6 +17,7 @@ import cn.fw.morax.service.data.salary.SalaryGroupUserService; | ||
17 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | 17 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
18 | import lombok.AllArgsConstructor; | 18 | import lombok.AllArgsConstructor; |
19 | import lombok.extern.slf4j.Slf4j; | 19 | import lombok.extern.slf4j.Slf4j; |
20 | +import org.apache.commons.collections4.map.MultiKeyMap; | ||
20 | import org.springframework.stereotype.Service; | 21 | import org.springframework.stereotype.Service; |
21 | import org.springframework.transaction.annotation.Transactional; | 22 | import org.springframework.transaction.annotation.Transactional; |
22 | 23 | ||
@@ -58,17 +59,24 @@ public class EvalPoolCommonService { | @@ -58,17 +59,24 @@ public class EvalPoolCommonService { | ||
58 | .eq(EvalUserPool::getYn, Boolean.TRUE) | 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 | for (EvalGroupUser user : users) { | 68 | for (EvalGroupUser user : users) { |
67 | - if (! userPoolMap.containsKey(user.getUserId())) { | 69 | + if (! userShopPostShopIdMap.containsKey(user.getUserId(), user.getShopId(), user.getPostId())) { |
68 | EvalUserPool userPool = inspectionUserPool(user); | 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 | return userPoolMap; | 80 | return userPoolMap; |
73 | } | 81 | } |
74 | 82 | ||
@@ -87,45 +95,17 @@ public class EvalPoolCommonService { | @@ -87,45 +95,17 @@ public class EvalPoolCommonService { | ||
87 | return v1; | 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 | if (! shopPoolMap.containsKey(shopId)) { | 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 | shopPoolMap.put(shopId, shopPool); | 103 | shopPoolMap.put(shopId, shopPool); |
99 | } | 104 | } |
100 | } | 105 | } |
101 | return shopPoolMap; | 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 | @Transactional(rollbackFor = Exception.class) | 109 | @Transactional(rollbackFor = Exception.class) |
130 | public EvalShopPool createShopPoolData(Long shopId, EvalGroup evalGroup, LocalDate localDate, EvalShopPoolStatusEnum status) { | 110 | public EvalShopPool createShopPoolData(Long shopId, EvalGroup evalGroup, LocalDate localDate, EvalShopPoolStatusEnum status) { |
131 | ShopDTO shopDTO = oopRpcService.queryShop(shopId); | 111 | ShopDTO shopDTO = oopRpcService.queryShop(shopId); |
@@ -159,6 +139,8 @@ public class EvalPoolCommonService { | @@ -159,6 +139,8 @@ public class EvalPoolCommonService { | ||
159 | EvalUserPool evalUserPool = evalUserPoolService.getOne(Wrappers.<EvalUserPool>lambdaQuery() | 139 | EvalUserPool evalUserPool = evalUserPoolService.getOne(Wrappers.<EvalUserPool>lambdaQuery() |
160 | .eq(EvalUserPool::getEvalGroupRankStageId, user.getEvalGroupRankStageId()) | 140 | .eq(EvalUserPool::getEvalGroupRankStageId, user.getEvalGroupRankStageId()) |
161 | .eq(EvalUserPool::getUserId, user.getUserId()) | 141 | .eq(EvalUserPool::getUserId, user.getUserId()) |
142 | + .eq(EvalUserPool::getPostId, user.getPostId()) | ||
143 | + .eq(EvalUserPool::getShopId, user.getShopId()) | ||
162 | .eq(EvalUserPool::getMonthly, YearMonth.from(user.getDataDate())) | 144 | .eq(EvalUserPool::getMonthly, YearMonth.from(user.getDataDate())) |
163 | .eq(EvalUserPool::getYn, Boolean.TRUE) | 145 | .eq(EvalUserPool::getYn, Boolean.TRUE) |
164 | , Boolean.FALSE); | 146 | , Boolean.FALSE); |