Commit 80e64f6f5aecdcc3b566aa7e02c8e01aa98b29c3
1 parent
1b9fa64d
feature(*): 考评排名组保存修改
考评排名组保存修改
Showing
13 changed files
with
250 additions
and
64 deletions
doc/2023_update.sql
... | ... | @@ -530,28 +530,167 @@ ALTER TABLE `fw_morax`.`kpi_group_rank` |
530 | 530 | ADD COLUMN `post_ids` varchar(512) NULL COMMENT '岗位ids' AFTER `name`, |
531 | 531 | ADD COLUMN `shop_ids` varchar(512) NULL COMMENT '岗位ids' AFTER `post_ids`; |
532 | 532 | |
533 | -ALTER TABLE `fw_morax`.`eval` | |
534 | - ADD COLUMN `begin_time` date NULL COMMENT '开始时间' AFTER `status`, | |
535 | -ADD COLUMN `over_time` date NULL COMMENT '结束时间' AFTER `begin_time`; | |
533 | +DROP TABLE IF EXISTS `eval_group`; | |
534 | +CREATE TABLE `eval_group` ( | |
535 | +`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', | |
536 | +`eval_group_rank_id` bigint(20) NULL DEFAULT NULL COMMENT '考评排名组id', | |
537 | +`eval_group_rank_stage_id` bigint(20) NULL DEFAULT NULL COMMENT '考评排名组阶段id', | |
538 | +`egc` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '考评组编码', | |
539 | +`post_ids` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '岗位id', | |
540 | +`post_names` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '岗位名称', | |
541 | +`shop_ids` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '适用门店ids', | |
542 | +`shop_names` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '适用门店名称', | |
543 | +`indicator_num` int(11) NULL DEFAULT NULL COMMENT '包含指标数量', | |
544 | +`group_id` bigint(20) NOT NULL COMMENT '集团id', | |
545 | +`yn` tinyint(1) NULL DEFAULT 1 COMMENT '逻辑删除', | |
546 | +`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', | |
547 | +`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', | |
548 | +PRIMARY KEY (`id`) USING BTREE | |
549 | +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '考评组' ROW_FORMAT = Dynamic; | |
536 | 550 | |
537 | -ALTER TABLE `fw_morax`.`eval_group` | |
538 | - ADD COLUMN `eval_stage_id` bigint(20) NULL COMMENT '考评阶段id' AFTER `eval_id`; | |
551 | +-- ---------------------------- | |
552 | +-- Table structure for eval_group_dim | |
553 | +-- ---------------------------- | |
554 | +DROP TABLE IF EXISTS `eval_group_dim`; | |
555 | +CREATE TABLE `eval_group_dim` ( | |
556 | +`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', | |
557 | +`eval_group_id` bigint(20) NOT NULL COMMENT '考评组配置id', | |
558 | +`eval_stage_id` bigint(20) NOT NULL COMMENT '考评阶段id', | |
559 | +`type` tinyint(4) NOT NULL COMMENT '维度类型 1:人员 2:门店', | |
560 | +`shop_ids` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '门店id', | |
561 | +`shop_names` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '门店名称', | |
562 | +`post_ids` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '岗位id', | |
563 | +`post_names` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '岗位', | |
564 | +`dist_role_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '门店奖惩分配角色', | |
565 | +`dist_role_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '门店奖惩分配角色名称', | |
566 | +`yn` tinyint(1) NULL DEFAULT 1 COMMENT '逻辑删除', | |
567 | +`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', | |
568 | +`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', | |
569 | +PRIMARY KEY (`id`) USING BTREE | |
570 | +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '考评奖惩' ROW_FORMAT = Dynamic; | |
539 | 571 | |
540 | -ALTER TABLE `fw_morax`.`eval` | |
541 | - ADD COLUMN `multi_stage` tinyint(1) NULL COMMENT '多阶段' AFTER `over_time`; | |
572 | +-- ---------------------------- | |
573 | +-- Table structure for eval_group_rank | |
574 | +-- ---------------------------- | |
575 | +DROP TABLE IF EXISTS `eval_group_rank`; | |
576 | +CREATE TABLE `eval_group_rank` ( | |
577 | +`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', | |
578 | +`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '考评,活动名称', | |
579 | +`status` tinyint(4) NOT NULL COMMENT '状态;1:审批中 2:审批拒绝 3:生效中 4:草稿 ', | |
580 | +`begin_time` date NULL DEFAULT NULL COMMENT '开始时间', | |
581 | +`over_time` date NULL DEFAULT NULL COMMENT '结束时间', | |
582 | +`multi_stage` tinyint(1) NULL DEFAULT NULL COMMENT '多阶段', | |
583 | +`reason` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '原因', | |
584 | +`attachment` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '附件;fid逗号隔开', | |
585 | +`group_id` bigint(20) NOT NULL COMMENT '集团id', | |
586 | +`yn` tinyint(1) NULL DEFAULT 1 COMMENT '逻辑删除', | |
587 | +`create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', | |
588 | +`update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', | |
589 | +PRIMARY KEY (`id`) USING BTREE | |
590 | +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '考评' ROW_FORMAT = Dynamic; | |
542 | 591 | |
543 | -ALTER TABLE `fw_morax`.`eval_group` | |
544 | - MODIFY COLUMN `eval_id` bigint(20) NULL COMMENT '考评' AFTER `id`, | |
545 | - ADD COLUMN `eval_group_rank_id` bigint(20) NULL COMMENT '考评排名组id' AFTER `eval_id`; | |
592 | +-- ---------------------------- | |
593 | +-- Table structure for eval_group_rank_stage | |
594 | +-- ---------------------------- | |
595 | +DROP TABLE IF EXISTS `eval_group_rank_stage`; | |
596 | +CREATE TABLE `eval_group_rank_stage` ( | |
597 | + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', | |
598 | + `eval_group_rank_id` bigint(20) NULL DEFAULT NULL COMMENT '考评排名组id', | |
599 | + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '阶段名称', | |
600 | + `begin_time` date NULL DEFAULT NULL COMMENT '开始时间', | |
601 | + `over_time` date NULL DEFAULT NULL COMMENT '结束时间', | |
602 | + `yn` tinyint(1) NULL DEFAULT 1 COMMENT '逻辑删除', | |
603 | + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', | |
604 | + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', | |
605 | + PRIMARY KEY (`id`) USING BTREE | |
606 | +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '考评' ROW_FORMAT = Dynamic; | |
607 | + | |
608 | +-- ---------------------------- | |
609 | +-- Table structure for eval_group_user | |
610 | +-- ---------------------------- | |
611 | +DROP TABLE IF EXISTS `eval_group_user`; | |
612 | +CREATE TABLE `eval_group_user` ( | |
613 | + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', | |
614 | + `eval_group_rank_id` bigint(20) NOT NULL COMMENT '考评排名组id', | |
615 | + `egc` varchar(60) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '考评组编码', | |
616 | + `eval_group_id` bigint(20) NULL DEFAULT NULL COMMENT '考评组id', | |
617 | + `user_id` bigint(20) NOT NULL COMMENT '人员id', | |
618 | + `user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '人员名称', | |
619 | + `post_id` bigint(20) NOT NULL COMMENT '岗位码', | |
620 | + `post_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '岗位名称', | |
621 | + `shop_id` bigint(20) NOT NULL COMMENT '门店id', | |
622 | + `shop_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '在职门店', | |
623 | + `ignored` tinyint(1) NOT NULL COMMENT '是否不计入考评考核', | |
624 | + `ignore_cause` tinyint(4) NULL DEFAULT NULL COMMENT '不计入原因;枚举待定', | |
625 | + `ignore_cause_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '不计入原因描述', | |
626 | + `anticipated_date` date NULL DEFAULT NULL COMMENT '开始考核时间', | |
627 | + `remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注', | |
628 | + `data_date` date NULL DEFAULT NULL COMMENT '数据日期', | |
629 | + `group_id` bigint(20) NOT NULL COMMENT '集团id', | |
630 | + `yn` tinyint(1) NULL DEFAULT 1 COMMENT '逻辑删除', | |
631 | + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', | |
632 | + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '更新时间', | |
633 | + PRIMARY KEY (`id`) USING BTREE, | |
634 | + INDEX `eval_group_user_data_date_index`(`data_date`) USING BTREE, | |
635 | + INDEX `eval_group_user_user_id_index`(`user_id`) USING BTREE | |
636 | +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '考评组人员' ROW_FORMAT = Dynamic; | |
637 | + | |
638 | +SET FOREIGN_KEY_CHECKS = 1; | |
639 | + | |
640 | +CREATE TABLE `salary_closure` ( | |
641 | +`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', | |
642 | +`shop_id` bigint(20) NOT NULL COMMENT '门店id', | |
643 | +`monthly` varchar(8) NOT NULL COMMENT '月度', | |
644 | +`closure_time` date NOT NULL COMMENT '关单时间', | |
645 | +`appeal_end_time` date NOT NULL COMMENT '申述结束时间', | |
646 | +`approve_end_time` date DEFAULT NULL COMMENT '审批结束时间', | |
647 | +`closure_kpi` tinyint(1) DEFAULT NULL COMMENT '门店绩效是否关单', | |
648 | +`create_confirm_todo` tinyint(1) DEFAULT NULL COMMENT '是否生成薪酬确认待办', | |
649 | +`create_sheet` tinyint(1) DEFAULT NULL COMMENT '是否生成工资单', | |
650 | +`group_id` bigint(20) NOT NULL COMMENT '集团id', | |
651 | +`yn` tinyint(1) DEFAULT '1' COMMENT '逻辑删除', | |
652 | +`create_time` datetime DEFAULT NULL COMMENT '创建时间', | |
653 | +`update_time` datetime DEFAULT NULL COMMENT '更新时间', | |
654 | +PRIMARY KEY (`id`) | |
655 | +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='薪酬月度通用设置'; | |
656 | + | |
657 | +CREATE TABLE `kpi_stage_mq_log` ( | |
658 | +`id` bigint(20) NOT NULL AUTO_INCREMENT, | |
659 | +`code` varchar(255) NOT NULL COMMENT '绩效指标编码', | |
660 | +`eval_group_rank_id` bigint(20) NOT NULL COMMENT '考评排名组id', | |
661 | +`eval_group_id` bigint(20) NOT NULL COMMENT '考评组id', | |
662 | +`begin_time` date NOT NULL COMMENT '开始时间', | |
663 | +`over_time` date NOT NULL COMMENT '结束时间', | |
664 | +`shop_ids` varchar(1024) DEFAULT NULL COMMENT '门店', | |
665 | +`user_ids` varchar(3000) DEFAULT NULL COMMENT '用户id', | |
666 | +`group_id` bigint(20) DEFAULT NULL COMMENT '集团id', | |
667 | +`create_time` datetime DEFAULT NULL COMMENT '创建时间', | |
668 | +PRIMARY KEY (`id`) | |
669 | +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; | |
670 | + | |
671 | +CREATE TABLE `indicator_user_stage_value` ( | |
672 | + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', | |
673 | + `user_id` bigint(20) NOT NULL COMMENT '人员id', | |
674 | + `shop_id` bigint(20) DEFAULT '-1' COMMENT '门店id', | |
675 | + `dimension_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '维度类型 1:人员 2:门店', | |
676 | + `indicator_code` varchar(255) NOT NULL COMMENT '指标编码', | |
677 | + `indicator_name` varchar(255) DEFAULT NULL COMMENT '指标库名称', | |
678 | + `indicator_value` mediumtext NOT NULL COMMENT '指标业务值', | |
679 | + `value_type` tinyint(4) NOT NULL COMMENT '类型:1: 百分比 2:数量 3:条件值 4:金额 5:工龄', | |
680 | + `begin_date` date DEFAULT NULL COMMENT '数据开始日期', | |
681 | + `end_date` date DEFAULT NULL COMMENT '数据结束日期', | |
682 | + `group_id` bigint(20) NOT NULL COMMENT '集团id', | |
683 | + `yn` tinyint(1) DEFAULT '1' COMMENT '逻辑删除', | |
684 | + `create_time` datetime DEFAULT NULL COMMENT '创建时间', | |
685 | + `update_time` datetime DEFAULT NULL COMMENT '更新时间', | |
686 | + PRIMARY KEY (`id`), | |
687 | + KEY `kpi_indicator_value_data_date_index` (`begin_date`), | |
688 | + KEY `kpi_indicator_value_user_id_index` (`user_id`), | |
689 | + KEY `indicator_user_value_indicator_code_index` (`indicator_code`), | |
690 | + KEY `kpi_indicator_value_end_date_index` (`end_date`) USING BTREE | |
691 | +) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='绩效人员指标阶段业务值'; | |
546 | 692 | |
547 | -ALTER TABLE `fw_morax`.`eval_group_reward` | |
548 | - ADD COLUMN `eval_stage_id` bigint(20) NULL COMMENT '考评阶段id' AFTER `id`, | |
549 | -ADD COLUMN `post_ids` varchar(512) NULL COMMENT '岗位id' AFTER `eval_stage_id`, | |
550 | -ADD COLUMN `post_names` varchar(512) NOT NULL COMMENT '岗位' AFTER `post_ids`, | |
551 | -MODIFY COLUMN `cal_method` int(11) NULL COMMENT '计算方式; 1: 排名正负激励 2:阶梯奖励(翻倍) 3:总金额X达成率占比 4:固定值X达成率 5: 固定值+超额部分追加奖励' AFTER `ladders_type`; | |
552 | 693 | |
553 | -ALTER TABLE `fw_morax`.`eval_group_user` | |
554 | - CHANGE COLUMN `eval_id` `eval_group_rank_id` bigint(20) NOT NULL COMMENT '考评排名组id' AFTER `id`; | |
555 | 694 | |
556 | 695 | -- eval_stage |
557 | 696 | -- salary_closure | ... | ... |
fw-morax-dao/src/main/resources/mapper/eval/EvalGroupMapper.xml
... | ... | @@ -43,20 +43,6 @@ |
43 | 43 | and DATE_FORMAT(t2.over_time, '%Y-%m-%d') >= DATE_FORMAT(#{day}, '%Y-%m-%d') |
44 | 44 | </select> |
45 | 45 | |
46 | - <select id="getAllEffectGroupByEgcs" resultMap="BaseResultMap"> | |
47 | - select | |
48 | - <include refid="all_columns"/> | |
49 | - from eval_group | |
50 | - where yn = 1 | |
51 | - and DATE_FORMAT(begin_time, '%Y-%m-%d') <= DATE_FORMAT(#{day}, '%Y-%m-%d') | |
52 | - and DATE_FORMAT(over_time, '%Y-%m-%d') >= DATE_FORMAT(#{day}, '%Y-%m-%d') | |
53 | - and eval_id in (select id from eval where `status` in (3,4) and yn = 1) | |
54 | - AND egc IN | |
55 | - <foreach collection="egcs" item="egc" separator=" , " open="(" close=")"> | |
56 | - #{egc} | |
57 | - </foreach> | |
58 | - </select> | |
59 | - | |
60 | 46 | <select id="getEffectGroups" resultMap="BaseResultMap"> |
61 | 47 | select |
62 | 48 | <include refid="all_columns"/> | ... | ... |
fw-morax-dao/src/main/resources/mapper/eval/EvalGroupRankStageDao.xml
fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java
fw-morax-server/src/main/java/cn/fw/morax/server/controller/app/EvalController.java
... | ... | @@ -9,6 +9,7 @@ import cn.fw.data.base.domain.common.Message; |
9 | 9 | import cn.fw.morax.common.utils.PublicUtil; |
10 | 10 | import cn.fw.morax.domain.db.eval.EvalGroupRank; |
11 | 11 | import cn.fw.morax.domain.dto.eval.EvalDTO; |
12 | +import cn.fw.morax.domain.dto.eval.EvalGroupRankDTO; | |
12 | 13 | import cn.fw.morax.domain.dto.eval.EvalGroupRankQueryDto; |
13 | 14 | import cn.fw.morax.domain.dto.eval.EvalRewardDistDTO; |
14 | 15 | import cn.fw.morax.domain.vo.eval.*; |
... | ... | @@ -107,6 +108,18 @@ public class EvalController { |
107 | 108 | } |
108 | 109 | |
109 | 110 | /** |
111 | + * 考评排名组草稿详情(审批) | |
112 | + * | |
113 | + * @param id 草稿id | |
114 | + * @return | |
115 | + */ | |
116 | + @GetMapping("/eval-rank-detail") | |
117 | + @ControllerMethod("考评排名组草稿详情(审批)") | |
118 | + public Message<EvalGroupRankDTO> draftEvalGroupRankDetail(@NotNull(message = "草稿id不能为空") Long id) { | |
119 | + return success(settingDraftBizService.draftEvalGroupRankDetail(id)); | |
120 | + } | |
121 | + | |
122 | + /** | |
110 | 123 | * 考评排名组详情 |
111 | 124 | * |
112 | 125 | * @return | ... | ... |
fw-morax-server/src/main/java/cn/fw/morax/server/controller/app/KpiController.java
... | ... | @@ -10,6 +10,7 @@ import cn.fw.morax.common.utils.PublicUtil; |
10 | 10 | import cn.fw.morax.domain.dto.kpi.KpiGroupDTO; |
11 | 11 | import cn.fw.morax.domain.dto.kpi.KpiGroupIndicatorRankDTO; |
12 | 12 | import cn.fw.morax.domain.dto.kpi.KpiGroupRankConfigQueryDTO; |
13 | +import cn.fw.morax.domain.dto.kpi.KpiGroupRankDTO; | |
13 | 14 | import cn.fw.morax.domain.dto.query.*; |
14 | 15 | import cn.fw.morax.domain.enums.KpiAssessTypeEnum; |
15 | 16 | import cn.fw.morax.domain.vo.SelectorVO; |
... | ... | @@ -314,4 +315,17 @@ public class KpiController { |
314 | 315 | return success(kpiGroupBizService.reportGroupConfig(dto)); |
315 | 316 | } |
316 | 317 | |
318 | + /** | |
319 | + * 绩效排名组草稿详情(审批) | |
320 | + * | |
321 | + * @param id 草稿id | |
322 | + * @return | |
323 | + */ | |
324 | + @GetMapping("/kpi-rank-detail") | |
325 | + @ControllerMethod("绩效排名组草稿详情(审批)") | |
326 | + public Message<KpiGroupRankDTO> draftKpiGroupRankDetail(@NotNull(message = "草稿id不能为空") Long id) { | |
327 | + return success(settingDraftBizService.draftKpiGroupRankDetail(id)); | |
328 | + } | |
329 | + | |
330 | + | |
317 | 331 | } | ... | ... |
fw-morax-server/src/main/java/cn/fw/morax/server/controller/erp/EvalConfigController.java
... | ... | @@ -104,7 +104,7 @@ public class EvalConfigController { |
104 | 104 | * @param dto |
105 | 105 | * @return |
106 | 106 | */ |
107 | - @GetMapping("/indicator") | |
107 | + @GetMapping("/indicators") | |
108 | 108 | @ControllerMethod("获取指标") |
109 | 109 | public Message<List<CompositeIndicatorVO>> getIndicators(@Validated EvalConfigPostIndicatorsDTO dto) { |
110 | 110 | return success(evalIndicatorBizService.getIndicators(dto, ApplicableTypeEnum.EVAL)); | ... | ... |
fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalCalcTask.java
... | ... | @@ -36,7 +36,7 @@ public class EvalCalcTask { |
36 | 36 | private final EvalIndicatorValueBizService evalIndicatorValueBizService; |
37 | 37 | |
38 | 38 | /** |
39 | - * 需要计算绩效得分的绩效组写入缓存 每天4点 | |
39 | + * 需要计算考评得分考评组写入缓存 每天4点 | |
40 | 40 | */ |
41 | 41 | @Scheduled(cron = TimeTaskConstant.CACHE_CALCULATE_EVAL_GROUP) |
42 | 42 | public void cacheCalculableEvalGroup() { | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/kpi/EvalKpiBaseCalculator.java
... | ... | @@ -40,6 +40,8 @@ public abstract class EvalKpiBaseCalculator implements Calculator<EvalGroupUserS |
40 | 40 | @Autowired |
41 | 41 | protected IndicatorUserValueService indicatorUserValueService; |
42 | 42 | @Autowired |
43 | + protected IndicatorUserStageValueService indicatorUserStageValueService; | |
44 | + @Autowired | |
43 | 45 | protected EvalIndicatorValueService evalIndicatorValueService; |
44 | 46 | @Autowired |
45 | 47 | protected EvalGroupIndicatorParamService evalGroupIndicatorParamService; |
... | ... | @@ -72,6 +74,7 @@ public abstract class EvalKpiBaseCalculator implements Calculator<EvalGroupUserS |
72 | 74 | } |
73 | 75 | for (int i = 0; i < preconditions.size(); i++) { |
74 | 76 | EvalGroupIndicatorPrecondition precondition = preconditions.get(i); |
77 | + TargetCalcTypeEnum targetCalcType = precondition.getTargetCalcType(); | |
75 | 78 | TargetTypeEnum targetType = precondition.getTargetType(); |
76 | 79 | Optional<BigDecimal> valueOptional = queryValue(obj, precondition.getCodeType(), precondition.getCode()); |
77 | 80 | if (! valueOptional.isPresent()) { |
... | ... | @@ -81,10 +84,9 @@ public abstract class EvalKpiBaseCalculator implements Calculator<EvalGroupUserS |
81 | 84 | BigDecimal indicatorValue = originValue; |
82 | 85 | if (!TargetTypeEnum.NO.equals(targetType)) { |
83 | 86 | BigDecimal targetValue = precondition.getTargetValue(); |
84 | - TargetCalcTypeEnum targetCalcType = precondition.getTargetCalcType(); | |
85 | - if (TargetCalcTypeEnum.TARGET_VALUE.equals(targetCalcType)) { | |
87 | + if (TargetCalcTypeEnum.TARGET_VALUE.equals(targetCalcType) || TargetCalcTypeEnum.STAGE_TARGET.equals(targetCalcType)) { | |
86 | 88 | indicatorValue = indicatorValue.divide(targetValue, 4, RoundingMode.HALF_UP); |
87 | - } else { | |
89 | + } else if (TargetCalcTypeEnum.MINIMUM.equals(targetCalcType)){ | |
88 | 90 | BigDecimal difference = BigDecimal.ONE.subtract(targetValue); |
89 | 91 | if (BigDecimal.ZERO.compareTo(difference) == 0) { |
90 | 92 | difference = BigDecimal.ONE; |
... | ... | @@ -183,25 +185,25 @@ public abstract class EvalKpiBaseCalculator implements Calculator<EvalGroupUserS |
183 | 185 | /** |
184 | 186 | * 查询指标值 |
185 | 187 | * |
186 | - * @param indicatorCode | |
187 | 188 | * @return |
188 | 189 | */ |
189 | 190 | protected Optional<BigDecimal> queryValue(EvalGroupUserShop obj, IndicatorCodeTypeEnum codeType, String indicatorCode) { |
190 | 191 | DimensionTypeEnum dimensionType = EvalScopeEnum.STAFF.equals(obj.getScopeType()) ? DimensionTypeEnum.STAFF : DimensionTypeEnum.SHOP; |
191 | 192 | if (IndicatorCodeTypeEnum.INDICATOR.equals(codeType)) { |
192 | - LambdaQueryWrapper<IndicatorUserValue> queryWrapper = Wrappers.<IndicatorUserValue>lambdaQuery() | |
193 | - .eq(IndicatorUserValue::getIndicatorCode, indicatorCode) | |
194 | - .eq(IndicatorUserValue::getDataDate, obj.getDataDate()) | |
195 | - .eq(IndicatorUserValue::getDimensionType, dimensionType) | |
196 | - .eq(IndicatorUserValue::getYn, Boolean.TRUE) | |
197 | - .eq(IndicatorUserValue::getGroupId, obj.getGroupId()); | |
193 | + LambdaQueryWrapper<IndicatorUserStageValue> queryWrapper = Wrappers.<IndicatorUserStageValue>lambdaQuery() | |
194 | + .eq(IndicatorUserStageValue::getIndicatorCode, indicatorCode) | |
195 | + .eq(IndicatorUserStageValue::getBeginDate, obj.getBeginDate()) | |
196 | + .eq(IndicatorUserStageValue::getEndDate, obj.getDataDate()) | |
197 | + .eq(IndicatorUserStageValue::getDimensionType, dimensionType) | |
198 | + .eq(IndicatorUserStageValue::getYn, Boolean.TRUE) | |
199 | + .eq(IndicatorUserStageValue::getGroupId, obj.getGroupId()); | |
198 | 200 | if (EvalScopeEnum.STAFF.equals(obj.getScopeType())) { |
199 | - queryWrapper.eq(IndicatorUserValue::getUserId, obj.getReferId()); | |
201 | + queryWrapper.eq(IndicatorUserStageValue::getUserId, obj.getReferId()); | |
200 | 202 | } else { |
201 | - queryWrapper.eq(IndicatorUserValue::getShopId, obj.getReferId()); | |
203 | + queryWrapper.eq(IndicatorUserStageValue::getShopId, obj.getReferId()); | |
202 | 204 | } |
203 | - IndicatorUserValue indicatorUserValue = indicatorUserValueService.getOne(queryWrapper, Boolean.FALSE); | |
204 | - return queryKpiIndicatorValue(indicatorUserValue); | |
205 | + IndicatorUserStageValue indicatorUserStageValue = indicatorUserStageValueService.getOne(queryWrapper, Boolean.FALSE); | |
206 | + return queryKpiIndicatorValue(indicatorUserStageValue); | |
205 | 207 | } |
206 | 208 | |
207 | 209 | EvalIndicatorValue evalIndicatorValue = evalIndicatorValueService.queryLastValue(obj.getReferId(), |
... | ... | @@ -241,19 +243,19 @@ public abstract class EvalKpiBaseCalculator implements Calculator<EvalGroupUserS |
241 | 243 | /** |
242 | 244 | * 查询具体指标值 |
243 | 245 | * |
244 | - * @param indicatorUserValue | |
246 | + * @param indicatorUserStageValue | |
245 | 247 | * @return |
246 | 248 | */ |
247 | - protected Optional<BigDecimal> queryKpiIndicatorValue(IndicatorUserValue indicatorUserValue) { | |
248 | - if (PublicUtil.isEmpty(indicatorUserValue) || PublicUtil.isEmpty(indicatorUserValue.getIndicatorValue())) { | |
249 | + protected Optional<BigDecimal> queryKpiIndicatorValue(IndicatorUserStageValue indicatorUserStageValue) { | |
250 | + if (PublicUtil.isEmpty(indicatorUserStageValue) || PublicUtil.isEmpty(indicatorUserStageValue.getIndicatorValue())) { | |
249 | 251 | return Optional.empty(); |
250 | 252 | } |
251 | 253 | BigDecimal value = BigDecimal.ZERO; |
252 | 254 | try { |
253 | - JSONObject jsonObject = JSONObject.parseObject(indicatorUserValue.getIndicatorValue()); | |
254 | - value = Optional.ofNullable(jsonObject.getBigDecimal(indicatorUserValue.getIndicatorCode())).orElse(BigDecimal.ZERO); | |
255 | + JSONObject jsonObject = JSONObject.parseObject(indicatorUserStageValue.getIndicatorValue()); | |
256 | + value = Optional.ofNullable(jsonObject.getBigDecimal(indicatorUserStageValue.getIndicatorCode())).orElse(BigDecimal.ZERO); | |
255 | 257 | } catch (Exception e) { |
256 | - log.error("[{}]指标值转化失败", indicatorUserValue, e); | |
258 | + log.error("[{}]指标值转化失败", indicatorUserStageValue, e); | |
257 | 259 | } |
258 | 260 | return Optional.of(value); |
259 | 261 | } | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java
... | ... | @@ -98,7 +98,7 @@ public class EvalCalculateService { |
98 | 98 | |
99 | 99 | @Value("${spring.cache.custom.global-prefix}:calculable:eval-group") |
100 | 100 | @Getter |
101 | - private String caculEvalGroup; | |
101 | + private String calcEvalGroup; | |
102 | 102 | |
103 | 103 | @Value("${spring.cache.custom.global-prefix}:eval:calculate-rank") |
104 | 104 | @Getter |
... | ... | @@ -111,7 +111,9 @@ public class EvalCalculateService { |
111 | 111 | */ |
112 | 112 | public void cacheCalculableEvalGroupIds(final LocalDate localDate) { |
113 | 113 | log.info("定时任务【缓存需要计算的考评组】开始执行"); |
114 | - Set<Long> evalGroupIds = evalGroupService.queryCalculableEvalGroupIds(localDate); | |
114 | + List<EvalGroup> evalGroups = evalGroupService.getAllEffectGroups(localDate); | |
115 | + Set<Long> evalGroupIds = evalGroups.stream().map(EvalGroup::getId).collect(Collectors.toSet()); | |
116 | +// Set<Long> evalGroupIds = evalGroupService.queryCalculableEvalGroupIds(localDate); | |
115 | 117 | if (CollectionUtils.isEmpty(evalGroupIds)) { |
116 | 118 | return; |
117 | 119 | } |
... | ... | @@ -125,12 +127,12 @@ public class EvalCalculateService { |
125 | 127 | .map(evalGroupId -> new EvalGroupCalculableBO(evalGroupId, localDate)) |
126 | 128 | .map(JSONObject::toJSONString) |
127 | 129 | .toArray(String[]::new); |
128 | - stringRedisTemplate.opsForSet().add(getCaculEvalGroup(), array); | |
130 | + stringRedisTemplate.opsForSet().add(getCalcEvalGroup(), array); | |
129 | 131 | } |
130 | 132 | |
131 | 133 | |
132 | 134 | public void calculateCacheEvalGroup() { |
133 | - BoundSetOperations<String, String> setOps = stringRedisTemplate.boundSetOps(getCaculEvalGroup()); | |
135 | + BoundSetOperations<String, String> setOps = stringRedisTemplate.boundSetOps(getCalcEvalGroup()); | |
134 | 136 | ThreadPoolExecutor threadPool = ThreadPoolUtil.getInstance().getThreadPool(); |
135 | 137 | List<String> overflowsList = new ArrayList<>(); |
136 | 138 | String str; |
... | ... | @@ -174,7 +176,12 @@ public class EvalCalculateService { |
174 | 176 | log.error("考评组[{}]不存在,终止计算!", evalGroupId); |
175 | 177 | return; |
176 | 178 | } |
177 | - List<EvalGroupUserShop> userShops = this.buildEvalGroupObj(evalGroup, localDate, scopeType); | |
179 | + EvalGroupRankStage evalGroupRankStage = evalGroupRankStageService.getById(evalGroup.getEvalGroupRankStageId()); | |
180 | + if (Objects.isNull(evalGroupRankStage)) { | |
181 | + log.error("考评排名组阶段[{}]不存在,终止计算!", JSON.toJSONString(evalGroup)); | |
182 | + return; | |
183 | + } | |
184 | + List<EvalGroupUserShop> userShops = this.buildEvalGroupObj(evalGroup, evalGroupRankStage.getBeginTime(), localDate, scopeType); | |
178 | 185 | if (CollectionUtils.isEmpty(userShops)) { |
179 | 186 | log.error("考评组[{}]人员为空,终止计算!", evalGroupId); |
180 | 187 | return; |
... | ... | @@ -253,7 +260,7 @@ public class EvalCalculateService { |
253 | 260 | } |
254 | 261 | |
255 | 262 | |
256 | - public List<EvalGroupUserShop> buildEvalGroupObj(EvalGroup evalGroup, LocalDate localDate, EvalScopeEnum scopeType) { | |
263 | + public List<EvalGroupUserShop> buildEvalGroupObj(EvalGroup evalGroup, LocalDate beginDate, LocalDate localDate, EvalScopeEnum scopeType) { | |
257 | 264 | List<EvalGroupUserShop> userShops = new ArrayList<>(); |
258 | 265 | if (EvalScopeEnum.STAFF.equals(scopeType)) { |
259 | 266 | List<EvalGroupUser> users = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery() |
... | ... | @@ -277,7 +284,7 @@ public class EvalCalculateService { |
277 | 284 | Map<Long, EvalShopPool> shopPoolBOMap = evalPoolCommonService.inspectionShopPools(evalGroup, localDate); |
278 | 285 | for (Long shopId : shopIds) { |
279 | 286 | EvalShopPool shopPool = shopPoolBOMap.get(shopId); |
280 | - userShops.add(convertBO(shopPool, evalGroup, localDate)); | |
287 | + userShops.add(convertBO(shopPool, evalGroup, beginDate, localDate)); | |
281 | 288 | } |
282 | 289 | return userShops; |
283 | 290 | } |
... | ... | @@ -584,7 +591,7 @@ public class EvalCalculateService { |
584 | 591 | return userShop; |
585 | 592 | } |
586 | 593 | |
587 | - public EvalGroupUserShop convertBO(EvalShopPool shopPool, EvalGroup evalGroup, LocalDate dataDate) { | |
594 | + public EvalGroupUserShop convertBO(EvalShopPool shopPool, EvalGroup evalGroup, LocalDate beginDate, LocalDate dataDate) { | |
588 | 595 | EvalGroupUserShop userShop = new EvalGroupUserShop(); |
589 | 596 | userShop.setName(shopPool.getShopName()); |
590 | 597 | userShop.setReferId(shopPool.getShopId()); |
... | ... | @@ -592,6 +599,7 @@ public class EvalCalculateService { |
592 | 599 | userShop.setScopeType(EvalScopeEnum.SHOP); |
593 | 600 | userShop.setEvalId(userShop.getEvalId()); |
594 | 601 | userShop.setEvalGroupId(evalGroup.getId()); |
602 | + userShop.setBeginDate(beginDate); | |
595 | 603 | userShop.setDataDate(dataDate); |
596 | 604 | userShop.setGroupId(evalGroup.getGroupId()); |
597 | 605 | userShop.setScore(BigDecimal.ZERO); | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupRankBizService.java
... | ... | @@ -188,11 +188,13 @@ public class EvalGroupRankBizService { |
188 | 188 | checkEvalIndicatorLadders(evalGroupDTO.getIndicators()); |
189 | 189 | |
190 | 190 | for (EvalGroupRewardDimDTO dimDTO : evalGroupDTO.getStaffRewardDims()) { |
191 | + checkRewardDim(dimDTO, EvalScopeEnum.STAFF); | |
191 | 192 | checkReward(dimDTO.getRewards()); |
192 | 193 | checkEvalRewardLadders(dimDTO.getRewards()); |
193 | 194 | sortRewardRankLadders(dimDTO.getRewards()); |
194 | 195 | } |
195 | 196 | for (EvalGroupRewardDimDTO dimDTO : evalGroupDTO.getShopRewardDims()) { |
197 | + checkRewardDim(dimDTO, EvalScopeEnum.SHOP); | |
196 | 198 | checkReward(dimDTO.getRewards()); |
197 | 199 | checkEvalRewardLadders(dimDTO.getRewards()); |
198 | 200 | sortRewardRankLadders(dimDTO.getRewards()); |
... | ... | @@ -430,6 +432,20 @@ public class EvalGroupRankBizService { |
430 | 432 | } |
431 | 433 | } |
432 | 434 | |
435 | + public void checkRewardDim(EvalGroupRewardDimDTO dimDTO, EvalScopeEnum type) { | |
436 | + if (EvalScopeEnum.STAFF.equals(type)) { | |
437 | + if (PublicUtil.isEmpty(dimDTO.getPostIds()) || PublicUtil.isEmpty(dimDTO.getPostNames())) { | |
438 | + throw new BusinessException("人员考评岗位信息必填"); | |
439 | + } | |
440 | + return; | |
441 | + } | |
442 | + | |
443 | + if (PublicUtil.isEmpty(dimDTO.getShopIds()) || PublicUtil.isEmpty(dimDTO.getShopNames()) | |
444 | + || PublicUtil.isEmpty(dimDTO.getDistRoleCode()) || PublicUtil.isEmpty(dimDTO.getDistRoleName())) { | |
445 | + throw new BusinessException("门店考评门店、分配奖惩角色信息必填"); | |
446 | + } | |
447 | + } | |
448 | + | |
433 | 449 | /** |
434 | 450 | * 检查考评组指标 |
435 | 451 | * | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalIndicatorBizService.java
... | ... | @@ -310,7 +310,8 @@ public class EvalIndicatorBizService { |
310 | 310 | .eq(EvalIndicator::getYn, Boolean.TRUE) |
311 | 311 | .eq(EvalIndicator::getEnable, Boolean.TRUE) |
312 | 312 | ); |
313 | - | |
313 | + //是否指标配置,是的话需要过滤掉考评指标率指标,这个指标是奖惩中使用的 | |
314 | + Boolean isIndicator = ! evalConfigPostIndicatorsDTO.getReward(); | |
314 | 315 | // List<Long> postIds = new ArrayList<Long>(){{add(evalConfigPostIndicatorsDTO.getPostId());}}; |
315 | 316 | // List<PostInfoDTO> postInfoDTOS = ehrRpcService.getPostInfoList(postIds); |
316 | 317 | // List<String> roleCodes = postInfoDTOS.stream() |
... | ... | @@ -325,7 +326,7 @@ public class EvalIndicatorBizService { |
325 | 326 | //绩效指标 如果是指标考核需要过滤掉考评指标 |
326 | 327 | List<Indicators> indicators = indicatorsService.list(Wrappers.<Indicators>lambdaQuery() |
327 | 328 | .apply(MessageFormatUtil.transferWithQuotationMarks("FIND_IN_SET({0}, apply_types)", applicableType.getValue())) |
328 | - .ne(evalConfigPostIndicatorsDTO.getReward(), Indicators::getIndicatorCode, specialIndicatorCodeVal.getEvalRatio()) | |
329 | + .ne(isIndicator, Indicators::getIndicatorCode, specialIndicatorCodeVal.getEvalRatio()) | |
329 | 330 | .eq(Indicators::getEnable, Boolean.TRUE) |
330 | 331 | .eq(Indicators::getYn, Boolean.TRUE) |
331 | 332 | ); | ... | ... |
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/impl/EvalGroupRankStageServiceImpl.java
... | ... | @@ -23,6 +23,6 @@ public class EvalGroupRankStageServiceImpl extends ServiceImpl<EvalGroupRankStag |
23 | 23 | |
24 | 24 | @Override |
25 | 25 | public List<EvalGroupRankStage> getEffects(LocalDate dataDate) { |
26 | - return this.getEffects(dataDate); | |
26 | + return this.baseMapper.getEffects(dataDate); | |
27 | 27 | } |
28 | 28 | } | ... | ... |