paiban/NPP.SmartSchedue.Api.Contracts/Domain/Time/ShiftUnavailabilityEntity.cs
Asoka.Wang 0a2e2d9b18 123
2025-09-02 18:52:35 +08:00

75 lines
2.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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