From 3fcc41855af859e5fffaa16e83e44008c35b0f4c Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 23 Jan 2026 10:38:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=95=B0=E6=8D=AE=E4=B8=AD?= =?UTF-8?q?=E5=BF=83=E9=A1=B5=E9=9D=A2=E6=8E=92=E5=BA=8F=E6=AF=94=E8=BE=83?= =?UTF-8?q?=E5=99=A8=E8=BF=9D=E5=8F=8D=E5=A5=91=E7=BA=A6=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=9A=E5=A4=84=E7=90=86null=E5=80=BC=E6=83=85?= =?UTF-8?q?=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designhub/service/AnalyticsService.java | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/backend/src/main/java/com/designhub/service/AnalyticsService.java b/backend/src/main/java/com/designhub/service/AnalyticsService.java index a28954a..6523bf9 100644 --- a/backend/src/main/java/com/designhub/service/AnalyticsService.java +++ b/backend/src/main/java/com/designhub/service/AnalyticsService.java @@ -1008,8 +1008,21 @@ public class AnalyticsService { BigDecimal netB = b.getNetScore() != null ? b.getNetScore() : BigDecimal.ZERO; return netB.compareTo(netA); }); - // 按当前负载排序 - workloadStats.sort((a, b) -> b.getCurrentLoad().compareTo(a.getCurrentLoad())); + // 按当前负载排序(null 值排在最后) + workloadStats.sort((a, b) -> { + Integer loadA = a.getCurrentLoad(); + Integer loadB = b.getCurrentLoad(); + if (loadA == null && loadB == null) { + return 0; + } + if (loadA == null) { + return 1; // a 排在后面 + } + if (loadB == null) { + return -1; // b 排在后面 + } + return loadB.compareTo(loadA); // 降序排序 + }); // 构建汇总数据 DesignerPerformanceVO.Summary summary = DesignerPerformanceVO.Summary.builder() @@ -1302,9 +1315,28 @@ public class AnalyticsService { // 按预警级别排序(紧急在前) warnings.sort((a, b) -> { - int levelCompare = "urgent".equals(a.getWarningLevel()) ? -1 : ("urgent".equals(b.getWarningLevel()) ? 1 : 0); - if (levelCompare != 0) return levelCompare; - return b.getHoursInfo().compareTo(a.getHoursInfo()); + // 先按预警级别排序:urgent 在前 + boolean aIsUrgent = "urgent".equals(a.getWarningLevel()); + boolean bIsUrgent = "urgent".equals(b.getWarningLevel()); + if (aIsUrgent && !bIsUrgent) { + return -1; // a 排在前面 + } + if (!aIsUrgent && bIsUrgent) { + return 1; // b 排在前面 + } + // 如果级别相同,按 hoursInfo 降序排序(null 值排在最后) + Double hoursA = a.getHoursInfo(); + Double hoursB = b.getHoursInfo(); + if (hoursA == null && hoursB == null) { + return 0; + } + if (hoursA == null) { + return 1; // a 排在后面 + } + if (hoursB == null) { + return -1; // b 排在后面 + } + return Double.compare(hoursB, hoursA); // 降序排序 }); return warnings;