12 KiB
12 KiB
学生学籍异动同步教务系统 — 改造方案
1. 背景与目标
学生信息模块支持学籍异动(退学、休学、复学、毕业)与换班级等操作,数据已落在本库多张表中。教务系统要求按固定字段接收异动数据。本方案通过**数据库视图(可再叠加物化/同步任务)**汇聚数据,供教务拉数或中间 ETL 使用。
目标:在不大改现有业务表的前提下,输出字段稳定、语义清晰、可逐步补全的对外视图。
2. 教务字段与本地映射总表
| 序号 | 教务字段 | 本方案取值策略 | 主要数据来源 |
|---|---|---|---|
| 1 | 提交时间 | 有则格式化为日期 YYYY-MM-DD(与教务示例一致);口径建议统一为「登记/创建侧」:学籍异动 用 apply_date 或 create_time;换班级 用 change_time 或 create_time(实施时二选一写死) |
xg_student_status_change / xg_student_class_change |
| 2 | 异动生效学期 | 保留列,值为空(NULL 或 '',与对方接口约定一致即可) |
常量列,不推算 |
| 3 | 异动生效时间 | 必填语义由本库生效字段承担:学籍异动用 effective_date;换班级用 effective_time(类型统一为 DATETIME 便于对接) |
同上两表 |
| 4 | 异动类型 | 输出教务附件1 中文名称(退学/休学/复学/转班级);见 §4 映射表;毕业(BI_YE)不同步 | 视图内 CASE + WHERE 过滤 |
| 5 | 申请人学号 | 直接输出 | student_no |
| 6 | 姓名 | 输出异动当时姓名:换班级表有 student_name;学籍异动可 JOIN xg_student_msg 取当前 name(若需「当时」姓名需后续增强,见 §6) |
业务表 + xg_student_msg |
| 7 | 异动前所在年级 | 有则输出 | 换班级:original_* 无年级时 JOIN 原班级 xg_class_msg.grade;学籍异动:见 §6 |
| 8 | 异动前所在校区 | 异动前班级 campus_id → xg_dorm_campus.campus_name,再回退 xg_class_msg.campus_name |
xg_class_msg + xg_dorm_campus |
| 9 | 异动前所在院系 | 优先 college_id → sys_dept.dept_name,再回退冗余名称;换班级用 original_college_id / original_college_name |
换班级 xg_student_class_change;学籍异动见 §6 |
| 10 | 异动前所在专业 | 优先 major_id → sys_dept.dept_name,再回退冗余名称 |
同上 |
| 11 | 异动前所在班级 | 优先 xg_class_msg.class_name,再回退冗余名称 |
同上 |
| 12 | 异动前学制 | 有则输出 | JOIN xg_class_msg(原 class_id)取 school_system |
| 13~18 | 异动后所在校区 / 年级 / 班级 / 院系 / 专业 / 学制 | 校区:异动后班级 campus_id → xg_dorm_campus;院系/专业:sys_dept;班级:xg_class_msg;换班级用 new_* + 新班;纯学籍异动「后」取当前学生/班级 |
xg_student_class_change + xg_class_msg / sys_dept |
| 19 | 异动后班主任工号 | 有则输出 | class_teacher_id → sys_user.user_no(需业务确认教师工号存于 user_no) |
| 20 | 异动后班主任姓名 | 有则输出 | xg_class_msg.class_teacher_name 或 xg_student_msg.class_teacher_name |
| 21 | 新名字 | 选填;无独立「改名流水」时建议 NULL;若仅用 former_name/name 推断改名,易产生误判,不推荐作为正式口径 |
暂空或后续扩展表 |
| 22 | 审核状态 | 默认「已通过」或空 | 常量或扩展字段 |
3. 数据源与表关系(现状)
| 表名 | 用途 |
|---|---|
xg_student_status_change |
退学、休学、复学、毕业;含 effective_date、apply_date、change_type、process_status 等 |
xg_student_class_change |
换班级前后学院/专业/班级;含 effective_time、status、student_name 等 |
xg_student_msg |
学生当前快照(学号、姓名、班级冗余字段等) |
xg_class_msg |
班级学制、年级、班主任等 |
sys_user |
班主任用户编号 user_no(作工号来源,需确认) |
说明:批量处理脚本会向 xg_student_msg_his 备份快照;仅学籍异动的「异动前」若依赖历史表,需严格定义「取哪一条 his」的规则(见 §6),否则易产生歧义。
4. 异动类型(与教务对齐)
本库 → 教务附件1 中文名称映射(视图 异动类型 列直接输出教务名称):
| 本库来源 | 内部标识 | 教务异动类型名称 |
|---|---|---|
| 学籍异动 | TUI_XUE |
退学 |
| 学籍异动 | XIU_XUE |
休学 |
| 学籍异动 | FU_XUE |
复学 |
| 换班级 | — | 转班级 |
不同步:BI_YE(毕业)记录不进入视图、不传给教务。
详细说明见:跟教务系统同步学生异动信息/异动类型映射说明.md。
「复学并换班级」会同时存在学籍记录与换班级记录:当前策略为 两条都出。
5. 视图设计方案
5.1 原则
- 对外一张宽表视图(或一张视图
UNION ALL两段子查询),列名与教务一致或建中间映射层。 - 校区列保留,值为
NULL。 - 异动生效学期列保留,值为
NULL。 - 异动生效时间为真实业务时间,来自库表(见 §2)。
5.2 建议结构
- 子视图 A:
xg_student_status_change
- 关联
xg_student_msg(学号、姓名、当前组织维度作「前/后」占位时的来源,按 §6)。 异动生效学期→NULL;异动前/后校区→NULL;异动生效时间→CAST(effective_date AS DATETIME)(若原列为DATE,统一 cast)。
- 子视图 B:
xg_student_class_change
LEFT JOIN xg_class_msg原班oc:oc.id = original_class_idLEFT JOIN xg_class_msg新班nc:nc.id = new_class_id- 前/后年级、学制、班主任工号(经
sys_user)等从oc/nc补全。 异动生效学期→NULL;校区 →NULL;异动生效时间→effective_time。
- 总视图:
UNION ALLA、B,列顺序与类型完全一致。
5.3 过滤条件(建议)
- 仅同步已办结数据:学籍
process_status = 1;换班级status = '1'。 - 排除逻辑删除:
deleted = 0(各表按项目规范)。
5.4 交付物
- 视图 DDL 脚本:
vw_jw_student_change_export.sql(视图名vw_jw_student_change_export,含验证用数据来源/来源记录id两列,对接教务时可删列重建视图)。 - 可选:
COMMENT ON或建表注释说明每列口径。
6. 风险与后续增强(摘要)
| 项 | 说明 |
|---|---|
| 纯学籍异动的「异动前」组织 | 视图优先读 xg_student_msg_his(处理脚本落库快照),无快照时回退 xg_student_msg;同一学生多次异动时 his 仅保留首次快照,需长期可考虑落库冗余字段。 |
| 校区 | 当前方案恒空;将来可在 xg_class_msg 或学院维度补 campus_id/name 后改视图即可。 |
| 异动生效学期 | 当前恒空;将来有校历维表后,可只改视图计算逻辑,不必改业务表。 |
| 改名 | 无流水则「新名字」保持空;需要时增加改名记录表或审计。 |
| 班主任工号 | 确认 sys_user.user_no 与教务工号一致;否则增加教师工号字段或映射表。 |
7. 实施步骤建议
- 与教务确认:空学期、空校区是否接口可接受;异动后字段在退学等场景下是否允许与「异动前」相同或填空。
- 定稿 教务异动类型码 与本地
change_type/换班级 的映射。 - 编写并评审 视图 DDL(含
UNION ALL、JOIN、NULL列、时间统一、已处理过滤)。 - 在测试库用真实数据抽样校验:换班级、仅休学、复学并换班级、毕业等各一条。
- 对接方式落地:教务定时拉视图 / 中间库同步 / 应用定时任务读视图写入对方库。
8. 文档维护
- API 行为未变时,可不修改
docs/开发文档/API/学生学籍异动与换班级API.md。 - 视图 DDL 落地后,在本文件「修订记录」中追加日期与变更说明。
| 日期 | 修订内容 |
|---|---|
| 2026-05-07 | 初稿:汇聚视图方案;校区、生效学期为空;生效时间取自 effective_date/effective_time |
| 2026-05-07 | 补充:vw_jw_student_change_export.sql 可执行 DDL |
| 2026-06-22 | API 改为按「异动生效时间」自然年筛选;视图输出教务中文异动类型;学籍异动「前」优先读 xg_student_msg_his |
| 2026-06-22 | 毕业(BI_YE)记录不同步给教务,视图 WHERE 排除 |
| 2026-07-03 | 视图去重:同一学号 + 登记日 + 异动类型仅保留 MIN(id) 一条(按学号分组,非 student_id) |