ningshuxia
2022-12-01 391e0e408d09e698850eb5daaef485d088612b4f
Application/IStation.Application.Run/energy_flow/EngineFlow_Controller.cs
@@ -9,6 +9,7 @@
using Mapster;
using IStation.Calculation;
using IStation.Model;
using System.Reflection.Metadata.Ecma335;
namespace IStation.Application
{
@@ -20,13 +21,12 @@
    public class EngineFlow_Controller : IDynamicApiController
    {
        /// <summary>
        /// 通过 LogicTreeID 获取某月的能流记录
        /// </summary>
        [Route("GetByLogicTreeIDOfMonth@V1.0")]
        [HttpGet]
        public EnergyFlowLogicalTreeItemDto GetByLogicTreeIDOfMonth
        public EnergyFlowLogicalTreeItemDto GetByLogicTreeIDOfMonth
            (
                long CorpID,
                long LogicTreeID,
@@ -34,18 +34,27 @@
                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)}";
@@ -69,11 +78,63 @@
                                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);
@@ -92,14 +153,20 @@
                        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);