using MoviconWebApi.Entities; namespace MoviconWebApi.API.DeviceAlarmApi { public static class DeviceAlarmData { /// /// 获取设备报警列表 /// public static async Task<(List Items, long Total)> GetDeviceAlarmList( IFreeSql freeSql, DeviceAlarmRequest request) { try { var query = freeSql.Select() .WhereIf(!string.IsNullOrWhiteSpace(request.DeviceCode), a => a.DeviceCode == request.DeviceCode) .WhereIf(request.DeviceState > 0, a => a.DeviceState == request.DeviceState); // 处理时间范围查询 if (!string.IsNullOrWhiteSpace(request.StartTime) && DateTime.TryParse(request.StartTime, out var startTime)) { query = query.Where(a => a.StartTime >= startTime); } if (!string.IsNullOrWhiteSpace(request.EndTime) && DateTime.TryParse(request.EndTime, out var endTime)) { query = query.Where(a => a.EndTime <= endTime); } // 统计总数 var total = await query.CountAsync(); // 参数兜底与限制 var pageNo = request.PageNo <= 0 ? 1 : request.PageNo; var pageSize = request.PageSize <= 0 ? 100 : request.PageSize; if (pageSize > 100) pageSize = 100; var data = await query .OrderByDescending(a => a.StartTime) .Page(pageNo, pageSize) .ToListAsync(a => new DeviceAlarmResponse { DeviceCode = a.DeviceCode, DeviceName = a.DeviceName, DeviceState = a.DeviceState, AlarmMessage = a.AlarmMessage, StartTime = a.StartTime.ToString("yyyy-MM-dd HH:mm:ss"), EndTime = a.EndTime.ToString("yyyy-MM-dd HH:mm:ss") }); return (data ?? new List(), total); } catch (Exception ex) { throw new Exception($"获取设备报警数据失败: {ex.Message}", ex); } } /// /// 获取设备报警分页数据 /// public static async Task<(List Items, long Total)> GetDeviceAlarmPagedList( IFreeSql freeSql, DeviceAlarmPagedRequest request) { try { var query = freeSql.Select() .WhereIf(!string.IsNullOrWhiteSpace(request.DeviceCode), a => a.DeviceCode == request.DeviceCode) .WhereIf(request.DeviceState > 0, a => a.DeviceState == request.DeviceState); // 处理时间范围查询 if (!string.IsNullOrWhiteSpace(request.StartTime) && DateTime.TryParse(request.StartTime, out var startTime)) { query = query.Where(a => a.StartTime >= startTime); } if (!string.IsNullOrWhiteSpace(request.EndTime) && DateTime.TryParse(request.EndTime, out var endTime)) { query = query.Where(a => a.EndTime <= endTime); } var total = await query.CountAsync(); var data = await query .OrderByDescending(a => a.StartTime) .Page(request.PageNumber, request.PageSize) .ToListAsync(a => new DeviceAlarmResponse { DeviceCode = a.DeviceCode, DeviceName = a.DeviceName, DeviceState = a.DeviceState, AlarmMessage = a.AlarmMessage, StartTime = a.StartTime.ToString("yyyy-MM-dd HH:mm:ss"), EndTime = a.EndTime.ToString("yyyy-MM-dd HH:mm:ss") }); return (data ?? new List(), total); } catch (Exception ex) { throw new Exception($"获取设备报警分页数据失败: {ex.Message}", ex); } } /// /// 获取最新的设备报警记录 /// public static async Task GetLatestDeviceAlarm( IFreeSql freeSql, DeviceAlarmRequest request) { try { var query = freeSql.Select() .WhereIf(!string.IsNullOrWhiteSpace(request.DeviceCode), a => a.DeviceCode == request.DeviceCode) .WhereIf(request.DeviceState > 0, a => a.DeviceState == request.DeviceState); var data = await query .OrderByDescending(a => a.StartTime) .FirstAsync(a => new DeviceAlarmResponse { DeviceCode = a.DeviceCode, DeviceName = a.DeviceName, DeviceState = a.DeviceState, AlarmMessage = a.AlarmMessage, StartTime = a.StartTime.ToString("yyyy-MM-dd HH:mm:ss"), EndTime = a.EndTime.ToString("yyyy-MM-dd HH:mm:ss") }); return data; } catch (Exception ex) { throw new Exception($"获取最新设备报警数据失败: {ex.Message}", ex); } } /// /// 获取指定设备的活动报警(EndTime为最大值表示未结束) /// public static async Task> GetActiveAlarms( IFreeSql freeSql, string? deviceCode) { try { var query = freeSql.Select() .WhereIf(!string.IsNullOrWhiteSpace(deviceCode), a => a.DeviceCode == deviceCode) .Where(a => a.EndTime == DateTime.MaxValue || a.EndTime > DateTime.Now); var data = await query .OrderByDescending(a => a.StartTime) .ToListAsync(a => new DeviceAlarmResponse { DeviceCode = a.DeviceCode, DeviceName = a.DeviceName, DeviceState = a.DeviceState, AlarmMessage = a.AlarmMessage, StartTime = a.StartTime.ToString("yyyy-MM-dd HH:mm:ss"), EndTime = a.EndTime.ToString("yyyy-MM-dd HH:mm:ss") }); return data ?? new List(); } catch (Exception ex) { throw new Exception($"获取活动报警数据失败: {ex.Message}", ex); } } } }