using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using IStation.IEtaCalculation; using IStation.Model; namespace IStation.EtaCalculation { /// /// /// public class AnalyCalculatorBase { /// /// 计算 /// /// 分析上下文 /// EtaMultiRealRecordPure 为基类 EtaLogicRealRecordPure、EtaMultiRealRecordPure、EtaSingleRealRecordPure都集成自此基类 /// /// public virtual bool Calculate(Model.EtaCorpAnalyContext context, Action< List, List, List, string> handler) { return false; } #region 所有泵站上下文 /// /// 所有泵站上下文 /// protected List _allStationContextList = null; /// /// 获取泵站列表 /// /// /// 预计泵站数量,因为此类比较大,尽量初始化时给定数量,避免内存浪费 protected void InitialStationList(IStation.Model.EtaCorpAnalyContext context,int station_num) { _allStationContextList = new List(station_num); foreach (var logicCatalogContextItem in context.LogicCatalogContextItems) { if (logicCatalogContextItem.UseStatus == eUseStatus.Enable) { foreach (var node in logicCatalogContextItem.LogicTreeContextItems) { ExtractStationFromContext(node,ref _allStationContextList); } } } } /// /// 迭代 /// /// /// private void ExtractStationFromContext(EtaLogicTreeAnalyContextItem parent_context_item,ref List station_list) { if (parent_context_item.IsStation()) { var station = parent_context_item.LogicContextItem as EtaStationAnalyContextItem; if (station != null && station.UseStatus == eUseStatus.Enable && station.MonitorStatus == eMonitorStatus.Enable) { var find = station_list.Find(x => x.ID == station.ID); if (find == null)//避免重复加入 station_list.Add(station); } } else { foreach (var child in parent_context_item.Children) { ExtractStationFromContext(child,ref station_list); } } } /// /// /// /// /// /// private void ExtractChildIdFromContext(EtaLogicTreeAnalyContextItem context_item,ref List logic_Ids,ref List sation_ids) { if (context_item.IsStation()) { var station = context_item.LogicContextItem as EtaStationAnalyContextItem; if (station != null && station.UseStatus == eUseStatus.Enable && station.MonitorStatus == eMonitorStatus.Enable) { if (sation_ids.Contains(station.ID))//避免重复加入 sation_ids.Add(station.ID); } } else { var logic = context_item.LogicContextItem as EtaLogicAreaAnalyContextItem; if (!logic_Ids.Contains(logic.ID))//避免重复加入 logic_Ids.Add(logic.ID); foreach (var child in context_item.Children) { ExtractChildIdFromContext(child,ref logic_Ids,ref sation_ids); } } } #endregion } }