|
|
@@ -452,10 +452,17 @@ public class EmployeePortraitServiceImpl implements IEmployeePortraitService {
|
|
452
|
452
|
}
|
|
453
|
453
|
|
|
454
|
454
|
@Override
|
|
455
|
|
- public BigDecimal getPortraitTotalScore(String personName, String beginTime, String endTime) {
|
|
|
455
|
+ public Map<String, BigDecimal> getPortraitTotalScore(List<String> personNameList, String beginTime, String endTime) {
|
|
|
456
|
+ Map<String, BigDecimal> result = new HashMap<>();
|
|
|
457
|
+ // 加载维度定义
|
|
|
458
|
+ ScoreDimension dq = new ScoreDimension();
|
|
|
459
|
+ dq.setStatus("0");
|
|
|
460
|
+ dq.setOrg(ScoreLevelEnum.PERSON.getCode());
|
|
|
461
|
+ List<ScoreDimension> dims = scoreDimensionMapper.selectList(dq);
|
|
|
462
|
+ dims.sort(Comparator.comparing(d -> d.getSortOrder() == null ? 999 : d.getSortOrder()));
|
|
|
463
|
+
|
|
456
|
464
|
// 加载全部事件,按姓名 LIKE 过滤(支持逗号分隔多人)
|
|
457
|
465
|
ScoreEvent eventQuery = new ScoreEvent();
|
|
458
|
|
- eventQuery.setPersonName(personName);
|
|
459
|
466
|
if (beginTime != null && !beginTime.isEmpty()) {
|
|
460
|
467
|
eventQuery.getParams().put("beginTime", beginTime);
|
|
461
|
468
|
}
|
|
|
@@ -464,43 +471,39 @@ public class EmployeePortraitServiceImpl implements IEmployeePortraitService {
|
|
464
|
471
|
}
|
|
465
|
472
|
List<ScoreEvent> events = scoreEventMapper.selectList(eventQuery);
|
|
466
|
473
|
|
|
467
|
|
- // 精确匹配(防止逗号多人字段的误匹配)
|
|
468
|
|
- Map<Long, BigDecimal> dimMap = new HashMap<>();
|
|
469
|
|
- for (ScoreEvent e : events) {
|
|
470
|
|
- Long dimId = e.getDimensionId();
|
|
471
|
|
- if (dimId == null) continue;
|
|
472
|
|
- String raw = e.getPersonName();
|
|
473
|
|
- if (raw == null) continue;
|
|
474
|
|
- boolean matched = false;
|
|
475
|
|
- for (String n : raw.split("[,,]")) {
|
|
476
|
|
- if (personName.equals(n.trim())) {
|
|
477
|
|
- matched = true;
|
|
478
|
|
- break;
|
|
|
474
|
+ personNameList.forEach(personName -> {
|
|
|
475
|
+ // 精确匹配(防止逗号多人字段的误匹配)
|
|
|
476
|
+ Map<Long, BigDecimal> dimMap = new HashMap<>();
|
|
|
477
|
+ for (ScoreEvent e : events) {
|
|
|
478
|
+ Long dimId = e.getDimensionId();
|
|
|
479
|
+ if (dimId == null) continue;
|
|
|
480
|
+ String raw = e.getPersonName();
|
|
|
481
|
+ if (raw == null) continue;
|
|
|
482
|
+ boolean matched = false;
|
|
|
483
|
+ for (String n : raw.split("[,,]")) {
|
|
|
484
|
+ if (personName.equals(n.trim())) {
|
|
|
485
|
+ matched = true;
|
|
|
486
|
+ break;
|
|
|
487
|
+ }
|
|
479
|
488
|
}
|
|
|
489
|
+ if (!matched) continue;
|
|
|
490
|
+ BigDecimal val = e.getTotalScore() != null ? e.getTotalScore() : BigDecimal.ZERO;
|
|
|
491
|
+ dimMap.merge(dimId, val, BigDecimal::add);
|
|
480
|
492
|
}
|
|
481
|
|
- if (!matched) continue;
|
|
482
|
|
- BigDecimal val = e.getTotalScore() != null ? e.getTotalScore() : BigDecimal.ZERO;
|
|
483
|
|
- dimMap.merge(dimId, val, BigDecimal::add);
|
|
484
|
|
- }
|
|
485
|
|
-
|
|
486
|
|
- // 加载维度定义
|
|
487
|
|
- ScoreDimension dq = new ScoreDimension();
|
|
488
|
|
- dq.setStatus("0");
|
|
489
|
|
- dq.setOrg(ScoreLevelEnum.PERSON.getCode());
|
|
490
|
|
- List<ScoreDimension> dims = scoreDimensionMapper.selectList(dq);
|
|
491
|
|
- dims.sort(Comparator.comparing(d -> d.getSortOrder() == null ? 999 : d.getSortOrder()));
|
|
492
|
493
|
|
|
493
|
|
- BigDecimal total = BigDecimal.ZERO;
|
|
494
|
|
- for (ScoreDimension dim : dims) {
|
|
495
|
|
- BigDecimal eventScore = dimMap.getOrDefault(dim.getId(), BigDecimal.ZERO);
|
|
496
|
|
- BigDecimal base = dim.getBaseScore() != null ? dim.getBaseScore() : BigDecimal.valueOf(80);
|
|
497
|
|
- BigDecimal dimScore = base.add(eventScore);
|
|
498
|
|
- BigDecimal weight = dim.getWeight() != null ? dim.getWeight() : BigDecimal.ZERO;
|
|
499
|
|
- BigDecimal contribution = dimScore.multiply(weight)
|
|
500
|
|
- .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
|
|
501
|
|
- total = total.add(contribution);
|
|
502
|
|
- }
|
|
|
494
|
+ BigDecimal total = BigDecimal.ZERO;
|
|
|
495
|
+ for (ScoreDimension dim : dims) {
|
|
|
496
|
+ BigDecimal eventScore = dimMap.getOrDefault(dim.getId(), BigDecimal.ZERO);
|
|
|
497
|
+ BigDecimal base = dim.getBaseScore() != null ? dim.getBaseScore() : BigDecimal.valueOf(80);
|
|
|
498
|
+ BigDecimal dimScore = base.add(eventScore);
|
|
|
499
|
+ BigDecimal weight = dim.getWeight() != null ? dim.getWeight() : BigDecimal.ZERO;
|
|
|
500
|
+ BigDecimal contribution = dimScore.multiply(weight)
|
|
|
501
|
+ .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP);
|
|
|
502
|
+ total = total.add(contribution);
|
|
|
503
|
+ }
|
|
503
|
504
|
|
|
504
|
|
- return total.setScale(1, RoundingMode.HALF_UP);
|
|
|
505
|
+ result.put(personName, total.setScale(1, RoundingMode.HALF_UP));
|
|
|
506
|
+ });
|
|
|
507
|
+ return result;
|
|
505
|
508
|
}
|
|
506
|
509
|
}
|