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
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public class AnalyCalculatorBase
|
{
|
/// <summary>
|
/// 计算
|
/// </summary>
|
/// <param name="context">分析上下文</param>
|
/// <param name="handler">EtaMultiRealRecordPure 为基类 EtaLogicRealRecordPure、EtaMultiRealRecordPure、EtaSingleRealRecordPure都集成自此基类</param>
|
/// <returns></returns>
|
/// <exception cref="NotImplementedException"></exception>
|
public virtual bool Calculate(Model.EtaCorpAnalyContext context, Action<
|
List<Model.EtaSingleRealRecordPure>,
|
List<Model.EtaMultiRealRecordPure>,
|
List<Model.EtaLogicRealRecordPure>,
|
string> handler)
|
{
|
|
|
|
return false;
|
}
|
|
#region 所有泵站上下文
|
/// <summary>
|
/// 所有泵站上下文
|
/// </summary>
|
protected List<EtaStationAnalyContextItem> _allStationContextList = null;
|
/// <summary>
|
/// 获取泵站列表
|
/// </summary>
|
/// <param name="context"></param>
|
/// <param name="station_num">预计泵站数量,因为此类比较大,尽量初始化时给定数量,避免内存浪费</param>
|
protected void InitialStationList(IStation.Model.EtaCorpAnalyContext context,int station_num)
|
{
|
_allStationContextList = new List<EtaStationAnalyContextItem>(station_num);
|
foreach (var logicCatalogContextItem in context.LogicCatalogContextItems)
|
{
|
if (logicCatalogContextItem.UseStatus == eUseStatus.Enable)
|
{
|
foreach (var node in logicCatalogContextItem.LogicTreeContextItems)
|
{
|
ExtractStationFromContext(node,ref _allStationContextList);
|
}
|
}
|
}
|
}
|
|
/// <summary>
|
/// 迭代
|
/// </summary>
|
/// <param name="parent_context_item"></param>
|
/// <param name="station_list"></param>
|
private void ExtractStationFromContext(EtaLogicTreeAnalyContextItem parent_context_item,ref List<EtaStationAnalyContextItem> 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);
|
}
|
}
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="context_item"></param>
|
/// <param name="logic_Ids"></param>
|
/// <param name="sation_ids"></param>
|
private void ExtractChildIdFromContext(EtaLogicTreeAnalyContextItem context_item,ref List<long> logic_Ids,ref List<long> 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
|
|
|
}
|
}
|