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
{
///
/// RunStatus
///
[Route("Run/RunStatus")]
[ApiDescriptionSettings("Run", Name = "运行状态", Order = 900)]
public class RunStatus_Controller : IDynamicApiController
{
///
/// 通过 MonitorPointGroupID 获取最后一条记录
///
[Route("GetLastRecordByMonitorPointGroupID@V1.0")]
[HttpGet]
public MonitorObjectLastRunStatusRecord GetLastRecordByMonitorPointGroupID
(
[Required, Range(1, long.MaxValue, ErrorMessage = "CorpID 必须大于0")]
long CorpID,
[Required, Range(1, long.MaxValue, ErrorMessage = "MonitorPointGroupID 必须大于0")]
long MonitorPointGroupID
)
{
var monitor_group = new Service.MonitorPointGroup().GetByID(CorpID, MonitorPointGroupID);
if (monitor_group == null)
{
return default;
}
var monitor_list = new Service.MonitorPoint().GetExSignalWithSignalTypeByGroupID
(CorpID, MonitorPointGroupID, Model.eMonitorType.General, Model.Monitor.eCronType.Real);
var monitor_run_list = monitor_list?.Where(x => x.SignalList.First().SignalType.Identifier == IStation.SignalType.运行状态).ToList();
var monitor_run_default = monitor_run_list?.Find(x => x.Flags != null && x.Flags.Contains(IStation.LogicFlags.默认));
if (monitor_run_default == null)
monitor_run_default = monitor_run_list?.FirstOrDefault();
var vm = new MonitorObjectLastRunStatusRecord();
vm.CorpID = monitor_group.CorpID;
vm.ObjectType = IStation.ObjectType.MonitorPointGroup;
vm.ObjectID = monitor_group.ID;
vm.ObjectName = monitor_group.Name;
vm.RunStatus = IStation.RunStatus.Shut;
if (monitor_run_default != null)
{
var last_record = new Service.MonitorRealRecord().GetLastRecord(monitor_run_default.CorpID, monitor_run_default.ID, monitor_run_default.SignalList.First().ID);
if (last_record != null)
{
vm.DataTime =last_record.DataTime;
if (double.TryParse(last_record.DataValue, out double data_value))
{
vm.RunStatus = data_value > 0 ? IStation.RunStatus.Run : IStation.RunStatus.Shut;
}
}
}
return vm;
}
///
/// 通过 MonitorPointGroupIds 获取最后一条记录
///
[Route("GetLastRecordByMonitorPointGroupIds@V1.0")]
[HttpGet]
public List GetLastRecordByMonitorPointGroupIds([FromQuery][Required] MonitorPointGroupIdsUnderCorpInput input)
{
var ids = LongListHelper.ToList(input.MonitorPointGroupIds);
var monitor_group_list = new Service.MonitorPointGroup().GetByIds(input.CorpID, ids);
if (monitor_group_list == null || monitor_group_list.Count < 1)
{
return default;
}
var service_monitor = new Service.MonitorPoint();
var service_record = new Service.MonitorRealRecord();
var vm_list = new List();
foreach (var monitor_group in monitor_group_list)
{
var monitor_list = new Service.MonitorPoint().GetExSignalWithSignalTypeByGroupID
(input.CorpID, monitor_group.ID, Model.eMonitorType.General, Model.Monitor.eCronType.Real);
var monitor_run_list = monitor_list?.Where(x => x.SignalList.First().SignalType.Identifier == IStation.SignalType.运行状态).ToList();
var monitor_run_default = monitor_run_list?.Find(x => x.Flags != null && x.Flags.Contains(IStation.LogicFlags.默认));
if (monitor_run_default == null)
monitor_run_default = monitor_run_list?.FirstOrDefault();
var vm = new MonitorObjectLastRunStatusRecord();
vm.CorpID = monitor_group.CorpID;
vm.ObjectType = IStation.ObjectType.MonitorPointGroup;
vm.ObjectID = monitor_group.ID;
vm.ObjectName = monitor_group.Name;
vm.RunStatus = IStation.RunStatus.Shut;
vm_list.Add(vm);
if (monitor_run_default != null)
{
var last_record = new Service.MonitorRealRecord().GetLastRecord(monitor_run_default.CorpID, monitor_run_default.ID, monitor_run_default.SignalList.First().ID);
if (last_record != null)
{
vm.DataTime = last_record.DataTime;
if (double.TryParse(last_record.DataValue, out double data_value))
{
vm.RunStatus = data_value > 0 ? IStation.RunStatus.Run : IStation.RunStatus.Shut;
}
}
}
}
return vm_list;
}
///
/// 通过 ProductID 获取
///
[Route("GetByProductID@V1.0")]
[HttpGet]
public int GetByProductID([FromQuery][Required] ProductIDUnderCorpInput input)
{
var corpId = input.CorpID;
var productId = input.ProductID;
var monitorMappingList = new Service.MonitorPointMapping().GetByObjectTypeAndObjectID(corpId, ObjectType.Product, productId);
if (monitorMappingList == null || monitorMappingList.Count < 1)
return RunStatus.UnKnown;
var monitorPointIds = monitorMappingList.Select(x => x.MonitorPointID).Distinct().ToList();
var monitorList = new Service.MonitorPoint().GetExSignalWithSignalTypeByIds(corpId, monitorPointIds, Model.eMonitorType.General, Model.Monitor.eCronType.Real);
if (monitorList == null || monitorList.Count < 1)
return RunStatus.UnKnown;
var monitorRunList = monitorList.Where(x => x.SignalList.First().SignalType.Identifier == IStation.SignalType.运行状态).ToList();
var monitorRunDefault = monitorRunList?.Find(x => x.Flags != null && x.Flags.Contains(IStation.LogicFlags.默认));
if (monitorRunDefault == null)
monitorRunDefault = monitorRunList?.FirstOrDefault();
if (monitorRunDefault == null)
return RunStatus.UnKnown;
var lastRecord = new Service.MonitorRealRecord().GetLastRecord(monitorRunDefault.CorpID, monitorRunDefault.ID, monitorRunDefault.SignalList.First().ID);
if (lastRecord == null)
return RunStatus.UnKnown;
if (!int.TryParse(lastRecord.DataValue, out int dataValue))
return RunStatus.UnKnown;
return dataValue;
}
///
/// 通过 ProductIds 获取(手机)
///
[Route("GetByProductIds@V1.0")]
[HttpGet]
public List GetByProductIds([FromQuery][Required] ProductIdsUnderCorpInput input)
{
var corpId = input.CorpID;
var productIds = LongListHelper.ToList(input.ProductIds);
var vmList = new List();
foreach (var productId in productIds)
{
var vm = new ProductRunStatusLogicDto();
vm.ProductID = productId;
vm.RunStatus = RunStatus.UnKnown;
vmList.Add(vm);
var monitorMappingList = new Service.MonitorPointMapping().GetByObjectTypeAndObjectID(corpId, ObjectType.Product, productId);
if (monitorMappingList == null || monitorMappingList.Count < 1)
continue;
var monitorPointIds = monitorMappingList.Select(x => x.MonitorPointID).Distinct().ToList();
var monitorList = new Service.MonitorPoint().GetExSignalWithSignalTypeByIds(corpId, monitorPointIds, Model.eMonitorType.General, Model.Monitor.eCronType.Real);
if (monitorList == null || monitorList.Count < 1)
continue;
var monitorRunList = monitorList.Where(x => x.SignalList.First().SignalType.Identifier == IStation.SignalType.运行状态).ToList();
var monitorRunDefault = monitorRunList?.Find(x => x.Flags != null && x.Flags.Contains(IStation.LogicFlags.默认));
if (monitorRunDefault == null)
monitorRunDefault = monitorRunList?.FirstOrDefault();
if (monitorRunDefault == null)
continue;
var lastRecord = new Service.MonitorRealRecord().GetLastRecord(monitorRunDefault.CorpID, monitorRunDefault.ID, monitorRunDefault.SignalList.First().ID);
if (lastRecord == null)
continue;
if (!int.TryParse(lastRecord.DataValue, out int dataValue))
continue;
vm.RunStatus = dataValue;
}
return vmList;
}
}
}