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