Files
tms-erp-api/doc/sql/transport/blade_settlement_menu_split_20261018.sql
T
b2894lxlx 583bab1a4f ✨ 结算付款与汇票校验优化,完善变更记录与菜单拆分
付款可付款占用、汇票仅可选未到期收票、正式结算计费方式与金蝶同步、导入运单删除校验,并补充结算菜单与变更明细 SQL。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-18 05:12:27 +08:00

164 lines
8.6 KiB
SQL

-- 结算菜单调整:
-- 1)预结算 → 预付结算单
-- 2)正式结算单拆分为:付款结算单(应付)、收款结算单(应收)
-- 执行后需重新登录;已授权「正式结算单/付款结算单」的角色会同步授权「收款结算单」。
-- ① 预结算改名
UPDATE `blade_menu`
SET `name` = '预付结算单'
WHERE `code` = 'pre_settlement'
AND `is_deleted` = 0;
-- ② 原正式结算单菜单改为「付款结算单」(保留原菜单 id,角色授权不丢)
UPDATE `blade_menu`
SET `code` = 'payment_settlement',
`name` = '付款结算单',
`alias` = 'payment_settlement',
`path` = '/settlement/payment-settlement',
`is_deleted` = 0
WHERE `code` IN ('formal_settlement', 'payment_settlement')
AND `category` = 1
AND `is_deleted` = 0;
-- 付款结算单按钮权限码:formal_settlement_* → payment_settlement_*
UPDATE `blade_menu` child
INNER JOIN `blade_menu` parent
ON parent.`id` = child.`parent_id`
AND parent.`code` = 'payment_settlement'
AND parent.`is_deleted` = 0
SET child.`code` = REPLACE(child.`code`, 'formal_settlement_', 'payment_settlement_'),
child.`alias` = REPLACE(IFNULL(child.`alias`, child.`code`), 'formal_settlement_', 'payment_settlement_'),
child.`is_deleted` = 0
WHERE child.`category` = 2
AND child.`code` LIKE 'formal_settlement_%';
-- ③ 新增「收款结算单」菜单
INSERT INTO `blade_menu`
(`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`)
SELECT
2090000000000002100,
parent.`parent_id`,
'receipt_settlement',
'收款结算单',
'receipt_settlement',
'/settlement/receipt-settlement',
IFNULL(parent.`source`, 'iconfont icon-caidanguanli'),
IFNULL(parent.`sort`, 4) + 1,
1, 0, 1, NULL, '', 0
FROM `blade_menu` parent
WHERE parent.`code` = 'payment_settlement'
AND parent.`is_deleted` = 0
AND NOT EXISTS (
SELECT 1 FROM `blade_menu` x WHERE x.`code` = 'receipt_settlement' AND x.`is_deleted` = 0
)
LIMIT 1;
INSERT INTO `blade_menu`
(`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`)
SELECT 2090000000000002101, p.id, 'receipt_settlement_view', '查看', 'receipt_settlement_view', '', '', 1, 2, 0, 1, NULL, '', 0
FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0
AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_view' AND x.is_deleted = 0)
LIMIT 1;
INSERT INTO `blade_menu`
(`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`)
SELECT 2090000000000002102, p.id, 'receipt_settlement_add', '新增', 'receipt_settlement_add', '', '', 2, 2, 0, 1, NULL, '', 0
FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0
AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_add' AND x.is_deleted = 0)
LIMIT 1;
INSERT INTO `blade_menu`
(`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`)
SELECT 2090000000000002103, p.id, 'receipt_settlement_edit', '编辑', 'receipt_settlement_edit', '', '', 3, 2, 0, 1, NULL, '', 0
FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0
AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_edit' AND x.is_deleted = 0)
LIMIT 1;
INSERT INTO `blade_menu`
(`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`)
SELECT 2090000000000002104, p.id, 'receipt_settlement_delete', '删除', 'receipt_settlement_delete', '', '', 4, 2, 0, 1, NULL, '', 0
FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0
AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_delete' AND x.is_deleted = 0)
LIMIT 1;
INSERT INTO `blade_menu`
(`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`)
SELECT 2090000000000002105, p.id, 'receipt_settlement_submit', '提交审批', 'receipt_settlement_submit', '', '', 5, 2, 0, 1, NULL, '', 0
FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0
AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_submit' AND x.is_deleted = 0)
LIMIT 1;
INSERT INTO `blade_menu`
(`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`)
SELECT 2090000000000002106, p.id, 'receipt_settlement_approve', '审批', 'receipt_settlement_approve', '', '', 6, 2, 0, 1, NULL, '', 0
FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0
AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_approve' AND x.is_deleted = 0)
LIMIT 1;
INSERT INTO `blade_menu`
(`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`)
SELECT 2090000000000002107, p.id, 'receipt_settlement_sync', '同步金蝶', 'receipt_settlement_sync', '', '', 7, 2, 0, 1, NULL, '', 0
FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0
AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_sync' AND x.is_deleted = 0)
LIMIT 1;
INSERT INTO `blade_menu`
(`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`)
SELECT 2090000000000002108, p.id, 'receipt_settlement_print', '打印', 'receipt_settlement_print', '', '', 8, 2, 0, 1, NULL, '', 0
FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0
AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_print' AND x.is_deleted = 0)
LIMIT 1;
INSERT INTO `blade_menu`
(`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`)
SELECT 2090000000000002109, p.id, 'receipt_settlement_export', '导出', 'receipt_settlement_export', '', '', 9, 2, 0, 1, NULL, '', 0
FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0
AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_export' AND x.is_deleted = 0)
LIMIT 1;
INSERT INTO `blade_menu`
(`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`)
SELECT 2090000000000002110, p.id, 'receipt_settlement_void', '作废', 'receipt_settlement_void', '', '', 10, 2, 0, 1, NULL, '', 0
FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0
AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_void' AND x.is_deleted = 0)
LIMIT 1;
INSERT INTO `blade_menu`
(`id`,`parent_id`,`code`,`name`,`alias`,`path`,`source`,`sort`,`category`,`action`,`is_open`,`component`,`remark`,`is_deleted`)
SELECT 2090000000000002111, p.id, 'receipt_settlement_adjust', '明细调整', 'receipt_settlement_adjust', '', '', 11, 2, 0, 1, NULL, '', 0
FROM `blade_menu` p WHERE p.code = 'receipt_settlement' AND p.is_deleted = 0
AND NOT EXISTS (SELECT 1 FROM `blade_menu` x WHERE x.code = 'receipt_settlement_adjust' AND x.is_deleted = 0)
LIMIT 1;
-- ④ 角色授权:持有付款结算单的角色同步收款结算单(含按钮)
INSERT INTO `blade_role_menu` (`id`, `menu_id`, `role_id`)
SELECT
2091200000000000000 + CAST(rm.`role_id` AS UNSIGNED) % 100000,
receipt.`id`,
rm.`role_id`
FROM `blade_role_menu` rm
JOIN `blade_menu` payment ON payment.`id` = rm.`menu_id`
AND payment.`code` = 'payment_settlement'
AND payment.`is_deleted` = 0
JOIN `blade_menu` receipt ON receipt.`code` = 'receipt_settlement'
AND receipt.`is_deleted` = 0
WHERE NOT EXISTS (
SELECT 1 FROM `blade_role_menu` x
WHERE x.`menu_id` = receipt.`id` AND x.`role_id` = rm.`role_id`
);
INSERT INTO `blade_role_menu` (`id`, `menu_id`, `role_id`)
SELECT
2091300000000000000
+ (CAST(rm.`role_id` AS UNSIGNED) % 100000) * 20
+ (CAST(receipt_btn.`id` AS UNSIGNED) % 20),
receipt_btn.`id`,
rm.`role_id`
FROM `blade_role_menu` rm
JOIN `blade_menu` payment_btn ON payment_btn.`id` = rm.`menu_id`
AND payment_btn.`code` LIKE 'payment_settlement_%'
AND payment_btn.`is_deleted` = 0
JOIN `blade_menu` receipt_btn
ON receipt_btn.`code` = REPLACE(payment_btn.`code`, 'payment_settlement_', 'receipt_settlement_')
AND receipt_btn.`is_deleted` = 0
WHERE NOT EXISTS (
SELECT 1 FROM `blade_role_menu` x
WHERE x.`menu_id` = receipt_btn.`id` AND x.`role_id` = rm.`role_id`
);
-- ⑤ 残留旧正式结算菜单隐藏
UPDATE `blade_menu`
SET `is_deleted` = 1
WHERE `code` = 'formal_settlement'
AND `category` = 1;