using System; using System.Collections.Generic; using System.Threading.Tasks; using ZhonTai.Admin.Core.Repositories; namespace NPP.SmartSchedue.Api.Contracts.Domain.Time; /// /// 班次不可用标记仓储接口 /// 提供班次不可用数据的访问方法 /// public interface IShiftUnavailabilityRepository : IRepositoryBase { /// /// 获取指定员工在指定日期范围内的不可用记录 /// /// 员工ID /// 开始日期 /// 结束日期 /// 不可用记录列表 Task> GetByPersonnelAndDateRangeAsync(long personnelId, DateTime startDate, DateTime endDate); /// /// 获取指定日期和班次的不可用员工ID列表 /// /// 日期 /// 班次ID /// 不可用员工ID列表 Task> GetUnavailablePersonnelIdsAsync(DateTime date, long shiftId); /// /// 检查人员班次的意愿 /// /// /// /// /// Task CheckUnavailablePersonnelByShiftAsync(DateTime date, long shiftId, long personnelId); /// /// 获取指定日期所有班次的不可用员工分布 /// /// 日期 /// 班次ID -> 不可用员工ID列表的字典 Task>> GetDailyUnavailablePersonnelAsync(DateTime date); /// /// 批量获取日期范围内的不可用员工分布 /// /// 开始日期 /// 结束日期 /// 日期 -> (班次ID -> 不可用员工ID列表) 的嵌套字典 Task>>> GetRangeUnavailablePersonnelAsync(DateTime startDate, DateTime endDate); /// /// 检查指定员工在指定日期和班次是否已有不可用记录 /// /// 员工ID /// 日期 /// 班次ID /// 是否存在记录 Task ExistsAsync(long personnelId, DateTime date, long shiftId); /// /// 删除指定条件的记录 /// /// 员工ID /// 日期 /// 班次ID(可选) /// 删除的记录数量 Task DeleteByConditionAsync(long personnelId, DateTime date, long? shiftId = null); /// /// 获取统计信息 /// /// 员工ID /// 开始日期 /// 结束日期 /// 统计结果 Task> GetStatisticsAsync(long personnelId, DateTime startDate, DateTime endDate); }