git
build / build-push (push) Successful in 43s

This commit is contained in:
wanghu
2026-09-11 08:33:30 +08:00
parent d69a04d4f0
commit b19c7749a7
113 changed files with 11858 additions and 0 deletions
@@ -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;