diff --git a/src/X1.Infrastructure/Repositories/Device/CellularDeviceRuntimeRepository.cs b/src/X1.Infrastructure/Repositories/Device/CellularDeviceRuntimeRepository.cs index 03bca4b..57466f7 100644 --- a/src/X1.Infrastructure/Repositories/Device/CellularDeviceRuntimeRepository.cs +++ b/src/X1.Infrastructure/Repositories/Device/CellularDeviceRuntimeRepository.cs @@ -248,7 +248,7 @@ public class CellularDeviceRuntimeRepository : BaseRepository - /// 根据设备编号列表批量获取运行时状态(每个设备只返回最新的一条记录,支持多种状态过滤) + /// 根据设备编号列表批量获取运行时状态(支持多种状态过滤) /// public async Task> GetRuntimesByDeviceCodesAsync(IEnumerable deviceCodes, IEnumerable? runtimeStatuses = null, CancellationToken cancellationToken = default) { @@ -258,32 +258,21 @@ public class CellularDeviceRuntimeRepository : BaseRepository(); } - // 构建SQL查询,支持多种状态过滤 - var sql = @" - SELECT DISTINCT ON (""DeviceCode"") * - FROM ""tb_cellular_device_runtimes"" - WHERE ""DeviceCode"" = ANY(@deviceCodes)"; - - var parameters = new List { deviceCodeList }; + // 构建查询条件 + Expression> predicate = r => deviceCodeList.Contains(r.DeviceCode); // 如果指定了运行时状态列表,添加状态过滤条件 if (runtimeStatuses != null && runtimeStatuses.Any()) { - sql += @" AND ""RuntimeStatus"" = ANY(@runtimeStatuses)"; - var statusValues = runtimeStatuses.Select(s => (int)s).ToList(); - parameters.Add(statusValues); + var statusList = runtimeStatuses.ToList(); + predicate = r => deviceCodeList.Contains(r.DeviceCode) && statusList.Contains(r.RuntimeStatus); } - sql += @" ORDER BY ""DeviceCode"", ""CreatedAt"" DESC"; - - var result = await ExecuteSqlQueryAsync(sql, parameters.ToArray(), cancellationToken); - - var statusFilterText = runtimeStatuses != null && runtimeStatuses.Any() - ? string.Join(",", runtimeStatuses.Select(s => s.ToString())) - : "无"; + // 执行单个查询 + var result = await QueryRepository.FindAsync(predicate, cancellationToken: cancellationToken); - _logger.LogDebug("批量获取设备运行时状态完成,设备数量: {DeviceCount}, 状态过滤: {RuntimeStatuses}, 返回记录数: {ResultCount}", - deviceCodeList.Count, statusFilterText, result.Count()); + _logger.LogDebug("批量获取设备运行时状态完成,设备数量: {DeviceCount}, 返回记录数: {ResultCount}", + deviceCodeList.Count, result.Count()); return result.ToList(); }