namespace Yw.WinFrmUI
{
///
///
///
public class HydroLossStatisticsCatalogHelper
{
///
/// 创建
///
public static HydroLossStatisticsCatalogViewModel Create
(
Yw.Model.HydroModelInfo hydroInfo,
HydroCalcuResult calcuResult,
List allItemList
)
{
if (hydroInfo == null)
{
return default;
}
if (calcuResult == null || !calcuResult.Succeed)
{
return default;
}
if (allItemList == null || allItemList.Count < 1)
{
return default;
}
var vm = new HydroLossStatisticsCatalogViewModel();
vm.Items = new List();
#region 水泵
if (hydroInfo.Pumps != null && hydroInfo.Pumps.Count > 0)
{
var allCalcuVisualDict = calcuResult.GetVisualDict();
var itemForPump = new HydroLossStatisticsCatalogItemViewModel();
itemForPump.EnergyName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pump);
foreach (var pump in hydroInfo.Pumps)
{
var calcuPumpResult = allCalcuVisualDict?.GetValue(pump.Code) as HydroCalcuPumpResult;
if (calcuPumpResult != null)
{
if (calcuPumpResult.CalcuP.HasValue && calcuPumpResult.CalcuE.HasValue)
{
itemForPump.EnergyValue += calcuPumpResult.CalcuP.Value * 1000 * (1 - calcuPumpResult.CalcuE.Value / 100);
}
}
}
vm.Items.Add(itemForPump);
}
#endregion
#region 管道
if (hydroInfo.Pipes != null && hydroInfo.Pipes.Count > 0)
{
var itemForPipe = new HydroLossStatisticsCatalogItemViewModel();
itemForPipe.EnergyName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pipe);
var codes = hydroInfo.Pipes.Select(x => x.Code).Distinct().ToList();
var items = allItemList.Where(x => codes.Contains(x.EnergyCode)).ToList();
if (items != null && items.Count > 0)
{
itemForPipe.EnergyValue = items.Sum(x => x.EnergyValue);
}
vm.Items.Add(itemForPipe);
}
#endregion
#region 过渡件
if (hydroInfo.Translations != null && hydroInfo.Translations.Count > 0)
{
var itemForTranslation = new HydroLossStatisticsCatalogItemViewModel();
itemForTranslation.EnergyName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Translation);
var codes = hydroInfo.Translations.Select(x => x.Code).Distinct().ToList();
var items = allItemList.Where(x => codes.Contains(x.EnergyCode)).ToList();
if (items != null && items.Count > 0)
{
itemForTranslation.EnergyValue = items.Sum(x => x.EnergyValue);
}
vm.Items.Add(itemForTranslation);
}
#endregion
#region 阀门
if (hydroInfo.Valves != null && hydroInfo.Valves.Count > 0)
{
var itemForValve = new HydroLossStatisticsCatalogItemViewModel();
itemForValve.EnergyName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Valve);
var codes = hydroInfo.Translations.Select(x => x.Code).Distinct().ToList();
var items = allItemList.Where(x => codes.Contains(x.EnergyCode)).ToList();
if (items != null && items.Count > 0)
{
itemForValve.EnergyValue = items.Sum(x => x.EnergyValue);
}
vm.Items.Add(itemForValve);
}
#endregion
#region 弯头
if (hydroInfo.Elbows != null && hydroInfo.Elbows.Count > 0)
{
var itemForElbow = new HydroLossStatisticsCatalogItemViewModel();
itemForElbow.EnergyName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Elbow);
var codes = hydroInfo.Translations.Select(x => x.Code).Distinct().ToList();
var items = allItemList.Where(x => codes.Contains(x.EnergyCode)).ToList();
if (items != null && items.Count > 0)
{
itemForElbow.EnergyValue = items.Sum(x => x.EnergyValue);
}
vm.Items.Add(itemForElbow);
}
#endregion
#region 三通
if (hydroInfo.Threelinks != null && hydroInfo.Threelinks.Count > 0)
{
var itemForThreelink = new HydroLossStatisticsCatalogItemViewModel();
itemForThreelink.EnergyName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Threelink);
var codes = hydroInfo.Translations.Select(x => x.Code).Distinct().ToList();
var items = allItemList.Where(x => codes.Contains(x.EnergyCode)).ToList();
if (items != null && items.Count > 0)
{
itemForThreelink.EnergyValue = items.Sum(x => x.EnergyValue);
}
vm.Items.Add(itemForThreelink);
}
#endregion
#region 四通
if (hydroInfo.Fourlinks != null && hydroInfo.Fourlinks.Count > 0)
{
var itemForFourlink = new HydroLossStatisticsCatalogItemViewModel();
itemForFourlink.EnergyName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Fourlink);
var codes = hydroInfo.Translations.Select(x => x.Code).Distinct().ToList();
var items = allItemList.Where(x => codes.Contains(x.EnergyCode)).ToList();
if (items != null && items.Count > 0)
{
itemForFourlink.EnergyValue = items.Sum(x => x.EnergyValue);
}
vm.Items.Add(itemForFourlink);
}
#endregion
#region 换热器
if (hydroInfo.Exchangers != null && hydroInfo.Exchangers.Count > 0)
{
var itemForExchanger = new HydroLossStatisticsCatalogItemViewModel();
itemForExchanger.EnergyName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Exchanger);
var codes = hydroInfo.Translations.Select(x => x.Code).Distinct().ToList();
var items = allItemList.Where(x => codes.Contains(x.EnergyCode)).ToList();
if (items != null && items.Count > 0)
{
itemForExchanger.EnergyValue = items.Sum(x => x.EnergyValue);
}
vm.Items.Add(itemForExchanger);
}
#endregion
#region 压缩机
if (hydroInfo.Compressors != null && hydroInfo.Compressors.Count > 0)
{
var itemForCompressor = new HydroLossStatisticsCatalogItemViewModel();
itemForCompressor.EnergyName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Compressor);
var codes = hydroInfo.Translations.Select(x => x.Code).Distinct().ToList();
var items = allItemList.Where(x => codes.Contains(x.EnergyCode)).ToList();
if (items != null && items.Count > 0)
{
itemForCompressor.EnergyValue = items.Sum(x => x.EnergyValue);
}
vm.Items.Add(itemForCompressor);
}
#endregion
if (vm.Items.Count > 0)
{
vm.TotalEnergyValue = vm.Items.Sum(x => x.EnergyValue);
}
//w=>kW
vm.TotalEnergyValue = Math.Round(vm.TotalEnergyValue / 1000d, 1);
vm.Items.ForEach(x => x.EnergyValue = Math.Round(x.EnergyValue / 1000d, 1));
return vm;
}
}
}