using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;
using IStation.Calculation.DispatchAna.Model;
namespace IStation.Calculation.DispatchAna
{
///
/// 陈行二输调度方案计算器(最优方案)
///
public class Calculator_OptAna_SHYS_陈行二输: CalculatorBase_SHYS_陈行二输, IOptAnaCalc
{
List _allMachineList = null;
///
/// /
///
public Calculator_OptAna_SHYS_陈行二输()
{
}
#region 计算 最优方案
///
/// 计算 最优方案
///
///
///
///
///
///
public List CalcSchemes(
IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
IStation.Calculation.DispatchAna.Model.EtaAnaRecord4Station eta_ana_records,
IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
out string error_info)
{
this._corpID = complex_request_paras.CorpID;
this._stationID = complex_request_paras.StationID;
var isUsePress = complex_request_paras.PressValueType == Model.RequestParasComplex.ePressValueType.压力 ? true : false;
if (isUsePress)
return CalcSchemes压力(complex_request_paras, machine_run_status, out error_info);
else
return CalcSchemes扬程(complex_request_paras, machine_run_status, out error_info);
}
///
///
///
///
///
///
///
protected override List CalcSchemes压力(
IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
out string error_info)
{
error_info = "";
if (complex_request_paras == null)
{
error_info = "ERROR 30";
return null;
}
if (complex_request_paras.OutletPipePara == null ||
complex_request_paras.OutletPipePara.Count < 2)
{
error_info = "ERROR 35,陈行二输需要两个管路的流量";
return null;
}
double pipe1_TargetFlow = complex_request_paras.OutletPipePara[0].TargetFlow;
double pipe2_TargetFlow = complex_request_paras.OutletPipePara[1].TargetFlow;
if (pipe1_TargetFlow < 50 && pipe2_TargetFlow < 50)
{//都关机
error_info = "ERROR 35,陈行二输需要两个管路的流量都为0";
return null;
}
double pipe1_TargetPess = complex_request_paras.OutletPipePara[0].TargetPress;
double pipe2_TargetPess = complex_request_paras.OutletPipePara[1].TargetPress;
if (pipe1_TargetFlow > 50)
{
if (pipe1_TargetPess < 0.01)
{
error_info = "ERROR 35,陈行二输需要一号管压力未赋值";
return default;
}
}
if (pipe2_TargetFlow > 50)
{
if (pipe2_TargetPess < 0.01)
{
error_info = "ERROR 35,陈行二输需要二号管压力未赋值";
return default;
}
}
double water_level = 0;//水位
if (complex_request_paras.InletPipePara != null && complex_request_paras.InletPipePara.Count > 0)
{
water_level = complex_request_paras.InletPipePara[0].Value;
}
//机泵信息
if (_allMachineList == null)
{
if (!BuildMachineList(
out _allMachineList,
out error_info))
{
error_info = "机泵组无法构建,ERROR 70,错误信息:" + error_info;
return null;
}
}
Common.DispatchAnaGeneralHelper压力 calc_pipe1_helper =
new Common.DispatchAnaGeneralHelper压力();
Common.DispatchAnaGeneralHelper压力 calc_pipe2_helper =
new Common.DispatchAnaGeneralHelper压力();
if (pipe2_TargetFlow < 50)
{//只开一号泵二号泵
calc_pipe1_helper.InitialParas(
pipe1_TargetFlow,
water_level,true ,
pipe1_TargetPess,false ,
null, null,
(from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
machine_run_status == null ? null : machine_run_status.MachineRunFilter);
return calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
}
else if (pipe1_TargetFlow < 50)
{
calc_pipe2_helper.InitialParas(
pipe2_TargetFlow,
water_level, true,
pipe2_TargetPess, false,
null, null,
(from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
machine_run_status == null ? null : machine_run_status.MachineRunFilter);
return calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
}
calc_pipe1_helper.InitialParas(
pipe1_TargetFlow,
water_level,true ,
pipe1_TargetPess,false ,
null, null,
(from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
machine_run_status == null ? null : machine_run_status.MachineRunFilter);
var pipe1_result = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
if (pipe1_result == null)
{
error_info = String.Format("管路一调度方案无法计算,请确认数据是否合理,液位:{0}m,出口压力:{1}MPa,流量要求:{2}",
water_level, pipe1_TargetPess, pipe1_TargetFlow);
return null;
}
calc_pipe2_helper.InitialParas(
pipe2_TargetFlow,
water_level, true,
pipe2_TargetPess, false,
null, null,
(from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
machine_run_status == null ? null : machine_run_status.MachineRunFilter);
var pipe2_result = calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
if (pipe2_result == null)
{
error_info = String.Format("管路2调度方案无法计算,请确认数据是否合理,液位:{0}m,出口压力:{1}MPa,流量要求:{2}",
water_level, pipe2_TargetPess, pipe2_TargetFlow);
return null;
}
var result_1 = pipe1_result.First();
var result_2 = pipe2_result.First();
var plan = new Model.AnaScheme();
plan.ID = 1;
plan.TotalWrkQ = result_1.TotalWrkQ + result_2.TotalWrkQ;
plan.TotalWrkH = result_1.TotalWrkH + result_2.TotalWrkH;
plan.TotalWrkP = result_1.TotalWrkP + result_2.TotalWrkP;
plan.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(plan.TotalWrkQ, plan.TotalWrkH, plan.TotalWrkP);
plan.UWP = CalculateUWP(plan.TotalWrkP, plan.TotalWrkQ, plan.TotalWrkH);
plan.WP = CalculateWP(plan.TotalWrkP, plan.TotalWrkQ);
plan.Items = new List();
if (result_1.Items != null && result_1.Items.Count > 0)
plan.Items.AddRange(result_1.Items);
if (result_2.Items != null && result_2.Items.Count > 0)
plan.Items.AddRange(result_2.Items);
return new List() { plan };
}
private List CalcSchemes扬程(
IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
out string error_info)
{
error_info = "";
if (complex_request_paras == null)
{
error_info = "ERROR 30";
return null;
}
if (complex_request_paras.OutletPipePara == null ||
complex_request_paras.OutletPipePara.Count < 2)
{
error_info = "ERROR 35,陈行二输需要两个管路的流量";
return null;
}
double pipe1_TargetFlow = complex_request_paras.OutletPipePara[0].TargetFlow;
double pipe2_TargetFlow = complex_request_paras.OutletPipePara[1].TargetFlow;
if (pipe1_TargetFlow < 50 && pipe2_TargetFlow < 50)
{//都关机
error_info = "ERROR 35,陈行二输需要两个管路的流量 都为0";
return null;
}
double pipe1_TargetHead = complex_request_paras.OutletPipePara[0].TargetPress;
double pipe2_TargetHead = complex_request_paras.OutletPipePara[1].TargetPress;
if (pipe1_TargetFlow > 50)
{
if (pipe1_TargetHead < 0.01)
{
error_info = "ERROR 35,陈行二输需要一号管压力未赋值";
return default;
}
}
if (pipe2_TargetFlow > 50)
{
if (pipe2_TargetHead < 0.01)
{
error_info = "ERROR 35,陈行二输需要二号管压力未赋值";
return default;
}
}
//机泵信息
if (_allMachineList == null)
{
if (!BuildMachineList(
out _allMachineList,
out error_info))
{
error_info = "机泵组无法构建,ERROR 70,错误信息:" + error_info;
return null;
}
}
Common.DispatchAnaGeneralHelper扬程 calc_pipe1_helper =
new Common.DispatchAnaGeneralHelper扬程();
Common.DispatchAnaGeneralHelper扬程 calc_pipe2_helper =
new Common.DispatchAnaGeneralHelper扬程();
if (pipe2_TargetFlow < 50)
{//只开一号泵二号泵
calc_pipe1_helper.InitialParas(
pipe1_TargetFlow,
pipe1_TargetHead,
null, null,
(from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
machine_run_status == null ? null : machine_run_status.MachineRunFilter);
return calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
}
else if (pipe1_TargetFlow < 50)
{
calc_pipe2_helper.InitialParas(
pipe2_TargetFlow,
pipe2_TargetHead,
null, null,
(from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
machine_run_status == null ? null : machine_run_status.MachineRunFilter);
return calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
}
calc_pipe1_helper.InitialParas(
pipe1_TargetFlow,
pipe1_TargetHead,
null, null,
(from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
machine_run_status == null ? null : machine_run_status.MachineRunFilter);
var pipe1_result = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
if (pipe1_result == null)
{
error_info = String.Format("管路一调度方案无法计算,请确认数据是否合理, 流量要求:{1},扬程{0}m",
pipe1_TargetFlow, pipe1_TargetHead);
return null;
}
calc_pipe2_helper.InitialParas(
pipe2_TargetFlow,
pipe2_TargetHead,
null, null,
(from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
machine_run_status == null ? null : machine_run_status.MachineRunFilter);
var pipe2_result = calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
if (pipe2_result == null)
{
error_info = String.Format("管路一调度方案无法计算,请确认数据是否合理, 流量要求:{1},扬程{0}m",
pipe2_TargetFlow, pipe2_TargetHead);
return null;
}
var result_1 = pipe1_result.First();
var result_2 = pipe2_result.First();
var plan = new Model.AnaScheme();
plan.ID = 1;
plan.TotalWrkQ = result_1.TotalWrkQ + result_2.TotalWrkQ;
plan.TotalWrkH = (result_1.TotalWrkH + result_2.TotalWrkH)/2;
plan.TotalWrkP = result_1.TotalWrkP + result_2.TotalWrkP;
plan.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(plan.TotalWrkQ, plan.TotalWrkH, plan.TotalWrkP);
plan.UWP = CalculateUWP(plan.TotalWrkP, plan.TotalWrkQ, plan.TotalWrkH);
plan.WP = CalculateWP(plan.TotalWrkP, plan.TotalWrkQ);
plan.Items = new List();
if (result_1.Items != null && result_1.Items.Count > 0)
plan.Items.AddRange(result_1.Items);
if (result_2.Items != null && result_2.Items.Count > 0)
plan.Items.AddRange(result_2.Items);
return new List() { plan };
}
#endregion
}
}