lrj
2 天以前 c61d4fe27c97d2ecc907756aa571a4ef14a7b9b6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package com.rongyichuang.tools;
 
import org.junit.jupiter.api.Test;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
 
public class StageIdFixTest {
 
    // 与 application.yml 保持一致,并加长超时
    private static final String URL = "jdbc:mysql://139.155.104.10:3306/ryc?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&connectTimeout=60000&socketTimeout=60000";
    private static final String USER = "ryc";
    private static final String PASS = "KiYap3E8X8RLcM6T";
 
    @Test
    public void fixStageId() throws Exception {
        try (Connection conn = DriverManager.getConnection(URL, USER, PASS)) {
            conn.setAutoCommit(false);
 
            // 规则:按每个比赛选择其第一个阶段(最小ID);若无阶段,则回填为比赛自身 activity_id
            String sql = """
UPDATE t_avtivity_player ap
LEFT JOIN (
  SELECT child.pid AS activity_id, MIN(child.id) AS stage_id
  FROM t_activity child
  WHERE child.pid IS NOT NULL AND child.pid <> 0
  GROUP BY child.pid
) s ON s.activity_id = ap.activity_id
SET ap.stage_id = COALESCE(s.stage_id, ap.activity_id)
""";
 
            try (PreparedStatement ps = conn.prepareStatement(sql)) {
                int affected = ps.executeUpdate();
                conn.commit();
                System.out.println("[StageIdFixTest] 更新完成,受影响行数=" + affected);
            } catch (Exception ex) {
                conn.rollback();
                throw ex;
            }
        }
    }
}