Files
CampusnoticeService/src/main/resources/sql/notice_publish_flow.sql
T
wanghu b19c7749a7
build / build-push (push) Successful in 43s
git
2026-09-11 08:33:30 +08:00

110 lines
7.3 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =====================================================================
-- 通知公告「新版发布表单」改造 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;