using IStation.Model; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IStation.EtaCalculation.SHYS { internal partial class EtaAnalyCalculator4Logic { private IStation.Calculation.Eta.Model.LogicAnaInfoBundle Calc一个泵站(IStation.Model.EtaLogicTreeAnalyContextItem contextItem, List allStationBundles, long onlyStationId) { var logicAnaInfo = new IStation.Calculation.Eta.Model.LogicAnaInfoBundle(); logicAnaInfo.LogicID = contextItem.LogicID; logicAnaInfo.ChildLogicBundleList = new List(); logicAnaInfo.ChildStationBundleList = new List(); var anaResult = new Model.EtaLogicRealRecordPure(); anaResult.ObjectID = contextItem.LogicID; anaResult.ObjectType = IStation.ObjectType.LogicArea; anaResult.Qa = 0; anaResult.Ha = 0; anaResult.Pa = 0; anaResult.Ea = 0; anaResult.WPa = 0; anaResult.UWPa = 0; anaResult.AnalyStatus = Model.Eta.eAnalyStatus.Normal; logicAnaInfo.AnaResult = anaResult; if (allStationBundles == null || allStationBundles.Count < 1) return logicAnaInfo; if (contextItem.Children == null || contextItem.Children.Count < 1) return logicAnaInfo; var allStationAnaResults = new List(); foreach (var childItem in contextItem.Children) { var childAna = allStationBundles.Find(x => x.StationID == childItem.ObjectID); if (childAna != null) { logicAnaInfo.ChildStationBundleList.Add(childAna); allStationAnaResults.Add(childAna.AnaResult); if (!string.IsNullOrEmpty(childAna.AnaResult.AnalyInfo)) { if (!logicAnaInfo.AnaResult.IsHaveStationTag(childAna.StationID)) { logicAnaInfo.AnaResult.PutAnalyInfo(EtaBasicRealRecord.InfoTag_Station, childAna.StationID.ToString()); } } } } var onlyStationAnaResult = allStationAnaResults.Find(x => x.ObjectID == onlyStationId); anaResult.Qa = onlyStationAnaResult?.Qa; // anaResult.Ha = onlyStationAnaResult?.Ha; anaResult.Ha = allStationAnaResults.Where(x => x.Ha.HasValue).Sum(x => x.Ha); anaResult.Pa = allStationAnaResults.Where(x => x.Pa.HasValue).Sum(x => x.Pa.Value); var validStationAnaResults = allStationAnaResults.Where(x => x.Qa.HasValue && x.Qa > 10).ToList(); if (validStationAnaResults == null || validStationAnaResults.Count < 1) return logicAnaInfo; double qaTotal = 0; double qhTotal = 0; foreach (var item in validStationAnaResults) { if (item.Ea.HasValue && item.Ea.Value > 10) { qaTotal += item.Qa.Value; if (item.Ha.HasValue) { qhTotal += item.Ha.Value * item.Qa.Value; } } } if (qaTotal > 100) { double eta = 0; foreach (var item in validStationAnaResults) { if (item.Ea.HasValue && item.Ea.Value > 10) { if (item.Ha.HasValue && item.Ha.Value != 0) { eta += item.Ea.Value * (item.Qa.Value * item.Ha.Value / qhTotal);//叠加扬程换算 } // eta += item.Ea.Value * item.Qa.Value / qaTotal; } } double wpa = 0; foreach (var item in validStationAnaResults) { if (item.WPa.HasValue && item.WPa.Value > 0) { wpa += item.WPa.Value * item.Qa.Value / qaTotal; } } double uwpa = 0; var uwpaSum = validStationAnaResults.Sum(x => (x.UWPa ?? 0) * (x.Qa ?? 0)); uwpa = uwpaSum / qaTotal; anaResult.Ea = Math.Round(eta, 1); anaResult.WPa = Math.Round(wpa, 2); anaResult.UWPa = Math.Round(uwpa, 2); } return logicAnaInfo; } } }