From 9f43aee0fbd6448a92cf5eb6d3746eede558ae4e Mon Sep 17 00:00:00 2001 From: jiangchao Date: Mon, 22 May 2023 18:04:31 +0800 Subject: [PATCH] feature(*): 计算考评修改 --- fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardProportionCalculator.java | 2 ++ fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardRankCalculator.java | 1 + fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java | 16 +++++----------- fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalPoolCommonService.java | 58 ++++++++++++++++++++-------------------------------------- 4 files changed, 28 insertions(+), 49 deletions(-) diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardProportionCalculator.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardProportionCalculator.java index 39be6c9..c7b582c 100644 --- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardProportionCalculator.java +++ b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardProportionCalculator.java @@ -23,6 +23,7 @@ import java.math.RoundingMode; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @author jiangchao @@ -46,6 +47,7 @@ public class EvalRewardProportionCalculator extends EvalRewardBaseCalculator { @Override public void calculateGroup(List userShops, EvalGroupReward reward) { + userShops = userShops.stream().filter(userShop -> Boolean.FALSE.equals(userShop.getIgnored())).collect(Collectors.toList()); if (PublicUtil.isEmpty(userShops)) { return; } diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardRankCalculator.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardRankCalculator.java index 0334194..f880a96 100644 --- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardRankCalculator.java +++ b/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 { @Override public void calculateGroup(List userShops, EvalGroupReward reward) { + userShops = userShops.stream().filter(userShop -> Boolean.FALSE.equals(userShop.getIgnored())).collect(Collectors.toList()); if (PublicUtil.isEmpty(userShops)) { return; } diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java index ea996a6..0197d8d 100644 --- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java +++ b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java @@ -116,7 +116,6 @@ public class EvalCalculateService { log.info("定时任务【缓存需要计算的考评组】开始执行"); List evalGroups = evalGroupService.getAllEffectGroups(localDate); Set evalGroupIds = evalGroups.stream().map(EvalGroup::getId).collect(Collectors.toSet()); -// Set evalGroupIds = evalGroupService.queryCalculableEvalGroupIds(localDate); if (CollectionUtils.isEmpty(evalGroupIds)) { return; } @@ -282,23 +281,17 @@ public class EvalCalculateService { Map userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroup, evalGroupRankStage, users, localDate); for (EvalGroupUser user : users) { -// if (Boolean.TRUE.equals(user.getIgnored())) { -// continue; -// } EvalUserPool userPool = userPoolMap.get(user.getUserId()); userShops.add(convertBO(user, userPool)); } return userShops; } - List distShopIds = this.getEvalDistShopIds(evalGroup); - if (PublicUtil.isEmpty(distShopIds)) { - return new ArrayList<>(); - } Map shopPoolBOMap = evalPoolCommonService.inspectionShopPools(evalGroup, localDate, distShopIds); - for (Long shopId : distShopIds) { + for (Long shopId : evalGroup.getShopIds()) { EvalShopPool shopPool = shopPoolBOMap.get(shopId); - userShops.add(convertBO(shopPool, evalGroup, beginDate, localDate)); + Boolean ignored = ! distShopIds.contains(shopId); + userShops.add(convertBO(shopPool, evalGroup, beginDate, localDate, ignored)); } return userShops; } @@ -643,7 +636,7 @@ public class EvalCalculateService { return userShop; } - public EvalGroupUserShop convertBO(EvalShopPool shopPool, EvalGroup evalGroup, LocalDate beginDate, LocalDate dataDate) { + public EvalGroupUserShop convertBO(EvalShopPool shopPool, EvalGroup evalGroup, LocalDate beginDate, LocalDate dataDate, Boolean ignored) { EvalGroupUserShop userShop = new EvalGroupUserShop(); userShop.setName(shopPool.getShopName()); userShop.setReferId(shopPool.getShopId()); @@ -655,6 +648,7 @@ public class EvalCalculateService { userShop.setBeginDate(beginDate); userShop.setDataDate(dataDate); userShop.setGroupId(evalGroup.getGroupId()); + userShop.setIgnored(ignored); userShop.setScore(BigDecimal.ZERO); userShop.setReward(BigDecimal.ZERO); return userShop; diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalPoolCommonService.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalPoolCommonService.java index b21b18d..fc6e74d 100644 --- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalPoolCommonService.java +++ b/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; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.map.MultiKeyMap; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -58,17 +59,24 @@ public class EvalPoolCommonService { .eq(EvalUserPool::getYn, Boolean.TRUE) ); - Map userPoolMap = pools.stream().collect(Collectors.toMap(EvalUserPool::getUserId, Function.identity(), (v1, v2) -> { - log.error("同一个考评组、考评人员出现两条考评池数据。用户id:{},考评组:{}", v1.getUserId(), evalGroup); - return v1; - })); + //人员可能在考评组中出现多次(调岗) + MultiKeyMap userShopPostShopIdMap = new MultiKeyMap<>(); + for (EvalUserPool pool : pools) { + userShopPostShopIdMap.put(pool.getUserId(), pool.getShopId(), pool.getPostId(), pool); + } for (EvalGroupUser user : users) { - if (! userPoolMap.containsKey(user.getUserId())) { + if (! userShopPostShopIdMap.containsKey(user.getUserId(), user.getShopId(), user.getPostId())) { EvalUserPool userPool = inspectionUserPool(user); - userPoolMap.put(userPool.getUserId(), userPool); + userShopPostShopIdMap.put(user.getUserId(), user.getShopId(), user.getPostId(), userPool); } } + + Map userPoolMap = userShopPostShopIdMap.values().stream().collect(Collectors.toMap(EvalUserPool::getUserId, Function.identity(), (v1, v2) -> { + log.error("同一个考评组、考评人员出现两条考评池数据。用户id:{},考评组:{}", v1.getUserId(), evalGroup); + return v1; + })); + return userPoolMap; } @@ -87,45 +95,17 @@ public class EvalPoolCommonService { return v1; })); - if (PublicUtil.isEmpty(distShopIds)) { - return new HashMap<>(); - } - for (Long shopId : distShopIds) { + for (Long shopId : evalGroupShopIds) { if (! shopPoolMap.containsKey(shopId)) { -// EvalShopPoolStatusEnum status = (distShopIds.contains(shopId)) -// ? EvalShopPoolStatusEnum.CALC_REWARD : EvalShopPoolStatusEnum.NO_REWARD; - EvalShopPool shopPool = this.inspectionShopPool(shopId, evalGroup, localDate, EvalShopPoolStatusEnum.CALC_REWARD); + EvalShopPoolStatusEnum status = (distShopIds.contains(shopId)) + ? EvalShopPoolStatusEnum.CALC_REWARD : EvalShopPoolStatusEnum.NO_REWARD; + EvalShopPool shopPool = this.createShopPoolData(shopId, evalGroup, localDate, status); shopPoolMap.put(shopId, shopPool); } } return shopPoolMap; } - /** - * 查询考评门店池 - * - * @return - */ - @Transactional(rollbackFor = Exception.class) - public EvalShopPool inspectionShopPool(Long shopId, EvalGroup evalGroup, LocalDate localDate, EvalShopPoolStatusEnum status) { - EvalShopPool evalShopPool = evalShopPoolService.getOne(Wrappers.lambdaQuery() - .eq(EvalShopPool::getId, evalGroup.getId()) - .eq(EvalShopPool::getShopId, shopId) - .eq(EvalShopPool::getYn, Boolean.TRUE) - .eq(EvalShopPool::getMonthly, YearMonth.from(localDate).minusMonths(1)) - , Boolean.FALSE); - if (PublicUtil.isNotEmpty(evalShopPool)) { - evalShopPoolService.update(Wrappers.lambdaUpdate() - .eq(EvalShopPool::getId, evalShopPool.getId()) - .set(EvalShopPool::getMonthly, YearMonth.from(localDate)) - .set(EvalShopPool::getUpdateTime, new Date()) - ); - evalShopPool.setMonthly(YearMonth.from(localDate)); - return evalShopPool; - } - return this.createShopPoolData(shopId, evalGroup, localDate, status); - } - @Transactional(rollbackFor = Exception.class) public EvalShopPool createShopPoolData(Long shopId, EvalGroup evalGroup, LocalDate localDate, EvalShopPoolStatusEnum status) { ShopDTO shopDTO = oopRpcService.queryShop(shopId); @@ -159,6 +139,8 @@ public class EvalPoolCommonService { EvalUserPool evalUserPool = evalUserPoolService.getOne(Wrappers.lambdaQuery() .eq(EvalUserPool::getEvalGroupRankStageId, user.getEvalGroupRankStageId()) .eq(EvalUserPool::getUserId, user.getUserId()) + .eq(EvalUserPool::getPostId, user.getPostId()) + .eq(EvalUserPool::getShopId, user.getShopId()) .eq(EvalUserPool::getMonthly, YearMonth.from(user.getDataDate())) .eq(EvalUserPool::getYn, Boolean.TRUE) , Boolean.FALSE); -- libgit2 0.22.2