diff --git a/Controllers/AlarmController.cs b/Controllers/AlarmController.cs index ad08f7f..f698f0b 100644 --- a/Controllers/AlarmController.cs +++ b/Controllers/AlarmController.cs @@ -29,6 +29,18 @@ namespace LY.App.Controllers 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 b2ea08f..f8acef8 100644 --- a/Service/AlarmService.cs +++ b/Service/AlarmService.cs @@ -7,6 +7,8 @@ using Mapster; using NetTopologySuite.Geometries; using NetTopologySuite.IO; using SqlSugar; +using StackExchange.Redis; +using System.Text; namespace LY.App.Service { @@ -372,7 +374,64 @@ namespace LY.App.Service .ToPageListAsync(input.pageNum, input.pageSize, total); 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 total = _db.Ado.GetInt(string.Format(coutsql, tablesql)); + //var ids = _db.Ado.SqlQuery(string.Format(page, tablesql, (input.pageNum - 1) * input.pageSize, input.pageSize)); + + 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 + } + }; + } /// /// 报表统计