@@ -0,0 +1,109 @@
|
||||
-- =====================================================================
|
||||
-- 通知公告「新版发布表单」改造 DDL(改造方案.md,2026-09)
|
||||
-- 开发环境 ddl-auto=update 自动生效;生产环境由 DBA 手工执行本脚本。
|
||||
-- 幂等性注意:MySQL 8.0 可用 IF NOT EXISTS 的 CREATE TABLE;
|
||||
-- ALTER TABLE ADD COLUMN 不支持 IF NOT EXISTS,重复执行前请先核查列是否已存在。
|
||||
-- =====================================================================
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 0. 前置核查:存量 status=2 脏数据(改造方案 七-2)
|
||||
-- .NET 原系统「已发布=2」迁移时已归一化为 1,但需 DBA 核实确认;
|
||||
-- 新状态机中 2=待审批,若存量存在 status=2 需先归一化为 1。
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 核查(预期返回 0 行):
|
||||
-- SELECT id, title, status FROM notice WHERE status NOT IN (0, 1);
|
||||
-- 若有返回,归一化:
|
||||
-- UPDATE notice SET status = 1 WHERE status = 2;
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 1. notice 主表加列(改造方案 2.1)
|
||||
-- ---------------------------------------------------------------------
|
||||
ALTER TABLE notice
|
||||
ADD COLUMN receipt_flag TINYINT NOT NULL DEFAULT 0 COMMENT '是否需要学员阅读回执:0 否 / 1 是',
|
||||
ADD COLUMN approver_accounts LONGTEXT NULL COMMENT '审批人快照 JSON 账号数组(提交审批时选定,或签)',
|
||||
ADD COLUMN timing_published TINYINT NOT NULL DEFAULT 0 COMMENT '定时发送已真正发布标记:0 未触发 / 1 已真实发布';
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 2. notice_receiver 学员身份快照列 + receive_type 语义扩展(改造方案 2.3)
|
||||
-- receive_type 原语义「1 接收 / 2 抄送」,其中 2 从未写入过数据,直接重定义:
|
||||
-- 1 教师(存量语义,无需迁移)/ 2 学员(推送范围解析快照)
|
||||
-- ---------------------------------------------------------------------
|
||||
ALTER TABLE notice_receiver
|
||||
ADD COLUMN stu_name VARCHAR(64) NULL COMMENT '学员姓名快照',
|
||||
ADD COLUMN grade_id INT NULL COMMENT '年级ID快照',
|
||||
ADD COLUMN grade_name VARCHAR(128) NULL COMMENT '年级名称快照',
|
||||
ADD COLUMN class_id INT NULL COMMENT '班级ID快照(sch_class.class_id)',
|
||||
ADD COLUMN class_name VARCHAR(128) NULL COMMENT '班级名称快照';
|
||||
|
||||
-- 圈人/可见性查询走 (notice_id, account) 命中,现有 idx_notice_id / idx_account 已覆盖。
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 3. notice_read 阅读身份快照列(改造方案 2.3)
|
||||
-- ---------------------------------------------------------------------
|
||||
ALTER TABLE notice_read
|
||||
ADD COLUMN sch_id INT NULL COMMENT '学校ID(取通知 sch_id)',
|
||||
ADD COLUMN grade_id INT NULL COMMENT '年级ID快照',
|
||||
ADD COLUMN grade_name VARCHAR(128) NULL COMMENT '年级名称快照',
|
||||
ADD COLUMN class_id INT NULL COMMENT '班级ID快照',
|
||||
ADD COLUMN class_name VARCHAR(128) NULL COMMENT '班级名称快照';
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 4. 推送范围表(改造方案 2.2)
|
||||
-- ---------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS notice_push_scope (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
|
||||
notice_id INT NOT NULL COMMENT '通知ID(关联 notice.id)',
|
||||
scope_type INT NOT NULL COMMENT '范围类型:1 全校 / 2 学部 / 3 年级 / 4 班级 / 5 训练队 / 6 指定学员',
|
||||
scope_id INT NULL COMMENT '组织节点ID:学部=学制ID、年级=gradeId、班级=class_id、学员=stuId',
|
||||
scope_name VARCHAR(128) NULL COMMENT '快照名称(如"初二年级")',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME NULL COMMENT '创建时间',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME NULL COMMENT '更新时间',
|
||||
KEY idx_push_scope_notice (notice_id)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '通知推送范围(快照语义)';
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 5. 审批记录表(改造方案 2.4)
|
||||
-- ---------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS notice_approval (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
|
||||
notice_id INT NOT NULL COMMENT '通知ID(关联 notice.id)',
|
||||
action INT NOT NULL COMMENT '审批动作:1 提交审批 / 2 通过 / 3 驳回',
|
||||
operator_account VARCHAR(64) NULL COMMENT '操作人账号',
|
||||
operator_name VARCHAR(64) NULL COMMENT '操作人姓名',
|
||||
opinion VARCHAR(1000) NULL COMMENT '审批意见',
|
||||
assignees LONGTEXT NULL COMMENT '仅提交行使用:审批人快照 JSON [{account,name}]',
|
||||
action_time DATETIME NULL COMMENT '操作时间',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME NULL COMMENT '创建时间',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME NULL COMMENT '更新时间',
|
||||
KEY idx_approval_notice (notice_id)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '通知审批记录(全量轨迹,驳回重提保留历史轮次)';
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 6. 审批人记忆表(改造方案 2.5)
|
||||
-- ---------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS notice_approver_memory (
|
||||
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',
|
||||
sch_id INT NOT NULL COMMENT '学校ID(多租户隔离)',
|
||||
publisher_account VARCHAR(64) NOT NULL COMMENT '发布人账号(按人记忆)',
|
||||
approver_accounts LONGTEXT NULL COMMENT '最近一次所选审批人账号 JSON ["a","b"]',
|
||||
approver_names LONGTEXT NULL COMMENT '对应姓名快照 JSON(回显免二次查询)',
|
||||
create_by VARCHAR(255) NULL COMMENT '创建人',
|
||||
create_time DATETIME NULL COMMENT '创建时间',
|
||||
update_by VARCHAR(255) NULL COMMENT '更新人',
|
||||
update_time DATETIME NULL COMMENT '更新时间',
|
||||
UNIQUE KEY uk_approver_memory_sch_publisher (sch_id, publisher_account)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COMMENT = '审批人记忆(学校+发布人粒度,Submit 覆盖更新)';
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- 7. 回滚参考(如需回退改造)
|
||||
-- ---------------------------------------------------------------------
|
||||
-- ALTER TABLE notice DROP COLUMN receipt_flag, DROP COLUMN approver_accounts, DROP COLUMN timing_published;
|
||||
-- ALTER TABLE notice_receiver DROP COLUMN stu_name, DROP COLUMN grade_id, DROP COLUMN grade_name, DROP COLUMN class_id, DROP COLUMN class_name;
|
||||
-- ALTER TABLE notice_read DROP COLUMN sch_id, DROP COLUMN grade_id, DROP COLUMN grade_name, DROP COLUMN class_id, DROP COLUMN class_name;
|
||||
-- DROP TABLE IF EXISTS notice_push_scope;
|
||||
-- DROP TABLE IF EXISTS notice_approval;
|
||||
-- DROP TABLE IF EXISTS notice_approver_memory;
|
||||
Reference in New Issue
Block a user