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;
}
}
}