diff --git a/fw-morax-dao/src/main/resources/mapper/eval/EvalGroupUserMapper.xml b/fw-morax-dao/src/main/resources/mapper/eval/EvalGroupUserMapper.xml
index 868f973..3ebaa3c 100644
--- a/fw-morax-dao/src/main/resources/mapper/eval/EvalGroupUserMapper.xml
+++ b/fw-morax-dao/src/main/resources/mapper/eval/EvalGroupUserMapper.xml
@@ -3,7 +3,7 @@
- id, egc, eval_id, eval_group_id, user_id, user_name, post_id, post_name, shop_id,
+ id, eval_group_rank_id, eval_group_rank_stage_id, eval_group_id, user_id, user_name, post_id, post_name, shop_id,
shop_name, ignored, ignore_cause, ignore_cause_desc, anticipated_date,
remark, data_date, group_id, yn, create_time, update_time
diff --git a/fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java b/fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java
index a8e95f7..14c59e1 100644
--- a/fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java
+++ b/fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java
@@ -91,6 +91,11 @@ public class EvalGroupUserShop {
private BigDecimal reward;
/**
+ * 是否计不入考评考核
+ */
+ private Boolean ignored;
+
+ /**
* 指标总分
*/
private BigDecimal indicatorTotalScore;
diff --git a/fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroupIndicatorParam.java b/fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroupIndicatorParam.java
index f276746..320d73d 100644
--- a/fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroupIndicatorParam.java
+++ b/fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroupIndicatorParam.java
@@ -113,7 +113,7 @@ public class EvalGroupIndicatorParam extends BaseAuditableTimeEntity
+ * 绩效组排名配置
+ *
+ *
+ * @author jiangchao
+ * @since 2022-09-26
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class EvalUserRankDTO {
+
+ /**
+ * 用户id
+ */
+// @NotNull(message = "用户id不能为空")
+ private Long userId;
+
+ /**
+ * 门店
+ */
+ @NotNull(message = "门店")
+ private Long shopId;
+
+ /**
+ * 岗位
+ */
+ @NotNull(message = "岗位")
+ private Long postId;
+
+ /**
+ * 考评排名组id
+ */
+ @NotNull(message = "考评排名组id")
+ private Long evalGroupRankId;
+
+ /**
+ * 月份
+ */
+ private YearMonth monthly;
+
+ public void initMonthly() {
+ if (PublicUtil.isEmpty(this.monthly)) {
+ this.monthly = YearMonth.now();
+ }
+ }
+
+}
diff --git a/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/EvalPoolVO.java b/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/EvalPoolVO.java
new file mode 100644
index 0000000..4a01a9c
--- /dev/null
+++ b/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/EvalPoolVO.java
@@ -0,0 +1,36 @@
+package cn.fw.morax.domain.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author jiangchao
+ * @des:
+ * @date 2023/5/22 11:35
+ */
+@Data
+public class EvalPoolVO {
+
+ /**
+ * 用户id
+ */
+ private Long userId;
+ /**
+ * 用户名称
+ */
+ private String userName;
+ /**
+ * 考评选择
+ */
+ private List evalSelectors;
+
+ public EvalPoolVO() {
+ }
+
+ public EvalPoolVO(Long userId, String userName, List evalSelectors) {
+ this.userId = userId;
+ this.userName = userName;
+ this.evalSelectors = evalSelectors;
+ }
+}
diff --git a/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/EvalSelectorVO.java b/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/EvalSelectorVO.java
new file mode 100644
index 0000000..3d5518f
--- /dev/null
+++ b/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/EvalSelectorVO.java
@@ -0,0 +1,52 @@
+package cn.fw.morax.domain.vo;
+
+import cn.fw.morax.domain.vo.eval.EvalUserGroupRankVO;
+import lombok.Builder;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @author : kurisu
+ * @version : 1.0
+ * @className : SelectorVO
+ * @description : 绩效\薪酬池选项
+ * @date : 2022-05-06 11:23
+ */
+@Data
+@EqualsAndHashCode
+public class EvalSelectorVO {
+ /**
+ * 名称
+ */
+ private String name;
+
+ /**
+ * 门店
+ */
+ @NotNull(message = "门店")
+ private Long shopId;
+
+ /**
+ * 岗位
+ */
+ @NotNull(message = "岗位")
+ private Long postId;
+
+ /**
+ * 排名
+ */
+ private List ranks;
+
+
+ public EvalSelectorVO() {
+ }
+
+ public EvalSelectorVO(String name, List ranks) {
+ this.name = name;
+ this.ranks = ranks;
+ }
+}
diff --git a/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalUserGroupRankVO.java b/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalUserGroupRankVO.java
new file mode 100644
index 0000000..92c4b9c
--- /dev/null
+++ b/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalUserGroupRankVO.java
@@ -0,0 +1,64 @@
+package cn.fw.morax.domain.vo.eval;
+
+import cn.fw.morax.common.constant.Constant;
+import cn.fw.morax.common.utils.PublicUtil;
+import cn.fw.morax.domain.enums.EvalTypeEnum;
+import cn.fw.morax.domain.enums.KpiIgnoreCauseEnum;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.YearMonth;
+import java.util.List;
+
+/**
+ *
+ * 考评池
+ *
+ *
+ * @author jiangchao
+ * @since 2022-12-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class EvalUserGroupRankVO {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 考评排名组id
+ */
+ private Long id;
+
+ /**
+ * 考评组编码
+ */
+ private String evalGroupRankName;
+
+ /**
+ * 考评组id
+ */
+ private Long evalGroupRankId;
+
+ /**
+ * 考评得分率
+ */
+ private BigDecimal scoreRatio;
+ /**
+ * 奖惩
+ */
+ private BigDecimal reward;
+
+ /**
+ * 考评得分率(格式化)
+ */
+ private String scoreRatioFormat;
+
+
+ public void convertScoreRatio() {
+ if (PublicUtil.isNotEmpty(this.getScoreRatio())) {
+ this.setScoreRatio(this.getScoreRatio().multiply(Constant.ONE_HUNDRED));
+ }
+ }
+}
diff --git a/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalUserRankStageVO.java b/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalUserRankStageVO.java
new file mode 100644
index 0000000..ca7da90
--- /dev/null
+++ b/fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalUserRankStageVO.java
@@ -0,0 +1,51 @@
+package cn.fw.morax.domain.vo.eval;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ *
+ * 考评组
+ *
+ *
+ * @author jiangchao
+ * @since 2022-12-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class EvalUserRankStageVO {
+
+ /**
+ * 主键id
+ */
+ private Long id;
+ /**
+ * 阶段名称
+ */
+ private String name;
+
+ /**
+ * 考评排名组id
+ */
+ private Long evalGroupRankId;
+
+ /**
+ * 生效时间
+ */
+ private LocalDate beginTime;
+
+ /**
+ * 结束时间
+ */
+ private LocalDate overTime;
+
+ /**
+ * 考评池
+ */
+ private EvalUserPoolVO pool;
+
+
+}
diff --git a/fw-morax-server/src/main/java/cn/fw/morax/server/controller/app/EvalPoolController.java b/fw-morax-server/src/main/java/cn/fw/morax/server/controller/app/EvalPoolController.java
index 9f03c0d..bfef4a8 100644
--- a/fw-morax-server/src/main/java/cn/fw/morax/server/controller/app/EvalPoolController.java
+++ b/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;
import cn.fw.data.base.domain.common.Message;
import cn.fw.morax.common.utils.PublicUtil;
import cn.fw.morax.domain.dto.eval.EvalGroupIndicatorRankDTO;
+import cn.fw.morax.domain.dto.eval.EvalUserRankDTO;
import cn.fw.morax.domain.dto.query.EvalPoolQueryDTO;
import cn.fw.morax.domain.enums.EvalScopeEnum;
-import cn.fw.morax.domain.vo.SelectorVO;
+import cn.fw.morax.domain.vo.EvalPoolVO;
+import cn.fw.morax.domain.vo.EvalSelectorVO;
import cn.fw.morax.domain.vo.eval.*;
import cn.fw.morax.domain.vo.kpi.KpiIndicatorRankVO;
import cn.fw.morax.service.biz.eval.*;
@@ -24,12 +26,12 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
+import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.time.LocalDate;
import java.time.YearMonth;
import java.util.List;
import java.util.Objects;
-import java.util.Set;
import static cn.fw.common.businessvalidator.Validator.BV;
import static cn.fw.common.web.util.ResultBuilder.success;
@@ -69,6 +71,23 @@ public class EvalPoolController {
}
/**
+ * 人员信息
+ *
+ * @return
+ * @ignoreParams currentUser
+ */
+ @GetMapping("/staff-info")
+ @ControllerMethod("人员信息")
+ public Message queryUser(@CurrentUser LoginAuthBean user) {
+ EvalUserPoolVO poolVO = new EvalUserPoolVO();
+ if (PublicUtil.isNotEmpty(user)) {
+ poolVO.setUserId(user.getUserId());
+ poolVO.setUserName(user.getUserName());
+ }
+ return success(poolVO);
+ }
+
+ /**
* 本月可查看的其他考评池选项
*
* @param user 用户id
@@ -80,7 +99,8 @@ public class EvalPoolController {
@GetMapping("/staff-selector")
@IgnoreUserToken
@ControllerMethod("本月可查看的其他考评池选项")
- public Message> evalPoolSelector(@CurrentUser LoginAuthBean user, Long userId, @RequestParam(required = false) YearMonth monthly) {
+ public Message evalPoolSelector(@CurrentUser LoginAuthBean user, Long userId,
+ @RequestParam(required = false) YearMonth monthly) {
if (Objects.isNull(monthly)) {
monthly = YearMonth.now();
}
@@ -92,33 +112,28 @@ public class EvalPoolController {
/**
* 考评详情查询 (查看自己考评详情)
- *
- * @param userId 用户id
- * @param monthly 月度
- * @return 绩效池详情
- * @ignoreParams userId
*/
@GetMapping("/own-detail")
@ControllerMethod("考评详情查询")
- public Message evalPoolOwnDetail(@CurrentUser Long userId,
- @RequestParam(required = false) YearMonth monthly) {
- if (Objects.isNull(monthly)) {
- monthly = YearMonth.now();
- }
- return success(evalGroupPoolService.queryUserPoolDetail(userId, monthly));
+ public Message> evalPoolOwnDetail(@CurrentUser Long userId,
+ @Valid EvalUserRankDTO dto) {
+ dto.initMonthly();
+ dto.setUserId(userId);
+ return success(evalGroupPoolService.queryRankStagePools(dto));
}
/**
* 考评详情查询 (查看他人考评详情)
*
- * @param evalPoolId 用户id
- * @return 绩效池详情
- * @ignoreParams userId
*/
- @GetMapping("/staff")
+ @GetMapping("/detail")
@ControllerMethod("考评详情查询")
- public Message evalPoolDetail(@NotNull(message = "考评池id不能为空") Long evalPoolId) {
- return success(evalGroupPoolService.queryPoolDetail(evalPoolId));
+ public Message> evalPoolDetail(@Valid EvalUserRankDTO dto) {
+ dto.initMonthly();
+ if (PublicUtil.isEmpty(dto.getUserId())) {
+ throw new BusinessException("人员信息不能为空");
+ }
+ return success(evalGroupPoolService.queryRankStagePools(dto));
}
/**
diff --git a/fw-morax-server/src/main/java/cn/fw/morax/server/controller/erp/EvalTaskController.java b/fw-morax-server/src/main/java/cn/fw/morax/server/controller/erp/EvalTaskController.java
index 8a00616..8b21b28 100644
--- a/fw-morax-server/src/main/java/cn/fw/morax/server/controller/erp/EvalTaskController.java
+++ b/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;
import cn.fw.morax.rpc.ehr.dto.PerformanceStaffDTO;
import cn.fw.morax.server.consumer.FlowConsumer;
import cn.fw.morax.server.task.*;
+import cn.fw.morax.service.biz.eval.EvalCalculateService;
import cn.fw.security.auth.client.annotation.Authorization;
import cn.fw.security.auth.client.enums.AuthType;
import lombok.RequiredArgsConstructor;
@@ -18,6 +19,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
+import java.time.LocalDate;
import java.util.Date;
import java.util.List;
@@ -42,18 +44,23 @@ public class EvalTaskController {
private final EvalCalcTask evalCalcTask;
private final EvalGroupTask evalGroupTask;
private final EvalGroupUserTask evalGroupUserTask;
+ private final EvalCalculateService evalCalculateService;
@GetMapping("/group-user")
@ControllerMethod("考评组人员")
- public Message processEvalUser() {
+ public Message processEvalUser(Date date) {
evalGroupUserTask.processEvalUser();
return success();
}
@GetMapping("/calc-cache")
@ControllerMethod("缓存要计算的考评")
- public Message cacheCalculableEvalGroup() {
- evalCalcTask.cacheCalculableEvalGroup();
+ public Message cacheCalculableEvalGroup(Date date) {
+ if (PublicUtil.isEmpty(date)) {
+ evalCalculateService.cacheCalculableEvalGroupIds(LocalDate.now().minusDays(1L));
+ } else {
+ evalCalculateService.cacheCalculableEvalGroupIds(DateUtil.date2LocalDate(date));
+ }
return success();
}
diff --git a/fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalGroupUserTask.java b/fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalGroupUserTask.java
index 92bf172..32278bb 100644
--- a/fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalGroupUserTask.java
+++ b/fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalGroupUserTask.java
@@ -97,7 +97,7 @@ public class EvalGroupUserTask {
* @return
*/
private List queryKpiStaff(LocalDate yesterday) {
- List evalGroups = evalGroupUserBizService.postEffectEvalGroups();
+ List evalGroups = evalGroupUserBizService.postEffectEvalGroups(yesterday);
if (! evalGroups.isEmpty()) {
log.info("需要生成考评组人员的考评组:{}", evalGroups);
}
diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java
index abe5972..ea996a6 100644
--- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java
+++ b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java
@@ -239,10 +239,11 @@ public class EvalCalculateService {
if (userShop.getIndicatorTotalScore().compareTo(BigDecimal.ZERO) > 0) {
scoreRatio = userShop.getScore().divide(userShop.getIndicatorTotalScore(), 2, RoundingMode.DOWN);
}
+ BigDecimal reward = (Boolean.TRUE.equals(userShop.getIgnored())) ? BigDecimal.ZERO : userShop.getReward();
evalUserPoolService.update(Wrappers.lambdaUpdate()
.eq(EvalUserPool::getId, userShop.getPoolId())
.eq(EvalUserPool::getYn, Boolean.TRUE)
- .set(EvalUserPool::getReward, userShop.getReward())
+ .set(EvalUserPool::getReward, reward)
.set(EvalUserPool::getScore, userShop.getScore())
.set(EvalUserPool::getScoreRatio, scoreRatio)
.set(EvalUserPool::getMonthly, YearMonth.from(localDate))
@@ -281,9 +282,9 @@ public class EvalCalculateService {
Map userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroup, evalGroupRankStage, users, localDate);
for (EvalGroupUser user : users) {
- if (Boolean.TRUE.equals(user.getIgnored())) {
- continue;
- }
+// if (Boolean.TRUE.equals(user.getIgnored())) {
+// continue;
+// }
EvalUserPool userPool = userPoolMap.get(user.getUserId());
userShops.add(convertBO(user, userPool));
}
@@ -638,6 +639,7 @@ public class EvalCalculateService {
userShop.setGroupId(user.getGroupId());
userShop.setScore(BigDecimal.ZERO);
userShop.setReward(BigDecimal.ZERO);
+ userShop.setIgnored(user.getIgnored());
return userShop;
}
diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java
index 45efe73..9843458 100644
--- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java
+++ b/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;
import cn.fw.morax.domain.db.eval.*;
import cn.fw.morax.domain.db.kpi.*;
import cn.fw.morax.domain.dto.eval.EvalGroupIndicatorRankDTO;
+import cn.fw.morax.domain.dto.eval.EvalUserRankDTO;
import cn.fw.morax.domain.enums.*;
+import cn.fw.morax.domain.vo.EvalPoolVO;
+import cn.fw.morax.domain.vo.EvalSelectorVO;
import cn.fw.morax.domain.vo.SelectorVO;
import cn.fw.morax.domain.vo.eval.*;
import cn.fw.morax.domain.vo.kpi.IndicatorUserValueVO;
@@ -60,6 +63,8 @@ public class EvalGroupPoolService {
private final EvalIndicatorValueService evalIndicatorValueService;
private final EvalGroupUserService evalGroupUserService;
private final EvalGroupRewardService evalGroupRewardService;
+ private final EvalGroupRankStageService evalGroupRankStageService;
+ private final EvalGroupRankService evalGroupRankService;
private final EvalGroupService evalGroupService;
private final EvalUserPoolService evalUserPoolService;
private final EvalShopPoolService evalShopPoolService;
@@ -101,31 +106,38 @@ public class EvalGroupPoolService {
*
* @return
*/
- public EvalUserPoolVO queryPoolDetail(final Long poolId) {
- EvalUserPool evalUserPool = evalUserPoolService.getById(poolId);
- if (PublicUtil.isEmpty(evalUserPool)) {
-// throw new BusinessException("人员考评数据不存在");
- return null;
- }
- return poolDetail(evalUserPool);
- }
+ public List queryRankStagePools(EvalUserRankDTO dto) {
+ final Long userId = dto.getUserId();
+ final Long postId = dto.getPostId();
+ final Long shopId = dto.getShopId();
+ final Long evalGroupRankId = dto.getEvalGroupRankId();
+ List pools = evalUserPoolService.list(Wrappers.lambdaQuery()
+ .eq(EvalUserPool::getPostId, postId)
+ .eq(EvalUserPool::getShopId, shopId)
+ .eq(EvalUserPool::getUserId, userId)
+ .eq(EvalUserPool::getEvalGroupRankId, evalGroupRankId)
+ .eq(EvalUserPool::getYn, Boolean.TRUE)
+ .orderByDesc(EvalUserPool::getScoreRatio)
+ );
+ Map> stagePoolMap = pools.stream().collect(Collectors.groupingBy(EvalUserPool::getEvalGroupRankStageId));
+ List evalGroupRankStageIds = pools.stream().map(EvalUserPool::getEvalGroupRankStageId).collect(Collectors.toList());
- /**
- * 查询考评详情
- *
- * @param userId
- * @param yearMonth
- * @return
- */
- public EvalUserPoolVO queryUserPoolDetail(final Long userId, final YearMonth yearMonth) {
- List pools = userEvalPool(userId, yearMonth);
+ List stages = evalGroupRankStageService.list(Wrappers.lambdaQuery()
+ .in(EvalGroupRankStage::getId, evalGroupRankStageIds)
+ .eq(EvalGroupRankStage::getYn, Boolean.TRUE)
+ .orderByAsc(EvalGroupRankStage::getBeginTime)
+ );
- if (PublicUtil.isEmpty(pools)) {
-// throw new BusinessException("人员考评数据不存在");
- return null;
+ List stageVos = PublicUtil.copyList(stages, EvalUserRankStageVO.class);
+ for (EvalUserRankStageVO stageVO : stageVos) {
+ List rankPools = stagePoolMap.get(stageVO.getId());
+ if (PublicUtil.isNotEmpty(rankPools)) {
+ EvalUserPool stagePool = rankPools.get(0);
+ EvalUserPoolVO evalUserPoolVO = this.poolDetail(stagePool);
+ stageVO.setPool(evalUserPoolVO);
+ }
}
- EvalUserPool evalUserPool = pools.get(0);
- return poolDetail(evalUserPool);
+ return stageVos;
}
public EvalUserPoolVO poolDetail(EvalUserPool pool) {
@@ -139,12 +151,6 @@ public class EvalGroupPoolService {
this.setIgnore(evalUserPoolVO);
evalUserPoolVO.setDataDate(localDate);
-// Eval eval = evalService.getById(pool.getEvalId());
-// BV.notNull(pool, "考评池不存在");
-// if (PublicUtil.isNotEmpty(eval)) {
-// evalUserPoolVO.setEvalType(eval.getType());
-// }
-
return evalUserPoolVO;
}
@@ -256,14 +262,73 @@ public class EvalGroupPoolService {
* @param yearMonth
* @return
*/
- public Set evalPoolSelector(Long userId, YearMonth yearMonth) {
+ public EvalPoolVO evalPoolSelector(Long userId, YearMonth yearMonth) {
List pools = userEvalPool(userId, yearMonth);
if (CollectionUtils.isEmpty(pools)) {
- return new HashSet<>();
+ return null;
+ }
+ String userName = pools.stream().findFirst().map(EvalUserPool::getUserName).orElse("");
+ List selectors = new ArrayList<>();
+ EvalPoolVO evalPoolVO = new EvalPoolVO(userId, userName, selectors);
+ Map rankNameMap = this.getRankNameMap(pools);
+ Map> shopPostMap = pools.stream().collect(Collectors.groupingBy(pool -> pool.getShopName() + "(" + pool.getPostName() + ")"));
+ //门店、岗位维度
+ for (Map.Entry> shopPostEntry : shopPostMap.entrySet()) {
+ List ranks = new ArrayList<>();
+ List shopPostPools = shopPostEntry.getValue();
+ Long shopId = shopPostPools.stream().findFirst().map(EvalUserPool::getShopId).get();
+ Long postId = shopPostPools.stream().findFirst().map(EvalUserPool::getPostId).get();
+ Map> rankPools = shopPostPools.stream().collect(Collectors.groupingBy(EvalUserPool::getEvalGroupRankId));
+ //排名维度
+ for (Map.Entry> rankEntry : rankPools.entrySet()) {
+ List userRankPools = rankEntry.getValue();
+ double averageKpiScoreRatio = userRankPools.stream()
+ .mapToDouble(r -> Optional.ofNullable(r.getScoreRatio()).orElse(BigDecimal.ZERO).doubleValue())
+ .average()
+ .orElse(0);
+ BigDecimal reward = userRankPools.stream().map(EvalUserPool::getReward).reduce(BigDecimal.ZERO, BigDecimal::add);
+ EvalUserGroupRankVO rank = new EvalUserGroupRankVO();
+ rank.setEvalGroupRankName(rankNameMap.getOrDefault(rankEntry.getKey(), ""));
+ rank.setScoreRatio(new BigDecimal(averageKpiScoreRatio).multiply(Constant.ONE_HUNDRED));
+ rank.setReward(reward);
+ rank.setEvalGroupRankId(rankEntry.getKey());
+ ranks.add(rank);
+ }
+ EvalSelectorVO evalSelectorVO = new EvalSelectorVO(shopPostEntry.getKey(), ranks);
+ evalSelectorVO.setShopId(shopId);
+ evalSelectorVO.setPostId(postId);
+ selectors.add(evalSelectorVO);
}
- return pools.stream().map(r -> SelectorVO.whit(r.getId(), r.getPostName(), r.getShopName() + "")).collect(Collectors.toSet());
+ return evalPoolVO;
}
+ public Map getRankNameMap(List pools) {
+ List evalGroupRankIds = pools.stream().map(EvalUserPool::getEvalGroupRankId).distinct().collect(Collectors.toList());
+ List evalGroupRanks = evalGroupRankService.list(Wrappers.lambdaQuery()
+ .in(EvalGroupRank::getId, evalGroupRankIds)
+ .eq(EvalGroupRank::getYn, Boolean.TRUE)
+ );
+ if (PublicUtil.isEmpty(evalGroupRanks)) {
+ return new HashMap<>();
+ }
+ return evalGroupRanks.stream().collect(Collectors.toMap(EvalGroupRank::getId, EvalGroupRank::getName, (v1, v2) -> v1));
+ }
+
+ /**
+ * 查询用户绩效池
+ *
+ * @param userId
+ * @param yearMonth
+ * @return
+ */
+// public Set evalPoolSelector(Long userId, YearMonth yearMonth) {
+// List pools = userEvalPool(userId, yearMonth);
+// if (CollectionUtils.isEmpty(pools)) {
+// return new HashSet<>();
+// }
+// return pools.stream().map(r -> SelectorVO.whit(r.getId(), r.getPostName(), r.getShopName() + "")).collect(Collectors.toSet());
+// }
+
/**
* 查询用户月度绩效池列表
@@ -308,7 +373,6 @@ public class EvalGroupPoolService {
if (PublicUtil.isEmpty(pool)) {
return null;
}
-// BV.notNull(pool, "考评池不存在");
Long userId = pool.getUserId();
return getHitIndicatorDetail(evalPoolId, EvalScopeEnum.STAFF, userId, evalGroupIndicatorId, dataDate);
}
diff --git a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupUserBizService.java b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupUserBizService.java
index 8dd687f..ea5ff9c 100644
--- a/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupUserBizService.java
+++ b/fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupUserBizService.java
@@ -53,14 +53,16 @@ public class EvalGroupUserBizService {
/**
* 所有集团生效的绩效组配置
*/
- public List postEffectEvalGroups(){
- LocalDate queryDate = LocalDate.now().minusDays(1L);
+ public List postEffectEvalGroups(LocalDate queryDate){
List evalGroups = evalGroupService.getAllEffectGroups(queryDate);
if (PublicUtil.isEmpty(evalGroups)) {
log.info("时间:{},没有正在生效中的考评组配置", DateTimeFormatter.ofPattern("yyyy-MM-dd").format(queryDate));
return new ArrayList<>();
}
- return evalGroups;
+ //过滤岗位为空考评组
+ List postEvalGroups = evalGroups.stream()
+ .filter(evalGroup -> PublicUtil.isNotEmpty(evalGroup.getPostIds())).collect(Collectors.toList());
+ return postEvalGroups;
}
/**