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

141 lines
4.9 KiB
PL/PgSQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- ============================================================================
-- govdoc 模块入口初始化脚本
-- 用途:
-- 1. 为“内部公文 / govdoc”模块补齐首页入口配置
-- 2. 使用幂等写法,重复执行不会产生重复数据
-- 3. 兼容历史库中 entry_modules 时间字段命名差异
--
-- 说明:
-- - 当前模块入口统一收口到 /govdoc/audits,与前端真实列表路由保持一致。
-- - 若后续前端改成其他入口页,请同步更新本脚本中的 v_target_path。
-- - 页面访问权限与左侧菜单路由仍依赖 sys_routes / role_route
-- 这部分建议由配套脚本 seed_govdoc_routes.sql 单独维护。
-- ============================================================================
BEGIN;
DO $$
DECLARE
v_name text := '内部公文';
v_description text := '内部公文处理与格式审查入口';
v_target_path text := '/govdoc/audits';
v_icon_path text := 'documents/mz/static/img/entry_module_3.png';
v_sort_order integer := 30;
v_areas jsonb := '[
{"area":"梅州","enabled":true,"sort_order":1},
{"area":"云浮","enabled":true,"sort_order":2},
{"area":"揭阳","enabled":true,"sort_order":3},
{"area":"潮州","enabled":true,"sort_order":4},
{"area":"省局","enabled":true,"sort_order":5}
]'::jsonb;
has_created_at boolean;
has_updated_at boolean;
has_create_time boolean;
has_update_time boolean;
has_deleted_at boolean;
sql_stmt text;
BEGIN
SELECT EXISTS (
SELECT 1
FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'leaudit_entry_modules'
AND column_name = 'created_at'
),
EXISTS (
SELECT 1
FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'leaudit_entry_modules'
AND column_name = 'updated_at'
),
EXISTS (
SELECT 1
FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'leaudit_entry_modules'
AND column_name = 'create_time'
),
EXISTS (
SELECT 1
FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'leaudit_entry_modules'
AND column_name = 'update_time'
),
EXISTS (
SELECT 1
FROM information_schema.columns
WHERE table_schema = 'public'
AND table_name = 'leaudit_entry_modules'
AND column_name = 'deleted_at'
)
INTO has_created_at, has_updated_at, has_create_time, has_update_time, has_deleted_at;
IF NOT EXISTS (
SELECT 1
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name = 'leaudit_entry_modules'
) THEN
RAISE EXCEPTION '表 public.leaudit_entry_modules 不存在,请先执行入口模块建表脚本';
END IF;
sql_stmt := 'INSERT INTO public.leaudit_entry_modules (' ||
'name, description, path, icon_path, areas, sort_order, is_enabled';
IF has_created_at THEN
sql_stmt := sql_stmt || ', created_at';
ELSIF has_create_time THEN
sql_stmt := sql_stmt || ', create_time';
END IF;
IF has_updated_at THEN
sql_stmt := sql_stmt || ', updated_at';
ELSIF has_update_time THEN
sql_stmt := sql_stmt || ', update_time';
END IF;
IF has_deleted_at THEN
sql_stmt := sql_stmt || ', deleted_at';
END IF;
sql_stmt := sql_stmt || ') VALUES (' ||
'$1, $2, $3, $4, $5, $6, TRUE';
IF has_created_at OR has_create_time THEN
sql_stmt := sql_stmt || ', NOW()';
END IF;
IF has_updated_at OR has_update_time THEN
sql_stmt := sql_stmt || ', NOW()';
END IF;
IF has_deleted_at THEN
sql_stmt := sql_stmt || ', NULL';
END IF;
sql_stmt := sql_stmt || ') ON CONFLICT (name) DO UPDATE SET ' ||
'description = EXCLUDED.description, ' ||
'path = EXCLUDED.path, ' ||
'icon_path = EXCLUDED.icon_path, ' ||
'areas = EXCLUDED.areas, ' ||
'sort_order = EXCLUDED.sort_order, ' ||
'is_enabled = EXCLUDED.is_enabled';
IF has_updated_at THEN
sql_stmt := sql_stmt || ', updated_at = NOW()';
ELSIF has_update_time THEN
sql_stmt := sql_stmt || ', update_time = NOW()';
END IF;
IF has_deleted_at THEN
sql_stmt := sql_stmt || ', deleted_at = NULL';
END IF;
EXECUTE sql_stmt
USING v_name, v_description, v_target_path, v_icon_path, v_areas, v_sort_order;
END $$;
COMMIT;