f946d0a5
姜超
feature(*): 考评定时任务
|
1
2
|
package cn.fw.morax.service.biz.eval;
|
36a2a360
姜超
feature(*): 禁用考评
|
3
|
import cn.fw.morax.common.utils.PublicUtil;
|
5ad9dc20
姜超
feature(*): 缓存考评组
|
4
|
import cn.fw.morax.common.utils.ThreadPoolUtil;
|
f946d0a5
姜超
feature(*): 考评定时任务
|
5
|
import cn.fw.morax.domain.bo.eval.EvalGroupCalculableBO;
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
6
|
import cn.fw.morax.domain.bo.eval.EvalGroupUserShop;
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
7
|
import cn.fw.morax.domain.db.eval.*;
|
15a68981
姜超
feature(*): 处理百分数
|
8
|
import cn.fw.morax.domain.db.salary.SalaryPoolDetail;
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
9
10
11
|
import cn.fw.morax.domain.enums.EvalRewardCalMethodEnum;
import cn.fw.morax.domain.enums.EvalScopeEnum;
import cn.fw.morax.domain.enums.ScoreWayEnum;
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
12
13
14
|
import cn.fw.morax.service.biz.calculator.eval.kpi.EvalKpiBaseCalculator;
import cn.fw.morax.service.biz.calculator.eval.reward.EvalRewardBaseCalculator;
import cn.fw.morax.service.data.eval.*;
|
f946d0a5
姜超
feature(*): 考评定时任务
|
15
16
17
|
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
5ad9dc20
姜超
feature(*): 缓存考评组
|
18
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
f946d0a5
姜超
feature(*): 考评定时任务
|
19
|
import lombok.Getter;
|
f946d0a5
姜超
feature(*): 考评定时任务
|
20
21
|
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
|
5ad9dc20
姜超
feature(*): 缓存考评组
|
22
|
import org.springframework.data.redis.core.BoundSetOperations;
|
f946d0a5
姜超
feature(*): 考评定时任务
|
23
24
|
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
|
15a68981
姜超
feature(*): 处理百分数
|
25
|
import org.springframework.transaction.annotation.Transactional;
|
f946d0a5
姜超
feature(*): 考评定时任务
|
26
|
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
27
|
import java.math.BigDecimal;
|
c1b3c16f
姜超
feature(*): 门店考评池查询
|
28
|
import java.math.RoundingMode;
|
f946d0a5
姜超
feature(*): 考评定时任务
|
29
|
import java.time.LocalDate;
|
eccb0d64
姜超
feature(*): 考评详情查询
|
30
|
import java.time.YearMonth;
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
31
|
import java.util.*;
|
5ad9dc20
姜超
feature(*): 缓存考评组
|
32
33
|
import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.ThreadPoolExecutor;
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
34
|
import java.util.stream.Collectors;
|
f946d0a5
姜超
feature(*): 考评定时任务
|
35
36
37
38
39
40
41
42
|
/**
* @author jiangchao
* @des: 考评计算
* @date 2023/1/12 17:39
*/
@Slf4j
@Service
|
f946d0a5
姜超
feature(*): 考评定时任务
|
43
44
|
public class EvalCalculateService {
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
45
46
47
48
|
private final EvalPoolRewardDetailService evalPoolRewardDetailService;
private final EvalPoolCommonService evalPoolCommonService;
private final EvalUserPoolService evalUserPoolService;
private final EvalShopPoolService evalShopPoolService;
|
f946d0a5
姜超
feature(*): 考评定时任务
|
49
|
private final EvalGroupService evalGroupService;
|
725e9bc8
姜超
feature(*): 计算考评修改
|
50
|
private final EvalGroupIndicatorService evalGroupIndicatorService;
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
51
52
|
private final EvalPoolIndicatorDetailService evalPoolIndicatorDetailService;
private final EvalGroupRewardService evalGroupRewardService;
|
5ad9dc20
姜超
feature(*): 缓存考评组
|
53
|
private final EvalGroupUserService evalGroupUserService;
|
f946d0a5
姜超
feature(*): 考评定时任务
|
54
|
private final StringRedisTemplate stringRedisTemplate;
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
55
|
private final Map<EvalRewardCalMethodEnum, EvalRewardBaseCalculator> calculatorRewardMap;
|
e0944b69
姜超
feature(*): 修改计算考评
|
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
private final Map<ScoreWayEnum, EvalKpiBaseCalculator> calculatorEvalMap;
public EvalCalculateService(final EvalPoolRewardDetailService evalPoolRewardDetailService,
final EvalPoolCommonService evalPoolCommonService,
final EvalUserPoolService evalUserPoolService,
final EvalShopPoolService evalShopPoolService,
final EvalGroupService evalGroupService,
final EvalGroupIndicatorService evalGroupIndicatorService,
final EvalPoolIndicatorDetailService evalPoolIndicatorDetailService,
final EvalGroupRewardService evalGroupRewardService,
final EvalGroupUserService evalGroupUserService,
final StringRedisTemplate stringRedisTemplate,
final List<EvalRewardBaseCalculator> rewardBaseCalculators,
final List<EvalKpiBaseCalculator> kpiBaseCalculators) {
this.evalPoolRewardDetailService = evalPoolRewardDetailService;
this.evalPoolCommonService = evalPoolCommonService;
this.evalUserPoolService = evalUserPoolService;
this.evalShopPoolService = evalShopPoolService;
this.evalGroupService = evalGroupService;
this.evalGroupIndicatorService = evalGroupIndicatorService;
this.evalPoolIndicatorDetailService = evalPoolIndicatorDetailService;
this.evalGroupRewardService = evalGroupRewardService;
this.evalGroupUserService = evalGroupUserService;
this.stringRedisTemplate = stringRedisTemplate;
this.calculatorRewardMap = rewardBaseCalculators.stream().collect(Collectors.toMap(EvalRewardBaseCalculator::getCalMethod, v -> v));
this.calculatorEvalMap = kpiBaseCalculators.stream().collect(Collectors.toMap(EvalKpiBaseCalculator::getCalMethod, v -> v));
}
|
f946d0a5
姜超
feature(*): 考评定时任务
|
83
84
85
|
@Value("${spring.cache.custom.global-prefix}:calculable:eval-group")
@Getter
|
5ad9dc20
姜超
feature(*): 缓存考评组
|
86
|
private String caculEvalGroup;
|
f946d0a5
姜超
feature(*): 考评定时任务
|
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
/**
* 缓存需要计算绩效的绩效组信息
*
* @param localDate 日期
*/
public void cacheCalculableEvalGroupIds(final LocalDate localDate) {
log.info("定时任务【缓存需要计算绩效的绩效组】开始执行");
Set<Long> evalGroupIds = evalGroupService.queryCalculableEvalGroupIds(localDate);
if (CollectionUtils.isEmpty(evalGroupIds)) {
return;
}
log.info("缓存需要计算绩效的绩效组信息,kpiGroupIds:{},日期:{}", JSON.toJSONString(evalGroupIds), localDate);
cacheGroupIds(evalGroupIds, localDate);
}
private void cacheGroupIds(final Set<Long> evalGroupIds, final LocalDate localDate) {
String[] array = evalGroupIds.stream()
.map(evalGroupId -> new EvalGroupCalculableBO(evalGroupId, localDate))
.map(JSONObject::toJSONString)
.toArray(String[]::new);
|
5ad9dc20
姜超
feature(*): 缓存考评组
|
109
|
stringRedisTemplate.opsForSet().add(getCaculEvalGroup(), array);
|
f946d0a5
姜超
feature(*): 考评定时任务
|
110
111
|
}
|
5ad9dc20
姜超
feature(*): 缓存考评组
|
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
public void calculateCacheEvalGroup() {
BoundSetOperations<String, String> setOps = stringRedisTemplate.boundSetOps(getCaculEvalGroup());
ThreadPoolExecutor threadPool = ThreadPoolUtil.getInstance().getThreadPool();
List<String> overflowsList = new ArrayList<>();
String str;
while ((str = setOps.pop()) != null) {
final EvalGroupCalculableBO bo = JSONObject.parseObject(str, EvalGroupCalculableBO.class);
if (Objects.isNull(bo)) {
continue;
}
try {
String finalStr = str;
threadPool.execute(() -> {
try {
calculateEvalGroup(bo);
} catch (Exception ex) {
|
c1b3c16f
姜超
feature(*): 门店考评池查询
|
129
|
log.error("计算考评数据失败:{}", bo, ex);
|
5ad9dc20
姜超
feature(*): 缓存考评组
|
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
setOps.add(finalStr);
}
});
} catch (RejectedExecutionException re) {
overflowsList.add(str);
}
}
if (!CollectionUtils.isEmpty(overflowsList)) {
for (String s : overflowsList) {
setOps.add(s);
}
}
}
|
15a68981
姜超
feature(*): 处理百分数
|
144
145
|
@Transactional(rollbackFor = Exception.class)
public void calculateEvalGroup(EvalGroupCalculableBO bo) {
|
b5babc65
姜超
feature(*): 参数修改
|
146
|
log.info("考评组计算:{}", JSON.toJSONString(bo));
|
5ad9dc20
姜超
feature(*): 缓存考评组
|
147
|
final Long evalGroupId = bo.getEvalGroupId();
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
148
149
|
final LocalDate localDate = bo.getLocalDate();
|
5ad9dc20
姜超
feature(*): 缓存考评组
|
150
151
152
153
154
|
EvalGroup evalGroup = evalGroupService.getById(evalGroupId);
if (Objects.isNull(evalGroup)) {
log.error("考评组[{}]不存在,终止计算!", evalGroupId);
return;
}
|
36a2a360
姜超
feature(*): 禁用考评
|
155
|
List<EvalGroupUserShop> userShops = this.buildEvalGroupObj(evalGroup, localDate, Boolean.TRUE);
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
if (CollectionUtils.isEmpty(userShops)) {
log.error("考评组[{}]人员为空,终止计算!", evalGroupId);
return;
}
List<EvalGroupReward> rewards = evalGroupRewardService.list(Wrappers.<EvalGroupReward>lambdaQuery()
.eq(EvalGroupReward::getEvalGroupId, evalGroupId)
.eq(EvalGroupReward::getYn, Boolean.TRUE)
);
List<EvalGroupIndicator> indicators = evalGroupIndicatorService.list(Wrappers.<EvalGroupIndicator>lambdaQuery()
.eq(EvalGroupIndicator::getEvalGroupId, evalGroupId)
.eq(EvalGroupIndicator::getYn, Boolean.TRUE)
);
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
170
|
List<EvalPoolRewardDetail> rewardDetails = new ArrayList<>();
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
171
172
173
|
BigDecimal totalScore = indicators.stream()
.map(indicator -> BigDecimal.valueOf(indicator.getBaseScore()))
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
174
175
|
//计算
|
05639e47
姜超
feature(*): 查询修改
|
176
|
calcRewardRnkCond(rewards, userShops);
|
e0944b69
姜超
feature(*): 修改计算考评
|
177
|
calcTotalPushMoney(rewards, userShops, rewardDetails);
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
178
179
|
for (EvalGroupUserShop userShop : userShops) {
userShop.setIndicatorTotalScore(totalScore);
|
e0944b69
姜超
feature(*): 修改计算考评
|
180
|
calcRewardMoney(rewards, userShop, rewardDetails);
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
181
|
calcEvalKpi(userShop, indicators);
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
182
|
}
|
15a68981
姜超
feature(*): 处理百分数
|
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
updatePool(evalGroup, localDate, rewardDetails, userShops);
}
@Transactional(rollbackFor = Exception.class)
public void updatePool(EvalGroup evalGroup, LocalDate localDate, List<EvalPoolRewardDetail> rewardDetails, List<EvalGroupUserShop> userShops) {
final Long evalGroupId = evalGroup.getId();
EvalScopeEnum evalScope = evalGroup.getScopeType();
List<Long> poolIds = userShops.stream().map(EvalGroupUserShop::getPoolId).collect(Collectors.toList());
if (PublicUtil.isNotEmpty(rewardDetails)) {
evalPoolRewardDetailService.remove(Wrappers.<EvalPoolRewardDetail>lambdaQuery()
.in(EvalPoolRewardDetail::getPoolId, poolIds)
.eq(EvalPoolRewardDetail::getEvalGroupId, evalGroupId)
.eq(EvalPoolRewardDetail::getDataDate, localDate)
);
evalPoolRewardDetailService.saveBatch(rewardDetails);
}
if (EvalScopeEnum.STAFF.equals(evalScope)) {
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
200
|
for (EvalGroupUserShop userShop : userShops) {
|
c1b3c16f
姜超
feature(*): 门店考评池查询
|
201
|
BigDecimal scoreRatio = userShop.getScore().divide(userShop.getIndicatorTotalScore(), 2, RoundingMode.DOWN);
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
202
|
evalUserPoolService.update(Wrappers.<EvalUserPool>lambdaUpdate()
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
203
|
.eq(EvalUserPool::getId, userShop.getPoolId())
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
204
|
.eq(EvalUserPool::getYn, Boolean.TRUE)
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
205
206
|
.set(EvalUserPool::getReward, userShop.getReward())
.set(EvalUserPool::getScore, userShop.getScore())
|
c1b3c16f
姜超
feature(*): 门店考评池查询
|
207
|
.set(EvalUserPool::getScoreRatio, scoreRatio)
|
eccb0d64
姜超
feature(*): 考评详情查询
|
208
|
.set(EvalUserPool::getMonthly, YearMonth.from(localDate))
|
c1b3c16f
姜超
feature(*): 门店考评池查询
|
209
|
.set(EvalUserPool::getDataDate, localDate)
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
210
211
|
);
}
|
5ad9dc20
姜超
feature(*): 缓存考评组
|
212
|
} else {
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
213
|
for (EvalGroupUserShop userShop : userShops) {
|
c1b3c16f
姜超
feature(*): 门店考评池查询
|
214
|
BigDecimal scoreRatio = userShop.getScore().divide(userShop.getIndicatorTotalScore(), 2, RoundingMode.DOWN);
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
215
|
evalShopPoolService.update(Wrappers.<EvalShopPool>lambdaUpdate()
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
216
|
.eq(EvalShopPool::getId, userShop.getPoolId())
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
217
|
.eq(EvalShopPool::getYn, Boolean.TRUE)
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
218
219
|
.set(EvalShopPool::getReward, userShop.getReward())
.set(EvalShopPool::getScore, userShop.getScore())
|
c1b3c16f
姜超
feature(*): 门店考评池查询
|
220
|
.set(EvalShopPool::getScoreRatio, scoreRatio)
|
eccb0d64
姜超
feature(*): 考评详情查询
|
221
|
.set(EvalShopPool::getMonthly, YearMonth.from(localDate))
|
c1b3c16f
姜超
feature(*): 门店考评池查询
|
222
|
.set(EvalShopPool::getDataDate, localDate)
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
223
224
225
|
);
}
}
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
226
227
|
}
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
228
|
|
36a2a360
姜超
feature(*): 禁用考评
|
229
|
public List<EvalGroupUserShop> buildEvalGroupObj(EvalGroup evalGroup, LocalDate localDate, Boolean filterUser) {
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
230
|
List<EvalGroupUserShop> userShops = new ArrayList<>();
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
231
232
233
234
|
if (EvalScopeEnum.STAFF.equals(evalGroup.getScopeType())) {
List<EvalGroupUser> users = evalGroupUserService.list(Wrappers.<EvalGroupUser>lambdaQuery()
.eq(EvalGroupUser::getEvalGroupId, evalGroup.getId())
.eq(EvalGroupUser::getDataDate, localDate)
|
bdcc7a51
姜超
feature(*): 查询指标排名
|
235
|
// .eq(filterUser, EvalGroupUser::getIgnored, Boolean.FALSE)
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
236
237
|
.eq(EvalGroupUser::getYn, Boolean.TRUE)
);
|
36a2a360
姜超
feature(*): 禁用考评
|
238
|
|
d83a50ee
姜超
feature(*): 查询修改
|
239
|
Map<Long, EvalUserPool> userPoolMap = evalPoolCommonService.inspectionUserPoolMap(evalGroup, users, localDate);
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
240
|
for (EvalGroupUser user : users) {
|
bdcc7a51
姜超
feature(*): 查询指标排名
|
241
242
243
|
if (Boolean.TRUE.equals(user.getIgnored())) {
continue;
}
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
244
245
246
247
248
249
250
|
EvalUserPool userPool = userPoolMap.get(user.getUserId());
userShops.add(convertBO(user, userPool));
}
return userShops;
}
List<Long> shopIds = evalGroup.getShopIds();
|
f88aca41
姜超
feature(*): 查询门店考...
|
251
|
Map<Long, EvalShopPool> shopPoolBOMap = evalPoolCommonService.inspectionShopPools(evalGroup, localDate);
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
252
253
254
|
for (Long shopId : shopIds) {
EvalShopPool shopPool = shopPoolBOMap.get(shopId);
userShops.add(convertBO(shopPool, evalGroup, localDate));
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
255
|
}
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
256
|
return userShops;
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
257
|
}
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
258
|
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
259
260
|
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
261
262
263
264
265
266
267
268
|
/**
* 计算绩效组人员的绩效数据
* 计算单个人员绩效数据
*
*/
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
269
|
private void calcEvalKpi(EvalGroupUserShop userShop, List<EvalGroupIndicator> indicators) {
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
270
271
272
273
|
// KpiPool kpiPool = kpiPoolCommonService.inspectionPool(user);
// if (Boolean.TRUE.equals(user.getIgnored())) {
// return;
// }
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
274
|
final Long poolId = userShop.getPoolId();
|
15a68981
姜超
feature(*): 处理百分数
|
275
|
final Long evalGroupId = userShop.getEvalGroupId();
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
276
277
|
List<EvalPoolIndicatorDetail> indicatorDetails = new ArrayList<>();
for (EvalGroupIndicator indicator : indicators) {
|
e0944b69
姜超
feature(*): 修改计算考评
|
278
|
EvalKpiBaseCalculator calculator = calculatorEvalMap.get(indicator.getScoreWay());
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
279
280
281
282
|
if (calculator == null) {
continue;
}
BigDecimal score = calculator.calculate(userShop, indicator);
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
283
|
EvalPoolIndicatorDetail indicatorDetail = createPoolIndicatorValue(score, indicator, userShop.getGroupId());
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
284
|
indicatorDetail.setDataDate(userShop.getDataDate());
|
e0944b69
姜超
feature(*): 修改计算考评
|
285
|
indicatorDetail.setPoolId(poolId);
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
286
287
288
289
290
291
|
indicatorDetail.setScopeType(userShop.getScopeType());
indicatorDetails.add(indicatorDetail);
}
if (CollectionUtils.isNotEmpty(indicatorDetails)) {
evalPoolIndicatorDetailService.remove(Wrappers.<EvalPoolIndicatorDetail>lambdaQuery()
|
e0944b69
姜超
feature(*): 修改计算考评
|
292
|
.eq(EvalPoolIndicatorDetail::getPoolId, poolId)
|
15a68981
姜超
feature(*): 处理百分数
|
293
|
.eq(EvalPoolIndicatorDetail::getEvalGroupId, evalGroupId)
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
294
295
|
.eq(EvalPoolIndicatorDetail::getScopeType, userShop.getScopeType())
.eq(EvalPoolIndicatorDetail::getDataDate, userShop.getDataDate())
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
296
|
.eq(EvalPoolIndicatorDetail::getYn, Boolean.TRUE));
|
5ad9dc20
姜超
feature(*): 缓存考评组
|
297
|
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
298
|
evalPoolIndicatorDetailService.saveBatch(indicatorDetails);
|
5ad9dc20
姜超
feature(*): 缓存考评组
|
299
|
}
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
300
301
302
303
|
BigDecimal totalScore = BigDecimal.ZERO;
for (EvalPoolIndicatorDetail indicatorValue : indicatorDetails) {
totalScore = totalScore.add(indicatorValue.getScore());
}
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
304
|
userShop.setScore(totalScore);
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
305
|
}
|
5ad9dc20
姜超
feature(*): 缓存考评组
|
306
|
|
05639e47
姜超
feature(*): 查询修改
|
307
|
|
97c9de51
姜超
feature(*): 审批修改
|
308
|
/**
|
05639e47
姜超
feature(*): 查询修改
|
309
|
* 计算考评排名条件
|
97c9de51
姜超
feature(*): 审批修改
|
310
|
*
|
05639e47
姜超
feature(*): 查询修改
|
311
|
* @param
|
97c9de51
姜超
feature(*): 审批修改
|
312
|
*/
|
05639e47
姜超
feature(*): 查询修改
|
313
314
|
private void calcRewardRnkCond(List<EvalGroupReward> rewards, List<EvalGroupUserShop> userShops) {
for (EvalGroupReward evalGroupReward : rewards) {
|
97c9de51
姜超
feature(*): 审批修改
|
315
316
317
318
319
320
|
final String rewardProjectName = evalGroupReward.getName();
EvalRewardBaseCalculator calculator = calculatorRewardMap.get(evalGroupReward.getCalMethod());
if (Objects.isNull(calculator)) {
log.error("[{}_{}]计算器不存在", evalGroupReward.getId(), rewardProjectName);
return;
}
|
05639e47
姜超
feature(*): 查询修改
|
321
|
calculator.calculateRankPrecondition(userShops, evalGroupReward);
|
97c9de51
姜超
feature(*): 审批修改
|
322
323
|
}
}
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
324
325
326
327
328
329
|
/**
* 计算绩效金额
*
* @param rewardDetails
*/
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
330
|
private void calcTotalPushMoney(List<EvalGroupReward> rewards, List<EvalGroupUserShop> userShops, List<EvalPoolRewardDetail> rewardDetails) {
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
331
332
333
334
335
336
|
List<EvalGroupReward> totalCalcuRewards = rewards.stream()
.filter(reward -> EvalRewardCalMethodEnum.RANK.equals(reward.getCalMethod()) ||
EvalRewardCalMethodEnum.TOTAL_PROPORTION.equals(reward.getCalMethod()))
.collect(Collectors.toList());
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
337
338
339
340
341
342
343
344
345
|
for (EvalGroupReward evalGroupReward : totalCalcuRewards) {
final String rewardProjectName = evalGroupReward.getName();
EvalRewardBaseCalculator calculator = calculatorRewardMap.get(evalGroupReward.getCalMethod());
if (Objects.isNull(calculator)) {
log.error("[{}_{}]计算器不存在", evalGroupReward.getId(), rewardProjectName);
return;
}
calculator.calculateGroup(userShops, evalGroupReward);
for (EvalGroupUserShop userShop : userShops) {
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
346
|
EvalPoolRewardDetail detail = createDetail(userShop);
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
347
348
|
detail.setScopeType(userShop.getScopeType());
detail.setEvalGroupRewardId(evalGroupReward.getId());
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
349
|
detail.setAmount(Optional.ofNullable(userShop.getEvalGroupRewardAmount()).orElse(BigDecimal.ZERO));
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
350
351
352
353
354
355
356
|
rewardDetails.add(detail);
}
}
}
/**
* 计算绩效金额
*
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
357
358
|
* @param rewardDetails
*/
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
359
360
361
362
363
364
365
366
367
|
private void calcRewardMoney(List<EvalGroupReward> rewards, EvalGroupUserShop userShop, List<EvalPoolRewardDetail> rewardDetails) {
List<EvalGroupReward> calcRewards = rewards.stream()
.filter(reward ->
EvalRewardCalMethodEnum.FIXATION.equals(reward.getCalMethod()) ||
EvalRewardCalMethodEnum.LADDER.equals(reward.getCalMethod()) ||
EvalRewardCalMethodEnum.LADDER_DOUBLE.equals(reward.getCalMethod()))
.collect(Collectors.toList());
for (EvalGroupReward evalGroupReward : calcRewards) {
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
368
369
370
371
372
373
374
375
|
final String rewardProjectName = evalGroupReward.getName();
EvalRewardBaseCalculator calculator = calculatorRewardMap.get(evalGroupReward.getCalMethod());
if (Objects.isNull(calculator)) {
log.error("[{}_{}]计算器不存在", evalGroupReward.getId(), rewardProjectName);
return;
}
final BigDecimal salaryMoney = calculator.calculate(userShop, evalGroupReward);
if (Objects.nonNull(salaryMoney)) {
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
376
|
EvalPoolRewardDetail detail = createDetail(userShop);
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
377
378
|
detail.setScopeType(userShop.getScopeType());
detail.setEvalGroupRewardId(evalGroupReward.getId());
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
379
|
detail.setAmount(salaryMoney);
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
380
|
rewardDetails.add(detail);
|
c1b3c16f
姜超
feature(*): 门店考评池查询
|
381
382
|
userShop.setReward(userShop.getReward().add(salaryMoney));
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
383
384
385
386
387
388
|
}
}
}
private EvalPoolIndicatorDetail createPoolIndicatorValue(BigDecimal score, EvalGroupIndicator indicator, Long groupId) {
EvalPoolIndicatorDetail indicatorDetail = new EvalPoolIndicatorDetail();
|
15a68981
姜超
feature(*): 处理百分数
|
389
|
indicatorDetail.setEvalGroupId(indicator.getEvalGroupId());
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
390
391
392
393
394
395
396
397
398
399
|
indicatorDetail.setEvalGroupIndicatorId(indicator.getId());
indicatorDetail.setScore(score);
indicatorDetail.setYn(Boolean.TRUE);
indicatorDetail.setGroupId(groupId);
return indicatorDetail;
}
/**
* 创建实体
*
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
400
401
|
* @return
*/
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
402
|
private EvalPoolRewardDetail createDetail(EvalGroupUserShop userShop) {
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
403
|
EvalPoolRewardDetail poolDetail = new EvalPoolRewardDetail();
|
e0944b69
姜超
feature(*): 修改计算考评
|
404
|
poolDetail.setPoolId(userShop.getPoolId());
|
15a68981
姜超
feature(*): 处理百分数
|
405
|
poolDetail.setEvalGroupId(userShop.getEvalGroupId());
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
406
|
poolDetail.setScopeType(userShop.getScopeType());
|
ea6b2fd6
姜超
feature(*): 门店奖惩分配
|
407
|
poolDetail.setAmount(BigDecimal.ZERO);
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
408
409
|
poolDetail.setDataDate(userShop.getDataDate());
poolDetail.setGroupId(userShop.getGroupId());
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
410
411
412
413
|
poolDetail.setYn(Boolean.TRUE);
return poolDetail;
}
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
414
|
public EvalGroupUserShop convertBO(EvalGroupUser user, EvalUserPool userPool) {
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
415
|
EvalGroupUserShop userShop = new EvalGroupUserShop();
|
9161579f
姜超
feature(*): 排名返回名称
|
416
|
userShop.setName(user.getUserName());
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
417
|
userShop.setScopeType(EvalScopeEnum.STAFF);
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
418
|
userShop.setEvalGroupId(user.getEvalGroupId());
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
419
|
userShop.setPoolId(userPool.getId());
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
420
421
422
|
userShop.setReferId(user.getUserId());
userShop.setDataDate(user.getDataDate());
userShop.setGroupId(user.getGroupId());
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
423
424
|
userShop.setScore(BigDecimal.ZERO);
userShop.setReward(BigDecimal.ZERO);
|
e2386ce2
姜超
feature(*): 考评计算得分修改
|
425
426
427
|
return userShop;
}
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
428
429
|
public EvalGroupUserShop convertBO(EvalShopPool shopPool, EvalGroup evalGroup, LocalDate dataDate) {
EvalGroupUserShop userShop = new EvalGroupUserShop();
|
9161579f
姜超
feature(*): 排名返回名称
|
430
|
userShop.setName(shopPool.getShopName());
|
da42a3d8
姜超
feature(*): 计算考评代码优化
|
431
432
433
434
435
436
437
438
439
440
|
userShop.setReferId(shopPool.getShopId());
userShop.setPoolId(shopPool.getId());
userShop.setScopeType(EvalScopeEnum.SHOP);
userShop.setEvalId(userShop.getEvalId());
userShop.setEvalGroupId(evalGroup.getId());
userShop.setDataDate(dataDate);
userShop.setGroupId(evalGroup.getGroupId());
userShop.setScore(BigDecimal.ZERO);
userShop.setReward(BigDecimal.ZERO);
return userShop;
|
725e9bc8
姜超
feature(*): 计算考评修改
|
441
|
}
|
5ad9dc20
姜超
feature(*): 缓存考评组
|
442
|
|
f946d0a5
姜超
feature(*): 考评定时任务
|
443
|
}
|