60 lines
4.3 KiB
SQL
60 lines
4.3 KiB
SQL
-- 在权限库中执行。先在同一会话明确设置目标租户和父菜单。
|
|
-- SET @checkout_bill_tenant_id = 目标租户ID;
|
|
-- SET @checkout_bill_parent_id = 商户结账管理父菜单ID;
|
|
-- 脚本安装记录页和按钮权限,角色按实际职责另行授权。
|
|
DELIMITER $$
|
|
DROP PROCEDURE IF EXISTS migrate_20261109_mch_checkout_bill_menu$$
|
|
CREATE PROCEDURE migrate_20261109_mch_checkout_bill_menu()
|
|
BEGIN
|
|
DECLARE v_parent BIGINT;
|
|
DECLARE v_setting BIGINT;
|
|
DECLARE v_record BIGINT;
|
|
DECLARE v_count INT;
|
|
DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN ROLLBACK; RESIGNAL; END;
|
|
IF @checkout_bill_tenant_id IS NULL OR @checkout_bill_tenant_id <= 0
|
|
OR @checkout_bill_parent_id IS NULL OR @checkout_bill_parent_id <= 0 THEN
|
|
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='请先设置结账菜单目标租户和父菜单ID';
|
|
END IF;
|
|
START TRANSACTION;
|
|
SELECT menu_id INTO v_parent FROM sys_menu WHERE menu_id=@checkout_bill_parent_id
|
|
AND tenant_id=@checkout_bill_tenant_id AND del_flag='0' AND menu_type='0' FOR UPDATE;
|
|
IF v_parent IS NULL THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='指定父菜单不存在或类型不符'; END IF;
|
|
SELECT COUNT(*),MAX(menu_id) INTO v_count,v_setting FROM sys_menu
|
|
WHERE tenant_id=@checkout_bill_tenant_id AND del_flag='0' AND path='/mch/checkout/setting/index';
|
|
IF v_count != 1 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='请先安装唯一的商户结账配置页面'; END IF;
|
|
SELECT COUNT(*),MAX(menu_id) INTO v_count,v_record FROM sys_menu
|
|
WHERE tenant_id=@checkout_bill_tenant_id AND del_flag='0' AND path='/mch/checkout/record/index';
|
|
IF v_count > 1 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='存在重复结账记录菜单,请先核对'; END IF;
|
|
IF v_count = 1 AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_id=v_record AND parent_id=v_parent
|
|
AND menu_type='0' AND (component IS NULL OR component='' OR component='mch/checkout/record/index')) THEN
|
|
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='现有结账记录菜单位置或组件不符,请先核对';
|
|
END IF;
|
|
IF v_count = 0 THEN
|
|
SET v_record=UUID_SHORT();
|
|
INSERT INTO sys_menu(menu_id,name,path,component,parent_id,icon,visible,sort_order,keep_alive,menu_type,create_by,create_time,update_by,update_time,del_flag,tenant_id)
|
|
VALUES(v_record,'商户结账记录','/mch/checkout/record/index','mch/checkout/record/index',v_parent,'ele-Tickets','1',81,'1','0','admin',NOW(),'admin',NOW(),'0',@checkout_bill_tenant_id);
|
|
ELSE
|
|
UPDATE sys_menu SET component='mch/checkout/record/index' WHERE menu_id=v_record AND tenant_id=@checkout_bill_tenant_id;
|
|
END IF;
|
|
IF EXISTS (SELECT 1 FROM sys_menu WHERE tenant_id=@checkout_bill_tenant_id AND del_flag='0'
|
|
AND permission IN ('wallet_mchCheckoutBill_view','wallet_mchCheckoutBill_add','wallet_mchCheckoutBill_pay','wallet_mchCheckoutBill_void','wallet_mchCheckoutBill_recheck','wallet_mchCheckoutBill_handle')
|
|
AND (menu_type != '1' OR parent_id != CASE WHEN permission='wallet_mchCheckoutBill_add' THEN v_setting ELSE v_record END)) THEN
|
|
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='结账权限已被其他菜单占用,请先核对';
|
|
END IF;
|
|
INSERT INTO sys_menu(menu_id,name,permission,parent_id,visible,sort_order,keep_alive,menu_type,create_by,create_time,update_by,update_time,del_flag,tenant_id)
|
|
SELECT UUID_SHORT(),p.name,p.permission,CASE WHEN p.permission='wallet_mchCheckoutBill_add' THEN v_setting ELSE v_record END,
|
|
'1',p.sort_order,'0','1','admin',NOW(),'admin',NOW(),'0',@checkout_bill_tenant_id
|
|
FROM (
|
|
SELECT '查看结账账单' name,'wallet_mchCheckoutBill_view' permission,1 sort_order
|
|
UNION ALL SELECT '发起酒店结账','wallet_mchCheckoutBill_add',2
|
|
UNION ALL SELECT '登记商户付款','wallet_mchCheckoutBill_pay',3
|
|
UNION ALL SELECT '作废商户明细','wallet_mchCheckoutBill_void',4
|
|
UNION ALL SELECT '复核订单事实','wallet_mchCheckoutBill_recheck',5
|
|
UNION ALL SELECT '处理付款差异','wallet_mchCheckoutBill_handle',6
|
|
) p WHERE NOT EXISTS (SELECT 1 FROM sys_menu m WHERE m.tenant_id=@checkout_bill_tenant_id AND m.del_flag='0' AND m.permission=p.permission);
|
|
COMMIT;
|
|
END$$
|
|
CALL migrate_20261109_mch_checkout_bill_menu()$$
|
|
DROP PROCEDURE migrate_20261109_mch_checkout_bill_menu$$
|
|
DELIMITER ;
|