Commit 62ff59ec1cd5dbfa30f8b83507568340eae9ea83

Authored by 姜超
2 parents 6216249c c043db4c

Merge branch 'eval-detail' into test

fw-morax-dao/src/main/resources/mapper/eval/EvalGroupUserMapper.xml
... ... @@ -3,7 +3,7 @@
3 3 <mapper namespace="cn.fw.morax.dao.eval.EvalGroupUserDao">
4 4  
5 5 <sql id="all_columns">
6   - id, egc, eval_id, eval_group_id, user_id, user_name, post_id, post_name, shop_id,
  6 + id, eval_group_rank_id, eval_group_rank_stage_id, eval_group_id, user_id, user_name, post_id, post_name, shop_id,
7 7 shop_name, ignored, ignore_cause, ignore_cause_desc, anticipated_date,
8 8 remark, data_date, group_id, yn, create_time, update_time
9 9 </sql>
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java
... ... @@ -91,6 +91,11 @@ public class EvalGroupUserShop {
91 91 private BigDecimal reward;
92 92  
93 93 /**
  94 + * 是否计不入考评考核
  95 + */
  96 + private Boolean ignored;
  97 +
  98 + /**
94 99 * 指标总分
95 100 */
96 101 private BigDecimal indicatorTotalScore;
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroupIndicatorParam.java
... ... @@ -113,7 +113,7 @@ public class EvalGroupIndicatorParam extends BaseAuditableTimeEntity&lt;EvalGroupIn
113 113 */
114 114 public void dividePercent() {
115 115 this.setProportion(this.getProportion().divide(Constant.ONE_HUNDRED, 4, RoundingMode.HALF_UP));
116   - if (PublicUtil.isNotEmpty(this.getExtraTargetValue()) &&
  116 + if (PublicUtil.isNotEmpty(this.getTargetValue()) &&
117 117 PublicUtil.isNotEmpty(this.getTargetType()) &&
118 118 TargetTypeEnum.RATIO.equals(this.getTargetType())) {
119 119 this.setTargetValue(this.getTargetValue().divide(Constant.ONE_HUNDRED, 4, RoundingMode.HALF_UP));
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/dto/eval/EvalUserRankDTO.java 0 → 100644
  1 +package cn.fw.morax.domain.dto.eval;
  2 +
  3 +import cn.fw.morax.common.utils.PublicUtil;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Builder;
  6 +import lombok.Data;
  7 +import lombok.NoArgsConstructor;
  8 +
  9 +import javax.validation.constraints.NotNull;
  10 +import java.time.LocalDate;
  11 +import java.time.YearMonth;
  12 +
  13 +/**
  14 + * <p>
  15 + * 绩效组排名配置
  16 + * </p>
  17 + *
  18 + * @author jiangchao
  19 + * @since 2022-09-26
  20 + */
  21 +@Data
  22 +@Builder
  23 +@NoArgsConstructor
  24 +@AllArgsConstructor
  25 +public class EvalUserRankDTO {
  26 +
  27 + /**
  28 + * 用户id
  29 + */
  30 +// @NotNull(message = "用户id不能为空")
  31 + private Long userId;
  32 +
  33 + /**
  34 + * 门店
  35 + */
  36 + @NotNull(message = "门店")
  37 + private Long shopId;
  38 +
  39 + /**
  40 + * 岗位
  41 + */
  42 + @NotNull(message = "岗位")
  43 + private Long postId;
  44 +
  45 + /**
  46 + * 考评排名组id
  47 + */
  48 + @NotNull(message = "考评排名组id")
  49 + private Long evalGroupRankId;
  50 +
  51 + /**
  52 + * 月份
  53 + */
  54 + private YearMonth monthly;
  55 +
  56 + public void initMonthly() {
  57 + if (PublicUtil.isEmpty(this.monthly)) {
  58 + this.monthly = YearMonth.now();
  59 + }
  60 + }
  61 +
  62 +}
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/EvalPoolVO.java 0 → 100644
  1 +package cn.fw.morax.domain.vo;
  2 +
  3 +import lombok.Data;
  4 +
  5 +import java.util.List;
  6 +
  7 +/**
  8 + * @author jiangchao
  9 + * @des:
  10 + * @date 2023/5/22 11:35
  11 + */
  12 +@Data
  13 +public class EvalPoolVO {
  14 +
  15 + /**
  16 + * 用户id
  17 + */
  18 + private Long userId;
  19 + /**
  20 + * 用户名称
  21 + */
  22 + private String userName;
  23 + /**
  24 + * 考评选择
  25 + */
  26 + private List<EvalSelectorVO> evalSelectors;
  27 +
  28 + public EvalPoolVO() {
  29 + }
  30 +
  31 + public EvalPoolVO(Long userId, String userName, List<EvalSelectorVO> evalSelectors) {
  32 + this.userId = userId;
  33 + this.userName = userName;
  34 + this.evalSelectors = evalSelectors;
  35 + }
  36 +}
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/EvalSelectorVO.java 0 → 100644
  1 +package cn.fw.morax.domain.vo;
  2 +
  3 +import cn.fw.morax.domain.vo.eval.EvalUserGroupRankVO;
  4 +import lombok.Builder;
  5 +import lombok.Data;
  6 +import lombok.EqualsAndHashCode;
  7 +
  8 +import javax.validation.constraints.NotNull;
  9 +import java.math.BigDecimal;
  10 +import java.util.List;
  11 +
  12 +/**
  13 + * @author : kurisu
  14 + * @version : 1.0
  15 + * @className : SelectorVO
  16 + * @description : 绩效\薪酬池选项
  17 + * @date : 2022-05-06 11:23
  18 + */
  19 +@Data
  20 +@EqualsAndHashCode
  21 +public class EvalSelectorVO {
  22 + /**
  23 + * 名称
  24 + */
  25 + private String name;
  26 +
  27 + /**
  28 + * 门店
  29 + */
  30 + @NotNull(message = "门店")
  31 + private Long shopId;
  32 +
  33 + /**
  34 + * 岗位
  35 + */
  36 + @NotNull(message = "岗位")
  37 + private Long postId;
  38 +
  39 + /**
  40 + * 排名
  41 + */
  42 + private List<EvalUserGroupRankVO> ranks;
  43 +
  44 +
  45 + public EvalSelectorVO() {
  46 + }
  47 +
  48 + public EvalSelectorVO(String name, List<EvalUserGroupRankVO> ranks) {
  49 + this.name = name;
  50 + this.ranks = ranks;
  51 + }
  52 +}
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalUserGroupRankVO.java 0 → 100644
  1 +package cn.fw.morax.domain.vo.eval;
  2 +
  3 +import cn.fw.morax.common.constant.Constant;
  4 +import cn.fw.morax.common.utils.PublicUtil;
  5 +import cn.fw.morax.domain.enums.EvalTypeEnum;
  6 +import cn.fw.morax.domain.enums.KpiIgnoreCauseEnum;
  7 +import lombok.Data;
  8 +import lombok.EqualsAndHashCode;
  9 +
  10 +import java.math.BigDecimal;
  11 +import java.time.LocalDate;
  12 +import java.time.YearMonth;
  13 +import java.util.List;
  14 +
  15 +/**
  16 + * <p>
  17 + * 考评池
  18 + * </p>
  19 + *
  20 + * @author jiangchao
  21 + * @since 2022-12-09
  22 + */
  23 +@Data
  24 +@EqualsAndHashCode(callSuper = false)
  25 +public class EvalUserGroupRankVO {
  26 +
  27 + private static final long serialVersionUID = 1L;
  28 +
  29 + /**
  30 + * 考评排名组id
  31 + */
  32 + private Long id;
  33 +
  34 + /**
  35 + * 考评组编码
  36 + */
  37 + private String evalGroupRankName;
  38 +
  39 + /**
  40 + * 考评组id
  41 + */
  42 + private Long evalGroupRankId;
  43 +
  44 + /**
  45 + * 考评得分率
  46 + */
  47 + private BigDecimal scoreRatio;
  48 + /**
  49 + * 奖惩
  50 + */
  51 + private BigDecimal reward;
  52 +
  53 + /**
  54 + * 考评得分率(格式化)
  55 + */
  56 + private String scoreRatioFormat;
  57 +
  58 +
  59 + public void convertScoreRatio() {
  60 + if (PublicUtil.isNotEmpty(this.getScoreRatio())) {
  61 + this.setScoreRatio(this.getScoreRatio().multiply(Constant.ONE_HUNDRED));
  62 + }
  63 + }
  64 +}
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalUserRankStageVO.java 0 → 100644
  1 +package cn.fw.morax.domain.vo.eval;
  2 +
  3 +import lombok.Data;
  4 +import lombok.EqualsAndHashCode;
  5 +
  6 +import java.time.LocalDate;
  7 +import java.util.List;
  8 +
  9 +/**
  10 + * <p>
  11 + * 考评组
  12 + * </p>
  13 + *
  14 + * @author jiangchao
  15 + * @since 2022-12-09
  16 + */
  17 +@Data
  18 +@EqualsAndHashCode(callSuper = false)
  19 +public class EvalUserRankStageVO {
  20 +
  21 + /**
  22 + * 主键id
  23 + */
  24 + private Long id;
  25 + /**
  26 + * 阶段名称
  27 + */
  28 + private String name;
  29 +
  30 + /**
  31 + * 考评排名组id
  32 + */
  33 + private Long evalGroupRankId;
  34 +
  35 + /**
  36 + * 生效时间
  37 + */
  38 + private LocalDate beginTime;
  39 +
  40 + /**
  41 + * 结束时间
  42 + */
  43 + private LocalDate overTime;
  44 +
  45 + /**
  46 + * 考评池
  47 + */
  48 + private EvalUserPoolVO pool;
  49 +
  50 +
  51 +}
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/controller/app/EvalPoolController.java
... ... @@ -9,9 +9,11 @@ import cn.fw.common.web.auth.annotation.CurrentUser;
9 9 import cn.fw.data.base.domain.common.Message;
10 10 import cn.fw.morax.common.utils.PublicUtil;
11 11 import cn.fw.morax.domain.dto.eval.EvalGroupIndicatorRankDTO;
  12 +import cn.fw.morax.domain.dto.eval.EvalUserRankDTO;
12 13 import cn.fw.morax.domain.dto.query.EvalPoolQueryDTO;
13 14 import cn.fw.morax.domain.enums.EvalScopeEnum;
14   -import cn.fw.morax.domain.vo.SelectorVO;
  15 +import cn.fw.morax.domain.vo.EvalPoolVO;
  16 +import cn.fw.morax.domain.vo.EvalSelectorVO;
15 17 import cn.fw.morax.domain.vo.eval.*;
16 18 import cn.fw.morax.domain.vo.kpi.KpiIndicatorRankVO;
17 19 import cn.fw.morax.service.biz.eval.*;
... ... @@ -24,12 +26,12 @@ import lombok.extern.slf4j.Slf4j;
24 26 import org.springframework.validation.annotation.Validated;
25 27 import org.springframework.web.bind.annotation.*;
26 28  
  29 +import javax.validation.Valid;
27 30 import javax.validation.constraints.NotNull;
28 31 import java.time.LocalDate;
29 32 import java.time.YearMonth;
30 33 import java.util.List;
31 34 import java.util.Objects;
32   -import java.util.Set;
33 35  
34 36 import static cn.fw.common.businessvalidator.Validator.BV;
35 37 import static cn.fw.common.web.util.ResultBuilder.success;
... ... @@ -69,6 +71,23 @@ public class EvalPoolController {
69 71 }
70 72  
71 73 /**
  74 + * 人员信息
  75 + *
  76 + * @return
  77 + * @ignoreParams currentUser
  78 + */
  79 + @GetMapping("/staff-info")
  80 + @ControllerMethod("人员信息")
  81 + public Message<EvalUserPoolVO> queryUser(@CurrentUser LoginAuthBean user) {
  82 + EvalUserPoolVO poolVO = new EvalUserPoolVO();
  83 + if (PublicUtil.isNotEmpty(user)) {
  84 + poolVO.setUserId(user.getUserId());
  85 + poolVO.setUserName(user.getUserName());
  86 + }
  87 + return success(poolVO);
  88 + }
  89 +
  90 + /**
72 91 * 本月可查看的其他考评池选项
73 92 *
74 93 * @param user 用户id
... ... @@ -80,7 +99,8 @@ public class EvalPoolController {
80 99 @GetMapping("/staff-selector")
81 100 @IgnoreUserToken
82 101 @ControllerMethod("本月可查看的其他考评池选项")
83   - public Message<Set<SelectorVO>> evalPoolSelector(@CurrentUser LoginAuthBean user, Long userId, @RequestParam(required = false) YearMonth monthly) {
  102 + public Message<EvalPoolVO> evalPoolSelector(@CurrentUser LoginAuthBean user, Long userId,
  103 + @RequestParam(required = false) YearMonth monthly) {
84 104 if (Objects.isNull(monthly)) {
85 105 monthly = YearMonth.now();
86 106 }
... ... @@ -92,33 +112,28 @@ public class EvalPoolController {
92 112  
93 113 /**
94 114 * 考评详情查询 (查看自己考评详情)
95   - *
96   - * @param userId 用户id
97   - * @param monthly 月度
98   - * @return 绩效池详情
99   - * @ignoreParams userId
100 115 */
101 116 @GetMapping("/own-detail")
102 117 @ControllerMethod("考评详情查询")
103   - public Message<EvalUserPoolVO> evalPoolOwnDetail(@CurrentUser Long userId,
104   - @RequestParam(required = false) YearMonth monthly) {
105   - if (Objects.isNull(monthly)) {
106   - monthly = YearMonth.now();
107   - }
108   - return success(evalGroupPoolService.queryUserPoolDetail(userId, monthly));
  118 + public Message<List<EvalUserRankStageVO>> evalPoolOwnDetail(@CurrentUser Long userId,
  119 + @Valid EvalUserRankDTO dto) {
  120 + dto.initMonthly();
  121 + dto.setUserId(userId);
  122 + return success(evalGroupPoolService.queryRankStagePools(dto));
109 123 }
110 124  
111 125 /**
112 126 * 考评详情查询 (查看他人考评详情)
113 127 *
114   - * @param evalPoolId 用户id
115   - * @return 绩效池详情
116   - * @ignoreParams userId
117 128 */
118   - @GetMapping("/staff")
  129 + @GetMapping("/detail")
119 130 @ControllerMethod("考评详情查询")
120   - public Message<EvalUserPoolVO> evalPoolDetail(@NotNull(message = "考评池id不能为空") Long evalPoolId) {
121   - return success(evalGroupPoolService.queryPoolDetail(evalPoolId));
  131 + public Message<List<EvalUserRankStageVO>> evalPoolDetail(@Valid EvalUserRankDTO dto) {
  132 + dto.initMonthly();
  133 + if (PublicUtil.isEmpty(dto.getUserId())) {
  134 + throw new BusinessException("人员信息不能为空");
  135 + }
  136 + return success(evalGroupPoolService.queryRankStagePools(dto));
122 137 }
123 138  
124 139 /**
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/controller/erp/EvalTaskController.java
... ... @@ -10,6 +10,7 @@ import cn.fw.morax.rpc.ehr.EhrRpcService;
10 10 import cn.fw.morax.rpc.ehr.dto.PerformanceStaffDTO;
11 11 import cn.fw.morax.server.consumer.FlowConsumer;
12 12 import cn.fw.morax.server.task.*;
  13 +import cn.fw.morax.service.biz.eval.EvalCalculateService;
13 14 import cn.fw.security.auth.client.annotation.Authorization;
14 15 import cn.fw.security.auth.client.enums.AuthType;
15 16 import lombok.RequiredArgsConstructor;
... ... @@ -18,6 +19,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
18 19 import org.springframework.validation.annotation.Validated;
19 20 import org.springframework.web.bind.annotation.*;
20 21  
  22 +import java.time.LocalDate;
21 23 import java.util.Date;
22 24 import java.util.List;
23 25  
... ... @@ -42,18 +44,23 @@ public class EvalTaskController {
42 44 private final EvalCalcTask evalCalcTask;
43 45 private final EvalGroupTask evalGroupTask;
44 46 private final EvalGroupUserTask evalGroupUserTask;
  47 + private final EvalCalculateService evalCalculateService;
45 48  
46 49 @GetMapping("/group-user")
47 50 @ControllerMethod("考评组人员")
48   - public Message<Void> processEvalUser() {
  51 + public Message<Void> processEvalUser(Date date) {
49 52 evalGroupUserTask.processEvalUser();
50 53 return success();
51 54 }
52 55  
53 56 @GetMapping("/calc-cache")
54 57 @ControllerMethod("缓存要计算的考评")
55   - public Message<Void> cacheCalculableEvalGroup() {
56   - evalCalcTask.cacheCalculableEvalGroup();
  58 + public Message<Void> cacheCalculableEvalGroup(Date date) {
  59 + if (PublicUtil.isEmpty(date)) {
  60 + evalCalculateService.cacheCalculableEvalGroupIds(LocalDate.now().minusDays(1L));
  61 + } else {
  62 + evalCalculateService.cacheCalculableEvalGroupIds(DateUtil.date2LocalDate(date));
  63 + }
57 64 return success();
58 65 }
59 66  
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalGroupUserTask.java
... ... @@ -97,7 +97,7 @@ public class EvalGroupUserTask {
97 97 * @return
98 98 */
99 99 private List<EvalGroupUser> queryKpiStaff(LocalDate yesterday) {
100   - List<EvalGroup> evalGroups = evalGroupUserBizService.postEffectEvalGroups();
  100 + List<EvalGroup> evalGroups = evalGroupUserBizService.postEffectEvalGroups(yesterday);
101 101 if (! evalGroups.isEmpty()) {
102 102 log.info("需要生成考评组人员的考评组:{}", evalGroups);
103 103 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java
... ... @@ -239,10 +239,11 @@ public class EvalCalculateService {
239 239 if (userShop.getIndicatorTotalScore().compareTo(BigDecimal.ZERO) > 0) {
240 240 scoreRatio = userShop.getScore().divide(userShop.getIndicatorTotalScore(), 2, RoundingMode.DOWN);
241 241 }
  242 + BigDecimal reward = (Boolean.TRUE.equals(userShop.getIgnored())) ? BigDecimal.ZERO : userShop.getReward();
242 243 evalUserPoolService.update(Wrappers.<EvalUserPool>lambdaUpdate()
243 244 .eq(EvalUserPool::getId, userShop.getPoolId())
244 245 .eq(EvalUserPool::getYn, Boolean.TRUE)
245   - .set(EvalUserPool::getReward, userShop.getReward())
  246 + .set(EvalUserPool::getReward, reward)
246 247 .set(EvalUserPool::getScore, userShop.getScore())
247 248 .set(EvalUserPool::getScoreRatio, scoreRatio)
248 249 .set(EvalUserPool::getMonthly, YearMonth.from(localDate))
... ... @@ -281,9 +282,9 @@ public class EvalCalculateService {
281 282  
282 283 Map<Long, EvalUserPool> userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroup, evalGroupRankStage, users, localDate);
283 284 for (EvalGroupUser user : users) {
284   - if (Boolean.TRUE.equals(user.getIgnored())) {
285   - continue;
286   - }
  285 +// if (Boolean.TRUE.equals(user.getIgnored())) {
  286 +// continue;
  287 +// }
287 288 EvalUserPool userPool = userPoolMap.get(user.getUserId());
288 289 userShops.add(convertBO(user, userPool));
289 290 }
... ... @@ -638,6 +639,7 @@ public class EvalCalculateService {
638 639 userShop.setGroupId(user.getGroupId());
639 640 userShop.setScore(BigDecimal.ZERO);
640 641 userShop.setReward(BigDecimal.ZERO);
  642 + userShop.setIgnored(user.getIgnored());
641 643 return userShop;
642 644 }
643 645  
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java
... ... @@ -7,7 +7,10 @@ import cn.fw.morax.common.utils.PublicUtil;
7 7 import cn.fw.morax.domain.db.eval.*;
8 8 import cn.fw.morax.domain.db.kpi.*;
9 9 import cn.fw.morax.domain.dto.eval.EvalGroupIndicatorRankDTO;
  10 +import cn.fw.morax.domain.dto.eval.EvalUserRankDTO;
10 11 import cn.fw.morax.domain.enums.*;
  12 +import cn.fw.morax.domain.vo.EvalPoolVO;
  13 +import cn.fw.morax.domain.vo.EvalSelectorVO;
11 14 import cn.fw.morax.domain.vo.SelectorVO;
12 15 import cn.fw.morax.domain.vo.eval.*;
13 16 import cn.fw.morax.domain.vo.kpi.IndicatorUserValueVO;
... ... @@ -60,6 +63,8 @@ public class EvalGroupPoolService {
60 63 private final EvalIndicatorValueService evalIndicatorValueService;
61 64 private final EvalGroupUserService evalGroupUserService;
62 65 private final EvalGroupRewardService evalGroupRewardService;
  66 + private final EvalGroupRankStageService evalGroupRankStageService;
  67 + private final EvalGroupRankService evalGroupRankService;
63 68 private final EvalGroupService evalGroupService;
64 69 private final EvalUserPoolService evalUserPoolService;
65 70 private final EvalShopPoolService evalShopPoolService;
... ... @@ -101,31 +106,38 @@ public class EvalGroupPoolService {
101 106 *
102 107 * @return
103 108 */
104   - public EvalUserPoolVO queryPoolDetail(final Long poolId) {
105   - EvalUserPool evalUserPool = evalUserPoolService.getById(poolId);
106   - if (PublicUtil.isEmpty(evalUserPool)) {
107   -// throw new BusinessException("人员考评数据不存在");
108   - return null;
109   - }
110   - return poolDetail(evalUserPool);
111   - }
  109 + public List<EvalUserRankStageVO> queryRankStagePools(EvalUserRankDTO dto) {
  110 + final Long userId = dto.getUserId();
  111 + final Long postId = dto.getPostId();
  112 + final Long shopId = dto.getShopId();
  113 + final Long evalGroupRankId = dto.getEvalGroupRankId();
  114 + List<EvalUserPool> pools = evalUserPoolService.list(Wrappers.<EvalUserPool>lambdaQuery()
  115 + .eq(EvalUserPool::getPostId, postId)
  116 + .eq(EvalUserPool::getShopId, shopId)
  117 + .eq(EvalUserPool::getUserId, userId)
  118 + .eq(EvalUserPool::getEvalGroupRankId, evalGroupRankId)
  119 + .eq(EvalUserPool::getYn, Boolean.TRUE)
  120 + .orderByDesc(EvalUserPool::getScoreRatio)
  121 + );
  122 + Map<Long, List<EvalUserPool>> stagePoolMap = pools.stream().collect(Collectors.groupingBy(EvalUserPool::getEvalGroupRankStageId));
  123 + List<Long> evalGroupRankStageIds = pools.stream().map(EvalUserPool::getEvalGroupRankStageId).collect(Collectors.toList());
112 124  
113   - /**
114   - * 查询考评详情
115   - *
116   - * @param userId
117   - * @param yearMonth
118   - * @return
119   - */
120   - public EvalUserPoolVO queryUserPoolDetail(final Long userId, final YearMonth yearMonth) {
121   - List<EvalUserPool> pools = userEvalPool(userId, yearMonth);
  125 + List<EvalGroupRankStage> stages = evalGroupRankStageService.list(Wrappers.<EvalGroupRankStage>lambdaQuery()
  126 + .in(EvalGroupRankStage::getId, evalGroupRankStageIds)
  127 + .eq(EvalGroupRankStage::getYn, Boolean.TRUE)
  128 + .orderByAsc(EvalGroupRankStage::getBeginTime)
  129 + );
122 130  
123   - if (PublicUtil.isEmpty(pools)) {
124   -// throw new BusinessException("人员考评数据不存在");
125   - return null;
  131 + List<EvalUserRankStageVO> stageVos = PublicUtil.copyList(stages, EvalUserRankStageVO.class);
  132 + for (EvalUserRankStageVO stageVO : stageVos) {
  133 + List<EvalUserPool> rankPools = stagePoolMap.get(stageVO.getId());
  134 + if (PublicUtil.isNotEmpty(rankPools)) {
  135 + EvalUserPool stagePool = rankPools.get(0);
  136 + EvalUserPoolVO evalUserPoolVO = this.poolDetail(stagePool);
  137 + stageVO.setPool(evalUserPoolVO);
  138 + }
126 139 }
127   - EvalUserPool evalUserPool = pools.get(0);
128   - return poolDetail(evalUserPool);
  140 + return stageVos;
129 141 }
130 142  
131 143 public EvalUserPoolVO poolDetail(EvalUserPool pool) {
... ... @@ -139,12 +151,6 @@ public class EvalGroupPoolService {
139 151 this.setIgnore(evalUserPoolVO);
140 152 evalUserPoolVO.setDataDate(localDate);
141 153  
142   -// Eval eval = evalService.getById(pool.getEvalId());
143   -// BV.notNull(pool, "考评池不存在");
144   -// if (PublicUtil.isNotEmpty(eval)) {
145   -// evalUserPoolVO.setEvalType(eval.getType());
146   -// }
147   -
148 154 return evalUserPoolVO;
149 155 }
150 156  
... ... @@ -256,14 +262,73 @@ public class EvalGroupPoolService {
256 262 * @param yearMonth
257 263 * @return
258 264 */
259   - public Set<SelectorVO> evalPoolSelector(Long userId, YearMonth yearMonth) {
  265 + public EvalPoolVO evalPoolSelector(Long userId, YearMonth yearMonth) {
260 266 List<EvalUserPool> pools = userEvalPool(userId, yearMonth);
261 267 if (CollectionUtils.isEmpty(pools)) {
262   - return new HashSet<>();
  268 + return null;
  269 + }
  270 + String userName = pools.stream().findFirst().map(EvalUserPool::getUserName).orElse("");
  271 + List<EvalSelectorVO> selectors = new ArrayList<>();
  272 + EvalPoolVO evalPoolVO = new EvalPoolVO(userId, userName, selectors);
  273 + Map<Long, String> rankNameMap = this.getRankNameMap(pools);
  274 + Map<String, List<EvalUserPool>> shopPostMap = pools.stream().collect(Collectors.groupingBy(pool -> pool.getShopName() + "(" + pool.getPostName() + ")"));
  275 + //门店、岗位维度
  276 + for (Map.Entry<String, List<EvalUserPool>> shopPostEntry : shopPostMap.entrySet()) {
  277 + List<EvalUserGroupRankVO> ranks = new ArrayList<>();
  278 + List<EvalUserPool> shopPostPools = shopPostEntry.getValue();
  279 + Long shopId = shopPostPools.stream().findFirst().map(EvalUserPool::getShopId).get();
  280 + Long postId = shopPostPools.stream().findFirst().map(EvalUserPool::getPostId).get();
  281 + Map<Long, List<EvalUserPool>> rankPools = shopPostPools.stream().collect(Collectors.groupingBy(EvalUserPool::getEvalGroupRankId));
  282 + //排名维度
  283 + for (Map.Entry<Long, List<EvalUserPool>> rankEntry : rankPools.entrySet()) {
  284 + List<EvalUserPool> userRankPools = rankEntry.getValue();
  285 + double averageKpiScoreRatio = userRankPools.stream()
  286 + .mapToDouble(r -> Optional.ofNullable(r.getScoreRatio()).orElse(BigDecimal.ZERO).doubleValue())
  287 + .average()
  288 + .orElse(0);
  289 + BigDecimal reward = userRankPools.stream().map(EvalUserPool::getReward).reduce(BigDecimal.ZERO, BigDecimal::add);
  290 + EvalUserGroupRankVO rank = new EvalUserGroupRankVO();
  291 + rank.setEvalGroupRankName(rankNameMap.getOrDefault(rankEntry.getKey(), ""));
  292 + rank.setScoreRatio(new BigDecimal(averageKpiScoreRatio).multiply(Constant.ONE_HUNDRED));
  293 + rank.setReward(reward);
  294 + rank.setEvalGroupRankId(rankEntry.getKey());
  295 + ranks.add(rank);
  296 + }
  297 + EvalSelectorVO evalSelectorVO = new EvalSelectorVO(shopPostEntry.getKey(), ranks);
  298 + evalSelectorVO.setShopId(shopId);
  299 + evalSelectorVO.setPostId(postId);
  300 + selectors.add(evalSelectorVO);
263 301 }
264   - return pools.stream().map(r -> SelectorVO.whit(r.getId(), r.getPostName(), r.getShopName() + "")).collect(Collectors.toSet());
  302 + return evalPoolVO;
265 303 }
266 304  
  305 + public Map<Long, String> getRankNameMap(List<EvalUserPool> pools) {
  306 + List<Long> evalGroupRankIds = pools.stream().map(EvalUserPool::getEvalGroupRankId).distinct().collect(Collectors.toList());
  307 + List<EvalGroupRank> evalGroupRanks = evalGroupRankService.list(Wrappers.<EvalGroupRank>lambdaQuery()
  308 + .in(EvalGroupRank::getId, evalGroupRankIds)
  309 + .eq(EvalGroupRank::getYn, Boolean.TRUE)
  310 + );
  311 + if (PublicUtil.isEmpty(evalGroupRanks)) {
  312 + return new HashMap<>();
  313 + }
  314 + return evalGroupRanks.stream().collect(Collectors.toMap(EvalGroupRank::getId, EvalGroupRank::getName, (v1, v2) -> v1));
  315 + }
  316 +
  317 + /**
  318 + * 查询用户绩效池
  319 + *
  320 + * @param userId
  321 + * @param yearMonth
  322 + * @return
  323 + */
  324 +// public Set<SelectorVO> evalPoolSelector(Long userId, YearMonth yearMonth) {
  325 +// List<EvalUserPool> pools = userEvalPool(userId, yearMonth);
  326 +// if (CollectionUtils.isEmpty(pools)) {
  327 +// return new HashSet<>();
  328 +// }
  329 +// return pools.stream().map(r -> SelectorVO.whit(r.getId(), r.getPostName(), r.getShopName() + "")).collect(Collectors.toSet());
  330 +// }
  331 +
267 332  
268 333 /**
269 334 * 查询用户月度绩效池列表
... ... @@ -308,7 +373,6 @@ public class EvalGroupPoolService {
308 373 if (PublicUtil.isEmpty(pool)) {
309 374 return null;
310 375 }
311   -// BV.notNull(pool, "考评池不存在");
312 376 Long userId = pool.getUserId();
313 377 return getHitIndicatorDetail(evalPoolId, EvalScopeEnum.STAFF, userId, evalGroupIndicatorId, dataDate);
314 378 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupUserBizService.java
... ... @@ -53,14 +53,16 @@ public class EvalGroupUserBizService {
53 53 /**
54 54 * 所有集团生效的绩效组配置
55 55 */
56   - public List<EvalGroup> postEffectEvalGroups(){
57   - LocalDate queryDate = LocalDate.now().minusDays(1L);
  56 + public List<EvalGroup> postEffectEvalGroups(LocalDate queryDate){
58 57 List<EvalGroup> evalGroups = evalGroupService.getAllEffectGroups(queryDate);
59 58 if (PublicUtil.isEmpty(evalGroups)) {
60 59 log.info("时间:{},没有正在生效中的考评组配置", DateTimeFormatter.ofPattern("yyyy-MM-dd").format(queryDate));
61 60 return new ArrayList<>();
62 61 }
63   - return evalGroups;
  62 + //过滤岗位为空考评组
  63 + List<EvalGroup> postEvalGroups = evalGroups.stream()
  64 + .filter(evalGroup -> PublicUtil.isNotEmpty(evalGroup.getPostIds())).collect(Collectors.toList());
  65 + return postEvalGroups;
64 66 }
65 67  
66 68 /**
... ...