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;
using IStation.Model;
namespace IStation.Application
{
///
/// MonitorKpi
///
[Route("Run/MonitorKpi")]
[ApiDescriptionSettings("Run", Name = "监测KPI", Order = 700)]
public class MonitorKpi_Controller : IDynamicApiController
{
///
/// 通过 StationID 获取泵站面板信息
///
[Route("GetStationPanelInfoByCorpID@V1.0")]
[HttpGet]
public List GetStationPanelInfoByCorpID
(
[Required, Range(1, long.MaxValue, ErrorMessage = "CorpID 必须大于0")]
long CorpID,
int KpiCount = 4
)
{
var station_list = new Service.Station().GetByCorpID(CorpID);
if (station_list == null || station_list.Count < 1)
{
return default;
}
var service_record = new Service.MonitorRealRecord();
var vm_list = new List();
foreach (var station in station_list)
{
var vm = new MonitorPanelKpiInfo();
vm.CorpID = station.CorpID;
vm.ObjectType = IStation.ObjectType.Station;
vm.ObjectID = station.ID;
vm.ObjectName = station.Name;
vm.LastKpiRecordList = new List();
vm.LastRunStatusRecordList = new List();
vm_list.Add(vm);
//最后kpi记录列表
var monitor_list = new Service.MonitorPoint().GetExSignalWithSignalTypeByBelongTypeAndBelongID
(CorpID, IStation.ObjectType.Station, station.ID, Model.eMonitorType.General, Model.Monitor.eCronType.Real);
var monitor_kpi_list = monitor_list?.Where(x => x.Flags != null && x.Flags.Contains(LogicFlags.KPI))
.OrderBy(x => x.ImportanceIndex == null ? int.MaxValue : x.ImportanceIndex.Value).ToList();
if (monitor_kpi_list != null)
{
var take_count = monitor_kpi_list.Count > KpiCount ? KpiCount : monitor_kpi_list.Count;
monitor_kpi_list = monitor_kpi_list.Take(take_count).ToList();
foreach (var monitor_kpi in monitor_kpi_list)
{
var vm_kpi_last_record = new MonitorKpiLastRecord();
vm_kpi_last_record.CorpID = monitor_kpi.CorpID;
vm_kpi_last_record.MonitorPointID = monitor_kpi.ID;
vm_kpi_last_record.SignalID = monitor_kpi.SignalList.First().ID;
vm_kpi_last_record.SignalType = monitor_kpi.SignalList.First().SignalType.Identifier;
vm_kpi_last_record.Name = monitor_kpi.Name;
vm_kpi_last_record.Unit = monitor_kpi.SignalList.First().SignalType.GetEnUnitName();
vm_kpi_last_record.DecimalPlaces = monitor_kpi.SignalList.First().DecimalPlaces;
var last_record = service_record.GetLastRecord(vm_kpi_last_record.CorpID, vm_kpi_last_record.MonitorPointID, vm_kpi_last_record.SignalID);
if (last_record != null)
{
vm_kpi_last_record.SrcTime = last_record.SrcTime.ToString("yyyy-MM-dd HH:mm:ss");
vm_kpi_last_record.SrcValue = last_record.SrcValue;
vm_kpi_last_record.DataTime = last_record.DataTime.ToString("yyyy-MM-dd HH:mm:ss");
vm_kpi_last_record.DataValue = last_record.DataValue;
vm_kpi_last_record.DataStatus = last_record.DataStatus;
}
vm.LastKpiRecordList.Add(vm_kpi_last_record);
}
}
//最后运行状态记录列表
var monitor_group_list = new Service.MonitorPointGroup().GetByBelongTypeAndBelongID(CorpID, IStation.ObjectType.Station, station.ID);
if (monitor_group_list != null && monitor_group_list.Count > 0)
{
var monitor_engine_pump_group_list = monitor_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 (monitor_engine_pump_group_list != null && monitor_engine_pump_group_list.Count > 0)
{
foreach (var engine_pump_group in monitor_engine_pump_group_list)
{
var vm_run_status_last_record = new MonitorObjectLastRunStatusRecord();
vm_run_status_last_record.CorpID = engine_pump_group.CorpID;
vm_run_status_last_record.ObjectType = IStation.ObjectType.MonitorPointGroup;
vm_run_status_last_record.ObjectID = engine_pump_group.ID;
vm_run_status_last_record.ObjectName = engine_pump_group.Name;
vm_run_status_last_record.RunStatus = IStation.RunStatus.Shut;
var monitor_run_list = monitor_list?.Where(x =>x.GroupID== engine_pump_group.ID && x.SignalList.First().SignalType.Identifier == IStation.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();
if (monitor_run_default != null)
{
var last_record = service_record.GetLastRecord(monitor_run_default.CorpID, monitor_run_default.ID, monitor_run_default.SignalList.First().ID);
if (last_record != null)
{
vm_run_status_last_record.DataTime = last_record.DataTime;
if (double.TryParse(last_record.DataValue, out double data_value))
{
vm_run_status_last_record.RunStatus = data_value > 0 ? IStation.RunStatus.Run : IStation.RunStatus.Shut;
}
}
}
vm.LastRunStatusRecordList.Add(vm_run_status_last_record);
}
}
}
}
return vm_list;
}
///
/// 通过 StationID 获取面板信息
///
[Route("GetPanelInfoByStationID@V1.0")]
[HttpGet]
public MonitorPanelKpiInfo GetPanelInfoByStationID
(
[Required, Range(1, long.MaxValue, ErrorMessage = "CorpID 必须大于0")]
long CorpID,
[Required, Range(1, long.MaxValue, ErrorMessage = "StationID 必须大于0")]
long StationID,
int KpiCount = 4
)
{
var station = new Service.Station().GetByID(CorpID, StationID);
if (station == null)
{
return default;
}
var service_record = new Service.MonitorRealRecord();
var vm = new MonitorPanelKpiInfo();
vm.CorpID = station.CorpID;
vm.ObjectType = IStation.ObjectType.Station;
vm.ObjectID = station.ID;
vm.ObjectName = station.Name;
vm.LastKpiRecordList = new List();
vm.LastRunStatusRecordList = new List();
//最后kpi记录列表
var monitor_list = new Service.MonitorPoint().GetExSignalWithSignalTypeByBelongTypeAndBelongID
(CorpID, IStation.ObjectType.Station, station.ID, Model.eMonitorType.General, Model.Monitor.eCronType.Real);
var monitor_kpi_list = monitor_list?.Where(x => x.Flags != null && x.Flags.Contains(LogicFlags.KPI))
.OrderBy(x => x.ImportanceIndex == null ? int.MaxValue : x.ImportanceIndex.Value).ToList();
if (monitor_kpi_list != null)
{
var take_count = monitor_kpi_list.Count > KpiCount ? KpiCount : monitor_kpi_list.Count;
monitor_kpi_list = monitor_kpi_list.Take(take_count).ToList();
foreach (var monitor_kpi in monitor_kpi_list)
{
var vm_kpi_last_record = new MonitorKpiLastRecord();
vm_kpi_last_record.CorpID = monitor_kpi.CorpID;
vm_kpi_last_record.MonitorPointID = monitor_kpi.ID;
vm_kpi_last_record.SignalID = monitor_kpi.SignalList.First().ID;
vm_kpi_last_record.SignalType = monitor_kpi.SignalList.First().SignalType.Identifier;
vm_kpi_last_record.Name = monitor_kpi.Name;
vm_kpi_last_record.Unit = monitor_kpi.SignalList.First().SignalType.GetEnUnitName();
vm_kpi_last_record.DecimalPlaces = monitor_kpi.SignalList.First().DecimalPlaces;
var last_record = service_record.GetLastRecord(vm_kpi_last_record.CorpID, vm_kpi_last_record.MonitorPointID, vm_kpi_last_record.SignalID);
if (last_record != null)
{
vm_kpi_last_record.SrcTime = last_record.SrcTime.ToString("yyyy-MM-dd HH:mm:ss");
vm_kpi_last_record.SrcValue = last_record.SrcValue;
vm_kpi_last_record.DataTime = last_record.DataTime.ToString("yyyy-MM-dd HH:mm:ss");
vm_kpi_last_record.DataValue = last_record.DataValue;
vm_kpi_last_record.DataStatus = last_record.DataStatus;
}
vm.LastKpiRecordList.Add(vm_kpi_last_record);
}
}
//最后运行状态记录列表
var monitor_group_list = new Service.MonitorPointGroup().GetByBelongTypeAndBelongID(CorpID, IStation.ObjectType.Station, station.ID);
if (monitor_group_list != null && monitor_group_list.Count > 0)
{
var monitor_engine_pump_group_list = monitor_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 (monitor_engine_pump_group_list != null && monitor_engine_pump_group_list.Count > 0)
{
foreach (var engine_pump_group in monitor_engine_pump_group_list)
{
var vm_run_status_last_record = new MonitorObjectLastRunStatusRecord();
vm_run_status_last_record.CorpID = engine_pump_group.CorpID;
vm_run_status_last_record.ObjectType = IStation.ObjectType.MonitorPointGroup;
vm_run_status_last_record.ObjectID = engine_pump_group.ID;
vm_run_status_last_record.ObjectName = engine_pump_group.Name;
vm_run_status_last_record.RunStatus = IStation.RunStatus.Shut;
var monitor_run_list = monitor_list?.Where(x =>x.GroupID== engine_pump_group.ID&& x.SignalList.First().SignalType.Identifier == IStation.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();
if (monitor_run_default != null)
{
var last_record = service_record.GetLastRecord(monitor_run_default.CorpID, monitor_run_default.ID, monitor_run_default.SignalList.First().ID);
if (last_record != null)
{
vm_run_status_last_record.DataTime = last_record.DataTime;
if (double.TryParse(last_record.DataValue, out double data_value))
{
vm_run_status_last_record.RunStatus = data_value > 0 ? IStation.RunStatus.Run : IStation.RunStatus.Shut;
}
}
}
vm.LastRunStatusRecordList.Add(vm_run_status_last_record);
}
}
}
return vm;
}
}
}