Commit 2c63b66fe4d979face1ef82a1b196a8d79af144b
1 parent
1f69908e
feature(*): 考评报表抽取修改
考评报表抽取修改
Showing
1 changed file
with
63 additions
and
82 deletions
fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalUserReportTask.java
... | ... | @@ -164,7 +164,7 @@ public class EvalUserReportTask { |
164 | 164 | //人员维度 |
165 | 165 | List<EvalUserValueReport> reportUserValues = calcUser(userPools, evalGroupIndicators, evalUserReports, date); |
166 | 166 | //门店维度 |
167 | - calcShop(evalShopReports, rankCodes, reportUserValues, evalUserReports, date); | |
167 | + calcShop(shopPools, evalGroupIndicators, evalShopReports, date); | |
168 | 168 | } |
169 | 169 | |
170 | 170 | |
... | ... | @@ -193,37 +193,33 @@ public class EvalUserReportTask { |
193 | 193 | List<EvalGroupIndicatorHitLog> userHitLogs = indicatorHitLogMap.getOrDefault(evalGroupIndicatorId, new ArrayList<>()); |
194 | 194 | Map<Long, EvalGroupIndicatorHitLog> poolHitLogMap = userHitLogs.stream() |
195 | 195 | .collect(Collectors.toMap(EvalGroupIndicatorHitLog::getPoolId, Function.identity(), (v1, v2) -> v1)); |
196 | - for (EvalUserPool userPool : pools) { | |
197 | - if (! userPool.getEvalGroupId().equals(groupIndicator.getEvalGroupId())) { | |
196 | + for (EvalUserPool pool : pools) { | |
197 | + if (! pool.getEvalGroupId().equals(groupIndicator.getEvalGroupId())) { | |
198 | 198 | continue; |
199 | 199 | } |
200 | - Optional<EvalGroupIndicatorHitLog> hitLog = Optional.ofNullable(poolHitLogMap.get(userPool.getId())); | |
200 | + | |
201 | + Optional<EvalGroupIndicatorHitLog> hitLog = Optional.ofNullable(poolHitLogMap.get(pool.getId())); | |
202 | + if (pool.getDataDate().compareTo(date) != 0) { | |
203 | + hitLog = evalGroupIndicatorHitLogService.getHitLog(evalGroupIndicatorId, pool.getId(), EvalScopeEnum.STAFF, pool.getDataDate()); | |
204 | + } | |
201 | 205 | BigDecimal value = (ScoreWayEnum.LADDER.equals(scoreWay)) ? |
202 | 206 | hitLog.map(EvalGroupIndicatorHitLog::getHitLadderValue).orElse(BigDecimal.ZERO) : |
203 | 207 | hitLog.map(EvalGroupIndicatorHitLog::getHitCommissionValue).orElse(BigDecimal.ZERO); |
204 | - Long evalUserReportId = userPoolReportIdMap.get(userPool.getId()); | |
208 | + Long evalUserReportId = userPoolReportIdMap.get(pool.getId()); | |
205 | 209 | reportUserValues.add(convertDB(evalUserReportId, groupIndicator, value, date, params)); |
206 | 210 | } |
207 | 211 | |
208 | 212 | //是否有子指标 |
209 | 213 | if (IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(codeType)) { |
210 | 214 | for (EvalGroupIndicatorParam param : params) { |
211 | - if (TargetTypeEnum.NO.equals(param.getTargetType())) { | |
212 | - Map<Long, BigDecimal> userValueMap = queryUserOriginValue(param, userIds, date); | |
213 | - for (EvalUserPool userPool : pools) { | |
214 | - BigDecimal value = userValueMap.getOrDefault(userPool.getUserId(), BigDecimal.ZERO); | |
215 | - Long evalUserReportId = userPoolReportIdMap.get(userPool.getId()); | |
216 | - reportUserValues.add(convertParamDB(evalUserReportId, param, value, date)); | |
217 | - } | |
218 | - } else { | |
219 | - Map<Long, EvalGroupIndicatorTargetHitLog> hitLogMap = queryTargetValue(param.getId(), poolIds, date); | |
220 | - for (EvalUserPool userPool : pools) { | |
221 | - EvalGroupIndicatorTargetHitLog hitLog = hitLogMap.get(userPool.getId()); | |
222 | - BigDecimal value = Optional.ofNullable(hitLog) | |
223 | - .map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED); | |
224 | - Long evalUserReportId = userPoolReportIdMap.get(userPool.getId()); | |
225 | - reportUserValues.add(convertParamDB(evalUserReportId, param, value, date)); | |
226 | - } | |
215 | + Map<Long, EvalGroupIndicatorTargetHitLog> targetHitLogMap = queryTargetValue(param.getId(), poolIds, date, EvalScopeEnum.STAFF); | |
216 | + for (EvalUserPool pool : pools) { | |
217 | + Boolean staffChange = pool.getDataDate().compareTo(date) != 0; | |
218 | + EvalGroupIndicatorTargetHitLog targetHitLog = (staffChange) | |
219 | + ? queryTargetValue(param.getId(), pool.getId(), pool.getDataDate(), EvalScopeEnum.STAFF) : targetHitLogMap.get(pool.getId()); | |
220 | + BigDecimal value = this.getParamValue(targetHitLog); | |
221 | + Long evalUserReportId = userPoolReportIdMap.get(pool.getId()); | |
222 | + reportUserValues.add(convertParamDB(evalUserReportId, param, value, date)); | |
227 | 223 | } |
228 | 224 | } |
229 | 225 | } |
... | ... | @@ -234,7 +230,7 @@ public class EvalUserReportTask { |
234 | 230 | return reportUserValues; |
235 | 231 | } |
236 | 232 | |
237 | - public List<EvalUserValueReport> calcShop2(List<EvalShopPool> pools, | |
233 | + public List<EvalUserValueReport> calcShop(List<EvalShopPool> pools, | |
238 | 234 | List<EvalGroupIndicator> evalGroupIndicators, |
239 | 235 | List<EvalUserReport> evalShopReports, |
240 | 236 | LocalDate date) { |
... | ... | @@ -258,15 +254,19 @@ public class EvalUserReportTask { |
258 | 254 | List<EvalGroupIndicatorHitLog> userHitLogs = indicatorHitLogMap.getOrDefault(evalGroupIndicatorId, new ArrayList<>()); |
259 | 255 | Map<Long, EvalGroupIndicatorHitLog> poolHitLogMap = userHitLogs.stream() |
260 | 256 | .collect(Collectors.toMap(EvalGroupIndicatorHitLog::getPoolId, Function.identity(), (v1, v2) -> v1)); |
261 | - for (EvalShopPool shopPool : pools) { | |
262 | - if (! shopPool.getEvalGroupId().equals(groupIndicator.getEvalGroupId())) { | |
257 | + for (EvalShopPool pool : pools) { | |
258 | + if (! pool.getEvalGroupId().equals(groupIndicator.getEvalGroupId())) { | |
263 | 259 | continue; |
264 | 260 | } |
265 | - Optional<EvalGroupIndicatorHitLog> hitLog = Optional.ofNullable(poolHitLogMap.get(shopPool.getId())); | |
261 | + | |
262 | + Optional<EvalGroupIndicatorHitLog> hitLog = Optional.ofNullable(poolHitLogMap.get(pool.getId())); | |
263 | + if (pool.getDataDate().compareTo(date) != 0) { | |
264 | + hitLog = evalGroupIndicatorHitLogService.getHitLog(evalGroupIndicatorId, pool.getId(), EvalScopeEnum.SHOP, pool.getDataDate()); | |
265 | + } | |
266 | 266 | BigDecimal value = (ScoreWayEnum.LADDER.equals(scoreWay)) ? |
267 | 267 | hitLog.map(EvalGroupIndicatorHitLog::getHitLadderValue).orElse(BigDecimal.ZERO) : |
268 | 268 | hitLog.map(EvalGroupIndicatorHitLog::getHitCommissionValue).orElse(BigDecimal.ZERO); |
269 | - Long evalUserReportId = shopPoolReportIdMap.get(shopPool.getId()); | |
269 | + Long evalUserReportId = shopPoolReportIdMap.get(pool.getId()); | |
270 | 270 | reportUserValues.add(convertDB(evalUserReportId, groupIndicator, value, date, params)); |
271 | 271 | } |
272 | 272 | |
... | ... | @@ -274,37 +274,14 @@ public class EvalUserReportTask { |
274 | 274 | if (IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(codeType)) { |
275 | 275 | for (EvalGroupIndicatorParam param : params) { |
276 | 276 | Map<Long, EvalGroupIndicatorTargetHitLog> targetHitLogMap = queryTargetValue(param.getId(), poolIds, date, EvalScopeEnum.SHOP); |
277 | - | |
278 | 277 | for (EvalShopPool pool : pools) { |
279 | - EvalGroupIndicatorTargetHitLog hitLog = targetHitLogMap.get(pool.getId()); | |
280 | - EvalUseTargetEnum useTarget = hitLog.getUseTarget(); | |
281 | - | |
282 | - BigDecimal value = Optional.ofNullable(hitLog.getValue()).orElse(BigDecimal.ZERO); | |
283 | - if (EvalUseTargetEnum.FIRST_TARGET.equals(useTarget)) { | |
284 | - value = Optional.ofNullable(hitLog.getReachValue()).orElse(BigDecimal.ZERO); | |
285 | - } else if (EvalUseTargetEnum.EXTRA_TARGET.equals(useTarget)) { | |
286 | - | |
287 | - } | |
288 | - | |
289 | - BigDecimal value = Optional.ofNullable(hitLog) | |
290 | - .map(EvalGroupIndicatorTargetHitLog::getReachValue).orElse(BigDecimal.ZERO).multiply(Constant.ONE_HUNDRED); | |
291 | - Long evalUserReportId = userPoolReportIdMap.get(userPool.getId()); | |
278 | + Boolean staffChange = pool.getDataDate().compareTo(date) != 0; | |
279 | + EvalGroupIndicatorTargetHitLog targetHitLog = (staffChange) | |
280 | + ? queryTargetValue(param.getId(), pool.getId(), pool.getDataDate(), EvalScopeEnum.SHOP) : targetHitLogMap.get(pool.getId()); | |
281 | + BigDecimal value = this.getParamValue(targetHitLog); | |
282 | + Long evalUserReportId = shopPoolReportIdMap.get(pool.getId()); | |
292 | 283 | reportUserValues.add(convertParamDB(evalUserReportId, param, value, date)); |
293 | 284 | } |
294 | - | |
295 | - | |
296 | - | |
297 | - if (TargetTypeEnum.NO.equals(param.getTargetType())) { | |
298 | - Map<Long, BigDecimal> userValueMap = queryUserOriginValue(param, userIds, date); | |
299 | - for (EvalShopPool shopPool : pools) { | |
300 | - BigDecimal value = userValueMap.getOrDefault(shopPool.getUserId(), BigDecimal.ZERO); | |
301 | - Long evalUserReportId = userPoolReportIdMap.get(userPool.getId()); | |
302 | - reportUserValues.add(convertParamDB(evalUserReportId, param, value, date)); | |
303 | - } | |
304 | - } else { | |
305 | - | |
306 | - | |
307 | - } | |
308 | 285 | } |
309 | 286 | } |
310 | 287 | } |
... | ... | @@ -314,36 +291,27 @@ public class EvalUserReportTask { |
314 | 291 | return reportUserValues; |
315 | 292 | } |
316 | 293 | |
317 | - public void calcShop(List<EvalUserReport> evalShopReports, | |
318 | - List<EvalUserRankCodeReport> rankCodes, | |
319 | - List<EvalUserValueReport> reportUserValues, | |
320 | - List<EvalUserReport> evalUserReports, | |
321 | - LocalDate date) { | |
322 | - List<EvalUserValueReport> reportShopValues = new ArrayList<>(); | |
323 | - for (EvalUserReport shopReport : evalShopReports) { | |
324 | - | |
325 | - Set<Long> shopReportIds = evalUserReports.stream() | |
326 | - .filter(user -> shopReport.getShopId().equals(user.getShopId()) && Boolean.TRUE.equals(user.getInclusion())) | |
327 | - .map(EvalUserReport::getId).collect(Collectors.toSet()); | |
328 | - | |
329 | - final Long evalUserReportId = shopReport.getId(); | |
330 | - for (EvalUserRankCodeReport rankCode : rankCodes) { | |
331 | - final String code = rankCode.getCode(); | |
332 | - final IndicatorCodeTypeEnum codeType = rankCode.getCodeType(); | |
333 | - | |
334 | - Double averageRatioDouble = reportUserValues.stream() | |
335 | - .filter(user -> shopReportIds.contains(user.getEvalUserReportId()) && code.equals(user.getCode())) | |
336 | - .mapToDouble(userValue -> Optional.ofNullable(userValue.getValue()).orElse(BigDecimal.ZERO).doubleValue()) | |
337 | - .average() | |
338 | - .orElse(0); | |
339 | - BigDecimal value = new BigDecimal(averageRatioDouble.toString()); | |
340 | - EvalUserValueReport shopValue = new EvalUserValueReport(evalUserReportId, code, codeType, value, date); | |
341 | - reportShopValues.add(shopValue); | |
342 | - } | |
294 | + public BigDecimal getParamValue(EvalGroupIndicatorTargetHitLog hitLog) { | |
295 | + if (PublicUtil.isEmpty(hitLog) || PublicUtil.isEmpty(hitLog.getUseTarget())) { | |
296 | + return BigDecimal.ZERO; | |
343 | 297 | } |
344 | - if (PublicUtil.isNotEmpty(reportShopValues)) { | |
345 | - evalUserValueReportService.saveBatch(reportShopValues); | |
298 | + BigDecimal value = null; | |
299 | + switch (hitLog.getUseTarget()) { | |
300 | + case NO: { | |
301 | + value = Optional.ofNullable(hitLog.getValue()).orElse(BigDecimal.ZERO); | |
302 | + break; | |
303 | + } | |
304 | + case FIRST_TARGET: { | |
305 | + value = Optional.ofNullable(hitLog.getReachValue()).orElse(BigDecimal.ZERO); | |
306 | + break; | |
307 | + } | |
308 | + case EXTRA_TARGET: { | |
309 | + value = Optional.ofNullable(hitLog.getExtraReachValue()).orElse(BigDecimal.ZERO); | |
310 | + break; | |
311 | + } | |
346 | 312 | } |
313 | + | |
314 | + return value; | |
347 | 315 | } |
348 | 316 | |
349 | 317 | public List<EvalUserReport> saveStaffReports(List<EvalUserPool> pools, LocalDate date, Long evalUserRankReportId, Long evalUserRankStageReportId) { |
... | ... | @@ -424,6 +392,19 @@ public class EvalUserReportTask { |
424 | 392 | .collect(Collectors.toMap(EvalGroupIndicatorTargetHitLog::getPoolId, Function.identity(), (v1, v2) -> v1)); |
425 | 393 | } |
426 | 394 | |
395 | + public EvalGroupIndicatorTargetHitLog queryTargetValue(Long referId, Long poolId, LocalDate dataDate, EvalScopeEnum scopeType) { | |
396 | + EvalGroupIndicatorTargetHitLog targetHitLog = evalGroupIndicatorTargetHitLogService.getOne(Wrappers.<EvalGroupIndicatorTargetHitLog>lambdaQuery() | |
397 | + .eq(EvalGroupIndicatorTargetHitLog::getReferId, referId) | |
398 | + .eq(EvalGroupIndicatorTargetHitLog::getTargetType, IndicatorTypeEnum.EXAMINE) | |
399 | + .eq(EvalGroupIndicatorTargetHitLog::getDataDate, dataDate) | |
400 | + .eq(EvalGroupIndicatorTargetHitLog::getPoolId, poolId) | |
401 | + .eq(EvalGroupIndicatorTargetHitLog::getScopeType, scopeType) | |
402 | + .eq(EvalGroupIndicatorTargetHitLog::getYn, Boolean.TRUE) | |
403 | + , Boolean.FALSE | |
404 | + ); | |
405 | + return targetHitLog; | |
406 | + } | |
407 | + | |
427 | 408 | public void cleanTodayData(LocalDate date) { |
428 | 409 | evalUserRankReportService.remove(Wrappers.<EvalUserRankReport>lambdaUpdate() |
429 | 410 | .eq(EvalUserRankReport::getDataDate, date) | ... | ... |