using Yw.EPAnet;
using Yw.Hydro;
using Yw.Model;
namespace Yw.WinFrmUI
{
///
///
///
public static class HydroModelInfoExtensions
{
///
/// 获取可见字典
///
public static Dictionary GetVisualDict(this Yw.Model.HydroModelInfo hydroInfo)
{
if (hydroInfo == null)
{
return default;
}
var allVisualList = hydroInfo.GetAllVisuals();
return allVisualList?.ToDictionary(x => x.Code);
}
///
/// 修复
///
public static bool Repair(this Yw.Model.HydroModelInfo hydroInfo, out string msg)
{
msg = string.Empty;
if (hydroInfo == null)
{
return false;
}
var checkResult = hydroInfo.Check();
if (!checkResult.Succeed)
{
msg = "检查失败导致无法进行试算,停止管网修复!";
return false;
}
var calcuResult = hydroInfo.Calcu(Yw.EPAnet.CalcuMode.Simple);
if (!calcuResult.Succeed)
{
msg = "试算失败,停止管网修复!";
return false;
}
var allLinkList = hydroInfo.GetAllLinks();
if (allLinkList != null && allLinkList.Count < 1)
{
msg = "模型中未包含管段信息,停止管网修复!";
return false;
}
int count = 0;
foreach (var link in allLinkList)
{
var calcuLink = calcuResult.LinkList?.Find(x => x.Code == link.Code);
if (calcuLink == null)
{
continue;
}
if (!calcuLink.CalcuFlow.HasValue)
{
continue;
}
if (calcuLink.CalcuFlow.Value < 0)
{
var tempCode = link.StartCode;
link.StartCode = link.EndCode;
link.EndCode = tempCode;
count++;
}
}
msg = $"修复完成,共修复管段({count})个!";
return true;
}
}
}