using System; using FreeSql.DataAnnotations; using ZhonTai.Admin.Core.Entities; using NPP.SmartSchedue.Api.Contracts.Core.Consts; namespace NPP.SmartSchedue.Api.Contracts.Domain.Time; /// /// 员工班次不可用标记实体 /// 用于统一管理员工因个人意愿、培训任务、会议、设备维护、请假等原因无法工作的班次信息 /// [Table(Name = DbConsts.TableNamePrefix + "shift_unavailability")] [Index("ix_shift_unavailability_personnel_date", "PersonnelId,Date")] [Index("ix_shift_unavailability_shift_date", "ShiftId,Date")] [Index("ix_shift_unavailability_reason_date", "ReasonType,Date")] public partial class ShiftUnavailabilityEntity : EntityTenant { /// /// 员工ID /// public long PersonnelId { get; set; } /// /// 不可用日期 /// public DateTime Date { get; set; } /// /// 不可用班次ID /// public long ShiftId { get; set; } /// /// 不可用原因类型 (使用int存储,对应UnavailabilityReasonType枚举) /// 1=个人意愿, 2=培训任务, 3=会议任务, 4=设备维护, 7=临时请假, 8=计划请假, 9=医疗原因, 10=家庭事务, 11=轮岗安排, 12=技能认证, 99=其他原因 /// public int ReasonType { get; set; } /// /// 备注说明 /// [Column(StringLength = 500)] public string Remark { get; set; } /// /// 是否为模板生成的记录 /// 用于追踪通过模板复制或周期性设置生成的记录 /// public bool IsFromTemplate { get; set; } = false; /// /// 来源模板日期 /// 当IsFromTemplate=true时,记录模板的来源日期,用于追溯和管理 /// public DateTime? SourceTemplateDate { get; set; } /// /// 优先级权重(用于冲突解决) /// 数值越大优先级越高,默认为1 /// 当同一员工同一日期同一班次有多条记录时,优先级高的生效 /// public int Priority { get; set; } = 1; /// /// 生效开始时间(可选,用于精确时间控制) /// 当需要精确控制不可用时间段时使用,如只在班次的某个时间段内不可用 /// public TimeSpan? EffectiveStartTime { get; set; } /// /// 生效结束时间(可选,用于精确时间控制) /// 配合EffectiveStartTime使用,定义精确的不可用时间段 /// public TimeSpan? EffectiveEndTime { get; set; } }