Commit 7e7c92a19d5a3b86e3268b902628d5a8714f6023

Authored by 姜超
1 parent 80e64f6f

feature(*): 考评排名组计算修改

考评排名组计算修改
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
... ... @@ -46,6 +46,14 @@ public class EvalGroupUserShop {
46 46 * 考评池id
47 47 */
48 48 private Long poolId;
  49 + /**
  50 + * 岗位id
  51 + */
  52 + private Long postId;
  53 + /**
  54 + * 门店id
  55 + */
  56 + private Long shopId;
49 57  
50 58 /**
51 59 * 名称
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroupIndicatorParam.java
... ... @@ -88,6 +88,21 @@ public class EvalGroupIndicatorParam extends BaseAuditableTimeEntity&lt;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&lt;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&lt;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&lt;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  
... ...