using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
|
namespace IStation.EtaCalculation.SHYS
|
{
|
internal partial class EtaAnalyCalculator4Logic
|
{
|
List<IStation.Calculation.Eta.Model.StationAnaInfoBundle> _allStationBundles = null;
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="context"></param>
|
/// <param name="allStationBundles"></param>
|
public void AnaContext(IStation.Model.EtaCorpAnalyContext context, List<IStation.Calculation.Eta.Model.StationAnaInfoBundle> allStationBundles)
|
{
|
this._allStationBundles = allStationBundles;
|
foreach (var logicCatalogContextItem in context.LogicCatalogContextItems)
|
{
|
if (logicCatalogContextItem.UseStatus != IStation.Model.eUseStatus.Enable)
|
{
|
continue;
|
}
|
|
foreach (var node in logicCatalogContextItem.LogicTreeContextItems)
|
{
|
AnaLogic(node);
|
}
|
}
|
}
|
|
private IStation.Calculation.Eta.Model.LogicAnaInfoBundle AnaLogic(IStation.Model.EtaLogicTreeAnalyContextItem context_item)
|
{
|
var logic_area = context_item.LogicContextItem as IStation.Model.EtaLogicAreaAnalyContextItem;
|
|
switch (logic_area.ID)
|
{
|
case 4:
|
{
|
var logicInfo = Calc一个泵站(context_item, _allStationBundles, 3);
|
_allLogicRecordList.Add(logicInfo.AnaResult);
|
return logicInfo;
|
}
|
case 5:
|
{
|
var logicInfo = Calc一个泵站(context_item, _allStationBundles, 5);
|
_allLogicRecordList.Add(logicInfo.AnaResult);
|
return logicInfo;
|
}
|
case 6:
|
{
|
var logicInfo = Calc一个泵站(context_item, _allStationBundles, 9);
|
_allLogicRecordList.Add(logicInfo.AnaResult);
|
return logicInfo;
|
}
|
case 11:
|
{
|
var logicInfo = Calc一个泵站(context_item, _allStationBundles, 16);
|
_allLogicRecordList.Add(logicInfo.AnaResult);
|
return logicInfo;
|
}
|
case 13:
|
{
|
//金泽联通管
|
if (this.jzltgLogicAnaInfoBundle == null)
|
{
|
this.jzltgLogicAnaInfoBundle = Calc一个泵站(context_item, _allStationBundles, 19);
|
_allLogicRecordList.Add(this.jzltgLogicAnaInfoBundle.AnaResult);
|
}
|
return this.jzltgLogicAnaInfoBundle;
|
}
|
case 12:
|
{
|
var logicInfo = AnaLogic金泽系统(context_item);
|
_allLogicRecordList.Add(logicInfo.AnaResult);
|
return logicInfo;
|
}
|
}
|
|
var current_logic_ana = new Calculation.Eta.Model.LogicAnaInfoBundle();
|
current_logic_ana.LogicID = logic_area.ID;
|
current_logic_ana.ChildStationBundleList = new List<Calculation.Eta.Model.StationAnaInfoBundle>();
|
current_logic_ana.ChildLogicBundleList = new List<Calculation.Eta.Model.LogicAnaInfoBundle>();
|
List<IStation.Model.EtaBasicRealRecord> child_ana_records = new List<Model.EtaBasicRealRecord>();//只含一级,不含下一集
|
|
double uwpaSum = 0;
|
double qSum = 0;
|
IStation.Model.EtaLogicRealRecordPure current_result = new Model.EtaLogicRealRecordPure();
|
foreach (var child in context_item.Children)
|
{
|
if (child.IsStation())
|
{
|
var station_ana = this._allStationBundles.Find(x => x.StationID == child.ObjectID);
|
if (station_ana == null)
|
{
|
continue;
|
}
|
current_logic_ana.ChildStationBundleList.Add(station_ana);
|
child_ana_records.Add(station_ana.AnaResult);
|
|
if (!string.IsNullOrEmpty(station_ana.AnaResult?.AnalyInfo))
|
{
|
if (!current_result.IsHaveStationTag(station_ana.StationID))
|
{
|
current_result.PutAnalyInfo(Model.EtaSingleRealRecordPure.InfoTag_Station, station_ana.StationID.ToString());
|
}
|
}
|
|
|
uwpaSum += (station_ana.AnaResult.Qa ?? 0) * (station_ana.AnaResult.UWPa ?? 0);
|
qSum += station_ana.AnaResult.Qa ?? 0;
|
}
|
else
|
{
|
var child_logic_ana = AnaLogic(child);
|
current_logic_ana.ChildLogicBundleList.Add(child_logic_ana);
|
current_result.PutLogicAnalyInfo(child_logic_ana.AnaResult?.AnalyInfo);
|
child_ana_records.Add(child_logic_ana.AnaResult);
|
|
var q = GetQSumValue(child_logic_ana);
|
qSum += q;
|
uwpaSum += q * child_logic_ana.AnaResult.UWPa ?? 0;
|
}
|
}
|
|
|
current_result.CorpID = 0;
|
current_result.ObjectType = IStation.ObjectType.LogicArea;
|
current_result.ObjectID = logic_area.ID;
|
if (child_ana_records.Count() == 0)
|
{
|
current_result.Qa = 0;
|
current_result.Ha = 0;
|
current_result.Pa = 0;
|
current_result.Ea = 0;
|
current_result.WPa = 0;
|
current_result.UWPa = 0;
|
current_result.AnalyStatus = Model.Eta.eAnalyStatus.Normal;
|
}
|
else
|
{
|
current_result.Qa = Math.Round((from x in child_ana_records where (x.Qa.HasValue && x.Qa.Value > 10) select x.Qa.Value).Sum(), 1);//暂时取合计值
|
current_result.Ha = Math.Round((from x in child_ana_records where x.Ha.HasValue select x.Ha.Value).Sum(), 2);//暂时取合计值
|
current_result.Pa = Math.Round((from x in child_ana_records where x.Pa.HasValue select x.Pa.Value).Sum(), 1);//暂时取合计值
|
|
|
|
double qa_total = 0;
|
double qh_total = 0;
|
foreach (var item in child_ana_records)
|
{
|
if (item.Ea.HasValue && item.Qa.HasValue && item.Ea.Value > 10 && item.Qa.Value > 10)
|
{
|
qa_total += item.Qa.Value;
|
if (item.Ha.HasValue)
|
{
|
qh_total += item.Qa.Value * item.Ha.Value;
|
}
|
}
|
}
|
|
if (qa_total > 100)
|
{
|
double eta = 0;
|
foreach (var item in child_ana_records)
|
{
|
if (item.Ea.HasValue && item.Qa.HasValue && item.Ea.Value > 10 && item.Qa.Value > 10)
|
{
|
if (item.Ha.HasValue && item.Ha.Value != 0)
|
{
|
eta += item.Ea.Value * (item.Qa.Value * item.Ha.Value / qh_total);//叠加扬程换算
|
}
|
|
// eta += item.Ea.Value * item.Qa.Value / qa_total; 旧算法
|
}
|
}
|
|
double wpa = 0;
|
foreach (var item in child_ana_records)
|
{
|
if (item.WPa.HasValue && item.Qa.HasValue && item.WPa.Value > 0 && item.Qa.Value > 10)
|
{
|
wpa += item.WPa.Value * item.Qa.Value / qa_total;
|
}
|
}
|
|
double uwpa = 0;
|
uwpa = uwpaSum / qSum;
|
|
|
current_result.Ea = Math.Round(eta, 1);
|
current_result.WPa = Math.Round(wpa, 2);
|
current_result.UWPa = Math.Round(uwpa, 2);
|
}
|
else
|
{
|
current_result.Ea = 0;
|
current_result.WPa = 0;
|
current_result.UWPa = 0;
|
}
|
current_result.AnalyStatus = Model.Eta.eAnalyStatus.Normal;
|
}
|
|
current_logic_ana.AnaResult = current_result;
|
|
if (current_result != null)
|
_allLogicRecordList.Add(current_result);
|
|
return current_logic_ana;
|
}
|
|
|
List<Model.EtaLogicRealRecordPure> _allLogicRecordList = new List<Model.EtaLogicRealRecordPure>();
|
internal List<Model.EtaLogicRealRecordPure> GetAllLogicAnaRecord()
|
{
|
return _allLogicRecordList;
|
}
|
|
private double GetUwpaSumValue(Calculation.Eta.Model.LogicAnaInfoBundle eta)
|
{
|
double uwpaSum = 0;
|
var childStationBundleList = eta.ChildStationBundleList;
|
if (childStationBundleList != null && childStationBundleList.Count > 0)
|
{
|
foreach (var item in childStationBundleList)
|
{
|
var reulst = item.AnaResult;
|
uwpaSum += (reulst.UWPa ?? 0) * (reulst.Qa ?? 0);
|
}
|
}
|
|
if (eta.ChildLogicBundleList != null && eta.ChildLogicBundleList.Count > 0)
|
{
|
foreach (var logic in eta.ChildLogicBundleList)
|
{
|
uwpaSum += GetUwpaSumValue(logic);
|
}
|
}
|
|
return uwpaSum;
|
}
|
|
|
|
private double GetQSumValue(Calculation.Eta.Model.LogicAnaInfoBundle eta)
|
{
|
double qSum = 0;
|
var childStationBundleList = eta.ChildStationBundleList;
|
if (childStationBundleList != null && childStationBundleList.Count > 0)
|
{
|
foreach (var item in childStationBundleList)
|
{
|
var reulst = item.AnaResult;
|
qSum += reulst.Qa ?? 0;
|
}
|
}
|
|
if (eta.ChildLogicBundleList != null && eta.ChildLogicBundleList.Count > 0)
|
{
|
foreach (var logic in eta.ChildLogicBundleList)
|
{
|
qSum += GetUwpaSumValue(logic);
|
}
|
}
|
|
return qSum;
|
}
|
|
}
|
}
|