feat: 打通出库作业链路
This commit is contained in:
182
sql/bas_api_log.sql
Normal file
182
sql/bas_api_log.sql
Normal 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
|
||||
Reference in New Issue
Block a user