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