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: { var logicInfo = Calc一个泵站(context_item, _allStationBundles, 19); _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();//只含一级,不含下一集 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()); } } } 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); } } 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; if (current_result.Pa != null) { if (!child_ana_records.Exists(x => !x.Ha.HasValue)) { var haTatol = child_ana_records.Sum(x => x.Ha.Value); uwpa = current_result.Pa.Value / qa_total / haTatol * 1000; } else { current_result.PutAnalyInfo(Model.EtaSingleRealRecordPure.InfoTag_Ha, null); } } else { current_result.PutAnalyInfo(Model.EtaSingleRealRecordPure.InfoTag_Pa, null); } /* foreach (var item in child_ana_records) { if (item.UWPa.HasValue && item.Qa.HasValue && item.UWPa.Value > 0 && item.Qa.Value > 10) { uwpa += item.UWPa.Value * item.Qa.Value / qa_total; } }*/ 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; } } }