Commit 2c63b66fe4d979face1ef82a1b196a8d79af144b

Authored by 姜超
1 parent 1f69908e

feature(*): 考评报表抽取修改

考评报表抽取修改
fw-morax-server/src/main/java/cn/fw/morax/server/task/EvalUserReportTask.java
@@ -164,7 +164,7 @@ public class EvalUserReportTask { @@ -164,7 +164,7 @@ public class EvalUserReportTask {
164 //人员维度 164 //人员维度
165 List<EvalUserValueReport> reportUserValues = calcUser(userPools, evalGroupIndicators, evalUserReports, date); 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,37 +193,33 @@ public class EvalUserReportTask {
193 List<EvalGroupIndicatorHitLog> userHitLogs = indicatorHitLogMap.getOrDefault(evalGroupIndicatorId, new ArrayList<>()); 193 List<EvalGroupIndicatorHitLog> userHitLogs = indicatorHitLogMap.getOrDefault(evalGroupIndicatorId, new ArrayList<>());
194 Map<Long, EvalGroupIndicatorHitLog> poolHitLogMap = userHitLogs.stream() 194 Map<Long, EvalGroupIndicatorHitLog> poolHitLogMap = userHitLogs.stream()
195 .collect(Collectors.toMap(EvalGroupIndicatorHitLog::getPoolId, Function.identity(), (v1, v2) -> v1)); 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 continue; 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 BigDecimal value = (ScoreWayEnum.LADDER.equals(scoreWay)) ? 205 BigDecimal value = (ScoreWayEnum.LADDER.equals(scoreWay)) ?
202 hitLog.map(EvalGroupIndicatorHitLog::getHitLadderValue).orElse(BigDecimal.ZERO) : 206 hitLog.map(EvalGroupIndicatorHitLog::getHitLadderValue).orElse(BigDecimal.ZERO) :
203 hitLog.map(EvalGroupIndicatorHitLog::getHitCommissionValue).orElse(BigDecimal.ZERO); 207 hitLog.map(EvalGroupIndicatorHitLog::getHitCommissionValue).orElse(BigDecimal.ZERO);
204 - Long evalUserReportId = userPoolReportIdMap.get(userPool.getId()); 208 + Long evalUserReportId = userPoolReportIdMap.get(pool.getId());
205 reportUserValues.add(convertDB(evalUserReportId, groupIndicator, value, date, params)); 209 reportUserValues.add(convertDB(evalUserReportId, groupIndicator, value, date, params));
206 } 210 }
207 211
208 //是否有子指标 212 //是否有子指标
209 if (IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(codeType)) { 213 if (IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(codeType)) {
210 for (EvalGroupIndicatorParam param : params) { 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,7 +230,7 @@ public class EvalUserReportTask {
234 return reportUserValues; 230 return reportUserValues;
235 } 231 }
236 232
237 - public List<EvalUserValueReport> calcShop2(List<EvalShopPool> pools, 233 + public List<EvalUserValueReport> calcShop(List<EvalShopPool> pools,
238 List<EvalGroupIndicator> evalGroupIndicators, 234 List<EvalGroupIndicator> evalGroupIndicators,
239 List<EvalUserReport> evalShopReports, 235 List<EvalUserReport> evalShopReports,
240 LocalDate date) { 236 LocalDate date) {
@@ -258,15 +254,19 @@ public class EvalUserReportTask { @@ -258,15 +254,19 @@ public class EvalUserReportTask {
258 List<EvalGroupIndicatorHitLog> userHitLogs = indicatorHitLogMap.getOrDefault(evalGroupIndicatorId, new ArrayList<>()); 254 List<EvalGroupIndicatorHitLog> userHitLogs = indicatorHitLogMap.getOrDefault(evalGroupIndicatorId, new ArrayList<>());
259 Map<Long, EvalGroupIndicatorHitLog> poolHitLogMap = userHitLogs.stream() 255 Map<Long, EvalGroupIndicatorHitLog> poolHitLogMap = userHitLogs.stream()
260 .collect(Collectors.toMap(EvalGroupIndicatorHitLog::getPoolId, Function.identity(), (v1, v2) -> v1)); 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 continue; 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 BigDecimal value = (ScoreWayEnum.LADDER.equals(scoreWay)) ? 266 BigDecimal value = (ScoreWayEnum.LADDER.equals(scoreWay)) ?
267 hitLog.map(EvalGroupIndicatorHitLog::getHitLadderValue).orElse(BigDecimal.ZERO) : 267 hitLog.map(EvalGroupIndicatorHitLog::getHitLadderValue).orElse(BigDecimal.ZERO) :
268 hitLog.map(EvalGroupIndicatorHitLog::getHitCommissionValue).orElse(BigDecimal.ZERO); 268 hitLog.map(EvalGroupIndicatorHitLog::getHitCommissionValue).orElse(BigDecimal.ZERO);
269 - Long evalUserReportId = shopPoolReportIdMap.get(shopPool.getId()); 269 + Long evalUserReportId = shopPoolReportIdMap.get(pool.getId());
270 reportUserValues.add(convertDB(evalUserReportId, groupIndicator, value, date, params)); 270 reportUserValues.add(convertDB(evalUserReportId, groupIndicator, value, date, params));
271 } 271 }
272 272
@@ -274,37 +274,14 @@ public class EvalUserReportTask { @@ -274,37 +274,14 @@ public class EvalUserReportTask {
274 if (IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(codeType)) { 274 if (IndicatorCodeTypeEnum.COMBINE_INDICATOR.equals(codeType)) {
275 for (EvalGroupIndicatorParam param : params) { 275 for (EvalGroupIndicatorParam param : params) {
276 Map<Long, EvalGroupIndicatorTargetHitLog> targetHitLogMap = queryTargetValue(param.getId(), poolIds, date, EvalScopeEnum.SHOP); 276 Map<Long, EvalGroupIndicatorTargetHitLog> targetHitLogMap = queryTargetValue(param.getId(), poolIds, date, EvalScopeEnum.SHOP);
277 -  
278 for (EvalShopPool pool : pools) { 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 reportUserValues.add(convertParamDB(evalUserReportId, param, value, date)); 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,36 +291,27 @@ public class EvalUserReportTask {
314 return reportUserValues; 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 public List<EvalUserReport> saveStaffReports(List<EvalUserPool> pools, LocalDate date, Long evalUserRankReportId, Long evalUserRankStageReportId) { 317 public List<EvalUserReport> saveStaffReports(List<EvalUserPool> pools, LocalDate date, Long evalUserRankReportId, Long evalUserRankStageReportId) {
@@ -424,6 +392,19 @@ public class EvalUserReportTask { @@ -424,6 +392,19 @@ public class EvalUserReportTask {
424 .collect(Collectors.toMap(EvalGroupIndicatorTargetHitLog::getPoolId, Function.identity(), (v1, v2) -> v1)); 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 public void cleanTodayData(LocalDate date) { 408 public void cleanTodayData(LocalDate date) {
428 evalUserRankReportService.remove(Wrappers.<EvalUserRankReport>lambdaUpdate() 409 evalUserRankReportService.remove(Wrappers.<EvalUserRankReport>lambdaUpdate()
429 .eq(EvalUserRankReport::getDataDate, date) 410 .eq(EvalUserRankReport::getDataDate, date)