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 _allStationBundles = null; /// /// /// /// /// public void AnaContext(IStation.Model.EtaCorpAnalyContext context, List 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(); current_logic_ana.ChildLogicBundleList = new List(); List child_ana_records = new List();//只含一级,不含下一集 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 _allLogicRecordList = new List(); internal List 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; } } }