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 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)
... ...