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

64 lines
4.1 KiB
SQL

-- 在权限库执行,只需填写商户结账管理的父菜单ID,租户和配置页自动读取。
-- 整份脚本在同一会话执行;若执行报错,应ROLLBACK后再重试。
SET @checkout_bill_parent_id = 2117168949136232449;
START TRANSACTION;
-- 锁定父菜单,避免同时重复安装;先清空变量,防止读取不到时沿用旧值。
SET @checkout_bill_tenant_id = NULL;
SELECT tenant_id INTO @checkout_bill_tenant_id FROM sys_menu
WHERE menu_id = @checkout_bill_parent_id AND del_flag = '0' AND menu_type = '0' FOR UPDATE;
SET @checkout_bill_setting_id = (
SELECT menu_id FROM sys_menu WHERE tenant_id = @checkout_bill_tenant_id
AND parent_id = @checkout_bill_parent_id AND path = '/mch/checkout/setting/index'
AND del_flag = '0' AND menu_type = '0'
);
-- 记录页与配置页放在同一父菜单下,已存在时跳过新增。
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)
SELECT UUID_SHORT(), '商户结账记录', '/mch/checkout/record/index', 'mch/checkout/record/index',
@checkout_bill_parent_id, 'ele-Tickets', '1', 81, '1', '0', 'admin', NOW(), 'admin', NOW(), '0', @checkout_bill_tenant_id
FROM DUAL WHERE @checkout_bill_setting_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu WHERE tenant_id = @checkout_bill_tenant_id
AND path = '/mch/checkout/record/index' AND del_flag = '0');
SET @checkout_bill_record_id = (
SELECT menu_id FROM sys_menu WHERE tenant_id = @checkout_bill_tenant_id
AND parent_id = @checkout_bill_parent_id AND path = '/mch/checkout/record/index'
AND del_flag = '0' AND menu_type = '0'
AND (component IS NULL OR component = '' OR component = 'mch/checkout/record/index')
);
UPDATE sys_menu SET component = 'mch/checkout/record/index', update_by = 'admin', update_time = NOW()
WHERE menu_id = @checkout_bill_record_id AND tenant_id = @checkout_bill_tenant_id
AND (component IS NULL OR component = '');
-- 发起权限挂在配置页,其余权限挂在记录页;重复执行按租户和权限标识去重。
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 @checkout_bill_setting_id ELSE @checkout_bill_record_id 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 @checkout_bill_setting_id IS NOT NULL AND @checkout_bill_record_id IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys_menu m WHERE m.tenant_id = @checkout_bill_tenant_id
AND m.permission = p.permission AND m.del_flag = '0');
COMMIT;
-- 结果应包含记录菜单和6项按钮权限;为空或缺项时核对父菜单、配置页及已有权限位置。
SELECT menu_id, name, parent_id, path, permission FROM sys_menu
WHERE tenant_id = @checkout_bill_tenant_id AND del_flag = '0'
AND (menu_id = @checkout_bill_record_id
OR (parent_id = @checkout_bill_setting_id AND permission = 'wallet_mchCheckoutBill_add' AND menu_type = '1')
OR (parent_id = @checkout_bill_record_id AND menu_type = '1'
AND permission IN ('wallet_mchCheckoutBill_view', 'wallet_mchCheckoutBill_pay',
'wallet_mchCheckoutBill_void', 'wallet_mchCheckoutBill_recheck', 'wallet_mchCheckoutBill_handle')))
ORDER BY parent_id, sort_order, menu_id;