fix(gxmu): 注册表补 has_college 与团员管理种子,接口返回 DTO 并支持 all=true
- gxmu_module_registry 增加 has_college(4 张在跑表置 1,含已有库补列与补数据语句) - 种子补 gxmu_tygl_form / gxmu_tygl(enabled=0,团员管理,sort 11/12), 同步修正末尾「执行后校验」:12 行未删除、5 行启用、has_college 4 行 - GET /api/gxmu/module-registry/list 支持 all=true(默认只返回启用), 改为返回 ModuleRegistryDTO,不再外泄 tenantId / userId / 时间戳 - ModuleRegistryService:删掉无生产调用的 titleOf(String)/allModules, 标题回退收敛成唯一的静态 titleOf(Map, module);getByModule 改由 hasCollege 使用 - listAll 只保留 SQL 排序(sort_number 升序,NULL 排最前,与 MySQL ASC 口径一致), 删掉内存二次排序 - ModuleRegistryIntegrityChecker 增加反向告警:review_flow_config 里有、注册表里没有的 module 打 warn,不阻断启动 refs #58
This commit is contained in:
@@ -2,7 +2,8 @@
|
||||
-- 内容:
|
||||
-- 1) gxmu_review_flow 增加 reviewer_rule(审批人规则,为空时回退 review_user_id)
|
||||
-- 2) 4 张在跑业务表增加 college_id(学院标识,指向 sys_organization.organization_id)
|
||||
-- 3) 新建 gxmu_module_registry(模块注册表)并写入 10 个模块的初始数据
|
||||
-- 3) 新建 gxmu_module_registry(模块注册表)并写入 12 个模块的初始数据
|
||||
-- 4) 注册表增加 has_college(该模块的业务表是否有 college_id),4 张在跑表置 1
|
||||
--
|
||||
-- 重复执行:加列前用 information_schema 判存(MySQL 5.7 不支持 ADD COLUMN IF NOT EXISTS),
|
||||
-- 建表用 IF NOT EXISTS,初始数据用 INSERT IGNORE;
|
||||
@@ -87,6 +88,8 @@ DEALLOCATE PREPARE stmt;
|
||||
-- 3) 模块注册表:模块元数据的唯一来源
|
||||
-- module 同时是业务表名,table_name 与 module 不一致会在启动期直接失败(ADR 0006)。
|
||||
-- detail_key 对应 moduleDetailConfig.ts 的配置键;export_template 留空表示走默认导出。
|
||||
-- has_college=1 表示该模块的业务表有 college_id,审批人解析才去读学院上下文;
|
||||
-- 后端不再维护「哪几张表有学院标识」的模块白名单,新增表只改注册表一行。
|
||||
-- ------------------------------------------------------------------
|
||||
CREATE TABLE IF NOT EXISTS gxmu_module_registry (
|
||||
id int NOT NULL AUTO_INCREMENT,
|
||||
@@ -95,6 +98,7 @@ CREATE TABLE IF NOT EXISTS gxmu_module_registry (
|
||||
title varchar(100) NOT NULL COMMENT '模块标题',
|
||||
detail_key varchar(64) NOT NULL COMMENT '详情页配置键(moduleDetailConfig.ts)',
|
||||
export_template varchar(100) DEFAULT NULL COMMENT '导出模板标识',
|
||||
has_college tinyint NOT NULL DEFAULT '0' COMMENT '业务表是否有 college_id:0否 1是',
|
||||
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已删',
|
||||
@@ -106,24 +110,48 @@ CREATE TABLE IF NOT EXISTS gxmu_module_registry (
|
||||
UNIQUE KEY uk_module (module)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='模块注册表';
|
||||
|
||||
-- 初始数据:9 个 gxmu 模块 + cms_manuscript。
|
||||
-- 已有库补列:gxmu_module_registry 可能已由上一版脚本建好,CREATE TABLE IF NOT EXISTS 不会补列
|
||||
SET @sql = IF(
|
||||
EXISTS(
|
||||
SELECT 1 FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'gxmu_module_registry' AND COLUMN_NAME = 'has_college'
|
||||
),
|
||||
'SELECT 1',
|
||||
'ALTER TABLE gxmu_module_registry ADD COLUMN has_college tinyint NOT NULL DEFAULT ''0'' COMMENT ''业务表是否有 college_id:0否 1是'''
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 初始数据:11 个 gxmu 模块 + cms_manuscript。
|
||||
-- title 取自 ReviewFlowConfigServiceImpl.MODULE_NAME_MAP,detail_key 与 moduleDetailConfig.ts 的键一致。
|
||||
-- enabled=1:4 条在跑的 gxmu 审批链 + 稿件(cms_manuscript 有 review_flow_config 配置、当前就在审核下拉里,
|
||||
-- 停用会让「稿件」从审核筛选里静默消失);5 个「已接线未启用」的 gxmu 模块保持 0(定性见 issue #55)。
|
||||
-- sort_number 按 reviewList/components/search.vue 当前下拉顺序,cms_manuscript 排在最后。
|
||||
-- enabled=1(5 行):4 条在跑的 gxmu 审批链 + 稿件(cms_manuscript 有 review_flow_config 配置、当前就在审核下拉里,
|
||||
-- 停用会让「稿件」从审核筛选里静默消失)。
|
||||
-- enabled=0(7 行):5 个「已接线未启用」的 gxmu 模块(定性见 issue #55)
|
||||
-- + gxmu_tygl_form / gxmu_tygl(团员管理,有存量数据与 review_flow_config 行,但不开新入口)。
|
||||
-- has_college=1:只有 4 张在跑业务表加了 college_id(见本脚本第 2 段)。
|
||||
-- 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)
|
||||
(module, table_name, title, detail_key, export_template, has_college, 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, 1, 10, 0, 1, NULL);
|
||||
('gxmu_sjqn', 'gxmu_sjqn', '十佳青年岗位能手', 'gxmu_sjqn', NULL, 1, 1, 1, 0, 1, NULL),
|
||||
('gxmu_sjtbzbsj', 'gxmu_sjtbzbsj', '十佳团支部书记', 'gxmu_sjtbzbsj', NULL, 0, 0, 2, 0, 1, NULL),
|
||||
('gxmu_wshqtw', 'gxmu_wshqtw', '五四红旗团委', 'gxmu_wshqtw', NULL, 0, 0, 3, 0, 1, NULL),
|
||||
('gxmu_wshqtzb', 'gxmu_wshqtzb', '五四红旗团支部', 'gxmu_wshqtzb', NULL, 0, 0, 4, 0, 1, NULL),
|
||||
('gxmu_yxgqtdgb', 'gxmu_yxgqtdgb', '优秀共青团干部', 'gxmu_yxgqtdgb', NULL, 0, 0, 5, 0, 1, NULL),
|
||||
('gxmu_yxgqty', 'gxmu_yxgqty', '优秀共青团员', 'gxmu_yxgqty', NULL, 0, 0, 6, 0, 1, NULL),
|
||||
('gxmu_tzbcy_form', 'gxmu_tzbcy_form', '挑战杯', 'gxmu_tzbcy_form', NULL, 1, 1, 7, 0, 1, NULL),
|
||||
('gxmu_qmgc_form', 'gxmu_qmgc_form', '青马工程', 'gxmu_qmgc_form', NULL, 1, 1, 8, 0, 1, NULL),
|
||||
('gxmu_wxxzx_project', 'gxmu_wxxzx_project', '未来学术之星', 'gxmu_wxxzx_project', NULL, 1, 1, 9, 0, 1, NULL),
|
||||
('cms_manuscript', 'cms_manuscript', '稿件', 'cms_manuscript', NULL, 0, 1, 10, 0, 1, NULL),
|
||||
('gxmu_tygl_form', 'gxmu_tygl_form', '团员管理', 'gxmu_tygl_form', NULL, 0, 0, 11, 0, 1, NULL),
|
||||
('gxmu_tygl', 'gxmu_tygl', '团员管理', 'gxmu_tygl', NULL, 0, 0, 12, 0, 1, NULL);
|
||||
|
||||
-- 已存在库的行补 has_college:INSERT IGNORE 不会改已存在的行,这里只把 4 张在跑表从 0 提到 1。
|
||||
-- 只补 0 → 1,不覆盖后台已改过的值;重复执行是 no-op。
|
||||
UPDATE gxmu_module_registry SET has_college = 1
|
||||
WHERE deleted = 0 AND has_college = 0
|
||||
AND module IN ('gxmu_sjqn', 'gxmu_tzbcy_form', 'gxmu_qmgc_form', 'gxmu_wxxzx_project');
|
||||
|
||||
-- ------------------------------------------------------------------
|
||||
-- 执行后校验(手工执行;每一段注释里是期望结果)
|
||||
@@ -140,10 +168,18 @@ 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 行启用
|
||||
-- 2) 注册表行数与启用数:期望 12 行未删除,其中 5 行启用
|
||||
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;
|
||||
|
||||
-- 2b) has_college:期望 4 行(4 张在跑业务表),且与下面的 college_id 列数一致
|
||||
SELECT COUNT(*) AS has_college_rows FROM gxmu_module_registry WHERE deleted = 0 AND has_college = 1;
|
||||
SELECT r.module
|
||||
FROM gxmu_module_registry r
|
||||
LEFT JOIN information_schema.COLUMNS c
|
||||
ON c.TABLE_SCHEMA = DATABASE() AND c.TABLE_NAME = r.table_name AND c.COLUMN_NAME = 'college_id'
|
||||
WHERE r.deleted = 0 AND r.has_college = 1 AND c.COLUMN_NAME IS NULL;
|
||||
|
||||
-- 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 = '');
|
||||
@@ -155,7 +191,7 @@ 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
|
||||
-- 4) 启用名单与顺序:期望依次为 gxmu_sjqn / gxmu_tzbcy_form / gxmu_qmgc_form / gxmu_wxxzx_project / cms_manuscript(5 行)
|
||||
SELECT module, title, sort_number
|
||||
FROM gxmu_module_registry
|
||||
WHERE deleted = 0 AND enabled = 1
|
||||
|
||||
Reference in New Issue
Block a user