Commit 9f43aee0fbd6448a92cf5eb6d3746eede558ae4e

Authored by 姜超
1 parent 62ff59ec

feature(*): 计算考评修改

计算考评修改
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);