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>
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>();
}
// 构建SQL查询,支持多种状态过滤
var sql = @"
SELECT DISTINCT ON (""DeviceCode"") *
FROM ""tb_cellular_device_runtimes""
WHERE ""DeviceCode"" = ANY(@deviceCodes)";
var parameters = new List<object> { deviceCodeList };
// 构建查询条件
Expression<Func<CellularDeviceRuntime, bool>> 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<CellularDeviceRuntime>(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();
}

Loading…
Cancel
Save