diff --git a/Controllers/AlarmController.cs b/Controllers/AlarmController.cs index ad08f7f..f2e4025 100644 --- a/Controllers/AlarmController.cs +++ b/Controllers/AlarmController.cs @@ -28,6 +28,17 @@ namespace LY.App.Controllers var result = await _alarmService.GetPage(input); return Ok(result); } + /// + ///列表快速分页 + /// + /// + /// + [HttpGet("list1")] + public async Task List1([FromQuery] AlarmReq input) + { + var result = await _alarmService.CreateHistoryPage(input); + return Ok(result); + } /// /// 新增告警 diff --git a/Service/AlarmService.cs b/Service/AlarmService.cs index 951bb77..c60ad14 100644 --- a/Service/AlarmService.cs +++ b/Service/AlarmService.cs @@ -389,7 +389,63 @@ namespace LY.App.Service } return Tuple.Create(total.Value, items); } + /// + /// 快速分页 + /// + /// + /// + public async Task CreateHistoryPage(AlarmReq input) + { + var tables = _db.SplitHelper().GetTables(); + string coutsql = @" SELECT COUNT(*) + FROM ( + SELECT batch_id + FROM ( + {0} + ) AS unionTable + GROUP BY batch_id + ) AS CountTable;"; + string page = @" SELECT * + FROM ( + SELECT batch_id + FROM ( + {0} + ) AS unionTable + GROUP BY batch_id ORDER BY batch_id desc LIMIT {1},{2} + ) AS CountTable "; + + string tablesql = string.Join(" UNION ALL ", tables.Select(item => $"SELECT batch_id FROM {item.TableName} ")); + if (!string.IsNullOrEmpty(input.sn)) + { + tablesql = string.Join(" UNION ALL ", tables.Select(item => $"SELECT batch_id FROM {item.TableName} where serial_number like '%{input.sn}%' ")); + } + var pageitem = await _db.Ado.SqlQueryAsync(string.Format(coutsql, tablesql) + string.Format(page, tablesql, (input.pageNum - 1) * input.pageSize, input.pageSize)); + + var query = await _db.Queryable() + .Where(s => pageitem.Item2.Contains(s.BatchId)).SplitTable() + .GroupBy(s => new { s.BatchId, s.serial_number, s.device_type, s.positionId, s.PostionName, s.freq }) + .Select(st => new AlarmRepDto + { + batchId = st.BatchId.ToString(), + startTime = SqlFunc.AggregateMin(st.CreateTime), + endTime = SqlFunc.AggregateMax(st.CreateTime), + sn = st.serial_number, + Frequency = SqlFunc.AggregateMax(st.freq), + duration = (SqlFunc.AggregateMax(st.CreateTime) - SqlFunc.AggregateMin(st.CreateTime)).TotalSeconds, + model = st.device_type, + IsWhitelist = SqlFunc.AggregateMax(st.IsWhitelist) + }).OrderByDescending(s => s.batchId).ToListAsync(); + return new ApiResult() + { + code = 0, + data = new + { + total = pageitem.Item1.First(), + items = query + } + }; + } /// /// 报表统计