911bd821
姜超
feature(*): 报表相关实体类
|
1
2
3
|
package cn.fw.morax.server.task;
import cn.fw.common.cache.locker.DistributedLocker;
|
6329e44a
姜超
feature(*): 考评人员数...
|
4
|
import cn.fw.morax.common.constant.Constant;
|
911bd821
姜超
feature(*): 报表相关实体类
|
5
6
7
|
import cn.fw.morax.common.constant.TimeTaskConstant;
import cn.fw.morax.common.utils.PublicUtil;
import cn.fw.morax.domain.db.eval.*;
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
8
|
import cn.fw.morax.domain.db.kpi.IndicatorUserValue;
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
9
|
import cn.fw.morax.domain.enums.*;
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
10
|
import cn.fw.morax.service.biz.CommonService;
|
911bd821
姜超
feature(*): 报表相关实体类
|
11
|
import cn.fw.morax.service.data.eval.*;
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
12
|
import cn.fw.morax.service.data.kpi.IndicatorUserValueService;
|
911bd821
姜超
feature(*): 报表相关实体类
|
13
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
14
|
import com.google.common.collect.Maps;
|
911bd821
姜超
feature(*): 报表相关实体类
|
15
16
17
18
19
20
21
22
|
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
23
24
25
|
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
|
911bd821
姜超
feature(*): 报表相关实体类
|
26
|
import org.springframework.transaction.annotation.Transactional;
|
911bd821
姜超
feature(*): 报表相关实体类
|
27
28
|
import java.math.BigDecimal;
|
911bd821
姜超
feature(*): 报表相关实体类
|
29
30
|
import java.time.LocalDate;
import java.time.YearMonth;
|
6b3d17b7
姜超
feature(*): 考评人员报...
|
31
|
import java.time.temporal.TemporalAdjusters;
|
911bd821
姜超
feature(*): 报表相关实体类
|
32
|
import java.util.*;
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
33
|
import java.util.concurrent.atomic.AtomicInteger;
|
911bd821
姜超
feature(*): 报表相关实体类
|
34
|
import java.util.concurrent.locks.Lock;
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
35
|
import java.util.function.Function;
|
911bd821
姜超
feature(*): 报表相关实体类
|
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
import java.util.stream.Collectors;
/**
* @author : jiangchao
* @className : KpiReportRatioTask
* @description : 绩效报表定时器
* @date : 2022-04-07 15:29
*/
@Component
@Slf4j
@RequiredArgsConstructor
@ConditionalOnProperty(prefix = "task", name = "switch", havingValue = "on")
public class EvalUserReportTask {
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
50
51
52
53
54
|
private final EvalGroupIndicatorTargetHitLogService evalGroupIndicatorTargetHitLogService;
private final EvalGroupIndicatorHitLogService evalGroupIndicatorHitLogService;
private final EvalGroupIndicatorParamService evalGroupIndicatorParamService;
private final EvalUserRankCodeReportService evalUserRankCodeReportService;
private final EvalUserValueReportService evalUserValueReportService;
|
911bd821
姜超
feature(*): 报表相关实体类
|
55
|
private final EvalGroupIndicatorService evalGroupIndicatorService;
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
56
57
|
private final IndicatorUserValueService indicatorUserValueService;
private final EvalIndicatorValueService evalIndicatorValueService;
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
58
59
60
61
|
private final PlatformTransactionManager platformTransactionManager;
private final EvalUserRankReportService evalUserRankReportService;
private final EvalUserReportService evalUserReportService;
private final TransactionDefinition transactionDefinition;
|
911bd821
姜超
feature(*): 报表相关实体类
|
62
63
64
65
|
private final EvalUserPoolService evalUserPoolService;
private final EvalGroupRankService evalGroupRankService;
private final EvalGroupService evalGroupService;
private final DistributedLocker distributedLocker;
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
66
|
private final CommonService commonService;
|
911bd821
姜超
feature(*): 报表相关实体类
|
67
68
69
70
71
72
|
@Value("${spring.cache.custom.global-prefix}:eval:user:report")
@Getter
private String evalUserReportDistKey;
/**
|
4834ef00
姜超
feature(*): 门店考评
|
73
|
* 考评报表定时任务
|
911bd821
姜超
feature(*): 报表相关实体类
|
74
75
76
77
78
|
*
*/
@Scheduled(cron = TimeTaskConstant.EVAL_REPORT)
@Transactional(rollbackFor = Exception.class)
public void evalUserReportTask() {
|
0992692a
姜超
feature(*): 考评不抽取日志
|
79
|
// this.evalUserReport(LocalDate.now().minusDays(1));
|
911bd821
姜超
feature(*): 报表相关实体类
|
80
81
82
83
|
}
/**
* 绩效报表定时任务
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
84
85
86
87
|
* 1. 遍历考评排名组
* 2. 创建考评排名组报表
* 3. 创建考评排名组编码
* 4. 统计数据
|
911bd821
姜超
feature(*): 报表相关实体类
|
88
89
90
|
*
* @param date
*/
|
911bd821
姜超
feature(*): 报表相关实体类
|
91
92
93
94
95
|
public void evalUserReport(LocalDate date) {
Lock lock = distributedLocker.lock(getEvalUserReportDistKey());
if (! ((RLock) lock).isLocked()) {
return;
}
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
96
|
TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
|
911bd821
姜超
feature(*): 报表相关实体类
|
97
98
|
try {
log.info("定时任务【考评人员报表数据抽取】开始执行");
|
e376b24c
姜超
feature(*): 修改个人考评
|
99
100
|
Map<Long, List<EvalGroupRank>> groupEvalGroupMap = queryEffectRank(date);
for (Map.Entry<Long, List<EvalGroupRank>> entry : groupEvalGroupMap.entrySet()) {
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
101
|
for (EvalGroupRank rank : entry.getValue()) {
|
392d707a
姜超
feature(*): 门店考评
|
102
|
//清除当月数据(当月只有一条数据)
|
6b3d17b7
姜超
feature(*): 考评人员报...
|
103
|
cleanRankCurMonthData(rank.getId(), date);
|
0c5cfae9
姜超
feature(*): 考评人员报...
|
104
|
//抽取排名组数据
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
105
|
createRankReport(rank, entry.getKey(), date);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
106
|
}
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
107
|
}
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
108
109
110
|
platformTransactionManager.commit(transactionStatus);
} catch (Exception e){
platformTransactionManager.rollback(transactionStatus);
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
111
|
log.error("考评人员报表数据抽取失败, " + e.getMessage(), e);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
112
113
114
115
|
} finally {
lock.unlock();
}
}
|
911bd821
姜超
feature(*): 报表相关实体类
|
116
|
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
117
|
/**
|
0c5cfae9
姜超
feature(*): 考评人员报...
|
118
|
* 计算排名组报表数据
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
119
120
121
122
|
* @param rank
* @param groupId
* @param date
*/
|
0c5cfae9
姜超
feature(*): 考评人员报...
|
123
|
public void createRankReport(EvalGroupRank rank, Long groupId, LocalDate date) {
|
8945afe5
姜超
feature(*): 考评保存修改
|
124
|
List<EvalGroup> evalGroups = evalGroupService.getEffectsByRankId(rank.getId(), date);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
125
126
127
128
129
130
131
132
133
134
135
136
|
List<Long> evalGroupIds = evalGroups.stream().map(EvalGroup::getId).collect(Collectors.toList());
if (PublicUtil.isEmpty(evalGroupIds)) {
return;
}
List<EvalUserPool> pools = evalUserPoolService.list(Wrappers.<EvalUserPool>lambdaQuery()
.in(EvalUserPool::getEvalGroupId, evalGroupIds)
.eq(EvalUserPool::getMonthly, YearMonth.from(date))
.eq(EvalUserPool::getYn, Boolean.TRUE)
);
if (PublicUtil.isEmpty(pools)) {
return;
}
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
137
138
139
140
141
|
List<EvalGroupIndicator> evalGroupIndicators = evalGroupIndicatorService.list(Wrappers.<EvalGroupIndicator>lambdaQuery()
.in(EvalGroupIndicator::getEvalGroupId, evalGroupIds)
.eq(EvalGroupIndicator::getYn, Boolean.TRUE)
.orderByAsc(EvalGroupIndicator::getId)
);
|
911bd821
姜超
feature(*): 报表相关实体类
|
142
|
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
143
144
|
//排名组
EvalUserRankReport reportRank = this.saveRankReport(rank, evalGroupIds, evalGroups, date, groupId);
|
6b3d17b7
姜超
feature(*): 考评人员报...
|
145
|
final Long evalUserRankReportId = reportRank.getId();
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
146
|
//排名组指标编码、人员、门店
|
392d707a
姜超
feature(*): 门店考评
|
147
|
List<EvalUserRankCodeReport> rankCodes = this.saveRankCodeReports(evalGroupIndicators, evalUserRankReportId, date);
|
6b3d17b7
姜超
feature(*): 考评人员报...
|
148
149
|
List<EvalUserReport> evalUserReports = this.saveStaffReports(pools, date, evalUserRankReportId);
List<EvalUserReport> evalShopReports = this.saveShopReports(pools, date, evalUserRankReportId);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
150
|
//人员维度
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
151
|
List<EvalUserValueReport> reportUserValues = calcUser(pools, evalGroupIndicators, evalUserReports, date);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
152
|
//门店维度
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
153
154
|
calcShop(evalShopReports, rankCodes, reportUserValues, evalUserReports, date);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
155
|
}
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
156
157
158
159
160
|
public List<EvalUserValueReport> calcUser(List<EvalUserPool> pools,
List<EvalGroupIndicator> evalGroupIndicators,
List<EvalUserReport> evalUserReports,
LocalDate date) {
List<EvalUserValueReport> reportUserValues = new ArrayList<>();
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
161
162
163
|
List<Long> userIds = pools.stream().map(EvalUserPool::getUserId).distinct().collect(Collectors.toList());
List<Long> poolIds = pools.stream().map(EvalUserPool::getId).collect(Collectors.toList());
List<Long> evalGroupIndicatorIds = evalGroupIndicators.stream().map(EvalGroupIndicator::getId).collect(Collectors.toList());
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
164
|
List<EvalGroupIndicatorHitLog> hitLogs = evalGroupIndicatorHitLogService.getHitLogs(evalGroupIndicatorIds, poolIds, EvalScopeEnum.STAFF, date);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
165
|
Map<Long, List<EvalGroupIndicatorHitLog>> indicatorHitLogMap = hitLogs.stream().collect(Collectors.groupingBy(EvalGroupIndicatorHitLog::getEvalGroupIndicatorId));
|
6a629d48
姜超
feature(*): 门店考评
|
166
|
Map<Long, Long> userPoolReportIdMap = evalUserReports.stream().collect(Collectors.toMap(EvalUserReport::getEvalUserPoolId, EvalUserReport::getId, (v1, v2) -> v1));
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
167
|
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
168
169
170
|
for (EvalGroupIndicator groupIndicator : evalGroupIndicators) {
final ScoreWayEnum scoreWay = groupIndicator.getScoreWay();
final IndicatorCodeTypeEnum codeType = groupIndicator.getCodeType();
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
171
|
final Long evalGroupIndicatorId = groupIndicator.getId();
|
6329e44a
姜超
feature(*): 考评人员数...
|
172
173
174
175
|
List<EvalGroupIndicatorParam> params = evalGroupIndicatorParamService.list(Wrappers.<EvalGroupIndicatorParam>lambdaQuery()
.eq(EvalGroupIndicatorParam::getEvalGroupIndicatorId, evalGroupIndicatorId)
.eq(EvalGroupIndicatorParam::getYn, Boolean.TRUE)
);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
176
177
178
179
180
|
List<EvalGroupIndicatorHitLog> userHitLogs = indicatorHitLogMap.getOrDefault(evalGroupIndicatorId, new ArrayList<>());
Map<Long, EvalGroupIndicatorHitLog> poolHitLogMap = userHitLogs.stream()
.collect(Collectors.toMap(EvalGroupIndicatorHitLog::getPoolId, Function.identity(), (v1, v2) -> v1));
for (EvalUserPool userPool : pools) {
|
b12ce044
姜超
feature(*): 封装代码
|
181
182
183
|
if (! userPool.getEvalGroupId().equals(groupIndicator.getEvalGroupId())) {
continue;
}
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
184
185
186
187
|
Optional<EvalGroupIndicatorHitLog> hitLog = Optional.ofNullable(poolHitLogMap.get(userPool.getId()));
BigDecimal value = (ScoreWayEnum.LADDER.equals(scoreWay)) ?
hitLog.map(EvalGroupIndicatorHitLog::getHitLadderValue).orElse(BigDecimal.ZERO) :
hitLog.map(EvalGroupIndicatorHitLog::getHitCommissionValue).orElse(BigDecimal.ZERO);
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
188
|
Long evalUserReportId = userPoolReportIdMap.get(userPool.getId());
|
6329e44a
姜超
feature(*): 考评人员数...
|
189
|
reportUserValues.add(convertDB(evalUserReportId, groupIndicator, value, date, params));
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
190
|
}
|
911bd821
姜超
feature(*): 报表相关实体类
|
191
|
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
192
193
|
//是否有子指标
if (IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(codeType)) {
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
194
195
|
for (EvalGroupIndicatorParam param : params) {
if (TargetTypeEnum.NO.equals(param.getTargetType())) {
|
a3384f7e
姜超
feature(*): 考评数据抽取修改
|
196
|
Map<Long, BigDecimal> userValueMap = queryUserOriginValue(param, userIds, date);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
197
198
|
for (EvalUserPool userPool : pools) {
BigDecimal value = userValueMap.getOrDefault(userPool.getUserId(), BigDecimal.ZERO);
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
199
|
Long evalUserReportId = userPoolReportIdMap.get(userPool.getId());
|
392d707a
姜超
feature(*): 门店考评
|
200
|
reportUserValues.add(convertParamDB(evalUserReportId, param, value, date));
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
201
202
203
204
205
206
|
}
} else {
Map<Long, EvalGroupIndicatorTargetHitLog> hitLogMap = queryUserTargetValue(param.getId(), poolIds, date);
for (EvalUserPool userPool : pools) {
EvalGroupIndicatorTargetHitLog hitLog = hitLogMap.get(userPool.getId());
BigDecimal value = Optional.ofNullable(hitLog)
|
0eb5ae3e
姜超
feature(*): 考评数据抽取修改
|
207
|
.map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED);
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
208
|
Long evalUserReportId = userPoolReportIdMap.get(userPool.getId());
|
392d707a
姜超
feature(*): 门店考评
|
209
|
reportUserValues.add(convertParamDB(evalUserReportId, param, value, date));
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
210
211
|
}
}
|
911bd821
姜超
feature(*): 报表相关实体类
|
212
|
}
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
213
214
215
|
}
}
if (PublicUtil.isNotEmpty(reportUserValues)) {
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
216
|
evalUserValueReportService.saveBatch(reportUserValues);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
217
|
}
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
218
|
return reportUserValues;
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
219
|
}
|
911bd821
姜超
feature(*): 报表相关实体类
|
220
|
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
221
222
223
224
225
|
public void calcShop(List<EvalUserReport> evalShopReports,
List<EvalUserRankCodeReport> rankCodes,
List<EvalUserValueReport> reportUserValues,
List<EvalUserReport> evalUserReports,
LocalDate date) {
|
9ee4f27d
姜超
feature(*): 考评人员报...
|
226
|
List<EvalUserValueReport> reportShopValues = new ArrayList<>();
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
227
228
229
230
231
232
233
|
for (EvalUserReport shopReport : evalShopReports) {
Set<Long> shopReportIds = evalUserReports.stream()
.filter(user -> shopReport.getShopId().equals(user.getShopId()) && Boolean.TRUE.equals(user.getInclusion()))
.map(EvalUserReport::getId).collect(Collectors.toSet());
final Long evalUserReportId = shopReport.getId();
|
9ee4f27d
姜超
feature(*): 考评人员报...
|
234
|
for (EvalUserRankCodeReport rankCode : rankCodes) {
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
235
236
|
final String code = rankCode.getCode();
final IndicatorCodeTypeEnum codeType = rankCode.getCodeType();
|
911bd821
姜超
feature(*): 报表相关实体类
|
237
|
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
238
|
Double averageRatioDouble = reportUserValues.stream()
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
239
|
.filter(user -> shopReportIds.contains(user.getEvalUserReportId()) && code.equals(user.getCode()))
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
240
241
242
|
.mapToDouble(userValue -> Optional.ofNullable(userValue.getValue()).orElse(BigDecimal.ZERO).doubleValue())
.average()
.orElse(0);
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
243
244
|
BigDecimal value = new BigDecimal(averageRatioDouble.toString());
EvalUserValueReport shopValue = new EvalUserValueReport(evalUserReportId, code, codeType, value, date);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
245
246
247
248
|
reportShopValues.add(shopValue);
}
}
if (PublicUtil.isNotEmpty(reportShopValues)) {
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
249
|
evalUserValueReportService.saveBatch(reportShopValues);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
250
251
252
|
}
}
|
6b3d17b7
姜超
feature(*): 考评人员报...
|
253
|
public List<EvalUserReport> saveStaffReports(List<EvalUserPool> pools, LocalDate date, Long evalUserRankReportId) {
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
254
255
256
|
List<EvalUserReport> evalUserReports = new ArrayList<>();
for (EvalUserPool userPool : pools) {
EvalUserReport report = new EvalUserReport();
|
d50d5802
姜超
feature(*): 字段修改
|
257
|
report.setEvalUserRankReportId(evalUserRankReportId);
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
258
259
260
261
262
263
264
|
report.setDimension(ReportDimensionEnum.STAFF);
report.setUserId(userPool.getUserId());
report.setUserName(userPool.getUserName());
report.setPostId(userPool.getPostId());
report.setPostName(userPool.getPostName());
report.setShopId(userPool.getShopId());
report.setShopName(userPool.getShopName());
|
6a629d48
姜超
feature(*): 门店考评
|
265
|
report.setEvalUserPoolId(userPool.getId());
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
266
|
report.setDataDate(date);
|
f3cb2328
姜超
feature(*): 考评数据抽取修改
|
267
|
report.setInclusion(userPool.getInclusion());
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
268
269
270
271
272
273
|
evalUserReports.add(report);
}
evalUserReportService.saveBatch(evalUserReports);
return evalUserReports;
}
|
6b3d17b7
姜超
feature(*): 考评人员报...
|
274
|
public List<EvalUserReport> saveShopReports(List<EvalUserPool> pools, LocalDate date, Long evalUserRankReportId) {
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
275
276
277
278
279
|
List<EvalUserReport> evalShopReports = new ArrayList<>();
Map<Long, String> shopMap = pools.stream().collect(Collectors.toMap(EvalUserPool::getShopId, EvalUserPool::getShopName, (v1, v2) -> v1));
for (Long shopId : shopMap.keySet()) {
EvalUserReport report = new EvalUserReport();
report.setDimension(ReportDimensionEnum.SHOP);
|
d50d5802
姜超
feature(*): 字段修改
|
280
|
report.setEvalUserRankReportId(evalUserRankReportId);
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
281
282
283
|
report.setShopId(shopId);
report.setShopName(shopMap.get(shopId));
report.setDataDate(date);
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
284
|
evalShopReports.add(report);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
285
|
}
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
286
287
|
evalUserReportService.saveBatch(evalShopReports);
return evalShopReports;
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
288
289
|
}
|
a3384f7e
姜超
feature(*): 考评数据抽取修改
|
290
291
292
|
public Map<Long, BigDecimal> queryUserOriginValue(EvalGroupIndicatorParam param, List<Long> userIds, LocalDate dataDate) {
final String code = param.getCode();
final IndicatorCodeTypeEnum codeType = param.getCodeType();
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
293
294
295
|
Map<Long, BigDecimal> referValueMap = Maps.newHashMapWithExpectedSize(userIds.size());
//无目标
if (IndicatorCodeTypeEnum.INDICATOR.equals(codeType)) {
|
6b3d17b7
姜超
feature(*): 考评人员报...
|
296
|
List<IndicatorUserValue> indicatorUserValues = indicatorUserValueService.list(Wrappers.<IndicatorUserValue>lambdaQuery()
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
297
298
|
.eq(IndicatorUserValue::getIndicatorCode, code)
.eq(IndicatorUserValue::getDataDate, dataDate)
|
6b3d17b7
姜超
feature(*): 考评人员报...
|
299
300
|
.in(IndicatorUserValue::getUserId, userIds)
.eq(IndicatorUserValue::getDimensionType, DimensionTypeEnum.STAFF)
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
301
302
303
|
.eq(IndicatorUserValue::getYn, Boolean.TRUE)
);
for (IndicatorUserValue userValue : indicatorUserValues) {
|
de63cefc
姜超
feature(*): 考评数据抽取修改
|
304
305
|
referValueMap.put(userValue.getUserId(), commonService.queryIndicatorValueVO(code, userValue,
param.getTargetType(), param.getDataType()));
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
306
307
|
}
return referValueMap;
|
911bd821
姜超
feature(*): 报表相关实体类
|
308
|
}
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
309
310
|
for (Long userId : userIds) {
EvalIndicatorValue evalIndicatorValue = evalIndicatorValueService.queryLastValue(userId,
|
6b3d17b7
姜超
feature(*): 考评人员报...
|
311
|
DimensionTypeEnum.STAFF, code, dataDate);
|
0eb5ae3e
姜超
feature(*): 考评数据抽取修改
|
312
|
referValueMap.put(userId, commonService.queryEvalIndicatorValueVO(code, evalIndicatorValue, param.getTargetType(), param.getDataType()));
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
|
}
return referValueMap;
}
public Map<Long, EvalGroupIndicatorTargetHitLog> queryUserTargetValue(Long referId, List<Long> poolIds, LocalDate dataDate) {
List<EvalGroupIndicatorTargetHitLog> targetHitLogs = evalGroupIndicatorTargetHitLogService.list(Wrappers.<EvalGroupIndicatorTargetHitLog>lambdaQuery()
.eq(EvalGroupIndicatorTargetHitLog::getReferId, referId)
.eq(EvalGroupIndicatorTargetHitLog::getTargetType, IndicatorTypeEnum.EXAMINE)
.eq(EvalGroupIndicatorTargetHitLog::getDataDate, dataDate)
.in(EvalGroupIndicatorTargetHitLog::getPoolId, poolIds)
.eq(EvalGroupIndicatorTargetHitLog::getScopeType, EvalScopeEnum.STAFF)
.eq(EvalGroupIndicatorTargetHitLog::getYn, Boolean.TRUE)
);
return targetHitLogs.stream()
.collect(Collectors.toMap(EvalGroupIndicatorTargetHitLog::getPoolId, Function.identity(), (v1, v2) -> v1));
|
911bd821
姜超
feature(*): 报表相关实体类
|
328
329
|
}
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
330
|
public void cleanTodayData(LocalDate date) {
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
331
|
evalUserRankReportService.remove(Wrappers.<EvalUserRankReport>lambdaUpdate()
|
9ee4f27d
姜超
feature(*): 考评人员报...
|
332
|
.eq(EvalUserRankReport::getDataDate, date)
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
333
|
);
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
334
|
evalUserRankCodeReportService.remove(Wrappers.<EvalUserRankCodeReport>lambdaUpdate()
|
9ee4f27d
姜超
feature(*): 考评人员报...
|
335
|
.eq(EvalUserRankCodeReport::getDataDate, date)
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
336
|
);
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
337
|
evalUserValueReportService.remove(Wrappers.<EvalUserValueReport>lambdaUpdate()
|
9ee4f27d
姜超
feature(*): 考评人员报...
|
338
|
.eq(EvalUserValueReport::getDataDate, date)
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
339
|
);
|
6b3d17b7
姜超
feature(*): 考评人员报...
|
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
|
evalUserReportService.remove(Wrappers.<EvalUserReport>lambdaUpdate()
.eq(EvalUserReport::getDataDate, date)
);
}
public void cleanRankCurMonthData(Long rankId, LocalDate endDate) {
LocalDate startDate = endDate.with(TemporalAdjusters.firstDayOfMonth());
List<EvalUserRankReport> rankReports = evalUserRankReportService.list(Wrappers.<EvalUserRankReport>lambdaQuery()
.eq(EvalUserRankReport::getRankId, rankId)
.ge(EvalUserRankReport::getDataDate, startDate)
.le(EvalUserRankReport::getDataDate, endDate)
);
if (PublicUtil.isEmpty(rankReports)) {
return;
}
List<Long> rankReportIds = rankReports.stream().map(EvalUserRankReport::getId).collect(Collectors.toList());
evalUserRankReportService.removeByIds(rankReportIds);
evalUserRankCodeReportService.remove(Wrappers.<EvalUserRankCodeReport>lambdaUpdate()
|
d50d5802
姜超
feature(*): 字段修改
|
358
|
.in(EvalUserRankCodeReport::getEvalUserRankReportId, rankReportIds)
|
6b3d17b7
姜超
feature(*): 考评人员报...
|
359
360
361
|
);
List<EvalUserReport> userReports = evalUserReportService.list(Wrappers.<EvalUserReport>lambdaQuery()
|
d50d5802
姜超
feature(*): 字段修改
|
362
|
.in(EvalUserReport::getEvalUserRankReportId, rankReportIds)
|
6b3d17b7
姜超
feature(*): 考评人员报...
|
363
364
365
366
367
368
369
370
371
|
);
List<Long> userReportIds = userReports.stream().map(EvalUserReport::getId).collect(Collectors.toList());
if (PublicUtil.isEmpty(userReportIds)) {
return;
}
evalUserReportService.removeByIds(userReportIds);
evalUserValueReportService.remove(Wrappers.<EvalUserValueReport>lambdaUpdate()
.in(EvalUserValueReport::getEvalUserReportId, userReportIds)
);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
372
|
}
|
911bd821
姜超
feature(*): 报表相关实体类
|
373
|
|
392d707a
姜超
feature(*): 门店考评
|
374
|
public List<EvalUserRankCodeReport> saveRankCodeReports(List<EvalGroupIndicator> evalGroupIndicators, Long reportRankId, LocalDate date) {
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
375
|
Set<String> codes = new HashSet<>();
|
9ee4f27d
姜超
feature(*): 考评人员报...
|
376
|
List<EvalUserRankCodeReport> rankCodes = new ArrayList<>();
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
377
378
379
380
|
AtomicInteger order = new AtomicInteger();
for (EvalGroupIndicator groupIndicator : evalGroupIndicators) {
//一个编码只能展示一次
if (! codes.add(groupIndicator.getCode())) {
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
381
382
|
continue;
}
|
8e34d367
姜超
feature(*): 数据抽取修改
|
383
384
|
rankCodes.add(this.convertRankCodeDB(groupIndicator, date, reportRankId, order));
|
6a629d48
姜超
feature(*): 门店考评
|
385
|
//组合指标
|
43c9cba5
姜超
feature(*): 编码名称修改
|
386
387
|
if (PublicUtil.isNotEmpty(groupIndicator.getCodeType()) &&
IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(groupIndicator.getCodeType())) {
|
8e34d367
姜超
feature(*): 数据抽取修改
|
388
389
390
391
392
393
394
395
|
//子指标
List<EvalGroupIndicatorParam> params = evalGroupIndicatorParamService.list(Wrappers.<EvalGroupIndicatorParam>lambdaQuery()
.eq(EvalGroupIndicatorParam::getEvalGroupIndicatorId, groupIndicator.getId())
.eq(EvalGroupIndicatorParam::getYn, Boolean.TRUE)
);
for (EvalGroupIndicatorParam indicatorParam : params) {
rankCodes.add(this.convertParamToRankCodeDB(indicatorParam, date, reportRankId, order, groupIndicator));
}
|
6a629d48
姜超
feature(*): 门店考评
|
396
|
}
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
397
|
|
911bd821
姜超
feature(*): 报表相关实体类
|
398
|
}
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
399
|
evalUserRankCodeReportService.saveBatch(rankCodes);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
400
401
402
|
return rankCodes;
}
|
e376b24c
姜超
feature(*): 修改个人考评
|
403
404
405
406
407
|
public Map<Long, List<EvalGroupRank>> queryEffectRank(LocalDate date) {
List<SettingStatusEnum> status = new ArrayList<SettingStatusEnum>(){{
add(SettingStatusEnum.EFFECTIVE);
add(SettingStatusEnum.BE_EFFECTIVE);
}};
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
408
|
List<EvalGroupRank> evalGroupRanks = evalGroupRankService.list(Wrappers.<EvalGroupRank>lambdaQuery()
|
e376b24c
姜超
feature(*): 修改个人考评
|
409
|
.in(EvalGroupRank::getStatus, status)
|
6a629d48
姜超
feature(*): 门店考评
|
410
|
.ge(EvalGroupRank::getOverTime, date)
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
411
412
413
414
415
|
.eq(EvalGroupRank::getYn, Boolean.TRUE)
);
return evalGroupRanks.stream().collect(Collectors.groupingBy(EvalGroupRank::getGroupId));
}
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
416
|
public EvalUserRankReport saveRankReport(EvalGroupRank rank, List<Long> evalGroupIds, List<EvalGroup> evalGroups, LocalDate date, Long groupId) {
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
417
|
List<Long> shopIds = evalGroups.stream().map(EvalGroup::getShopIds).distinct().collect(ArrayList::new, List::addAll, List::addAll);
|
9ee4f27d
姜超
feature(*): 考评人员报...
|
418
|
EvalUserRankReport reportRank = new EvalUserRankReport();
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
419
420
421
422
423
|
reportRank.setRankId(rank.getId());
reportRank.setRankName(rank.getName());
reportRank.setEvalGroupIds(evalGroupIds);
reportRank.setShopIds(shopIds);
reportRank.setDataDate(date);
|
6329e44a
姜超
feature(*): 考评人员数...
|
424
|
reportRank.setMonthly(YearMonth.from(date));
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
425
|
reportRank.setGroupId(groupId);
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
426
|
evalUserRankReportService.save(reportRank);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
427
428
429
|
return reportRank;
}
|
6329e44a
姜超
feature(*): 考评人员数...
|
430
431
|
public EvalUserValueReport convertDB(Long evalUserReportId, EvalGroupIndicator groupIndicator, BigDecimal value,
LocalDate date, List<EvalGroupIndicatorParam> params) {
|
9ee4f27d
姜超
feature(*): 考评人员报...
|
432
|
EvalUserValueReport userValue = new EvalUserValueReport();
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
433
|
userValue.setEvalUserReportId(evalUserReportId);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
434
435
436
437
|
userValue.setCode(groupIndicator.getCode());
userValue.setCodeType(groupIndicator.getCodeType());
userValue.setValue(Optional.ofNullable(value).orElse(BigDecimal.ZERO));
userValue.setDataDate(date);
|
6329e44a
姜超
feature(*): 考评人员数...
|
438
439
440
441
442
|
if (IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(groupIndicator.getCodeType())) {
userValue.setValue(userValue.getValue().multiply(Constant.ONE_HUNDRED));
} else {
Optional<EvalGroupIndicatorParam> paramOptional = params.stream().findFirst();
if (paramOptional.isPresent()) {
|
0eb5ae3e
姜超
feature(*): 考评数据抽取修改
|
443
444
|
EvalGroupIndicatorParam param = paramOptional.get();
if (DataTypeEnum.RATIO.equals(param.getDataType()) || (! TargetTypeEnum.NO.equals(param.getTargetType()))) {
|
6329e44a
姜超
feature(*): 考评人员数...
|
445
446
447
448
|
userValue.setValue(userValue.getValue().multiply(Constant.ONE_HUNDRED));
}
}
}
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
449
450
451
|
return userValue;
}
|
392d707a
姜超
feature(*): 门店考评
|
452
|
public EvalUserValueReport convertParamDB(Long evalUserReportId, EvalGroupIndicatorParam param, BigDecimal value, LocalDate date) {
|
9ee4f27d
姜超
feature(*): 考评人员报...
|
453
|
EvalUserValueReport userValue = new EvalUserValueReport();
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
454
|
userValue.setEvalUserReportId(evalUserReportId);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
455
456
457
458
|
userValue.setCode(param.getCode());
userValue.setCodeType(param.getCodeType());
userValue.setValue(Optional.ofNullable(value).orElse(BigDecimal.ZERO));
userValue.setDataDate(date);
|
b5cb9dec
姜超
feature(*): 考评人员报...
|
459
|
return userValue;
|
911bd821
姜超
feature(*): 报表相关实体类
|
460
461
|
}
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
462
463
|
public EvalUserRankCodeReport convertRankCodeDB(EvalGroupIndicator groupIndicator, LocalDate date, Long reportRankId, AtomicInteger order) {
EvalUserRankCodeReport rankCode = new EvalUserRankCodeReport();
|
d50d5802
姜超
feature(*): 字段修改
|
464
|
rankCode.setEvalUserRankReportId(reportRankId);
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
465
466
467
|
rankCode.setEvalGroupIndicatorId(groupIndicator.getId());
rankCode.setCode(groupIndicator.getCode());
rankCode.setCodeType(groupIndicator.getCodeType());
|
26b0233b
姜超
feature(*): 抽数据名称处理
|
468
469
470
471
472
473
474
|
// String indicatorName = (ScoreWayEnum.LADDER.equals(groupIndicator.getScoreWay())) ?
// groupIndicator.getLadderParamAlias() : groupIndicator.getCommissionParamAlias();
// if (PublicUtil.isEmpty(indicatorName)) {
// indicatorName = groupIndicator.getName();
// }
// rankCode.setIndicatorName(indicatorName);
rankCode.setIndicatorName(groupIndicator.getName());
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
475
|
rankCode.setDataDate(date);
|
6a629d48
姜超
feature(*): 门店考评
|
476
|
rankCode.setOrderNum(order.incrementAndGet());
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
477
478
479
|
return rankCode;
}
|
392d707a
姜超
feature(*): 门店考评
|
480
481
|
public EvalUserRankCodeReport convertParamToRankCodeDB(EvalGroupIndicatorParam indicatorParam, LocalDate date, Long reportRankId,
AtomicInteger order, EvalGroupIndicator groupIndicator) {
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
482
|
EvalUserRankCodeReport rankCode = new EvalUserRankCodeReport();
|
d50d5802
姜超
feature(*): 字段修改
|
483
|
rankCode.setEvalUserRankReportId(reportRankId);
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
484
485
486
487
|
rankCode.setEvalGroupIndicatorId(indicatorParam.getEvalGroupIndicatorId());
rankCode.setCode(indicatorParam.getCode());
rankCode.setCodeType(indicatorParam.getCodeType());
rankCode.setIndicatorName(indicatorParam.getName());
|
6a629d48
姜超
feature(*): 门店考评
|
488
489
490
491
|
if (IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(groupIndicator.getCodeType())
&& PublicUtil.isNotEmpty(groupIndicator.getCode())) {
rankCode.setParentCode(groupIndicator.getCode());
}
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
492
|
rankCode.setDataDate(date);
|
6a629d48
姜超
feature(*): 门店考评
|
493
|
rankCode.setOrderNum(order.incrementAndGet());
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
494
|
return rankCode;
|
911bd821
姜超
feature(*): 报表相关实体类
|
495
|
}
|
74f1e91d
姜超
feature(*): 考评人员报表修改
|
496
497
|
|
911bd821
姜超
feature(*): 报表相关实体类
|
498
|
}
|