Sfoglia il codice sorgente

获取指定员工的六维度评分

chenshudong 2 settimane fa
parent
commit
b2bd146b5e

+ 2 - 2
airport-ledger/src/main/java/com/sundot/airport/ledger/service/IEmployeePortraitService.java

@@ -28,9 +28,9 @@ public interface IEmployeePortraitService {
28 28
     /**
29 29
      * 获取指定员工的六维度评分
30 30
      *
31
-     * @param personName 员工姓名(精确)
31
+     * @param personNameList 员工姓名(精确)
32 32
      * @param beginTime  起始时间 yyyy-MM-dd,null 则不限
33 33
      * @param endTime    结束时间 yyyy-MM-dd,null 则不限
34 34
      */
35
-    BigDecimal getPortraitTotalScore(String personName, String beginTime, String endTime);
35
+    Map<String, BigDecimal> getPortraitTotalScore(List<String> personNameList, String beginTime, String endTime);
36 36
 }

+ 39 - 36
airport-ledger/src/main/java/com/sundot/airport/ledger/service/impl/EmployeePortraitServiceImpl.java

@@ -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
 }