namespace Admin.NET.Plugin.AiDOP.Entity.S8; [SugarTable("ado_s8_exception_timeline", "S8 异常时间线")] public class AdoS8ExceptionTimeline { [SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = true, ColumnDataType = "bigint")] public long Id { get; set; } [SugarColumn(ColumnName = "exception_id", ColumnDataType = "bigint")] public long ExceptionId { get; set; } [SugarColumn(ColumnName = "action_code", Length = 64)] public string ActionCode { get; set; } = string.Empty; [SugarColumn(ColumnName = "action_label", Length = 128)] public string ActionLabel { get; set; } = string.Empty; [SugarColumn(ColumnName = "from_status", Length = 32, IsNullable = true)] public string? FromStatus { get; set; } [SugarColumn(ColumnName = "to_status", Length = 32, IsNullable = true)] public string? ToStatus { get; set; } /// /// 操作人。SYSUSER ID ONLY —— 值域是 SysUser.Id。 /// /// 列名从 operator_id 显式改为 operator_user_id(迁移 1.0.496)。 /// 旧列实测混装两套 ID 空间:CLAIM 写的是 EmployeeMaster.RecID(19 行), /// 而 START_PROGRESS / VERIFY_* / CREATE 写的是 SysUser.Id —— 同一列、同一张表、语义按动作而异。 /// 于是「谁做的这一步」这个最基本的问题,在时间线上无法回答。 /// /// 系统自动动作允许为 NULL(没有真人操作者),但绝不允许伪造一个 ID 填进来 /// [SugarColumn(ColumnName = "operator_user_id", ColumnDataType = "bigint", IsNullable = true)] public long? OperatorUserId { get; set; } [SugarColumn(ColumnName = "operator_name", Length = 128, IsNullable = true)] public string? OperatorName { get; set; } [SugarColumn(ColumnName = "action_remark", Length = 2000, IsNullable = true)] public string? ActionRemark { get; set; } [SugarColumn(ColumnName = "created_at")] public DateTime CreatedAt { get; set; } = DateTime.Now; }