Commit 80e64f6f5aecdcc3b566aa7e02c8e01aa98b29c3

Authored by 姜超
1 parent 1b9fa64d

feature(*): 考评排名组保存修改

考评排名组保存修改
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') &lt;= 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
... ... @@ -14,4 +14,6 @@
14 14 <result column="update_time" property="updateTime"/>
15 15 </resultMap>
16 16  
  17 +
  18 +
17 19 </mapper>
18 20 \ No newline at end of file
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java
... ... @@ -58,6 +58,11 @@ public class EvalGroupUserShop {
58 58 private Long referId;
59 59  
60 60 /**
  61 + * 数据开始日期
  62 + */
  63 + private LocalDate beginDate;
  64 +
  65 + /**
61 66 * 数据日期
62 67 */
63 68 private LocalDate dataDate;
... ...
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&lt;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&lt;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&lt;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&lt;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&lt;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&lt;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 }
... ...