准考证编排

This commit is contained in:
2026-07-20 13:06:00 +08:00 Unverified
parent 4c7fafc03d
commit 9566542414
14 changed files with 846 additions and 86 deletions
+107 -13
View File
@@ -149,15 +149,56 @@ export const sqliteSchema = `
PRIMARY KEY (registration_id, subject_id)
) STRICT;
CREATE TABLE IF NOT EXISTS admission_number_rules (
id TEXT PRIMARY KEY,
code TEXT NOT NULL UNIQUE,
name TEXT NOT NULL,
description TEXT NOT NULL,
separator TEXT NOT NULL DEFAULT '',
segments_json TEXT NOT NULL,
example TEXT NOT NULL,
active INTEGER NOT NULL DEFAULT 1 CHECK (active IN (0, 1)),
created_at TEXT NOT NULL
) STRICT;
CREATE TABLE IF NOT EXISTS exam_arrangement_plans (
id TEXT PRIMARY KEY,
exam_id TEXT NOT NULL UNIQUE REFERENCES exams(id) ON DELETE CASCADE,
number_rule_id TEXT NOT NULL REFERENCES admission_number_rules(id),
mixing_scope TEXT NOT NULL CHECK (mixing_scope IN ('class', 'school', 'district', 'city', 'province')),
random_seed TEXT NOT NULL,
candidate_count INTEGER NOT NULL CHECK (candidate_count >= 0),
center_count INTEGER NOT NULL CHECK (center_count >= 0),
subject_assignment_count INTEGER NOT NULL CHECK (subject_assignment_count >= 0),
subject_combination_count INTEGER NOT NULL CHECK (subject_combination_count >= 0),
same_school_center_rate REAL NOT NULL,
warnings_json TEXT NOT NULL,
generated_by TEXT REFERENCES users(id) ON DELETE SET NULL,
generated_at TEXT NOT NULL
) STRICT;
CREATE TABLE IF NOT EXISTS admit_cards (
registration_id TEXT PRIMARY KEY REFERENCES registrations(id) ON DELETE CASCADE,
plan_id TEXT NOT NULL REFERENCES exam_arrangement_plans(id) ON DELETE CASCADE,
card_number TEXT NOT NULL UNIQUE,
center_id TEXT REFERENCES test_centers(id) ON DELETE SET NULL,
test_center TEXT NOT NULL,
room TEXT NOT NULL,
seat TEXT NOT NULL,
generated_at TEXT NOT NULL
) STRICT;
CREATE TABLE IF NOT EXISTS admit_card_subjects (
registration_id TEXT NOT NULL REFERENCES admit_cards(registration_id) ON DELETE CASCADE,
subject_id TEXT NOT NULL REFERENCES exam_subjects(id) ON DELETE CASCADE,
room_id TEXT REFERENCES test_rooms(id) ON DELETE SET NULL,
room TEXT NOT NULL,
room_code TEXT NOT NULL,
exam_room_code TEXT NOT NULL,
seat TEXT NOT NULL,
subject_signature TEXT NOT NULL,
PRIMARY KEY (registration_id, subject_id),
UNIQUE (subject_id, room_id, seat)
) STRICT;
CREATE TABLE IF NOT EXISTS results (
id TEXT PRIMARY KEY,
registration_id TEXT NOT NULL REFERENCES registrations(id) ON DELETE CASCADE,
@@ -357,6 +398,8 @@ export const sqliteSchema = `
CREATE INDEX IF NOT EXISTS idx_subjects_exam ON exam_subjects(exam_id, position);
CREATE INDEX IF NOT EXISTS idx_registrations_status ON registrations(status);
CREATE INDEX IF NOT EXISTS idx_registrations_exam ON registrations(exam_id);
CREATE INDEX IF NOT EXISTS idx_arrangement_plans_exam ON exam_arrangement_plans(exam_id, generated_at);
CREATE INDEX IF NOT EXISTS idx_admit_subjects_room ON admit_card_subjects(subject_id, room_id, seat);
CREATE INDEX IF NOT EXISTS idx_workflow_inbox ON workflow_instances(status, assignee_id, business_type);
CREATE UNIQUE INDEX IF NOT EXISTS uq_test_centers_code ON test_centers(code);
CREATE INDEX IF NOT EXISTS idx_rooms_center ON test_rooms(center_id, status, code);
@@ -543,17 +586,6 @@ export const mysqlSchema = [
CONSTRAINT fk_registration_subjects_registration FOREIGN KEY (registration_id) REFERENCES registrations(id) ON DELETE CASCADE,
CONSTRAINT fk_registration_subjects_subject FOREIGN KEY (subject_id) REFERENCES exam_subjects(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci`,
`CREATE TABLE IF NOT EXISTS admit_cards (
registration_id VARCHAR(64) NOT NULL,
card_number VARCHAR(100) NOT NULL,
test_center VARCHAR(200) NOT NULL,
room VARCHAR(100) NOT NULL,
seat VARCHAR(30) NOT NULL,
generated_at VARCHAR(35) NOT NULL,
PRIMARY KEY (registration_id),
UNIQUE KEY uq_admit_cards_number (card_number),
CONSTRAINT fk_admit_cards_registration FOREIGN KEY (registration_id) REFERENCES registrations(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci`,
`CREATE TABLE IF NOT EXISTS results (
id VARCHAR(64) NOT NULL,
registration_id VARCHAR(64) NOT NULL,
@@ -616,6 +648,68 @@ export const mysqlSchema = [
KEY idx_rooms_center (center_id, status, code),
CONSTRAINT fk_rooms_center FOREIGN KEY (center_id) REFERENCES test_centers(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci`,
`CREATE TABLE IF NOT EXISTS admission_number_rules (
id VARCHAR(64) NOT NULL,
code VARCHAR(80) NOT NULL,
name VARCHAR(160) NOT NULL,
description VARCHAR(500) NOT NULL,
separator VARCHAR(10) NOT NULL DEFAULT '',
segments_json JSON NOT NULL,
example VARCHAR(120) NOT NULL,
active BOOLEAN NOT NULL DEFAULT TRUE,
created_at VARCHAR(35) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY uq_admission_rules_code (code)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci`,
`CREATE TABLE IF NOT EXISTS exam_arrangement_plans (
id VARCHAR(64) NOT NULL,
exam_id VARCHAR(64) NOT NULL,
number_rule_id VARCHAR(64) NOT NULL,
mixing_scope ENUM('class', 'school', 'district', 'city', 'province') NOT NULL,
random_seed VARCHAR(80) NOT NULL,
candidate_count INT UNSIGNED NOT NULL,
center_count INT UNSIGNED NOT NULL,
subject_assignment_count INT UNSIGNED NOT NULL,
subject_combination_count INT UNSIGNED NOT NULL,
same_school_center_rate DOUBLE NOT NULL,
warnings_json JSON NOT NULL,
generated_by VARCHAR(64) NULL,
generated_at VARCHAR(35) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY uq_arrangement_plans_exam (exam_id),
CONSTRAINT fk_arrangement_plans_exam FOREIGN KEY (exam_id) REFERENCES exams(id) ON DELETE CASCADE,
CONSTRAINT fk_arrangement_plans_rule FOREIGN KEY (number_rule_id) REFERENCES admission_number_rules(id),
CONSTRAINT fk_arrangement_plans_generator FOREIGN KEY (generated_by) REFERENCES users(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci`,
`CREATE TABLE IF NOT EXISTS admit_cards (
registration_id VARCHAR(64) NOT NULL,
plan_id VARCHAR(64) NOT NULL,
card_number VARCHAR(100) NOT NULL,
center_id VARCHAR(64) NULL,
test_center VARCHAR(200) NOT NULL,
generated_at VARCHAR(35) NOT NULL,
PRIMARY KEY (registration_id),
UNIQUE KEY uq_admit_cards_number (card_number),
CONSTRAINT fk_admit_cards_registration FOREIGN KEY (registration_id) REFERENCES registrations(id) ON DELETE CASCADE,
CONSTRAINT fk_admit_cards_plan FOREIGN KEY (plan_id) REFERENCES exam_arrangement_plans(id) ON DELETE CASCADE,
CONSTRAINT fk_admit_cards_center FOREIGN KEY (center_id) REFERENCES test_centers(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci`,
`CREATE TABLE IF NOT EXISTS admit_card_subjects (
registration_id VARCHAR(64) NOT NULL,
subject_id VARCHAR(64) NOT NULL,
room_id VARCHAR(64) NULL,
room VARCHAR(120) NOT NULL,
room_code VARCHAR(40) NOT NULL,
exam_room_code VARCHAR(20) NOT NULL,
seat VARCHAR(30) NOT NULL,
subject_signature VARCHAR(1000) NOT NULL,
PRIMARY KEY (registration_id, subject_id),
UNIQUE KEY uq_admit_subject_room_seat (subject_id, room_id, seat),
KEY idx_admit_subjects_room (subject_id, room_id, seat),
CONSTRAINT fk_admit_subjects_card FOREIGN KEY (registration_id) REFERENCES admit_cards(registration_id) ON DELETE CASCADE,
CONSTRAINT fk_admit_subjects_subject FOREIGN KEY (subject_id) REFERENCES exam_subjects(id) ON DELETE CASCADE,
CONSTRAINT fk_admit_subjects_room FOREIGN KEY (room_id) REFERENCES test_rooms(id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci`,
`CREATE TABLE IF NOT EXISTS center_change_requests (
id VARCHAR(64) NOT NULL,
center_id VARCHAR(64) NULL,