Commit e376b24ccf2a106d5512b64c959bc5f855a04a5d

Authored by 姜超
1 parent 320f8884

feature(*): 修改个人考评

修改个人考评
doc/2023-05-18_update.sql
@@ -4,3 +4,8 @@ ALTER TABLE `fw_morax`.`eval_user_pool` @@ -4,3 +4,8 @@ ALTER TABLE `fw_morax`.`eval_user_pool`
4 CHANGE COLUMN `eval_group_stage_id` `eval_group_rank_stage_id` bigint(20) NOT NULL COMMENT '考评阶段id' AFTER `eval_group_rank_id`; 4 CHANGE COLUMN `eval_group_stage_id` `eval_group_rank_stage_id` bigint(20) NOT NULL COMMENT '考评阶段id' AFTER `eval_group_rank_id`;
5 ALTER TABLE `fw_morax`.`eval_group_user` 5 ALTER TABLE `fw_morax`.`eval_group_user`
6 ADD COLUMN `eval_group_rank_stage_id` bigint(20) NOT NULL COMMENT '考评排名组阶段id' AFTER `eval_group_rank_id`; 6 ADD COLUMN `eval_group_rank_stage_id` bigint(20) NOT NULL COMMENT '考评排名组阶段id' AFTER `eval_group_rank_id`;
  7 +
  8 +-- 2023年5月23日
  9 +ALTER TABLE `fw_morax`.`eval_group_indicator_target_hit_log`
  10 + ADD COLUMN `extra_reach_value` decimal(18, 4) NULL COMMENT '额外达成目标' AFTER `reach_value`,
  11 +ADD COLUMN `use_target` tinyint(4) NULL DEFAULT 1 COMMENT '考评使用目标; 1:无目标 2:第一目标 3:额外目标值' AFTER `extra_reach_value`;
fw-morax-dao/src/main/resources/mapper/eval/EvalGroupIndicatorTargetHitLogMapper.xml
@@ -9,6 +9,8 @@ @@ -9,6 +9,8 @@
9 <result column="target_type" property="targetType"/> 9 <result column="target_type" property="targetType"/>
10 <result column="value" property="value"/> 10 <result column="value" property="value"/>
11 <result column="reach_value" property="reachValue"/> 11 <result column="reach_value" property="reachValue"/>
  12 + <result column="extra_reach_value" property="extraReachValue"/>
  13 + <result column="use_target" property="useTarget"/>
12 <result column="data_date" property="dataDate"/> 14 <result column="data_date" property="dataDate"/>
13 <result column="group_id" property="groupId"/> 15 <result column="group_id" property="groupId"/>
14 <result column="create_time" property="createTime"/> 16 <result column="create_time" property="createTime"/>
@@ -24,6 +26,8 @@ @@ -24,6 +26,8 @@
24 t1.`pool_id`, 26 t1.`pool_id`,
25 t1.`value` AS `value`, 27 t1.`value` AS `value`,
26 t1.`reach_value`, 28 t1.`reach_value`,
  29 + t1.`extra_reach_value`,
  30 + t1.`use_target`,
27 t1.`data_date`, 31 t1.`data_date`,
28 t1.`group_id` 32 t1.`group_id`
29 FROM 33 FROM
fw-morax-domain/src/main/java/cn/fw/morax/domain/bo/eval/EvalGroupUserShop.java
@@ -65,6 +65,11 @@ public class EvalGroupUserShop { @@ -65,6 +65,11 @@ public class EvalGroupUserShop {
65 */ 65 */
66 private Long referId; 66 private Long referId;
67 67
  68 +// /**
  69 +// * 多阶段
  70 +// */
  71 +// private Boolean multiStage;
  72 +
68 /** 73 /**
69 * 数据开始日期 74 * 数据开始日期
70 */ 75 */
fw-morax-domain/src/main/java/cn/fw/morax/domain/db/eval/EvalGroupIndicatorTargetHitLog.java
@@ -2,6 +2,7 @@ package cn.fw.morax.domain.db.eval; @@ -2,6 +2,7 @@ package cn.fw.morax.domain.db.eval;
2 2
3 import cn.fw.common.data.entity.BaseAuditableTimeEntity; 3 import cn.fw.common.data.entity.BaseAuditableTimeEntity;
4 import cn.fw.morax.domain.enums.EvalScopeEnum; 4 import cn.fw.morax.domain.enums.EvalScopeEnum;
  5 +import cn.fw.morax.domain.enums.EvalUseTargetEnum;
5 import cn.fw.morax.domain.enums.IndicatorTypeEnum; 6 import cn.fw.morax.domain.enums.IndicatorTypeEnum;
6 import com.baomidou.mybatisplus.annotation.TableLogic; 7 import com.baomidou.mybatisplus.annotation.TableLogic;
7 import com.baomidou.mybatisplus.annotation.TableName; 8 import com.baomidou.mybatisplus.annotation.TableName;
@@ -60,6 +61,16 @@ public class EvalGroupIndicatorTargetHitLog extends BaseAuditableTimeEntity&lt;Eval @@ -60,6 +61,16 @@ public class EvalGroupIndicatorTargetHitLog extends BaseAuditableTimeEntity&lt;Eval
60 private BigDecimal reachValue; 61 private BigDecimal reachValue;
61 62
62 /** 63 /**
  64 + * 额外达成目标
  65 + */
  66 + private BigDecimal extraReachValue;
  67 +
  68 + /**
  69 + * 考评使用目标; 1:无目标 2:第一目标 3:额外目标值
  70 + */
  71 + private EvalUseTargetEnum useTarget;
  72 +
  73 + /**
63 * 数据日期 74 * 数据日期
64 */ 75 */
65 private LocalDate dataDate; 76 private LocalDate dataDate;
fw-morax-domain/src/main/java/cn/fw/morax/domain/enums/EvalUseTargetEnum.java 0 → 100644
  1 +package cn.fw.morax.domain.enums;
  2 +
  3 +import com.baomidou.mybatisplus.core.enums.IEnum;
  4 +import com.fasterxml.jackson.annotation.JsonCreator;
  5 +import com.fasterxml.jackson.annotation.JsonValue;
  6 +import lombok.Getter;
  7 +
  8 +/**
  9 + * 考评使用目标
  10 + *
  11 + * @author kurisu
  12 + */
  13 +public enum EvalUseTargetEnum implements IEnum<Integer> {
  14 + /**
  15 + * 考评使用目标; 1:无目标 2:第一目标 3:额外目标值
  16 + */
  17 + NO(1, "无目标"),
  18 + FIRST_TARGET(2, "第一目标"),
  19 + EXTRA_TARGET(2, "额外目标值"),
  20 + ;
  21 +
  22 + /**
  23 + * 值
  24 + */
  25 + private final Integer value;
  26 + /**
  27 + * 名称
  28 + */
  29 + @Getter
  30 + private final String name;
  31 +
  32 + EvalUseTargetEnum(final Integer value, final String name) {
  33 + this.value = value;
  34 + this.name = name;
  35 + }
  36 +
  37 + /**
  38 + * 根据枚举值获取枚举对象
  39 + */
  40 + @JsonCreator
  41 + public static EvalUseTargetEnum ofValue(final Integer value) {
  42 + for (final EvalUseTargetEnum _enum : EvalUseTargetEnum.values()) {
  43 + if (_enum.value.equals(value)) {
  44 + return _enum;
  45 + }
  46 + }
  47 + return null;
  48 + }
  49 +
  50 + /**
  51 + * 获取值
  52 + *
  53 + * @return 值
  54 + */
  55 + @JsonValue
  56 + @Override
  57 + public Integer getValue() {
  58 + return value;
  59 + }
  60 +
  61 + /**
  62 + * 获取描述
  63 + *
  64 + * @return 值
  65 + */
  66 + @JsonCreator
  67 + public static String getNameByVale(final Integer value) {
  68 + for (final EvalUseTargetEnum _enum : EvalUseTargetEnum.values()) {
  69 + if (_enum.value.equals(value)) {
  70 + return _enum.getName();
  71 + }
  72 + }
  73 + return "";
  74 + }
  75 +}
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalGroupIndicatorParamVO.java
@@ -93,14 +93,24 @@ public class EvalGroupIndicatorParamVO { @@ -93,14 +93,24 @@ public class EvalGroupIndicatorParamVO {
93 private BigDecimal indicatorValue; 93 private BigDecimal indicatorValue;
94 94
95 /** 95 /**
96 - * 达成 96 + * 达成目标
97 */ 97 */
98 private BigDecimal reachValue; 98 private BigDecimal reachValue;
99 99
100 /** 100 /**
  101 + * 额外达成目标
  102 + */
  103 + private BigDecimal extraReachValue;
  104 +
  105 + /**
  106 + * 考评使用目标; 1:无目标 2:第一目标 3:额外目标值
  107 + */
  108 + private EvalUseTargetEnum useTarget;
  109 +
  110 + /**
101 * 时间进度目标值 111 * 时间进度目标值
102 */ 112 */
103 - private BigDecimal timeScheduleTargetValue; 113 +// private BigDecimal timeScheduleTargetValue;
104 114
105 /** 115 /**
106 * 目标计算类型;1: 目标值计算 2:最低要求计算 3:阶段目标 4:时间进度 116 * 目标计算类型;1: 目标值计算 2:最低要求计算 3:阶段目标 4:时间进度
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalGroupIndicatorTargetHitLogVO.java
@@ -2,6 +2,7 @@ package cn.fw.morax.domain.vo.eval; @@ -2,6 +2,7 @@ package cn.fw.morax.domain.vo.eval;
2 2
3 import cn.fw.common.data.entity.BaseAuditableTimeEntity; 3 import cn.fw.common.data.entity.BaseAuditableTimeEntity;
4 import cn.fw.morax.domain.enums.EvalScopeEnum; 4 import cn.fw.morax.domain.enums.EvalScopeEnum;
  5 +import cn.fw.morax.domain.enums.EvalUseTargetEnum;
5 import cn.fw.morax.domain.enums.IndicatorTypeEnum; 6 import cn.fw.morax.domain.enums.IndicatorTypeEnum;
6 import com.baomidou.mybatisplus.annotation.TableName; 7 import com.baomidou.mybatisplus.annotation.TableName;
7 import lombok.Data; 8 import lombok.Data;
@@ -56,6 +57,16 @@ public class EvalGroupIndicatorTargetHitLogVO extends BaseAuditableTimeEntity&lt;Ev @@ -56,6 +57,16 @@ public class EvalGroupIndicatorTargetHitLogVO extends BaseAuditableTimeEntity&lt;Ev
56 private BigDecimal reachValue; 57 private BigDecimal reachValue;
57 58
58 /** 59 /**
  60 + * 额外达成目标
  61 + */
  62 + private BigDecimal extraReachValue;
  63 +
  64 + /**
  65 + * 考评使用目标; 1:无目标 2:第一目标 3:额外目标值
  66 + */
  67 + private EvalUseTargetEnum useTarget;
  68 +
  69 + /**
59 * 数据日期 70 * 数据日期
60 */ 71 */
61 private LocalDate dataDate; 72 private LocalDate dataDate;
fw-morax-domain/src/main/java/cn/fw/morax/domain/vo/eval/EvalUserPoolVO.java
@@ -111,9 +111,22 @@ public class EvalUserPoolVO { @@ -111,9 +111,22 @@ public class EvalUserPoolVO {
111 private BigDecimal reward; 111 private BigDecimal reward;
112 112
113 /** 113 /**
114 - * 考评得分 114 + * 本月考评得分(最终得分)
115 */ 115 */
116 private BigDecimal score; 116 private BigDecimal score;
  117 + /**
  118 + * 原始考评得分(无奖惩分)
  119 + */
  120 + private BigDecimal originScore;
  121 +
  122 + /**
  123 + * 奖励绩效分
  124 + */
  125 + private BigDecimal rewardScore;
  126 + /**
  127 + * 惩罚绩效分
  128 + */
  129 + private BigDecimal punishScore;
117 130
118 /** 131 /**
119 * 考评得分率 132 * 考评得分率
fw-morax-rpc/src/main/java/cn/fw/morax/rpc/ehr/EhrRpcService.java
@@ -248,7 +248,7 @@ public class EhrRpcService { @@ -248,7 +248,7 @@ public class EhrRpcService {
248 } 248 }
249 try { 249 try {
250 final Message<ManagerVo> msg = managerApi.getRealTimeManagerLeaveScope(null, staffId, startLeaveTime.getTime(), endLeaveTime.getTime()); 250 final Message<ManagerVo> msg = managerApi.getRealTimeManagerLeaveScope(null, staffId, startLeaveTime.getTime(), endLeaveTime.getTime());
251 - log.info("ManagerApi.getRealTimeManagerScope: msg.code={}, msg.result={}, msg.data={}", msg.getCode(), msg.getResult(), msg.getData()); 251 + log.info("ManagerApi.getRealTimeManagerLeaveScope: msg.code={}, msg.result={}, msg.data={}", msg.getCode(), msg.getResult(), msg.getData());
252 if (msg.isSuccess() && !Objects.isNull(msg.getData())) { 252 if (msg.isSuccess() && !Objects.isNull(msg.getData())) {
253 return this.convertStaffBaseDTOs(msg.getData().getManageStaffList()); 253 return this.convertStaffBaseDTOs(msg.getData().getManageStaffList());
254 } 254 }
fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalUserReportTask.java
@@ -96,8 +96,8 @@ public class EvalUserReportTask { @@ -96,8 +96,8 @@ public class EvalUserReportTask {
96 TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition); 96 TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
97 try { 97 try {
98 log.info("定时任务【考评人员报表数据抽取】开始执行"); 98 log.info("定时任务【考评人员报表数据抽取】开始执行");
99 - Map<Long, List<EvalGroupRank>> groupKpiGroupMap = queryStaffEffectRank(date);  
100 - for (Map.Entry<Long, List<EvalGroupRank>> entry : groupKpiGroupMap.entrySet()) { 99 + Map<Long, List<EvalGroupRank>> groupEvalGroupMap = queryEffectRank(date);
  100 + for (Map.Entry<Long, List<EvalGroupRank>> entry : groupEvalGroupMap.entrySet()) {
101 for (EvalGroupRank rank : entry.getValue()) { 101 for (EvalGroupRank rank : entry.getValue()) {
102 //清除当月数据(当月只有一条数据) 102 //清除当月数据(当月只有一条数据)
103 cleanRankCurMonthData(rank.getId(), date); 103 cleanRankCurMonthData(rank.getId(), date);
@@ -400,8 +400,13 @@ public class EvalUserReportTask { @@ -400,8 +400,13 @@ public class EvalUserReportTask {
400 return rankCodes; 400 return rankCodes;
401 } 401 }
402 402
403 - public Map<Long, List<EvalGroupRank>> queryStaffEffectRank(LocalDate date) { 403 + public Map<Long, List<EvalGroupRank>> queryEffectRank(LocalDate date) {
  404 + List<SettingStatusEnum> status = new ArrayList<SettingStatusEnum>(){{
  405 + add(SettingStatusEnum.EFFECTIVE);
  406 + add(SettingStatusEnum.BE_EFFECTIVE);
  407 + }};
404 List<EvalGroupRank> evalGroupRanks = evalGroupRankService.list(Wrappers.<EvalGroupRank>lambdaQuery() 408 List<EvalGroupRank> evalGroupRanks = evalGroupRankService.list(Wrappers.<EvalGroupRank>lambdaQuery()
  409 + .in(EvalGroupRank::getStatus, status)
405 .ge(EvalGroupRank::getOverTime, date) 410 .ge(EvalGroupRank::getOverTime, date)
406 .eq(EvalGroupRank::getYn, Boolean.TRUE) 411 .eq(EvalGroupRank::getYn, Boolean.TRUE)
407 ); 412 );
fw-morax-service/src/main/java/cn/fw/morax/service/biz/calculator/eval/kpi/EvalKpiBaseCalculator.java
@@ -80,9 +80,12 @@ public abstract class EvalKpiBaseCalculator implements Calculator&lt;EvalGroupUserS @@ -80,9 +80,12 @@ public abstract class EvalKpiBaseCalculator implements Calculator&lt;EvalGroupUserS
80 if (! valueOptional.isPresent()) { 80 if (! valueOptional.isPresent()) {
81 return BigDecimal.ZERO; 81 return BigDecimal.ZERO;
82 } 82 }
83 - final BigDecimal originValue = valueOptional.get();//queryIndicatorValue(precondition.getCode(), valueOptional.get()); 83 + final BigDecimal originValue = valueOptional.get();
84 BigDecimal indicatorValue = originValue; 84 BigDecimal indicatorValue = originValue;
  85 + EvalUseTargetEnum useTarget = EvalUseTargetEnum.NO;
  86 +
85 if (!TargetTypeEnum.NO.equals(targetType)) { 87 if (!TargetTypeEnum.NO.equals(targetType)) {
  88 + useTarget = EvalUseTargetEnum.FIRST_TARGET;
86 BigDecimal targetValue = precondition.getTargetValue(); 89 BigDecimal targetValue = precondition.getTargetValue();
87 if (TargetCalcTypeEnum.TARGET_VALUE.equals(targetCalcType) || TargetCalcTypeEnum.STAGE_TARGET.equals(targetCalcType)) { 90 if (TargetCalcTypeEnum.TARGET_VALUE.equals(targetCalcType) || TargetCalcTypeEnum.STAGE_TARGET.equals(targetCalcType)) {
88 indicatorValue = indicatorValue.divide(targetValue, 4, RoundingMode.HALF_UP); 91 indicatorValue = indicatorValue.divide(targetValue, 4, RoundingMode.HALF_UP);
@@ -98,9 +101,13 @@ public abstract class EvalKpiBaseCalculator implements Calculator&lt;EvalGroupUserS @@ -98,9 +101,13 @@ public abstract class EvalKpiBaseCalculator implements Calculator&lt;EvalGroupUserS
98 indicatorValue = userDiffValue.divide(difference, 4, RoundingMode.HALF_UP); 101 indicatorValue = userDiffValue.divide(difference, 4, RoundingMode.HALF_UP);
99 } 102 }
100 } 103 }
101 -  
102 - saveTargetHitLog(obj, precondition.getId(), IndicatorTypeEnum.PRE, originValue, indicatorValue);  
103 } 104 }
  105 +
  106 + EvalGroupIndicatorTargetHitLog log = new EvalGroupIndicatorTargetHitLog();
  107 + log.setValue(originValue);
  108 + log.setReachValue(indicatorValue);
  109 + log.setUseTarget(useTarget);
  110 + saveTargetHitLog(obj, precondition.getId(), IndicatorTypeEnum.PRE, originValue, log);
104 coefficient = coefficient(obj, precondition.getId(), indicatorValue); 111 coefficient = coefficient(obj, precondition.getId(), indicatorValue);
105 } 112 }
106 return coefficient; 113 return coefficient;
@@ -152,20 +159,30 @@ public abstract class EvalKpiBaseCalculator implements Calculator&lt;EvalGroupUserS @@ -152,20 +159,30 @@ public abstract class EvalKpiBaseCalculator implements Calculator&lt;EvalGroupUserS
152 TargetTypeEnum targetType = param.getTargetType(); 159 TargetTypeEnum targetType = param.getTargetType();
153 TargetTypeEnum extraTargetType = param.getExtraTargetType(); 160 TargetTypeEnum extraTargetType = param.getExtraTargetType();
154 final BigDecimal originValue = valueOptional.get(); 161 final BigDecimal originValue = valueOptional.get();
155 - BigDecimal indicatorValue = null;  
156 - BigDecimal extraIndicatorValue = null;  
157 - if (!TargetTypeEnum.NO.equals(targetType)) {  
158 - indicatorValue = calcTarget(param.getTargetCalcType(), originValue, param.getTargetValue()); 162 + BigDecimal indicatorValue = originValue;
  163 + BigDecimal reachValue = BigDecimal.ZERO;
  164 + BigDecimal extraReachValue = BigDecimal.ZERO;
  165 + EvalUseTargetEnum useTarget = EvalUseTargetEnum.NO;
  166 +
  167 + if (PublicUtil.isNotEmpty(targetType) && !TargetTypeEnum.NO.equals(targetType)) {
  168 + reachValue = calcTarget(param.getTargetCalcType(), originValue, param.getTargetValue());
  169 + useTarget = EvalUseTargetEnum.FIRST_TARGET;
  170 + indicatorValue = reachValue;
159 } 171 }
160 if (PublicUtil.isNotEmpty(extraTargetType) && (!TargetTypeEnum.NO.equals(extraTargetType))) { 172 if (PublicUtil.isNotEmpty(extraTargetType) && (!TargetTypeEnum.NO.equals(extraTargetType))) {
161 - extraIndicatorValue = calcTarget(param.getExtraTargetCalcType(), originValue, param.getExtraTargetValue()); 173 + extraReachValue = calcTarget(param.getExtraTargetCalcType(), originValue, param.getExtraTargetValue());
162 //额外计算类型值 原始计算类型值 用大的那个值 174 //额外计算类型值 原始计算类型值 用大的那个值
163 - if (PublicUtil.isEmpty(indicatorValue) || (extraIndicatorValue.compareTo(indicatorValue) > 0)) {  
164 - indicatorValue = extraIndicatorValue; 175 + if (PublicUtil.isEmpty(reachValue) || (extraReachValue.compareTo(reachValue) > 0)) {
  176 + indicatorValue = extraReachValue;
  177 + useTarget = EvalUseTargetEnum.EXTRA_TARGET;
165 } 178 }
166 } 179 }
167 -  
168 - saveTargetHitLog(userShop, param.getId(), IndicatorTypeEnum.EXAMINE, originValue, indicatorValue); 180 + EvalGroupIndicatorTargetHitLog log = new EvalGroupIndicatorTargetHitLog();
  181 + log.setValue(originValue);
  182 + log.setReachValue(reachValue);
  183 + log.setExtraReachValue(extraReachValue);
  184 + log.setUseTarget(useTarget);
  185 + saveTargetHitLog(userShop, param.getId(), IndicatorTypeEnum.EXAMINE, originValue, log);
169 186
170 boolean isCap = Boolean.TRUE.equals(param.getCap()); 187 boolean isCap = Boolean.TRUE.equals(param.getCap());
171 BigDecimal proportion = param.getProportion(); 188 BigDecimal proportion = param.getProportion();
@@ -281,6 +298,26 @@ public abstract class EvalKpiBaseCalculator implements Calculator&lt;EvalGroupUserS @@ -281,6 +298,26 @@ public abstract class EvalKpiBaseCalculator implements Calculator&lt;EvalGroupUserS
281 /** 298 /**
282 * 查询具体指标值 299 * 查询具体指标值
283 * 300 *
  301 + * @param indicatorUserValue
  302 + * @return
  303 + */
  304 + protected Optional<BigDecimal> queryKpiIndicatorValue(IndicatorUserValue indicatorUserValue) {
  305 + if (PublicUtil.isEmpty(indicatorUserValue) || PublicUtil.isEmpty(indicatorUserValue.getIndicatorValue())) {
  306 + return Optional.empty();
  307 + }
  308 + BigDecimal value = BigDecimal.ZERO;
  309 + try {
  310 + JSONObject jsonObject = JSONObject.parseObject(indicatorUserValue.getIndicatorValue());
  311 + value = Optional.ofNullable(jsonObject.getBigDecimal(indicatorUserValue.getIndicatorCode())).orElse(BigDecimal.ZERO);
  312 + } catch (Exception e) {
  313 + log.error("[{}]指标值转化失败", indicatorUserValue, e);
  314 + }
  315 + return Optional.of(value);
  316 + }
  317 +
  318 + /**
  319 + * 查询具体指标值
  320 + *
284 * @param indicatorCode 321 * @param indicatorCode
285 * @param originalValue 322 * @param originalValue
286 * @return 323 * @return
@@ -318,6 +355,25 @@ public abstract class EvalKpiBaseCalculator implements Calculator&lt;EvalGroupUserS @@ -318,6 +355,25 @@ public abstract class EvalKpiBaseCalculator implements Calculator&lt;EvalGroupUserS
318 preconditionHitLogService.save(hitLog); 355 preconditionHitLogService.save(hitLog);
319 } 356 }
320 357
  358 + protected void saveTargetHitLog(EvalGroupUserShop userShop, Long referId, IndicatorTypeEnum targetType, BigDecimal value, EvalGroupIndicatorTargetHitLog log) {
  359 + evalGroupIndicatorTargetHitLogService.remove(Wrappers.<EvalGroupIndicatorTargetHitLog>lambdaQuery()
  360 + .eq(EvalGroupIndicatorTargetHitLog::getPoolId, userShop.getPoolId())
  361 + .eq(EvalGroupIndicatorTargetHitLog::getScopeType, userShop.getScopeType())
  362 + .eq(EvalGroupIndicatorTargetHitLog::getTargetType, targetType)
  363 + .eq(EvalGroupIndicatorTargetHitLog::getDataDate, userShop.getDataDate())
  364 + .eq(EvalGroupIndicatorTargetHitLog::getReferId, referId)
  365 + );
  366 + log.setPoolId(userShop.getPoolId());
  367 + log.setScopeType(userShop.getScopeType());
  368 + log.setReferId(referId);
  369 + log.setTargetType(targetType);
  370 + log.setValue(value);
  371 + log.setDataDate(userShop.getDataDate());
  372 + log.setGroupId(userShop.getGroupId());
  373 + log.setYn(Boolean.TRUE);
  374 + evalGroupIndicatorTargetHitLogService.save(log);
  375 + }
  376 +
321 protected void saveTargetHitLog(EvalGroupUserShop userShop, Long referId, IndicatorTypeEnum targetType, BigDecimal value, BigDecimal reachValue) { 377 protected void saveTargetHitLog(EvalGroupUserShop userShop, Long referId, IndicatorTypeEnum targetType, BigDecimal value, BigDecimal reachValue) {
322 evalGroupIndicatorTargetHitLogService.remove(Wrappers.<EvalGroupIndicatorTargetHitLog>lambdaQuery() 378 evalGroupIndicatorTargetHitLogService.remove(Wrappers.<EvalGroupIndicatorTargetHitLog>lambdaQuery()
323 .eq(EvalGroupIndicatorTargetHitLog::getPoolId, userShop.getPoolId()) 379 .eq(EvalGroupIndicatorTargetHitLog::getPoolId, userShop.getPoolId())
@@ -333,6 +389,7 @@ public abstract class EvalKpiBaseCalculator implements Calculator&lt;EvalGroupUserS @@ -333,6 +389,7 @@ public abstract class EvalKpiBaseCalculator implements Calculator&lt;EvalGroupUserS
333 log.setTargetType(targetType); 389 log.setTargetType(targetType);
334 log.setValue(value); 390 log.setValue(value);
335 log.setReachValue(reachValue); 391 log.setReachValue(reachValue);
  392 + log.setUseTarget(EvalUseTargetEnum.FIRST_TARGET);
336 log.setDataDate(userShop.getDataDate()); 393 log.setDataDate(userShop.getDataDate());
337 log.setGroupId(userShop.getGroupId()); 394 log.setGroupId(userShop.getGroupId());
338 log.setYn(Boolean.TRUE); 395 log.setYn(Boolean.TRUE);
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalGroupPoolService.java
@@ -134,6 +134,7 @@ public class EvalGroupPoolService { @@ -134,6 +134,7 @@ public class EvalGroupPoolService {
134 if (PublicUtil.isNotEmpty(rankPools)) { 134 if (PublicUtil.isNotEmpty(rankPools)) {
135 EvalUserPool stagePool = rankPools.get(0); 135 EvalUserPool stagePool = rankPools.get(0);
136 EvalUserPoolVO evalUserPoolVO = this.poolDetail(stagePool); 136 EvalUserPoolVO evalUserPoolVO = this.poolDetail(stagePool);
  137 + this.setRewardPunish(evalUserPoolVO);
137 stageVO.setPool(evalUserPoolVO); 138 stageVO.setPool(evalUserPoolVO);
138 } 139 }
139 } 140 }
@@ -154,6 +155,12 @@ public class EvalGroupPoolService { @@ -154,6 +155,12 @@ public class EvalGroupPoolService {
154 return evalUserPoolVO; 155 return evalUserPoolVO;
155 } 156 }
156 157
  158 + public void setRewardPunish(EvalUserPoolVO evalUserPoolVO) {
  159 + evalUserPoolVO.setRewardScore(BigDecimal.ZERO);
  160 + evalUserPoolVO.setPunishScore(BigDecimal.ZERO);
  161 + evalUserPoolVO.setOriginScore(evalUserPoolVO.getScore());
  162 + }
  163 +
157 public void setIgnore(EvalUserPoolVO pool) { 164 public void setIgnore(EvalUserPoolVO pool) {
158 EvalGroupUser evalGroupUser = evalGroupUserService.getMonthLastData(pool.getEvalGroupId(), pool.getUserId(), pool.getMonthly()); 165 EvalGroupUser evalGroupUser = evalGroupUserService.getMonthLastData(pool.getEvalGroupId(), pool.getUserId(), pool.getMonthly());
159 if (PublicUtil.isEmpty(evalGroupUser)) { 166 if (PublicUtil.isEmpty(evalGroupUser)) {
@@ -539,16 +546,18 @@ public class EvalGroupPoolService { @@ -539,16 +546,18 @@ public class EvalGroupPoolService {
539 String code = paramVO.getCode(); 546 String code = paramVO.getCode();
540 Long paramId = paramVO.getId(); 547 Long paramId = paramVO.getId();
541 //无目标 548 //无目标
542 - if (TargetTypeEnum.NO.equals(paramVO.getTargetType())) {  
543 - BigDecimal indicatorOriginValue = queryUserOriginValue(code, referId, scopeType,dataDate, paramVO.getCodeType());  
544 - paramVO.setIndicatorValue(indicatorOriginValue);  
545 - continue;  
546 - } 549 +// if (TargetTypeEnum.NO.equals(paramVO.getTargetType())) {
  550 +// BigDecimal indicatorOriginValue = queryUserOriginValue(code, referId, scopeType,dataDate, paramVO.getCodeType());
  551 +// paramVO.setIndicatorValue(indicatorOriginValue);
  552 +// continue;
  553 +// }
547 554
548 //有目标 555 //有目标
549 Optional<EvalGroupIndicatorTargetHitLog> hitLogOptional = Optional.ofNullable(paramTargetHitLogMap.get(paramId)); 556 Optional<EvalGroupIndicatorTargetHitLog> hitLogOptional = Optional.ofNullable(paramTargetHitLogMap.get(paramId));
550 paramVO.setIndicatorValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getValue).orElse(BigDecimal.ZERO)); 557 paramVO.setIndicatorValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getValue).orElse(BigDecimal.ZERO));
551 paramVO.setReachValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO)); 558 paramVO.setReachValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO));
  559 + paramVO.setExtraReachValue(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO));
  560 + paramVO.setUseTarget(hitLogOptional.map(EvalGroupIndicatorTargetHitLog::getUseTarget).orElse(EvalUseTargetEnum.NO));
552 } 561 }
553 562
554 Map<ParamTypeEnum, List<EvalGroupIndicatorParamVO>> indicatorParamMap = paramVos.stream() 563 Map<ParamTypeEnum, List<EvalGroupIndicatorParamVO>> indicatorParamMap = paramVos.stream()
@@ -560,23 +569,21 @@ public class EvalGroupPoolService { @@ -560,23 +569,21 @@ public class EvalGroupPoolService {
560 EvalScopeEnum scopeType, 569 EvalScopeEnum scopeType,
561 LocalDate dataDate, 570 LocalDate dataDate,
562 List<EvalGroupIndicatorParamVO> paramVos) { 571 List<EvalGroupIndicatorParamVO> paramVos) {
563 - List<Long> hasTargetParamIds = paramVos.stream()  
564 - .filter(param -> (! TargetTypeEnum.NO.equals(param.getTargetType())))  
565 - .map(EvalGroupIndicatorParamVO::getId).collect(Collectors.toList()); 572 +// List<Long> hasTargetParamIds = paramVos.stream()
  573 +// .filter(param -> (! TargetTypeEnum.NO.equals(param.getTargetType())))
  574 +// .map(EvalGroupIndicatorParamVO::getId).collect(Collectors.toList());
566 575
567 Map<Long, EvalGroupIndicatorTargetHitLog> paramTargetHitLogMap = new HashMap<>(); 576 Map<Long, EvalGroupIndicatorTargetHitLog> paramTargetHitLogMap = new HashMap<>();
568 - if (PublicUtil.isNotEmpty(hasTargetParamIds)) {  
569 - List<EvalGroupIndicatorTargetHitLog> targetHitLogs = evalGroupIndicatorTargetHitLogService.list(Wrappers.<EvalGroupIndicatorTargetHitLog>lambdaQuery()  
570 - .in(EvalGroupIndicatorTargetHitLog::getReferId, hasTargetParamIds)  
571 - .in(EvalGroupIndicatorTargetHitLog::getTargetType, IndicatorTypeEnum.EXAMINE)  
572 - .eq(EvalGroupIndicatorTargetHitLog::getDataDate, dataDate)  
573 - .eq(EvalGroupIndicatorTargetHitLog::getPoolId, poolId)  
574 - .eq(EvalGroupIndicatorTargetHitLog::getScopeType, scopeType)  
575 - .eq(EvalGroupIndicatorTargetHitLog::getYn, Boolean.TRUE)  
576 - );  
577 - paramTargetHitLogMap = targetHitLogs.stream()  
578 - .collect(Collectors.toMap(EvalGroupIndicatorTargetHitLog::getReferId, Function.identity(), (v1, v2) -> v1));  
579 - } 577 + List<EvalGroupIndicatorTargetHitLog> targetHitLogs = evalGroupIndicatorTargetHitLogService.list(Wrappers.<EvalGroupIndicatorTargetHitLog>lambdaQuery()
  578 +// .in(EvalGroupIndicatorTargetHitLog::getReferId, hasTargetParamIds)
  579 + .in(EvalGroupIndicatorTargetHitLog::getTargetType, IndicatorTypeEnum.EXAMINE)
  580 + .eq(EvalGroupIndicatorTargetHitLog::getDataDate, dataDate)
  581 + .eq(EvalGroupIndicatorTargetHitLog::getPoolId, poolId)
  582 + .eq(EvalGroupIndicatorTargetHitLog::getScopeType, scopeType)
  583 + .eq(EvalGroupIndicatorTargetHitLog::getYn, Boolean.TRUE)
  584 + );
  585 + paramTargetHitLogMap = targetHitLogs.stream()
  586 + .collect(Collectors.toMap(EvalGroupIndicatorTargetHitLog::getReferId, Function.identity(), (v1, v2) -> v1));
580 return paramTargetHitLogMap; 587 return paramTargetHitLogMap;
581 } 588 }
582 589
fw-morax-service/src/main/java/cn/fw/morax/service/biz/eval/EvalRewardService.java
@@ -169,7 +169,7 @@ public class EvalRewardService { @@ -169,7 +169,7 @@ public class EvalRewardService {
169 log.error("考评奖惩没有门店:{}", JSON.toJSONString(evalGroup)); 169 log.error("考评奖惩没有门店:{}", JSON.toJSONString(evalGroup));
170 return; 170 return;
171 } 171 }
172 - sendDistRewardTodo(shopRewardDims, evalGroup, evalGroupRank, evalGroupRankStage); 172 +// sendDistRewardTodo(shopRewardDims, evalGroup, evalGroupRank, evalGroupRankStage);
173 } 173 }
174 174
175 /** 175 /**
@@ -190,6 +190,7 @@ public class EvalRewardService { @@ -190,6 +190,7 @@ public class EvalRewardService {
190 for (EvalGroupRewardDim rewardDim : shopRewardDims) { 190 for (EvalGroupRewardDim rewardDim : shopRewardDims) {
191 final String roleCode = rewardDim.getDistRoleCode(); 191 final String roleCode = rewardDim.getDistRoleCode();
192 List<EvalShopPool> pools = evalShopPoolService.list(Wrappers.<EvalShopPool>lambdaQuery() 192 List<EvalShopPool> pools = evalShopPoolService.list(Wrappers.<EvalShopPool>lambdaQuery()
  193 + .ne(EvalShopPool::getReward, BigDecimal.ZERO)
193 .eq(EvalShopPool::getEvalGroupId, evalGroup.getId()) 194 .eq(EvalShopPool::getEvalGroupId, evalGroup.getId())
194 .in(EvalShopPool::getShopId, rewardDim.getShopIds()) 195 .in(EvalShopPool::getShopId, rewardDim.getShopIds())
195 .eq(EvalShopPool::getYn, Boolean.TRUE) 196 .eq(EvalShopPool::getYn, Boolean.TRUE)
@@ -198,9 +199,7 @@ public class EvalRewardService { @@ -198,9 +199,7 @@ public class EvalRewardService {
198 log.error("分配奖惩待办,未找到考评池:{}", JSON.toJSONString(rewardDim)); 199 log.error("分配奖惩待办,未找到考评池:{}", JSON.toJSONString(rewardDim));
199 continue; 200 continue;
200 } 201 }
201 - List<Long> distShopIds = pools.stream().filter(pool -> pool.getReward().compareTo(BigDecimal.ZERO) == 0)  
202 - .map(EvalShopPool::getShopId).collect(Collectors.toList());  
203 - 202 + List<Long> distShopIds = pools.stream().map(EvalShopPool::getShopId).collect(Collectors.toList());
204 List<RpcUserRoleInfoDTO> users = this.getUserEnableRoleInfos(roleCode, distShopIds); 203 List<RpcUserRoleInfoDTO> users = this.getUserEnableRoleInfos(roleCode, distShopIds);
205 for (RpcUserRoleInfoDTO user : users) { 204 for (RpcUserRoleInfoDTO user : users) {
206 List<Long> manageShopIds = user.getRangeList().stream() 205 List<Long> manageShopIds = user.getRangeList().stream()
@@ -249,25 +248,23 @@ public class EvalRewardService { @@ -249,25 +248,23 @@ public class EvalRewardService {
249 planItemReq.setExtraData(extraData); 248 planItemReq.setExtraData(extraData);
250 itemList.add(planItemReq); 249 itemList.add(planItemReq);
251 } 250 }
252 -  
253 - }  
254 -  
255 -  
256 - //推送待办  
257 - BacklogBatchPlanReqDTO batchPlanReq = new BacklogBatchPlanReqDTO(todoVal.getDistEvalReward(), itemList);  
258 - List<FailBacklogItem> failItems = Optional.ofNullable(todoRpcService.batchPush(batchPlanReq)).orElse(new ArrayList<>());  
259 - if (PublicUtil.isNotEmpty(failItems)) {  
260 - log.error("发送分配考评奖励待办失败,失败人员信息:{}", JSON.toJSONString(failItems));  
261 } 251 }
  252 + if (PublicUtil.isNotEmpty(itemList)) {
  253 + //推送待办
  254 + BacklogBatchPlanReqDTO batchPlanReq = new BacklogBatchPlanReqDTO(todoVal.getDistEvalReward(), itemList);
  255 + List<FailBacklogItem> failItems = Optional.ofNullable(todoRpcService.batchPush(batchPlanReq)).orElse(new ArrayList<>());
  256 + if (PublicUtil.isNotEmpty(failItems)) {
  257 + log.error("发送分配考评奖励待办失败,失败人员信息:{}", JSON.toJSONString(failItems));
  258 + }
262 259
263 - if (PublicUtil.isEmpty(failItems) || itemList.size() > failItems.size()) {  
264 - if (PublicUtil.isNotEmpty(distPoolIds)) {  
265 - evalShopPoolService.update(Wrappers.<EvalShopPool>lambdaUpdate()  
266 - .in(EvalShopPool::getId, distPoolIds)  
267 - .set(EvalShopPool::getStatus, EvalShopPoolStatusEnum.WAIT_DIST_REWARD)  
268 - .set(EvalShopPool::getYn, Boolean.FALSE)  
269 - .set(EvalShopPool::getUpdateTime, new Date())  
270 - ); 260 + if (PublicUtil.isEmpty(failItems) || itemList.size() > failItems.size()) {
  261 + if (PublicUtil.isNotEmpty(distPoolIds)) {
  262 + evalShopPoolService.update(Wrappers.<EvalShopPool>lambdaUpdate()
  263 + .in(EvalShopPool::getId, distPoolIds)
  264 + .set(EvalShopPool::getStatus, EvalShopPoolStatusEnum.WAIT_DIST_REWARD)
  265 + .set(EvalShopPool::getUpdateTime, new Date())
  266 + );
  267 + }
271 } 268 }
272 } 269 }
273 } 270 }