修复验收:修正最终验收证据问题

This commit is contained in:
wangzhibiao committed 2026-09-17 10:21:34 +08:00
1 parent a2941c4d7b
commit 0c380bdfdf
14 files changed
+592 -119

No files matched your search

+101
View File
@@ -0,0 +1,101 @@
package scripts.qa;
import java.io.File;
import java.nio.file.Files;
import java.sql.*;
public class CheckDatabaseIntegrity {
public static void main(String[] args) throws Exception {
Class.forName("com.kingbase8.Driver");
File envFile = new File(System.getProperty("user.home"), ".railwaysystem-qa.env");
String pass = "";
if (envFile.exists()) {
for (String line : Files.readAllLines(envFile.toPath())) {
line = line.trim();
if (line.startsWith("QA_DB_PASSWORD=")) {
pass = line.substring("QA_DB_PASSWORD=".length()).trim();
if (pass.startsWith("\"") && pass.endsWith("\"")) {
pass = pass.substring(1, pass.length() - 1);
}
}
}
}
if (pass.isEmpty()) {
throw new IllegalStateException("QA_DB_PASSWORD is required in ~/.railwaysystem-qa.env");
}
String dbUrl = "jdbc:kingbase8://192.168.139.218:4321/railwaysystem_integrated_qa_20260916?useUnicode=true&characterEncoding=utf8";
try (Connection conn = DriverManager.getConnection(dbUrl, "kingbase", pass)) {
try (Statement st = conn.createStatement()) {
// 1. ORPHAN_COUNT
int orphanCount = 0;
String[] orphanQueries = new String[]{
"SELECT count(*) FROM train_enrollment e WHERE NOT EXISTS (SELECT 1 FROM train_class_plan p WHERE p.plan_id = e.plan_id)",
"SELECT count(*) FROM train_lesson l WHERE NOT EXISTS (SELECT 1 FROM train_plan_course pc JOIN train_class_plan p ON p.plan_id = pc.plan_id WHERE pc.plan_course_id = l.plan_course_id)",
"SELECT count(*) FROM train_accommodation a WHERE NOT EXISTS (SELECT 1 FROM train_enrollment e WHERE e.enrollment_id = a.enrollment_id)",
"SELECT count(*) FROM train_student_checkin c WHERE NOT EXISTS (SELECT 1 FROM train_enrollment e WHERE e.enrollment_id = c.enrollment_id)"
};
for (String q : orphanQueries) {
try (ResultSet rs = st.executeQuery(q)) {
if (rs.next()) orphanCount += rs.getInt(1);
}
}
System.out.println("ORPHAN_COUNT=" + orphanCount);
// 2. ACTIVE_ACCOMMODATION_DUPLICATE_COUNT
int activeDup = 0;
String qActive = "SELECT count(*) FROM (" +
" SELECT enrollment_id, count(*) FROM train_accommodation WHERE accommodation_status IN (0, 1) GROUP BY enrollment_id HAVING count(*) > 1" +
") t";
try (ResultSet rs = st.executeQuery(qActive)) {
if (rs.next()) activeDup = rs.getInt(1);
}
System.out.println("ACTIVE_ACCOMMODATION_DUPLICATE_COUNT=" + activeDup);
// 3. DMS_OPERATION_IDEMPOTENCY_VIOLATION
int dmsIdempotencyViolations = 0;
String qDms = "SELECT count(*) FROM (" +
" SELECT operation_id, count(*) FROM train_external_operation GROUP BY operation_id HAVING count(*) > 1" +
") t";
try (ResultSet rs = st.executeQuery(qDms)) {
if (rs.next()) dmsIdempotencyViolations = rs.getInt(1);
}
System.out.println("DMS_OPERATION_IDEMPOTENCY_VIOLATION=" + dmsIdempotencyViolations);
// 4. BROKEN_USER_IDENTITY_BINDING_COUNT
int brokenBindings = 0;
String qTeaBind = "SELECT count(*) FROM train_teacher t WHERE t.user_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM public.sys_user WHERE public.sys_user.user_id = t.user_id)";
try (ResultSet rs = st.executeQuery(qTeaBind)) {
if (rs.next()) brokenBindings += rs.getInt(1);
}
String qStuBind = "SELECT count(*) FROM train_student s WHERE s.user_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM public.sys_user WHERE public.sys_user.user_id = s.user_id)";
try (ResultSet rs = st.executeQuery(qStuBind)) {
if (rs.next()) brokenBindings += rs.getInt(1);
}
System.out.println("BROKEN_USER_IDENTITY_BINDING_COUNT=" + brokenBindings);
// 5. INVALID_PLAN_COURSE_RELATION_COUNT
int invalidPlanCourse = 0;
String qPc = "SELECT count(*) FROM train_plan_course pc WHERE " +
"NOT EXISTS (SELECT 1 FROM train_class_plan p WHERE p.plan_id = pc.plan_id) OR " +
"NOT EXISTS (SELECT 1 FROM train_course c WHERE c.c_id = pc.c_id)";
try (ResultSet rs = st.executeQuery(qPc)) {
if (rs.next()) invalidPlanCourse = rs.getInt(1);
}
System.out.println("INVALID_PLAN_COURSE_RELATION_COUNT=" + invalidPlanCourse);
// 6. INVALID_LESSON_RESOURCE_RELATION_COUNT
int invalidLessonRes = 0;
String qLr = "SELECT count(*) FROM train_lesson l WHERE " +
"(l.venue_type = 1 AND NOT EXISTS (SELECT 1 FROM train_classroom_info cr WHERE cr.class_room_id = l.class_room_id)) OR " +
"(l.venue_type = 2 AND NOT EXISTS (SELECT 1 FROM train_training_site s WHERE s.site_id = l.site_id)) OR " +
"NOT EXISTS (SELECT 1 FROM train_teacher t WHERE t.t_id = l.t_id)";
try (ResultSet rs = st.executeQuery(qLr)) {
if (rs.next()) invalidLessonRes = rs.getInt(1);
}
System.out.println("INVALID_LESSON_RESOURCE_RELATION_COUNT=" + invalidLessonRes);
}
}
}
}