using System; using System.Collections.Generic; using System.Threading.Tasks; using NPP.SmartSchedue.Api.Contracts; using NPP.SmartSchedue.Api.Contracts.Domain.Work; using NPP.SmartSchedue.Api.Contracts.Core.Enums; using NPP.SmartSchedue.Api.Core.Repositories; using ZhonTai.Admin.Core.Db.Transaction; namespace NPP.SmartSchedue.Api.Repositories.Work; /// /// 工作任务仓储 /// public class WorkOrderRepository : AppRepositoryBase, IWorkOrderRepository { public WorkOrderRepository(UnitOfWorkManagerCloud uowm) : base(uowm) { } /// /// 根据日期获取工作任务列表 /// public async Task> GetByDateAsync(DateTime date) { return await Select .Where(w => w.WorkOrderDate.Date == date.Date) .ToListAsync(); } /// /// 根据人员ID和日期范围获取工作任务列表 /// public async Task> GetByPersonnelAndDateRangeAsync(long personnelId, DateTime startDate, DateTime endDate) { return await Select .Where(w => w.AssignedPersonnelId == personnelId) .Where(w => w.WorkOrderDate >= startDate && w.WorkOrderDate <= endDate) .ToListAsync(); } /// /// 根据状态获取工作任务列表 /// public async Task> GetByStatusAsync(WorkOrderStatusEnum status) { return await Select .Where(w => w.Status == (int)status) .ToListAsync(); } /// /// 根据班次ID获取工作任务列表 /// public async Task> GetByShiftAndDateAsync(long shiftId, DateTime date) { return await Select .Where(w => w.ShiftId == shiftId && w.WorkOrderDate.Date == date.Date) .ToListAsync(); } /// /// 根据工序ID获取工作任务列表 /// public async Task> GetByProcessAndDateRangeAsync(long processId, DateTime startDate, DateTime endDate) { return await Select .Where(w => w.ProcessId == processId) .Where(w => w.WorkOrderDate >= startDate && w.WorkOrderDate <= endDate) .ToListAsync(); } /// /// 检查任务代码是否存在 /// public async Task ExistsWorkOrderCodeAsync(string workOrderCode, long? excludeId = null) { var query = Select.Where(w => w.WorkOrderCode == workOrderCode); if (excludeId.HasValue) query = query.Where(w => w.Id != excludeId.Value); return await query.AnyAsync(); } /// /// 生成任务代码 /// public string GenerateWorkOrderCode(string projectNumber, string shiftCode, string processCode) { return $"{projectNumber}_{shiftCode}_{processCode}"; } /// /// 获取人员在指定日期范围内的任务数量 /// public async Task GetPersonnelTaskCountByDateRangeAsync(long personnelId, DateTime startDate, DateTime endDate) { var count = await Select .Where(w => w.AssignedPersonnelId == personnelId) .Where(w => w.WorkOrderDate >= startDate && w.WorkOrderDate <= endDate) .CountAsync(); return (int)count; } }