using Microsoft.AspNetCore.Mvc; using System.Net; using System.Net.Http.Headers; using Microsoft.Extensions.Hosting.Internal; using Microsoft.AspNetCore.Http.Extensions; using IStation.Untity; using Furion.DynamicApiController; using System.ComponentModel.DataAnnotations; using Mapster; namespace IStation.Application { /// /// EtaAnalyRunSpan /// [Route("Eta/Analy/RunSpan")] [ApiDescriptionSettings("Eta", Name = "能效运行区间分析", Order = 860)] public class EtaAnalyRunSpan_Controller : IDynamicApiController { /// /// 通过日期获取泵站下运行区间信息 /// [Route("GetInfoByStationIDOfDay@V1.0")] [HttpGet] public EtaRunSpanLogicInfo GetInfoByStationIDOfDay([FromQuery][Required] StationIDUnderCorpOfDayInput input) { var station = new Service.Station().GetByID(input.CorpID, input.StationID); if (station == null) { throw new Exception("未检索到泵站信息"); } var vm = new EtaRunSpanLogicInfo(); vm.CorpID = station.CorpID; vm.ObjectType = IStation.ObjectType.Station; vm.ObjectID = station.ID; vm.ObjectName = station.Name; var recordList = new Service.EtaMultiRealRecord().GetByObjectOfDay(input.CorpID, IStation.ObjectType.Station, input.StationID, input.Day); recordList = recordList?.OrderBy(x => x.DataTime).ToList(); vm.Records = recordList?.Select(x => new EtaRunSpanRecord(x)).ToList(); var pipeLineList = new Service.PipeLine().GetByBelongTypeAndBelongID(input.CorpID, IStation.ObjectType.Station, input.StationID); if (pipeLineList == null || pipeLineList.Count < 1) { return vm; } pipeLineList = pipeLineList.Where(x => x.Catalog == IStation.PipeLine.EnginePump && x.SerialNO != null).OrderBy(x => x.SerialNO.Value).ToList(); if (pipeLineList == null || pipeLineList.Count < 1) { return vm; } vm.Items = new List(); foreach (var pipe in pipeLineList) { var vm_item = new EtaRunSpanItem(); vm_item.CorpID = pipe.CorpID; vm_item.ObjectType = IStation.ObjectType.PipeLine; vm_item.ObjectID = pipe.ID; vm_item.ObjectName = pipe.Name; vm_item.Spans = new List(); vm.Items.Add(vm_item); if (recordList == null || recordList.Count < 1) { var vm_span = new EtaRunSpan(); vm_span.RunStatus = IStation.RunStatus.Shut; vm_span.StartTime = input.Day.Date; var end_time = input.Day.Date.AddDays(1); if (end_time > DateTime.Now) end_time = DateTime.Now; vm_span.EndTime = end_time; vm_span.Duration = (end_time - input.Day.Date).TotalSeconds; vm_item.Spans.Add(vm_span); continue; } var index = pipeLineList.IndexOf(pipe); foreach (var record in recordList) { var run_status = record.RunningFlag[index]; var vm_span = vm_item.Spans.LastOrDefault(); if (vm_span == null) { vm_span = new EtaRunSpan(); vm_span.RunStatus = run_status; vm_span.StartTime = record.DataTime; vm_item.Spans.Add(vm_span); } if (run_status == vm_span.RunStatus) { var end_time = record.DataTime.AddSeconds(record.Duration); if (end_time > input.Day.Date.AddDays(1)) end_time = input.Day.Date.AddDays(1); vm_span.EndTime = end_time; vm_span.Duration += record.Duration; } else { vm_span.EndTime = record.DataTime; var vm_span_next = new EtaRunSpan(); vm_span_next.RunStatus = run_status; vm_span_next.StartTime = record.DataTime; var end_time = record.DataTime.AddSeconds(record.Duration); if (end_time > input.Day.Date.AddDays(1)) end_time = input.Day.Date.AddDays(1); vm_span_next.EndTime = end_time; vm_span_next.Duration += record.Duration; vm_item.Spans.Add(vm_span_next); } } } return vm; } /// /// 通过日期获取泵站下运行区间信息 /// [Route("GetItemsByStationIDOfDay@V1.0")] [HttpGet] public List GetItemsByStationIDOfDay([FromQuery][Required] StationIDUnderCorpOfDayInput input) { var station = new Service.Station().GetByID(input.CorpID, input.StationID); if (station == null) { throw new Exception("未检索到泵站信息"); } var recordList = new Service.EtaMultiRealRecord().GetByObjectOfDay(input.CorpID, IStation.ObjectType.Station, input.StationID, input.Day); recordList = recordList?.OrderBy(x => x.DataTime).ToList(); var pipeLineList = new Service.PipeLine().GetByBelongTypeAndBelongID(input.CorpID, IStation.ObjectType.Station, input.StationID); if (pipeLineList == null || pipeLineList.Count < 1) { return default; } pipeLineList = pipeLineList.Where(x => x.Catalog == IStation.PipeLine.EnginePump && x.SerialNO != null).OrderBy(x => x.SerialNO.Value).ToList(); if (pipeLineList == null || pipeLineList.Count < 1) { return default; } var vm_list = new List(); foreach (var pipe in pipeLineList) { var vm_item = new EtaRunSpanItem(); vm_item.CorpID = pipe.CorpID; vm_item.ObjectType = IStation.ObjectType.PipeLine; vm_item.ObjectID = pipe.ID; vm_item.ObjectName = pipe.Name; vm_item.Spans = new List(); vm_list.Add(vm_item); if (recordList == null || recordList.Count < 1) { var vm_span = new EtaRunSpan(); vm_span.RunStatus = IStation.RunStatus.Shut; vm_span.StartTime = input.Day.Date; var end_time = input.Day.Date.AddDays(1); if (end_time > DateTime.Now) end_time = DateTime.Now; vm_span.EndTime = end_time; vm_span.Duration = (end_time - input.Day.Date).TotalSeconds; vm_item.Spans.Add(vm_span); continue; } var index = pipeLineList.IndexOf(pipe); foreach (var record in recordList) { var run_status = record.RunningFlag[index]; var vm_span = vm_item.Spans.LastOrDefault(); if (vm_span == null) { vm_span = new EtaRunSpan(); vm_span.RunStatus = run_status; vm_span.StartTime = record.DataTime; vm_item.Spans.Add(vm_span); } if (run_status == vm_span.RunStatus) { var end_time = record.DataTime.AddSeconds(record.Duration); if (end_time > input.Day.Date.AddDays(1)) end_time = input.Day.Date.AddDays(1); vm_span.EndTime = end_time; vm_span.Duration += record.Duration; } else { vm_span.EndTime = record.DataTime; var vm_span_next = new EtaRunSpan(); vm_span_next.RunStatus = run_status; vm_span_next.StartTime = record.DataTime; var end_time = record.DataTime.AddSeconds(record.Duration); if (end_time > input.Day.Date.AddDays(1)) end_time = input.Day.Date.AddDays(1); vm_span_next.EndTime = end_time; vm_span_next.Duration += record.Duration; vm_item.Spans.Add(vm_span_next); } } } return vm_list; } } }