Commit f692be3a389cbef09f2db38392a58db5385058f8

Authored by 姜超
1 parent 7060fbd3

feature(*): 查询修改

查询修改
fw-morax-dao/src/main/java/cn/fw/morax/dao/eval/EvalUserPoolDao.java
... ... @@ -2,7 +2,10 @@ package cn.fw.morax.dao.eval;
2 2  
3 3  
4 4 import cn.fw.morax.domain.db.eval.EvalUserPool;
  5 +import cn.fw.morax.domain.dto.query.EvalPoolQueryDTO;
  6 +import cn.fw.morax.domain.dto.query.KpiPoolQueryDTO;
5 7 import cn.fw.morax.domain.vo.eval.EvalUserPoolVO;
  8 +import cn.fw.morax.domain.vo.kpi.KpiPoolVO;
6 9 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
7 10 import org.apache.ibatis.annotations.Param;
8 11  
... ... @@ -22,4 +25,20 @@ public interface EvalUserPoolDao extends BaseMapper<EvalUserPool> {
22 25 List<EvalUserPool> getLastPool(@Param("monthly") YearMonth monthly, @Param("groupId") Long groupId);
23 26  
24 27 List<EvalUserPoolVO> getPools(@Param("monthly") YearMonth monthly, @Param("userId") Long userId);
  28 +
  29 + /**
  30 + * 考评池分页查询
  31 + *
  32 + * @param dto
  33 + * @return
  34 + */
  35 + List<EvalUserPoolVO> queryPagePool(@Param("condition") EvalPoolQueryDTO dto, @Param("startIndex") int startIndex, @Param("pageSize") int pageSize);
  36 +
  37 + /**
  38 + * 查询考评池数据总署
  39 + *
  40 + * @param dto
  41 + * @return
  42 + */
  43 + long queryPagePoolTotal(EvalPoolQueryDTO dto);
25 44 }
... ...
fw-morax-dao/src/main/resources/mapper/eval/EvalUserPoolDao.xml
... ... @@ -89,4 +89,43 @@
89 89 order by t1.create_time desc
90 90 </select>
91 91  
  92 +
  93 + <select id="queryPagePoolTotal" resultType="java.lang.Long">
  94 + SELECT
  95 + IFNULL(count(1),0)
  96 + from eval_user_pool
  97 + where yn = 1
  98 + and group_id = #{groupId}
  99 + <if test="userId !=null">
  100 + and user_id = #{userId}
  101 + </if>
  102 + <if test="userName !=null and userName != ''">
  103 + and user_name like concat('%', #{userName}, '%')
  104 + </if>
  105 + <if test="startLevel !=null">
  106 + and star_level = #{startLevel}
  107 + </if>
  108 + <if test="monthly !=null">
  109 + and monthly = #{monthly}
  110 + </if>
  111 + <if test="postId !=null">
  112 + and post_id = #{postId}
  113 + </if>
  114 + <if test="postName !=null and postName != ''">
  115 + and post_name like concat('%', #{postName}, '%')
  116 + </if>
  117 + <if test="shopId !=null">
  118 + and shop_id = #{shopId}
  119 + </if>
  120 + <if test="shopName !=null and shopName != ''">
  121 + and shop_name like concat('%', #{shopName}, '%')
  122 + </if>
  123 + <if test="managerStaffList !=null and managerStaffList.size() > 0">
  124 + and user_id in
  125 + <foreach collection="managerStaffList" item="id" index="index" open="(" close=")" separator=",">
  126 + #{id}
  127 + </foreach>
  128 + </if>
  129 + </select>
  130 +
92 131 </mapper>
93 132 \ No newline at end of file
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/ShopIndicatorValueVO.java
... ... @@ -24,5 +24,11 @@ public class ShopIndicatorValueVO {
24 24 @ExcelField(title = "指标值", sort = 2, charSize = 16)
25 25 private String indicatorValue;
26 26  
  27 + /**
  28 + * 考核周期
  29 + */
  30 + @ExcelField(title = "考核周期", sort = 3, charSize = 16)
  31 + private String dataDate;
  32 +
27 33  
28 34 }
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/StaffIndicatorValueVO.java
... ... @@ -35,6 +35,6 @@ public class StaffIndicatorValueVO {
35 35 /**
36 36 * 考核周期
37 37 */
38   - @ExcelField(title = "考核周期", sort = 3, charSize = 16)
39   - private String applyTime;
  38 + @ExcelField(title = "考核周期", sort = 4, charSize = 16)
  39 + private String dataDate;
40 40 }
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/controller/app/EvalController.java
... ... @@ -2,6 +2,7 @@ package cn.fw.morax.server.controller.app;
2 2  
3 3  
4 4 import cn.fw.common.exception.BusinessException;
  5 +import cn.fw.common.page.AppPage;
5 6 import cn.fw.common.web.annotation.ControllerMethod;
6 7 import cn.fw.common.web.auth.LoginAuthBean;
7 8 import cn.fw.common.web.auth.annotation.CurrentUser;
... ... @@ -10,10 +11,12 @@ import cn.fw.morax.common.utils.PublicUtil;
10 11 import cn.fw.morax.domain.dto.eval.EvalDTO;
11 12 import cn.fw.morax.domain.dto.eval.EvalGroupIndicatorRankDTO;
12 13 import cn.fw.morax.domain.dto.eval.EvalRewardDistDTO;
13   -import cn.fw.morax.domain.dto.eval.EvalRewardDistDetailDTO;
  14 +import cn.fw.morax.domain.dto.query.EvalPoolQueryDTO;
  15 +import cn.fw.morax.domain.dto.query.KpiPoolQueryDTO;
14 16 import cn.fw.morax.domain.vo.SelectorVO;
15 17 import cn.fw.morax.domain.vo.eval.*;
16 18 import cn.fw.morax.domain.vo.kpi.KpiIndicatorRankVO;
  19 +import cn.fw.morax.domain.vo.kpi.KpiPoolVO;
17 20 import cn.fw.morax.service.biz.SettingDraftBizService;
18 21 import cn.fw.morax.service.biz.eval.*;
19 22 import cn.fw.security.auth.client.annotation.Authorization;
... ... @@ -48,6 +51,7 @@ import static cn.fw.common.web.util.ResultBuilder.success;
48 51 @RequestMapping("/app/eval")
49 52 public class EvalController {
50 53  
  54 + private final EvalPoolService evalPoolService;
51 55 private final EvalGroupPoolService evalGroupPoolService;
52 56 private final EvalGroupBizService evalGroupBizService;
53 57 private final EvalGroupDataService evalGroupDataService;
... ... @@ -156,10 +160,10 @@ public class EvalController {
156 160 @GetMapping("/staff/score-detail")
157 161 @IgnoreAuth
158 162 @ControllerMethod("员工考评得分详情")
159   - public Message<EvalPoolIndicatorDetailVO> getStaffHitIndicatorLadder(@NotNull(message = "考评池id不能为空") Long evalPoolId,
  163 + public Message<EvalPoolIndicatorDetailVO> getStaffHitIndicatorDetail(@NotNull(message = "考评池id不能为空") Long evalPoolId,
160 164 @NotNull(message = "指标id不能为空") Long evalGroupIndicatorId,
161 165 @NotNull(message = "日期不能为空") @RequestParam("dataDate") LocalDate dataDate) {
162   - return success(evalGroupPoolService.getHitIndicatorLadder(evalPoolId, evalGroupIndicatorId, dataDate));
  166 + return success(evalGroupPoolService.getHitIndicatorDetail(evalPoolId, evalGroupIndicatorId, dataDate));
163 167 }
164 168  
165 169 /**
... ... @@ -200,6 +204,38 @@ public class EvalController {
200 204 }
201 205  
202 206 /**
  207 + * 人员考评池列表
  208 + *
  209 + * @param dto
  210 + * @return
  211 + * @ignoreParams currentUser
  212 + */
  213 + @GetMapping("/staffs-pool")
  214 + @ControllerMethod("人员考评池列表")
  215 + public Message<AppPage<EvalUserPoolVO>> queryUserPool(@Validated EvalPoolQueryDTO dto) {
  216 + if (PublicUtil.isEmpty(dto.getMonthly())) {
  217 + dto.setMonthly(YearMonth.now());
  218 + }
  219 + return success(evalPoolService.queryUserPool(dto));
  220 + }
  221 +
  222 + /**
  223 + * 门店考评池列表
  224 + *
  225 + * @param dto
  226 + * @return
  227 + * @ignoreParams currentUser
  228 + */
  229 + @GetMapping("/shop-pool")
  230 + @ControllerMethod("门店考评池列表")
  231 + public Message<AppPage<EvalShopPoolVO>> queryShopPool(@Validated EvalPoolQueryDTO dto) {
  232 + if (PublicUtil.isEmpty(dto.getMonthly())) {
  233 + dto.setMonthly(YearMonth.now());
  234 + }
  235 + return success(evalPoolService.queryShopPool(dto));
  236 + }
  237 +
  238 + /**
203 239 * 奖惩分配详情
204 240 *
205 241 */
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/kpi/EvalKpiBaseCalculator.java
... ... @@ -205,7 +205,7 @@ public abstract class EvalKpiBaseCalculator implements Calculator&lt;EvalGroupUserS
205 205  
206 206  
207 207 EvalIndicatorValue evalIndicatorValue = evalIndicatorValueService.queryLastValue(obj.getReferId(),
208   - dimensionType, indicatorCode, obj.getDataDate(), obj.getGroupId());
  208 + dimensionType, indicatorCode, obj.getDataDate());
209 209  
210 210 return Optional.ofNullable(evalIndicatorValue).map(EvalIndicatorValue::getIndicatorValue);
211 211 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardBaseCalculator.java
... ... @@ -254,7 +254,7 @@ public abstract class EvalRewardBaseCalculator implements Calculator&lt;EvalGroupUs
254 254 jsonValue = Optional.ofNullable(indicatorUserValue).map(IndicatorUserValue::getIndicatorValue);
255 255 } else {
256 256 EvalIndicatorValue evalIndicatorValue = evalIndicatorValueService.queryLastValue(obj.getReferId(),
257   - dimensionType, indicatorCode, obj.getDataDate(), obj.getGroupId());
  257 + dimensionType, indicatorCode, obj.getDataDate());
258 258 jsonValue = Optional.ofNullable(evalIndicatorValue).map(EvalIndicatorValue::getIndicatorValue);
259 259 }
260 260  
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java
... ... @@ -28,7 +28,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
28 28 import com.google.common.collect.Lists;
29 29 import lombok.RequiredArgsConstructor;
30 30 import lombok.extern.slf4j.Slf4j;
31   -import org.apache.rocketmq.common.filter.impl.Op;
32 31 import org.springframework.stereotype.Service;
33 32  
34 33 import java.math.BigDecimal;
... ... @@ -244,15 +243,17 @@ public class EvalGroupPoolService {
244 243 * @param evalGroupIndicatorId
245 244 * @return
246 245 */
247   - public EvalPoolIndicatorDetailVO getHitIndicatorLadder(Long evalPoolId, Long evalGroupIndicatorId, LocalDate dataDate) {
  246 + public EvalPoolIndicatorDetailVO getHitIndicatorDetail(Long evalPoolId, Long evalGroupIndicatorId, LocalDate dataDate) {
248 247 EvalUserPool pool = evalUserPoolService.getById(evalPoolId);
  248 + Long userId = pool.getUserId();
  249 + EvalScopeEnum scopeType = EvalScopeEnum.STAFF;
249 250 BV.notNull(pool, "考评池不存在");
250 251 EvalPoolIndicatorDetailVO indicatorDetail = evalPoolIndicatorDetailService.getStaffIndicatorValue(evalPoolId, evalGroupIndicatorId, dataDate);
251 252 BV.notNull(indicatorDetail, "考评指标明细不存在");
252 253  
253 254 //命中记录
254 255 Optional<EvalGroupIndicatorHitLog> hitLog = evalGroupIndicatorHitLogService.getHitLog(evalGroupIndicatorId,
255   - evalPoolId, EvalScopeEnum.STAFF, dataDate);
  256 + evalPoolId, scopeType, dataDate);
256 257 indicatorDetail.setHitLadderValue(hitLog.map(EvalGroupIndicatorHitLog::getHitLadderValue).orElse(BigDecimal.ZERO));
257 258 indicatorDetail.setHitCommissionValue(hitLog.map(EvalGroupIndicatorHitLog::getHitCommissionValue).orElse(BigDecimal.ZERO));
258 259 Long hitLadderId = hitLog.map(EvalGroupIndicatorHitLog::getEvalGroupIndicatorLaddersId).orElse(0L);
... ... @@ -262,14 +263,29 @@ public class EvalGroupPoolService {
262 263 indicatorDetail.setLadders(getIndicatorLadders(evalGroupIndicatorId, hitLadderId, indicatorDetail.getLaddersType()));
263 264 }
264 265  
265   - Map<ParamTypeEnum, List<EvalGroupIndicatorParamVO>> paramMap = this.getEvalGroupIndicatorParamMap(evalGroupIndicatorId, pool,dataDate);
  266 + //参数
  267 + Map<ParamTypeEnum, List<EvalGroupIndicatorParamVO>> paramMap = this.getEvalGroupIndicatorParamMap(evalGroupIndicatorId,
  268 + userId, evalPoolId, scopeType, dataDate);
266 269 indicatorDetail.setLadderParams(paramMap.getOrDefault(ParamTypeEnum.LADDER, new ArrayList<>()));
267 270 indicatorDetail.setCommissionParams(paramMap.getOrDefault(ParamTypeEnum.COMMISSION, new ArrayList<>()));
268 271  
269 272  
270 273 //条件
271   - List<EvalGroupIndicatorPreconditionVO> preconditionVOS = evalGroupIndicatorPreconditionService.getConds(evalPoolId, evalGroupIndicatorId, dataDate);
  274 + List<EvalGroupIndicatorPreconditionVO> preconditionVOS = this.getHitPreconditionVo(evalGroupIndicatorId,
  275 + userId, evalPoolId, scopeType, dataDate);
272 276 indicatorDetail.setConds(preconditionVOS);
  277 +
  278 + //处理百分数
  279 + processPercent(indicatorDetail);
  280 + return indicatorDetail;
  281 + }
  282 +
  283 + public List<EvalGroupIndicatorPreconditionVO> getHitPreconditionVo(Long evalGroupIndicatorId,
  284 + Long referId,
  285 + Long evalPoolId,
  286 + EvalScopeEnum scopeType,
  287 + LocalDate dataDate) {
  288 + List<EvalGroupIndicatorPreconditionVO> preconditionVOS = evalGroupIndicatorPreconditionService.getConds(evalPoolId, evalGroupIndicatorId, dataDate);
273 289 for (EvalGroupIndicatorPreconditionVO preconditionVO : preconditionVOS) {
274 290 //有目标记录
275 291 if (! TargetTypeEnum.NO.equals(preconditionVO.getTargetType())) {
... ... @@ -278,27 +294,29 @@ public class EvalGroupPoolService {
278 294 .eq(EvalGroupIndicatorTargetHitLog::getTargetType, IndicatorTypeEnum.PRE)
279 295 .eq(EvalGroupIndicatorTargetHitLog::getDataDate, dataDate)
280 296 .eq(EvalGroupIndicatorTargetHitLog::getPoolId, evalPoolId)
281   - .eq(EvalGroupIndicatorTargetHitLog::getScopeType, EvalScopeEnum.STAFF)
  297 + .eq(EvalGroupIndicatorTargetHitLog::getScopeType, scopeType)
282 298 .eq(EvalGroupIndicatorTargetHitLog::getYn, Boolean.TRUE)
283 299 );
284 300 Optional<EvalGroupIndicatorTargetHitLog> targetHitLog = Optional.ofNullable(evalGroupIndicatorTargetHitLog);
285 301 preconditionVO.setReachValue(targetHitLog.map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO));
286 302 preconditionVO.setIndicatorValue(targetHitLog.map(EvalGroupIndicatorTargetHitLog::getValue).orElse(BigDecimal.ZERO));
  303 + } else {
  304 + BigDecimal indicatorOriginValue = queryUserOriginValue(preconditionVO.getCode(), referId, dataDate, preconditionVO.getCodeType());
  305 + preconditionVO.setIndicatorValue(indicatorOriginValue);
287 306 }
288 307  
289 308 //条件阶梯
290 309 List<EvalGroupIndicatorPreconditionLaddersVO> preconditionLaddersVOS = evalGroupIndicatorPreconditionLaddersService.getVOS(
291 310 preconditionVO.getId(), preconditionVO.getTargetType(), preconditionVO.getDataType());
  311 + Long hitLaddersId = preconditionVO.getHitLaddersId();
292 312 for (EvalGroupIndicatorPreconditionLaddersVO preconditionLaddersVO : preconditionLaddersVOS) {
293   - if (PublicUtil.isNotEmpty(preconditionVO.getHitLaddersId()) && preconditionLaddersVO.getId().equals(preconditionVO.getHitLaddersId())) {
  313 + if (PublicUtil.isNotEmpty(hitLaddersId) && preconditionLaddersVO.getId().equals(hitLaddersId)) {
294 314 preconditionLaddersVO.setHit(Boolean.TRUE);
295 315 }
296 316 }
297 317 preconditionVO.setLadders(preconditionLaddersVOS);
298 318 }
299   - //处理百分数
300   - processPercent(indicatorDetail);
301   - return indicatorDetail;
  319 + return preconditionVOS;
302 320 }
303 321  
304 322 public List<EvalGroupIndicatorLaddersVO> getIndicatorLadders(Long evalGroupIndicatorId, Long hitLadderId, DataTypeEnum laddersType) {
... ... @@ -362,22 +380,20 @@ public class EvalGroupPoolService {
362 380 * @return
363 381 */
364 382 public Map<ParamTypeEnum, List<EvalGroupIndicatorParamVO>> getEvalGroupIndicatorParamMap(Long evalGroupIndicatorId,
365   - EvalUserPool pool,
  383 + Long referId,
  384 + Long evalPoolId,
  385 + EvalScopeEnum scopeType,
366 386 LocalDate dataDate) {
367   - Long evalPoolId = pool.getId();
368   - Long userId = pool.getUserId();
369   - Long groupId = pool.getGroupId();
370   -
371 387 List<EvalGroupIndicatorParamVO> paramVos = evalGroupIndicatorParamService.getParamVos(evalGroupIndicatorId);
372   - Map<Long, EvalGroupIndicatorTargetHitLog> paramTargetHitLogMap = this.getHitMap(evalPoolId,
373   - EvalScopeEnum.STAFF, dataDate, paramVos);
  388 + Map<Long, EvalGroupIndicatorTargetHitLog> paramTargetHitLogMap = this.getParamHitMap(evalPoolId,
  389 + scopeType, dataDate, paramVos);
374 390  
375 391 for (EvalGroupIndicatorParamVO paramVO : paramVos) {
376 392 String code = paramVO.getCode();
377 393 Long paramId = paramVO.getId();
378 394 //无目标
379 395 if (TargetTypeEnum.NO.equals(paramVO.getTargetType())) {
380   - BigDecimal indicatorOriginValue = queryUserOriginValue(code, userId, dataDate, paramVO.getCodeType());
  396 + BigDecimal indicatorOriginValue = queryUserOriginValue(code, referId, dataDate, paramVO.getCodeType());
381 397 paramVO.setIndicatorValue(indicatorOriginValue);
382 398 continue;
383 399 }
... ... @@ -393,10 +409,10 @@ public class EvalGroupPoolService {
393 409 return indicatorParamMap;
394 410 }
395 411  
396   - public Map<Long, EvalGroupIndicatorTargetHitLog> getHitMap(Long poolId,
397   - EvalScopeEnum scopeType,
398   - LocalDate dataDate,
399   - List<EvalGroupIndicatorParamVO> paramVos) {
  412 + public Map<Long, EvalGroupIndicatorTargetHitLog> getParamHitMap(Long poolId,
  413 + EvalScopeEnum scopeType,
  414 + LocalDate dataDate,
  415 + List<EvalGroupIndicatorParamVO> paramVos) {
400 416 List<Long> hasTargetParamIds = paramVos.stream()
401 417 .filter(param -> (! TargetTypeEnum.NO.equals(param.getTargetType())))
402 418 .map(EvalGroupIndicatorParamVO::getId).collect(Collectors.toList());
... ... @@ -405,6 +421,7 @@ public class EvalGroupPoolService {
405 421 if (PublicUtil.isNotEmpty(hasTargetParamIds)) {
406 422 List<EvalGroupIndicatorTargetHitLog> targetHitLogs = evalGroupIndicatorTargetHitLogService.list(Wrappers.<EvalGroupIndicatorTargetHitLog>lambdaQuery()
407 423 .in(EvalGroupIndicatorTargetHitLog::getReferId, hasTargetParamIds)
  424 + .in(EvalGroupIndicatorTargetHitLog::getTargetType, IndicatorTypeEnum.EXAMINE)
408 425 .eq(EvalGroupIndicatorTargetHitLog::getDataDate, dataDate)
409 426 .eq(EvalGroupIndicatorTargetHitLog::getPoolId, poolId)
410 427 .eq(EvalGroupIndicatorTargetHitLog::getScopeType, scopeType)
... ... @@ -447,31 +464,20 @@ public class EvalGroupPoolService {
447 464 public EvalPoolRewardDetailVO getStaffRewardDetail(Long evalPoolId, Long evalGroupRewardId, LocalDate dataDate) {
448 465 EvalUserPool pool = evalUserPoolService.getById(evalPoolId);
449 466 BV.notNull(pool, "考评池不存在");
  467 + Long userId = pool.getUserId();
450 468  
451 469 EvalPoolRewardDetailVO reward = evalPoolRewardDetailService.getStaffRewardValue(evalPoolId, evalGroupRewardId, dataDate);
452 470 BV.notNull(reward, "考评奖惩明细不存在");
453 471  
454 472 //命中记录
455   - EvalGroupRewardHitLog indicatorHitLog = evalGroupRewardHitLogService.getOne(Wrappers.<EvalGroupRewardHitLog>lambdaQuery()
456   - .eq(EvalGroupRewardHitLog::getEvalGroupRewardId, reward.getEvalGroupRewardId())
457   - .eq(EvalGroupRewardHitLog::getDataDate, dataDate)
458   - .eq(EvalGroupRewardHitLog::getPoolId, evalPoolId)
459   - .eq(EvalGroupRewardHitLog::getScopeType, EvalScopeEnum.STAFF)
460   - .eq(EvalGroupRewardHitLog::getYn, Boolean.TRUE)
461   - );
462   - if (PublicUtil.isEmpty(indicatorHitLog)) {
463   - reward.setHitLadderValue(BigDecimal.ZERO);
464   - reward.setHitCommissionValue(BigDecimal.ZERO);
465   - } else {
466   - }
467   - Optional<EvalGroupRewardHitLog> hitLog = Optional.ofNullable(indicatorHitLog);
  473 + Optional<EvalGroupRewardHitLog> hitLog = this.getRewardHitLog(evalGroupRewardId, evalPoolId, EvalScopeEnum.STAFF, dataDate);
468 474 reward.setHitLadderValue(hitLog.map(EvalGroupRewardHitLog::getHitLadderValue).orElse(BigDecimal.ZERO));
469 475 reward.setHitCommissionValue(hitLog.map(EvalGroupRewardHitLog::getHitCommissionValue).orElse(BigDecimal.ZERO));
470 476 Long hitLadderId = hitLog.map(EvalGroupRewardHitLog::getEvalGroupRewardLaddersId).orElse(0L);
471 477  
472 478 //参数
473 479 Map<ParamTypeEnum, List<EvalGroupRewardParamVO>> rewardParamMap = this.getEvalGroupRewardParamMap(evalGroupRewardId,
474   - pool, dataDate);
  480 + evalPoolId, EvalScopeEnum.STAFF, userId, dataDate);
475 481 reward.setLadderParams(rewardParamMap.getOrDefault(ParamTypeEnum.LADDER, new ArrayList<>()));
476 482 reward.setCommissionParams(rewardParamMap.getOrDefault(ParamTypeEnum.COMMISSION, new ArrayList<>()));
477 483  
... ... @@ -479,13 +485,24 @@ public class EvalGroupPoolService {
479 485 reward.setLadders(this.getLadderVos(reward, hitLadderId));
480 486  
481 487 //条件
482   - reward.setConds(getConds(evalPoolId, pool.getUserId(), evalGroupRewardId, dataDate));
  488 + reward.setConds(getConds(evalPoolId, userId, evalGroupRewardId, dataDate));
483 489  
484 490 //处理百分数
485 491 processRewardPercent(reward);
486 492 return reward;
487 493 }
488 494  
  495 + public Optional<EvalGroupRewardHitLog> getRewardHitLog(Long evalGroupRewardId, Long evalPoolId, EvalScopeEnum scopeType, LocalDate dataDate) {
  496 + EvalGroupRewardHitLog indicatorHitLog = evalGroupRewardHitLogService.getOne(Wrappers.<EvalGroupRewardHitLog>lambdaQuery()
  497 + .eq(EvalGroupRewardHitLog::getEvalGroupRewardId, evalGroupRewardId)
  498 + .eq(EvalGroupRewardHitLog::getDataDate, dataDate)
  499 + .eq(EvalGroupRewardHitLog::getPoolId, evalPoolId)
  500 + .eq(EvalGroupRewardHitLog::getScopeType, scopeType)
  501 + .eq(EvalGroupRewardHitLog::getYn, Boolean.TRUE)
  502 + );
  503 + return Optional.ofNullable(indicatorHitLog);
  504 + }
  505 +
489 506 public List<EvalGroupRewardPreconditionVO> getConds(Long poolId, Long userId, Long evalGroupRewardId, LocalDate dataDate) {
490 507 List<EvalGroupRewardPrecondition> preconditions = evalGroupRewardPreconditionService.list(Wrappers.<EvalGroupRewardPrecondition>lambdaQuery()
491 508 .eq(EvalGroupRewardPrecondition::getEvalGroupRewardId, evalGroupRewardId)
... ... @@ -529,7 +546,6 @@ public class EvalGroupPoolService {
529 546 .eq(EvalGroupRewardLadders::getYn, Boolean.TRUE)
530 547 );
531 548 List<EvalGroupRewardLaddersVO> rewardLaddersVOS = new ArrayList<>();
532   -// reward.getL
533 549 for (EvalGroupRewardLadders rewardLadder : rewardLadders) {
534 550 EvalGroupRewardLaddersVO rewardLaddersVO = PublicUtil.copy(rewardLadder, EvalGroupRewardLaddersVO.class);
535 551 rewardLaddersVO.processPercent(reward.getCalMethod(), reward.getRankType(), reward.getLaddersType());
... ... @@ -540,9 +556,10 @@ public class EvalGroupPoolService {
540 556 }
541 557  
542 558 public Map<ParamTypeEnum, List<EvalGroupRewardParamVO>> getEvalGroupRewardParamMap(Long evalGroupRewardId,
543   - EvalUserPool pool, LocalDate dataDate) {
544   - Long evalPoolId = pool.getId();
545   - Long userId = pool.getUserId();
  559 + Long evalPoolId,
  560 + EvalScopeEnum scopeType,
  561 + Long referId,
  562 + LocalDate dataDate) {
546 563  
547 564 List<EvalGroupRewardParam> params = evalGroupRewardParamService.list(Wrappers.<EvalGroupRewardParam>lambdaQuery()
548 565 .eq(EvalGroupRewardParam::getEvalGroupRewardId, evalGroupRewardId)
... ... @@ -560,7 +577,7 @@ public class EvalGroupPoolService {
560 577 .in(EvalGroupRewardTargetHitLog::getReferId, hasTargetParamIds)
561 578 .eq(EvalGroupRewardTargetHitLog::getDataDate, dataDate)
562 579 .eq(EvalGroupRewardTargetHitLog::getPoolId, evalPoolId)
563   - .eq(EvalGroupRewardTargetHitLog::getScopeType, EvalScopeEnum.STAFF)
  580 + .eq(EvalGroupRewardTargetHitLog::getScopeType, scopeType)
564 581 .eq(EvalGroupRewardTargetHitLog::getYn, Boolean.TRUE)
565 582 );
566 583 paramTargetHitLogMap = targetHitLogs.stream()
... ... @@ -573,7 +590,7 @@ public class EvalGroupPoolService {
573 590 Long paramId = paramVO.getId();
574 591 //无目标
575 592 if (TargetTypeEnum.NO.equals(paramVO.getTargetType())) {
576   - BigDecimal indicatorOriginValue = queryUserOriginValue(code, userId, dataDate, paramVO.getCodeType());
  593 + BigDecimal indicatorOriginValue = queryUserOriginValue(code, referId, dataDate, paramVO.getCodeType());
577 594 paramVO.setIndicatorValue(indicatorOriginValue);
578 595 continue;
579 596 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorReportService.java
... ... @@ -27,6 +27,7 @@ import lombok.RequiredArgsConstructor;
27 27 import lombok.extern.slf4j.Slf4j;
28 28 import org.apache.commons.collections4.map.MultiKeyMap;
29 29 import org.springframework.stereotype.Service;
  30 +import org.springframework.transaction.annotation.Transactional;
30 31 import org.springframework.web.multipart.MultipartFile;
31 32  
32 33 import javax.servlet.http.HttpServletRequest;
... ... @@ -119,6 +120,7 @@ public class EvalIndicatorReportService {
119 120 return detailVOS;
120 121 }
121 122  
  123 + @Transactional(rollbackFor = Exception.class)
122 124 public List<StaffIndicatorValueVO> uploadStaffIndicator(MultipartFile file, LoginAuthBean user) {
123 125 MultiKeyMap<String, EvalUserPool> staffPostMap = getShopUserPoolMap(user);
124 126  
... ... @@ -143,6 +145,7 @@ public class EvalIndicatorReportService {
143 145 indicatorValues = reader.readAll(StaffIndicatorValueVO.class);
144 146 for (StaffIndicatorValueVO staff : indicatorValues) {
145 147 EvalIndicatorImportDetail importDetail = new EvalIndicatorImportDetail();
  148 + importDetail.setDataDate(LocalDate.parse(staff.getDataDate()));
146 149 if (staffPostMap.containsKey(staff.getShopName(), staff.getStaffName())) {
147 150 EvalUserPool userPool = staffPostMap.get(staff.getShopName(), staff.getStaffName());
148 151 importDetail.setUserId(userPool.getUserId());
... ... @@ -183,6 +186,7 @@ public class EvalIndicatorReportService {
183 186 return null;
184 187 }
185 188  
  189 + @Transactional(rollbackFor = Exception.class)
186 190 public List<ShopIndicatorValueVO> uploadShopIndicator(MultipartFile file, LoginAuthBean user) {
187 191 Map<String, EvalShopPool> shopPoolMap = this.getShopPoolMap(user);
188 192  
... ... @@ -207,6 +211,7 @@ public class EvalIndicatorReportService {
207 211 indicatorValues = reader.readAll(ShopIndicatorValueVO.class);
208 212 for (ShopIndicatorValueVO shop : indicatorValues) {
209 213 EvalIndicatorImportDetail importDetail = new EvalIndicatorImportDetail();
  214 + importDetail.setDataDate(LocalDate.parse(shop.getDataDate()));
210 215 if (shopPoolMap.containsKey(shop.getShopName())) {
211 216 EvalShopPool shopPool = shopPoolMap.get(shop.getShopName());
212 217 importDetail.setShopId(shopPool.getShopId());
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorValueBizService.java
... ... @@ -437,13 +437,15 @@ public class EvalIndicatorValueBizService {
437 437 .in(EvalGroup::getId, evalGroupImportBO.getEvalGroupIds())
438 438 .eq(EvalGroup::getYn, Boolean.TRUE)
439 439 );
  440 +
440 441 BV.isNotEmpty(evalGroups, "考评组不存在,请重试");
441 442 EvalIndicator evalIndicator = evalIndicatorService.queryByCode(evalGroupImportBO.getEvalIndicatorCode(), Boolean.FALSE);
442 443 BV.notNull(evalIndicator, "考评指标不存在,请重试");
443 444  
444   - List<Long> allShopIds = evalGroups.stream().flatMap(evalGroup -> evalGroup.getShopIds().stream()).distinct().collect(Collectors.toList());
  445 + Set<Long> allShopIds = evalGroups.stream().flatMap(evalGroup -> evalGroup.getShopIds().stream()).collect(Collectors.toSet());
445 446 List<Long> evalGroupIds = evalGroups.stream().map(evalGroup -> evalGroup.getId()).collect(Collectors.toList());
446   - List<RpcUserRoleInfoDTO> userRoleInfos = this.getUserEnableRoleInfos(evalIndicator.getRoleCode(), allShopIds);
  447 + List<RpcUserRoleInfoDTO> userRoleInfos = this.getUserEnableRoleInfos(evalIndicator.getRoleCode(), new ArrayList<>(allShopIds));
  448 +
447 449 //没找到对应人员
448 450 if (PublicUtil.isEmpty(userRoleInfos)) {
449 451 return;
... ... @@ -451,15 +453,18 @@ public class EvalIndicatorValueBizService {
451 453 List<EvalIndicatorImport> indicatorImports = new ArrayList<>();
452 454 for (RpcUserRoleInfoDTO userRoleInfo : userRoleInfos) {
453 455  
454   - Set<Long> manageShopIds = userRoleInfo.getRangeList().stream().map(RpcUserRoleShopDTO::getShopId).collect(Collectors.toSet());
455   - if (PublicUtil.isEmpty(manageShopIds)) {
  456 + //考评组门店、管理门店取并集
  457 + Set<Long> evalManageShopIds = userRoleInfo.getRangeList().stream()
  458 + .filter(range -> allShopIds.contains(range.getShopId()))
  459 + .map(RpcUserRoleShopDTO::getShopId).collect(Collectors.toSet());
  460 + if (PublicUtil.isEmpty(evalManageShopIds)) {
456 461 continue;
457 462 }
458   - EvalReportVO reportVO = this.getEvalImportSnapShoot(evalGroups, manageShopIds, LocalDate.now());
  463 + EvalReportVO reportVO = this.getEvalImportSnapShoot(evalGroups, evalManageShopIds, LocalDate.now());
459 464  
460 465 EvalIndicatorImport indicatorImport = this.createImport(evalIndicator, userRoleInfo, groupId);
461 466 indicatorImport.setContent(JSON.toJSONString(reportVO));
462   - indicatorImport.setShopIds(new ArrayList<>(manageShopIds));
  467 + indicatorImport.setShopIds(new ArrayList<>(evalManageShopIds));
463 468 indicatorImport.setEvalGroupIds(evalGroupIds);
464 469 indicatorImport.setDataDate(LocalDate.now());
465 470 indicatorImport.setExpireTime(evalGroupImportBO.getImportExpireTime());
... ... @@ -610,9 +615,11 @@ public class EvalIndicatorValueBizService {
610 615 .flatMap(evalGroup -> evalGroup.getShopIds().stream())
611 616 .filter(shopId -> manageShopIds.contains(shopId))
612 617 .distinct().collect(Collectors.toList());
613   - List<EvalGroupUser> users = evalGroupUserBizService.fetchBuildImportUser(postId, shopIds, dataDate);
614   - if (PublicUtil.isNotEmpty(users)) {
615   - importUsers.addAll(PublicUtil.copyList(users, EvalIndicatorImportUserVO.class));
  618 + if (PublicUtil.isNotEmpty(shopIds)) {
  619 + List<EvalGroupUser> users = evalGroupUserBizService.fetchBuildImportUser(postId, shopIds, dataDate);
  620 + if (PublicUtil.isNotEmpty(users)) {
  621 + importUsers.addAll(PublicUtil.copyList(users, EvalIndicatorImportUserVO.class));
  622 + }
616 623 }
617 624 }
618 625 reportVO.setUsers(importUsers);
... ... @@ -620,13 +627,17 @@ public class EvalIndicatorValueBizService {
620 627  
621 628 List<EvalGroup> shopGroups = evalScopeEnumMap.get(EvalScopeEnum.SHOP);
622 629 if (PublicUtil.isNotEmpty(shopGroups)) {
623   - List<Long> shopGroupIds = shopGroups.stream().flatMap(evalGroup -> evalGroup.getShopIds().stream()).distinct().collect(Collectors.toList());
624   - List<ShopDTO> shops = oopRpcService.queryShops(shopGroupIds);
625   - List<EvalShopVO> evalShops = new ArrayList<>();
626   - for (ShopDTO shop : shops) {
627   - evalShops.add(new EvalShopVO(shop.getId(), shop.getShortName()));
  630 + List<Long> shopGroupIds = shopGroups.stream().flatMap(evalGroup -> evalGroup.getShopIds().stream())
  631 + .filter(shopId -> manageShopIds.contains(shopId))
  632 + .distinct().collect(Collectors.toList());
  633 + if (PublicUtil.isNotEmpty(shopGroupIds)) {
  634 + List<ShopDTO> shops = oopRpcService.queryShops(shopGroupIds);
  635 + List<EvalShopVO> evalShops = new ArrayList<>();
  636 + for (ShopDTO shop : shops) {
  637 + evalShops.add(new EvalShopVO(shop.getId(), shop.getShortName()));
  638 + }
  639 + reportVO.setShops(evalShops);
628 640 }
629   - reportVO.setShops(evalShops);
630 641 }
631 642  
632 643 return reportVO;
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalPoolService.java 0 → 100644
  1 +package cn.fw.morax.service.biz.eval;
  2 +
  3 +import cn.fw.common.page.AppPage;
  4 +import cn.fw.morax.common.constant.Constant;
  5 +import cn.fw.morax.common.utils.PublicUtil;
  6 +import cn.fw.morax.common.utils.StringUtils;
  7 +import cn.fw.morax.domain.dto.query.EvalPoolQueryDTO;
  8 +import cn.fw.morax.domain.dto.query.KpiPoolQueryDTO;
  9 +import cn.fw.morax.domain.vo.eval.EvalShopPoolVO;
  10 +import cn.fw.morax.domain.vo.eval.EvalUserPoolVO;
  11 +import cn.fw.morax.domain.vo.kpi.KpiPoolVO;
  12 +import cn.fw.morax.service.biz.CommonService;
  13 +import cn.fw.morax.service.data.eval.EvalGroupUserService;
  14 +import cn.fw.morax.service.data.eval.EvalUserPoolService;
  15 +import com.alibaba.fastjson.JSON;
  16 +import lombok.RequiredArgsConstructor;
  17 +import lombok.extern.slf4j.Slf4j;
  18 +import org.springframework.stereotype.Service;
  19 +
  20 +import java.math.BigDecimal;
  21 +import java.math.RoundingMode;
  22 +import java.time.YearMonth;
  23 +import java.util.Arrays;
  24 +import java.util.List;
  25 +import java.util.Objects;
  26 +import java.util.stream.Collectors;
  27 +
  28 +/**
  29 + * @author jiangchao
  30 + * @des:
  31 + * @date 2023/2/24 9:04
  32 + */
  33 +@Service
  34 +@Slf4j
  35 +@RequiredArgsConstructor
  36 +public class EvalPoolService {
  37 +
  38 + private final EvalGroupUserService evalGroupUserService;
  39 + private final EvalUserPoolService evalUserPoolService;
  40 + private final CommonService commonService;
  41 +
  42 +
  43 + /**
  44 + * 获取绩效池
  45 + *
  46 + * @param dto
  47 + * @return
  48 + */
  49 + public AppPage<EvalUserPoolVO> queryUserPool(EvalPoolQueryDTO dto) {
  50 + if (PublicUtil.isNotEmpty(dto.getManagerUserId())) {
  51 + dto.setManagerStaffList(commonService.queryManageStaffIds(dto.getManagerUserId(), dto.getMonthly()));
  52 + } else {
  53 + dto.setManagerStaffList(commonService.queryManageStaffIds(dto.getCurrentUserId(), dto.getMonthly()));
  54 + }
  55 + if (PublicUtil.isEmpty(dto.getManagerStaffList())) {
  56 + return AppPage.empty(dto);
  57 + }
  58 +
  59 + prepareParams(dto);
  60 + AppPage<EvalUserPoolVO> page = AppPage.empty(dto);
  61 + log.info("绩效池查询参数:{}", JSON.toJSONString(dto));
  62 + long total = evalUserPoolService.queryPagePoolTotal(dto);
  63 + if (total > 0) {
  64 + page.setTotal(total);
  65 + List<EvalUserPoolVO> userPoolVOS = evalUserPoolService.queryPagePool(dto);
  66 + for (EvalUserPoolVO poolVO : userPoolVOS) {
  67 + BigDecimal staffScoreRatio = (BigDecimal.ZERO.compareTo(poolVO.getTotalScore()) == 0) ? BigDecimal.ZERO :
  68 + poolVO.getScore().divide(poolVO.getTotalScore(), 2, RoundingMode.DOWN).multiply(Constant.ONE_HUNDRED);
  69 + poolVO.setScoreRatio(staffScoreRatio);
  70 + }
  71 + page.setData(userPoolVOS);
  72 + }
  73 + return page;
  74 + }
  75 +
  76 + /**
  77 + * 获取绩效池
  78 + *
  79 + * @param dto
  80 + * @return
  81 + */
  82 + public AppPage<EvalShopPoolVO> queryShopPool(EvalPoolQueryDTO dto) {
  83 + if (PublicUtil.isNotEmpty(dto.getManagerUserId())) {
  84 + dto.setManagerStaffList(commonService.queryManageStaffIds(dto.getManagerUserId(), dto.getMonthly()));
  85 + } else {
  86 + dto.setManagerStaffList(commonService.queryManageStaffIds(dto.getCurrentUserId(), dto.getMonthly()));
  87 + }
  88 + if (PublicUtil.isEmpty(dto.getManagerStaffList())) {
  89 + return AppPage.empty(dto);
  90 + }
  91 +
  92 + prepareParams(dto);
  93 + AppPage<EvalUserPoolVO> page = AppPage.empty(dto);
  94 + log.info("绩效池查询参数:{}", JSON.toJSONString(dto));
  95 + long total = evalUserPoolService.queryPagePoolTotal(dto);
  96 + if (total > 0) {
  97 + page.setTotal(total);
  98 + List<EvalUserPoolVO> userPoolVOS = evalUserPoolService.queryPagePool(dto);
  99 + for (EvalUserPoolVO poolVO : userPoolVOS) {
  100 + BigDecimal staffScoreRatio = (BigDecimal.ZERO.compareTo(poolVO.getTotalScore()) == 0) ? BigDecimal.ZERO :
  101 + poolVO.getScore().divide(poolVO.getTotalScore(), 2, RoundingMode.DOWN).multiply(Constant.ONE_HUNDRED);
  102 + poolVO.setScoreRatio(staffScoreRatio);
  103 + }
  104 + page.setData(userPoolVOS);
  105 + }
  106 + return null;
  107 + }
  108 +
  109 + /**
  110 + * 参数赋值
  111 + *
  112 + * @param queryVO
  113 + */
  114 + private void prepareParams(EvalPoolQueryDTO queryVO) {
  115 + if (Objects.isNull(queryVO.getMonthly())) {
  116 + queryVO.setMonthly(YearMonth.now());
  117 + }
  118 + if (Objects.nonNull(queryVO.getOrder()) && StringUtils.isValid(queryVO.getOrderAtt())) {
  119 + StringBuilder sb = new StringBuilder(" order by ");
  120 + sb.append(StringUtils.toColumnName(queryVO.getOrderAtt()).toLowerCase());
  121 + if (queryVO.getOrder() == 1) {
  122 + sb.append(" asc ");
  123 + } else {
  124 + sb.append(" desc ");
  125 + }
  126 + queryVO.setOrderString(sb.toString());
  127 + }
  128 + if (PublicUtil.isNotEmpty(queryVO.getQueryStaffs())) {
  129 + List<Long> queryStaffIds = Arrays.stream(queryVO.getQueryStaffs().split(",")).map(Long::parseLong).collect(Collectors.toList());
  130 + queryVO.getManagerStaffList().retainAll(queryStaffIds);
  131 + }
  132 + }
  133 +
  134 +
  135 +}
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/EvalUserPoolService.java
... ... @@ -3,7 +3,10 @@ package cn.fw.morax.service.data.eval;
3 3  
4 4 import cn.fw.morax.domain.db.eval.EvalShopPool;
5 5 import cn.fw.morax.domain.db.eval.EvalUserPool;
  6 +import cn.fw.morax.domain.dto.query.EvalPoolQueryDTO;
  7 +import cn.fw.morax.domain.dto.query.KpiPoolQueryDTO;
6 8 import cn.fw.morax.domain.vo.eval.EvalUserPoolVO;
  9 +import cn.fw.morax.domain.vo.kpi.KpiPoolVO;
7 10 import com.baomidou.mybatisplus.extension.service.IService;
8 11  
9 12 import java.time.YearMonth;
... ... @@ -22,4 +25,14 @@ public interface EvalUserPoolService extends IService&lt;EvalUserPool&gt; {
22 25 List<EvalUserPool> getLastPool(YearMonth monthly, Long groupId);
23 26  
24 27 List<EvalUserPoolVO> getPools(YearMonth monthly, Long userId);
  28 +
  29 + long queryPagePoolTotal(EvalPoolQueryDTO dto);
  30 +
  31 + /**
  32 + * 考评池分页查询
  33 + *
  34 + * @param dto
  35 + * @return
  36 + */
  37 + List<EvalUserPoolVO> queryPagePool(EvalPoolQueryDTO dto);
25 38 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/impl/EvalUserPoolServiceImpl.java
... ... @@ -4,6 +4,7 @@ package cn.fw.morax.service.data.eval.impl;
4 4 import cn.fw.morax.dao.eval.EvalUserPoolDao;
5 5 import cn.fw.morax.domain.db.eval.EvalShopPool;
6 6 import cn.fw.morax.domain.db.eval.EvalUserPool;
  7 +import cn.fw.morax.domain.dto.query.EvalPoolQueryDTO;
7 8 import cn.fw.morax.domain.vo.eval.EvalUserPoolVO;
8 9 import cn.fw.morax.service.data.eval.EvalUserPoolService;
9 10 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
... ... @@ -32,4 +33,17 @@ public class EvalUserPoolServiceImpl extends ServiceImpl&lt;EvalUserPoolDao, EvalUs
32 33 public List<EvalUserPoolVO> getPools(YearMonth monthly, Long userId) {
33 34 return this.baseMapper.getPools(monthly, userId);
34 35 }
  36 +
  37 + @Override
  38 + public long queryPagePoolTotal(EvalPoolQueryDTO dto) {
  39 + return this.baseMapper.queryPagePoolTotal(dto);
  40 + }
  41 +
  42 + @Override
  43 + public List<EvalUserPoolVO> queryPagePool(EvalPoolQueryDTO dto) {
  44 + Integer pageSize = dto.getPageSize();
  45 + Integer current = dto.getCurrent();
  46 + int startIndex = (current.equals(0) ? 0 : (current - 1) * pageSize);
  47 + return this.getBaseMapper().queryPagePool(dto, startIndex, pageSize);
  48 + }
35 49 }
... ...