feat(W4): 院系子站嵌套路径-cms_site.path列+uk_site_path/parent_code,门户单段+嵌套双映射,旧链301,public_base_url派生,sitePath预览,SQL三处+升级脚本,T-W4-01..15 全绿279/279

This commit is contained in:
chenxing
2026-09-08 12:34:33 +08:00
parent 5da6f7ee5d
commit 536bd6cea4
30 changed files with 593 additions and 55 deletions
+31
View File
@@ -0,0 +1,31 @@
-- ============================================================
-- W4 升级脚本:cms_site 嵌套 path(《功能修订方案.md》§8 / 附录 A,幂等)
-- 目标库:存量 bsch_cms(生产/预发);干净环境直接用 cms_init.sql 无需本脚本
-- 顺序:加列 → 回填(先顶层后子站,两层固定一轮)→ 约束切换 → 校验
-- ============================================================
-- 1) 加列(存量默认空串,随后回填;已加列则跳过)
ALTER TABLE cms_site ADD COLUMN path VARCHAR(191) NOT NULL DEFAULT '' COMMENT '门户路径(顶层=code;子站=父path/code),URL 唯一标识';
-- 2) 回填:先顶层后子站(幂等:仅处理 path='')
UPDATE cms_site SET path = code WHERE (parent_site_id = 0 OR parent_site_id IS NULL) AND path = '';
UPDATE cms_site s JOIN cms_site p ON s.parent_site_id = p.id
SET s.path = CONCAT(p.path, '/', s.code)
WHERE s.parent_site_id > 0 AND s.path = '';
-- 3) 约束切换(存量数据天然满足:code 曾全局唯一 ⇒ path 唯一)
ALTER TABLE cms_site DROP INDEX uk_site_code;
ALTER TABLE cms_site ADD UNIQUE KEY uk_site_path (path);
ALTER TABLE cms_site ADD UNIQUE KEY uk_site_parent_code (parent_site_id, code);
-- 4) 校验(应返回 0 行)
SELECT id, code, path FROM cms_site WHERE path = '';
-- ============================================================
-- 附:R1 预留模板——学校主站编码改学校 ID(1000xxx)级联重算子站 path
-- (切换生成规则后执行;把 {OLD_PREFIX} 替换为旧前缀、按新编码规则回填顶层)
-- UPDATE cms_site SET path = CONCAT('1000', sch_id) WHERE parent_site_id = 0 AND code LIKE '{OLD_PREFIX}%';
-- UPDATE cms_site s JOIN cms_site p ON s.parent_site_id = p.id
-- SET s.path = CONCAT(p.path, '/', s.code)
-- WHERE s.parent_site_id > 0;
-- ============================================================