Commit 2a51b423861a6319c97cd8c142f7fd4383d15f59

Authored by 姜超
1 parent 13d02b32

feature(*): 考评人员维度数据抽取

考评人员维度数据抽取
doc/2023-05-18_update.sql
... ... @@ -3,7 +3,10 @@ ALTER TABLE `fw_morax`.`eval_group_user`
3 3 ADD COLUMN `staff_status` tinyint(8) NULL COMMENT '当前员工状态:1->试用,2->正式,8->待离职,9->离职' AFTER `data_date`;
4 4  
5 5 ALTER TABLE `fw_morax`.`eval_user_report`
6   - ADD COLUMN `staff_type` tinyint(4) NULL COMMENT '员工分类: 0->绩效员工: 非0->其他员工(KpiIgnoreCauseEnum枚举取值)' AFTER `user_name`;
  6 + ADD COLUMN `staff_type` tinyint(4) default 0 COMMENT '员工分类: 0->绩效员工: 非0->其他员工(KpiIgnoreCauseEnum枚举取值)' AFTER `user_name`;
  7 +
  8 +ALTER TABLE `fw_morax`.`eval_group_user`
  9 + ADD COLUMN `leave_date` date NULL COMMENT '离职时间' AFTER `staff_status`;
7 10  
8 11  
9 12 -- 2024年3月20日
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalExtractStageIndicatorBO.java
... ... @@ -22,7 +22,7 @@ import java.util.concurrent.atomic.AtomicInteger;
22 22 public class EvalExtractStageIndicatorBO {
23 23 private Long evalCalcId;
24 24 private Long evalGroupRankId;
25   - private Set<Long> evalGroupIds;
  25 +// private Set<Long> evalGroupIds;
26 26 private LocalDate localDate;
27 27 private Boolean realTimeCalc;
28 28 // private AtomicInteger atomicInteger;
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupCalculableBO.java
... ... @@ -21,6 +21,6 @@ import java.util.Set;
21 21 public class EvalGroupCalculableBO {
22 22 private Long evalCalcId;
23 23 private Long evalGroupRankId;
24   - private Set<Long> evalGroupIds;
  24 +// private Set<Long> evalGroupIds;
25 25 private LocalDate localDate;
26 26 }
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroupUser.java
... ... @@ -90,6 +90,11 @@ public class EvalGroupUser extends BaseAuditableTimeEntity&lt;EvalGroupUser, Long&gt;
90 90 private LocalDate dataDate;
91 91  
92 92 /**
  93 + * 离职日期
  94 + */
  95 + private LocalDate leaveDate;
  96 +
  97 + /**
93 98 * '当前员工状态' 当前员工状态:1->试用,2->正式,8->待离职,9->离职
94 99 */
95 100 private SalaryStaffStatusEnum staffStatus;
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalUserPool.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.EvalPoolBusinessTypeEnum;
  5 +import com.baomidou.mybatisplus.annotation.FieldStrategy;
5 6 import com.baomidou.mybatisplus.annotation.TableField;
6 7 import com.baomidou.mybatisplus.annotation.TableLogic;
7 8 import com.baomidou.mybatisplus.annotation.TableName;
... ... @@ -111,6 +112,7 @@ public class EvalUserPool extends BaseAuditableTimeEntity&lt;EvalUserPool, Long&gt; {
111 112 /**
112 113 * 排名
113 114 */
  115 + @TableField(updateStrategy = FieldStrategy.IGNORED)
114 116 private Integer rank;
115 117  
116 118 /**
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/enums/KpiIgnoreCauseEnum.java
... ... @@ -27,6 +27,8 @@ public enum KpiIgnoreCauseEnum implements IEnum&lt;Integer&gt; {
27 27 TRANSPOST_BEFORE_15(10, "15号以前调岗不计入绩效考核"),
28 28 LEAVE_DAY_OVERLENGTH_IGNORE_KPI(11, "请假超过X天不计入绩效考核"),
29 29 TURN_POSITIVE_POSITION(12, "调岗保护期内不计入绩效考核"),
  30 + EVAL_MULTISTAGE_TIME_POST_CHANGE(13, "考评多阶段时间内调岗,不纳入考评计算"),
  31 + EVAL_MULTISTAGE_TIME_LEAVE(14, "考评多阶段时间内离职,不纳入考评计算"),
30 32 ;
31 33  
32 34 /**
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/controller/erp/EvalTaskController.java
... ... @@ -112,7 +112,7 @@ public class EvalTaskController {
112 112 throw new BusinessException("参数为空");
113 113 }
114 114 LocalDate calcDate = PublicUtil.isEmpty(date) ? evalCalc.getCalcDate() : DateUtil.date2LocalDate(date);
115   - evalCalculateTaskService.cacheStageIndicator(evalCalcId, evalCalc.getEvalGroupRankId(), new HashSet<>(evalCalc.getEvalGroupIds()), Boolean.TRUE, calcDate);
  115 + evalCalculateTaskService.cacheStageIndicator(evalCalcId, evalCalc.getEvalGroupRankId(), Boolean.TRUE, calcDate);
116 116 return success();
117 117 }
118 118  
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalUserReportTask.java
... ... @@ -631,19 +631,14 @@ public class EvalUserReportTask {
631 631 userReport.setEvalUserPoolId(userPool.getId());
632 632 userReport.setDataDate(dataDate);
633 633 userReport.setInclusion(userPool.getInclusion());
  634 + //默认为绩效员工
  635 + userReport.setStaffType(0);
634 636  
635 637 EvalGroupUser evalGroupUser = evalGroupUserService.getMonthStageLastData(evalGroupRankStageId, userPool.getUserId(),
636 638 stageStartDate, dataDate);
637 639 //处理员工分类
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   - }
  640 + if (PublicUtil.isNotEmpty(evalGroupUser) && PublicUtil.isNotEmpty(evalGroupUser.getIgnoreCause()) ){
  641 + userReport.setStaffType(evalGroupUser.getIgnoreCause().getValue());
647 642 }
648 643 evalUserReports.add(userReport);
649 644 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/CommonService.java
... ... @@ -959,7 +959,7 @@ public class CommonService {
959 959 /**
960 960 * 获取员工非降级旧岗位调岗日期
961 961 */
962   - private LocalDate getNewPostChangeDate(Long userId, Long postId){
  962 + public LocalDate getNewPostChangeDate(Long userId, Long postId){
963 963 String newPostChangeKey = String.join(":", staffNewPostChangeDate, userId+"", postId+"");
964 964 if (! stringRedisTemplate.hasKey(newPostChangeKey)) {
965 965 return null;
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardProportionCalculator.java
... ... @@ -49,7 +49,7 @@ public class EvalRewardProportionCalculator extends EvalRewardBaseCalculator {
49 49  
50 50 @Override
51 51 public void calculateGroup(List<EvalGroupUserShop> userShops, EvalGroupRewardBO reward) {
52   - userShops = userShops.stream().filter(userShop -> Boolean.FALSE.equals(userShop.getIgnored())).collect(Collectors.toList());
  52 + userShops = userShops.stream().filter(userShop -> Boolean.TRUE.equals(userShop.getInclusion())).collect(Collectors.toList());
53 53 if (PublicUtil.isEmpty(userShops)) {
54 54 return;
55 55 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/reward/EvalRewardRankCalculator.java
... ... @@ -44,7 +44,7 @@ public class EvalRewardRankCalculator extends EvalRewardBaseCalculator {
44 44  
45 45 @Override
46 46 public void calculateGroup(List<EvalGroupUserShop> userShops, EvalGroupRewardBO reward) {
47   - userShops = userShops.stream().filter(userShop -> Boolean.FALSE.equals(userShop.getIgnored())).collect(Collectors.toList());
  47 + userShops = userShops.stream().filter(userShop -> Boolean.TRUE.equals(userShop.getInclusion())).collect(Collectors.toList());
48 48 if (PublicUtil.isEmpty(userShops)) {
49 49 return;
50 50 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateTaskService.java
... ... @@ -20,6 +20,7 @@ import cn.fw.morax.rpc.ehr.dto.ManagerDTO;
20 20 import cn.fw.morax.rpc.ehr.dto.ManagerStaffDTO;
21 21 import cn.fw.morax.sdk.dto.common.IndicatorReportTypeEnum;
22 22 import cn.fw.morax.sdk.dto.kpi.KpiStageReportNoticeMQ;
  23 +import cn.fw.morax.service.biz.CommonService;
23 24 import cn.fw.morax.service.component.KpiStageIndicatorReportProducer;
24 25 import cn.fw.morax.service.data.eval.*;
25 26 import cn.fw.morax.service.data.kpi.IndicatorsService;
... ... @@ -89,6 +90,7 @@ public class EvalCalculateTaskService {
89 90 private final IndicatorsService indicatorsService;
90 91 private final EvalGroupService evalGroupService;
91 92 private final EvalCalcService evalCalcService;
  93 + private final CommonService commonService;
92 94 private final EhrRpcService ehrRpcService;
93 95  
94 96 /**
... ... @@ -120,11 +122,11 @@ public class EvalCalculateTaskService {
120 122 if (EvalCalcStatusEnum.COLLECT_STAGE_DATA.equals(evalCalc.getStatus())) {
121 123 //多阶段先抽取指标数据
122 124 if (evalCalc.getMultiStage()) {
123   - this.cacheStageIndicator(evalCalcId, evalGroupRankId, evalGroupIds, Boolean.TRUE, localDate);
  125 + this.cacheStageIndicator(evalCalcId, evalGroupRankId, Boolean.TRUE, localDate);
124 126 return;
125 127 }
126 128 //单阶段直接计算
127   - this.cacheCalcGroupIds(evalCalc.getId(), evalCalc.getEvalGroupRankId(), new HashSet<>(evalCalc.getEvalGroupIds()), evalCalc.getCalcDate());
  129 + this.cacheCalcGroupIds(evalCalc.getId(), evalCalc.getEvalGroupRankId(), evalCalc.getCalcDate());
128 130 return;
129 131 }
130 132 //抽取人员信息
... ... @@ -169,11 +171,11 @@ public class EvalCalculateTaskService {
169 171 if (EvalCalcStatusEnum.COLLECT_STAGE_DATA.equals(evalCalc.getStatus())) {
170 172 //多阶段先抽取指标数据
171 173 if (evalCalc.getMultiStage()) {
172   - this.cacheStageIndicator(evalCalcId, evalGroupRankId, evalGroupIds, Boolean.FALSE, localDate);
  174 + this.cacheStageIndicator(evalCalcId, evalGroupRankId, Boolean.FALSE, localDate);
173 175 continue;
174 176 }
175 177 //单阶段直接计算
176   - this.cacheCalcGroupIds(evalCalc.getId(), evalCalc.getEvalGroupRankId(), new HashSet<>(evalCalc.getEvalGroupIds()), evalCalc.getCalcDate());
  178 + this.cacheCalcGroupIds(evalCalc.getId(), evalCalc.getEvalGroupRankId(), evalCalc.getCalcDate());
177 179 continue;
178 180 }
179 181 //抽取人员信息
... ... @@ -308,7 +310,9 @@ public class EvalCalculateTaskService {
308 310 evalGroupIds.add(evalGroup.getId());
309 311 //昨天已经在 阶段结束时间之后
310 312 for (Long postId : Optional.ofNullable(evalGroup.getPostIds()).orElse(new ArrayList<>())) {
311   - evalGroupUsersForSave.addAll(evalGroupUserBizService.fetchBuildKpiUser(groupId, postId, evalGroup, dataDate));
  313 + List<EvalGroupUser> evalGroupUsers = evalGroupUserBizService.fetchBuildKpiUser(groupId, postId, evalGroup, dataDate);
  314 + this.setMultiStageIgnoreCase(evalGroupRank, stage, evalGroupUsers);
  315 + evalGroupUsersForSave.addAll(evalGroupUsers);
312 316 }
313 317 }
314 318 //管理层人员
... ... @@ -318,6 +322,7 @@ public class EvalCalculateTaskService {
318 322 List<EvalGroupUser> manageEvalGroupUsers = evalGroupUserBizService.fetchPostUsers(groupId, postId, rewardDim.getShopIds(), dataDate);
319 323 if (PublicUtil.isNotEmpty(manageEvalGroupUsers)) {
320 324 this.initManageEvalUser(manageEvalGroupUsers, evalGroupRankId, evalGroupRankStageId);
  325 + this.setMultiStageIgnoreCase(evalGroupRank, stage, manageEvalGroupUsers);
321 326 managerEvalGroupUsersForSave.addAll(manageEvalGroupUsers);
322 327 }
323 328 }
... ... @@ -341,9 +346,9 @@ public class EvalCalculateTaskService {
341 346 evalCalcService.modifyStatus(evalCalcId, EvalCalcStatusEnum.COLLECT_STAGE_DATA);
342 347 //多阶段
343 348 if (bo.getMultiStage()) {
344   - this.cacheStageIndicator(evalCalcId, evalGroupRankId, evalGroupIds, realTimeCalc, yesterday);
  349 + this.cacheStageIndicator(evalCalcId, evalGroupRankId, realTimeCalc, yesterday);
345 350 } else {
346   - this.cacheCalcGroupIds(evalCalcId, evalGroupRankId, evalGroupIds, yesterday);
  351 + this.cacheCalcGroupIds(evalCalcId, evalGroupRankId, yesterday);
347 352 }
348 353 platformTransactionManager.commit(transactionStatus);
349 354 } catch (Exception e) {
... ... @@ -354,6 +359,7 @@ public class EvalCalculateTaskService {
354 359 }
355 360  
356 361 public void extractStageEveryDateEvalUser(EvalExtractUserBO bo) {
  362 + final Long evalCalcId = bo.getEvalCalcId();
357 363 final Long evalGroupRankId = bo.getEvalGroupRankId();
358 364 final Boolean realTimeCalc = bo.getRealTimeCalc();
359 365 final LocalDate yesterday = bo.getLocalDate();
... ... @@ -366,8 +372,10 @@ public class EvalCalculateTaskService {
366 372 List<EvalGroupRankStage> stages = evalGroupRankStageService.getRankStages(evalGroupRankId, yesterday, realTimeCalc);
367 373 TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
368 374 try {
369   - Set<Long> repeatUserIds = new HashSet<>();
370 375 for (EvalGroupRankStage stage : stages) {
  376 + final Long start = System.currentTimeMillis();
  377 + log.info(" 考评抽取历史人员数据:考评排名组阶段id:{}", stage.getId());
  378 + Set<Long> stageRepeatEvalUserIds = new HashSet<>();
371 379 final Long evalGroupRankStageId = stage.getId();
372 380 List<EvalGroupUser> evalGroupUsersForSave = Lists.newArrayListWithCapacity(100);
373 381 List<EvalGroupUser> managerEvalGroupUsersForSave = Lists.newArrayListWithCapacity(100);
... ... @@ -376,13 +384,22 @@ public class EvalCalculateTaskService {
376 384 .eq(EvalGroup::getYn, Boolean.TRUE)
377 385 );
378 386 LocalDate stageEveryDataTime = stage.getBeginTime();
379   - LocalDate stageEndTime = stage.getBeginTime();
  387 + //计算时间 在阶段结束时间之后 阶段结束时间
  388 + final LocalDate stageEndTime = yesterday.isAfter(stage.getOverTime()) ? stage.getOverTime() : yesterday;
  389 +
380 390 //阶段开始时间大于 阶段结束时间
381   - while (stageEndTime.compareTo(stageEveryDataTime) > 0) {
  391 + while (stageEndTime.compareTo(stageEveryDataTime) >= 0) {
  392 + log.info("抽取考评排名组人员信息:{},阶段:{},日期:{}", evalGroupRankId, evalGroupRankStageId, stageEveryDataTime);
  393 + //多阶段重置池子是否参与考评
  394 + this.multiStageResetPoolInclusion(evalGroupRank, stage, yesterday);
  395 + //先记录 重复员工信息
  396 + stageRepeatEvalUserIds.addAll(this.queryRepeatUserEvalIds(evalGroupRankStageId, stageEveryDataTime));
382 397 //普通岗位员工
383 398 for (EvalGroup evalGroup : evalGroups) {
384 399 for (Long postId : Optional.ofNullable(evalGroup.getPostIds()).orElse(new ArrayList<>())) {
385 400 List<EvalGroupUser> evalGroupUsers = evalGroupUserBizService.fetchBuildKpiUser(groupId, postId, evalGroup, stageEveryDataTime);
  401 + this.setMultiStageIgnoreCase(evalGroupRank, stage, evalGroupUsers);
  402 + evalGroupUsersForSave.addAll(evalGroupUsers);
386 403 evalPoolCommonService.createUserPools(evalGroupUsers, EvalScopeEnum.STAFF);
387 404 }
388 405 }
... ... @@ -392,16 +409,17 @@ public class EvalCalculateTaskService {
392 409 for (Long postId : rewardDim.getPostIds()) {
393 410 List<EvalGroupUser> manageEvalGroupUsers = evalGroupUserBizService.fetchPostUsers(groupId, postId, rewardDim.getShopIds(), stageEveryDataTime);
394 411 this.initManageEvalUser(manageEvalGroupUsers, evalGroupRankId, evalGroupRankStageId);
  412 + this.setMultiStageIgnoreCase(evalGroupRank, stage, managerEvalGroupUsersForSave);
  413 + managerEvalGroupUsersForSave.addAll(manageEvalGroupUsers);
395 414 evalPoolCommonService.createUserPools(manageEvalGroupUsers, EvalScopeEnum.MANAGEMENT);
396 415 }
397 416 }
398   - repeatUserIds.addAll(this.queryRepeatUserEvalIds(evalGroupRankStageId, stageEveryDataTime));
399 417 //日期+1
400 418 stageEveryDataTime = stageEveryDataTime.plusDays(1);
401 419 }
402 420 //去重
403   - if (PublicUtil.isNotEmpty(repeatUserIds)) {
404   - evalGroupUserService.removeByIds(repeatUserIds);
  421 + if (PublicUtil.isNotEmpty(stageRepeatEvalUserIds)) {
  422 + evalGroupUserService.removeByIds(stageRepeatEvalUserIds);
405 423 }
406 424 if (PublicUtil.isNotEmpty(evalGroupUsersForSave)) {
407 425 evalGroupUserService.insertBatchSomeColumn(evalGroupUsersForSave);
... ... @@ -409,13 +427,84 @@ public class EvalCalculateTaskService {
409 427 if (PublicUtil.isNotEmpty(managerEvalGroupUsersForSave)) {
410 428 evalGroupUserService.insertBatchSomeColumn(managerEvalGroupUsersForSave);
411 429 }
  430 + log.info(" 考评抽取历史人员数据完成:考评排名组阶段id:{},耗时:{} s", stage.getId(), TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis() - start));
  431 + }
  432 + //多阶段
  433 + if (bo.getMultiStage()) {
  434 + this.cacheStageIndicator(evalCalcId, evalGroupRankId, realTimeCalc, yesterday);
  435 + } else {
  436 + this.cacheCalcGroupIds(evalCalcId, evalGroupRankId, yesterday);
412 437 }
  438 + platformTransactionManager.commit(transactionStatus);
413 439 } catch (Exception e) {
414 440 platformTransactionManager.rollback(transactionStatus);
415 441 throw e;
416 442 }
417 443 }
418 444  
  445 + /**
  446 + * 设置阶段忽略原因
  447 + * 1. 阶段内有调岗,不参与考评
  448 + * 2. 阶段内离职,不参与考评
  449 + */
  450 + public void setMultiStageIgnoreCase(EvalGroupRank evalGroupRank, EvalGroupRankStage stage, List<EvalGroupUser> evalGroupUsers) {
  451 + if (Boolean.FALSE.equals(evalGroupRank.getMultiStage())) {
  452 + return;
  453 + }
  454 + if (PublicUtil.isEmpty(evalGroupUsers)) {
  455 + return;
  456 + }
  457 + for (EvalGroupUser evalGroupUser : evalGroupUsers) {
  458 + final Long userId = evalGroupUser.getUserId();
  459 + final Long postId = evalGroupUser.getPostId();
  460 + final LocalDate newPostChangeDate = commonService.getNewPostChangeDate(userId, postId);
  461 + final LocalDate oldPostChangeDate = commonService.getOldPostChangeDate(userId, postId);
  462 + if (PublicUtil.isNotEmpty(newPostChangeDate)) {
  463 + //调岗时间大于阶段开始时间 阶段结束时间大于调岗时间(在阶段时间范围内调岗)
  464 + if (newPostChangeDate.compareTo(stage.getBeginTime()) > 0 && stage.getOverTime().compareTo(newPostChangeDate) > 0) {
  465 + evalGroupUser.setIgnored(Boolean.TRUE);
  466 + evalGroupUser.setIgnoreCauseDesc(KpiIgnoreCauseEnum.EVAL_MULTISTAGE_TIME_POST_CHANGE.getName());
  467 + evalGroupUser.setIgnoreCause(KpiIgnoreCauseEnum.EVAL_MULTISTAGE_TIME_POST_CHANGE);
  468 + }
  469 + }
  470 + if (PublicUtil.isNotEmpty(oldPostChangeDate)) {
  471 + //调岗时间大于阶段开始时间 阶段结束时间大于调岗时间(在阶段时间范围内调岗)
  472 + if (oldPostChangeDate.compareTo(stage.getBeginTime()) > 0 && stage.getOverTime().compareTo(oldPostChangeDate) > 0) {
  473 + evalGroupUser.setIgnored(Boolean.TRUE);
  474 + evalGroupUser.setIgnoreCause(KpiIgnoreCauseEnum.EVAL_MULTISTAGE_TIME_POST_CHANGE);
  475 + evalGroupUser.setIgnoreCauseDesc(KpiIgnoreCauseEnum.EVAL_MULTISTAGE_TIME_POST_CHANGE.getName());
  476 + }
  477 + }
  478 + final LocalDate leaveDate = evalGroupUser.getLeaveDate();
  479 + if (PublicUtil.isNotEmpty(leaveDate)) {
  480 + //调岗时间大于阶段开始时间 阶段结束时间大于调岗时间(在阶段时间范围内调岗)
  481 + if (leaveDate.compareTo(stage.getBeginTime()) > 0 && stage.getOverTime().compareTo(leaveDate) > 0) {
  482 + evalGroupUser.setIgnored(Boolean.TRUE);
  483 + evalGroupUser.setIgnoreCause(KpiIgnoreCauseEnum.EVAL_MULTISTAGE_TIME_LEAVE);
  484 + evalGroupUser.setIgnoreCauseDesc(KpiIgnoreCauseEnum.EVAL_MULTISTAGE_TIME_LEAVE.getName());
  485 + }
  486 + }
  487 + }
  488 + }
  489 +
  490 + /**
  491 + * 多阶段重置 是否参与考评字段
  492 + * 张三3月18号离职,按照规则 15号之后离职需要参与绩效考核。第二阶段考评 3月11号 到 3月20号 ,这个期间张三不是所有时间都在考评范围内,所以不参与考评。
  493 + */
  494 + public void multiStageResetPoolInclusion(EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage, LocalDate dataDate) {
  495 + if (Boolean.TRUE.equals(evalGroupRank.getMultiStage())) {
  496 + List<EvalUserPool> stageEvalUserPools = evalUserPoolService.list(Wrappers.<EvalUserPool>lambdaQuery()
  497 + .eq(EvalUserPool::getEvalGroupRankStageId, evalGroupRankStage.getId())
  498 + .eq(EvalUserPool::getMonthly, YearMonth.from(dataDate))
  499 + .eq(EvalUserPool::getYn, Boolean.TRUE));
  500 + for (EvalUserPool evalUserPool : stageEvalUserPools) {
  501 + evalUserPool.setInclusion(Boolean.FALSE);
  502 + evalUserPool.setReward(BigDecimal.ZERO);
  503 + evalUserPoolService.updateById(evalUserPool);
  504 + }
  505 + }
  506 + }
  507 +
419 508 public Set<Long> queryRepeatUserEvalIds(Long evalGroupRankStageId, LocalDate dataDate) {
420 509 List<EvalGroupUser> repeatUsers = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery()
421 510 .eq(EvalGroupUser::getEvalGroupRankStageId, evalGroupRankStageId)
... ... @@ -452,8 +541,8 @@ public class EvalCalculateTaskService {
452 541 }
453 542 }
454 543  
455   - public void cacheStageIndicator(final Long evalCalcId, final Long evalGroupRankId, final Set<Long> evalGroupIds, Boolean realTimeCalc, final LocalDate localDate) {
456   - String json = JSONObject.toJSONString(new EvalExtractStageIndicatorBO(evalCalcId, evalGroupRankId, evalGroupIds, localDate, realTimeCalc));
  544 + public void cacheStageIndicator(final Long evalCalcId, final Long evalGroupRankId, Boolean realTimeCalc, final LocalDate localDate) {
  545 + String json = JSONObject.toJSONString(new EvalExtractStageIndicatorBO(evalCalcId, evalGroupRankId, localDate, realTimeCalc));
457 546 stringRedisTemplate.opsForSet().add(evalCalculationVal.getCacheSendStageIndicatorMQ(), json);
458 547 }
459 548  
... ... @@ -504,7 +593,7 @@ public class EvalCalculateTaskService {
504 593 if (PublicUtil.isEmpty(sysIndicatorCodes)) {
505 594 evalCalc.setStatus(EvalCalcStatusEnum.CALC_EVAL);
506 595 evalCalcService.updateById(evalCalc);
507   - cacheCalcGroupIds(evalCalcId, evalCalc.getEvalGroupRankId(), new HashSet<>(evalCalc.getEvalGroupIds()), evalCalc.getCalcDate());
  596 + cacheCalcGroupIds(evalCalcId, evalCalc.getEvalGroupRankId(), evalCalc.getCalcDate());
508 597 platformTransactionManager.commit(status);
509 598 return;
510 599 }
... ... @@ -702,7 +791,7 @@ public class EvalCalculateTaskService {
702 791 mqLog.setEvalCalcId(evalCalcId);
703 792 mqLog.setDataDate(dataDate);
704 793 mqLog.setGroupId(groupId);
705   - mqLog.setUserIds(new ArrayList<Long>(){{add(evalUserPool.getShopId());}});
  794 + mqLog.setUserIds(new ArrayList<Long>(){{add(evalUserPool.getUserId());}});
706 795 mqLog.setShopIds(new ArrayList<Long>(){{add(evalUserPool.getShopId());}});
707 796 return mqLog;
708 797 }
... ... @@ -722,7 +811,7 @@ public class EvalCalculateTaskService {
722 811 .eq(EvalCalc::getYn, Boolean.TRUE)
723 812 );
724 813 for (EvalCalc evalCalc : evalCalcs) {
725   - cacheCalcGroupIds(evalCalc.getId(), evalCalc.getEvalGroupRankId(), new HashSet<>(evalCalc.getEvalGroupIds()), evalCalc.getCalcDate());
  814 + cacheCalcGroupIds(evalCalc.getId(), evalCalc.getEvalGroupRankId(), evalCalc.getCalcDate());
726 815 evalCalcService.modifyStatus(evalCalc.getId(), EvalCalcStatusEnum.CALC_EVAL);
727 816 stringRedisTemplate.delete(evalCalculationVal.getMqCodeLogStatusKey(evalCalc.getId()));
728 817 }
... ... @@ -734,8 +823,8 @@ public class EvalCalculateTaskService {
734 823  
735 824 }
736 825  
737   - private void cacheCalcGroupIds(final Long evalCalcId, final Long evalGroupRankId, final Set<Long> evalGroupIds, final LocalDate localDate) {
738   - String json = JSONObject.toJSONString(new EvalGroupCalculableBO(evalCalcId, evalGroupRankId, evalGroupIds, localDate));
  826 + private void cacheCalcGroupIds(final Long evalCalcId, final Long evalGroupRankId, final LocalDate localDate) {
  827 + String json = JSONObject.toJSONString(new EvalGroupCalculableBO(evalCalcId, evalGroupRankId, localDate));
739 828 stringRedisTemplate.opsForSet().add(evalCalculationVal.getCacheCalculation(), json);
740 829 }
741 830  
... ... @@ -778,7 +867,7 @@ public class EvalCalculateTaskService {
778 867 evalCalc.setStatus(EvalCalcStatusEnum.CALC_EVAL);
779 868 evalCalcService.save(evalCalc);
780 869 evalCalcs.add(evalCalc);
781   - String json = JSONObject.toJSONString(new EvalGroupCalculableBO(evalCalc.getId(), evalGroupRankId, evalGroupIds, localDate));
  870 + String json = JSONObject.toJSONString(new EvalGroupCalculableBO(evalCalc.getId(), evalGroupRankId, localDate));
782 871 stringRedisTemplate.opsForSet().add(evalCalculationVal.getCacheCalculation(), json);
783 872 }
784 873 if (Boolean.TRUE.equals(distReward)) {
... ... @@ -825,7 +914,7 @@ public class EvalCalculateTaskService {
825 914 evalCalc.setYn(Boolean.TRUE);
826 915 evalCalc.setStatus(EvalCalcStatusEnum.CALC_EVAL);
827 916 evalCalcService.save(evalCalc);
828   - String json = JSONObject.toJSONString(new EvalGroupCalculableBO(evalCalc.getId(), evalGroupRankId, evalGroupIds, localDate));
  917 + String json = JSONObject.toJSONString(new EvalGroupCalculableBO(evalCalc.getId(), evalGroupRankId, localDate));
829 918 stringRedisTemplate.opsForSet().add(evalCalculationVal.getCacheCalculation(), json);
830 919 }
831 920  
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupUserBizService.java
... ... @@ -271,6 +271,9 @@ public class EvalGroupUserBizService {
271 271 if (PublicUtil.isNotEmpty(now)) {
272 272 evalGroupUser.setDataDate(now);
273 273 }
  274 + if (PublicUtil.isNotEmpty(staff.getLeaveDate())) {
  275 + evalGroupUser.setLeaveDate(staff.getLeaveDate());
  276 + }
274 277 return evalGroupUser;
275 278 }
276 279  
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalPoolCommonService.java
... ... @@ -180,7 +180,7 @@ public class EvalPoolCommonService {
180 180 return userPool;
181 181 }
182 182  
183   - @Transactional(rollbackFor = Exception.class)
  183 +// @Transactional(rollbackFor = Exception.class)
184 184 public void createUserPools(List<EvalGroupUser> users, EvalScopeEnum scopeType) {
185 185 for (EvalGroupUser user : Optional.ofNullable(users).orElse(new ArrayList<>())) {
186 186 this.createUserPool(user, scopeType);
... ... @@ -193,7 +193,7 @@ public class EvalPoolCommonService {
193 193 * @param user
194 194 * @return
195 195 */
196   - @Transactional(rollbackFor = Exception.class)
  196 +// @Transactional(rollbackFor = Exception.class)
197 197 public void createUserPool(EvalGroupUser user, EvalScopeEnum scopeType) {
198 198 EvalPoolBusinessTypeEnum businessType = EvalScopeEnum.MANAGEMENT.equals(scopeType)
199 199 ? EvalPoolBusinessTypeEnum.REWARD : EvalPoolBusinessTypeEnum.SCORE_REWARD;
... ... @@ -213,9 +213,11 @@ public class EvalPoolCommonService {
213 213 //不纳入计算,奖惩清空
214 214 if (Boolean.FALSE.equals(inclusion)) {
215 215 evalUserPool.setReward(BigDecimal.ZERO);
  216 + evalUserPool.setRank(null);
216 217 }
217 218 evalUserPool.setDataDate(user.getDataDate());
218 219 evalUserPoolService.updateById(evalUserPool);
  220 + return;
219 221 }
220 222 //同一个考评组的 调岗员工 修改调岗数据(调岗同岗位,合并数据,不同岗位,两条数据)
221 223 evalUserPool = evalUserPoolService.getOne(Wrappers.<EvalUserPool>lambdaQuery()
... ... @@ -236,6 +238,7 @@ public class EvalPoolCommonService {
236 238 evalUserPool.setEgc(user.getEgc());
237 239 }
238 240 evalUserPoolService.updateById(evalUserPool);
  241 + return;
239 242 }
240 243 this.createUserPoolData(user, scopeType);
241 244 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/kpi/KpiStageIndicatorBizService.java
... ... @@ -102,6 +102,10 @@ public class KpiStageIndicatorBizService {
102 102 final Long evalCalcId = kpiStageMqLog.getEvalCalcId();
103 103  
104 104 EvalCalc evalCalc = evalCalcService.getById(evalCalcId);
  105 + if (PublicUtil.isEmpty(evalCalc) || PublicUtil.isEmpty(evalCalc.getStatus())) {
  106 + log.info("确认完成阶段数据上报 evalCalc为空,evalCalcId:{}", evalCalcId);
  107 + return Message.success();
  108 + }
105 109 //正在收集数据
106 110 if (EvalCalcStatusEnum.COLLECT_STAGE_DATA.equals(evalCalc.getStatus())) {
107 111 //在确认最晚时间之内 完成,其他业务系统可能还没确认
... ... @@ -141,7 +145,7 @@ public class KpiStageIndicatorBizService {
141 145 log.info("当前状态: {}, 无需重复处理!",evalCalc1.getStatus().getValue());
142 146 }else {
143 147 evalCalcService.modifyStatus(evalCalcId, EvalCalcStatusEnum.CALC_EVAL);
144   - cacheCalcGroupIds(evalCalcId, evalCalc.getEvalGroupRankId(), new HashSet<>(evalCalc.getEvalGroupIds()), evalCalc.getCalcDate());
  148 + cacheCalcGroupIds(evalCalcId, evalCalc.getEvalGroupRankId(), evalCalc.getCalcDate());
145 149 }
146 150 stringRedisTemplate.delete(evalCalculationVal.getMqCodeLogStatusKey(kpiStageMqLog.getEvalCalcId()));
147 151 }
... ... @@ -150,8 +154,8 @@ public class KpiStageIndicatorBizService {
150 154 return Message.success();
151 155 }
152 156  
153   - private void cacheCalcGroupIds(final Long evalCalcId, final Long evalGroupRankId, final Set<Long> evalGroupIds, final LocalDate localDate) {
154   - String json = JSONObject.toJSONString(new EvalGroupCalculableBO(evalCalcId, evalGroupRankId, evalGroupIds, localDate));
  157 + private void cacheCalcGroupIds(final Long evalCalcId, final Long evalGroupRankId, final LocalDate localDate) {
  158 + String json = JSONObject.toJSONString(new EvalGroupCalculableBO(evalCalcId, evalGroupRankId, localDate));
155 159 stringRedisTemplate.opsForSet().add(evalCalculationVal.getCacheCalculation(), json);
156 160 }
157 161  
... ...