feat: 打通出库作业链路

This commit is contained in:
zgw
2026-06-24 09:13:18 +08:00
parent a3c023a8d3
commit 1af5b3cbd3
141 changed files with 17337 additions and 1065 deletions

182
sql/bas_api_log.sql Normal file
View File

@@ -0,0 +1,182 @@
-- 外部接口日志表和 30 天保留策略
-- 目标库:FTC25009-WMS
IF OBJECT_ID(N'dbo.bas_api_log', N'U') IS NULL
BEGIN
CREATE TABLE dbo.bas_api_log (
id bigint IDENTITY(1,1) NOT NULL,
direction varchar(16) NOT NULL,
sys_code varchar(50) NULL,
interface_name nvarchar(100) NULL,
request_url nvarchar(500) NULL,
request_method varchar(20) NULL,
request_body nvarchar(max) NULL,
response_body nvarchar(max) NULL,
msg_type varchar(20) NULL,
http_status int NULL,
cost_ms bigint NULL,
status varchar(30) NULL,
error_msg nvarchar(2000) NULL,
source_ip varchar(80) NULL,
trace_id varchar(80) NULL,
create_time datetime2(7) NOT NULL CONSTRAINT DF_bas_api_log_create_time DEFAULT GETDATE(),
CONSTRAINT PK_bas_api_log PRIMARY KEY CLUSTERED(id)
);
END
GO
IF COL_LENGTH(N'dbo.bas_api_log', N'direction') IS NULL
BEGIN
ALTER TABLE dbo.bas_api_log ADD direction varchar(16) NULL;
EXEC(N'UPDATE dbo.bas_api_log SET direction = ''UNKNOWN'' WHERE direction IS NULL');
END
GO
IF COL_LENGTH(N'dbo.bas_api_log', N'request_method') IS NULL
BEGIN
ALTER TABLE dbo.bas_api_log ADD request_method varchar(20) NULL;
END
GO
IF COL_LENGTH(N'dbo.bas_api_log', N'source_ip') IS NULL
BEGIN
ALTER TABLE dbo.bas_api_log ADD source_ip varchar(80) NULL;
END
GO
IF COL_LENGTH(N'dbo.bas_api_log', N'trace_id') IS NULL
BEGIN
ALTER TABLE dbo.bas_api_log ADD trace_id varchar(80) NULL;
END
GO
IF COLUMNPROPERTY(OBJECT_ID(N'dbo.bas_api_log'), 'id', 'IsIdentity') = 0
AND NOT EXISTS (
SELECT 1
FROM sys.default_constraints dc
JOIN sys.columns c ON c.object_id = dc.parent_object_id AND c.column_id = dc.parent_column_id
WHERE dc.parent_object_id = OBJECT_ID(N'dbo.bas_api_log') AND c.name = N'id'
)
BEGIN
DECLARE @apiLogStartId bigint;
SELECT @apiLogStartId = ISNULL(MAX(CAST(id AS bigint)), 0) + 1 FROM dbo.bas_api_log;
IF OBJECT_ID(N'dbo.seq_bas_api_log_id', N'SO') IS NULL
BEGIN
DECLARE @createSeqSql nvarchar(max) = N'CREATE SEQUENCE dbo.seq_bas_api_log_id AS bigint START WITH '
+ CAST(@apiLogStartId AS nvarchar(30)) + N' INCREMENT BY 1';
EXEC(@createSeqSql);
END;
ALTER TABLE dbo.bas_api_log ADD CONSTRAINT DF_bas_api_log_id DEFAULT (NEXT VALUE FOR dbo.seq_bas_api_log_id) FOR id;
END
GO
IF EXISTS (
SELECT 1 FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.bas_api_log')
AND name = N'request_url'
AND max_length < 1000
)
BEGIN
ALTER TABLE dbo.bas_api_log ALTER COLUMN request_url nvarchar(500) NULL;
END
GO
IF EXISTS (
SELECT 1 FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.bas_api_log')
AND name = N'request_body'
AND system_type_id IN (167, 231)
AND max_length <> -1
)
BEGIN
ALTER TABLE dbo.bas_api_log ALTER COLUMN request_body nvarchar(max) NULL;
END
GO
IF EXISTS (
SELECT 1 FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.bas_api_log')
AND name = N'response_body'
AND system_type_id IN (167, 231)
AND max_length <> -1
)
BEGIN
ALTER TABLE dbo.bas_api_log ALTER COLUMN response_body nvarchar(max) NULL;
END
GO
IF EXISTS (
SELECT 1 FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.bas_api_log')
AND name = N'error_msg'
AND system_type_id IN (167, 231)
AND max_length < 4000
)
BEGIN
ALTER TABLE dbo.bas_api_log ALTER COLUMN error_msg nvarchar(2000) NULL;
END
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.bas_api_log') AND name = N'IX_bas_api_log_create_time')
BEGIN
EXEC(N'CREATE INDEX IX_bas_api_log_create_time ON dbo.bas_api_log(create_time)');
END
GO
IF COL_LENGTH(N'dbo.bas_api_log', N'direction') IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.bas_api_log') AND name = N'IX_bas_api_log_direction_sys')
BEGIN
EXEC(N'CREATE INDEX IX_bas_api_log_direction_sys ON dbo.bas_api_log(direction, sys_code, create_time DESC)');
END
GO
IF OBJECT_ID(N'dbo.proc_clean_bas_api_log', N'P') IS NOT NULL
BEGIN
DROP PROCEDURE dbo.proc_clean_bas_api_log;
END
GO
CREATE PROCEDURE dbo.proc_clean_bas_api_log
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM dbo.bas_api_log
WHERE create_time < DATEADD(DAY, -30, GETDATE());
END
GO
DECLARE @apiLogJobId bigint = 9010;
DECLARE @jobIdIsIdentity bit = COLUMNPROPERTY(OBJECT_ID(N'dbo.sys_job'), 'job_id', 'IsIdentity');
IF NOT EXISTS (SELECT 1 FROM dbo.sys_job WHERE invoke_target = N'apiLogCleanupTask.cleanExpiredApiLogs()')
BEGIN
IF @jobIdIsIdentity = 1
SET IDENTITY_INSERT dbo.sys_job ON;
INSERT INTO dbo.sys_job (
job_id, job_name, job_group, invoke_target, cron_expression,
misfire_policy, concurrent, status, create_by, create_time, update_by, update_time, remark
)
VALUES (
@apiLogJobId, N'外部接口日志30天清理', N'DEFAULT', N'apiLogCleanupTask.cleanExpiredApiLogs()', N'0 30 2 * * ?',
N'3', N'1', N'0', N'admin', GETDATE(), N'', NULL, N'清理 bas_api_log 中 30 天前的日志'
);
IF @jobIdIsIdentity = 1
SET IDENTITY_INSERT dbo.sys_job OFF;
END
ELSE
BEGIN
UPDATE dbo.sys_job
SET job_name = N'外部接口日志30天清理',
cron_expression = N'0 30 2 * * ?',
misfire_policy = N'3',
concurrent = N'1',
status = N'0',
update_time = GETDATE(),
remark = N'清理 bas_api_log 中 30 天前的日志'
WHERE invoke_target = N'apiLogCleanupTask.cleanExpiredApiLogs()';
END
GO