Browse Source

修复 校验设备状态sql

feature/x1-web-request
root 2 days ago
parent
commit
7918288d37
  1. 29
      src/X1.Infrastructure/Repositories/Device/CellularDeviceRuntimeRepository.cs

29
src/X1.Infrastructure/Repositories/Device/CellularDeviceRuntimeRepository.cs

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

Loading…
Cancel
Save