feat: add ERP push failure recovery

This commit is contained in:
zgw
2026-09-15 14:31:16 +08:00
parent 58e9832b61
commit 67251a7562
13 changed files with 851 additions and 0 deletions

View File

@@ -0,0 +1,86 @@
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRANSACTION;
DECLARE @menu_id bigint;
DECLARE @retry_id bigint;
DECLARE @source_menu_id bigint;
DECLARE @lock_result int;
EXEC @lock_result = sys.sp_getapplock
@Resource = N'FT546WMS:upgrade-erp-push-exception-menu',
@LockMode = N'Exclusive',
@LockOwner = N'Transaction',
@LockTimeout = 10000;
IF @lock_result < 0
BEGIN
ROLLBACK TRANSACTION;
THROW 51000, N'无法获取 ERP 推送异常菜单升级锁', 1;
END;
SELECT TOP (1) @menu_id = menu_id
FROM dbo.sys_menu
WHERE parent_id = 2 AND path = N'pushException'
ORDER BY menu_id;
IF @menu_id IS NULL
BEGIN
SELECT @menu_id = ISNULL(MAX(menu_id), 0) + 1 FROM dbo.sys_menu WITH (UPDLOCK, HOLDLOCK);
INSERT INTO dbo.sys_menu
(menu_id, menu_name, parent_id, order_num, path, component, query, route_name,
is_frame, is_cache, menu_type, visible, status, perms, icon,
create_by, create_time, update_by, update_time, remark)
VALUES
(@menu_id, N'ERP推送异常', 2, 2, N'pushException', N'erp/pushException/index', NULL, N'',
N'1', N'0', N'C', N'0', N'0', N'erp:pushException:list', N'warning',
N'admin', SYSDATETIME(), N'', NULL, N'ERP回传失败列表');
END;
SELECT TOP (1) @retry_id = menu_id
FROM dbo.sys_menu
WHERE parent_id = @menu_id AND perms = N'erp:pushException:retry'
ORDER BY menu_id;
IF @retry_id IS NULL
BEGIN
SELECT @retry_id = ISNULL(MAX(menu_id), 0) + 1 FROM dbo.sys_menu WITH (UPDLOCK, HOLDLOCK);
INSERT INTO dbo.sys_menu
(menu_id, menu_name, parent_id, order_num, path, component, query, route_name,
is_frame, is_cache, menu_type, visible, status, perms, icon,
create_by, create_time, update_by, update_time, remark)
VALUES
(@retry_id, N'ERP异常重推', @menu_id, 1, N'#', N'', NULL, N'',
N'1', N'0', N'F', N'0', N'0', N'erp:pushException:retry', N'#',
N'admin', SYSDATETIME(), N'', NULL, N'失败单据重新加入ERP回传队列');
END;
SELECT TOP (1) @source_menu_id = menu_id
FROM dbo.sys_menu
WHERE perms = N'requestInterface:log:list'
ORDER BY menu_id;
INSERT INTO dbo.sys_role_menu (role_id, menu_id)
SELECT existing.role_id, @menu_id
FROM dbo.sys_role_menu existing
WHERE existing.menu_id = @source_menu_id
AND NOT EXISTS (
SELECT 1 FROM dbo.sys_role_menu target
WHERE target.role_id = existing.role_id AND target.menu_id = @menu_id
);
INSERT INTO dbo.sys_role_menu (role_id, menu_id)
SELECT existing.role_id, @retry_id
FROM dbo.sys_role_menu existing
WHERE existing.menu_id = @source_menu_id
AND NOT EXISTS (
SELECT 1 FROM dbo.sys_role_menu target
WHERE target.role_id = existing.role_id AND target.menu_id = @retry_id
);
COMMIT TRANSACTION;
SELECT N'ERP_PUSH_EXCEPTION_MENU_OK' AS result, @menu_id AS menu_id, @retry_id AS retry_menu_id;