From 4fa9591629721797386fc11836e3a9deb69cd58c Mon Sep 17 00:00:00 2001
From: lrj <owen.stl@gmail.com>
Date: 星期三, 24 九月 2025 17:00:37 +0800
Subject: [PATCH] 修改评分逻辑,支持多个评委

---
 backend/src/main/java/com/rongyichuang/activity/service/ActivityService.java |   62 ++++++++++++++++++++++++++++---
 1 files changed, 56 insertions(+), 6 deletions(-)

diff --git a/backend/src/main/java/com/rongyichuang/activity/service/ActivityService.java b/backend/src/main/java/com/rongyichuang/activity/service/ActivityService.java
index 26d1ee5..216689c 100644
--- a/backend/src/main/java/com/rongyichuang/activity/service/ActivityService.java
+++ b/backend/src/main/java/com/rongyichuang/activity/service/ActivityService.java
@@ -20,6 +20,7 @@
 import org.springframework.util.StringUtils;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
@@ -267,14 +268,63 @@
     }
     
     /**
-     * 鑾峰彇鎵�鏈夋湁鏁堟瘮璧涳紙鐢ㄤ簬涓嬫媺閫夋嫨锛�
+     * 鑾峰彇鎵�鏈夋湁鏁堟瘮璧涘拰闃舵锛堢敤浜庝笅鎷夐�夋嫨锛�
      */
-    public List<ActivityResponse> findAllCompetitions() {
-        // 涓存椂淇敼锛氫笉浣跨敤state瀛楁杩涜鏌ヨ
-        List<Activity> activities = activityRepository.findByPidOrderByNameAsc(0L);
-        return activities.stream()
-            .map(ActivityResponse::new)
+    public List<ActivityResponse> findAllActivitiesForSelection() {
+        // 鑾峰彇鎵�鏈夋椿鍔紙鍖呮嫭姣旇禌鍜岄樁娈碉級
+        List<Activity> activities = activityRepository.findByStateOrderByPidAscNameAsc(1);
+        
+        // 鍒涘缓姣旇禌ID鍒版瘮璧涘璞$殑鏄犲皠锛岀敤浜庡揩閫熸煡鎵剧埗姣旇禌
+        Map<Long, Activity> competitionMap = activities.stream()
+            .filter(activity -> activity.getPid() == 0)
+            .collect(Collectors.toMap(Activity::getId, activity -> activity));
+        
+        // 杞崲涓篈ctivityResponse骞跺~鍏卲arent淇℃伅
+        List<ActivityResponse> result = activities.stream()
+            .map(activity -> {
+                ActivityResponse response = new ActivityResponse(activity);
+                // 濡傛灉鏄樁娈碉紙pid > 0锛夛紝濉厖parent淇℃伅
+                if (activity.getPid() > 0) {
+                    Activity parentActivity = competitionMap.get(activity.getPid());
+                    if (parentActivity != null) {
+                        response.setParent(new ActivityResponse(parentActivity));
+                    }
+                }
+                return response;
+            })
             .collect(Collectors.toList());
+        
+        // 鑷畾涔夋帓搴忥細姣旇禌鍜屽叾闃舵鏀惧湪涓�璧�
+        result.sort((a, b) -> {
+            // 濡傛灉閮芥槸姣旇禌锛坧id=0锛夛紝鎸夊悕绉版帓搴�
+            if (a.getPid() == 0 && b.getPid() == 0) {
+                return a.getName().compareTo(b.getName());
+            }
+            // 濡傛灉閮芥槸闃舵锛屽厛鎸夌埗姣旇禌鍚嶇О鎺掑簭锛屽啀鎸夐樁娈靛悕绉版帓搴�
+            if (a.getPid() > 0 && b.getPid() > 0) {
+                String aParentName = a.getParent() != null ? a.getParent().getName() : "";
+                String bParentName = b.getParent() != null ? b.getParent().getName() : "";
+                int parentCompare = aParentName.compareTo(bParentName);
+                if (parentCompare != 0) {
+                    return parentCompare;
+                }
+                return a.getName().compareTo(b.getName());
+            }
+            // 濡傛灉涓�涓槸姣旇禌锛屼竴涓槸闃舵
+            if (a.getPid() == 0 && b.getPid() > 0) {
+                String bParentName = b.getParent() != null ? b.getParent().getName() : "";
+                int compare = a.getName().compareTo(bParentName);
+                return compare <= 0 ? -1 : 1; // 姣旇禌鎺掑湪鍏堕樁娈靛墠闈�
+            }
+            if (a.getPid() > 0 && b.getPid() == 0) {
+                String aParentName = a.getParent() != null ? a.getParent().getName() : "";
+                int compare = aParentName.compareTo(b.getName());
+                return compare < 0 ? -1 : 1; // 闃舵鎺掑湪鍏舵瘮璧涘悗闈�
+            }
+            return 0;
+        });
+        
+        return result;
     }
     
     /**

--
Gitblit v1.8.0