Commit 8945afe54d3395f7846d8c53c8d067f30c920125

Authored by 姜超
1 parent 914847ef

feature(*): 考评保存修改

考评保存修改
Showing 33 changed files with 866 additions and 799 deletions
doc/2023_update.sql
... ... @@ -540,11 +540,20 @@ ALTER TABLE `fw_morax`.`eval_group`
540 540 ALTER TABLE `fw_morax`.`eval`
541 541 ADD COLUMN `multi_stage` tinyint(1) NULL COMMENT '多阶段' AFTER `over_time`;
542 542  
  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`;
  546 +
543 547 ALTER TABLE `fw_morax`.`eval_group_reward`
544 548 ADD COLUMN `eval_stage_id` bigint(20) NULL COMMENT '考评阶段id' AFTER `id`,
545 549 ADD COLUMN `post_ids` varchar(512) NULL COMMENT '岗位id' AFTER `eval_stage_id`,
546 550 ADD COLUMN `post_names` varchar(512) NOT NULL COMMENT '岗位' AFTER `post_ids`,
547 551 MODIFY COLUMN `cal_method` int(11) NULL COMMENT '计算方式; 1: 排名正负激励 2:阶梯奖励(翻倍) 3:总金额X达成率占比 4:固定值X达成率 5: 固定值+超额部分追加奖励' AFTER `ladders_type`;
548 552  
  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 +
549 556 -- eval_stage
550   --- salary_closure
551 557 \ No newline at end of file
  558 +-- salary_closure
  559 +-- eval_group_rank
  560 +-- eval_group
552 561 \ No newline at end of file
... ...
fw-morax-dao/src/main/java/cn/fw/morax/dao/eval/EvalGroupDao.java
... ... @@ -44,4 +44,11 @@ public interface EvalGroupDao extends BaseMapper<EvalGroup> {
44 44 Set<Long> queryCalculableEvalGroupIds(@Param("day") LocalDate localDate);
45 45  
46 46 Set<Long> queryDistributionShopReward(@Param("day") LocalDate localDate, @Param("scopeType") Integer scopeType);
  47 +
  48 + /**
  49 + * 查询生效中的考评组
  50 + * @param evalGroupRankId
  51 + * @return
  52 + */
  53 + List<EvalGroup> getEffectsByRankId(@Param("evalGroupRankId") Long evalGroupRankId, @Param("day") LocalDate day);
47 54 }
... ...
fw-morax-dao/src/main/java/cn/fw/morax/dao/eval/EvalStageDao.java renamed to fw-morax-dao/src/main/java/cn/fw/morax/dao/eval/EvalGroupRankStageDao.java
1 1 package cn.fw.morax.dao.eval;
2 2  
3 3  
4   -import cn.fw.morax.domain.db.eval.EvalStage;
  4 +import cn.fw.morax.domain.db.eval.EvalGroupRankStage;
5 5 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
6 6  
7 7 /**
... ... @@ -12,6 +12,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
12 12 * @author jiangchao
13 13 * @since 2022-12-09
14 14 */
15   -public interface EvalStageDao extends BaseMapper<EvalStage> {
  15 +public interface EvalGroupRankStageDao extends BaseMapper<EvalGroupRankStage> {
16 16  
17 17 }
... ...
fw-morax-dao/src/main/resources/mapper/eval/EvalGroupMapper.xml
... ... @@ -3,30 +3,20 @@
3 3 <mapper namespace="cn.fw.morax.dao.eval.EvalGroupDao">
4 4  
5 5 <sql id="all_columns">
6   - id, eval_id, egc, name, post_id, post_name, shop_ids, shop_names, scope_type,
7   - role_codes, role_names, reason, attachment, indicator_num, begin_time, over_time,
8   - group_id, yn, create_time, update_time
  6 + id,eval_group_rank_id,eval_group_rank_stage_id,egc,post_id,post_name,shop_ids,
  7 + shop_names,indicator_num,group_id,yn,create_time,update_time
9 8 </sql>
10 9  
11   -
12   -
13   -
14 10 <!-- 通用查询映射结果 -->
15 11 <resultMap id="BaseResultMap" type="cn.fw.morax.domain.db.eval.EvalGroup">
16 12 <result column="id" property="id"/>
17 13 <result column="egc" property="egc"/>
18   - <result column="eval_id" property="evalId"/>
19   - <result column="name" property="name"/>
20   - <result column="scope_type" property="scopeType"/>
  14 + <result column="eval_group_rank_id" property="evalGroupRankId"/>
  15 + <result column="eval_group_rank_stage_id" property="evalGroupRankStageId"/>
21 16 <result column="post_id" property="postId"/>
22 17 <result column="post_name" property="postName"/>
23 18 <result column="shop_ids" property="shopIds" typeHandler="cn.fw.common.data.mybatis.handler.LongListTypeHandler"/>
24 19 <result column="shop_names" property="shopNames" typeHandler="cn.fw.common.data.mybatis.handler.StringListTypeHandler"/>
25   - <result column="role_codes" property="roleCodes" typeHandler="cn.fw.common.data.mybatis.handler.StringListTypeHandler"/>
26   - <result column="role_names" property="roleNames" typeHandler="cn.fw.common.data.mybatis.handler.StringListTypeHandler"/>
27   -<!-- <result column="reason" property="reason"/>-->
28   -<!-- <result column="attachment" property="attachment"/>-->
29   -<!-- <result column="status" property="status"/>-->
30 20 <result column="indicator_num" property="indicatorNum"/>
31 21 <result column="yn" property="yn"/>
32 22 <result column="create_time" property="createTime"/>
... ... @@ -88,4 +78,26 @@
88 78 and eval_id in (select id from eval where `status` IN (3, 4) and yn = 1)
89 79 </select>
90 80  
  81 + <select id="getEffectsByRankId" resultMap="BaseResultMap">
  82 + select
  83 + t1.id,
  84 + t1.eval_group_rank_id,
  85 + t1.eval_group_rank_stage_id,
  86 + t1.egc,
  87 + t1.name,
  88 + t1.post_id,
  89 + t1.post_name,
  90 + t1.shop_ids,
  91 + t1.shop_names,
  92 + t1.scope_type,
  93 + t1.indicator_num,
  94 + t1.group_id
  95 + from eval_group t1
  96 + left join eval_group_rank_stage t2 on t1.eval_group_rank_stage_id = t2.id and t2.yn = 1
  97 + where t1.yn = 1
  98 + and DATE_FORMAT(t2.begin_time, '%Y-%m-%d') &lt;= DATE_FORMAT(#{day}, '%Y-%m-%d')
  99 + and DATE_FORMAT(t2.over_time, '%Y-%m-%d') >= DATE_FORMAT(#{day}, '%Y-%m-%d')
  100 + and t1.eval_group_rank_id = #{evalGroupRankId}
  101 + </select>
  102 +
91 103 </mapper>
92 104 \ No newline at end of file
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/kpi/EvalGroupCalculableRankBO.java
... ... @@ -26,7 +26,7 @@ public class EvalGroupCalculableRankBO {
26 26 /**
27 27 * 考评范围; 1:人员考评 2:门店考评
28 28 */
29   - private EvalScopeEnum scopeType;
  29 +// private EvalScopeEnum scopeType;
30 30 /**
31 31 * 集团id
32 32 */
... ... @@ -34,7 +34,11 @@ public class EvalGroupCalculableRankBO {
34 34 /**
35 35 * 考评组id
36 36 */
37   - private List<String> egcs;
  37 + private List<Long> evalGroupIds;
  38 + /**
  39 + * 考评组id
  40 + */
  41 +// private List<String> egcs;
38 42 /**
39 43 * 日期
40 44 */
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroup.java
... ... @@ -37,14 +37,14 @@ public class EvalGroup extends BaseAuditableTimeEntity&lt;EvalGroup, Long&gt; {
37 37 private static final long serialVersionUID = 1L;
38 38  
39 39 /**
40   - * 考评id
  40 + * 考评排名组id
41 41 */
42   - private Long evalId;
  42 + private Long evalGroupRankId;
43 43  
44 44 /**
45 45 * 考评阶段id
46 46 */
47   - private Long evalStageId;
  47 + private Long evalGroupRankStageId;
48 48  
49 49 /**
50 50 * 考评组编码
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroupRank.java
... ... @@ -5,6 +5,7 @@ import cn.fw.common.data.entity.BaseAuditableTimeEntity;
5 5 import cn.fw.common.data.entity.BaseAuditableUserEntity;
6 6 import cn.fw.common.data.mybatis.handler.StringListTypeHandler;
7 7 import cn.fw.morax.domain.enums.EvalScopeEnum;
  8 +import cn.fw.morax.domain.enums.EvalTypeEnum;
8 9 import cn.fw.morax.domain.enums.SettingStatusEnum;
9 10 import com.baomidou.mybatisplus.annotation.TableField;
10 11 import com.baomidou.mybatisplus.annotation.TableLogic;
... ... @@ -33,24 +34,19 @@ import java.util.List;
33 34 public class EvalGroupRank extends BaseAuditableEntity<EvalGroupRank, Long> {
34 35  
35 36 /**
36   - * 考评范围; 1:人员考评 2:门店考评
37   - */
38   - private EvalScopeEnum scopeType;
39   - /**
40   - * 组合名称
  37 + * 考评排名组名称
41 38 */
42 39 private String name;
43 40  
44 41 /**
45   - * 考评组编码
  42 + * 状态;1:审批中 2:待生效 3:生效中 4:已失效 5:草稿
46 43 */
47   - @TableField(typeHandler = StringListTypeHandler.class)
48   - private List<String> egcs;
  44 + private SettingStatusEnum status;
49 45  
50 46 /**
51   - * 结束时间
  47 + * 多阶段
52 48 */
53   - private LocalDate overTime;
  49 + private Boolean multiStage;
54 50  
55 51 /**
56 52 * 集团id
... ... @@ -58,9 +54,25 @@ public class EvalGroupRank extends BaseAuditableEntity&lt;EvalGroupRank, Long&gt; {
58 54 private Long groupId;
59 55  
60 56 /**
61   - * 状态;1:审批中 2:待生效 3:生效中 4:已失效 5:草稿
  57 + * 调整原因
62 58 */
63   - private SettingStatusEnum status;
  59 + private String reason;
  60 +
  61 + /**
  62 + * 附件;fid逗号隔开
  63 + */
  64 + @TableField(typeHandler = StringListTypeHandler.class)
  65 + private List<String> attachment;
  66 +
  67 + /**
  68 + * 生效时间
  69 + */
  70 + private LocalDate beginTime;
  71 +
  72 + /**
  73 + * 结束时间
  74 + */
  75 + private LocalDate overTime;
64 76  
65 77 /**
66 78 * 逻辑删除
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalStage.java renamed to fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroupRankStage.java
1 1 package cn.fw.morax.domain.db.eval;
2 2  
3 3 import cn.fw.common.data.entity.BaseAuditableTimeEntity;
4   -import cn.fw.common.data.mybatis.handler.StringListTypeHandler;
5   -import cn.fw.morax.domain.enums.EvalTypeEnum;
6   -import cn.fw.morax.domain.enums.SettingStatusEnum;
7   -import com.baomidou.mybatisplus.annotation.TableField;
8 4 import com.baomidou.mybatisplus.annotation.TableLogic;
9 5 import com.baomidou.mybatisplus.annotation.TableName;
10 6 import lombok.Data;
11 7 import lombok.EqualsAndHashCode;
12 8  
13 9 import java.time.LocalDate;
14   -import java.util.List;
15 10  
16 11 /**
17 12 * <p>
... ... @@ -24,7 +19,7 @@ import java.util.List;
24 19 @Data
25 20 @EqualsAndHashCode(callSuper = false)
26 21 @TableName(autoResultMap = true)
27   -public class EvalStage extends BaseAuditableTimeEntity<EvalStage, Long> {
  22 +public class EvalGroupRankStage extends BaseAuditableTimeEntity<EvalGroupRankStage, Long> {
28 23  
29 24 private static final long serialVersionUID = 1L;
30 25  
... ... @@ -34,9 +29,9 @@ public class EvalStage extends BaseAuditableTimeEntity&lt;EvalStage, Long&gt; {
34 29 private String name;
35 30  
36 31 /**
37   - * 考评id
  32 + * 考评排名组id
38 33 */
39   - private Long evalId;
  34 + private Long evalGroupRankId;
40 35  
41 36 /**
42 37 * 生效时间
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroupUser.java
... ... @@ -20,9 +20,9 @@ import java.time.LocalDate;
20 20 @TableName(autoResultMap = true)
21 21 public class EvalGroupUser extends BaseAuditableTimeEntity<EvalGroupUser, Long> {
22 22 /**
23   - * 考评id
  23 + * 考评排名组id
24 24 */
25   - private Long evalId;
  25 + private Long evalGroupRankId;
26 26 /**
27 27 * 考评组编码
28 28 */
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/dto/eval/EvalDTO.java
1 1 package cn.fw.morax.domain.dto.eval;
2 2  
3 3 import cn.fw.common.web.annotation.LoginContextField;
4   -import cn.fw.morax.domain.db.eval.EvalGroup;
5   -import cn.fw.morax.domain.db.eval.EvalStage;
6 4 import cn.fw.morax.domain.enums.EvalTypeEnum;
7 5 import cn.fw.morax.domain.enums.SettingDraftStatusEnum;
8 6 import lombok.Data;
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/dto/eval/EvalGroupDTO.java
... ... @@ -46,8 +46,8 @@ public class EvalGroupDTO {
46 46 /**
47 47 * 考评,活动名称
48 48 */
49   - @NotBlank(message = "名称不能为空")
50   - @Length(max = 255, message = "名称超出最大限制")
  49 +// @NotBlank(message = "名称不能为空")
  50 +// @Length(max = 255, message = "名称超出最大限制")
51 51 private String name;
52 52  
53 53 /**
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/dto/eval/EvalGroupRankDto.java renamed to fw-morax-domain/src/main/java/cn/fw/morax/domain/dto/eval/EvalGroupRankDTO.java
... ... @@ -3,6 +3,7 @@ package cn.fw.morax.domain.dto.eval;
3 3 import cn.fw.common.web.annotation.LoginContextField;
4 4 import cn.fw.morax.domain.dto.kpi.KpiGroupRankStarLaddersDTO;
5 5 import cn.fw.morax.domain.enums.EvalScopeEnum;
  6 +import cn.fw.morax.domain.enums.SettingDraftStatusEnum;
6 7 import cn.fw.morax.domain.enums.StarEvaluationEnum;
7 8 import lombok.AllArgsConstructor;
8 9 import lombok.Builder;
... ... @@ -11,10 +12,12 @@ import lombok.NoArgsConstructor;
11 12 import org.hibernate.validator.constraints.Length;
12 13  
13 14 import javax.validation.Valid;
  15 +import javax.validation.constraints.Future;
14 16 import javax.validation.constraints.NotBlank;
15 17 import javax.validation.constraints.NotNull;
16 18 import javax.validation.constraints.Size;
17 19 import java.math.BigDecimal;
  20 +import java.time.LocalDate;
18 21 import java.util.List;
19 22  
20 23 /**
... ... @@ -29,7 +32,7 @@ import java.util.List;
29 32 @Builder
30 33 @NoArgsConstructor
31 34 @AllArgsConstructor
32   -public class EvalGroupRankDto {
  35 +public class EvalGroupRankDTO {
33 36  
34 37 /**
35 38 * id
... ... @@ -37,12 +40,66 @@ public class EvalGroupRankDto {
37 40 private Long id;
38 41  
39 42 /**
40   - * 组合名称
  43 + * 草稿id
41 44 */
42   - @NotBlank(message = "组合名称不能为空")
43   - @Length(max = 255, message = "组合名称超出最大限制")
  45 + private Long draftId;
  46 +
  47 + /**
  48 + * 考评排名组名称
  49 + */
  50 + @NotBlank(message = "考评排名组名称不能为空")
  51 + @Length(max = 255, message = "考评排名组名称超出最大限制")
44 52 private String name;
45 53  
  54 + /**
  55 + * 多阶段
  56 + */
  57 + @NotNull(message = "多阶段不能为空")
  58 + private Boolean multiStage;
  59 +
  60 + /**
  61 + * 生效时间
  62 + */
  63 +// @Future(message = "生效时间不能在当前时间之前")
  64 + @NotNull(message = "生效时间不能为空")
  65 + private LocalDate beginTime;
  66 +
  67 + /**
  68 + * 结束时间
  69 + */
  70 + @NotNull(message = "结束时间不能为空")
  71 + @Future(message = "结束时间不能在当前时间之前")
  72 + private LocalDate overTime;
  73 +
  74 + /**
  75 + * 考评阶段
  76 + */
  77 + @NotNull(message = "考评阶段不能为空")
  78 + @Size(min = 1, message = "考评阶段不能为空")
  79 + @Valid
  80 + private List<EvalStageDTO> stages;
  81 +
  82 + /**
  83 + * 审批单号
  84 + */
  85 + private String approvalNo;
  86 +
  87 + /**
  88 + * 草稿状态 1:未发布 2:发布待审批 3:审批拒绝 4:审批同意 5:撤销审批
  89 + */
  90 + private SettingDraftStatusEnum draftStatus;
  91 +
  92 + /**
  93 + * 调整原因
  94 + */
  95 + @NotBlank(message = "调整原因不能为空")
  96 + @Length(max = 512, message = "调整原因超出最大限制")
  97 + private String reason;
  98 +
  99 + /**
  100 + * 附件;fid逗号隔开
  101 + */
  102 + private List<String> attachment;
46 103  
47 104 /**
48 105 * 集团id
... ... @@ -62,17 +119,17 @@ public class EvalGroupRankDto {
62 119 @LoginContextField(LoginContextField.Name.USER_ID)
63 120 private Long userId;
64 121  
65   - /**
66   - * 考评组编码
67   - */
68   - @NotNull(message = "考评组编码不能为空")
69   - @Size(min = 1, message = "考评组编码不能为空")
70   - private List<String> egcs;
71   -
72   - /**
73   - * 考评范围; 1:门店考评 2:人员考评
74   - */
75   - @NotNull(message = "考评范围不能为空")
76   - private EvalScopeEnum scopeType;
  122 +// /**
  123 +// * 考评组编码
  124 +// */
  125 +// @NotNull(message = "考评组编码不能为空")
  126 +// @Size(min = 1, message = "考评组编码不能为空")
  127 +// private List<String> egcs;
  128 +//
  129 +// /**
  130 +// * 考评范围; 1:门店考评 2:人员考评
  131 +// */
  132 +// @NotNull(message = "考评范围不能为空")
  133 +// private EvalScopeEnum scopeType;
77 134  
78 135 }
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/enums/ApprovalTypeEnum.java
... ... @@ -22,6 +22,7 @@ public enum ApprovalTypeEnum implements IEnum&lt;Integer&gt; {
22 22 EVAL(5, "考评"),
23 23 EVAL_REWARD_DIST(6, "考评奖惩分配"),
24 24 KPI_GROUP_RANK(7, "绩效排名组"),
  25 + EVAL_GROUP_RANK(8, "考评排名组"),
25 26 ;
26 27  
27 28 /**
... ...
fw-morax-domain/src/main/java/cn/fw/morax/domain/enums/TargetTypeEnum.java
... ... @@ -27,6 +27,14 @@ public enum TargetTypeEnum implements IEnum&lt;Integer&gt; {
27 27 * 金额
28 28 */
29 29 MONEY(3, "金额"),
  30 + /**
  31 + * 阶段目标
  32 + */
  33 + STAGE_TARGET(4, "阶段目标"),
  34 + /**
  35 + * 时间进度
  36 + */
  37 + TIME_SCHEDULE(5, "时间进度"),
30 38 ;
31 39  
32 40 /**
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/consumer/FlowConsumer.java
... ... @@ -84,7 +84,7 @@ public class FlowConsumer implements RocketMQListener&lt;ApprovalResult&gt; {
84 84 incomeCompensationBizService.approvalCompensationConfig(approvalRecord, result);
85 85 break;
86 86 }
87   - case EVAL: {
  87 + case EVAL_GROUP_RANK: {
88 88 SettingDraft settingDraft = settingDraftBizService.approvalDraft(approvalRecord, result);
89 89 if (result.getAgree()) {
90 90 evalGroupBizService.approvalEvalConfig(approvalRecord, settingDraft);
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/controller/erp/EvalConfigController.java
... ... @@ -8,7 +8,7 @@ import cn.fw.common.web.auth.annotation.CurrentUser;
8 8 import cn.fw.data.base.domain.common.Message;
9 9 import cn.fw.morax.domain.dto.EvalIndicatorDTO;
10 10 import cn.fw.morax.domain.dto.eval.EvalConfigPostIndicatorsDTO;
11   -import cn.fw.morax.domain.dto.eval.EvalDTO;
  11 +import cn.fw.morax.domain.dto.eval.EvalGroupRankDTO;
12 12 import cn.fw.morax.domain.dto.eval.EvalShopIndicatorsDTO;
13 13 import cn.fw.morax.domain.dto.kpi.IndicatorAbleDTO;
14 14 import cn.fw.morax.domain.dto.query.EvalGroupQueryDTO;
... ... @@ -20,7 +20,6 @@ import cn.fw.morax.domain.vo.eval.EvalIndicatorVO;
20 20 import cn.fw.morax.domain.vo.eval.EvalVO;
21 21 import cn.fw.morax.domain.vo.eval.QueryConditionEvalIndicatorsListVO;
22 22 import cn.fw.morax.service.biz.eval.EvalGroupBizService;
23   -import cn.fw.morax.service.biz.eval.EvalGroupDataService;
24 23 import cn.fw.morax.service.biz.eval.EvalIndicatorBizService;
25 24 import cn.fw.security.auth.client.annotation.Authorization;
26 25 import cn.fw.security.auth.client.annotation.IgnoreAuth;
... ... @@ -104,18 +103,18 @@ public class EvalConfigController {
104 103 }
105 104  
106 105 /**
107   - * 保存考评
  106 + * 保存考评排名组
108 107 *
109 108 * @param dto 考评
110 109 * @return
111 110 */
112   - @PostMapping("/group/{submit}")
113   - @ControllerMethod("保存考评")
114   - public Message<Void> saveEvalGroup(@Validated @RequestBody EvalDTO dto,
  111 + @PostMapping("/group-rank/{submit}")
  112 + @ControllerMethod("保存考评排名组")
  113 + public Message<Void> saveEvalGroup(@Validated @RequestBody EvalGroupRankDTO dto,
115 114 @PathVariable("submit") Integer submit,
116 115 @CurrentUser LoginAuthBean user) {
117 116 Boolean isSubmit = (submit == 1);
118   - evalGroupBizService.saveEvalGroup(dto, user, isSubmit);
  117 + evalGroupBizService.saveEvalGroupRank(dto, user, isSubmit);
119 118 return success();
120 119 }
121 120  
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/controller/erp/EvalGroupRankController.java
... ... @@ -7,8 +7,7 @@ import cn.fw.common.web.auth.LoginAuthBean;
7 7 import cn.fw.common.web.auth.annotation.CurrentUser;
8 8 import cn.fw.data.base.domain.common.Message;
9 9 import cn.fw.morax.common.utils.PublicUtil;
10   -import cn.fw.morax.domain.db.eval.Eval;
11   -import cn.fw.morax.domain.dto.eval.EvalGroupRankDto;
  10 +import cn.fw.morax.domain.dto.eval.EvalGroupRankDTO;
12 11 import cn.fw.morax.domain.dto.query.EvalGroupRankQueryDTO;
13 12 import cn.fw.morax.domain.dto.query.KpiGroupRankStaffQueryDTO;
14 13 import cn.fw.morax.domain.vo.eval.EvalGroupRankVO;
... ... @@ -16,7 +15,6 @@ import cn.fw.morax.domain.vo.eval.EvalGroupUserVO;
16 15 import cn.fw.morax.domain.vo.eval.EvalGroupVO;
17 16 import cn.fw.morax.service.biz.eval.EvalGroupRankBizService;
18 17 import cn.fw.morax.service.biz.eval.EvalGroupUserBizService;
19   -import cn.fw.morax.service.biz.kpi.KpiGroupUserBizService;
20 18 import cn.fw.security.auth.client.annotation.Authorization;
21 19 import cn.fw.security.auth.client.annotation.IgnoreAuth;
22 20 import cn.fw.security.auth.client.enums.AuthType;
... ... @@ -82,7 +80,7 @@ public class EvalGroupRankController {
82 80 */
83 81 @PostMapping("/config")
84 82 @ControllerMethod("考评组排名配置保存")
85   - public Message<Void> saveEvalGroupRank(@RequestBody @Validated EvalGroupRankDto dto, @CurrentUser LoginAuthBean currentUser) {
  83 + public Message<Void> saveEvalGroupRank(@RequestBody @Validated EvalGroupRankDTO dto, @CurrentUser LoginAuthBean currentUser) {
86 84 evalGroupRankBizService.saveEvalGroupRank(dto);
87 85 return success();
88 86 }
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/controller/erp/KpiTaskController.java
... ... @@ -52,7 +52,6 @@ public class KpiTaskController {
52 52 private final FlowConsumer flowConsumer;
53 53 private final KpiCalcTask kpiCalcTask;
54 54 private final EvalUserReportTask evalUserReportTask;
55   - private final EvalShopReportTask evalShopReportTask;
56 55 private final KpiReportTask kpiReportTask;
57 56  
58 57  
... ... @@ -308,17 +307,17 @@ public class KpiTaskController {
308 307 evalUserReportTask.evalUserReportTask();
309 308 return success();
310 309 }
311   - /**
312   - * 考评门店报表定时任务
313   - *
314   - * @return
315   - */
316   - @GetMapping("/eval-shop-report")
317   - @ControllerMethod("考评门店报表定时任务")
318   - public Message<Void> evalShopReportTask() {
319   - evalShopReportTask.evalShopReportTask();
320   - return success();
321   - }
  310 +// /**
  311 +// * 考评门店报表定时任务
  312 +// *
  313 +// * @return
  314 +// */
  315 +// @GetMapping("/eval-shop-report")
  316 +// @ControllerMethod("考评门店报表定时任务")
  317 +// public Message<Void> evalShopReportTask() {
  318 +// evalShopReportTask.evalShopReportTask();
  319 +// return success();
  320 +// }
322 321  
323 322 /**
324 323 * KpiReportTask 绩效报表定时任务 debug
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalGroupTask.java
... ... @@ -3,17 +3,11 @@ package cn.fw.morax.server.task;
3 3 import cn.fw.common.cache.locker.DistributedLocker;
4 4 import cn.fw.morax.common.constant.TimeTaskConstant;
5 5 import cn.fw.morax.common.utils.PublicUtil;
6   -import cn.fw.morax.domain.db.eval.Eval;
7   -import cn.fw.morax.domain.db.eval.EvalGroup;
8   -import cn.fw.morax.domain.db.eval.EvalGroupRank;
9   -import cn.fw.morax.domain.db.eval.EvalShopPool;
  6 +import cn.fw.morax.domain.db.eval.*;
10 7 import cn.fw.morax.domain.enums.EvalScopeEnum;
11 8 import cn.fw.morax.domain.enums.EvalShopPoolStatusEnum;
12 9 import cn.fw.morax.domain.enums.SettingStatusEnum;
13   -import cn.fw.morax.service.data.eval.EvalGroupRankService;
14   -import cn.fw.morax.service.data.eval.EvalGroupService;
15   -import cn.fw.morax.service.data.eval.EvalService;
16   -import cn.fw.morax.service.data.eval.EvalShopPoolService;
  10 +import cn.fw.morax.service.data.eval.*;
17 11 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
18 12 import lombok.Getter;
19 13 import lombok.RequiredArgsConstructor;
... ... @@ -42,11 +36,11 @@ import java.util.stream.Collectors;
42 36 @ConditionalOnProperty(prefix = "task", name = "switch", havingValue = "on")
43 37 public class EvalGroupTask {
44 38  
  39 + private final EvalGroupRankStageService evalGroupRankStageService;
45 40 private final EvalShopPoolService evalShopPoolService;
46   - private final EvalGroupService evalGroupService;
47 41 private final EvalGroupRankService evalGroupRankService;
48   - private final EvalService evalService;
49 42 private final DistributedLocker distributedLocker;
  43 + private final EvalGroupService evalGroupService;
50 44  
51 45 @Value("${spring.cache.custom.global-prefix}:eval:group")
52 46 @Getter
... ... @@ -71,50 +65,26 @@ public class EvalGroupTask {
71 65 try {
72 66 log.info("定时任务【每月考评组配置状态改变】开始执行");
73 67 LocalDate currentTime = LocalDate.now();
74   - List<Eval> evals = evalService.list(Wrappers.<Eval>lambdaQuery()
75   - .eq(Eval::getStatus, SettingStatusEnum.EFFECTIVE)
76   - .eq(Eval::getId, Boolean.TRUE)
  68 + List<EvalGroupRank> evalGroupRanks = evalGroupRankService.list(Wrappers.<EvalGroupRank>lambdaQuery()
  69 + .eq(EvalGroupRank::getStatus, SettingStatusEnum.EFFECTIVE)
  70 + .eq(EvalGroupRank::getYn, Boolean.TRUE)
77 71 );
78   - if (PublicUtil.isEmpty(evals)) {
  72 + if (PublicUtil.isEmpty(evalGroupRanks)) {
79 73 return;
80 74 }
81   - List<Long> evalIds = evals.stream().map(Eval::getId).collect(Collectors.toList());
82   - List<EvalGroup> evalGroups = evalGroupService.list(Wrappers.<EvalGroup>lambdaQuery()
83   - .in(EvalGroup::getEvalId, evalIds)
84   - .eq(EvalGroup::getYn, Boolean.TRUE)
85   - );
86   -
87   - //修改对应门店考评池的状态
88   - LocalDate yesterday = currentTime.minusDays(1);
89   - List<Long> inEffectiveShopEvalGroupIds = evalGroups.stream()
90   - .filter(evalGroup -> EvalScopeEnum.SHOP.equals(evalGroup.getScopeType()) && evalGroup.getOverTime().equals(yesterday))
91   - .map(EvalGroup::getId).collect(Collectors.toList());
92   - if (PublicUtil.isNotEmpty(inEffectiveShopEvalGroupIds)) {
93   - evalShopPoolService.update(Wrappers.<EvalShopPool>lambdaUpdate()
94   - .eq(EvalShopPool::getEvalGroupId, inEffectiveShopEvalGroupIds)
95   - .eq(EvalShopPool::getYn, Boolean.TRUE)
96   - .set(EvalShopPool::getStatus, EvalShopPoolStatusEnum.WAIT_DIST_REWARD)
97   - .set(EvalShopPool::getUpdateTime, new Date())
  75 + List<EvalGroupRank> ineffectiveRanks = new ArrayList<>();
  76 + for (EvalGroupRank evalGroupRank : evalGroupRanks) {
  77 + List<EvalGroupRankStage> stages = evalGroupRankStageService.list(Wrappers.<EvalGroupRankStage>lambdaQuery()
  78 + .eq(EvalGroupRankStage::getEvalGroupRankId, evalGroupRank.getId())
  79 + .eq(EvalGroupRankStage::getYn, Boolean.TRUE)
98 80 );
99   - }
100   -
101   - List<Long> ineffectiveIds = new ArrayList<>();
102   - Map<Long, List<EvalGroup>> evalMap = evalGroups.stream().collect(Collectors.groupingBy(EvalGroup::getEvalId));
103   - for (Map.Entry<Long, List<EvalGroup>> evalEntry : evalMap.entrySet()) {
104   - Boolean existNotEndGroup = evalEntry.getValue().stream()
  81 + Boolean ineffective = stages.stream()
105 82 .filter(evalGroup -> evalGroup.getOverTime().isAfter(currentTime)).findFirst().isPresent();
106   - if (! existNotEndGroup) {
107   - ineffectiveIds.add(evalEntry.getKey());
  83 + if (ineffective) {
  84 + evalGroupRank.setStatus(SettingStatusEnum.INEFFECTIVE);
  85 + ineffectiveRanks.add(evalGroupRank);
108 86 }
109 87 }
110   - if (PublicUtil.isNotEmpty(ineffectiveIds)) {
111   - evalService.update(Wrappers.<Eval>lambdaUpdate()
112   - .in(Eval::getId, ineffectiveIds)
113   - .set(Eval::getStatus, SettingStatusEnum.INEFFECTIVE)
114   - .set(Eval::getUpdateTime, new Date())
115   - );
116   - }
117   -
118 88 } catch (Exception e){
119 89 log.error(e.getMessage(), e);
120 90 } finally {
... ... @@ -133,21 +103,27 @@ public class EvalGroupTask {
133 103 return;
134 104 }
135 105 try {
136   - log.info("定时任务【每月考评排名组配置状态改变】开始执行");
137 106 LocalDate currentTime = LocalDate.now();
138 107 List<EvalGroupRank> evalGroupRanks = evalGroupRankService.list(Wrappers.<EvalGroupRank>lambdaQuery()
139   - .le(EvalGroupRank::getOverTime, currentTime)
140 108 .eq(EvalGroupRank::getStatus, SettingStatusEnum.EFFECTIVE)
141 109 .eq(EvalGroupRank::getYn, Boolean.TRUE)
142 110 );
143 111 if (PublicUtil.isEmpty(evalGroupRanks)) {
144 112 return;
145 113 }
146   - for (EvalGroupRank evalGroupRank : evalGroupRanks) {
147   - evalGroupRank.setStatus(SettingStatusEnum.INEFFECTIVE);
148   - evalGroupRank.setUpdateTime(new Date());
  114 + List<EvalGroupRank> ineffectiveRanks = new ArrayList<>();
  115 + for (EvalGroupRank evalGroupRank : evalGroupRanks) {
  116 + List<EvalGroupRankStage> stages = evalGroupRankStageService.list(Wrappers.<EvalGroupRankStage>lambdaQuery()
  117 + .eq(EvalGroupRankStage::getEvalGroupRankId, evalGroupRank.getId())
  118 + .eq(EvalGroupRankStage::getYn, Boolean.TRUE)
  119 + );
  120 + Boolean effective = stages.stream()
  121 + .filter(evalGroup -> evalGroup.getOverTime().isBefore(currentTime)).findFirst().isPresent();
  122 + if (! effective) {
  123 + evalGroupRank.setStatus(SettingStatusEnum.INEFFECTIVE);
  124 + ineffectiveRanks.add(evalGroupRank);
  125 + }
149 126 }
150   - evalGroupRankService.updateBatchById(evalGroupRanks);
151 127 } catch (Exception e){
152 128 log.error(e.getMessage(), e);
153 129 } finally {
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalShopReportTask.java
1   -package cn.fw.morax.server.task;
2   -
3   -import cn.fw.common.cache.locker.DistributedLocker;
4   -import cn.fw.morax.common.constant.Constant;
5   -import cn.fw.morax.common.constant.TimeTaskConstant;
6   -import cn.fw.morax.common.utils.PublicUtil;
7   -import cn.fw.morax.domain.db.eval.*;
8   -import cn.fw.morax.domain.db.kpi.IndicatorUserValue;
9   -import cn.fw.morax.domain.enums.*;
10   -import cn.fw.morax.service.biz.CommonService;
11   -import cn.fw.morax.service.data.eval.*;
12   -import cn.fw.morax.service.data.kpi.IndicatorUserValueService;
13   -import com.baomidou.mybatisplus.core.toolkit.Wrappers;
14   -import com.google.common.collect.Maps;
15   -import lombok.Getter;
16   -import lombok.RequiredArgsConstructor;
17   -import lombok.extern.slf4j.Slf4j;
18   -import org.redisson.api.RLock;
19   -import org.springframework.beans.factory.annotation.Value;
20   -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
21   -import org.springframework.scheduling.annotation.Scheduled;
22   -import org.springframework.stereotype.Component;
23   -import org.springframework.transaction.PlatformTransactionManager;
24   -import org.springframework.transaction.TransactionDefinition;
25   -import org.springframework.transaction.TransactionStatus;
26   -import org.springframework.transaction.annotation.Transactional;
27   -
28   -import java.math.BigDecimal;
29   -import java.time.LocalDate;
30   -import java.time.YearMonth;
31   -import java.time.temporal.TemporalAdjusters;
32   -import java.util.*;
33   -import java.util.concurrent.atomic.AtomicInteger;
34   -import java.util.concurrent.locks.Lock;
35   -import java.util.function.Function;
36   -import java.util.stream.Collectors;
37   -
38   -/**
39   - * @author : jiangchao
40   - * @className : KpiReportRatioTask
41   - * @description : 绩效报表定时器
42   - * @date : 2022-04-07 15:29
43   - */
44   -@Component
45   -@Slf4j
46   -@RequiredArgsConstructor
47   -@ConditionalOnProperty(prefix = "task", name = "switch", havingValue = "on")
48   -public class EvalShopReportTask {
49   -
50   - private final EvalGroupIndicatorTargetHitLogService evalGroupIndicatorTargetHitLogService;
51   - private final EvalGroupIndicatorHitLogService evalGroupIndicatorHitLogService;
52   - private final EvalGroupIndicatorParamService evalGroupIndicatorParamService;
53   - private final EvalShopRankCodeReportService evalShopRankCodeReportService;
54   - private final EvalShopValueReportService evalShopValueReportService;
55   - private final EvalGroupIndicatorService evalGroupIndicatorService;
56   - private final IndicatorUserValueService indicatorUserValueService;
57   - private final EvalIndicatorValueService evalIndicatorValueService;
58   - private final PlatformTransactionManager platformTransactionManager;
59   - private final EvalShopRankReportService evalShopRankReportService;
60   - private final EvalShopReportService evalShopReportService;
61   - private final TransactionDefinition transactionDefinition;
62   - private final EvalShopPoolService evalShopPoolService;
63   - private final EvalGroupRankService evalGroupRankService;
64   - private final EvalGroupService evalGroupService;
65   - private final DistributedLocker distributedLocker;
66   - private final CommonService commonService;
67   -
68   - @Value("${spring.cache.custom.global-prefix}:eval:shop:report")
69   - @Getter
70   - private String evalShopReportDistKey;
71   -
72   - /**
73   - * 考评报表定时任务
74   - *
75   - */
76   - @Scheduled(cron = TimeTaskConstant.EVAL_REPORT)
77   - @Transactional(rollbackFor = Exception.class)
78   - public void evalShopReportTask() {
79   - this.evalShopReport(LocalDate.now().minusDays(1));
80   - }
81   -
82   - /**
83   - * 绩效报表定时任务
84   - * 1. 遍历考评排名组
85   - * 2. 创建考评排名组报表
86   - * 3. 创建考评排名组编码
87   - * 4. 统计数据
88   - *
89   - * @param date
90   - */
91   - public void evalShopReport(LocalDate date) {
92   - Lock lock = distributedLocker.lock(getEvalShopReportDistKey());
93   - if (! ((RLock) lock).isLocked()) {
94   - return;
95   - }
96   - TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
97   - try {
98   - log.info("定时任务【考评人员报表数据抽取】开始执行");
99   - Map<Long, List<EvalGroupRank>> groupKpiGroupMap = queryShopEffectRank(date);
100   - for (Map.Entry<Long, List<EvalGroupRank>> entry : groupKpiGroupMap.entrySet()) {
101   - for (EvalGroupRank rank : entry.getValue()) {
102   - //清除当月数据(当月只有一条数据)
103   - cleanRankCurMonthData(rank.getId(), date);
104   - //抽取排名组数据
105   - createRankReport(rank, entry.getKey(), date);
106   - }
107   - }
108   - platformTransactionManager.commit(transactionStatus);
109   - } catch (Exception e){
110   - platformTransactionManager.rollback(transactionStatus);
111   - log.error("考评人员报表数据抽取失败, " + e.getMessage(), e);
112   - } finally {
113   - lock.unlock();
114   - }
115   - }
116   -
117   - /**
118   - * 计算排名组报表数据
119   - * @param rank
120   - * @param groupId
121   - * @param date
122   - */
123   - public void createRankReport(EvalGroupRank rank, Long groupId, LocalDate date) {
124   - List<EvalGroup> evalGroups = evalGroupService.getAllEffectGroupByEgcs(rank.getEgcs(), date);
125   - List<Long> evalGroupIds = evalGroups.stream().map(EvalGroup::getId).collect(Collectors.toList());
126   - if (PublicUtil.isEmpty(evalGroupIds)) {
127   - return;
128   - }
129   - List<EvalShopPool> pools = evalShopPoolService.list(Wrappers.<EvalShopPool>lambdaQuery()
130   - .in(EvalShopPool::getEvalGroupId, evalGroupIds)
131   - .eq(EvalShopPool::getMonthly, YearMonth.from(date))
132   - .eq(EvalShopPool::getYn, Boolean.TRUE)
133   - );
134   - if (PublicUtil.isEmpty(pools)) {
135   - return;
136   - }
137   - List<EvalGroupIndicator> evalGroupIndicators = evalGroupIndicatorService.list(Wrappers.<EvalGroupIndicator>lambdaQuery()
138   - .in(EvalGroupIndicator::getEvalGroupId, evalGroupIds)
139   - .eq(EvalGroupIndicator::getYn, Boolean.TRUE)
140   - .orderByAsc(EvalGroupIndicator::getId)
141   - );
142   -
143   - //排名组
144   - EvalShopRankReport reportRank = this.saveRankReport(rank, evalGroupIds, evalGroups, date, groupId);
145   - final Long evalShopRankReportId = reportRank.getId();
146   - //排名组指标编码、人员、门店
147   - this.saveRankCodeReports(evalGroupIndicators, evalShopRankReportId, date);
148   - //门店维度
149   - calcShop(pools, evalGroupIndicators, evalShopRankReportId, date);
150   -
151   - }
152   -
153   - public List<EvalShopValueReport> calcShop(
154   - List<EvalShopPool> pools,
155   - List<EvalGroupIndicator> evalGroupIndicators,
156   - Long evalShopRankReportId,
157   - LocalDate date) {
158   - List<EvalShopValueReport> reportShopValues = new ArrayList<>();
159   - List<Long> shopIds = pools.stream().map(EvalShopPool::getShopId).distinct().collect(Collectors.toList());
160   - List<Long> shopPoolIds = pools.stream().map(EvalShopPool::getId).collect(Collectors.toList());
161   - List<Long> evalGroupIndicatorIds = evalGroupIndicators.stream().map(EvalGroupIndicator::getId).collect(Collectors.toList());
162   - List<EvalGroupIndicatorHitLog> hitLogs = evalGroupIndicatorHitLogService.getHitLogs(evalGroupIndicatorIds, shopPoolIds, EvalScopeEnum.SHOP, date);
163   - Map<Long, List<EvalGroupIndicatorHitLog>> indicatorHitLogMap = hitLogs.stream().collect(Collectors.groupingBy(EvalGroupIndicatorHitLog::getEvalGroupIndicatorId));
164   -
165   - for (EvalShopPool pool : pools) {
166   - EvalShopReport shopReport = this.convertDim(pool, date, evalShopRankReportId);
167   - evalShopReportService.save(shopReport);
168   -
169   - for (EvalGroupIndicator groupIndicator : evalGroupIndicators) {
170   - if (! pool.getEvalGroupId().equals(groupIndicator.getEvalGroupId())) {
171   - continue;
172   - }
173   - final IndicatorCodeTypeEnum codeType = groupIndicator.getCodeType();
174   - final Long evalGroupIndicatorId = groupIndicator.getId();
175   - List<EvalGroupIndicatorParam> params = evalGroupIndicatorParamService.list(Wrappers.<EvalGroupIndicatorParam>lambdaQuery()
176   - .eq(EvalGroupIndicatorParam::getEvalGroupIndicatorId, evalGroupIndicatorId)
177   - .eq(EvalGroupIndicatorParam::getYn, Boolean.TRUE)
178   - );
179   -
180   - List<EvalGroupIndicatorHitLog> userHitLogs = indicatorHitLogMap.getOrDefault(evalGroupIndicatorId, new ArrayList<>());
181   - Map<Long, EvalGroupIndicatorHitLog> poolHitLogMap = userHitLogs.stream()
182   - .collect(Collectors.toMap(EvalGroupIndicatorHitLog::getPoolId, Function.identity(), (v1, v2) -> v1));
183   - BigDecimal hitValue = this.getHitValue(poolHitLogMap, shopReport.getEvalShopPoolId(), groupIndicator.getScoreWay());
184   - reportShopValues.add(convertDB(shopReport.getId(), groupIndicator, hitValue, date, params));
185   - //是否有子指标
186   - if (IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(codeType)) {
187   - for (EvalGroupIndicatorParam param : params) {
188   - if (TargetTypeEnum.NO.equals(param.getTargetType())) {
189   - Map<Long, BigDecimal> userValueMap = queryShopOriginValue(param, shopIds, date);
190   - BigDecimal value = userValueMap.getOrDefault(shopReport.getShopId(), BigDecimal.ZERO);
191   - reportShopValues.add(convertParamDB(shopReport.getId(), param, value, date));
192   - } else {
193   - Map<Long, EvalGroupIndicatorTargetHitLog> hitLogMap = queryShopTargetValue(param.getId(), shopPoolIds, date);
194   - BigDecimal value = Optional.ofNullable(hitLogMap.get(shopReport.getEvalShopPoolId()))
195   - .map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED);
196   - reportShopValues.add(convertParamDB(shopReport.getId(), param, value, date));
197   - }
198   - }
199   - }
200   - }
201   - }
202   -
203   -
204   - if (PublicUtil.isNotEmpty(reportShopValues)) {
205   - evalShopValueReportService.saveBatch(reportShopValues);
206   - }
207   - return reportShopValues;
208   - }
209   -
210   - public BigDecimal getHitValue(Map<Long, EvalGroupIndicatorHitLog> poolHitLogMap, Long evalShopPoolId, ScoreWayEnum scoreWay) {
211   - Optional<EvalGroupIndicatorHitLog> hitLog = Optional.ofNullable(poolHitLogMap.get(evalShopPoolId));
212   - BigDecimal value = (ScoreWayEnum.LADDER.equals(scoreWay)) ?
213   - hitLog.map(EvalGroupIndicatorHitLog::getHitLadderValue).orElse(BigDecimal.ZERO) :
214   - hitLog.map(EvalGroupIndicatorHitLog::getHitCommissionValue).orElse(BigDecimal.ZERO);
215   - return value;
216   - }
217   -
218   - public List<EvalShopReport> saveShopReports(List<EvalShopPool> pools, LocalDate date, Long evalShopRankReportId) {
219   - List<EvalShopReport> evalShopReports = new ArrayList<>();
220   - for (EvalShopPool pool : pools) {
221   - EvalShopReport report = new EvalShopReport();
222   - report.setDimension(ReportDimensionEnum.SHOP);
223   - report.setEvalShopRankReportId(evalShopRankReportId);
224   - report.setShopId(pool.getShopId());
225   - report.setShopName(pool.getShopName());
226   - report.setDataDate(date);
227   - report.setEvalShopPoolId(pool.getId());
228   - evalShopReports.add(report);
229   - }
230   - evalShopReportService.saveBatch(evalShopReports);
231   - return evalShopReports;
232   - }
233   -
234   - public EvalShopReport convertDim(EvalShopPool pool, LocalDate date, Long evalShopRankReportId) {
235   - EvalShopReport report = new EvalShopReport();
236   - report.setDimension(ReportDimensionEnum.SHOP);
237   - report.setEvalShopRankReportId(evalShopRankReportId);
238   - report.setShopId(pool.getShopId());
239   - report.setShopName(pool.getShopName());
240   - report.setDataDate(date);
241   - report.setEvalShopPoolId(pool.getId());
242   - return report;
243   - }
244   -
245   - public Map<Long, BigDecimal> queryShopOriginValue(EvalGroupIndicatorParam param, List<Long> shopIds, LocalDate dataDate) {
246   - final String code = param.getCode();
247   - final IndicatorCodeTypeEnum codeType = param.getCodeType();
248   - Map<Long, BigDecimal> referValueMap = Maps.newHashMapWithExpectedSize(shopIds.size());
249   - //无目标
250   - if (IndicatorCodeTypeEnum.INDICATOR.equals(codeType)) {
251   - List<IndicatorUserValue> indicatorShopValues = indicatorUserValueService.list(Wrappers.<IndicatorUserValue>lambdaQuery()
252   - .eq(IndicatorUserValue::getIndicatorCode, code)
253   - .eq(IndicatorUserValue::getDataDate, dataDate)
254   - .in(IndicatorUserValue::getShopId, shopIds)
255   - .eq(IndicatorUserValue::getDimensionType, DimensionTypeEnum.SHOP)
256   - .eq(IndicatorUserValue::getYn, Boolean.TRUE)
257   - );
258   - for (IndicatorUserValue userValue : indicatorShopValues) {
259   - referValueMap.put(userValue.getShopId(), commonService.queryIndicatorValueVO(code, userValue,
260   - param.getTargetType(), param.getDataType()));
261   - }
262   - return referValueMap;
263   - }
264   - for (Long shopId : shopIds) {
265   - EvalIndicatorValue evalIndicatorValue = evalIndicatorValueService.queryLastValue(shopId,
266   - DimensionTypeEnum.SHOP, code, dataDate);
267   - referValueMap.put(shopId, commonService.queryEvalIndicatorValueVO(code, evalIndicatorValue,
268   - param.getTargetType(), param.getDataType()));
269   - }
270   - return referValueMap;
271   - }
272   -
273   - public Map<Long, EvalGroupIndicatorTargetHitLog> queryShopTargetValue(Long referId, List<Long> poolIds, LocalDate dataDate) {
274   - List<EvalGroupIndicatorTargetHitLog> targetHitLogs = evalGroupIndicatorTargetHitLogService.list(Wrappers.<EvalGroupIndicatorTargetHitLog>lambdaQuery()
275   - .eq(EvalGroupIndicatorTargetHitLog::getReferId, referId)
276   - .eq(EvalGroupIndicatorTargetHitLog::getTargetType, IndicatorTypeEnum.EXAMINE)
277   - .eq(EvalGroupIndicatorTargetHitLog::getDataDate, dataDate)
278   - .in(EvalGroupIndicatorTargetHitLog::getPoolId, poolIds)
279   - .eq(EvalGroupIndicatorTargetHitLog::getScopeType, EvalScopeEnum.SHOP)
280   - .eq(EvalGroupIndicatorTargetHitLog::getYn, Boolean.TRUE)
281   - );
282   - return targetHitLogs.stream()
283   - .collect(Collectors.toMap(EvalGroupIndicatorTargetHitLog::getPoolId, Function.identity(), (v1, v2) -> v1));
284   - }
285   -
286   - public void cleanTodayData(LocalDate date) {
287   - evalShopRankReportService.remove(Wrappers.<EvalShopRankReport>lambdaUpdate()
288   - .eq(EvalShopRankReport::getDataDate, date)
289   - );
290   - evalShopRankCodeReportService.remove(Wrappers.<EvalShopRankCodeReport>lambdaUpdate()
291   - .eq(EvalShopRankCodeReport::getDataDate, date)
292   - );
293   - evalShopValueReportService.remove(Wrappers.<EvalShopValueReport>lambdaUpdate()
294   - .eq(EvalShopValueReport::getDataDate, date)
295   - );
296   - evalShopReportService.remove(Wrappers.<EvalShopReport>lambdaUpdate()
297   - .eq(EvalShopReport::getDataDate, date)
298   - );
299   - }
300   -
301   - public void cleanRankCurMonthData(Long rankId, LocalDate endDate) {
302   - LocalDate startDate = endDate.with(TemporalAdjusters.firstDayOfMonth());
303   - List<EvalShopRankReport> rankReports = evalShopRankReportService.list(Wrappers.<EvalShopRankReport>lambdaQuery()
304   - .eq(EvalShopRankReport::getRankId, rankId)
305   - .ge(EvalShopRankReport::getDataDate, startDate)
306   - .le(EvalShopRankReport::getDataDate, endDate)
307   - );
308   - if (PublicUtil.isEmpty(rankReports)) {
309   - return;
310   - }
311   - List<Long> rankReportIds = rankReports.stream().map(EvalShopRankReport::getId).collect(Collectors.toList());
312   - evalShopRankReportService.removeByIds(rankReportIds);
313   - evalShopRankCodeReportService.remove(Wrappers.<EvalShopRankCodeReport>lambdaUpdate()
314   - .in(EvalShopRankCodeReport::getEvalShopRankReportId, rankReportIds)
315   - );
316   -
317   - List<EvalShopReport> userReports = evalShopReportService.list(Wrappers.<EvalShopReport>lambdaQuery()
318   - .in(EvalShopReport::getEvalShopRankReportId, rankReportIds)
319   - );
320   - List<Long> userReportIds = userReports.stream().map(EvalShopReport::getId).collect(Collectors.toList());
321   - if (PublicUtil.isEmpty(userReportIds)) {
322   - return;
323   - }
324   - evalShopReportService.removeByIds(userReportIds);
325   - evalShopValueReportService.remove(Wrappers.<EvalShopValueReport>lambdaUpdate()
326   - .in(EvalShopValueReport::getEvalShopReportId, userReportIds)
327   - );
328   - }
329   -
330   - public List<EvalShopRankCodeReport> saveRankCodeReports(List<EvalGroupIndicator> evalGroupIndicators, Long reportRankId, LocalDate date) {
331   - Set<String> codes = new HashSet<>();
332   - List<EvalShopRankCodeReport> rankCodes = new ArrayList<>();
333   - AtomicInteger order = new AtomicInteger();
334   - for (EvalGroupIndicator groupIndicator : evalGroupIndicators) {
335   - //一个编码只能展示一次
336   - if (! codes.add(groupIndicator.getCode())) {
337   - continue;
338   - }
339   - rankCodes.add(this.convertRankCodeDB(groupIndicator, date, reportRankId, order));
340   -
341   - //组合指标
342   - if (PublicUtil.isNotEmpty(groupIndicator.getCodeType()) && IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(groupIndicator.getCodeType())) {
343   - //子指标
344   - List<EvalGroupIndicatorParam> params = evalGroupIndicatorParamService.list(Wrappers.<EvalGroupIndicatorParam>lambdaQuery()
345   - .eq(EvalGroupIndicatorParam::getEvalGroupIndicatorId, groupIndicator.getId())
346   - .eq(EvalGroupIndicatorParam::getYn, Boolean.TRUE)
347   - );
348   - for (EvalGroupIndicatorParam indicatorParam : params) {
349   - rankCodes.add(this.convertParamToRankCodeDB(indicatorParam, date, reportRankId, order, groupIndicator));
350   - }
351   - }
352   - }
353   - evalShopRankCodeReportService.saveBatch(rankCodes);
354   - return rankCodes;
355   - }
356   -
357   - public Map<Long, List<EvalGroupRank>> queryShopEffectRank(LocalDate date) {
358   - List<EvalGroupRank> evalGroupRanks = evalGroupRankService.list(Wrappers.<EvalGroupRank>lambdaQuery()
359   - .ge(EvalGroupRank::getOverTime, date)
360   - .eq(EvalGroupRank::getScopeType, EvalScopeEnum.SHOP)
361   - .eq(EvalGroupRank::getYn, Boolean.TRUE)
362   - );
363   - return evalGroupRanks.stream().collect(Collectors.groupingBy(EvalGroupRank::getGroupId));
364   - }
365   -
366   - public EvalShopRankReport saveRankReport(EvalGroupRank rank, List<Long> evalGroupIds, List<EvalGroup> evalGroups, LocalDate date, Long groupId) {
367   - List<Long> shopIds = evalGroups.stream().map(EvalGroup::getShopIds).distinct().collect(ArrayList::new, List::addAll, List::addAll);
368   - EvalShopRankReport reportRank = new EvalShopRankReport();
369   - reportRank.setRankId(rank.getId());
370   - reportRank.setRankName(rank.getName());
371   - reportRank.setEvalGroupIds(evalGroupIds);
372   - reportRank.setShopIds(shopIds);
373   - reportRank.setDataDate(date);
374   - reportRank.setMonthly(YearMonth.from(date));
375   - reportRank.setGroupId(groupId);
376   - evalShopRankReportService.save(reportRank);
377   - return reportRank;
378   - }
379   -
380   - public EvalShopValueReport convertDB(Long evalShopReportId, EvalGroupIndicator groupIndicator, BigDecimal value,
381   - LocalDate date, List<EvalGroupIndicatorParam> params) {
382   - EvalShopValueReport userValue = new EvalShopValueReport();
383   - userValue.setEvalShopReportId(evalShopReportId);
384   - userValue.setCode(groupIndicator.getCode());
385   - userValue.setCodeType(groupIndicator.getCodeType());
386   - userValue.setValue(Optional.ofNullable(value).orElse(BigDecimal.ZERO));
387   - userValue.setDataDate(date);
388   - if (IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(groupIndicator.getCodeType())) {
389   - userValue.setValue(userValue.getValue().multiply(Constant.ONE_HUNDRED));
390   - } else {
391   - Optional<EvalGroupIndicatorParam> paramOptional = params.stream().findFirst();
392   - if (paramOptional.isPresent()) {
393   - DataTypeEnum dataType = paramOptional.get().getDataType();
394   - if (DataTypeEnum.RATIO.equals(dataType)) {
395   - userValue.setValue(userValue.getValue().multiply(Constant.ONE_HUNDRED));
396   - }
397   - }
398   - }
399   - return userValue;
400   - }
401   -
402   - public EvalShopValueReport convertParamDB(Long evalShopReportId, EvalGroupIndicatorParam param, BigDecimal value,
403   - LocalDate date) {
404   - EvalShopValueReport userValue = new EvalShopValueReport();
405   - userValue.setEvalShopReportId(evalShopReportId);
406   - userValue.setCode(param.getCode());
407   - userValue.setCodeType(param.getCodeType());
408   - userValue.setValue(Optional.ofNullable(value).orElse(BigDecimal.ZERO));
409   - userValue.setDataDate(date);
410   - return userValue;
411   - }
412   -
413   - public EvalShopRankCodeReport convertRankCodeDB(EvalGroupIndicator groupIndicator, LocalDate date, Long reportRankId,
414   - AtomicInteger order) {
415   - EvalShopRankCodeReport rankCode = new EvalShopRankCodeReport();
416   - rankCode.setEvalShopRankReportId(reportRankId);
417   - rankCode.setEvalGroupIndicatorId(groupIndicator.getId());
418   - rankCode.setCode(groupIndicator.getCode());
419   - rankCode.setCodeType(groupIndicator.getCodeType());
420   -// String indicatorName = (ScoreWayEnum.LADDER.equals(groupIndicator.getScoreWay())) ?
421   -// groupIndicator.getLadderParamAlias() : groupIndicator.getCommissionParamAlias();
422   -// if (PublicUtil.isEmpty(indicatorName)) {
423   -// indicatorName = groupIndicator.getName();
  1 +//package cn.fw.morax.server.task;
  2 +//
  3 +//import cn.fw.common.cache.locker.DistributedLocker;
  4 +//import cn.fw.morax.common.constant.Constant;
  5 +//import cn.fw.morax.common.constant.TimeTaskConstant;
  6 +//import cn.fw.morax.common.utils.PublicUtil;
  7 +//import cn.fw.morax.domain.db.eval.*;
  8 +//import cn.fw.morax.domain.db.kpi.IndicatorUserValue;
  9 +//import cn.fw.morax.domain.enums.*;
  10 +//import cn.fw.morax.service.biz.CommonService;
  11 +//import cn.fw.morax.service.data.eval.*;
  12 +//import cn.fw.morax.service.data.kpi.IndicatorUserValueService;
  13 +//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  14 +//import com.google.common.collect.Maps;
  15 +//import lombok.Getter;
  16 +//import lombok.RequiredArgsConstructor;
  17 +//import lombok.extern.slf4j.Slf4j;
  18 +//import org.redisson.api.RLock;
  19 +//import org.springframework.beans.factory.annotation.Value;
  20 +//import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
  21 +//import org.springframework.scheduling.annotation.Scheduled;
  22 +//import org.springframework.stereotype.Component;
  23 +//import org.springframework.transaction.PlatformTransactionManager;
  24 +//import org.springframework.transaction.TransactionDefinition;
  25 +//import org.springframework.transaction.TransactionStatus;
  26 +//import org.springframework.transaction.annotation.Transactional;
  27 +//
  28 +//import java.math.BigDecimal;
  29 +//import java.time.LocalDate;
  30 +//import java.time.YearMonth;
  31 +//import java.time.temporal.TemporalAdjusters;
  32 +//import java.util.*;
  33 +//import java.util.concurrent.atomic.AtomicInteger;
  34 +//import java.util.concurrent.locks.Lock;
  35 +//import java.util.function.Function;
  36 +//import java.util.stream.Collectors;
  37 +//
  38 +///**
  39 +// * @author : jiangchao
  40 +// * @className : KpiReportRatioTask
  41 +// * @description : 绩效报表定时器
  42 +// * @date : 2022-04-07 15:29
  43 +// */
  44 +//@Component
  45 +//@Slf4j
  46 +//@RequiredArgsConstructor
  47 +//@ConditionalOnProperty(prefix = "task", name = "switch", havingValue = "on")
  48 +//public class EvalShopReportTask {
  49 +//
  50 +// private final EvalGroupIndicatorTargetHitLogService evalGroupIndicatorTargetHitLogService;
  51 +// private final EvalGroupIndicatorHitLogService evalGroupIndicatorHitLogService;
  52 +// private final EvalGroupIndicatorParamService evalGroupIndicatorParamService;
  53 +// private final EvalShopRankCodeReportService evalShopRankCodeReportService;
  54 +// private final EvalShopValueReportService evalShopValueReportService;
  55 +// private final EvalGroupIndicatorService evalGroupIndicatorService;
  56 +// private final IndicatorUserValueService indicatorUserValueService;
  57 +// private final EvalIndicatorValueService evalIndicatorValueService;
  58 +// private final PlatformTransactionManager platformTransactionManager;
  59 +// private final EvalShopRankReportService evalShopRankReportService;
  60 +// private final EvalShopReportService evalShopReportService;
  61 +// private final TransactionDefinition transactionDefinition;
  62 +// private final EvalShopPoolService evalShopPoolService;
  63 +// private final EvalGroupRankService evalGroupRankService;
  64 +// private final EvalGroupService evalGroupService;
  65 +// private final DistributedLocker distributedLocker;
  66 +// private final CommonService commonService;
  67 +//
  68 +// @Value("${spring.cache.custom.global-prefix}:eval:shop:report")
  69 +// @Getter
  70 +// private String evalShopReportDistKey;
  71 +//
  72 +// /**
  73 +// * 考评报表定时任务
  74 +// *
  75 +// */
  76 +// @Scheduled(cron = TimeTaskConstant.EVAL_REPORT)
  77 +// @Transactional(rollbackFor = Exception.class)
  78 +// public void evalShopReportTask() {
  79 +// this.evalShopReport(LocalDate.now().minusDays(1));
  80 +// }
  81 +//
  82 +// /**
  83 +// * 绩效报表定时任务
  84 +// * 1. 遍历考评排名组
  85 +// * 2. 创建考评排名组报表
  86 +// * 3. 创建考评排名组编码
  87 +// * 4. 统计数据
  88 +// *
  89 +// * @param date
  90 +// */
  91 +// public void evalShopReport(LocalDate date) {
  92 +// Lock lock = distributedLocker.lock(getEvalShopReportDistKey());
  93 +// if (! ((RLock) lock).isLocked()) {
  94 +// return;
424 95 // }
425   -// rankCode.setIndicatorName(indicatorName);
426   - rankCode.setIndicatorName(groupIndicator.getName());
427   - rankCode.setDataDate(date);
428   - rankCode.setOrderNum(order.incrementAndGet());
429   - return rankCode;
430   - }
431   -
432   - public EvalShopRankCodeReport convertParamToRankCodeDB(EvalGroupIndicatorParam indicatorParam, LocalDate date, Long reportRankId,
433   - AtomicInteger order, EvalGroupIndicator groupIndicator) {
434   - EvalShopRankCodeReport rankCode = new EvalShopRankCodeReport();
435   - rankCode.setEvalShopRankReportId(reportRankId);
436   - rankCode.setEvalGroupIndicatorId(indicatorParam.getEvalGroupIndicatorId());
437   - rankCode.setCode(indicatorParam.getCode());
438   - rankCode.setCodeType(indicatorParam.getCodeType());
439   - rankCode.setIndicatorName(indicatorParam.getName());
440   - if (PublicUtil.isNotEmpty(groupIndicator.getCode())) {
441   - rankCode.setParentCode(groupIndicator.getCode());
442   - }
443   - rankCode.setDataDate(date);
444   - rankCode.setOrderNum(order.incrementAndGet());
445   - return rankCode;
446   - }
447   -
448   -
449   -}
  96 +// TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
  97 +// try {
  98 +// log.info("定时任务【考评人员报表数据抽取】开始执行");
  99 +// Map<Long, List<EvalGroupRank>> groupKpiGroupMap = queryShopEffectRank(date);
  100 +// for (Map.Entry<Long, List<EvalGroupRank>> entry : groupKpiGroupMap.entrySet()) {
  101 +// for (EvalGroupRank rank : entry.getValue()) {
  102 +// //清除当月数据(当月只有一条数据)
  103 +// cleanRankCurMonthData(rank.getId(), date);
  104 +// //抽取排名组数据
  105 +// createRankReport(rank, entry.getKey(), date);
  106 +// }
  107 +// }
  108 +// platformTransactionManager.commit(transactionStatus);
  109 +// } catch (Exception e){
  110 +// platformTransactionManager.rollback(transactionStatus);
  111 +// log.error("考评人员报表数据抽取失败, " + e.getMessage(), e);
  112 +// } finally {
  113 +// lock.unlock();
  114 +// }
  115 +// }
  116 +//
  117 +// /**
  118 +// * 计算排名组报表数据
  119 +// * @param rank
  120 +// * @param groupId
  121 +// * @param date
  122 +// */
  123 +// public void createRankReport(EvalGroupRank rank, Long groupId, LocalDate date) {
  124 +// List<EvalGroup> evalGroups = evalGroupService.getByRankId(rank.getId());
  125 +// List<Long> evalGroupIds = evalGroups.stream().map(EvalGroup::getId).collect(Collectors.toList());
  126 +// if (PublicUtil.isEmpty(evalGroupIds)) {
  127 +// return;
  128 +// }
  129 +// List<EvalShopPool> pools = evalShopPoolService.list(Wrappers.<EvalShopPool>lambdaQuery()
  130 +// .in(EvalShopPool::getEvalGroupId, evalGroupIds)
  131 +// .eq(EvalShopPool::getMonthly, YearMonth.from(date))
  132 +// .eq(EvalShopPool::getYn, Boolean.TRUE)
  133 +// );
  134 +// if (PublicUtil.isEmpty(pools)) {
  135 +// return;
  136 +// }
  137 +// List<EvalGroupIndicator> evalGroupIndicators = evalGroupIndicatorService.list(Wrappers.<EvalGroupIndicator>lambdaQuery()
  138 +// .in(EvalGroupIndicator::getEvalGroupId, evalGroupIds)
  139 +// .eq(EvalGroupIndicator::getYn, Boolean.TRUE)
  140 +// .orderByAsc(EvalGroupIndicator::getId)
  141 +// );
  142 +//
  143 +// //排名组
  144 +// EvalShopRankReport reportRank = this.saveRankReport(rank, evalGroupIds, evalGroups, date, groupId);
  145 +// final Long evalShopRankReportId = reportRank.getId();
  146 +// //排名组指标编码、人员、门店
  147 +// this.saveRankCodeReports(evalGroupIndicators, evalShopRankReportId, date);
  148 +// //门店维度
  149 +// calcShop(pools, evalGroupIndicators, evalShopRankReportId, date);
  150 +//
  151 +// }
  152 +//
  153 +// public List<EvalShopValueReport> calcShop(
  154 +// List<EvalShopPool> pools,
  155 +// List<EvalGroupIndicator> evalGroupIndicators,
  156 +// Long evalShopRankReportId,
  157 +// LocalDate date) {
  158 +// List<EvalShopValueReport> reportShopValues = new ArrayList<>();
  159 +// List<Long> shopIds = pools.stream().map(EvalShopPool::getShopId).distinct().collect(Collectors.toList());
  160 +// List<Long> shopPoolIds = pools.stream().map(EvalShopPool::getId).collect(Collectors.toList());
  161 +// List<Long> evalGroupIndicatorIds = evalGroupIndicators.stream().map(EvalGroupIndicator::getId).collect(Collectors.toList());
  162 +// List<EvalGroupIndicatorHitLog> hitLogs = evalGroupIndicatorHitLogService.getHitLogs(evalGroupIndicatorIds, shopPoolIds, EvalScopeEnum.SHOP, date);
  163 +// Map<Long, List<EvalGroupIndicatorHitLog>> indicatorHitLogMap = hitLogs.stream().collect(Collectors.groupingBy(EvalGroupIndicatorHitLog::getEvalGroupIndicatorId));
  164 +//
  165 +// for (EvalShopPool pool : pools) {
  166 +// EvalShopReport shopReport = this.convertDim(pool, date, evalShopRankReportId);
  167 +// evalShopReportService.save(shopReport);
  168 +//
  169 +// for (EvalGroupIndicator groupIndicator : evalGroupIndicators) {
  170 +// if (! pool.getEvalGroupId().equals(groupIndicator.getEvalGroupId())) {
  171 +// continue;
  172 +// }
  173 +// final IndicatorCodeTypeEnum codeType = groupIndicator.getCodeType();
  174 +// final Long evalGroupIndicatorId = groupIndicator.getId();
  175 +// List<EvalGroupIndicatorParam> params = evalGroupIndicatorParamService.list(Wrappers.<EvalGroupIndicatorParam>lambdaQuery()
  176 +// .eq(EvalGroupIndicatorParam::getEvalGroupIndicatorId, evalGroupIndicatorId)
  177 +// .eq(EvalGroupIndicatorParam::getYn, Boolean.TRUE)
  178 +// );
  179 +//
  180 +// List<EvalGroupIndicatorHitLog> userHitLogs = indicatorHitLogMap.getOrDefault(evalGroupIndicatorId, new ArrayList<>());
  181 +// Map<Long, EvalGroupIndicatorHitLog> poolHitLogMap = userHitLogs.stream()
  182 +// .collect(Collectors.toMap(EvalGroupIndicatorHitLog::getPoolId, Function.identity(), (v1, v2) -> v1));
  183 +// BigDecimal hitValue = this.getHitValue(poolHitLogMap, shopReport.getEvalShopPoolId(), groupIndicator.getScoreWay());
  184 +// reportShopValues.add(convertDB(shopReport.getId(), groupIndicator, hitValue, date, params));
  185 +// //是否有子指标
  186 +// if (IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(codeType)) {
  187 +// for (EvalGroupIndicatorParam param : params) {
  188 +// if (TargetTypeEnum.NO.equals(param.getTargetType())) {
  189 +// Map<Long, BigDecimal> userValueMap = queryShopOriginValue(param, shopIds, date);
  190 +// BigDecimal value = userValueMap.getOrDefault(shopReport.getShopId(), BigDecimal.ZERO);
  191 +// reportShopValues.add(convertParamDB(shopReport.getId(), param, value, date));
  192 +// } else {
  193 +// Map<Long, EvalGroupIndicatorTargetHitLog> hitLogMap = queryShopTargetValue(param.getId(), shopPoolIds, date);
  194 +// BigDecimal value = Optional.ofNullable(hitLogMap.get(shopReport.getEvalShopPoolId()))
  195 +// .map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED);
  196 +// reportShopValues.add(convertParamDB(shopReport.getId(), param, value, date));
  197 +// }
  198 +// }
  199 +// }
  200 +// }
  201 +// }
  202 +//
  203 +//
  204 +// if (PublicUtil.isNotEmpty(reportShopValues)) {
  205 +// evalShopValueReportService.saveBatch(reportShopValues);
  206 +// }
  207 +// return reportShopValues;
  208 +// }
  209 +//
  210 +// public BigDecimal getHitValue(Map<Long, EvalGroupIndicatorHitLog> poolHitLogMap, Long evalShopPoolId, ScoreWayEnum scoreWay) {
  211 +// Optional<EvalGroupIndicatorHitLog> hitLog = Optional.ofNullable(poolHitLogMap.get(evalShopPoolId));
  212 +// BigDecimal value = (ScoreWayEnum.LADDER.equals(scoreWay)) ?
  213 +// hitLog.map(EvalGroupIndicatorHitLog::getHitLadderValue).orElse(BigDecimal.ZERO) :
  214 +// hitLog.map(EvalGroupIndicatorHitLog::getHitCommissionValue).orElse(BigDecimal.ZERO);
  215 +// return value;
  216 +// }
  217 +//
  218 +// public List<EvalShopReport> saveShopReports(List<EvalShopPool> pools, LocalDate date, Long evalShopRankReportId) {
  219 +// List<EvalShopReport> evalShopReports = new ArrayList<>();
  220 +// for (EvalShopPool pool : pools) {
  221 +// EvalShopReport report = new EvalShopReport();
  222 +// report.setDimension(ReportDimensionEnum.SHOP);
  223 +// report.setEvalShopRankReportId(evalShopRankReportId);
  224 +// report.setShopId(pool.getShopId());
  225 +// report.setShopName(pool.getShopName());
  226 +// report.setDataDate(date);
  227 +// report.setEvalShopPoolId(pool.getId());
  228 +// evalShopReports.add(report);
  229 +// }
  230 +// evalShopReportService.saveBatch(evalShopReports);
  231 +// return evalShopReports;
  232 +// }
  233 +//
  234 +// public EvalShopReport convertDim(EvalShopPool pool, LocalDate date, Long evalShopRankReportId) {
  235 +// EvalShopReport report = new EvalShopReport();
  236 +// report.setDimension(ReportDimensionEnum.SHOP);
  237 +// report.setEvalShopRankReportId(evalShopRankReportId);
  238 +// report.setShopId(pool.getShopId());
  239 +// report.setShopName(pool.getShopName());
  240 +// report.setDataDate(date);
  241 +// report.setEvalShopPoolId(pool.getId());
  242 +// return report;
  243 +// }
  244 +//
  245 +// public Map<Long, BigDecimal> queryShopOriginValue(EvalGroupIndicatorParam param, List<Long> shopIds, LocalDate dataDate) {
  246 +// final String code = param.getCode();
  247 +// final IndicatorCodeTypeEnum codeType = param.getCodeType();
  248 +// Map<Long, BigDecimal> referValueMap = Maps.newHashMapWithExpectedSize(shopIds.size());
  249 +// //无目标
  250 +// if (IndicatorCodeTypeEnum.INDICATOR.equals(codeType)) {
  251 +// List<IndicatorUserValue> indicatorShopValues = indicatorUserValueService.list(Wrappers.<IndicatorUserValue>lambdaQuery()
  252 +// .eq(IndicatorUserValue::getIndicatorCode, code)
  253 +// .eq(IndicatorUserValue::getDataDate, dataDate)
  254 +// .in(IndicatorUserValue::getShopId, shopIds)
  255 +// .eq(IndicatorUserValue::getDimensionType, DimensionTypeEnum.SHOP)
  256 +// .eq(IndicatorUserValue::getYn, Boolean.TRUE)
  257 +// );
  258 +// for (IndicatorUserValue userValue : indicatorShopValues) {
  259 +// referValueMap.put(userValue.getShopId(), commonService.queryIndicatorValueVO(code, userValue,
  260 +// param.getTargetType(), param.getDataType()));
  261 +// }
  262 +// return referValueMap;
  263 +// }
  264 +// for (Long shopId : shopIds) {
  265 +// EvalIndicatorValue evalIndicatorValue = evalIndicatorValueService.queryLastValue(shopId,
  266 +// DimensionTypeEnum.SHOP, code, dataDate);
  267 +// referValueMap.put(shopId, commonService.queryEvalIndicatorValueVO(code, evalIndicatorValue,
  268 +// param.getTargetType(), param.getDataType()));
  269 +// }
  270 +// return referValueMap;
  271 +// }
  272 +//
  273 +// public Map<Long, EvalGroupIndicatorTargetHitLog> queryShopTargetValue(Long referId, List<Long> poolIds, LocalDate dataDate) {
  274 +// List<EvalGroupIndicatorTargetHitLog> targetHitLogs = evalGroupIndicatorTargetHitLogService.list(Wrappers.<EvalGroupIndicatorTargetHitLog>lambdaQuery()
  275 +// .eq(EvalGroupIndicatorTargetHitLog::getReferId, referId)
  276 +// .eq(EvalGroupIndicatorTargetHitLog::getTargetType, IndicatorTypeEnum.EXAMINE)
  277 +// .eq(EvalGroupIndicatorTargetHitLog::getDataDate, dataDate)
  278 +// .in(EvalGroupIndicatorTargetHitLog::getPoolId, poolIds)
  279 +// .eq(EvalGroupIndicatorTargetHitLog::getScopeType, EvalScopeEnum.SHOP)
  280 +// .eq(EvalGroupIndicatorTargetHitLog::getYn, Boolean.TRUE)
  281 +// );
  282 +// return targetHitLogs.stream()
  283 +// .collect(Collectors.toMap(EvalGroupIndicatorTargetHitLog::getPoolId, Function.identity(), (v1, v2) -> v1));
  284 +// }
  285 +//
  286 +// public void cleanTodayData(LocalDate date) {
  287 +// evalShopRankReportService.remove(Wrappers.<EvalShopRankReport>lambdaUpdate()
  288 +// .eq(EvalShopRankReport::getDataDate, date)
  289 +// );
  290 +// evalShopRankCodeReportService.remove(Wrappers.<EvalShopRankCodeReport>lambdaUpdate()
  291 +// .eq(EvalShopRankCodeReport::getDataDate, date)
  292 +// );
  293 +// evalShopValueReportService.remove(Wrappers.<EvalShopValueReport>lambdaUpdate()
  294 +// .eq(EvalShopValueReport::getDataDate, date)
  295 +// );
  296 +// evalShopReportService.remove(Wrappers.<EvalShopReport>lambdaUpdate()
  297 +// .eq(EvalShopReport::getDataDate, date)
  298 +// );
  299 +// }
  300 +//
  301 +// public void cleanRankCurMonthData(Long rankId, LocalDate endDate) {
  302 +// LocalDate startDate = endDate.with(TemporalAdjusters.firstDayOfMonth());
  303 +// List<EvalShopRankReport> rankReports = evalShopRankReportService.list(Wrappers.<EvalShopRankReport>lambdaQuery()
  304 +// .eq(EvalShopRankReport::getRankId, rankId)
  305 +// .ge(EvalShopRankReport::getDataDate, startDate)
  306 +// .le(EvalShopRankReport::getDataDate, endDate)
  307 +// );
  308 +// if (PublicUtil.isEmpty(rankReports)) {
  309 +// return;
  310 +// }
  311 +// List<Long> rankReportIds = rankReports.stream().map(EvalShopRankReport::getId).collect(Collectors.toList());
  312 +// evalShopRankReportService.removeByIds(rankReportIds);
  313 +// evalShopRankCodeReportService.remove(Wrappers.<EvalShopRankCodeReport>lambdaUpdate()
  314 +// .in(EvalShopRankCodeReport::getEvalShopRankReportId, rankReportIds)
  315 +// );
  316 +//
  317 +// List<EvalShopReport> userReports = evalShopReportService.list(Wrappers.<EvalShopReport>lambdaQuery()
  318 +// .in(EvalShopReport::getEvalShopRankReportId, rankReportIds)
  319 +// );
  320 +// List<Long> userReportIds = userReports.stream().map(EvalShopReport::getId).collect(Collectors.toList());
  321 +// if (PublicUtil.isEmpty(userReportIds)) {
  322 +// return;
  323 +// }
  324 +// evalShopReportService.removeByIds(userReportIds);
  325 +// evalShopValueReportService.remove(Wrappers.<EvalShopValueReport>lambdaUpdate()
  326 +// .in(EvalShopValueReport::getEvalShopReportId, userReportIds)
  327 +// );
  328 +// }
  329 +//
  330 +// public List<EvalShopRankCodeReport> saveRankCodeReports(List<EvalGroupIndicator> evalGroupIndicators, Long reportRankId, LocalDate date) {
  331 +// Set<String> codes = new HashSet<>();
  332 +// List<EvalShopRankCodeReport> rankCodes = new ArrayList<>();
  333 +// AtomicInteger order = new AtomicInteger();
  334 +// for (EvalGroupIndicator groupIndicator : evalGroupIndicators) {
  335 +// //一个编码只能展示一次
  336 +// if (! codes.add(groupIndicator.getCode())) {
  337 +// continue;
  338 +// }
  339 +// rankCodes.add(this.convertRankCodeDB(groupIndicator, date, reportRankId, order));
  340 +//
  341 +// //组合指标
  342 +// if (PublicUtil.isNotEmpty(groupIndicator.getCodeType()) && IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(groupIndicator.getCodeType())) {
  343 +// //子指标
  344 +// List<EvalGroupIndicatorParam> params = evalGroupIndicatorParamService.list(Wrappers.<EvalGroupIndicatorParam>lambdaQuery()
  345 +// .eq(EvalGroupIndicatorParam::getEvalGroupIndicatorId, groupIndicator.getId())
  346 +// .eq(EvalGroupIndicatorParam::getYn, Boolean.TRUE)
  347 +// );
  348 +// for (EvalGroupIndicatorParam indicatorParam : params) {
  349 +// rankCodes.add(this.convertParamToRankCodeDB(indicatorParam, date, reportRankId, order, groupIndicator));
  350 +// }
  351 +// }
  352 +// }
  353 +// evalShopRankCodeReportService.saveBatch(rankCodes);
  354 +// return rankCodes;
  355 +// }
  356 +//
  357 +// public Map<Long, List<EvalGroupRank>> queryShopEffectRank(LocalDate date) {
  358 +// List<EvalGroupRank> evalGroupRanks = evalGroupRankService.list(Wrappers.<EvalGroupRank>lambdaQuery()
  359 +// .ge(EvalGroupRank::getOverTime, date)
  360 +// .eq(EvalGroupRank::getScopeType, EvalScopeEnum.SHOP)
  361 +// .eq(EvalGroupRank::getYn, Boolean.TRUE)
  362 +// );
  363 +// return evalGroupRanks.stream().collect(Collectors.groupingBy(EvalGroupRank::getGroupId));
  364 +// }
  365 +//
  366 +// public EvalShopRankReport saveRankReport(EvalGroupRank rank, List<Long> evalGroupIds, List<EvalGroup> evalGroups, LocalDate date, Long groupId) {
  367 +// List<Long> shopIds = evalGroups.stream().map(EvalGroup::getShopIds).distinct().collect(ArrayList::new, List::addAll, List::addAll);
  368 +// EvalShopRankReport reportRank = new EvalShopRankReport();
  369 +// reportRank.setRankId(rank.getId());
  370 +// reportRank.setRankName(rank.getName());
  371 +// reportRank.setEvalGroupIds(evalGroupIds);
  372 +// reportRank.setShopIds(shopIds);
  373 +// reportRank.setDataDate(date);
  374 +// reportRank.setMonthly(YearMonth.from(date));
  375 +// reportRank.setGroupId(groupId);
  376 +// evalShopRankReportService.save(reportRank);
  377 +// return reportRank;
  378 +// }
  379 +//
  380 +// public EvalShopValueReport convertDB(Long evalShopReportId, EvalGroupIndicator groupIndicator, BigDecimal value,
  381 +// LocalDate date, List<EvalGroupIndicatorParam> params) {
  382 +// EvalShopValueReport userValue = new EvalShopValueReport();
  383 +// userValue.setEvalShopReportId(evalShopReportId);
  384 +// userValue.setCode(groupIndicator.getCode());
  385 +// userValue.setCodeType(groupIndicator.getCodeType());
  386 +// userValue.setValue(Optional.ofNullable(value).orElse(BigDecimal.ZERO));
  387 +// userValue.setDataDate(date);
  388 +// if (IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(groupIndicator.getCodeType())) {
  389 +// userValue.setValue(userValue.getValue().multiply(Constant.ONE_HUNDRED));
  390 +// } else {
  391 +// Optional<EvalGroupIndicatorParam> paramOptional = params.stream().findFirst();
  392 +// if (paramOptional.isPresent()) {
  393 +// DataTypeEnum dataType = paramOptional.get().getDataType();
  394 +// if (DataTypeEnum.RATIO.equals(dataType)) {
  395 +// userValue.setValue(userValue.getValue().multiply(Constant.ONE_HUNDRED));
  396 +// }
  397 +// }
  398 +// }
  399 +// return userValue;
  400 +// }
  401 +//
  402 +// public EvalShopValueReport convertParamDB(Long evalShopReportId, EvalGroupIndicatorParam param, BigDecimal value,
  403 +// LocalDate date) {
  404 +// EvalShopValueReport userValue = new EvalShopValueReport();
  405 +// userValue.setEvalShopReportId(evalShopReportId);
  406 +// userValue.setCode(param.getCode());
  407 +// userValue.setCodeType(param.getCodeType());
  408 +// userValue.setValue(Optional.ofNullable(value).orElse(BigDecimal.ZERO));
  409 +// userValue.setDataDate(date);
  410 +// return userValue;
  411 +// }
  412 +//
  413 +// public EvalShopRankCodeReport convertRankCodeDB(EvalGroupIndicator groupIndicator, LocalDate date, Long reportRankId,
  414 +// AtomicInteger order) {
  415 +// EvalShopRankCodeReport rankCode = new EvalShopRankCodeReport();
  416 +// rankCode.setEvalShopRankReportId(reportRankId);
  417 +// rankCode.setEvalGroupIndicatorId(groupIndicator.getId());
  418 +// rankCode.setCode(groupIndicator.getCode());
  419 +// rankCode.setCodeType(groupIndicator.getCodeType());
  420 +//// String indicatorName = (ScoreWayEnum.LADDER.equals(groupIndicator.getScoreWay())) ?
  421 +//// groupIndicator.getLadderParamAlias() : groupIndicator.getCommissionParamAlias();
  422 +//// if (PublicUtil.isEmpty(indicatorName)) {
  423 +//// indicatorName = groupIndicator.getName();
  424 +//// }
  425 +//// rankCode.setIndicatorName(indicatorName);
  426 +// rankCode.setIndicatorName(groupIndicator.getName());
  427 +// rankCode.setDataDate(date);
  428 +// rankCode.setOrderNum(order.incrementAndGet());
  429 +// return rankCode;
  430 +// }
  431 +//
  432 +// public EvalShopRankCodeReport convertParamToRankCodeDB(EvalGroupIndicatorParam indicatorParam, LocalDate date, Long reportRankId,
  433 +// AtomicInteger order, EvalGroupIndicator groupIndicator) {
  434 +// EvalShopRankCodeReport rankCode = new EvalShopRankCodeReport();
  435 +// rankCode.setEvalShopRankReportId(reportRankId);
  436 +// rankCode.setEvalGroupIndicatorId(indicatorParam.getEvalGroupIndicatorId());
  437 +// rankCode.setCode(indicatorParam.getCode());
  438 +// rankCode.setCodeType(indicatorParam.getCodeType());
  439 +// rankCode.setIndicatorName(indicatorParam.getName());
  440 +// if (PublicUtil.isNotEmpty(groupIndicator.getCode())) {
  441 +// rankCode.setParentCode(groupIndicator.getCode());
  442 +// }
  443 +// rankCode.setDataDate(date);
  444 +// rankCode.setOrderNum(order.incrementAndGet());
  445 +// return rankCode;
  446 +// }
  447 +//
  448 +//
  449 +//}
... ...
fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalUserReportTask.java
... ... @@ -121,7 +121,7 @@ public class EvalUserReportTask {
121 121 * @param date
122 122 */
123 123 public void createRankReport(EvalGroupRank rank, Long groupId, LocalDate date) {
124   - List<EvalGroup> evalGroups = evalGroupService.getAllEffectGroupByEgcs(rank.getEgcs(), date);
  124 + List<EvalGroup> evalGroups = evalGroupService.getEffectsByRankId(rank.getId(), date);
125 125 List<Long> evalGroupIds = evalGroups.stream().map(EvalGroup::getId).collect(Collectors.toList());
126 126 if (PublicUtil.isEmpty(evalGroupIds)) {
127 127 return;
... ... @@ -403,7 +403,6 @@ public class EvalUserReportTask {
403 403 public Map<Long, List<EvalGroupRank>> queryStaffEffectRank(LocalDate date) {
404 404 List<EvalGroupRank> evalGroupRanks = evalGroupRankService.list(Wrappers.<EvalGroupRank>lambdaQuery()
405 405 .ge(EvalGroupRank::getOverTime, date)
406   - .eq(EvalGroupRank::getScopeType, EvalScopeEnum.STAFF)
407 406 .eq(EvalGroupRank::getYn, Boolean.TRUE)
408 407 );
409 408 return evalGroupRanks.stream().collect(Collectors.groupingBy(EvalGroupRank::getGroupId));
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/ApprovalBizService.java
... ... @@ -12,8 +12,8 @@ import cn.fw.morax.domain.db.eval.EvalRewardDist;
12 12 import cn.fw.morax.domain.db.kpi.KpiGroup;
13 13 import cn.fw.morax.domain.db.kpi.KpiStarSpecialRule;
14 14 import cn.fw.morax.domain.db.salary.SalaryGroup;
15   -import cn.fw.morax.domain.dto.eval.EvalDTO;
16 15 import cn.fw.morax.domain.dto.eval.EvalGroupDTO;
  16 +import cn.fw.morax.domain.dto.eval.EvalGroupRankDTO;
17 17 import cn.fw.morax.domain.dto.kpi.KpiGroupDTO;
18 18 import cn.fw.morax.domain.dto.kpi.KpiGroupRankDTO;
19 19 import cn.fw.morax.domain.dto.salary.SalaryGroupDTO;
... ... @@ -447,7 +447,7 @@ public class ApprovalBizService {
447 447 * 提交审批
448 448 */
449 449 @Transactional(rollbackFor = Exception.class)
450   - public void applyApproveEvalDraft(EvalDTO eval, Integer evalGroupSize, SettingDraft settingDraft, LoginAuthBean user) {
  450 + public void applyApproveEvalDraft(EvalGroupRankDTO evalGroupRankDto, Integer evalGroupSize, SettingDraft settingDraft, LoginAuthBean user) {
451 451 Date expTime = PublicUtil.getExpTimeOfMonth(LocalDate.now());
452 452  
453 453 //员工基础信息
... ... @@ -469,12 +469,12 @@ public class ApprovalBizService {
469 469 }};
470 470  
471 471 FlowDto flowDto = FlowDto.builder()
472   - .groupId(eval.getGroupId())
  472 + .groupId(evalGroupRankDto.getGroupId())
473 473 .approvalNo(flowVal.getEvalGroupConfig())
474 474 .briefContent(Lists.newArrayList(
475 475 "申请人:" + user.getUserName(),
476   - "考评/活动名称:" + eval.getName(),
477   - "考评类型:" + eval.getType().getName(),
  476 + "考评/活动名称:" + evalGroupRankDto.getName(),
  477 +// "考评类型:" + eval.getType().getName(),
478 478 // "岗位:" + evalGroup.getPostName(),
479 479 "考评组:" + evalGroupSize + "个",
480 480 // "适用门店:" + evalGroup.getShopIds().size() + "个",
... ... @@ -491,9 +491,9 @@ public class ApprovalBizService {
491 491 ApprovalRecord approvalRecord = ApprovalRecord.builder()
492 492 .approvalNo(approvalNo)
493 493 .approvalStatus(ApprovalStatusEnum.IN_APPROVAL)
494   - .approvalType(ApprovalTypeEnum.EVAL)
  494 + .approvalType(ApprovalTypeEnum.EVAL_GROUP_RANK)
495 495 .dataId(settingDraft.getId())
496   - .groupId(eval.getGroupId())
  496 + .groupId(evalGroupRankDto.getGroupId())
497 497 .build();
498 498 approvalRecordService.save(approvalRecord);
499 499 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalCalculateService.java
... ... @@ -50,6 +50,7 @@ public class EvalCalculateService {
50 50 private final EvalUserPoolService evalUserPoolService;
51 51 private final EvalShopPoolService evalShopPoolService;
52 52 private final EvalGroupService evalGroupService;
  53 + private final EvalGroupRankStageService evalGroupRankStageService;
53 54 private final EvalGroupIndicatorService evalGroupIndicatorService;
54 55 private final EvalPoolIndicatorDetailService evalPoolIndicatorDetailService;
55 56 private final EvalGroupRewardService evalGroupRewardService;
... ... @@ -74,6 +75,7 @@ public class EvalCalculateService {
74 75 final EvalGroupRankService evalGroupRankService,
75 76 final PlatformTransactionManager platformTransactionManager,
76 77 final TransactionDefinition transactionDefinition,
  78 + final EvalGroupRankStageService evalGroupRankStageService,
77 79 final List<EvalRewardBaseCalculator> rewardBaseCalculators,
78 80 final List<EvalKpiBaseCalculator> kpiBaseCalculators) {
79 81 this.evalPoolRewardDetailService = evalPoolRewardDetailService;
... ... @@ -89,6 +91,7 @@ public class EvalCalculateService {
89 91 this.evalGroupRankService = evalGroupRankService;
90 92 this.platformTransactionManager = platformTransactionManager;
91 93 this.transactionDefinition = transactionDefinition;
  94 + this.evalGroupRankStageService = evalGroupRankStageService;
92 95 this.calculatorRewardMap = rewardBaseCalculators.stream().collect(Collectors.toMap(EvalRewardBaseCalculator::getCalMethod, v -> v));
93 96 this.calculatorEvalMap = kpiBaseCalculators.stream().collect(Collectors.toMap(EvalKpiBaseCalculator::getCalMethod, v -> v));
94 97 }
... ... @@ -251,32 +254,29 @@ public class EvalCalculateService {
251 254  
252 255 public List<EvalGroupUserShop> buildEvalGroupObj(EvalGroup evalGroup, LocalDate localDate, Boolean filterUser) {
253 256 List<EvalGroupUserShop> userShops = new ArrayList<>();
254   - if (EvalScopeEnum.STAFF.equals(evalGroup.getScopeType())) {
255   - List<EvalGroupUser> users = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery()
256   - .eq(EvalGroupUser::getEvalGroupId, evalGroup.getId())
257   - .eq(EvalGroupUser::getDataDate, localDate)
258   -// .eq(filterUser, EvalGroupUser::getIgnored, Boolean.FALSE)
259   - .eq(EvalGroupUser::getYn, Boolean.TRUE)
260   - );
  257 + List<EvalGroupUser> users = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery()
  258 + .eq(EvalGroupUser::getEvalGroupId, evalGroup.getId())
  259 + .eq(EvalGroupUser::getDataDate, localDate)
  260 + .eq(EvalGroupUser::getYn, Boolean.TRUE)
  261 + );
261 262  
262   - Map<Long, EvalUserPool> userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroup, users, localDate);
263   - for (EvalGroupUser user : users) {
264   - if (Boolean.TRUE.equals(user.getIgnored())) {
265   - continue;
266   - }
267   - EvalUserPool userPool = userPoolMap.get(user.getUserId());
268   - userShops.add(convertBO(user, userPool));
  263 + Map<Long, EvalUserPool> userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroup, users, localDate);
  264 + for (EvalGroupUser user : users) {
  265 + if (Boolean.TRUE.equals(user.getIgnored())) {
  266 + continue;
269 267 }
270   - return userShops;
271   - }
272   -
273   - List<Long> shopIds = evalGroup.getShopIds();
274   - Map<Long, EvalShopPool> shopPoolBOMap = evalPoolCommonService.inspectionShopPools(evalGroup, localDate);
275   - for (Long shopId : shopIds) {
276   - EvalShopPool shopPool = shopPoolBOMap.get(shopId);
277   - userShops.add(convertBO(shopPool, evalGroup, localDate));
  268 + EvalUserPool userPool = userPoolMap.get(user.getUserId());
  269 + userShops.add(convertBO(user, userPool));
278 270 }
279 271 return userShops;
  272 +
  273 +// List<Long> shopIds = evalGroup.getShopIds();
  274 +// Map<Long, EvalShopPool> shopPoolBOMap = evalPoolCommonService.inspectionShopPools(evalGroup, localDate);
  275 +// for (Long shopId : shopIds) {
  276 +// EvalShopPool shopPool = shopPoolBOMap.get(shopId);
  277 +// userShops.add(convertBO(shopPool, evalGroup, localDate));
  278 +// }
  279 +// return userShops;
280 280 }
281 281  
282 282  
... ... @@ -417,17 +417,16 @@ public class EvalCalculateService {
417 417 .ge(EvalGroupRank::getOverTime, localDate)
418 418 .eq(EvalGroupRank::getYn, Boolean.TRUE)
419 419 );
420   - Set<String> rankEgcs = evalGroupRanks.stream().map(EvalGroupRank::getEgcs).collect(HashSet::new, Set::addAll, Set::addAll);
421   - List<EvalGroup> evalGroups = evalGroupService.getAllEffectGroups(localDate);
422   -
  420 + if (PublicUtil.isEmpty(evalGroupRanks)) {
  421 + return;
  422 + }
423 423 List<String> rankBOS = new ArrayList<>();
424 424 for (EvalGroupRank evalGroupRank : evalGroupRanks) {
425   - rankBOS.add(convertRankStr(evalGroupRank, localDate));
426   - }
427   - for (EvalGroup evalGroup : evalGroups) {
428   - if (! rankEgcs.contains(evalGroup.getEgc())) {
429   - rankBOS.add(convertRankStr(evalGroup, localDate));
  425 + List<EvalGroup> evalGroups = evalGroupService.getEffectsByRankId(evalGroupRank.getId(), localDate);
  426 + if (PublicUtil.isEmpty(evalGroups)) {
  427 + continue;
430 428 }
  429 + rankBOS.add(convertRankStr(evalGroupRank, localDate, evalGroups));
431 430 }
432 431  
433 432 if (PublicUtil.isNotEmpty(rankBOS)) {
... ... @@ -449,7 +448,7 @@ public class EvalCalculateService {
449 448 EvalGroupCalculableRankBO calculableBO = JSONObject.parseObject(jsonStr, EvalGroupCalculableRankBO.class);
450 449 if (Objects.nonNull(calculableBO)) {
451 450 try {
452   - calcuEvalRank(calculableBO);
  451 + calcEvalRank(calculableBO);
453 452 } catch (Exception ex) {
454 453 log.error("计算考评排名组失败:[{}]", jsonStr, ex);
455 454 errList.add(jsonStr);
... ... @@ -468,30 +467,17 @@ public class EvalCalculateService {
468 467 * @param bo
469 468 */
470 469 @Transactional(rollbackFor = Exception.class)
471   - public void calcuEvalRank(EvalGroupCalculableRankBO bo) {
472   - final List<String> egcs = bo.getEgcs();
473   - final LocalDate localDate = bo.getLocalDate();
474   - final EvalScopeEnum scopeType = bo.getScopeType();
475   -
476   - if (EvalScopeEnum.STAFF.equals(scopeType)) {
477   - List<EvalUserPool> pools = evalUserPoolService.list(Wrappers.<EvalUserPool>lambdaQuery()
478   - .in(EvalUserPool::getEgc, egcs)
479   - .eq(EvalUserPool::getInclusion, Boolean.TRUE)
480   - .eq(EvalUserPool::getYn, Boolean.TRUE)
481   - .orderByDesc(EvalUserPool::getScoreRatio)
482   - );
483   - calcEvalUserRank(pools);
484   - evalUserPoolService.updateBatchById(pools);
485   - return;
486   - }
487   -
488   - List<EvalShopPool> pools = evalShopPoolService.list(Wrappers.<EvalShopPool>lambdaQuery()
489   - .in(EvalShopPool::getEgc, egcs)
490   - .eq(EvalShopPool::getYn, Boolean.TRUE)
491   - .orderByDesc(EvalShopPool::getScoreRatio)
  470 + public void calcEvalRank(EvalGroupCalculableRankBO bo) {
  471 + final List<Long> evalGroupIds = bo.getEvalGroupIds();
  472 +
  473 + List<EvalUserPool> pools = evalUserPoolService.list(Wrappers.<EvalUserPool>lambdaQuery()
  474 + .in(EvalUserPool::getEvalGroupId, evalGroupIds)
  475 + .eq(EvalUserPool::getInclusion, Boolean.TRUE)
  476 + .eq(EvalUserPool::getYn, Boolean.TRUE)
  477 + .orderByDesc(EvalUserPool::getScoreRatio)
492 478 );
493   - calcEvalShopRank(pools);
494   - evalShopPoolService.updateBatchById(pools);
  479 + calcEvalUserRank(pools);
  480 + evalUserPoolService.updateBatchById(pools);
495 481 }
496 482  
497 483 /**
... ... @@ -543,20 +529,12 @@ public class EvalCalculateService {
543 529 }
544 530  
545 531  
546   - public String convertRankStr(EvalGroupRank evalGroupRank, LocalDate localDate) {
  532 + public String convertRankStr(EvalGroupRank evalGroupRank, LocalDate localDate, List<EvalGroup> evalGroups) {
547 533 EvalGroupCalculableRankBO rankBO = EvalGroupCalculableRankBO.builder()
548 534 .groupId(evalGroupRank.getGroupId())
549   - .scopeType(evalGroupRank.getScopeType())
550   - .egcs(evalGroupRank.getEgcs())
551   - .localDate(localDate)
552   - .build();
553   - return JSONObject.toJSONString(rankBO);
554   - }
555   - public String convertRankStr(EvalGroup evalGroup, LocalDate localDate) {
556   - EvalGroupCalculableRankBO rankBO = EvalGroupCalculableRankBO.builder()
557   - .groupId(evalGroup.getGroupId())
558   - .scopeType(evalGroup.getScopeType())
559   - .egcs(new ArrayList<String>(){{add(evalGroup.getEgc());}})
  535 +// .scopeType(evalGroupRank.getScopeType())
  536 +// .egcs(evalGroupRank.getEgcs())
  537 + .evalGroupIds(evalGroups.stream().map(EvalGroup::getId).collect(Collectors.toList()))
560 538 .localDate(localDate)
561 539 .build();
562 540 return JSONObject.toJSONString(rankBO);
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupBizService.java
... ... @@ -6,8 +6,6 @@ import cn.fw.common.page.AppPage;
6 6 import cn.fw.common.web.annotation.DisLock;
7 7 import cn.fw.common.web.auth.LoginAuthBean;
8 8 import cn.fw.morax.common.constant.Constant;
9   -import cn.fw.morax.common.pojo.event.ApprovalResultEvent;
10   -import cn.fw.morax.common.utils.MessageFormatUtil;
11 9 import cn.fw.morax.common.utils.PublicUtil;
12 10 import cn.fw.morax.domain.db.ApprovalRecord;
13 11 import cn.fw.morax.domain.db.SettingDraft;
... ... @@ -70,42 +68,40 @@ public class EvalGroupBizService {
70 68 /**
71 69 * 考评组保存
72 70 *
73   - * @param eval
  71 + * @param evalGroupRankDto
74 72 * @param user
75 73 * @return
76 74 */
77 75 @Transactional(rollbackFor = Exception.class)
78 76 @DisLock(prefix = "#this.getSaveGroupPrefix()", key = "#dto.getName()", message = "保存中,请勿重复操作")
79   - public void saveEvalGroup(EvalDTO eval, LoginAuthBean user, Boolean isSubmit) {
80   -
  77 + public void saveEvalGroupRank(EvalGroupRankDTO evalGroupRankDto, LoginAuthBean user, Boolean isSubmit) {
81 78 AtomicInteger evalGroupSize = new AtomicInteger();
82 79 LocalDate lastStageOverTime = null;
83   - for (EvalStageDTO stage : eval.getStages()) {
84   - this.checkStageTime(eval, stage, lastStageOverTime);
  80 + Boolean multiStage = evalGroupRankDto.getMultiStage();
  81 + for (EvalStageDTO stage : evalGroupRankDto.getStages()) {
  82 + this.checkStageTime(evalGroupRankDto, stage, lastStageOverTime);
85 83 for (EvalGroupDTO evalGroupDTO : stage.getEvalGroups()) {
86 84 initEvalGroupDTO(evalGroupDTO);
87   - checkTime(evalGroupDTO);
88   - checkNameRepetition(eval.getId(), eval.getName());
89   - checkIndicator(evalGroupDTO);
  85 + checkIndicator(evalGroupDTO, multiStage);
90 86 checkReward(evalGroupDTO);
91 87 checkEvalIndicatorLadders(evalGroupDTO.getIndicators());
92 88 checkEvalRewardLadders(evalGroupDTO.getRewards());
93 89 sortRewardRankLadders(evalGroupDTO.getRewards());
94   - setTargetVos(evalGroupDTO);
  90 + this.setTargetVos(evalGroupDTO);
95 91 evalGroupSize.incrementAndGet();
96 92 }
97 93 lastStageOverTime = stage.getOverTime();
98 94 }
99 95  
100   - SettingDraft settingDraft = getSettingDraft(eval, isSubmit);
  96 + SettingDraft settingDraft = getSettingDraft(evalGroupRankDto, isSubmit);
101 97 settingDraftService.saveOrUpdate(settingDraft);
102 98 if (! isSubmit) {
103 99 return;
104 100 }
105   - approvalBizService.applyApproveEvalDraft(eval, evalGroupSize.get(), settingDraft, user);
  101 + approvalBizService.applyApproveEvalDraft(evalGroupRankDto, evalGroupSize.get(), settingDraft, user);
106 102 }
107 103  
108   - public void checkStageTime(EvalDTO eval, EvalStageDTO stage, LocalDate lastStageOverTime) {
  104 + public void checkStageTime(EvalGroupRankDTO eval, EvalStageDTO stage, LocalDate lastStageOverTime) {
109 105 if (stage.getBeginTime().isBefore(eval.getBeginTime())) {
110 106 throw new BusinessException("阶段开始时间不能在考评时间之前");
111 107 }
... ... @@ -125,7 +121,7 @@ public class EvalGroupBizService {
125 121 * @param dto
126 122 * @return
127 123 */
128   - public SettingDraft getSettingDraft(EvalDTO dto, Boolean submit) {
  124 + public SettingDraft getSettingDraft(EvalGroupRankDTO dto, Boolean submit) {
129 125 SettingDraft settingDraft = null;
130 126 if (PublicUtil.isEmpty(dto.getDraftId())) {
131 127 settingDraft = new SettingDraft();
... ... @@ -137,7 +133,7 @@ public class EvalGroupBizService {
137 133 BV.notNull(settingDraft, "草稿配置不存在,请重试");
138 134 }
139 135 settingDraft.setStatus(submit ? SettingDraftStatusEnum.RELEASE_APPROVAL : SettingDraftStatusEnum.NO_RELEASE);
140   - settingDraft.setEvalType(dto.getType());
  136 +// settingDraft.setEvalType(dto.getType());
141 137 settingDraft.setName(dto.getName());
142 138 settingDraft.setContent(JSONObject.toJSONString(dto));
143 139 return settingDraft;
... ... @@ -330,18 +326,18 @@ public class EvalGroupBizService {
330 326 public void checkTime(EvalGroupDTO dto) {
331 327 // BV.isTrue(dto.getBeginTime().isBefore(dto.getOverTime()), "考评组【" + dto.getName()+ "】生效时间必须在结束时间之前");
332 328  
333   - if (PublicUtil.isNotEmpty(dto.getId())) {
334   - List<EvalGroup> evalGroups = evalGroupService.list(Wrappers.<EvalGroup>lambdaQuery()
335   - .eq(EvalGroup::getEvalId, dto.getId())
336   - .eq(EvalGroup::getYn, Boolean.TRUE)
337   - );
338   - LocalDate now = LocalDate.now();
339   - Optional<EvalGroup> optionalEvalGroup = evalGroups.stream()
340   - .filter(evalGroup -> EvalScopeEnum.SHOP.equals(evalGroup.getScopeType()) && now.equals(evalGroup.getOverTime())).findFirst();
341   - if (optionalEvalGroup.isPresent()) {
342   - throw new BusinessException("考评组 " + optionalEvalGroup.get().getName() + "已结束,不能编辑");
343   - }
344   - }
  329 +// if (PublicUtil.isNotEmpty(dto.getId())) {
  330 +// List<EvalGroup> evalGroups = evalGroupService.list(Wrappers.<EvalGroup>lambdaQuery()
  331 +// .eq(EvalGroup::getEvalId, dto.getId())
  332 +// .eq(EvalGroup::getYn, Boolean.TRUE)
  333 +// );
  334 +// LocalDate now = LocalDate.now();
  335 +// Optional<EvalGroup> optionalEvalGroup = evalGroups.stream()
  336 +// .filter(evalGroup -> EvalScopeEnum.SHOP.equals(evalGroup.getScopeType()) && now.equals(evalGroup.getOverTime())).findFirst();
  337 +// if (optionalEvalGroup.isPresent()) {
  338 +// throw new BusinessException("考评组 " + optionalEvalGroup.get().getName() + "已结束,不能编辑");
  339 +// }
  340 +// }
345 341 }
346 342  
347 343 /**
... ... @@ -473,7 +469,7 @@ public class EvalGroupBizService {
473 469 *
474 470 * @param evalGroupDTO
475 471 */
476   - public void checkIndicator(EvalGroupDTO evalGroupDTO) {
  472 + public void checkIndicator(EvalGroupDTO evalGroupDTO, Boolean multiStage) {
477 473 for (EvalGroupIndicatorDTO indicator : evalGroupDTO.getIndicators()) {
478 474 String indicatorName = indicator.getName();
479 475  
... ... @@ -492,6 +488,15 @@ public class EvalGroupBizService {
492 488 (PublicUtil.isEmpty(paramDTO.getTargetType()) || PublicUtil.isEmpty(paramDTO.getTargetValue()))) {
493 489 paramDTO.setTargetType(TargetTypeEnum.NO);
494 490 }
  491 + if (multiStage) {
  492 + if (TargetTypeEnum.RATIO.equals(paramDTO.getTargetType()) ||
  493 + TargetTypeEnum.MONEY.equals(paramDTO.getTargetType())) {
  494 + throw new BusinessException("多阶段目标只能选择阶段目标或时间进度");
  495 + }
  496 + } else if (TargetTypeEnum.STAGE_TARGET.equals(paramDTO.getTargetType()) ||
  497 + TargetTypeEnum.TIME_SCHEDULE.equals(paramDTO.getTargetType())) {
  498 + throw new BusinessException("非多阶段目标只能选择百分比或数量");
  499 + }
495 500 }
496 501 }
497 502  
... ... @@ -505,6 +510,16 @@ public class EvalGroupBizService {
505 510 if (! TargetTypeEnum.NO.equals(paramDTO.getTargetType()) &&
506 511 (PublicUtil.isEmpty(paramDTO.getTargetType()) || PublicUtil.isEmpty(paramDTO.getTargetValue()))) {
507 512 paramDTO.setTargetType(TargetTypeEnum.NO);
  513 + continue;
  514 + }
  515 + if (multiStage) {
  516 + if (TargetTypeEnum.RATIO.equals(paramDTO.getTargetType()) ||
  517 + TargetTypeEnum.MONEY.equals(paramDTO.getTargetType())) {
  518 + throw new BusinessException("多阶段目标只能选择阶段目标或时间进度");
  519 + }
  520 + } else if (TargetTypeEnum.STAGE_TARGET.equals(paramDTO.getTargetType()) ||
  521 + TargetTypeEnum.TIME_SCHEDULE.equals(paramDTO.getTargetType())) {
  522 + throw new BusinessException("非多阶段目标只能选择百分比或数量");
508 523 }
509 524 }
510 525 }
... ... @@ -514,6 +529,7 @@ public class EvalGroupBizService {
514 529 if (! TargetTypeEnum.NO.equals(preconditionDTO.getTargetType()) &&
515 530 (PublicUtil.isEmpty(preconditionDTO.getTargetType()) || PublicUtil.isEmpty(preconditionDTO.getTargetValue()))) {
516 531 preconditionDTO.setTargetType(TargetTypeEnum.NO);
  532 + continue;
517 533 }
518 534 }
519 535 }
... ... @@ -621,7 +637,7 @@ public class EvalGroupBizService {
621 637 EvalVO evalVO = PublicUtil.copy(eval, EvalVO.class);
622 638  
623 639 List<EvalGroup> evalGroups = evalGroupService.list(Wrappers.<EvalGroup>lambdaQuery()
624   - .in(EvalGroup::getEvalId, evalId)
  640 +// .in(EvalGroup::getEvalId, evalId)
625 641 .in(EvalGroup::getYn, Boolean.TRUE)
626 642 );
627 643 List<EvalGroupVO> evalGroupVOs = PublicUtil.copyList(evalGroups, EvalGroupVO.class);
... ... @@ -964,19 +980,19 @@ public class EvalGroupBizService {
964 980 @Transactional(rollbackFor = Exception.class)
965 981 public void approvalEvalConfig(ApprovalRecord approvalRecord, SettingDraft settingDraft) {
966 982 log.info("收到岗位最低收入补偿审批信息:{}", JSON.toJSONString(approvalRecord));
967   - EvalDTO evalDTO = JSON.parseObject(settingDraft.getContent(), EvalDTO.class);
968   - Eval eval = evalGroupDataService.saveEval(evalDTO);
969   - for (EvalStageDTO evalStageDTO : evalDTO.getStages()) {
970   - EvalStage evalStage = evalGroupDataService.saveEvalStage(evalStageDTO, eval);
  983 + EvalGroupRankDTO evalGroupRankDto = JSON.parseObject(settingDraft.getContent(), EvalGroupRankDTO.class);
  984 + EvalGroupRank evalGroupRank = evalGroupDataService.saveEvalGroupRank(evalGroupRankDto);
  985 + for (EvalStageDTO evalStageDTO : evalGroupRankDto.getStages()) {
  986 + EvalGroupRankStage evalGroupRankStage = evalGroupDataService.saveEvalStage(evalStageDTO, evalGroupRank);
971 987 for (EvalGroupDTO evalGroupDTO : evalStageDTO.getEvalGroups()) {
972   - EvalGroup evalGroup = evalGroupDataService.saveEvalGroup(evalGroupDTO, eval, evalStage);
  988 + EvalGroup evalGroup = evalGroupDataService.saveEvalGroup(evalGroupDTO, evalGroupRank, evalGroupRankStage);
973 989 evalGroupDataService.saveEvalGroupIndicator(evalGroup, evalGroupDTO.getIndicators());
974 990 evalGroupDataService.saveEvalGroupReward(evalGroup, evalGroupDTO.getRewards());
975 991 }
976 992 }
977 993  
978 994 settingDraftService.update(Wrappers.<SettingDraft>lambdaUpdate()
979   - .set(SettingDraft::getUnionId, eval.getId())
  995 + .set(SettingDraft::getUnionId, evalGroupRank.getId())
980 996 .set(SettingDraft::getUpdateTime, new Date())
981 997 .eq(SettingDraft::getId, settingDraft.getId())
982 998 );
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupDataService.java
1 1 package cn.fw.morax.service.biz.eval;
2 2  
3   -import cn.fw.morax.common.config.FlowVal;
4 3 import cn.fw.morax.common.constant.Constant;
5   -import cn.fw.morax.common.pojo.event.ApprovalResultEvent;
6 4 import cn.fw.morax.common.utils.PublicUtil;
7   -import cn.fw.morax.domain.db.ApprovalRecord;
8   -import cn.fw.morax.domain.db.SettingDraft;
9 5 import cn.fw.morax.domain.db.eval.*;
10 6 import cn.fw.morax.domain.dto.eval.*;
11   -import cn.fw.morax.domain.dto.kpi.KpiGroupDTO;
12 7 import cn.fw.morax.domain.enums.*;
13   -import cn.fw.morax.rpc.approval.FlowApproveRpc;
14   -import cn.fw.morax.service.biz.kpi.KpiGroupUserBizService;
15   -import cn.fw.morax.service.data.ApprovalRecordService;
16 8 import cn.fw.morax.service.data.SettingDraftService;
17 9 import cn.fw.morax.service.data.eval.*;
18   -import com.alibaba.fastjson.JSON;
19 10 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
20 11 import com.google.common.collect.Lists;
21 12 import lombok.RequiredArgsConstructor;
... ... @@ -28,8 +19,6 @@ import java.time.LocalDate;
28 19 import java.util.*;
29 20 import java.util.stream.Collectors;
30 21  
31   -import static cn.fw.common.businessvalidator.Validator.BV;
32   -
33 22 @Service
34 23 @Slf4j
35 24 @RequiredArgsConstructor
... ... @@ -44,10 +33,11 @@ public class EvalGroupDataService {
44 33 private final EvalGroupRewardParamService evalGroupRewardParamService;
45 34 private final EvalGroupIndicatorService evalGroupIndicatorService;
46 35 private final EvalGroupRewardService evalGroupRewardService;
  36 + private final EvalGroupRankService evalGroupRankService;
47 37 private final EvalUserPoolService evalUserPoolService;
48 38 private final EvalShopPoolService evalShopPoolService;
49 39 private final EvalGroupService evalGroupService;
50   - private final EvalStageService evalStageService;
  40 + private final EvalGroupRankStageService evalGroupRankStageService;
51 41 private final EvalService evalService;
52 42 private final SettingDraftService settingDraftService;
53 43  
... ... @@ -57,26 +47,26 @@ public class EvalGroupDataService {
57 47 * @param dto
58 48 */
59 49 @Transactional(rollbackFor = Exception.class)
60   - public Eval saveEval(EvalDTO dto) {
61   - Eval eval = PublicUtil.copy(dto, Eval.class);
62   - eval.setId(null);
63   - eval.setStatus(SettingStatusEnum.EFFECTIVE);
64   - evalService.save(eval);
  50 + public EvalGroupRank saveEvalGroupRank(EvalGroupRankDTO dto) {
  51 + EvalGroupRank evalGroupRank = PublicUtil.copy(dto, EvalGroupRank.class);
  52 + evalGroupRank.setId(null);
  53 + evalGroupRank.setStatus(SettingStatusEnum.EFFECTIVE);
  54 + evalGroupRankService.save(evalGroupRank);
65 55 //之前的考评 删除
66 56 if (PublicUtil.isNotEmpty(dto.getId())) {
67   - evalService.update(Wrappers.<Eval>lambdaUpdate()
68   - .eq(Eval::getId, dto.getId())
69   - .set(Eval::getStatus, SettingStatusEnum.INEFFECTIVE)
70   - .set(Eval::getUpdateTime, new Date())
71   - .set(Eval::getYn, Boolean.FALSE)
  57 + evalGroupRankService.update(Wrappers.<EvalGroupRank>lambdaUpdate()
  58 + .eq(EvalGroupRank::getId, dto.getId())
  59 + .set(EvalGroupRank::getStatus, SettingStatusEnum.INEFFECTIVE)
  60 + .set(EvalGroupRank::getUpdateTime, new Date())
  61 + .set(EvalGroupRank::getYn, Boolean.FALSE)
72 62 );
73   - evalStageService.update(Wrappers.<EvalStage>lambdaUpdate()
74   - .eq(EvalStage::getId, dto.getId())
75   - .set(EvalStage::getUpdateTime, new Date())
76   - .set(EvalStage::getYn, Boolean.FALSE)
  63 + evalGroupRankStageService.update(Wrappers.<EvalGroupRankStage>lambdaUpdate()
  64 + .eq(EvalGroupRankStage::getId, dto.getId())
  65 + .set(EvalGroupRankStage::getUpdateTime, new Date())
  66 + .set(EvalGroupRankStage::getYn, Boolean.FALSE)
77 67 );
78 68 List<EvalGroup> evalGroups = evalGroupService.list(Wrappers.<EvalGroup>lambdaQuery()
79   - .eq(EvalGroup::getEvalId, dto.getId())
  69 + .eq(EvalGroup::getEvalGroupRankId, dto.getId())
80 70 .eq(EvalGroup::getYn, Boolean.TRUE)
81 71 );
82 72 List<Long> evalGroupIds = evalGroups.stream().map(EvalGroup::getId).collect(Collectors.toList());
... ... @@ -97,7 +87,7 @@ public class EvalGroupDataService {
97 87 .set(EvalShopPool::getUpdateTime, new Date())
98 88 );
99 89 }
100   - return eval;
  90 + return evalGroupRank;
101 91 }
102 92  
103 93 /**
... ... @@ -106,11 +96,11 @@ public class EvalGroupDataService {
106 96 * @param dto
107 97 */
108 98 @Transactional(rollbackFor = Exception.class)
109   - public EvalStage saveEvalStage(EvalStageDTO dto, Eval eval) {
110   - EvalStage evalStage = PublicUtil.copy(dto, EvalStage.class);
111   - evalStage.setEvalId(eval.getId());
112   - evalStageService.save(evalStage);
113   - return evalStage;
  99 + public EvalGroupRankStage saveEvalStage(EvalStageDTO dto, EvalGroupRank evalGroupRank) {
  100 + EvalGroupRankStage evalGroupRankStage = PublicUtil.copy(dto, EvalGroupRankStage.class);
  101 + evalGroupRankStage.setEvalGroupRankId(evalGroupRank.getId());
  102 + evalGroupRankStageService.save(evalGroupRankStage);
  103 + return evalGroupRankStage;
114 104 }
115 105  
116 106 /**
... ... @@ -119,7 +109,7 @@ public class EvalGroupDataService {
119 109 * @param dto
120 110 */
121 111 @Transactional(rollbackFor = Exception.class)
122   - public EvalGroup saveEvalGroup(EvalGroupDTO dto, Eval eval, EvalStage evalStage) {
  112 + public EvalGroup saveEvalGroup(EvalGroupDTO dto, EvalGroupRank evalGroupRank, EvalGroupRankStage evalGroupRankStage) {
123 113 EvalGroup evalGroup = PublicUtil.copy(dto, EvalGroup.class);
124 114 evalGroup.setIndicatorNum(dto.getIndicators().size());
125 115 if (PublicUtil.isNotEmpty(dto.getId())) {
... ... @@ -127,9 +117,9 @@ public class EvalGroupDataService {
127 117 } else {
128 118 evalGroup.setEgc(PublicUtil.getUUID());
129 119 }
130   - evalGroup.setGroupId(eval.getGroupId());
131   - evalGroup.setEvalId(eval.getId());
132   - evalGroup.setEvalStageId(evalStage.getId());
  120 + evalGroup.setGroupId(evalGroupRank.getGroupId());
  121 + evalGroup.setEvalGroupRankId(evalGroupRank.getId());
  122 + evalGroup.setEvalGroupRankStageId(evalGroupRankStage.getId());
133 123 // evalGroup.setStatus(SettingStatusEnum.APPROVING);
134 124 evalGroupService.save(evalGroup);
135 125 return evalGroup;
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupRankBizService.java
... ... @@ -5,7 +5,7 @@ import cn.fw.common.page.AppPage;
5 5 import cn.fw.morax.common.constant.Constant;
6 6 import cn.fw.morax.common.utils.PublicUtil;
7 7 import cn.fw.morax.domain.db.eval.*;
8   -import cn.fw.morax.domain.dto.eval.EvalGroupRankDto;
  8 +import cn.fw.morax.domain.dto.eval.EvalGroupRankDTO;
9 9 import cn.fw.morax.domain.dto.eval.EvalGroupRankQueryDto;
10 10 import cn.fw.morax.domain.dto.query.EvalGroupRankQueryDTO;
11 11 import cn.fw.morax.domain.enums.EvalScopeEnum;
... ... @@ -22,7 +22,6 @@ import org.springframework.transaction.annotation.Transactional;
22 22  
23 23 import java.math.BigDecimal;
24 24 import java.time.LocalDate;
25   -import java.time.YearMonth;
26 25 import java.util.*;
27 26 import java.util.function.Function;
28 27 import java.util.stream.Collectors;
... ... @@ -128,31 +127,32 @@ public class EvalGroupRankBizService {
128 127 * @return
129 128 */
130 129 public AppPage<EvalGroupVO> restEvalGroupPage(EvalGroupRankQueryDTO dto) {
131   - EvalScopeEnum scopeType = EvalScopeEnum.ofValue(dto.getScopeType());
132   - List<EvalGroupRank> evalGroupRanks = evalGroupRankService.list(Wrappers.<EvalGroupRank>lambdaQuery()
133   - .eq(EvalGroupRank::getScopeType, scopeType)
134   - .eq(EvalGroupRank::getGroupId, dto.getGroupId())
135   - .eq(EvalGroupRank::getYn, Boolean.TRUE)
136   - );
137   - Set<String> excludeEgcs = evalGroupRanks.stream().flatMap(evalGroupRank -> evalGroupRank.getEgcs().stream()).collect(Collectors.toSet());
138   - List<Long> evalIds = getEffectEvalIds(dto.getGroupId());
139   - //只有有指标的考评组才能配置到考评排名组
140   - PageData<EvalGroup> pageData = evalGroupService.page(new PageData<>(dto.getCurrent(), dto.getPageSize()),
141   - Wrappers.<EvalGroup>lambdaQuery()
142   - .gt(EvalGroup::getIndicatorNum, BigDecimal.ZERO.intValue())
143   - .in(PublicUtil.isNotEmpty(evalIds), EvalGroup::getEvalId, evalIds)
144   - .eq(EvalGroup::getGroupId, dto.getGroupId())
145   - .eq(PublicUtil.isNotEmpty(dto.getPostId()), EvalGroup::getPostId, dto.getPostId())
146   - .notIn(PublicUtil.isNotEmpty(excludeEgcs), EvalGroup::getEgc, excludeEgcs)
147   - .eq(EvalGroup::getYn, Boolean.TRUE)
148   - .eq(EvalGroup::getScopeType, scopeType)
149   - );
150   - return PublicUtil.toPage(pageData, EvalGroup -> {
151   - EvalGroupVO EvalGroupVo = PublicUtil.copy(EvalGroup, EvalGroupVO.class);
152   - EvalGroupVo.setBeginTime(EvalGroup.getBeginTime());
153   - EvalGroupVo.setOverTime(EvalGroup.getOverTime());
154   - return EvalGroupVo;
155   - });
  130 +// EvalScopeEnum scopeType = EvalScopeEnum.ofValue(dto.getScopeType());
  131 +// List<EvalGroupRank> evalGroupRanks = evalGroupRankService.list(Wrappers.<EvalGroupRank>lambdaQuery()
  132 +// .eq(EvalGroupRank::getScopeType, scopeType)
  133 +// .eq(EvalGroupRank::getGroupId, dto.getGroupId())
  134 +// .eq(EvalGroupRank::getYn, Boolean.TRUE)
  135 +// );
  136 +// Set<String> excludeEgcs = evalGroupRanks.stream().flatMap(evalGroupRank -> evalGroupRank.getEgcs().stream()).collect(Collectors.toSet());
  137 +// List<Long> evalIds = getEffectEvalIds(dto.getGroupId());
  138 +// //只有有指标的考评组才能配置到考评排名组
  139 +// PageData<EvalGroup> pageData = evalGroupService.page(new PageData<>(dto.getCurrent(), dto.getPageSize()),
  140 +// Wrappers.<EvalGroup>lambdaQuery()
  141 +// .gt(EvalGroup::getIndicatorNum, BigDecimal.ZERO.intValue())
  142 +// .in(PublicUtil.isNotEmpty(evalIds), EvalGroup::getEvalId, evalIds)
  143 +// .eq(EvalGroup::getGroupId, dto.getGroupId())
  144 +// .eq(PublicUtil.isNotEmpty(dto.getPostId()), EvalGroup::getPostId, dto.getPostId())
  145 +// .notIn(PublicUtil.isNotEmpty(excludeEgcs), EvalGroup::getEgc, excludeEgcs)
  146 +// .eq(EvalGroup::getYn, Boolean.TRUE)
  147 +// .eq(EvalGroup::getScopeType, scopeType)
  148 +// );
  149 +// return PublicUtil.toPage(pageData, EvalGroup -> {
  150 +// EvalGroupVO EvalGroupVo = PublicUtil.copy(EvalGroup, EvalGroupVO.class);
  151 +// EvalGroupVo.setBeginTime(EvalGroup.getBeginTime());
  152 +// EvalGroupVo.setOverTime(EvalGroup.getOverTime());
  153 +// return EvalGroupVo;
  154 +// });
  155 + return null;
156 156 }
157 157  
158 158  
... ... @@ -181,13 +181,13 @@ public class EvalGroupRankBizService {
181 181 * @param dto
182 182 */
183 183 @Transactional(rollbackFor = Exception.class)
184   - public void saveEvalGroupRank(EvalGroupRankDto dto) {
185   - checkRank(dto);
186   - checkEgcRepetition(dto.getId(), dto.getEgcs());
187   - checkNameRepetition(dto.getId(), dto.getName());
188   -
189   - EvalGroupRank evalGroupRank = this.convertPO(dto);
190   - evalGroupRankService.saveOrUpdate(evalGroupRank);
  184 + public void saveEvalGroupRank(EvalGroupRankDTO dto) {
  185 +// checkRank(dto);
  186 +// checkEgcRepetition(dto.getId(), dto.getEgcs());
  187 +// checkNameRepetition(dto.getId(), dto.getName());
  188 +//
  189 +// EvalGroupRank evalGroupRank = this.convertPO(dto);
  190 +// evalGroupRankService.saveOrUpdate(evalGroupRank);
191 191 }
192 192  
193 193 /**
... ... @@ -196,7 +196,7 @@ public class EvalGroupRankBizService {
196 196 * @param dto
197 197 * @return
198 198 */
199   - public EvalGroupRank convertPO(EvalGroupRankDto dto) {
  199 + public EvalGroupRank convertPO(EvalGroupRankDTO dto) {
200 200 EvalGroupRank evalGroupRank = null;
201 201 if (PublicUtil.isNotEmpty(dto.getId())) {
202 202 evalGroupRank = evalGroupRankService.getById(dto.getId());
... ... @@ -205,17 +205,17 @@ public class EvalGroupRankBizService {
205 205 } else {
206 206 evalGroupRank = new EvalGroupRank();
207 207 }
208   - evalGroupRank.setScopeType(dto.getScopeType());
209   - evalGroupRank.setGroupId(dto.getGroupId());
210   - evalGroupRank.setYn(Boolean.TRUE);
211   - evalGroupRank.setName(dto.getName());
212   - evalGroupRank.setEgcs(dto.getEgcs());
213   - List<EvalGroup> evalGroups = evalGroupService.list(Wrappers.<EvalGroup>lambdaQuery()
214   - .in(EvalGroup::getEgc, dto.getEgcs())
215   - .eq(EvalGroup::getYn, Boolean.TRUE)
216   - );
217   - LocalDate overTime = evalGroups.stream().map(EvalGroup::getOverTime).max(LocalDate::compareTo).get();
218   - evalGroupRank.setOverTime(overTime);
  208 +// evalGroupRank.setScopeType(dto.getScopeType());
  209 +// evalGroupRank.setGroupId(dto.getGroupId());
  210 +// evalGroupRank.setYn(Boolean.TRUE);
  211 +// evalGroupRank.setName(dto.getName());
  212 +// evalGroupRank.setEgcs(dto.getEgcs());
  213 +// List<EvalGroup> evalGroups = evalGroupService.list(Wrappers.<EvalGroup>lambdaQuery()
  214 +// .in(EvalGroup::getEgc, dto.getEgcs())
  215 +// .eq(EvalGroup::getYn, Boolean.TRUE)
  216 +// );
  217 +// LocalDate overTime = evalGroups.stream().map(EvalGroup::getOverTime).max(LocalDate::compareTo).get();
  218 +// evalGroupRank.setOverTime(overTime);
219 219 evalGroupRank.setStatus(SettingStatusEnum.EFFECTIVE);
220 220 return evalGroupRank;
221 221 }
... ... @@ -256,7 +256,7 @@ public class EvalGroupRankBizService {
256 256 * 检查考考评排名组
257 257 *
258 258 */
259   - public void checkRank(EvalGroupRankDto dto) {
  259 + public void checkRank(EvalGroupRankDTO dto) {
260 260 if (PublicUtil.isNotEmpty(dto.getId())) {
261 261 EvalGroupRank evalGroupRank = evalGroupRankService.getById(dto.getId());
262 262 BV.notNull(evalGroupRank, "考评排名组不存在,请重试");
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupUserBizService.java
... ... @@ -88,7 +88,7 @@ public class EvalGroupUserBizService {
88 88 continue;
89 89 }
90 90 EvalGroup evalGroup = shopKpiGroupMap.get(user.getShopId());
91   - user.setEvalId(evalGroup.getEvalId());
  91 + user.setEvalGroupRankId(evalGroup.getEvalGroupRankId());
92 92 user.setEvalGroupId(evalGroup.getId());
93 93 user.setEgc(evalGroup.getEgc());
94 94 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalPoolCommonService.java
... ... @@ -6,7 +6,6 @@ import cn.fw.morax.domain.db.eval.EvalGroup;
6 6 import cn.fw.morax.domain.db.eval.EvalGroupUser;
7 7 import cn.fw.morax.domain.db.eval.EvalShopPool;
8 8 import cn.fw.morax.domain.db.eval.EvalUserPool;
9   -import cn.fw.morax.domain.db.salary.SalaryGroupUser;
10 9 import cn.fw.morax.rpc.ehr.EhrRpcService;
11 10 import cn.fw.morax.rpc.ehr.dto.StaffBaseInfoDTO;
12 11 import cn.fw.morax.rpc.ehr.dto.StaffShopInfoDTO;
... ... @@ -22,10 +21,8 @@ import org.springframework.stereotype.Service;
22 21 import org.springframework.transaction.annotation.Transactional;
23 22  
24 23 import java.math.BigDecimal;
25   -import java.math.RoundingMode;
26 24 import java.time.LocalDate;
27 25 import java.time.YearMonth;
28   -import java.time.temporal.TemporalAdjusters;
29 26 import java.util.*;
30 27 import java.util.function.Function;
31 28 import java.util.stream.Collectors;
... ... @@ -129,7 +126,7 @@ public class EvalPoolCommonService {
129 126 EvalShopPool evalShopPool = new EvalShopPool();
130 127 evalShopPool.setEgc(evalGroup.getEgc());
131 128 evalShopPool.setEvalGroupId(evalGroup.getId());
132   - evalShopPool.setEvalId(evalGroup.getEvalId());
  129 +// evalShopPool.setEvalId(evalGroup.getEvalId());
133 130 evalShopPool.setShopId(shopId);
134 131 evalShopPool.setShopName(shopDTO.getShortName());
135 132 evalShopPool.setScore(BigDecimal.ZERO);
... ... @@ -207,7 +204,7 @@ public class EvalPoolCommonService {
207 204 @Transactional(rollbackFor = Exception.class)
208 205 public EvalUserPool createUserPoolData(EvalGroupUser user) {
209 206 EvalUserPool evalUserPool = new EvalUserPool();
210   - evalUserPool.setEvalId(user.getEvalId());
  207 + evalUserPool.setEvalId(user.getEvalGroupRankId());
211 208 evalUserPool.setEgc(user.getEgc());
212 209 evalUserPool.setEvalGroupId(user.getEvalGroupId());
213 210 evalUserPool.setUserId(user.getUserId());
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalRewardService.java
... ... @@ -170,7 +170,7 @@ public class EvalRewardService {
170 170 */
171 171 @Transactional(rollbackFor = Exception.class)
172 172 public void sendDistRewardTodo(List<EvalShopPool> pools, EvalGroup evalGroup) {
173   - Eval eval = evalService.getById(evalGroup.getEvalId());
  173 + Eval eval = evalService.getById(evalGroup.getEvalGroupRankId());
174 174 BV.notNull(eval, "考评配置不存在,请重试");
175 175  
176 176 DecimalFormat decimalFormat = new DecimalFormat("##########.##");
... ... @@ -248,7 +248,7 @@ public class EvalRewardService {
248 248  
249 249 public EvalRewardDist transferPo(EvalGroup evalGroup) {
250 250 EvalRewardDist rewardDist = new EvalRewardDist();
251   - rewardDist.setEvalId(evalGroup.getEvalId());
  251 + rewardDist.setEvalId(evalGroup.getEvalGroupRankId());
252 252 rewardDist.setEvalGroupId(evalGroup.getId());
253 253 rewardDist.setEvalGroupName(evalGroup.getName());
254 254 rewardDist.setStatus(EvalRewardDistStatusEnum.NO_DIST);
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/EvalStageService.java renamed to fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/EvalGroupRankStageService.java
1 1 package cn.fw.morax.service.data.eval;
2 2  
3 3  
4   -import cn.fw.morax.domain.db.eval.Eval;
5   -import cn.fw.morax.domain.db.eval.EvalStage;
  4 +import cn.fw.morax.domain.db.eval.EvalGroupRankStage;
6 5 import com.baomidou.mybatisplus.extension.service.IService;
7 6  
8 7 /**
... ... @@ -13,6 +12,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
13 12 * @author jiangchao
14 13 * @since 2022-12-09
15 14 */
16   -public interface EvalStageService extends IService<EvalStage> {
  15 +public interface EvalGroupRankStageService extends IService<EvalGroupRankStage> {
17 16  
18 17 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/EvalGroupService.java
... ... @@ -62,4 +62,11 @@ public interface EvalGroupService extends IService&lt;EvalGroup&gt; {
62 62 */
63 63 List<EvalGroup> getAllEffectGroupByEgcs(@NonNull final List<String> egcs, @NonNull final LocalDate localDate);
64 64  
  65 + /**
  66 + * 获取考评排名组的考评组
  67 + *
  68 + * @return
  69 + */
  70 + List<EvalGroup> getEffectsByRankId(@NonNull final Long evalGroupRankId, @NonNull final LocalDate localDate);
  71 +
65 72 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/impl/EvalStageServiceImpl.java renamed to fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/impl/EvalGroupRankStageServiceImpl.java
1 1 package cn.fw.morax.service.data.eval.impl;
2 2  
3 3  
4   -import cn.fw.morax.dao.eval.EvalStageDao;
5   -import cn.fw.morax.domain.db.eval.EvalStage;
6   -import cn.fw.morax.service.data.eval.EvalStageService;
  4 +import cn.fw.morax.dao.eval.EvalGroupRankStageDao;
  5 +import cn.fw.morax.domain.db.eval.EvalGroupRankStage;
  6 +import cn.fw.morax.service.data.eval.EvalGroupRankStageService;
7 7 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
8 8 import org.springframework.stereotype.Service;
9 9  
... ... @@ -16,6 +16,6 @@ import org.springframework.stereotype.Service;
16 16 * @since 2022-12-09
17 17 */
18 18 @Service
19   -public class EvalStageServiceImpl extends ServiceImpl<EvalStageDao, EvalStage> implements EvalStageService {
  19 +public class EvalGroupRankStageServiceImpl extends ServiceImpl<EvalGroupRankStageDao, EvalGroupRankStage> implements EvalGroupRankStageService {
20 20  
21 21 }
... ...
fw-morax-service/src/main/java/cn/fw/morax/service/data/eval/impl/EvalGroupServiceImpl.java
... ... @@ -6,6 +6,7 @@ import cn.fw.morax.domain.db.eval.EvalGroup;
6 6 import cn.fw.morax.domain.db.kpi.KpiGroup;
7 7 import cn.fw.morax.domain.enums.EvalScopeEnum;
8 8 import cn.fw.morax.service.data.eval.EvalGroupService;
  9 +import com.baomidou.mybatisplus.core.toolkit.Wrappers;
9 10 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
10 11 import org.springframework.lang.NonNull;
11 12 import org.springframework.stereotype.Service;
... ... @@ -48,4 +49,9 @@ public class EvalGroupServiceImpl extends ServiceImpl&lt;EvalGroupDao, EvalGroup&gt; i
48 49 public Set<Long> queryDistributionShopReward(LocalDate localDate) {
49 50 return this.baseMapper.queryDistributionShopReward(localDate, EvalScopeEnum.SHOP.getValue());
50 51 }
  52 +
  53 + @Override
  54 + public List<EvalGroup> getEffectsByRankId(@NonNull final Long evalGroupRankId, @NonNull final LocalDate localDate) {
  55 + return this.baseMapper.getEffectsByRankId(evalGroupRankId, localDate);
  56 + }
51 57 }
... ...