namespace Admin.NET.Plugin.AiDOP.Entity.SmartOps;
///
/// ETL 执行机指派。全表**只有一行**,记录当前被指派跑定时 ETL 的**槽位**。
///
/// 为什么指派不能存在 ado_etl_instance 上:实例标识是
/// 机器名:进程ID:启动时间(见 AidopInstanceIdentity,进程级唯一是刻意的),
/// 于是「指派」一旦挂在实例行上,就绑死在一次进程化身上——执行机每重启一次,
/// 指派必然留在一行死记录上,全库变成零台存活执行机,定时 ETL 静默停摆。
/// 2026-09-28 实测即是此情形:03:40 扇出 28 条 AUTO_NIGHTLY 的实例 04:10 退出,
/// 队列此后无人可领。角色是部署槽位的属性,不是进程化身的属性,故独立成表。
///
/// 「最多一台执行机」由结构保证:主键固定为 ,
/// 表里放不下第二行,无需再靠事务先清后置。这比原来的写入侧约束更强——
/// 并发指派会被主键挡住,而不是依赖调用方守规矩。
///
/// 无租户列是刻意的:指派是部署事实,不属于任何租户。
/// 本类不实现租户过滤接口,SqlSugar 不会给它加租户条件。
///
[SugarTable("ado_etl_runner_designation", "ETL执行机指派")]
public class AdoEtlRunnerDesignation
{
/// 全表唯一一行的主键值。
public const long SingletonId = 1;
[SugarColumn(ColumnName = "id", IsPrimaryKey = true, IsIdentity = false)]
public long Id { get; set; } = SingletonId;
///
/// 被指派的槽位码,与进程侧 AidopInstanceIdentity.SlotCode 比对。
/// 为 null / 空表示「当前无指派」——此后无人跑定时 ETL,这是允许的状态。
///
[SugarColumn(ColumnName = "slot_code", Length = 128, IsNullable = true)]
public string SlotCode { get; set; }
/// 操作人账号,仅供审计与页面展示。
[SugarColumn(ColumnName = "assigned_by", Length = 64, IsNullable = true)]
public string AssignedBy { get; set; }
[SugarColumn(ColumnName = "assigned_at", IsNullable = true)]
public DateTime? AssignedAt { get; set; }
[SugarColumn(ColumnName = "remark", Length = 512, IsNullable = true)]
public string Remark { get; set; }
[SugarColumn(ColumnName = "create_time")]
public DateTime CreateTime { get; set; }
[SugarColumn(ColumnName = "update_time")]
public DateTime UpdateTime { get; set; }
}