using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using NPP.SmartSchedue.Api.Contracts.Domain.Equipment; using NPP.SmartSchedue.Api.Core.Repositories; using ZhonTai.Admin.Core.Db.Transaction; namespace NPP.SmartSchedue.Api.Repositories.Equipment { /// /// 设备校验仓储实现 /// public class EquipmentCalibrationRepository : AppRepositoryBase, IEquipmentCalibrationRepository { public EquipmentCalibrationRepository(UnitOfWorkManagerCloud uowm) : base(uowm) { } /// /// 根据设备ID获取校验记录 /// public async Task> GetByEquipmentIdAsync(long equipmentId) { return await Select .Where(c => c.EquipmentId == equipmentId) .Where(c => c.IsDeleted == false) .OrderByDescending(c => c.CalibrationDate) .ToListAsync(); } /// /// 检查设备是否有进行中的校验 /// public async Task HasInProgressCalibrationAsync(long equipmentId) { return await Select .Where(c => c.EquipmentId == equipmentId) .Where(c => c.Status == CalibrationStatus.InProgress) .Where(c => c.IsDeleted == false) .AnyAsync(); } /// /// 获取指定日期需要校验的设备ID列表 /// public async Task> GetCalibrationEquipmentIdsAsync(DateTime date) { // 获取计划在指定日期进行校验的设备ID var plannedCalibrationIds = await Select .Where(c => c.CalibrationDate.Date == date.Date) .Where(c => c.Status == CalibrationStatus.Planned || c.Status == CalibrationStatus.InProgress) .Where(c => c.IsDeleted == false) .ToListAsync(c => c.EquipmentId); // 获取进行中的校验(可能跨日) var inProgressCalibrationIds = await Select .Where(c => c.Status == CalibrationStatus.InProgress) .Where(c => c.StartTime.HasValue && c.StartTime.Value.Date <= date.Date) .Where(c => !c.EndTime.HasValue || c.EndTime.Value.Date >= date.Date) .Where(c => c.IsDeleted == false) .ToListAsync(c => c.EquipmentId); // 合并去重 var allCalibrationIds = plannedCalibrationIds .Union(inProgressCalibrationIds) .Distinct() .ToList(); return allCalibrationIds; } } }