From 05f522e321a742f03bf1e3e26edaeb5147da42f4 Mon Sep 17 00:00:00 2001 From: tangxu <76880903@qq.com> Date: 星期三, 02 十一月 2022 16:18:47 +0800 Subject: [PATCH] 解决南汇北 计划计算 --- Calculation/IStation.Calculation.Dispatch/base/CalculatorOptAnaBase.cs | 108 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 93 insertions(+), 15 deletions(-) diff --git a/Calculation/IStation.Calculation.Dispatch/base/CalculatorOptAnaBase.cs b/Calculation/IStation.Calculation.Dispatch/base/CalculatorOptAnaBase.cs index 2ee6a11..f1f4f53 100644 --- a/Calculation/IStation.Calculation.Dispatch/base/CalculatorOptAnaBase.cs +++ b/Calculation/IStation.Calculation.Dispatch/base/CalculatorOptAnaBase.cs @@ -1,5 +1,6 @@ 锘縰sing System; using System.Collections.Generic; +using System.IO.Pipelines; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -12,7 +13,7 @@ public class CalculatorOptAnaBase: CalculatorBase { /// <summary> - /// + /// 璁$畻鏈�浼樻柟妗� /// </summary> /// <param name="complex_request_paras"></param> /// <param name="machine_run_status"></param> @@ -27,15 +28,16 @@ return null; } - + Dictionary<string, IStation.Calculation.DispatchAna.Model.AnaScheme> _dict = new Dictionary<string, Model.AnaScheme>(); /// <summary> /// 璁$畻姹囨�绘暟鎹� /// </summary> /// <param name="HourRequests"></param> + /// <param name="isUseCache">鏄惁鐢ㄧ紦瀛�</param> /// <param name="error_info"></param> /// <returns></returns> - public virtual IStation.Calculation.DispatchAna.Model.DaySumData CalcSumData( - List<Model.HourRequest> HourRequests, out string error_info) + public virtual IStation.Calculation.DispatchAna.Model.DaySumData CalcSumData( + List<Model.HourRequest> HourRequests, bool isUseCache, out string error_info) { error_info = null; IStation.Calculation.DispatchAna.Model.DaySumData sum = new Model.DaySumData(); @@ -43,32 +45,108 @@ foreach (var hourRequest in HourRequests) { var complex_request_paras = hourRequest.Request; + + #region 妫�鏌ユ暟鎹� if (complex_request_paras.OutletPipePara == null || complex_request_paras.OutletPipePara.Count < 1) { - error_info = string.Format("绗瑊0},鍒嗘瀽鍑洪敊,鍘熷洜鏄�:{1}", + error_info = string.Format("{0}鏃�,鍒嗘瀽鍑洪敊,鍘熷洜鏄�:{1}", hourRequest.Hour + 1, "鍑哄彛绠¤矾鍙傛暟鏈夎, 璇风‘璁ゆ槸鍚﹁祴鍊�, ERROR 35"); return null; } - double target_flow = complex_request_paras.OutletPipePara[0].TargetFlow; - if (target_flow < 50) + + StringBuilder cacheNameBuilder = new StringBuilder(); + + double target_flow = 0; + bool isHaveSetPress = false; + foreach (var pipe in complex_request_paras.OutletPipePara) { + target_flow += pipe.TargetFlow; + if (pipe.TargetPress > 0.01) + { + isHaveSetPress = true; + } + cacheNameBuilder.AppendFormat("Q{0}H{1}", Math.Round(pipe.TargetFlow, 0), Math.Round(pipe.TargetPress, 3)); + } + if (target_flow < 50) + {//妫�鏌ユ祦閲� continue; } - - var result_anaSchemes = CalcSchemes鍘嬪姏(hourRequest.Request, null, out error_info); - if (result_anaSchemes == null || result_anaSchemes.Count == 0) - { - error_info = string.Format("绗瑊0},鍒嗘瀽鍑洪敊,鍘熷洜鏄�:{1}", hourRequest.Hour + 1, error_info); - return null; + if (!isHaveSetPress) + {//妫�鏌ュ帇鍔� + continue; } - var opt_anaScheme = result_anaSchemes.First(); + if (complex_request_paras.InletPipePara != null) + { + foreach (var wl in complex_request_paras.InletPipePara) + { + cacheNameBuilder.AppendFormat("V{0}", Math.Round(wl.Value, 0)); + } + } + #endregion + + + //鐢变簬寰幆璋冨彇,鎵�浠ヤ互鍓嶅垎鏋愭暟鎹紦瀛樿捣鏉� + var cacheName = cacheNameBuilder.ToString(); + IStation.Calculation.DispatchAna.Model.AnaScheme opt_anaScheme; + if (_dict.ContainsKey(cacheName)) + { + opt_anaScheme = _dict[cacheName]; + } + else + { + var result_anaSchemes = CalcSchemes鍘嬪姏(complex_request_paras, null, out error_info); + if (result_anaSchemes == null || result_anaSchemes.Count == 0) + { + if (string.IsNullOrEmpty(error_info)) + { + error_info = string.Format("{0}鏃�,鍒嗘瀽鍑洪敊,鍙兘鏄叆鍙傛暟鎹笉鍚堢悊,璇锋鏌�", + hourRequest.Hour + 1 ); + } + else + { + error_info = string.Format("{0}鏃�,鍒嗘瀽鍑洪敊,鍘熷洜鏄�:{1}", + hourRequest.Hour + 1, + error_info); + } + + return null; + } + opt_anaScheme = result_anaSchemes.First(); + _dict[cacheName] = opt_anaScheme; + } + + + //姹囨�� sum.Qt = sum.Qt + opt_anaScheme.TotalWrkQ; sum.Dt = sum.Dt + opt_anaScheme.TotalWrkP; } sum.WP = CalculateWP(sum.Dt, sum.Qt); return sum; } - + /// <summary> + /// + /// </summary> + /// <param name="pipes"></param> + /// <returns></returns> + protected static double CalcConnectPipeEta(List<IStation.Calculation.DispatchAna.Model.AnaScheme> pipes) + { + double eta = 0; + double qh = 0; + int count = 0; + foreach (var pipe in pipes) + { + if (pipe == null) + continue; + if (pipe.TotalWrkQ < 1 || pipe.TotalWrkH < 0.1) + continue; + qh += pipe.TotalWrkQ * pipe.TotalWrkH; + eta += pipe.TotalWrkQ * pipe.TotalWrkH * pipe.TotalWrkE; + count++; + } + if (count <= 0) + return 0; + return Math.Round(eta / qh, 2); + } } } -- Gitblit v1.9.3