using IStation.IEtaCalculation; using IStation.Model; namespace IStation.EtaCalculation { /// /// 分析计算器(上海城投) /// public class AnalyCalculatorSMI : AnalyCalculatorBase, IStation.IEtaCalculation.IAnalyCalculator { private long _corpID = 0; /// /// 计算 /// /// 分析上下文 /// EtaMultiRealRecordPure 为基类 EtaLogicRealRecordPure、EtaMultiRealRecordPure、EtaSingleRealRecordPure都集成自此基类 /// /// public override bool Calculate(EtaCorpAnalyContext context, Action< List, List, List, string> handler) { List all_Single = new List(); List all_Multi = new List(); List all_Logic = null; this._corpID = context.ID; var dateTime = context.DataTime; var duration = context.Duration; if(this._corpID == 5) { } try { #region 泵站分析 //16时 城投泵站数量 InitialStationList(context, 10); if (_allStationContextList == null || _allStationContextList.Count() == 0) { return false; } List allStationBundles = new List(_allStationContextList.Count()); foreach (var station_context in _allStationContextList) { var calalcor = CreateCalculater4Station(station_context.ID); if (calalcor == null) continue; string error_info = null; if (!calalcor.Calculate(station_context, out error_info)) { LogHelper.Info($"能效分析任务中,客户标识:(上海城投), 泵站信息:{station_context.ID}({station_context.Name},错误信息:{error_info}"); continue; } var results_machines = calalcor.GetAllSingleAnaRecord(); if (results_machines != null) { foreach (var machine in results_machines) { machine.CorpID = _corpID; machine.DataTime = dateTime; machine.Duration = duration; if (machine.AnalyStatus == Model.Eta.eAnalyStatus.Unkonw) { LogHelper.Info($"能效分析任务中,AnalyStatus(machine) 值为 Model.Eta.eAnalyStatus.Unkonw,客户标识:(上海城投), 泵站信息:{station_context.ID}({station_context.Name} "); } all_Single.Add(machine); } } var result_station = calalcor.GetStationAnaRecord(); if (result_station != null) { result_station.CorpID = _corpID; result_station.DataTime = dateTime; result_station.Duration = duration; if (result_station.AnalyStatus == Model.Eta.eAnalyStatus.Unkonw) { LogHelper.Info($"能效分析任务中,AnalyStatus( station) 值为 Model.Eta.eAnalyStatus.Unkonw,客户标识:(上海城投), 泵站信息:{station_context.ID}({station_context.Name} "); } if (result_station.HZa == null) result_station.HZa = new List(); if (result_station.RunningFlag == null) result_station.RunningFlag = new List(); all_Multi.Add(result_station); } var results_pipes = calalcor.GetAllPipeAnaRecord(); if (results_pipes != null) { foreach (var pipe in results_pipes) { pipe.CorpID = _corpID; pipe.DataTime = dateTime; pipe.Duration = duration; if (pipe.AnalyStatus == Model.Eta.eAnalyStatus.Unkonw) { LogHelper.Info($"能效分析任务中,AnalyStatus( pipe) 值为 Model.Eta.eAnalyStatus.Unkonw,客户标识:(上海城投), 泵站信息:{station_context.ID}({station_context.Name} "); } if (pipe.HZa == null) pipe.HZa = new List(); if (pipe.RunningFlag == null) pipe.RunningFlag = new List(); all_Multi.Add(pipe); } } var station_bundle = calalcor.GetAnaBundle(); if(station_bundle != null) allStationBundles.Add(station_bundle); } if (all_Single.Count() == 0 || all_Multi.Count() == 0) return false; #endregion //业务区域分析 var logicCalc = new IStation.EtaCalculation.SHYS.EtaAnalyCalculator4Logic(); logicCalc.AnaContext(context, allStationBundles); all_Logic = logicCalc.GetAllLogicAnaRecord(); if (all_Logic != null) { foreach (var logic in all_Logic) { logic.CorpID = _corpID; logic.DataTime = dateTime; logic.Duration = duration; if (logic.AnalyStatus == Model.Eta.eAnalyStatus.Unkonw) { LogHelper.Info($"能效分析任务中,AnalyStatus(logic) 值为 Model.Eta.eAnalyStatus.Unkonw,客户标识:(上海城投), logic id信息:{logic.ObjectID} "); } } } } catch (Exception ex) { IStation.LogHelper.Error(String.Format("corpID:{0},能效分析出错,原因是:{1}", this. _corpID, ex.Message )); return false; } if (handler != null) { handler.Invoke(all_Single, all_Multi, all_Logic, null); } return true; } private IEtaStationAnalyCalculator CreateCalculater4Station(long StationID) { //if (StationID == 24) //{ // return new IStation.EtaCalculation.SMI.Station.EtaAnalyCalculator4松花江(); //} if (StationID == 1574926275540291584) { return new IStation.EtaCalculation.SMI.Station.EtaAnalyCalculator4松花江_shys(); } if (StationID == 25) { return new IStation.EtaCalculation.SMI.Station.EtaAnalyCalculator4南大路(); } if (StationID == 1564533764212789248) { return new IStation.EtaCalculation.SMI.Station.EtaAnalyCalculator4南市水厂(); } return null; } } }