Files
leaudit-platform-backend/scripts/创建sql/entry_module_menu_profile_migration.sql
T
2026-05-25 09:50:01 +08:00

68 lines
2.8 KiB
PL/PgSQL

-- 入口模块菜单模板、功能清单、文档入口归属迁移脚本
-- 目标:
-- 1. 入口模块用 menu_profile/features 控制左侧菜单,不再靠名称包含“合同/公文”判断。
-- 2. 文档记录补 entry_module_id,后续列表、上传、统计、质量校验可以按入口模块过滤。
-- 3. 二级分组增加父级内文档类型唯一约束,避免规则命中不稳定。
BEGIN;
ALTER TABLE leaudit_entry_modules
ADD COLUMN IF NOT EXISTS menu_profile VARCHAR(64) NOT NULL DEFAULT 'document_review',
ADD COLUMN IF NOT EXISTS features JSONB NOT NULL DEFAULT '[]'::jsonb;
ALTER TABLE leaudit_documents
ADD COLUMN IF NOT EXISTS entry_module_id BIGINT NULL REFERENCES leaudit_entry_modules(id);
CREATE INDEX IF NOT EXISTS idx_leaudit_entry_modules_menu_profile
ON leaudit_entry_modules(menu_profile)
WHERE deleted_at IS NULL;
CREATE INDEX IF NOT EXISTS idx_leaudit_documents_entry_module_id
ON leaudit_documents(entry_module_id);
CREATE UNIQUE INDEX IF NOT EXISTS uq_leaudit_ep_groups_parent_doc_type_active
ON leaudit_evaluation_point_groups(pid, document_type_id)
WHERE deleted_at IS NULL
AND COALESCE(pid, 0) <> 0
AND document_type_id IS NOT NULL;
UPDATE leaudit_entry_modules
SET
menu_profile = CASE
WHEN path IN ('/govdoc/audits', '/govdoc', '/govdoc-audit') THEN 'govdoc'
WHEN path IN ('/contract-template', '/contract-template/list', '/contract-template/search') THEN 'contract'
ELSE COALESCE(NULLIF(menu_profile, ''), 'document_review')
END,
features = CASE
WHEN path IN ('/govdoc/audits', '/govdoc', '/govdoc-audit')
THEN '["home","govdoc_audits","govdoc_upload","rule_groups"]'::jsonb
WHEN path IN ('/contract-template', '/contract-template/list', '/contract-template/search')
THEN '["home","documents","upload","rules","contract_template_search","contract_template_list"]'::jsonb
WHEN features IS NULL OR features = '[]'::jsonb
THEN '["home","documents","upload","rules","rule_groups"]'::jsonb
ELSE features
END
WHERE deleted_at IS NULL;
UPDATE leaudit_documents d
SET entry_module_id = COALESCE(g.entry_module_id, parent.entry_module_id, dt.entry_module_id)
FROM leaudit_document_types dt
LEFT JOIN leaudit_evaluation_point_groups g ON g.id = d.group_id
LEFT JOIN leaudit_evaluation_point_groups parent ON parent.id = g.pid
WHERE d.type_id = dt.id
AND d.entry_module_id IS NULL;
COMMIT;
-- 验证入口模块菜单字段:
-- SELECT id, name, path, menu_profile, features
-- FROM leaudit_entry_modules
-- WHERE deleted_at IS NULL
-- ORDER BY sort_order, id;
-- 验证仍未回填入口模块归属的文档:
-- SELECT COUNT(*) AS documents_without_entry_module
-- FROM leaudit_documents
-- WHERE deleted_at IS NULL
-- AND entry_module_id IS NULL;