|
|
@ -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(); |
|
|
|
} |
|
|
|