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;
|
using IStation.Calculation;
|
|
namespace IStation.Application
|
{
|
/// <summary>
|
/// RunSpan
|
/// </summary>
|
[Route("Run/RunSpan/Mobile")]
|
[ApiDescriptionSettings("Run", Name = "运行区间", Order = 799)]
|
public class RunSpan_MobileController : IDynamicApiController
|
{
|
|
/// <summary>
|
/// 通过 StationID 获取某天的运行区间信息(手机)
|
/// </summary>
|
[Route("GetByStationIDOfDay@V1.0")]
|
[HttpGet]
|
public List<MonitorRunSpanItemMobileDto> GetByStationIDOfDay
|
(
|
[Required, Range(1, long.MaxValue, ErrorMessage = "CorpID 必须大于0")]
|
long CorpID,
|
[Required, Range(1, long.MaxValue, ErrorMessage = "StationID 必须大于0")]
|
long StationID,
|
[Required]
|
DateTime Day
|
)
|
{
|
var station = new Service.Station().GetByID(CorpID, StationID);
|
if (station == null)
|
{
|
return default;
|
}
|
|
var group_list = new Service.MonitorPointGroup().GetByBelongTypeAndBelongID(CorpID, IStation.ObjectType.Station, StationID);
|
if (group_list == null || group_list.Count < 1)
|
{
|
return default;
|
}
|
group_list = group_list.Where(x => x.Flags != null && x.Flags.Contains(LogicFlags.机泵))
|
.OrderBy(x => x.ParentIds == null ? 0 : x.ParentIds.Count).ThenBy(x => x.SortCode).ToList();
|
if (group_list == null || group_list.Count < 1)
|
{
|
return default;
|
}
|
|
var monitor_list = new Service.MonitorPoint()
|
.GetExSignalWithSignalTypeByBelongTypeAndBelongID
|
(CorpID, ObjectType.Station, StationID, Model.eMonitorType.General, Model.Monitor.eCronType.Real);
|
|
var vm_list = new List<MonitorRunSpanItemMobileDto>();
|
foreach (var group in group_list)
|
{
|
var vm_item = new MonitorRunSpanItemMobileDto();
|
vm_item.Name = group.Name;
|
vm_item.Spans = new List<MonitorRunSpanMobileDto>();
|
vm_list.Add(vm_item);
|
|
var monitor_run_list = monitor_list?.Where(x =>x.GroupID==group.ID && x.SignalList.First().SignalType.Identifier == SignalType.运行状态).ToList();
|
var monitor_run_default = monitor_run_list?.Find(x => x.Flags != null && x.Flags.Contains(LogicFlags.默认));
|
if (monitor_run_default == null)
|
monitor_run_default = monitor_run_list?.FirstOrDefault();
|
|
List<Model.MonitorRealRecordContent> record_list = null;
|
if (monitor_run_default != null)
|
{
|
record_list = new Service.MonitorRealRecord()
|
.GetContentBySignalIDOfDay(monitor_run_default.CorpID, monitor_run_default.ID, monitor_run_default.SignalList.First().ID, Day);
|
}
|
|
if (record_list == null || record_list.Count < 1)
|
{
|
var vm_span = new MonitorRunSpanMobileDto();
|
vm_span.RunStatus = RunStatus.Shut;
|
vm_span.StartTime = Day.Date;
|
var end_time = Day.Date.AddDays(1);
|
if (end_time > DateTime.Now)
|
end_time = DateTime.Now;
|
vm_span.EndTime = end_time;
|
vm_span.Duration = Math.Round((end_time - Day.Date).TotalSeconds,1);
|
vm_item.Spans.Add(vm_span);
|
continue;
|
}
|
|
foreach (var record in record_list)
|
{
|
var run_status = 0;
|
if (double.TryParse(record.DataValue, out double data_value))
|
{
|
run_status = data_value > 0 ? 1 : 0;
|
}
|
var vm_span = vm_item.Spans.LastOrDefault();
|
if (vm_span == null)
|
{
|
vm_span = new MonitorRunSpanMobileDto();
|
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;
|
if (end_time > Day.Date.AddDays(1))
|
end_time = Day.Date.AddDays(1);
|
vm_span.EndTime = end_time;
|
vm_span.Duration = Math.Round((end_time - vm_span.StartTime).TotalSeconds,1);
|
}
|
else
|
{
|
vm_span.EndTime = record.DataTime;
|
var vm_span_next = new MonitorRunSpanMobileDto();
|
vm_span_next.RunStatus = run_status;
|
vm_span_next.StartTime = record.DataTime;
|
var end_time = record.DataTime;
|
if (end_time > Day.Date.AddDays(1))
|
end_time = Day.Date.AddDays(1);
|
vm_span_next.EndTime = end_time;
|
vm_span_next.Duration +=Math.Round( (end_time - record.DataTime).TotalSeconds,1);
|
vm_item.Spans.Add(vm_span_next);
|
}
|
}
|
|
vm_item.RumTime = Math.Round(vm_item.Spans.Where(x => x.RunStatus == RunStatus.Run).Sum(x => x.Duration),1);
|
}
|
|
return vm_list;
|
}
|
|
|
|
|
|
|
|
|
|
}
|
}
|