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
|
{
|
/// <summary>
|
/// EtaAnalyRunSpan
|
/// </summary>
|
[Route("Eta/Analy/RunSpan")]
|
[ApiDescriptionSettings("Eta", Name = "能效运行区间分析", Order = 860)]
|
public class EtaAnalyRunSpan_Controller : IDynamicApiController
|
{
|
|
/// <summary>
|
/// 通过日期获取泵站下运行区间信息
|
/// </summary>
|
[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<EtaRunSpanItem>();
|
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<EtaRunSpan>();
|
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;
|
}
|
|
/// <summary>
|
/// 通过日期获取泵站下运行区间信息
|
/// </summary>
|
[Route("GetItemsByStationIDOfDay@V1.0")]
|
[HttpGet]
|
public List<EtaRunSpanItem> 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<EtaRunSpanItem>();
|
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<EtaRunSpan>();
|
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;
|
}
|
|
|
|
}
|
}
|