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严桥1支线(IStation.Model.EtaLogicTreeAnalyContextItem contextItem,List allStationBundles) { long onlyStationId = 3;//五号沟严桥1泵站 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); } } var onlyStationAnaResult = allStationAnaResults.Find(x => x.ObjectID == onlyStationId); anaResult.Qa = onlyStationAnaResult?.Qa; anaResult.Ha = onlyStationAnaResult?.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 = validStationAnaResults.Where(x => x.Ea.HasValue && x.Ea.Value > 10).Sum(x => x.Qa.Value); if (qaTotal > 100) { double eta = 0; foreach (var item in validStationAnaResults) { if (item.Ea.HasValue && item.Ea.Value > 10) { 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; foreach (var item in validStationAnaResults) { if (item.UWPa.HasValue && item.UWPa.Value > 0) { uwpa += item.UWPa.Value * item.Qa.Value / qaTotal; } } anaResult.Ea = Math.Round(eta, 1); anaResult.WPa = Math.Round(wpa, 2); anaResult.UWPa = Math.Round(uwpa, 2); } return logicAnaInfo; } } }