namespace Admin.NET.Plugin.AiDOP.Entity.S0.Manufacturing;
///
/// 产线岗位技能明细(子表)。源平台子表结构待确认;当前以“岗位→人员技能主数据引用”占位实现。
///
[SugarTable("LineSkillDetail", "产线岗位技能明细")]
public class AdoS0LineSkillDetail : ITenantIdFilter
{
[SugarColumn(ColumnName = "RecID", ColumnDescription = "明细主键", IsPrimaryKey = true, IsIdentity = true, ColumnDataType = "bigint")]
public long Id { get; set; }
[SugarColumn(ColumnName = "LineSkillRecID", ColumnDescription = "产线岗位主表ID", ColumnDataType = "bigint")]
public long LineSkillMasterId { get; set; }
[SugarColumn(ColumnName = "PersonSkillId", ColumnDescription = "人员技能主数据ID", ColumnDataType = "bigint")]
public long PersonSkillId { get; set; }
// ---- 旧系统遗留业务键列 ----
// 这些列与 IX_LineSkillDetail 唯一索引同源,历史数据(含 1.0.412 种子)全部有值。
// 此前实体未映射它们,导致 Update 的「删除+重插」把整行的 Domain/ProdLine/JOBNo/SkillNo
// 写成 NULL —— 明细因此丢失业务键。这里补映射,由服务端从主表与已解析的技能主数据回填。
//
// ⚠️ SkillNo 与 PersonSkillId 语义不同,不得互相顶替:
// SkillNo = 技能【业务编码】快照(字符串,来自 PersonSkill.Code)
// PersonSkillId = 指向 PersonSkill 主数据的【内部主键】(bigint FK)
// 当前数据里两者恰好都出现 "102",纯属编码巧合,不是同一个字段。
[SugarColumn(ColumnName = "Domain", ColumnDescription = "工厂域(旧系统遗留)", Length = 50, IsNullable = true)]
public string? Domain { get; set; }
[SugarColumn(ColumnName = "Site", ColumnDescription = "站点/工作组(旧系统遗留,当前全库为 NULL)", Length = 12, IsNullable = true)]
public string? Site { get; set; }
[SugarColumn(ColumnName = "ProdLine", ColumnDescription = "生产线编码(旧系统遗留)", Length = 100, IsNullable = true)]
public string? ProdLine { get; set; }
[SugarColumn(ColumnName = "JOBNo", ColumnDescription = "岗位编码(旧系统遗留)", Length = 100, IsNullable = true)]
public string? JOBNo { get; set; }
[SugarColumn(ColumnName = "SkillNo", ColumnDescription = "技能业务编码快照(旧系统遗留,= PersonSkill.Code)", Length = 100, IsNullable = true)]
public string? SkillNo { get; set; }
[SugarColumn(ColumnName = "required_level", ColumnDescription = "要求等级", Length = 50, IsNullable = true)]
public string? RequiredLevel { get; set; }
[SugarColumn(ColumnName = "StartDate", ColumnDescription = "生效日期", IsNullable = true)]
public DateTime? EffectiveDate { get; set; }
[SugarColumn(ColumnName = "remark", ColumnDescription = "备注", Length = 500, IsNullable = true)]
public string? Remark { get; set; }
[SugarColumn(ColumnName = "is_enabled", ColumnDescription = "启用", ColumnDataType = "boolean")]
public bool IsEnabled { get; set; } = true;
[SugarColumn(ColumnName = "CreateTime", ColumnDescription = "创建时间")]
public DateTime CreateTime { get; set; } = DateTime.Now;
///
/// 人员技能【业务编码】(PersonSkill.Code),不落库、仅用于展示与提交。
/// PersonSkillId 是内部自增主键,绝不作为前端 select 的业务值;
/// UI 一律用 Code,保存时由服务端 tenant-safe 解析成 Id。
/// 注意:与本表的 legacy 列 SkillNo 语义不同 —— SkillNo 是旧系统自带的技能编码快照,
/// PersonSkillCode 是当前 PersonSkill 主数据的编码,二者可能不同源,不得互相顶替。
///
[SugarColumn(IsIgnore = true)]
public string? PersonSkillCode { get; set; }
/// 人员技能名称(PersonSkill.Name),不落库、仅展示。
[SugarColumn(IsIgnore = true)]
public string? PersonSkillName { get; set; }
[SugarColumn(ColumnName = "tenant_id", IsNullable = true)]
public long? TenantId { get; set; }
}