新增培训:完善报到与考勤V2业务操作
This commit is contained in:
1 parent
7193f2ac3a
commit
6762189093
30 files changed
+2382
-9
No files matched your search
@@ -38,6 +38,15 @@ public class DbAssertionChecker {
|
||||
return;
|
||||
}
|
||||
|
||||
if ("--cleanup-dependents".equals(args[0])) {
|
||||
if (args.length < 2) {
|
||||
System.err.println("Missing resources json path for cleanup-dependents");
|
||||
System.exit(1);
|
||||
}
|
||||
executeDependentsCleanup(args[1]);
|
||||
return;
|
||||
}
|
||||
|
||||
if ("--disable-student".equals(args[0])) {
|
||||
if (args.length < 2) {
|
||||
System.err.println("Missing student id");
|
||||
@@ -121,6 +130,34 @@ public class DbAssertionChecker {
|
||||
assertions.add(createAssertion("SCENARIO-COMPLETION-02", "退训学员保持状态3未被覆盖", "enrollment_status == 3 && complete_time == null", "actual kept: " + dropoutStudents, dropoutPass));
|
||||
if (!dropoutPass) allPassed = false;
|
||||
|
||||
// 8. 业务场景断言:无孤立报到记录 (orphan report = 0)
|
||||
int orphanReports = queryCount(conn,
|
||||
"SELECT COUNT(*) FROM train_class_report r LEFT JOIN train_enrollment e ON r.enrollment_id = e.enrollment_id WHERE e.enrollment_id IS NULL");
|
||||
boolean orphanReportPass = orphanReports == 0;
|
||||
assertions.add(createAssertion("CONSISTENCY-05", "无孤立报到记录(关联无效报名)", "orphan_report_count == 0", "actual: " + orphanReports, orphanReportPass));
|
||||
if (!orphanReportPass) allPassed = false;
|
||||
|
||||
// 9. 业务场景断言:无孤立考勤记录 (orphan checkin = 0)
|
||||
int orphanCheckins = queryCount(conn,
|
||||
"SELECT COUNT(*) FROM train_student_checkin c LEFT JOIN train_enrollment e ON c.enrollment_id = e.enrollment_id WHERE e.enrollment_id IS NULL");
|
||||
boolean orphanCheckinPass = orphanCheckins == 0;
|
||||
assertions.add(createAssertion("CONSISTENCY-06", "无孤立考勤记录(关联无效报名)", "orphan_checkin_count == 0", "actual: " + orphanCheckins, orphanCheckinPass));
|
||||
if (!orphanCheckinPass) allPassed = false;
|
||||
|
||||
// 10. 业务场景断言:人工修正考勤留痕一致性 (manual_flag = 1 记录存在且状态有效 0~4)
|
||||
int manualCheckins = queryCount(conn,
|
||||
"SELECT COUNT(*) FROM train_student_checkin WHERE manual_flag = 1 AND attendance_status IN (0, 1, 2, 3, 4)");
|
||||
boolean manualPass = manualCheckins >= 1;
|
||||
assertions.add(createAssertion("SCENARIO-ATTENDANCE-01", "人工修正考勤留痕manual_flag=1且状态合法", "manual_flag == 1", "actual count: " + manualCheckins, manualPass));
|
||||
if (!manualPass) allPassed = false;
|
||||
|
||||
// 11. 业务场景断言:报到记录状态合法性 (报到学员的 enrollment_status 应为 1 或 4,不能为 0 或 3)
|
||||
int invalidReportEnrollments = queryCount(conn,
|
||||
"SELECT COUNT(*) FROM train_class_report r JOIN train_enrollment e ON r.enrollment_id = e.enrollment_id WHERE e.enrollment_status NOT IN (1, 4)");
|
||||
boolean validReportEnrollPass = invalidReportEnrollments == 0;
|
||||
assertions.add(createAssertion("SCENARIO-REPORT-01", "报到学员关联报名状态必须为已报到(1)或已完成(4)", "invalid_report_enrollment_status == 0", "actual invalid: " + invalidReportEnrollments, validReportEnrollPass));
|
||||
if (!validReportEnrollPass) allPassed = false;
|
||||
|
||||
} catch (Exception e) {
|
||||
System.err.println("Database assertion execution failed: " + e.getMessage());
|
||||
assertions.add(createAssertion("DB-ERROR", "数据库连接或查询异常", "no exception", "error: " + e.getMessage(), false));
|
||||
@@ -219,6 +256,29 @@ public class DbAssertionChecker {
|
||||
return s.replace("\\", "\\\\").replace("\"", "\\\"").replace("\n", "\\n").replace("\r", "\\r");
|
||||
}
|
||||
|
||||
private static void executeDependentsCleanup(String resourcesPath) {
|
||||
String dbUrl = "jdbc:kingbase8://127.0.0.1:4321/training?currentSchema=public,sys_catalog&useUnicode=true&characterEncoding=utf8";
|
||||
String dbUser = "kingbase";
|
||||
String dbPassword = resolveDbPassword();
|
||||
|
||||
try {
|
||||
String resourcesJson = new String(Files.readAllBytes(Paths.get(resourcesPath)), "UTF-8");
|
||||
try (Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPassword)) {
|
||||
try (Statement s = conn.createStatement()) {
|
||||
s.execute("SET search_path TO public, sys_catalog");
|
||||
}
|
||||
deleteByIds(conn, "train_student_checkin", "checkin_id", extractIds(resourcesJson, "checkins"), true);
|
||||
deleteByIds(conn, "train_class_report", "report_id", extractIds(resourcesJson, "reports"), true);
|
||||
deleteByIds(conn, "train_student_checkin", "enrollment_id", extractIds(resourcesJson, "enrollments"), true);
|
||||
deleteByIds(conn, "train_student_checkin", "lesson_id", extractIds(resourcesJson, "lessons"), true);
|
||||
deleteByIds(conn, "train_class_report", "enrollment_id", extractIds(resourcesJson, "enrollments"), true);
|
||||
System.out.println("DependentsCleanup completed successfully.");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
System.err.println("DependentsCleanup failed: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private static void executeExactIdCleanup(String resourcesPath) {
|
||||
String dbUrl = "jdbc:kingbase8://127.0.0.1:4321/training?currentSchema=public,sys_catalog&useUnicode=true&characterEncoding=utf8";
|
||||
String dbUser = "kingbase";
|
||||
@@ -231,6 +291,13 @@ public class DbAssertionChecker {
|
||||
s.execute("SET search_path TO public, sys_catalog");
|
||||
}
|
||||
|
||||
// 优先删除外键从表依赖记录 (考勤、报到)
|
||||
deleteByIds(conn, "train_student_checkin", "checkin_id", extractIds(resourcesJson, "checkins"), true);
|
||||
deleteByIds(conn, "train_class_report", "report_id", extractIds(resourcesJson, "reports"), true);
|
||||
deleteByIds(conn, "train_student_checkin", "enrollment_id", extractIds(resourcesJson, "enrollments"), true);
|
||||
deleteByIds(conn, "train_student_checkin", "lesson_id", extractIds(resourcesJson, "lessons"), true);
|
||||
deleteByIds(conn, "train_class_report", "enrollment_id", extractIds(resourcesJson, "enrollments"), true);
|
||||
|
||||
deleteByIds(conn, "train_lesson", "lesson_id", extractIds(resourcesJson, "lessons"), true);
|
||||
deleteByIds(conn, "train_enrollment", "enrollment_id", extractIds(resourcesJson, "enrollments"), true);
|
||||
deleteByIds(conn, "train_electronic_board", "board_id", extractIds(resourcesJson, "boards"), false);
|
||||
|
||||
Reference in new issue
Block a user