Merge branch 'spec58/integration' into spec58/t5
This commit is contained in:
@@ -0,0 +1,161 @@
|
|||||||
|
-- spec #58 / T1:审批链就地收敛的 schema 变更(ADR 0006)
|
||||||
|
-- 内容:
|
||||||
|
-- 1) gxmu_review_flow 增加 reviewer_rule(审批人规则,为空时回退 review_user_id)
|
||||||
|
-- 2) 4 张在跑业务表增加 college_id(学院标识,指向 sys_organization.organization_id)
|
||||||
|
-- 3) 新建 gxmu_module_registry(模块注册表)并写入 10 个模块的初始数据
|
||||||
|
--
|
||||||
|
-- 重复执行:加列前用 information_schema 判存(MySQL 5.7 不支持 ADD COLUMN IF NOT EXISTS),
|
||||||
|
-- 建表用 IF NOT EXISTS,初始数据用 INSERT IGNORE;
|
||||||
|
-- 因此本脚本可重复执行,且不会覆盖后台已修改过的注册表行。
|
||||||
|
-- 依赖:MySQL 5.7+,执行时会话的 DATABASE() 必须指向业务库。
|
||||||
|
-- 校验:文件末尾「执行后校验」段落,逐条执行后应满足注释里的期望。
|
||||||
|
-- 注意:本脚本不含存量回填;college_id 由 #64 的一次性回填脚本按学生档案写入。
|
||||||
|
|
||||||
|
SET @db = DATABASE();
|
||||||
|
|
||||||
|
-- ------------------------------------------------------------------
|
||||||
|
-- 1) 审批链配置:审批人规则
|
||||||
|
-- 语法见 ADR 0006:';' 分隔可拼装多段,USER:<userId> 固定人,
|
||||||
|
-- COLLEGE_ROLE:<roleCode> 按申报人学院组织子树找持角色的人;为空回退 review_user_id。
|
||||||
|
-- ------------------------------------------------------------------
|
||||||
|
SET @sql = IF(
|
||||||
|
EXISTS(
|
||||||
|
SELECT 1 FROM information_schema.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'gxmu_review_flow' AND COLUMN_NAME = 'reviewer_rule'
|
||||||
|
),
|
||||||
|
'SELECT 1',
|
||||||
|
'ALTER TABLE gxmu_review_flow ADD COLUMN reviewer_rule VARCHAR(255) NULL COMMENT ''审批人规则,;分隔:USER:<userId> / COLLEGE_ROLE:<roleCode>;为空回退 review_user_id'''
|
||||||
|
);
|
||||||
|
PREPARE stmt FROM @sql;
|
||||||
|
EXECUTE stmt;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
-- ------------------------------------------------------------------
|
||||||
|
-- 2) 4 张在跑业务表的学院标识
|
||||||
|
-- 允许为空:存量数据与无班级数据的研究生记录暂时匹配不到学院,
|
||||||
|
-- 由 #64 回填脚本按学生档案写入,匹配不到的留空并输出清单。
|
||||||
|
-- ------------------------------------------------------------------
|
||||||
|
SET @sql = IF(
|
||||||
|
EXISTS(
|
||||||
|
SELECT 1 FROM information_schema.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'gxmu_sjqn' AND COLUMN_NAME = 'college_id'
|
||||||
|
),
|
||||||
|
'SELECT 1',
|
||||||
|
'ALTER TABLE gxmu_sjqn ADD COLUMN college_id INT NULL COMMENT ''学院标识,指向 sys_organization.organization_id'''
|
||||||
|
);
|
||||||
|
PREPARE stmt FROM @sql;
|
||||||
|
EXECUTE stmt;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
SET @sql = IF(
|
||||||
|
EXISTS(
|
||||||
|
SELECT 1 FROM information_schema.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'gxmu_tzbcy_form' AND COLUMN_NAME = 'college_id'
|
||||||
|
),
|
||||||
|
'SELECT 1',
|
||||||
|
'ALTER TABLE gxmu_tzbcy_form ADD COLUMN college_id INT NULL COMMENT ''学院标识,指向 sys_organization.organization_id'''
|
||||||
|
);
|
||||||
|
PREPARE stmt FROM @sql;
|
||||||
|
EXECUTE stmt;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
SET @sql = IF(
|
||||||
|
EXISTS(
|
||||||
|
SELECT 1 FROM information_schema.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'gxmu_qmgc_form' AND COLUMN_NAME = 'college_id'
|
||||||
|
),
|
||||||
|
'SELECT 1',
|
||||||
|
'ALTER TABLE gxmu_qmgc_form ADD COLUMN college_id INT NULL COMMENT ''学院标识,指向 sys_organization.organization_id'''
|
||||||
|
);
|
||||||
|
PREPARE stmt FROM @sql;
|
||||||
|
EXECUTE stmt;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
SET @sql = IF(
|
||||||
|
EXISTS(
|
||||||
|
SELECT 1 FROM information_schema.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'gxmu_wxxzx_project' AND COLUMN_NAME = 'college_id'
|
||||||
|
),
|
||||||
|
'SELECT 1',
|
||||||
|
'ALTER TABLE gxmu_wxxzx_project ADD COLUMN college_id INT NULL COMMENT ''学院标识,指向 sys_organization.organization_id'''
|
||||||
|
);
|
||||||
|
PREPARE stmt FROM @sql;
|
||||||
|
EXECUTE stmt;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
|
||||||
|
-- ------------------------------------------------------------------
|
||||||
|
-- 3) 模块注册表:模块元数据的唯一来源
|
||||||
|
-- module 同时是业务表名,table_name 与 module 不一致会在启动期直接失败(ADR 0006)。
|
||||||
|
-- detail_key 对应 moduleDetailConfig.ts 的配置键;export_template 留空表示走默认导出。
|
||||||
|
-- ------------------------------------------------------------------
|
||||||
|
CREATE TABLE IF NOT EXISTS gxmu_module_registry (
|
||||||
|
id int NOT NULL AUTO_INCREMENT,
|
||||||
|
module varchar(64) NOT NULL COMMENT '模块标识,同时是业务表名',
|
||||||
|
table_name varchar(64) NOT NULL COMMENT '业务表名,必须与 module 一致',
|
||||||
|
title varchar(100) NOT NULL COMMENT '模块标题',
|
||||||
|
detail_key varchar(64) NOT NULL COMMENT '详情页配置键(moduleDetailConfig.ts)',
|
||||||
|
export_template varchar(100) DEFAULT NULL COMMENT '导出模板标识',
|
||||||
|
enabled tinyint NOT NULL DEFAULT '1' COMMENT '是否启用:0否 1是',
|
||||||
|
sort_number int NOT NULL DEFAULT '0' COMMENT '排序号,小的在前',
|
||||||
|
deleted tinyint NOT NULL DEFAULT '0' COMMENT '删除标记:0未删 1已删',
|
||||||
|
tenant_id int NOT NULL DEFAULT '1' COMMENT '租户id',
|
||||||
|
create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||||
|
update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
|
||||||
|
user_id int DEFAULT NULL COMMENT '创建人',
|
||||||
|
PRIMARY KEY (id),
|
||||||
|
UNIQUE KEY uk_module (module)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='模块注册表';
|
||||||
|
|
||||||
|
-- 初始数据:9 个 gxmu 模块 + cms_manuscript。
|
||||||
|
-- title 取自 ReviewFlowConfigServiceImpl.MODULE_NAME_MAP,detail_key 与 moduleDetailConfig.ts 的键一致。
|
||||||
|
-- enabled=1 只给 4 条在跑的审批链;5 个「已接线未启用」模块保持 0(定性见 issue #55)。
|
||||||
|
-- sort_number 按 reviewList/components/search.vue 当前下拉顺序,cms_manuscript 排在最后。
|
||||||
|
INSERT IGNORE INTO gxmu_module_registry
|
||||||
|
(module, table_name, title, detail_key, export_template, enabled, sort_number, deleted, tenant_id, user_id)
|
||||||
|
VALUES
|
||||||
|
('gxmu_sjqn', 'gxmu_sjqn', '十佳青年岗位能手', 'gxmu_sjqn', NULL, 1, 1, 0, 1, NULL),
|
||||||
|
('gxmu_sjtbzbsj', 'gxmu_sjtbzbsj', '十佳团支部书记', 'gxmu_sjtbzbsj', NULL, 0, 2, 0, 1, NULL),
|
||||||
|
('gxmu_wshqtw', 'gxmu_wshqtw', '五四红旗团委', 'gxmu_wshqtw', NULL, 0, 3, 0, 1, NULL),
|
||||||
|
('gxmu_wshqtzb', 'gxmu_wshqtzb', '五四红旗团支部', 'gxmu_wshqtzb', NULL, 0, 4, 0, 1, NULL),
|
||||||
|
('gxmu_yxgqtdgb', 'gxmu_yxgqtdgb', '优秀共青团干部', 'gxmu_yxgqtdgb', NULL, 0, 5, 0, 1, NULL),
|
||||||
|
('gxmu_yxgqty', 'gxmu_yxgqty', '优秀共青团员', 'gxmu_yxgqty', NULL, 0, 6, 0, 1, NULL),
|
||||||
|
('gxmu_tzbcy_form', 'gxmu_tzbcy_form', '挑战杯', 'gxmu_tzbcy_form', NULL, 1, 7, 0, 1, NULL),
|
||||||
|
('gxmu_qmgc_form', 'gxmu_qmgc_form', '青马工程', 'gxmu_qmgc_form', NULL, 1, 8, 0, 1, NULL),
|
||||||
|
('gxmu_wxxzx_project', 'gxmu_wxxzx_project', '未来学术之星', 'gxmu_wxxzx_project', NULL, 1, 9, 0, 1, NULL),
|
||||||
|
('cms_manuscript', 'cms_manuscript', '稿件', 'cms_manuscript', NULL, 0, 10, 0, 1, NULL);
|
||||||
|
|
||||||
|
-- ------------------------------------------------------------------
|
||||||
|
-- 执行后校验(手工执行;每一段注释里是期望结果)
|
||||||
|
-- ------------------------------------------------------------------
|
||||||
|
-- 1) 新列存在:reviewer_rule 期望 1 行,college_id 期望 4 行,且都允许 NULL
|
||||||
|
SELECT COUNT(*) AS reviewer_rule_columns
|
||||||
|
FROM information_schema.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'gxmu_review_flow'
|
||||||
|
AND COLUMN_NAME = 'reviewer_rule' AND IS_NULLABLE = 'YES';
|
||||||
|
|
||||||
|
SELECT COUNT(*) AS college_id_columns
|
||||||
|
FROM information_schema.COLUMNS
|
||||||
|
WHERE TABLE_SCHEMA = DATABASE()
|
||||||
|
AND TABLE_NAME IN ('gxmu_sjqn', 'gxmu_tzbcy_form', 'gxmu_qmgc_form', 'gxmu_wxxzx_project')
|
||||||
|
AND COLUMN_NAME = 'college_id' AND IS_NULLABLE = 'YES';
|
||||||
|
|
||||||
|
-- 2) 注册表行数与启用数:期望 10 行未删除,其中 4 行启用
|
||||||
|
SELECT COUNT(*) AS registry_rows FROM gxmu_module_registry WHERE deleted = 0;
|
||||||
|
SELECT COUNT(*) AS enabled_rows FROM gxmu_module_registry WHERE deleted = 0 AND enabled = 1;
|
||||||
|
|
||||||
|
-- 3) 一致性检查:以下查询都应返回空集
|
||||||
|
SELECT module FROM gxmu_module_registry WHERE deleted = 0 AND table_name <> module;
|
||||||
|
SELECT module FROM gxmu_module_registry WHERE deleted = 0 AND (detail_key IS NULL OR detail_key = '');
|
||||||
|
SELECT module FROM gxmu_module_registry WHERE deleted = 0 AND (title IS NULL OR title = '');
|
||||||
|
SELECT sort_number, COUNT(*) AS cnt FROM gxmu_module_registry WHERE deleted = 0 GROUP BY sort_number HAVING cnt > 1;
|
||||||
|
SELECT r.module
|
||||||
|
FROM gxmu_module_registry r
|
||||||
|
LEFT JOIN information_schema.TABLES t
|
||||||
|
ON t.TABLE_SCHEMA = DATABASE() AND t.TABLE_NAME = r.table_name
|
||||||
|
WHERE r.deleted = 0 AND t.TABLE_NAME IS NULL;
|
||||||
|
|
||||||
|
-- 4) 启用名单与顺序:期望依次为 gxmu_sjqn / gxmu_tzbcy_form / gxmu_qmgc_form / gxmu_wxxzx_project
|
||||||
|
SELECT module, title, sort_number
|
||||||
|
FROM gxmu_module_registry
|
||||||
|
WHERE deleted = 0 AND enabled = 1
|
||||||
|
ORDER BY sort_number;
|
||||||
Reference in New Issue
Block a user