-- ============================================================ -- 019_signage.sql (MySQL 5.7) -- 电子班牌取数接口(/api/board/v1/signageService/*)所需补充表与字段 -- 配合 TrainBoardApiController + TrainSignageMapper 使用。 -- 说明:仅 ADD COLUMN / CREATE TABLE / 测试种子。 -- 前置:train_student / train_classroom_info / train_class_plan / -- train_lesson / train_plan_course / train_course / train_enrollment / -- train_teacher 已存在(V2 基线 000 / 002)。 -- 注意:MySQL 5.7 不支持 ALTER TABLE ADD COLUMN IF NOT EXISTS, -- 下面用临时存储过程做幂等判断;CREATE TABLE 用 IF NOT EXISTS(5.7 支持)。 -- ============================================================ -- 1) 学员卡号(刷卡校验用,train_student 无此列,需补列) DROP PROCEDURE IF EXISTS tmp_add_card_no; DELIMITER $$ CREATE PROCEDURE tmp_add_card_no() BEGIN IF NOT EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = 'train_student' AND column_name = 'card_no' ) THEN ALTER TABLE train_student ADD COLUMN card_no VARCHAR(32) DEFAULT NULL COMMENT '学员卡号(刷卡校验用)'; END IF; END$$ DELIMITER ; CALL tmp_add_card_no(); DROP PROCEDURE IF EXISTS tmp_add_card_no; -- 2) 座位分配表(接口3 studentInClassroom 所需,原库无座位表) CREATE TABLE IF NOT EXISTS train_class_seat ( seat_id BIGINT NOT NULL AUTO_INCREMENT, plan_id VARCHAR(32) NOT NULL COMMENT '班级ID(train_class_plan.plan_id)', classroom_id VARCHAR(32) NOT NULL COMMENT '教室ID(train_classroom_info.class_room_id)', row_index INT NOT NULL COMMENT '行号,从1开始', col_index INT NOT NULL COMMENT '列号,从1开始', seat_code VARCHAR(32) DEFAULT NULL COMMENT '物理座位标识', canceled SMALLINT NOT NULL DEFAULT 0 COMMENT '是否取消位置(0正常,1取消)', student_id VARCHAR(32) DEFAULT NULL COMMENT '占用座位学员ID(train_student.s_id)', zone_id BIGINT DEFAULT NULL COMMENT '区域ID', dept_detail VARCHAR(100) DEFAULT NULL COMMENT '部门', job VARCHAR(100) DEFAULT NULL COMMENT '职务', create_by VARCHAR(64) DEFAULT NULL, create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, update_by VARCHAR(64) DEFAULT NULL, update_time TIMESTAMP NULL DEFAULT NULL, remark VARCHAR(500) DEFAULT NULL, PRIMARY KEY (seat_id), UNIQUE KEY uq_class_seat_pos (plan_id, classroom_id, row_index, col_index) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='班级在指定教室的座位分配表(电子班牌座位网格来源)'; -- 3) 测试种子:为 018 的学员 S20260001 设置卡号(文档示例值) UPDATE train_student SET card_no = '0514457515' WHERE s_id = 'S20260001'; -- 4) 测试种子:P2026001 在教室 CR-001 的座位布局 DELETE FROM train_class_seat WHERE plan_id = 'P2026001' AND classroom_id = 'CR-001'; INSERT INTO train_class_seat (plan_id, classroom_id, row_index, col_index, seat_code, canceled, student_id, zone_id, dept_detail, job) VALUES ('P2026001', 'CR-001', 1, 1, '1-1', 0, 'S20260001', 100, '培训部', '学员'), ('P2026001', 'CR-001', 1, 2, '1-2', 0, NULL, 100, NULL, NULL), ('P2026001', 'CR-001', 2, 1, '2-1', 1, NULL, 100, NULL, NULL);