From 93eb6b470773bc49ea6e1a9d4cbd914eb95d525b Mon Sep 17 00:00:00 2001
From: lrj <owen.stl@gmail.com>
Date: 星期二, 30 九月 2025 17:38:04 +0800
Subject: [PATCH] feat: 完善比赛晋级功能并清理测试文件

---
 backend/src/main/java/com/rongyichuang/activity/repository/ActivityRepository.java |  112 ++++++++++++++++++++++++++++++++++++++++++-------------
 1 files changed, 85 insertions(+), 27 deletions(-)

diff --git a/backend/src/main/java/com/rongyichuang/activity/repository/ActivityRepository.java b/backend/src/main/java/com/rongyichuang/activity/repository/ActivityRepository.java
index 787a541..c2d9d43 100644
--- a/backend/src/main/java/com/rongyichuang/activity/repository/ActivityRepository.java
+++ b/backend/src/main/java/com/rongyichuang/activity/repository/ActivityRepository.java
@@ -6,36 +6,94 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
-import org.springframework.stereotype.Repository;
 
 import java.util.List;
 
-@Repository
 public interface ActivityRepository extends JpaRepository<Activity, Long> {
-    
-    // 鏌ヨ姣旇禌鍒楄〃锛坧id=0琛ㄧず姣旇禌锛岄潪0琛ㄧず闃舵锛�
-    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, Integer state, Pageable pageable);
-    
-    // 鎸夊悕绉版ā绯婃煡璇㈡瘮璧涘垪琛�
-    Page<Activity> findByPidAndStateAndNameContainingOrderByCreateTimeDesc(Long pid, Integer state, String name, Pageable pageable);
-    
-    // 鏌ヨ姣旇禌鐨勬墍鏈夐樁娈�
-    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, Integer state);
-    
-    // 鏌ヨ鎵�鏈夋湁鏁堟瘮璧涳紙鐢ㄤ簬涓嬫媺閫夋嫨锛�
-    List<Activity> findByPidAndStateOrderByNameAsc(Long pid, Integer state);
-    
-    // 涓存椂娴嬭瘯锛氭煡璇㈡墍鏈夋瘮璧涳紙涓嶄娇鐢╯tate瀛楁锛�
-    List<Activity> findByPidOrderByNameAsc(Long pid);
-    
-    // 鏌ヨ鎵�鏈夋湁鏁堟椿鍔紙鍖呮嫭姣旇禌鍜岄樁娈碉級锛屾寜pid鍜屽悕绉版帓搴�
-    List<Activity> findByStateOrderByPidAscNameAsc(Integer state);
-    
-    // 缁熻姣旇禌鏁伴噺
-    @Query("SELECT COUNT(a) FROM Activity a WHERE a.pid = 0 AND a.state = 1")
-    long countActiveActivities();
-    
-    // 鏌ヨ杩涜涓殑姣旇禌
-    @Query("SELECT a FROM Activity a WHERE a.pid = 0 AND a.state = 1 AND a.matchTime <= CURRENT_TIMESTAMP AND a.signupDeadline >= CURRENT_TIMESTAMP")
+
+    Page<Activity> findByPidAndStateAndNameContainingOrderByCreateTimeDesc(Long pid, int state, String name, Pageable pageable);
+
+    Page<Activity> findByPidAndNameContainingOrderByCreateTimeDesc(Long pid, String name, Pageable pageable);
+
+    Page<Activity> findByPidOrderByCreateTimeDesc(Long pid, Pageable pageable);
+
+    Page<Activity> findByPidAndStateOrderByCreateTimeDesc(Long pid, int state, Pageable pageable);
+
+    List<Activity> findByPidAndStateOrderByCreateTimeAsc(Long pid, int state);
+
+    List<Activity> findByStateOrderByPidAscNameAsc(int state);
+
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    Page<Activity> findRecentActivities(Pageable pageable);
+
+    /**
+     * 鏍规嵁娲诲姩ID鏌ヨ娲诲姩
+     */
+    @Query("SELECT a FROM Activity a WHERE a.id = :id")
+    Activity findActivityById(@Param("id") Long id);
+
+    /**
+     * 鏍规嵁鐘舵�佹煡璇㈡椿鍔ㄦ暟閲�
+     */
+    @Query("SELECT COUNT(a) FROM Activity a WHERE a.state = :state")
+    Long countByState(@Param("state") int state);
+
+    /**
+     * 缁熻褰撳墠杩涜涓殑娲诲姩鏁伴噺锛堢姸鎬佷负1涓攑id=0鐨勪富娲诲姩锛�
+     */
+    @Query("SELECT COUNT(a) FROM Activity a WHERE a.state = 1 AND a.pid = 0")
+    Long countActiveActivities();
+
+    /**
+     * 鏌ヨ鎵�鏈夌埗绾ф椿鍔紙pid = 0锛�
+     */
+    @Query("SELECT a FROM Activity a WHERE a.pid = 0 ORDER BY a.createTime DESC")
+    List<Activity> findAllParentActivities();
+
+    /**
+     * 鏍规嵁鐖剁骇ID鏌ヨ瀛愭椿鍔�
+     */
+    @Query("SELECT a FROM Activity a WHERE a.pid = :pid ORDER BY a.createTime DESC")
+    List<Activity> findChildActivitiesByPid(@Param("pid") Long pid);
+
+    /**
+     * 鏍规嵁鍚嶇О妯$硦鏌ヨ娲诲姩
+     */
+    @Query("SELECT a FROM Activity a WHERE a.name LIKE %:name% ORDER BY a.createTime DESC")
+    List<Activity> findByNameContaining(@Param("name") String name);
+
+    /**
+     * 鏌ヨ鎸囧畾鐘舵�佺殑娲诲姩锛屾寜鍒涘缓鏃堕棿鎺掑簭
+     */
+    @Query("SELECT a FROM Activity a WHERE a.state = :state ORDER BY a.createTime DESC")
+    List<Activity> findByStateOrderByCreateTimeDesc(@Param("state") int state);
+
+    /**
+     * 鍒嗛〉鏌ヨ鎸囧畾鐘舵�佺殑娲诲姩
+     */
+    @Query("SELECT a FROM Activity a WHERE a.state = :state ORDER BY a.createTime DESC")
+    Page<Activity> findByStateOrderByCreateTimeDesc(@Param("state") int state, Pageable pageable);
+
+    /**
+     * 鏌ヨ娲诲姩鍙婂叾璇勫垎鏂规
+     */
+    @Query("SELECT a FROM Activity a LEFT JOIN FETCH a.ratingScheme WHERE a.id = :id")
+    Activity findActivityWithRatingScheme(@Param("id") Long id);
+
+    /**
+     * 鏌ヨ杩涜涓殑娲诲姩锛堢姸鎬佷负1鐨勬椿鍔級
+     */
+    @Query("SELECT a FROM Activity a WHERE a.state = 1 ORDER BY a.createTime DESC")
     List<Activity> findOngoingActivities();
+
+    /**
+     * 鏌ユ壘鎸囧畾娲诲姩鐨勭涓�闃舵锛坰ortOrder=1锛�
+     */
+    @Query("SELECT a FROM Activity a WHERE a.pid = :activityId AND a.sortOrder = 1 AND a.state = 1")
+    Activity findFirstStageByActivityId(@Param("activityId") Long activityId);
+
+    /**
+     * 鏍规嵁鐖剁骇ID鍜岀姸鎬佹煡璇㈡椿鍔紝鎸塻ortOrder鎺掑簭
+     */
+    List<Activity> findByPidAndStateOrderBySortOrderAsc(Long pid, Integer state);
 }
\ No newline at end of file

--
Gitblit v1.8.0