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; using System.Reflection.Metadata.Ecma335; namespace IStation.Application { /// /// EnergyFlow /// [Route("Run/Energy/Flow")] [ApiDescriptionSettings("Run", Name = "能流", Order = 299)] public class EngineFlow_Controller : IDynamicApiController { /// /// 通过 LogicTreeID 获取某月的能流记录 /// [Route("GetByLogicTreeIDOfMonth@V1.0")] [HttpGet] public EnergyFlowLogicalTreeItemDto GetByLogicTreeIDOfMonth ( long CorpID, long LogicTreeID, int Year, int Month ) { var currentTime= DateTime.Now; var currentYear = currentTime.Year; var currentMonth = currentTime.Month; if (currentYear == Year && currentMonth == Month) return new EnergyFlowLogicalTreeItemDto(); var cacheKey = $"Run_Energy_Flow_GetByLogicTreeIDOfMonth_{CorpID}_{LogicTreeID}_{Year}_{Month}"; var vm_list = MemoryCacheHelper.GetSet(cacheKey, () => { var logicTreeList = new Service.LogicTree().GetExChildAndSelfByID(CorpID, LogicTreeID); if (logicTreeList == null || logicTreeList.Count < 1) return default; #region 统计 var bllMonitor = new Service.MonitorPoint(); var bllMonitorMappings = new Service.MonitorPointMapping(); var bllMonitorMonthRecord = new Service.MonitorMonthRecord(); var vmList = new List(); foreach (var logicTree in logicTreeList) { var vm = new EnergyFlowLogicalTreeItemDto(); vm.ID = $"{IStation.ObjectType.LogicTree}_{logicTree.ID}"; vm.ParentID = $"{IStation.ObjectType.LogicTree}_{TreeParentIdsHelper.GetLastParentID(logicTree.ParentIds)}"; vm.LogicalName = logicTree.LogicName; vm.LogicalType = logicTree.LogicType; vm.LogicalID = logicTree.LogicID; vm.StatisticValue = null; vm.Children = new List(); vmList.Add(vm); if (vm.LogicalType == IStation.ObjectType.Station) { var enginePumpPipeList = new Service.PipeLine().GetEnginePumpListByBelongTypeAndBelongID(CorpID, logicTree.LogicType, logicTree.LogicID); if (enginePumpPipeList != null && enginePumpPipeList.Count > 0) { foreach (var enginePumpPipe in enginePumpPipeList) { var vmEnginePump = new EnergyFlowLogicalTreeItemDto(); vmEnginePump.ID = $"{IStation.ObjectType.PipeLine}_{enginePumpPipe.ID}"; vmEnginePump.ParentID = vm.ID; vmEnginePump.LogicalName = enginePumpPipe.Name; vmEnginePump.LogicalType = IStation.ObjectType.PipeLine; vmEnginePump.LogicalID = enginePumpPipe.ID; vmEnginePump.Children = new List(); var enginePumpPipeMonitorMappings = bllMonitorMappings.GetByObjectTypeAndObjectID(CorpID, vmEnginePump.LogicalType, vmEnginePump.LogicalID); if (enginePumpPipeMonitorMappings != null && enginePumpPipeMonitorMappings.Count > 0) { var mappingIds = enginePumpPipeMonitorMappings.Select(x => x.MonitorPointID).ToList(); var enginePumpPipeMonitorList = bllMonitor.GetExSignalWithSignalTypeByIds(CorpID, mappingIds); enginePumpPipeMonitorList = enginePumpPipeMonitorList?.Where(x => x.MonitorType == eMonitorType.General && x.SourceType == Model.Monitor.eSourceType.Analyse && x.CronType == Model.Monitor.eCronType.EachMonth).ToList(); enginePumpPipeMonitorList = enginePumpPipeMonitorList?.Where(x => x.SignalList != null && x.SignalList.Count > 0).ToList(); if (enginePumpPipeMonitorList != null && enginePumpPipeMonitorList.Count > 0) { var enginePumpPipeElMonitorList = enginePumpPipeMonitorList.Where(x => x.SignalList.Exists(x => x.SignalType.Identifier == IStation.SignalType.有功电度)).ToList(); if (enginePumpPipeElMonitorList != null && enginePumpPipeElMonitorList.Count > 0) { var enginePumpPipeElMonitor = enginePumpPipeElMonitorList.Find(x => x.Flags != null && x.Flags.Contains(IStation.LogicFlags.默认)); if (enginePumpPipeElMonitor == null) enginePumpPipeElMonitor = enginePumpPipeElMonitorList.First(); var enginePumpPipeElValues = bllMonitorMonthRecord.GetByMonitorPointIDOfMonth(CorpID, enginePumpPipeElMonitor.ID, Year, Month); vmEnginePump.StatisticValue = enginePumpPipeElValues?.Sum(x => { if (double.TryParse(x.DataValue, out double enginePumpPipeElValue)) { return enginePumpPipeElValue; } return 0; }); } } } vm.Children.Add(vmEnginePump); } } var vmMonitorList = bllMonitor.GetExSignalWithSignalTypeByBelongTypeAndBelongID(CorpID, vm.LogicalType, vm.LogicalID); vmMonitorList = vmMonitorList?.Where(x => x.MonitorType == eMonitorType.General && x.SourceType == Model.Monitor.eSourceType.Analyse && x.CronType == Model.Monitor.eCronType.EachMonth).ToList(); vmMonitorList = vmMonitorList?.Where(x => x.SignalList != null && x.SignalList.Count > 0).ToList(); if (vmMonitorList != null && vmMonitorList.Count > 0) { var vmElMonitorList = vmMonitorList.Where(x => x.SignalList.Exists(x => x.SignalType.Identifier == IStation.SignalType.有功电度)).ToList(); if (vmElMonitorList != null && vmElMonitorList.Count > 0) { var vmElMonitor = vmElMonitorList.Find(x => x.Flags != null && x.Flags.Contains(IStation.LogicFlags.总站)); if (vmElMonitor != null) { var vmElValues = bllMonitorMonthRecord.GetByMonitorPointIDOfMonth(CorpID, vmElMonitor.ID, Year, Month); vm.StatisticValue = vmElValues?.Sum(x => { if (double.TryParse(x.DataValue, out double vmElValue)) { return vmElValue; } return 0; }); } } } } var vmParent = vmList.Find(x => x.ID == vm.ParentID); if (vmParent != null) { vmParent.Children.Add(vm); } } logicTreeList.Reverse(); foreach (var logicTree in logicTreeList) { var vm = vmList.Find(x => x.ID == $"{IStation.ObjectType.LogicTree}_{logicTree.ID}"); if (vm.Children.Count > 0) { var validChildren = vm.Children.Where(x => x.StatisticValue.HasValue).ToList(); if (validChildren.Count > 0) { var validChildrenStatisticValue = validChildren.Sum(x => x.StatisticValue.Value); /*if (vm.LogicalType == IStation.ObjectType.Station) { if (vm.StatisticValue > validChildrenStatisticValue) continue; }*/ vm.StatisticValue = validChildrenStatisticValue; } } } #endregion return vmList.Find(x => x.ID == $"{IStation.ObjectType.LogicTree}_{LogicTreeID}"); }, CacheHelper.CacheLevel2); return vm_list; } } }