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 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);
... ...