-- ============================================================ -- 系统审计日志表(sys_operation_log) -- 对应实体:YhCore.Entity.SysOperationLog(EF Core,OnModelCreating ToTable 映射) -- 对应 Java:bschclassmanage 的 entity.SysOperationLog / sqlscript/sys_operation_log.sql -- 用途:SysOperationLogFilter 全量记录 HTTP 接口日志 / CleanupLogJob 30 天清理 -- 说明:本表取代旧业务操作日志表 OperationLogRecord(旧表无数据,直接删除) -- 数据库:SQL Server(EduCloudDocPrint) -- ============================================================ -- 1) 清理旧业务操作日志表(OperationLogRecord,已被 sys_operation_log 取代) IF OBJECT_ID(N'[dbo].[OperationLogRecord]', N'U') IS NOT NULL BEGIN DROP TABLE [dbo].[OperationLogRecord]; PRINT 'Legacy OperationLogRecord table dropped.'; END -- 2) 创建审计日志表(幂等) IF NOT EXISTS (SELECT 1 FROM sys.tables WHERE name = 'sys_operation_log') BEGIN CREATE TABLE [dbo].[sys_operation_log] ( [Id] BIGINT IDENTITY(1,1) NOT NULL CONSTRAINT [PK_sys_operation_log] PRIMARY KEY, [LogLevel] TINYINT NOT NULL, -- 1-重要(删除) 2-次要(新增/编辑) 3-一般(查询) [OperationType] NVARCHAR(16) NOT NULL, -- DELETE/CREATE/UPDATE/QUERY [UserId] INT NULL, -- 操作人 ID [UserName] NVARCHAR(64) NULL, -- 操作人姓名 [SchId] INT NULL, -- 学校 ID(多校隔离) [RequestIp] NVARCHAR(64) NOT NULL, -- 客户端 IP [RequestUri] NVARCHAR(512) NOT NULL, -- 请求 URI [RequestMethod] NVARCHAR(16) NOT NULL, -- HTTP 方法 [ClassMethod] NVARCHAR(512) NOT NULL, -- 类名.方法名 [RequestParams] NVARCHAR(MAX) NULL, -- 请求参数(JSON,截断) [ResponseData] VARBINARY(MAX) NULL, -- GZIP 压缩后的响应 JSON [StatusCode] INT NOT NULL, -- 业务状态码:0 成功 / 非 0 失败 [CostTime] BIGINT NOT NULL, -- 耗时(ms) [UserAgent] NVARCHAR(512) NULL, [ErrorMsg] NVARCHAR(MAX) NULL, -- 异常信息(截断 8000) [RetryCount] INT NULL DEFAULT 0, -- 重试次数(对齐 Java 双轨字段,.NET 暂不写入) [LastRetryStatus] INT NULL, -- 上次重试状态:1 成功 / 0 失败 [LastRetryTime] DATETIME NULL, -- 上次重试时间 [CreateTime] DATETIME NOT NULL -- 记录时间 ); -- 查询/清理索引(对齐 Java idx_sol_*) CREATE INDEX [IX_sol_CreateTime] ON [dbo].[sys_operation_log] ([CreateTime]); CREATE INDEX [IX_sol_UserId_Time] ON [dbo].[sys_operation_log] ([UserId], [CreateTime]); CREATE INDEX [IX_sol_SchId_Time] ON [dbo].[sys_operation_log] ([SchId], [CreateTime]); CREATE INDEX [IX_sol_Uri_Time] ON [dbo].[sys_operation_log] ([RequestUri], [CreateTime]); CREATE INDEX [IX_sol_Level_Time] ON [dbo].[sys_operation_log] ([LogLevel], [CreateTime]); PRINT 'sys_operation_log table created.'; END ELSE BEGIN PRINT 'sys_operation_log table already exists, skip.'; END