Commit 016eb879d47a16377795cf8cea70b3a1b56b6a24

Authored by 姜超
1 parent 47dc3c71

feature(*): 考评人员维度数据处理

考评人员维度数据处理
doc/2023-05-18_update.sql
  1 +-- 2024年4月3日
  2 +ALTER TABLE `fw_morax`.`eval_group_user`
  3 + ADD COLUMN `staff_status` tinyint(8) NULL COMMENT '当前员工状态:1->试用,2->正式,8->待离职,9->离职' AFTER `data_date`;
  4 +
  5 +ALTER TABLE `fw_morax`.`eval_user_report`
  6 + ADD COLUMN `staff_type` tinyint(4) NULL COMMENT '员工分类: 0->绩效员工: 非0->其他员工(KpiIgnoreCauseEnum枚举取值)' AFTER `user_name`;
  7 +
  8 +
1 9 -- 2024年3月20日
2 10 ALTER TABLE `fw_morax`.`eval_group_indicator_hit_log`
3 11 DROP INDEX `eval_reward_hit_log_index`,
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroupUser.java
... ... @@ -2,6 +2,7 @@ package cn.fw.morax.domain.db.eval;
2 2  
3 3 import cn.fw.common.data.entity.BaseAuditableTimeEntity;
4 4 import cn.fw.morax.domain.enums.KpiIgnoreCauseEnum;
  5 +import cn.fw.morax.domain.enums.SalaryStaffStatusEnum;
5 6 import com.baomidou.mybatisplus.annotation.TableName;
6 7 import lombok.*;
7 8  
... ... @@ -87,6 +88,11 @@ public class EvalGroupUser extends BaseAuditableTimeEntity<EvalGroupUser, Long>
87 88 * 数据日期
88 89 */
89 90 private LocalDate dataDate;
  91 +
  92 + /**
  93 + * '当前员工状态' 当前员工状态:1->试用,2->正式,8->待离职,9->离职
  94 + */
  95 + private SalaryStaffStatusEnum staffStatus;
90 96 /**
91 97 * 集团id
92 98 */
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalUserReport.java
... ... @@ -54,6 +54,12 @@ public class EvalUserReport extends BaseEntity<EvalUserReport, Long> {
54 54 */
55 55 private String userName;
56 56  
  57 +
  58 + /**
  59 + * 绩效员工取值0,其他非绩效员工取值 KpiIgnoreCauseEnum 枚举的值value
  60 + */
  61 + private Integer staffType;
  62 +
57 63 /**
58 64 * 岗位id
59 65 */
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalUserReportTask.java
... ... @@ -45,6 +45,7 @@ import java.math.BigDecimal;
45 45 import java.math.RoundingMode;
46 46 import java.time.LocalDate;
47 47 import java.time.YearMonth;
  48 +import java.time.temporal.TemporalAdjusters;
48 49 import java.util.*;
49 50 import java.util.concurrent.RejectedExecutionException;
50 51 import java.util.concurrent.atomic.AtomicInteger;
... ... @@ -197,9 +198,9 @@ public class EvalUserReportTask {
197 198 }
198 199 List<EvalUserPool> userPools = evalUserPoolService.getPools(evalGroupRankStageId, YearMonth.from(dataDate));
199 200 // .filter(pool -> ! evalGroupUserService.probationStaff(pool.getUserId(), rankStage.getBeginTime(), rankStage.getOverTime()))
200   - List<EvalUserPool> nonProbationStaffs = userPools.stream()
201   - .filter(pool -> Boolean.TRUE.equals(pool.getInclusion()))
202   - .collect(Collectors.toList());
  201 +// List<EvalUserPool> nonProbationStaffs = userPools.stream()
  202 +// .filter(pool -> Boolean.TRUE.equals(pool.getInclusion()))
  203 +// .collect(Collectors.toList());
203 204 List<Long> disableShopIds = invalidShopLogService.queryInvalidShopIds(groupId, dataDate);
204 205 List<EvalShopPool> shopPools = evalShopPoolService.list(Wrappers.<EvalShopPool>lambdaQuery()
205 206 .in(EvalShopPool::getEvalGroupId, evalGroupIds)
... ... @@ -223,10 +224,10 @@ public class EvalUserReportTask {
223 224 EvalGroupReportParamsBO paramsBO = new EvalGroupReportParamsBO(stageDim, rankStage, rank.getGroupId(), multiStage, dataDate);
224 225 //排名组指标编码、人员、门店
225 226 List<EvalUserRankCodeReport> rankCodes = this.saveRankCodeReports(evalGroupIndicators, evalUserRankReportId, evalUserRankStageReportId, paramsBO);
226   - List<EvalUserReport> evalUserReports = this.saveStaffReports(nonProbationStaffs, evalUserRankReportId, evalUserRankStageReportId,paramsBO);
227   - List<EvalUserReport> evalShopReports = this.saveShopReports(shopPools, evalUserRankReportId, evalUserRankStageReportId,paramsBO);
  227 + List<EvalUserReport> evalUserReports = this.saveStaffReports(userPools, evalUserRankReportId, evalUserRankStageReportId, paramsBO);
  228 + List<EvalUserReport> evalShopReports = this.saveShopReports(shopPools, evalUserRankReportId, evalUserRankStageReportId, paramsBO);
228 229 //人员维度
229   - calcUser(nonProbationStaffs, evalGroupIndicators, evalGroupIndicatorParamMap, evalUserReports, paramsBO);
  230 + calcUser(userPools, evalGroupIndicators, evalGroupIndicatorParamMap, evalUserReports, paramsBO);
230 231 //门店维度
231 232 calcShop(shopPools, evalGroupIndicators, evalGroupIndicatorParamMap, evalShopReports, paramsBO);
232 233 //门店维度
... ... @@ -608,27 +609,43 @@ public class EvalUserReportTask {
608 609 if (PublicUtil.isEmpty(pools)) {
609 610 return new ArrayList<>();
610 611 }
  612 + final Long evalGroupRankStageId = paramsBO.getStage().getId();
611 613 final LocalDate dataDate = paramsBO.getDataDate();
  614 + final LocalDate stageStartDate = paramsBO.getStage().getBeginTime();
612 615 List<EvalUserReport> evalUserReports = new ArrayList<>();
613 616 for (EvalUserPool userPool : pools) {
614   - EvalUserReport report = new EvalUserReport();
615   - report.setStageDim(paramsBO.getStageDimEnum());
616   - report.setEvalUserRankReportId(evalUserRankReportId);
617   - report.setEvalUserRankStageReportId(evalUserRankStageReportId);
618   - report.setDimension(ReportDimensionEnum.STAFF);
619   - report.setReward(userPool.getReward());
620   - report.setScore(userPool.getScore());
621   - report.setScoreRatio(userPool.getScoreRatio().multiply(Constant.ONE_HUNDRED));
622   - report.setUserId(userPool.getUserId());
623   - report.setUserName(userPool.getUserName());
624   - report.setPostId(userPool.getPostId());
625   - report.setPostName(userPool.getPostName());
626   - report.setShopId(userPool.getShopId());
627   - report.setShopName(userPool.getShopName());
628   - report.setEvalUserPoolId(userPool.getId());
629   - report.setDataDate(dataDate);
630   - report.setInclusion(userPool.getInclusion());
631   - evalUserReports.add(report);
  617 + EvalUserReport userReport = new EvalUserReport();
  618 + userReport.setStageDim(paramsBO.getStageDimEnum());
  619 + userReport.setEvalUserRankReportId(evalUserRankReportId);
  620 + userReport.setEvalUserRankStageReportId(evalUserRankStageReportId);
  621 + userReport.setDimension(ReportDimensionEnum.STAFF);
  622 + userReport.setReward(userPool.getReward());
  623 + userReport.setScore(userPool.getScore());
  624 + userReport.setScoreRatio(userPool.getScoreRatio().multiply(Constant.ONE_HUNDRED));
  625 + userReport.setUserId(userPool.getUserId());
  626 + userReport.setUserName(userPool.getUserName());
  627 + userReport.setPostId(userPool.getPostId());
  628 + userReport.setPostName(userPool.getPostName());
  629 + userReport.setShopId(userPool.getShopId());
  630 + userReport.setShopName(userPool.getShopName());
  631 + userReport.setEvalUserPoolId(userPool.getId());
  632 + userReport.setDataDate(dataDate);
  633 + userReport.setInclusion(userPool.getInclusion());
  634 +
  635 + EvalGroupUser evalGroupUser = evalGroupUserService.getMonthStageLastData(evalGroupRankStageId, userPool.getUserId(),
  636 + stageStartDate, dataDate);
  637 + //处理员工分类
  638 + if (Objects.nonNull(evalGroupUser)){
  639 + if (Objects.nonNull(evalGroupUser.getIgnored()) && (Boolean.FALSE.equals(evalGroupUser.getIgnored()))){
  640 + //绩效员工取值0,其他非绩效员工取值 KpiIgnoreCauseEnum 枚举的值
  641 + userReport.setStaffType(0);
  642 + }else {
  643 + if (Objects.nonNull(evalGroupUser.getIgnoreCause())){
  644 + userReport.setStaffType(evalGroupUser.getIgnoreCause().getValue());
  645 + }
  646 + }
  647 + }
  648 + evalUserReports.add(userReport);
632 649 }
633 650 evalUserReportService.insertBatchSomeColumn(evalUserReports);
634 651 return evalUserReports;
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java
... ... @@ -722,27 +722,38 @@ public class EvalCalculateService {
722 722  
723 723 List<EvalGroupUserShop> userShops = new ArrayList<>();
724 724 if (EvalScopeEnum.STAFF.equals(scopeType)) {
725   - //考评不计算保护期员工
  725 +// //考评不计算保护期员工
  726 +// List<EvalGroupUser> users = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery()
  727 +// .eq(EvalGroupUser::getEvalGroupId, evalGroup.getId())
  728 +// .eq(EvalGroupUser::getDataDate, calcDateParam.getCalcEndDate())
  729 +// .eq(EvalGroupUser::getYn, Boolean.TRUE)
  730 +// .eq(EvalGroupUser::getIgnored, Boolean.FALSE)
  731 +// );
  732 +// //转正员工要计算
  733 +// List<EvalGroupUser> turnPositiveUsers = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery()
  734 +// .eq(EvalGroupUser::getEvalGroupId, evalGroup.getId())
  735 +// .eq(EvalGroupUser::getDataDate, calcDateParam.getCalcEndDate())
  736 +// .eq(EvalGroupUser::getYn, Boolean.TRUE)
  737 +// .eq(EvalGroupUser::getIgnored, Boolean.TRUE)
  738 +// .eq(EvalGroupUser::getIgnoreCause, KpiIgnoreCauseEnum.TURN_POSITIVE_AFTER)
  739 +// );
  740 +// if (PublicUtil.isNotEmpty(turnPositiveUsers)) {
  741 +// users.addAll(turnPositiveUsers);
  742 +// }
726 743 List<EvalGroupUser> users = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery()
727 744 .eq(EvalGroupUser::getEvalGroupId, evalGroup.getId())
728 745 .eq(EvalGroupUser::getDataDate, calcDateParam.getCalcEndDate())
729 746 .eq(EvalGroupUser::getYn, Boolean.TRUE)
730   - .eq(EvalGroupUser::getIgnored, Boolean.FALSE)
731   - );
732   - //转正员工要计算
733   - List<EvalGroupUser> turnPositiveUsers = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery()
734   - .eq(EvalGroupUser::getEvalGroupId, evalGroup.getId())
735   - .eq(EvalGroupUser::getDataDate, calcDateParam.getCalcEndDate())
736   - .eq(EvalGroupUser::getYn, Boolean.TRUE)
737   - .eq(EvalGroupUser::getIgnored, Boolean.TRUE)
738   - .eq(EvalGroupUser::getIgnoreCause, KpiIgnoreCauseEnum.TURN_POSITIVE_AFTER)
739 747 );
740   - if (PublicUtil.isNotEmpty(turnPositiveUsers)) {
741   - users.addAll(turnPositiveUsers);
742   - }
743 748 Map<Long, EvalUserPool> userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroupRankStage, users, calcDateParam.getCalcEndDate(), scopeType);
744 749 for (EvalGroupUser user : users) {
745 750 EvalUserPool userPool = userPoolMap.get(user.getUserId());
  751 + userPool.setDataDate(user.getDataDate());
  752 + //试用期员工不计算绩效
  753 + if (Boolean.TRUE.equals(user.getIgnored()) && PublicUtil.isNotEmpty(user.getStaffStatus()) && SalaryStaffStatusEnum.PROBATION.equals(user.getStaffStatus())) {
  754 + evalUserPoolService.updateById(userPool);
  755 + continue;
  756 + }
746 757 userShops.add(convertBO(user, userPool, evalGroupRank, evalGroupRankStage,calcDateParam, scopeType));
747 758 }
748 759 return userShops;
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateTaskService.java
... ... @@ -42,6 +42,7 @@ import org.springframework.transaction.TransactionDefinition;
42 42 import org.springframework.transaction.TransactionStatus;
43 43 import org.springframework.transaction.annotation.Transactional;
44 44  
  45 +import java.math.BigDecimal;
45 46 import java.time.LocalDate;
46 47 import java.time.LocalDateTime;
47 48 import java.time.YearMonth;
... ... @@ -313,12 +314,7 @@ public class EvalCalculateTaskService {
313 314 for (Long postId : rewardDim.getPostIds()) {
314 315 List<EvalGroupUser> manageEvalGroupUsers = evalGroupUserBizService.fetchPostUsers(groupId, postId, rewardDim.getShopIds(), dataDate);
315 316 if (PublicUtil.isNotEmpty(manageEvalGroupUsers)) {
316   - for (EvalGroupUser user : manageEvalGroupUsers) {
317   - user.setEvalGroupRankId(evalGroupRankId);
318   - user.setEvalGroupRankStageId(evalGroupRankStageId);
319   - user.setEvalGroupId(-1L);
320   - user.setEgc("");
321   - }
  317 + this.addManageEvalUser(manageEvalGroupUsers, evalGroupRankId, evalGroupRankStageId);
322 318 managerEvalGroupUsersForSave.addAll(manageEvalGroupUsers);
323 319 }
324 320 }
... ... @@ -357,12 +353,28 @@ public class EvalCalculateTaskService {
357 353  
358 354 }
359 355  
  356 + public void addManageEvalUser(List<EvalGroupUser> manageEvalGroupUsers, Long evalGroupRankId, Long evalGroupRankStageId) {
  357 + if (PublicUtil.isEmpty(manageEvalGroupUsers)) {
  358 + return;
  359 + }
  360 + for (EvalGroupUser user : manageEvalGroupUsers) {
  361 + user.setEvalGroupRankId(evalGroupRankId);
  362 + user.setEvalGroupRankStageId(evalGroupRankStageId);
  363 + user.setEvalGroupId(-1L);
  364 + user.setEgc("");
  365 + }
  366 + }
  367 +
360 368 public void updatePoolOtherInfo(List<EvalGroupUser> users, EvalScopeEnum scopeType) {
361 369 for (EvalGroupUser user : users) {
362 370 EvalUserPool userPool = evalPoolCommonService.inspectionUserPool(user, scopeType);
363 371 //忽略就不计算
364 372 Boolean inclusion = Boolean.TRUE.equals(user.getIgnored()) ? Boolean.FALSE : Boolean.TRUE;
365 373 userPool.setInclusion(inclusion);
  374 + //不纳入计算,奖惩清空
  375 + if (Boolean.FALSE.equals(inclusion)) {
  376 + userPool.setReward(BigDecimal.ZERO);
  377 + }
366 378 evalUserPoolService.updateById(userPool);
367 379 }
368 380 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupUserBizService.java
... ... @@ -7,6 +7,7 @@ import cn.fw.morax.domain.db.eval.EvalUserPool;
7 7 import cn.fw.morax.domain.dto.IgnoreCauseDTO;
8 8 import cn.fw.morax.domain.dto.IgnoreCauseReqDTO;
9 9 import cn.fw.morax.domain.dto.query.ShopsPostsQueryDTO;
  10 +import cn.fw.morax.domain.enums.SalaryStaffStatusEnum;
10 11 import cn.fw.morax.domain.vo.eval.EvalGroupUserVO;
11 12 import cn.fw.morax.rpc.ehr.EhrRpcService;
12 13 import cn.fw.morax.rpc.ehr.dto.PerformanceStaffDTO;
... ... @@ -191,6 +192,7 @@ public class EvalGroupUserBizService {
191 192 */
192 193 public void handleStaffKpi(PerformanceStaffDTO staff, EvalGroupUser evalUser, IgnoreCauseReqDTO rejectCauseReq) {
193 194 try {
  195 + evalUser.setStaffStatus(SalaryStaffStatusEnum.ofValue(staff.getStaffStatus()));
194 196 //获取忽略绩效理由
195 197 IgnoreCauseDTO ignoreCauseDTO = commonService.findIgnoreCauseDTO(staff, rejectCauseReq);
196 198  
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/EvalGroupUserService.java
... ... @@ -20,6 +20,8 @@ public interface EvalGroupUserService extends ILocalService&lt;EvalGroupUser&gt; {
20 20  
21 21 EvalGroupUser getMonthLastData(Long evalGroupId, Long userId, YearMonth yearMonth);
22 22  
  23 + EvalGroupUser getMonthStageLastData(Long evalGroupStageId, Long userId, LocalDate startDate, LocalDate endDate);
  24 +
23 25 /**
24 26 * 试用期员工
25 27 *
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/impl/EvalGroupServiceUserImpl.java
... ... @@ -33,6 +33,20 @@ public class EvalGroupServiceUserImpl extends ServiceImpl&lt;EvalGroupUserDao, Eval
33 33 }
34 34  
35 35 @Override
  36 + public EvalGroupUser getMonthStageLastData(Long evalGroupStageId, Long userId, LocalDate startDate, LocalDate endDate) {
  37 + return this.getOne(Wrappers.<EvalGroupUser>lambdaQuery()
  38 + .eq(EvalGroupUser::getEvalGroupRankStageId, evalGroupStageId)
  39 + .eq(EvalGroupUser::getUserId, userId)
  40 + .ge(EvalGroupUser::getDataDate, startDate)
  41 + .le(EvalGroupUser::getDataDate, endDate)
  42 + .eq(EvalGroupUser::getYn, Boolean.TRUE)
  43 + .orderByDesc(EvalGroupUser::getDataDate)
  44 + .last(" limit 1 ")
  45 + , Boolean.FALSE
  46 + );
  47 + }
  48 +
  49 + @Override
36 50 public Boolean probationStaff(Long userId, LocalDate beginTime, LocalDate endTime) {
37 51 List<EvalGroupUser> users = this.list(Wrappers.<EvalGroupUser>lambdaQuery()
38 52 .ge(EvalGroupUser::getDataDate, beginTime)
... ...