Commit 7e7c92a19d5a3b86e3268b902628d5a8714f6023
1 parent
80e64f6f
feature(*): 考评排名组计算修改
考评排名组计算修改
Showing
11 changed files
with
204 additions
and
76 deletions
fw-morax-dao/src/main/resources/mapper/eval/EvalGroupRankDao.xml
... | ... | @@ -9,10 +9,12 @@ |
9 | 9 | <result column="status" property="status"/> |
10 | 10 | <result column="group_id" property="groupId"/> |
11 | 11 | <result column="multi_stage" property="multiStage"/> |
12 | + <result column="begin_time" property="beginTime"/> | |
13 | + <result column="over_time" property="overTime"/> | |
14 | + <result column="reason" property="reason"/> | |
15 | + <result column="attachment" property="attachment" typeHandler="cn.fw.common.data.mybatis.handler.LongListTypeHandler"/> | |
12 | 16 | <result column="yn" property="yn"/> |
13 | - <result column="create_by" property="createBy"/> | |
14 | 17 | <result column="create_time" property="createTime"/> |
15 | - <result column="update_by" property="updateBy"/> | |
16 | 18 | <result column="update_time" property="updateTime"/> |
17 | 19 | </resultMap> |
18 | 20 | |
... | ... | @@ -23,10 +25,15 @@ |
23 | 25 | <result column="status" property="status"/> |
24 | 26 | <result column="group_id" property="groupId"/> |
25 | 27 | <result column="multi_stage" property="multiStage"/> |
28 | + <result column="begin_time" property="beginTime"/> | |
29 | + <result column="over_time" property="overTime"/> | |
30 | + <result column="reason" property="reason"/> | |
31 | + <result column="attachment" property="attachment" typeHandler="cn.fw.common.data.mybatis.handler.StringListTypeHandler"/> | |
26 | 32 | </resultMap> |
27 | 33 | |
28 | 34 | <sql id="all_columns"> |
29 | - id, name, scope_type, egcs, status, group_id, yn, create_time, update_time | |
35 | + id,name,status,begin_time,over_time,multi_stage, | |
36 | + reason,attachment,group_id,yn,create_time,update_time | |
30 | 37 | </sql> |
31 | 38 | |
32 | 39 | <select id="queryPageRankTotal" parameterType="cn.fw.morax.domain.dto.query.EvalGroupRankQueryDTO" resultType="java.lang.Long"> | ... | ... |
fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroupIndicatorParam.java
... | ... | @@ -88,6 +88,21 @@ public class EvalGroupIndicatorParam extends BaseAuditableTimeEntity<EvalGroupIn |
88 | 88 | private BigDecimal targetValue; |
89 | 89 | |
90 | 90 | /** |
91 | + * 目标计算类型;1: 目标值计算 2:最低要求计算 3:阶段目标 4:时间进度 | |
92 | + */ | |
93 | + private TargetCalcTypeEnum extraTargetCalcType; | |
94 | + | |
95 | + /** | |
96 | + * 绩效目标值类型; 1:无 2:百分比 3:金额 4:台数 | |
97 | + */ | |
98 | + private TargetTypeEnum extraTargetType; | |
99 | + | |
100 | + /** | |
101 | + * 目标值 | |
102 | + */ | |
103 | + private BigDecimal extraTargetValue; | |
104 | + | |
105 | + /** | |
91 | 106 | * 逻辑删除 |
92 | 107 | */ |
93 | 108 | @TableLogic | ... | ... |
fw-morax-domain/src/main/java/cn/fw/morax/domain/dto/eval/EvalGroupIndicatorParamDTO.java
... | ... | @@ -80,4 +80,19 @@ public class EvalGroupIndicatorParamDTO { |
80 | 80 | */ |
81 | 81 | private BigDecimal targetValue; |
82 | 82 | |
83 | + /** | |
84 | + * 目标计算类型;1: 目标值计算 2:最低要求计算 3:阶段目标 4:时间进度 | |
85 | + */ | |
86 | + private TargetCalcTypeEnum extraTargetCalcType; | |
87 | + | |
88 | + /** | |
89 | + * 绩效目标值类型; 1:无 2:百分比 3:金额 4:台数 | |
90 | + */ | |
91 | + private TargetTypeEnum extraTargetType; | |
92 | + | |
93 | + /** | |
94 | + * 目标值 | |
95 | + */ | |
96 | + private BigDecimal extraTargetValue; | |
97 | + | |
83 | 98 | } | ... | ... |
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalGroupIndicatorParamVO.java
... | ... | @@ -98,6 +98,26 @@ public class EvalGroupIndicatorParamVO { |
98 | 98 | private BigDecimal reachValue; |
99 | 99 | |
100 | 100 | /** |
101 | + * 时间进度目标值 | |
102 | + */ | |
103 | + private BigDecimal timeScheduleTargetValue; | |
104 | + | |
105 | + /** | |
106 | + * 目标计算类型;1: 目标值计算 2:最低要求计算 3:阶段目标 4:时间进度 | |
107 | + */ | |
108 | + private TargetCalcTypeEnum extraTargetCalcType; | |
109 | + | |
110 | + /** | |
111 | + * 绩效目标值类型; 1:无 2:百分比 3:金额 4:台数 | |
112 | + */ | |
113 | + private TargetTypeEnum extraTargetType; | |
114 | + | |
115 | + /** | |
116 | + * 目标值 | |
117 | + */ | |
118 | + private BigDecimal extraTargetValue; | |
119 | + | |
120 | + /** | |
101 | 121 | * 处理百分数 |
102 | 122 | */ |
103 | 123 | public void processPercent() { | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/CommonService.java
... | ... | @@ -79,6 +79,9 @@ public class CommonService { |
79 | 79 | for (AbstractLaddersDto laddersDto : dtos) { |
80 | 80 | BigDecimal lower = laddersDto.getLower(); |
81 | 81 | BigDecimal upper = laddersDto.getUpper(); |
82 | + if (PublicUtil.isEmpty(lower) || PublicUtil.isEmpty(upper) ) { | |
83 | + throw new BusinessException("【" + errorPromptName + "】的阶梯上限与下限不是连续,请编辑后重试"); | |
84 | + } | |
82 | 85 | //上一条的下限要等于下一条的上限 |
83 | 86 | if (PublicUtil.isNotEmpty(lastUpper) && (lastUpper.compareTo(lower) != 0) ) { |
84 | 87 | throw new BusinessException("【" + errorPromptName + "】的阶梯上限与下限不是连续,请编辑后重试"); | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/kpi/EvalKpiBaseCalculator.java
... | ... | @@ -146,30 +146,23 @@ public abstract class EvalKpiBaseCalculator implements Calculator<EvalGroupUserS |
146 | 146 | for (EvalGroupIndicatorParam param : params) { |
147 | 147 | Optional<BigDecimal> valueOptional = queryValue(userShop, param.getCodeType(), param.getCode()); |
148 | 148 | if (! valueOptional.isPresent()) { |
149 | - log.info("[{}] [{}]指标[{}]值不存在", userShop.getScopeType().getName(), userShop.getReferId(), evalGroupIndicatorId); | |
149 | + log.info("[{}] [{}]指标[{}]值不存在", userShop.getScopeType().getName(), userShop.getReferId(), param.getCode()); | |
150 | 150 | continue; |
151 | 151 | } |
152 | 152 | TargetTypeEnum targetType = param.getTargetType(); |
153 | + TargetTypeEnum extraTargetType = param.getExtraTargetType(); | |
153 | 154 | final BigDecimal originValue = valueOptional.get(); |
154 | 155 | BigDecimal indicatorValue = originValue; |
155 | 156 | if (!TargetTypeEnum.NO.equals(targetType)) { |
156 | 157 | BigDecimal targetValue = param.getTargetValue(); |
157 | 158 | TargetCalcTypeEnum targetCalcType = param.getTargetCalcType(); |
158 | - if (TargetCalcTypeEnum.TARGET_VALUE.equals(targetCalcType)) { | |
159 | - indicatorValue = indicatorValue.divide(targetValue, 4, RoundingMode.HALF_UP); | |
160 | - } else { | |
161 | - BigDecimal difference = BigDecimal.ONE.subtract(targetValue); | |
162 | - if (BigDecimal.ZERO.compareTo(difference) == 0) { | |
163 | - difference = BigDecimal.ONE; | |
164 | - } | |
165 | - BigDecimal userDiffValue = indicatorValue.subtract(targetValue); | |
166 | - if (userDiffValue.compareTo(BigDecimal.ZERO) <= 0) { | |
167 | - indicatorValue = BigDecimal.ZERO; | |
168 | - } else { | |
169 | - indicatorValue = userDiffValue.divide(difference, 4, RoundingMode.HALF_UP); | |
159 | + indicatorValue = calcTarget(targetCalcType, indicatorValue, targetValue); | |
160 | + if (PublicUtil.isNotEmpty(extraTargetType) && (!TargetTypeEnum.NO.equals(extraTargetType))) { | |
161 | + BigDecimal extraIndicatorValue = calcTarget(param.getExtraTargetCalcType(), indicatorValue, targetValue); | |
162 | + if (extraIndicatorValue.compareTo(indicatorValue) > 0) { | |
163 | + indicatorValue = extraIndicatorValue; | |
170 | 164 | } |
171 | 165 | } |
172 | - | |
173 | 166 | saveTargetHitLog(userShop, param.getId(), IndicatorTypeEnum.EXAMINE, originValue, indicatorValue); |
174 | 167 | } |
175 | 168 | boolean isCap = Boolean.TRUE.equals(param.getCap()); |
... | ... | @@ -183,6 +176,26 @@ public abstract class EvalKpiBaseCalculator implements Calculator<EvalGroupUserS |
183 | 176 | } |
184 | 177 | |
185 | 178 | /** |
179 | + * 计算目标 | |
180 | + */ | |
181 | + public BigDecimal calcTarget(TargetCalcTypeEnum targetCalcType, BigDecimal indicatorValue, BigDecimal targetValue) { | |
182 | + if (TargetCalcTypeEnum.MINIMUM.equals(targetCalcType)) { | |
183 | + BigDecimal difference = BigDecimal.ONE.subtract(targetValue); | |
184 | + if (BigDecimal.ZERO.compareTo(difference) == 0) { | |
185 | + difference = BigDecimal.ONE; | |
186 | + } | |
187 | + BigDecimal userDiffValue = indicatorValue.subtract(targetValue); | |
188 | + if (userDiffValue.compareTo(BigDecimal.ZERO) <= 0) { | |
189 | + return BigDecimal.ZERO; | |
190 | + } else { | |
191 | + return userDiffValue.divide(difference, 4, RoundingMode.HALF_UP); | |
192 | + } | |
193 | + } | |
194 | + | |
195 | + return indicatorValue.divide(targetValue, 4, RoundingMode.HALF_UP); | |
196 | + } | |
197 | + | |
198 | + /** | |
186 | 199 | * 查询指标值 |
187 | 200 | * |
188 | 201 | * @return | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/kpi/KpiAbsBaseCalculator.java
... | ... | @@ -227,7 +227,7 @@ public abstract class KpiAbsBaseCalculator implements Calculator<KpiGroupUser, K |
227 | 227 | for (KpiGroupIndicatorParam param : paramList) { |
228 | 228 | IndicatorUserValue userValue = queryValue(user.getUserId(), user.getGroupId(), user.getDataDate(), param.getIndicatorCode()); |
229 | 229 | if (Objects.isNull(userValue)) { |
230 | - log.info("用户[{}]指标[{}]值不存在", user.getUserId(), kpiGroupIndicatorId); | |
230 | + log.info("用户[{}]指标[{}]值不存在", user.getUserId(), param.getIndicatorCode()); | |
231 | 231 | continue; |
232 | 232 | } |
233 | 233 | TargetTypeEnum targetType = param.getTargetType(); | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java
... | ... | @@ -54,6 +54,7 @@ public class EvalCalculateService { |
54 | 54 | private final EvalGroupIndicatorService evalGroupIndicatorService; |
55 | 55 | private final EvalPoolIndicatorDetailService evalPoolIndicatorDetailService; |
56 | 56 | private final EvalGroupRewardService evalGroupRewardService; |
57 | + private final EvalGroupRewardDimService evalGroupRewardDimService; | |
57 | 58 | private final EvalGroupUserService evalGroupUserService; |
58 | 59 | private final StringRedisTemplate stringRedisTemplate; |
59 | 60 | private final EvalGroupRankService evalGroupRankService; |
... | ... | @@ -76,6 +77,7 @@ public class EvalCalculateService { |
76 | 77 | final PlatformTransactionManager platformTransactionManager, |
77 | 78 | final TransactionDefinition transactionDefinition, |
78 | 79 | final EvalGroupRankStageService evalGroupRankStageService, |
80 | + final EvalGroupRewardDimService evalGroupRewardDimService, | |
79 | 81 | final List<EvalRewardBaseCalculator> rewardBaseCalculators, |
80 | 82 | final List<EvalKpiBaseCalculator> kpiBaseCalculators) { |
81 | 83 | this.evalPoolRewardDetailService = evalPoolRewardDetailService; |
... | ... | @@ -92,6 +94,7 @@ public class EvalCalculateService { |
92 | 94 | this.platformTransactionManager = platformTransactionManager; |
93 | 95 | this.transactionDefinition = transactionDefinition; |
94 | 96 | this.evalGroupRankStageService = evalGroupRankStageService; |
97 | + this.evalGroupRewardDimService = evalGroupRewardDimService; | |
95 | 98 | this.calculatorRewardMap = rewardBaseCalculators.stream().collect(Collectors.toMap(EvalRewardBaseCalculator::getCalMethod, v -> v)); |
96 | 99 | this.calculatorEvalMap = kpiBaseCalculators.stream().collect(Collectors.toMap(EvalKpiBaseCalculator::getCalMethod, v -> v)); |
97 | 100 | } |
... | ... | @@ -187,10 +190,16 @@ public class EvalCalculateService { |
187 | 190 | return; |
188 | 191 | } |
189 | 192 | |
193 | + List<EvalGroupRewardDim> rewardDims = evalGroupRewardDimService.list(Wrappers.<EvalGroupRewardDim>lambdaQuery() | |
194 | + .eq(EvalGroupRewardDim::getEvalGroupId, evalGroupId) | |
195 | + .eq(EvalGroupRewardDim::getType, scopeType) | |
196 | + .eq(EvalGroupRewardDim::getYn, Boolean.TRUE) | |
197 | + ); | |
190 | 198 | List<EvalGroupReward> rewards = evalGroupRewardService.list(Wrappers.<EvalGroupReward>lambdaQuery() |
191 | 199 | .eq(EvalGroupReward::getEvalGroupId, evalGroupId) |
192 | 200 | .eq(EvalGroupReward::getYn, Boolean.TRUE) |
193 | 201 | ); |
202 | + Map<Long, List<EvalGroupReward>> dimRewardMap = rewards.stream().collect(Collectors.groupingBy(EvalGroupReward::getEvalGroupDimId)); | |
194 | 203 | List<EvalGroupIndicator> indicators = evalGroupIndicatorService.list(Wrappers.<EvalGroupIndicator>lambdaQuery() |
195 | 204 | .eq(EvalGroupIndicator::getEvalGroupId, evalGroupId) |
196 | 205 | .eq(EvalGroupIndicator::getYn, Boolean.TRUE) |
... | ... | @@ -202,8 +211,8 @@ public class EvalCalculateService { |
202 | 211 | .reduce(BigDecimal.ZERO, BigDecimal::add); |
203 | 212 | |
204 | 213 | //计算 |
205 | - calcRewardRnkCond(rewards, userShops); | |
206 | - calcTotalPushMoney(rewards, userShops, rewardDetails); | |
214 | + calcRewardRnkCond(userShops, rewardDims, dimRewardMap, scopeType); | |
215 | + calcTotalPushMoney(userShops, rewardDims, dimRewardMap, scopeType, rewardDetails); | |
207 | 216 | for (EvalGroupUserShop userShop : userShops) { |
208 | 217 | userShop.setIndicatorTotalScore(totalScore); |
209 | 218 | calcRewardMoney(rewards, userShop, rewardDetails); |
... | ... | @@ -343,44 +352,69 @@ public class EvalCalculateService { |
343 | 352 | * |
344 | 353 | * @param |
345 | 354 | */ |
346 | - private void calcRewardRnkCond(List<EvalGroupReward> rewards, List<EvalGroupUserShop> userShops) { | |
347 | - for (EvalGroupReward evalGroupReward : rewards) { | |
348 | - final String rewardProjectName = evalGroupReward.getName(); | |
349 | - EvalRewardBaseCalculator calculator = calculatorRewardMap.get(evalGroupReward.getCalMethod()); | |
350 | - if (Objects.isNull(calculator)) { | |
351 | - log.error("[{}_{}]计算器不存在", evalGroupReward.getId(), rewardProjectName); | |
352 | - return; | |
355 | + private void calcRewardRnkCond(List<EvalGroupUserShop> userShops, List<EvalGroupRewardDim> rewardDims, | |
356 | + Map<Long, List<EvalGroupReward>> dimRewardMap, EvalScopeEnum scopeType) { | |
357 | + for (EvalGroupRewardDim dim : rewardDims) { | |
358 | + List<EvalGroupUserShop> filterUserShops = filterUserShops(dim, scopeType, userShops); | |
359 | + if (PublicUtil.isEmpty(filterUserShops)) { | |
360 | + continue; | |
361 | + } | |
362 | + for (EvalGroupReward evalGroupReward : dimRewardMap.getOrDefault(dim.getId(), new ArrayList<>())) { | |
363 | + final String rewardProjectName = evalGroupReward.getName(); | |
364 | + EvalRewardBaseCalculator calculator = calculatorRewardMap.get(evalGroupReward.getCalMethod()); | |
365 | + if (Objects.isNull(calculator)) { | |
366 | + log.error("[{}_{}]计算器不存在", evalGroupReward.getId(), rewardProjectName); | |
367 | + return; | |
368 | + } | |
369 | + | |
370 | + calculator.calculateRankPrecondition(filterUserShops, evalGroupReward); | |
353 | 371 | } |
354 | - calculator.calculateRankPrecondition(userShops, evalGroupReward); | |
355 | 372 | } |
356 | 373 | } |
357 | 374 | |
375 | + public List<EvalGroupUserShop> filterUserShops(EvalGroupRewardDim dim, EvalScopeEnum scopeType, List<EvalGroupUserShop> userShops) { | |
376 | + List<EvalGroupUserShop> filterUserShops = new ArrayList<>(); | |
377 | + if (EvalScopeEnum.STAFF.equals(scopeType)) { | |
378 | + filterUserShops = userShops.stream().filter(userShop -> dim.getPostIds().contains(userShop.getPostId())).collect(Collectors.toList()); | |
379 | + } else { | |
380 | + filterUserShops = userShops.stream().filter(userShop -> dim.getShopIds().contains(userShop.getShopId())).collect(Collectors.toList()); | |
381 | + } | |
382 | + return filterUserShops; | |
383 | + } | |
384 | + | |
358 | 385 | /** |
359 | 386 | * 计算绩效金额 |
360 | 387 | * |
361 | 388 | * @param rewardDetails |
362 | 389 | */ |
363 | - private void calcTotalPushMoney(List<EvalGroupReward> rewards, List<EvalGroupUserShop> userShops, List<EvalPoolRewardDetail> rewardDetails) { | |
364 | - | |
365 | - List<EvalGroupReward> totalCalcuRewards = rewards.stream() | |
366 | - .filter(reward -> EvalRewardCalMethodEnum.RANK.equals(reward.getCalMethod()) || | |
367 | - EvalRewardCalMethodEnum.TOTAL_PROPORTION.equals(reward.getCalMethod())) | |
368 | - .collect(Collectors.toList()); | |
369 | - | |
370 | - for (EvalGroupReward evalGroupReward : totalCalcuRewards) { | |
371 | - final String rewardProjectName = evalGroupReward.getName(); | |
372 | - EvalRewardBaseCalculator calculator = calculatorRewardMap.get(evalGroupReward.getCalMethod()); | |
373 | - if (Objects.isNull(calculator)) { | |
374 | - log.error("[{}_{}]计算器不存在", evalGroupReward.getId(), rewardProjectName); | |
375 | - return; | |
376 | - } | |
377 | - calculator.calculateGroup(userShops, evalGroupReward); | |
378 | - for (EvalGroupUserShop userShop : userShops) { | |
379 | - EvalPoolRewardDetail detail = createDetail(userShop); | |
380 | - detail.setScopeType(userShop.getScopeType()); | |
381 | - detail.setEvalGroupRewardId(evalGroupReward.getId()); | |
382 | - detail.setAmount(Optional.ofNullable(userShop.getEvalGroupRewardAmount()).orElse(BigDecimal.ZERO)); | |
383 | - rewardDetails.add(detail); | |
390 | + private void calcTotalPushMoney(List<EvalGroupUserShop> userShops, List<EvalGroupRewardDim> rewardDims, | |
391 | + Map<Long, List<EvalGroupReward>> dimRewardMap, EvalScopeEnum scopeType, List<EvalPoolRewardDetail> rewardDetails) { | |
392 | + | |
393 | + for (EvalGroupRewardDim dim : rewardDims) { | |
394 | + List<EvalGroupReward> totalCalcRewards = dimRewardMap.getOrDefault(dim.getId(), new ArrayList<>()).stream() | |
395 | + .filter(reward -> EvalRewardCalMethodEnum.RANK.equals(reward.getCalMethod()) || | |
396 | + EvalRewardCalMethodEnum.TOTAL_PROPORTION.equals(reward.getCalMethod())) | |
397 | + .collect(Collectors.toList()); | |
398 | + | |
399 | + for (EvalGroupReward evalGroupReward : totalCalcRewards) { | |
400 | + List<EvalGroupUserShop> filterUserShops = filterUserShops(dim, scopeType, userShops); | |
401 | + if (PublicUtil.isEmpty(filterUserShops)) { | |
402 | + continue; | |
403 | + } | |
404 | + final String rewardProjectName = evalGroupReward.getName(); | |
405 | + EvalRewardBaseCalculator calculator = calculatorRewardMap.get(evalGroupReward.getCalMethod()); | |
406 | + if (Objects.isNull(calculator)) { | |
407 | + log.error("[{}_{}]计算器不存在", evalGroupReward.getId(), rewardProjectName); | |
408 | + return; | |
409 | + } | |
410 | + calculator.calculateGroup(userShops, evalGroupReward); | |
411 | + for (EvalGroupUserShop userShop : filterUserShops) { | |
412 | + EvalPoolRewardDetail detail = createDetail(userShop); | |
413 | + detail.setScopeType(userShop.getScopeType()); | |
414 | + detail.setEvalGroupRewardId(evalGroupReward.getId()); | |
415 | + detail.setAmount(Optional.ofNullable(userShop.getEvalGroupRewardAmount()).orElse(BigDecimal.ZERO)); | |
416 | + rewardDetails.add(detail); | |
417 | + } | |
384 | 418 | } |
385 | 419 | } |
386 | 420 | } |
... | ... | @@ -583,6 +617,8 @@ public class EvalCalculateService { |
583 | 617 | userShop.setScopeType(EvalScopeEnum.STAFF); |
584 | 618 | userShop.setEvalGroupId(user.getEvalGroupId()); |
585 | 619 | userShop.setPoolId(userPool.getId()); |
620 | + userShop.setPostId(userPool.getPostId()); | |
621 | + userShop.setShopId(userPool.getShopId()); | |
586 | 622 | userShop.setReferId(user.getUserId()); |
587 | 623 | userShop.setDataDate(user.getDataDate()); |
588 | 624 | userShop.setGroupId(user.getGroupId()); |
... | ... | @@ -596,6 +632,7 @@ public class EvalCalculateService { |
596 | 632 | userShop.setName(shopPool.getShopName()); |
597 | 633 | userShop.setReferId(shopPool.getShopId()); |
598 | 634 | userShop.setPoolId(shopPool.getId()); |
635 | + userShop.setShopId(shopPool.getShopId()); | |
599 | 636 | userShop.setScopeType(EvalScopeEnum.SHOP); |
600 | 637 | userShop.setEvalId(userShop.getEvalId()); |
601 | 638 | userShop.setEvalGroupId(evalGroup.getId()); | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupRankBizService.java
... | ... | @@ -27,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional; |
27 | 27 | |
28 | 28 | import java.math.BigDecimal; |
29 | 29 | import java.time.LocalDate; |
30 | +import java.time.YearMonth; | |
30 | 31 | import java.util.*; |
31 | 32 | import java.util.concurrent.atomic.AtomicInteger; |
32 | 33 | import java.util.stream.Collectors; |
... | ... | @@ -76,7 +77,7 @@ public class EvalGroupRankBizService { |
76 | 77 | epiGroupRankVO.setPostNames(new HashSet<>()); |
77 | 78 | epiGroupRankVO.setShopIds(new ArrayList<>()); |
78 | 79 | epiGroupRankVO.setShopNames(new HashSet<>()); |
79 | - for (EvalGroup evalGroup : egcGroupMap.get(epiGroupRankVO.getId())) { | |
80 | + for (EvalGroup evalGroup : egcGroupMap.getOrDefault(epiGroupRankVO.getId(), new ArrayList<>())) { | |
80 | 81 | epiGroupRankVO.getPostIds().addAll(evalGroup.getPostIds()); |
81 | 82 | epiGroupRankVO.getPostNames().addAll(evalGroup.getPostNames()); |
82 | 83 | epiGroupRankVO.getShopIds().addAll(evalGroup.getShopIds()); |
... | ... | @@ -231,6 +232,9 @@ public class EvalGroupRankBizService { |
231 | 232 | throw new BusinessException("阶段开始时间不能在上一个阶段结束时间之前"); |
232 | 233 | } |
233 | 234 | } |
235 | + if (YearMonth.from(stage.getOverTime()).compareTo(YearMonth.from(eval.getOverTime())) != 0) { | |
236 | + throw new BusinessException("阶段开始时间结束时间必须是同一月份"); | |
237 | + } | |
234 | 238 | } |
235 | 239 | |
236 | 240 | /** | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/kpi/CombineIndicatorBizService.java
... | ... | @@ -69,32 +69,6 @@ public class CombineIndicatorBizService { |
69 | 69 | public List<CombineAndEvalIndicatorVO> combineAndEvalIndicators(CombineIndicatorQueryDTO dto) { |
70 | 70 | |
71 | 71 | List<CombineAndEvalIndicatorVO> combineAndEvalIndicatorVOS = Lists.newArrayListWithCapacity(100); |
72 | - if (PublicUtil.isEmpty(dto.getCombineIndicator()) || Boolean.TRUE.equals(dto.getCombineIndicator())) { | |
73 | - List<CombineIndicator> combineIndicators = combineIndicatorService.list(Wrappers.<CombineIndicator>lambdaQuery() | |
74 | - .eq(CombineIndicator::getGroupId, dto.getGroupId()) | |
75 | - .eq(PublicUtil.isNotEmpty(dto.getEnable()), CombineIndicator::getEnable, dto.getEnable()) | |
76 | - //支持指标名称和编码的模糊查询 | |
77 | - .and(PublicUtil.isNotEmpty(dto.getKeyword()), | |
78 | - wrapper -> wrapper.like(CombineIndicator::getCombineCode,dto.getKeyword()) | |
79 | - .or() | |
80 | - .like(CombineIndicator::getName, dto.getKeyword()) | |
81 | - ) | |
82 | - .eq(CombineIndicator::getYn, Boolean.TRUE) | |
83 | - ); | |
84 | - if (PublicUtil.isNotEmpty(combineIndicators)) { | |
85 | - Map<Long, List<CombineIndicatorParam>> combineParamMap = getCombineNameMap(combineIndicators); | |
86 | - for (CombineIndicator combineIndicator : combineIndicators) { | |
87 | - List<String> combineIndicatorNames = combineParamMap.getOrDefault(combineIndicator.getId(), new ArrayList<>()).stream() | |
88 | - .map(CombineIndicatorParam::getName).collect(Collectors.toList()); | |
89 | - CombineAndEvalIndicatorVO indicatorVO = PublicUtil.copy(combineIndicator, CombineAndEvalIndicatorVO.class); | |
90 | - indicatorVO.setCombineIndicatorNames(combineIndicatorNames); | |
91 | - indicatorVO.setCode(combineIndicator.getCombineCode()); | |
92 | - indicatorVO.setCodeType(IndicatorCodeTypeEnum.COMBINE_INDICATOR); | |
93 | - combineAndEvalIndicatorVOS.add(indicatorVO); | |
94 | - } | |
95 | - } | |
96 | - } | |
97 | - | |
98 | 72 | if (PublicUtil.isEmpty(dto.getCombineIndicator()) || Boolean.FALSE.equals(dto.getCombineIndicator())) { |
99 | 73 | List<EvalIndicator> evalIndicators = evalIndicatorService.list(Wrappers.<EvalIndicator>lambdaQuery() |
100 | 74 | .eq(PublicUtil.isNotEmpty(dto.getSysId()), EvalIndicator::getSysId, dto.getSysId()) |
... | ... | @@ -120,6 +94,38 @@ public class CombineIndicatorBizService { |
120 | 94 | } |
121 | 95 | } |
122 | 96 | } |
97 | + | |
98 | + //目标、角色都是针对考评指标的搜索 | |
99 | + if (PublicUtil.isNotEmpty(dto.getHasTarget()) || PublicUtil.isNotEmpty(dto.getRoleCode())) { | |
100 | + return combineAndEvalIndicatorVOS; | |
101 | + } | |
102 | + | |
103 | + if (PublicUtil.isEmpty(dto.getCombineIndicator()) || Boolean.TRUE.equals(dto.getCombineIndicator())) { | |
104 | + List<CombineIndicator> combineIndicators = combineIndicatorService.list(Wrappers.<CombineIndicator>lambdaQuery() | |
105 | + .eq(CombineIndicator::getGroupId, dto.getGroupId()) | |
106 | + .eq(PublicUtil.isNotEmpty(dto.getEnable()), CombineIndicator::getEnable, dto.getEnable()) | |
107 | + //支持指标名称和编码的模糊查询 | |
108 | + .and(PublicUtil.isNotEmpty(dto.getKeyword()), | |
109 | + wrapper -> wrapper.like(CombineIndicator::getCombineCode, dto.getKeyword()) | |
110 | + .or() | |
111 | + .like(CombineIndicator::getName, dto.getKeyword()) | |
112 | + ) | |
113 | + .eq(CombineIndicator::getYn, Boolean.TRUE) | |
114 | + ); | |
115 | + if (PublicUtil.isNotEmpty(combineIndicators)) { | |
116 | + Map<Long, List<CombineIndicatorParam>> combineParamMap = getCombineNameMap(combineIndicators); | |
117 | + for (CombineIndicator combineIndicator : combineIndicators) { | |
118 | + List<String> combineIndicatorNames = combineParamMap.getOrDefault(combineIndicator.getId(), new ArrayList<>()).stream() | |
119 | + .map(CombineIndicatorParam::getName).collect(Collectors.toList()); | |
120 | + CombineAndEvalIndicatorVO indicatorVO = PublicUtil.copy(combineIndicator, CombineAndEvalIndicatorVO.class); | |
121 | + indicatorVO.setCombineIndicatorNames(combineIndicatorNames); | |
122 | + indicatorVO.setCode(combineIndicator.getCombineCode()); | |
123 | + indicatorVO.setCodeType(IndicatorCodeTypeEnum.COMBINE_INDICATOR); | |
124 | + combineAndEvalIndicatorVOS.add(indicatorVO); | |
125 | + } | |
126 | + } | |
127 | + } | |
128 | + | |
123 | 129 | return combineAndEvalIndicatorVOS; |
124 | 130 | } |
125 | 131 | ... | ... |