Files
biz-api-cloud-zax/db/20261109_add_mch_checkout_bill_menu.sql
T
2026-11-09 17:41:07 +08:00

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 ;