using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace Yw.WinFrmUI
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public static class HydroEnergyStatisticsHelper
|
{
|
|
/// <summary>
|
/// 获取统计列表
|
/// </summary>
|
public static List<HydroEnergyStatisticsItemViewModel> GetStatisticsList
|
(this Yw.Model.HydroModelInfo hydroInfo, HydroCalcuResult calcuResult, List<Yw.EPAnet.EnergyPoint> allEnergyList)
|
{
|
if (hydroInfo == null)
|
{
|
return default;
|
}
|
var allStatisticsList = allEnergyList.GetStatisticsList();
|
if (allStatisticsList == null || allStatisticsList.Count < 1)
|
{
|
return default;
|
}
|
|
double pumpLoss = 0;
|
if (hydroInfo.Pumps != null && hydroInfo.Pumps.Count > 0)
|
{
|
var allCalcuResultVisualDict = calcuResult?.GetVisualDict();
|
foreach (var pump in hydroInfo.Pumps)
|
{
|
var calcuPumpResult = allCalcuResultVisualDict?.GetValue(pump.Code) as HydroCalcuPumpResult;
|
if (calcuPumpResult != null)
|
{
|
if (calcuPumpResult.CalcuP.HasValue && calcuPumpResult.CalcuE.HasValue)
|
{
|
pumpLoss += calcuPumpResult.CalcuP.Value * 1000 * (1 - calcuPumpResult.CalcuE.Value / 100);
|
}
|
}
|
}
|
}
|
|
var promoteEnergy = allStatisticsList.Find(x => x.EnergyType == eEnergyType.Promote);
|
if (promoteEnergy != null)
|
{
|
promoteEnergy.EnergyValue += pumpLoss;
|
}
|
|
var minorLossEnergy = allStatisticsList.Find(x => x.EnergyType == eEnergyType.MinorLoss);
|
if (minorLossEnergy != null)
|
{
|
minorLossEnergy.EnergyValue += pumpLoss;
|
}
|
|
allStatisticsList.ForEach(x => x.EnergyValue = Math.Round(x.EnergyValue, 2));
|
|
return allStatisticsList;
|
}
|
|
/// <summary>
|
/// 获取统计列表
|
/// </summary>
|
public static List<HydroEnergyStatisticsItemViewModel> GetStatisticsList(this List<Yw.EPAnet.EnergyPoint> allEnergyList)
|
{
|
var allStatisticsList = new List<HydroEnergyStatisticsItemViewModel>();
|
if (allEnergyList != null && allEnergyList.Count > 0)
|
{
|
var allEnergyGroupList = allEnergyList.GroupBy(x => x.EnergyType).ToList();
|
foreach (var energyGroup in allEnergyGroupList)
|
{
|
var item = new HydroEnergyStatisticsItemViewModel();
|
switch (energyGroup.Key)
|
{
|
case EPAnet.eEnergyType.Input:
|
{
|
item.EnergyType = eEnergyType.Input;
|
item.EnergyName = eEnergyType.Input.GetDisplayText();
|
}
|
break;
|
case EPAnet.eEnergyType.Output:
|
{
|
item.EnergyType = eEnergyType.Output;
|
item.EnergyName = eEnergyType.Output.GetDisplayText();
|
}
|
break;
|
case EPAnet.eEnergyType.Promote:
|
{
|
item.EnergyType = eEnergyType.Promote;
|
item.EnergyName = eEnergyType.Promote.GetDisplayText();
|
}
|
break;
|
case EPAnet.eEnergyType.MinorLoss:
|
{
|
item.EnergyType = eEnergyType.MinorLoss;
|
item.EnergyName = eEnergyType.MinorLoss.GetDisplayText();
|
}
|
break;
|
case EPAnet.eEnergyType.FrictionalLoss:
|
{
|
item.EnergyType = eEnergyType.FrictionalLoss;
|
item.EnergyName = eEnergyType.FrictionalLoss.GetDisplayText();
|
}
|
break;
|
default: break;
|
}
|
item.EnergyValue = Math.Round(energyGroup.Sum(x => x.EnergyPower), 2);
|
allStatisticsList.Add(item);
|
}
|
}
|
return allStatisticsList.OrderBy(x => x.EnergyType).ToList();
|
}
|
|
|
}
|
}
|