check in g3fo db skills
This commit is contained in:
@@ -0,0 +1,272 @@
|
||||
USE g3fo_base;
|
||||
|
||||
-- ===================================================================
|
||||
-- 存储过程:插入系统路由数据
|
||||
-- 功能:
|
||||
-- 1. 自动生成ID(最大ID+1,最小从7000开始)并插入系统路由记录
|
||||
-- 2. 当route_type为'ADMIN'时,自动为所有管理员角色模板创建权限记录
|
||||
-- 3. 当route_type为'USER'时,自动为所有用户角色模板创建权限记录
|
||||
-- 4. 数据去重检查:
|
||||
-- - m_system_routes: 检查 route + route_type 组合
|
||||
-- - m_admin_role_rights: 检查 user_role_templates_id + user_right_id + user_right_type 组合
|
||||
-- - m_user_role_rights: 检查 user_role_templates_id + user_right_id + user_right_type 组合
|
||||
-- 参数:
|
||||
-- p_remark: 备注
|
||||
-- p_route: 路由地址
|
||||
-- p_title_remark: 标题备注
|
||||
-- p_route_type: 路由类型('ADMIN' 或 'USER')
|
||||
-- ===================================================================
|
||||
|
||||
DROP PROCEDURE IF EXISTS InsertSystemRoute;
|
||||
|
||||
DELIMITER $$
|
||||
|
||||
CREATE PROCEDURE InsertSystemRoute(
|
||||
IN p_remark VARCHAR(50),
|
||||
IN p_route VARCHAR(255),
|
||||
IN p_title_remark VARCHAR(50),
|
||||
IN p_route_type CHAR(8)
|
||||
)
|
||||
proc_label: BEGIN
|
||||
DECLARE v_new_route_id INT;
|
||||
DECLARE v_done INT DEFAULT FALSE;
|
||||
DECLARE v_template_id BIGINT;
|
||||
DECLARE v_new_right_id INT;
|
||||
DECLARE v_rights_count INT DEFAULT 0;
|
||||
DECLARE v_existing_route_id INT DEFAULT NULL;
|
||||
DECLARE v_existing_right_count INT DEFAULT 0;
|
||||
|
||||
-- 声明游标结束处理器
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE;
|
||||
|
||||
-- ============================================================
|
||||
-- 第一步:检查路由是否已存在(route + route_type 组合去重)
|
||||
-- ============================================================
|
||||
|
||||
SELECT id INTO v_existing_route_id
|
||||
FROM g3fo_base.m_system_routes
|
||||
WHERE route = p_route AND route_type = p_route_type
|
||||
LIMIT 1;
|
||||
|
||||
-- 如果路由已存在,直接返回错误信息
|
||||
IF v_existing_route_id IS NOT NULL THEN
|
||||
LEAVE proc_label; -- 退出存储过程
|
||||
END IF;
|
||||
|
||||
-- ============================================================
|
||||
-- 第二步:插入系统路由数据
|
||||
-- ============================================================
|
||||
|
||||
-- 获取当前最大ID并加1
|
||||
SELECT COALESCE(MAX(id), 6999) + 1 INTO v_new_route_id
|
||||
FROM g3fo_base.m_system_routes;
|
||||
|
||||
-- 如果ID少于7000,从7000开始
|
||||
IF v_new_route_id < 7000 THEN
|
||||
SET v_new_route_id = 7000;
|
||||
END IF;
|
||||
|
||||
-- 插入系统路由数据
|
||||
INSERT INTO g3fo_base.m_system_routes (
|
||||
id,
|
||||
remark,
|
||||
route,
|
||||
title_remark,
|
||||
route_type,
|
||||
active_flag,
|
||||
create_on,
|
||||
update_on
|
||||
) VALUES (
|
||||
v_new_route_id,
|
||||
p_remark,
|
||||
p_route,
|
||||
p_title_remark,
|
||||
p_route_type,
|
||||
1, -- 默认激活状态
|
||||
NOW(),
|
||||
NOW()
|
||||
);
|
||||
|
||||
-- ============================================================
|
||||
-- 第三步:根据route_type创建相应的角色权限记录
|
||||
-- ============================================================
|
||||
|
||||
IF UPPER(p_route_type) = 'ADMIN' THEN
|
||||
-- ========================================================
|
||||
-- 为管理员角色模板创建权限记录
|
||||
-- ========================================================
|
||||
BEGIN
|
||||
DECLARE admin_cursor CURSOR FOR
|
||||
SELECT id FROM g3fo_admin.m_admin_role_templates;
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE;
|
||||
|
||||
SET v_done = FALSE;
|
||||
OPEN admin_cursor;
|
||||
|
||||
admin_loop: LOOP
|
||||
FETCH admin_cursor INTO v_template_id;
|
||||
|
||||
IF v_done THEN
|
||||
LEAVE admin_loop;
|
||||
END IF;
|
||||
|
||||
-- 检查该权限记录是否已存在(去重检查)
|
||||
SET v_existing_right_count = 0;
|
||||
SELECT COUNT(*) INTO v_existing_right_count
|
||||
FROM g3fo_admin.m_admin_role_rights
|
||||
WHERE user_role_templates_id = v_template_id
|
||||
AND user_right_id = v_new_route_id
|
||||
AND user_right_type = 'ROTE';
|
||||
|
||||
-- 只有当权限记录不存在时才插入
|
||||
IF v_existing_right_count = 0 THEN
|
||||
-- 获取当前最大的权限ID并加1
|
||||
SELECT COALESCE(MAX(id), 0) + 1 INTO v_new_right_id
|
||||
FROM g3fo_admin.m_admin_role_rights;
|
||||
|
||||
-- 插入管理员角色权限记录
|
||||
INSERT INTO g3fo_admin.m_admin_role_rights (
|
||||
id,
|
||||
user_role_templates_id,
|
||||
user_right_id,
|
||||
user_right_type,
|
||||
create_on,
|
||||
update_on
|
||||
) VALUES (
|
||||
v_new_right_id,
|
||||
v_template_id,
|
||||
v_new_route_id,
|
||||
'ROTE',
|
||||
NOW(),
|
||||
NOW()
|
||||
);
|
||||
|
||||
SET v_rights_count = v_rights_count + 1;
|
||||
END IF;
|
||||
|
||||
END LOOP;
|
||||
|
||||
CLOSE admin_cursor;
|
||||
END;
|
||||
|
||||
ELSEIF UPPER(p_route_type) = 'USER' THEN
|
||||
-- ========================================================
|
||||
-- 为用户角色模板创建权限记录(排除id=9)
|
||||
-- ========================================================
|
||||
BEGIN
|
||||
DECLARE user_cursor CURSOR FOR
|
||||
SELECT id FROM g3fo_user.m_user_role_templates WHERE id != 9;
|
||||
|
||||
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE;
|
||||
|
||||
SET v_done = FALSE;
|
||||
OPEN user_cursor;
|
||||
|
||||
user_loop: LOOP
|
||||
FETCH user_cursor INTO v_template_id;
|
||||
|
||||
IF v_done THEN
|
||||
LEAVE user_loop;
|
||||
END IF;
|
||||
|
||||
-- 检查该权限记录是否已存在(去重检查)
|
||||
SET v_existing_right_count = 0;
|
||||
SELECT COUNT(*) INTO v_existing_right_count
|
||||
FROM g3fo_user.m_user_role_rights
|
||||
WHERE user_role_templates_id = v_template_id
|
||||
AND user_right_id = v_new_route_id
|
||||
AND user_right_type = 'ROTE';
|
||||
|
||||
-- 只有当权限记录不存在时才插入
|
||||
IF v_existing_right_count = 0 THEN
|
||||
-- 获取当前最大的权限ID并加1
|
||||
SELECT COALESCE(MAX(id), 0) + 1 INTO v_new_right_id
|
||||
FROM g3fo_user.m_user_role_rights;
|
||||
|
||||
-- 插入用户角色权限记录
|
||||
INSERT INTO g3fo_user.m_user_role_rights (
|
||||
id,
|
||||
user_role_templates_id,
|
||||
user_right_id,
|
||||
user_right_type,
|
||||
create_on,
|
||||
update_on
|
||||
) VALUES (
|
||||
v_new_right_id,
|
||||
v_template_id,
|
||||
v_new_route_id,
|
||||
'ROTE',
|
||||
NOW(),
|
||||
NOW()
|
||||
);
|
||||
|
||||
SET v_rights_count = v_rights_count + 1;
|
||||
END IF;
|
||||
|
||||
END LOOP;
|
||||
|
||||
CLOSE user_cursor;
|
||||
END;
|
||||
END IF;
|
||||
|
||||
-- ============================================================
|
||||
-- 返回结果
|
||||
-- ============================================================
|
||||
END$$
|
||||
|
||||
DELIMITER ;
|
||||
|
||||
-- ===================================================================
|
||||
-- 在这里添加需要插入的路由
|
||||
-- ===================================================================
|
||||
|
||||
CALL InsertSystemRoute('重试订单', '/trade/order/retryOrder', '订单', 'USER');
|
||||
|
||||
|
||||
|
||||
-- ===================================================================
|
||||
-- 使用示例:
|
||||
-- ===================================================================
|
||||
|
||||
-- 示例1: 插入管理员路由(会在 m_system_routes 中插入一条记录,
|
||||
-- 同时在 m_admin_role_rights 中为所有管理员角色模板创建权限记录)
|
||||
-- CALL InsertSystemRoute('用户管理', '/admin/user/list', '用户管理', 'ADMIN');
|
||||
|
||||
-- 示例2: 插入用户路由(会在 m_system_routes 中插入一条记录,
|
||||
-- 同时在 m_user_role_rights 中为所有用户角色模板(除了id=9)创建权限记录)
|
||||
-- CALL InsertSystemRoute('订单查询', '/user/order/list', '订单查询', 'USER');
|
||||
|
||||
-- ===================================================================
|
||||
-- 说明:
|
||||
-- ===================================================================
|
||||
-- 当 route_type = 'ADMIN' 时:
|
||||
-- - 在 g3fo_base.m_system_routes 中插入一条路由记录
|
||||
-- - 自动获取 g3fo_admin.m_admin_role_templates 中所有id
|
||||
-- - 为每个角色模板在 g3fo_admin.m_admin_role_rights 中创建一条权限记录
|
||||
-- * id: 自动递增(最大ID + 1)
|
||||
-- * user_role_templates_id: 角色模板ID
|
||||
-- * user_right_id: 新插入的路由ID
|
||||
-- * user_right_type: 'ROTE'
|
||||
--
|
||||
-- 当 route_type = 'USER' 时:
|
||||
-- - 在 g3fo_base.m_system_routes 中插入一条路由记录
|
||||
-- - 自动获取 g3fo_user.m_user_role_templates 中所有id(排除 id=9)
|
||||
-- - 为每个角色模板在 g3fo_user.m_user_role_rights 中创建一条权限记录
|
||||
-- * id: 自动递增(最大ID + 1)
|
||||
-- * user_role_templates_id: 角色模板ID
|
||||
-- * user_right_id: 新插入的路由ID
|
||||
-- * user_right_type: 'ROTE'
|
||||
--
|
||||
-- 去重逻辑:
|
||||
-- 1. 路由去重:如果 route + route_type 组合已存在,返回错误,不插入任何数据
|
||||
-- 2. 权限去重:对于每个角色模板,检查 user_role_templates_id + user_right_id + user_right_type
|
||||
-- 组合是否已存在,如果已存在则跳过该条记录,继续处理下一个
|
||||
--
|
||||
-- 返回结果:
|
||||
-- - new_route_id: 新插入的路由ID
|
||||
-- - route_type: 路由类型
|
||||
-- - rights_created: 成功创建的权限记录数量
|
||||
-- - status: 执行状态('Success' 或错误信息)
|
||||
-- ===================================================================
|
||||
|
||||
Reference in New Issue
Block a user