using Yw.WinFrmUI.Bimface;
namespace HStation.WinFrmUI
{
///
/// 计算结果标签辅助类
///
public class SimulationCalcuResultLabelHelper
{
///
///
///
public SimulationCalcuResultLabelHelper
(
SimulationVisualListHelper visualListHelper,
SimulationCalcuResultHelper calcuResultHelper,
ISimulationCalcuResultLabelView view
)
{
_visualListHelper = visualListHelper;
_calcuResultHelper = calcuResultHelper;
_views = new List() { view };
}
private SimulationVisualListHelper _visualListHelper = null;//可见列表辅助类
private SimulationCalcuResultHelper _calcuResultHelper = null;//计算结果辅助类
private List _views = null;//视图列表
///
/// 可见性
///
public bool Visible
{
get { return _visible; }
set { _visible = value; }
}
private bool _visible = false;
///
/// 设置
///
public void Set()
{
if (this.Visible)
{
var labels = GetLabels();
_views.ForEach(x => x.SetLogicCalcuCustomLabels(labels));
}
else
{
_views.ForEach(x => x.ClearLogicCalcuCustomLabels());
}
}
//获取计算标签
private List GetLabels()
{
var hydroInfo = _visualListHelper.HydroInfo;
if (hydroInfo == null)
{
return default;
}
var workingInfo = JsonHelper.Json2Object(_calcuResultHelper.Working.WorkingInfo);
var allCalcuResultVisualDict = _calcuResultHelper.GetVisualDict();
var allCalcuLabels = new List();
hydroInfo.Pumps?.ForEach(x =>
{
var workingPump = workingInfo?.Pumps?.Find(t => t.Code == x.Code);
if (workingPump != null)
{
var hz = Math.Round(x.RatedHz * x.SpeedRatio);
var calcuPumpResult = allCalcuResultVisualDict.GetValue(x.Code) as HydroCalcuLinkResult;
if (calcuPumpResult != null)
{
var calcuPumpStartResult = allCalcuResultVisualDict.GetValue(x.StartCode) as HydroCalcuNodeResult;
var calcuPumpEndResult = allCalcuResultVisualDict.GetValue(x.EndCode) as HydroCalcuNodeResult;
var pumpCustomLabel = new LogicCalcuCustomLabel();
pumpCustomLabel.Id = x.Code;
pumpCustomLabel.Distance = 20000;
pumpCustomLabel.Data = new List()
{
new LogicCalcuCustomLabelItem(){ Name="状态",Value=HydroLinkStatusHelper.GetStatusName(workingPump.LinkStatus),Unit=string.Empty},
new LogicCalcuCustomLabelItem(){ Name="频率",Value=workingPump.CurrentHz.ToString(),Unit=string.Empty},
new LogicCalcuCustomLabelItem(){ Name="流量",Value=Math.Round(calcuPumpResult.CalcuFlow.Value,1).ToString(),Unit="m³/h"},
new LogicCalcuCustomLabelItem(){ Name="进口压力",Value=Math.Round(calcuPumpStartResult.CalcuHead.Value,4).ToString(),Unit="m"},
new LogicCalcuCustomLabelItem(){ Name="出口压力",Value=Math.Round(calcuPumpEndResult.CalcuHead.Value,4).ToString(),Unit="m"},
};
allCalcuLabels.Add(pumpCustomLabel);
}
}
});
hydroInfo.GetAllEmitters()?.ForEach(x =>
{
var calcuEmitter = allCalcuResultVisualDict.GetValue(x.Code) as HydroCalcuNodeResult;
var emitterCustomLabel = new LogicCalcuCustomLabel();
emitterCustomLabel.Id = x.Code;
emitterCustomLabel.Distance = 30000;
emitterCustomLabel.Data = new List()
{
new LogicCalcuCustomLabelItem(){ Name="流量",Value=Math.Round(calcuEmitter.CalcuDemand.Value,1).ToString(),Unit="m³/h"},
new LogicCalcuCustomLabelItem(){ Name="压力",Value=Math.Round(calcuEmitter.CalcuDemand.Value,4).ToString(),Unit="m"}
};
allCalcuLabels.Add(emitterCustomLabel);
});
return allCalcuLabels;
}
}
}