using System.Collections.Generic;
using System.Linq;
namespace PBS.WinFrmUI.Hydro.Dispatch
{
///
/// 常规
///
public class Calculator_OptAna_General : CalculatorBase
{
///
///
///
protected List allMachineList = null;
#region 计算 最优方案
public List CalcSchemes(
List simuCalcPumps,
Model.RequestParasComplex complex_request_paras,
Model.MachineRunPara machine_run_status,
out string error_info)
{
return CalcSchemes扬程(simuCalcPumps, complex_request_paras, machine_run_status, out error_info);
}
protected List CalcSchemes扬程(
List simuCalcPumps,
Model.RequestParasComplex complex_request_paras,
Model.MachineRunPara machine_run_status,
out string error_info)
{
error_info = null;
if (complex_request_paras == null)
{
error_info = "ERROR 30";
return null;
}
if (complex_request_paras.OutletPipePara == null || complex_request_paras.OutletPipePara.Count < 1)
{
error_info = "出口管路参数有误, ERROR 35";
return null;
}
double target_flow = complex_request_paras.OutletPipePara[0].TargetFlow;
if (target_flow < 0.01)
{
error_info = "流量值过低, ERROR 67";
return null;
}
double target_head = complex_request_paras.OutletPipePara[0].TargetPress;
if (target_head < 0.01)
{
error_info = "压力值过低,ERROR 68";
return null;
}
if (allMachineList == null)
{
if (!BuildMachineList(
simuCalcPumps,
out allMachineList,
out error_info))
{
error_info = "机泵组无法构建,ERROR 70,错误信息:" + error_info;
return null;
}
}
if (allMachineList != null && allMachineList.Any())
{
if (machine_run_status != null && machine_run_status.MachineRunFilter != null && machine_run_status.MachineRunFilter.Any())
{
foreach (var machine in allMachineList)
{
var runStatus = machine_run_status.MachineRunFilter.Find(x => x.MachineID == machine.MachineID);
if (runStatus != null)
{
machine.Percentage = runStatus.Percentage;
}
machine.IsFrequency = runStatus.IsFrequency;
}
}
}
Common.DispatchAnaGeneralHelper扬程 calc_pipe_helper =
new Common.DispatchAnaGeneralHelper扬程();
calc_pipe_helper.InitialParas(
target_flow,
target_head,
complex_request_paras.OutletPipePara[0].TargetFlowRangeMin,
complex_request_paras.OutletPipePara[0].TargetFlowRangeMax,
allMachineList,
machine_run_status.MachineRunFilter);
return calc_pipe_helper.CalcOptList(complex_request_paras.SchemeSortType, complex_request_paras.SchemeNumber);
}
#endregion
}
}