namespace Yw.WinFrmUI
|
{
|
/// <summary>
|
/// 精度评估辅助类
|
/// </summary>
|
public class HydroAccuracyHelper
|
{
|
|
/// <summary>
|
/// 创建
|
/// </summary>
|
public static HydroAccuracyViewModel Create
|
(
|
Yw.Model.HydroModelInfo hydroInfo,
|
List<Yw.Vmo.HydroMonitorVmo> allMonitorList,
|
Yw.Vmo.HydroWorkingVmo working,
|
HydroCalcuResult calcuResult = null,
|
bool isHead = false,
|
List<Yw.Vmo.HydroEvaluationVmo> allEvaluationList = null
|
)
|
{
|
//验证
|
if (hydroInfo == null)
|
{
|
return default;
|
}
|
if (allMonitorList == null || allMonitorList.Count < 1)
|
{
|
return default;
|
}
|
if (working == null)
|
{
|
return default;
|
}
|
|
var vm = new HydroAccuracyViewModel();
|
|
//赋值模型信息,避免干扰
|
var allVisualDict = hydroInfo.GetVisualDict();
|
if (allVisualDict == null || allVisualDict.Count < 1)
|
{
|
return vm;
|
}
|
|
//解析工况测点
|
var allWorkingMonitorList = JsonHelper.Json2Object<List<HydroWorkingMonitorViewModel>>(working?.MonitorInfo);
|
if (allWorkingMonitorList == null || allWorkingMonitorList.Count < 1)
|
{
|
return vm;
|
}
|
|
//计算结果
|
if (calcuResult == null)
|
{
|
hydroInfo.UpdateWorkingInfo(working.WorkingInfo);
|
calcuResult = hydroInfo.Calcu(Yw.EPAnet.CalcuMode.MinorLoss, isHead, allEvaluationList);
|
if (!calcuResult.Succeed)
|
{
|
return vm;
|
}
|
}
|
var allCalcuVisualDict = calcuResult.GetVisualDict();
|
|
//遍历测点
|
vm.Items = new List<HydroAccuracyItemViewModel>();
|
foreach (var monitor in allMonitorList)
|
{
|
var visual = allVisualDict.GetValue(monitor.Parter);
|
if (visual == null)
|
{
|
continue;
|
}
|
var workingMonitor = allWorkingMonitorList.Find(x => x.Relation == monitor.Parter && x.PropName == monitor.PropName);
|
if (workingMonitor == null)
|
{
|
continue;
|
}
|
if (!workingMonitor.PropValue.HasValue)
|
{
|
continue;
|
}
|
var calcuVisualResult = allCalcuVisualDict.GetValue(monitor.Parter);
|
if (calcuVisualResult == null)
|
{
|
continue;
|
}
|
var item = new HydroAccuracyItemViewModel(visual, monitor, workingMonitor, calcuVisualResult);
|
vm.Items.Add(item);
|
}
|
|
//有效项验证
|
var allValidItemList = vm.Items?.Where(x => x.EvaluateError.HasValue).ToList();
|
if (allValidItemList == null || allValidItemList.Count < 1)
|
{
|
return vm;
|
}
|
|
//流量误差
|
vm.Flow = new HydroAccuracyFlowViewModel(allValidItemList);
|
//压力误差
|
vm.Press = new HydroAccuracyPressViewModel(allValidItemList);
|
//总误差
|
vm.Scale = new HydroAccuracyScaleViewModel(allValidItemList);
|
|
return vm;
|
}
|
|
|
|
|
|
}
|
}
|