using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using NPP.SmartSchedue.Api.Contracts.Domain.Work;
using NPP.SmartSchedue.Api.Contracts.Core.Enums;
using ZhonTai.Admin.Core.Repositories;
namespace NPP.SmartSchedue.Api.Contracts.Domain.Work;
///
/// 工作任务仓储接口
///
public interface IWorkOrderRepository : IRepositoryBase
{
///
/// 根据日期获取工作任务列表
///
/// 日期
/// 工作任务列表
Task> GetByDateAsync(DateTime date);
///
/// 根据人员ID和日期范围获取工作任务列表
///
/// 人员ID
/// 开始日期
/// 结束日期
/// 工作任务列表
Task> GetByPersonnelAndDateRangeAsync(long personnelId, DateTime startDate, DateTime endDate);
///
/// 根据状态获取工作任务列表
///
/// 任务状态
/// 工作任务列表
Task> GetByStatusAsync(WorkOrderStatusEnum status);
///
/// 根据班次ID获取工作任务列表
///
/// 班次ID
/// 日期
/// 工作任务列表
Task> GetByShiftAndDateAsync(long shiftId, DateTime date);
///
/// 根据工序ID获取工作任务列表
///
/// 工序ID
/// 开始日期
/// 结束日期
/// 工作任务列表
Task> GetByProcessAndDateRangeAsync(long processId, DateTime startDate, DateTime endDate);
///
/// 检查任务代码是否存在
///
/// 任务代码
/// 排除的ID
/// 是否存在
Task ExistsWorkOrderCodeAsync(string workOrderCode, long? excludeId = null);
///
/// 生成任务代码
///
/// 项目号
/// 班次代码
/// 工序代码
/// 任务代码
string GenerateWorkOrderCode(string projectNumber, string shiftCode, string processCode);
///
/// 获取人员在指定日期范围内的任务数量
///
/// 人员ID
/// 开始日期
/// 结束日期
/// 任务数量
Task GetPersonnelTaskCountByDateRangeAsync(long personnelId, DateTime startDate, DateTime endDate);
}