| | |
| | | using Mapster; |
| | | using IStation.Calculation; |
| | | using IStation.Model; |
| | | using System.Reflection.Metadata.Ecma335; |
| | | |
| | | namespace IStation.Application |
| | | { |
| | |
| | | public class EngineFlow_Controller : IDynamicApiController |
| | | { |
| | | |
| | | |
| | | /// <summary> |
| | | /// 通过 LogicTreeID 获取某月的能流记录 |
| | | /// </summary> |
| | | [Route("GetByLogicTreeIDOfMonth@V1.0")] |
| | | [HttpGet] |
| | | public EnergyFlowLogicalTreeItemDto GetByLogicTreeIDOfMonth |
| | | public EnergyFlowLogicalTreeItemDto GetByLogicTreeIDOfMonth |
| | | ( |
| | | long CorpID, |
| | | long LogicTreeID, |
| | |
| | | int Month |
| | | ) |
| | | { |
| | | var cacheKey = $"Run_Energy_Flow_GetByLogicTreeIDOfMonth_{CorpID}_{LogicTreeID}"; |
| | | 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); |
| | | 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<EnergyFlowLogicalTreeItemDto>(); |
| | | 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)}"; |
| | |
| | | vmEnginePump.LogicalName = enginePumpPipe.Name; |
| | | vmEnginePump.LogicalType = IStation.ObjectType.PipeLine; |
| | | vmEnginePump.LogicalID = enginePumpPipe.ID; |
| | | vmEnginePump.StatisticValue = new Random().Next(100, 1000); |
| | | vmEnginePump.Children = new List<EnergyFlowLogicalTreeItemDto>(); |
| | | |
| | | 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); |
| | |
| | | var validChildren = vm.Children.Where(x => x.StatisticValue.HasValue).ToList(); |
| | | if (validChildren.Count > 0) |
| | | { |
| | | vm.StatisticValue = validChildren.Sum(x => x.StatisticValue.Value); |
| | | 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}"); |
| | | return vmList.Find(x => x.ID == $"{IStation.ObjectType.LogicTree}_{LogicTreeID}"); |
| | | |
| | | |
| | | }, CacheHelper.CacheLevel2); |