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