Commit 2a51b423861a6319c97cd8c142f7fd4383d15f59
1 parent
13d02b32
feature(*): 考评人员维度数据抽取
考评人员维度数据抽取
Showing
15 changed files
with
149 additions
and
43 deletions
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
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroupUser.java
... | ... | @@ -90,6 +90,11 @@ public class EvalGroupUser extends BaseAuditableTimeEntity<EvalGroupUser, Long> |
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<EvalUserPool, Long> { |
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<Integer> { |
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 | ... | ... |