From ed113213fc94c3d9886ea08dfddd09d08d9ba7d5 Mon Sep 17 00:00:00 2001
From: ningshuxia <ningshuxia0927@outlook.com>
Date: 星期三, 16 四月 2025 19:19:34 +0800
Subject: [PATCH] 调度代码修正

---
 01-api/Service/IStation.Service/07-helper/01-analysis/AnalysisHelper.cs |  157 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 150 insertions(+), 7 deletions(-)

diff --git a/01-api/Service/IStation.Service/07-helper/01-analysis/AnalysisHelper.cs b/01-api/Service/IStation.Service/07-helper/01-analysis/AnalysisHelper.cs
index 1674f27..fdbd9fa 100644
--- a/01-api/Service/IStation.Service/07-helper/01-analysis/AnalysisHelper.cs
+++ b/01-api/Service/IStation.Service/07-helper/01-analysis/AnalysisHelper.cs
@@ -25,7 +25,7 @@
         /// <param name="pumps"></param>
         /// <param name="analysis_factor_list"></param>
         /// <exception cref="Exception"></exception>
-        public void AnalysisPump(List<Model.Pump> pumps, List<Model.AnalysisFactor> analysis_factor_list=null)
+        public void AnalysisPump(List<Model.Pump> pumps, List<Model.AnalysisFactor> analysis_factor_list = null)
         {
             InsertLog("寮�濮嬪垎鏋愭车缁勫悎");
             if (pumps == null || pumps.Count < 1)
@@ -49,7 +49,7 @@
                 }
                 else
                 {
-                    var hz_head_dev_dict = analysis_factor_list?.Where(x=>x.Flag==pump.Flag)?.ToDictionary(x => x.Hz, y => y.HeadDeviation);
+                    var hz_head_dev_dict = analysis_factor_list?.Where(x => x.Flag == pump.Flag)?.ToDictionary(x => x.Hz, y => y.HeadDeviation);
                     ana_pump_fre_item_list = GetAnaPumpFreItems(_frequency_def, _frequency_min, _frequency_max, _frequency_space, pump, hz_head_dev_dict);
                 }
 
@@ -112,7 +112,7 @@
              decimal fre_max,
              decimal fre_space,
             Model.Pump pump,
-            Dictionary<double,double?> hz_head_dev_dict=null)
+            Dictionary<double, double?> hz_head_dev_dict = null)
         {
             if (pump == null)
             {
@@ -127,10 +127,10 @@
             var list = new List<AnaPumpFreItem>();
             for (decimal fre = fre_max; fre >= fre_min; fre -= fre_space)
             {
-                var hz= (double)Math.Round(fre, 1); 
-                var hz0=Math.Round(hz, 0); 
-        
-                Curve.CurveExpress qh = pump.CurveQH, qp= pump.CurveQP;
+                var hz = (double)Math.Round(fre, 1);
+                var hz0 = Math.Round(hz, 0);
+
+                Curve.CurveExpress qh = pump.CurveQH, qp = pump.CurveQP;
                 if (exist_dict)
                 {
                     if (hz_head_dev_dict.ContainsKey(hz0))
@@ -154,6 +154,149 @@
         }
 
 
+
+        /// <summary>
+        /// 鍒嗘瀽娉�
+        /// </summary>
+        /// <param name="pumps"></param>
+        /// <param name="analysis_factor_list"></param>
+        /// <exception cref="Exception"></exception>
+        public void AnalysisNew(List<Model.Pump> pumps, Dictionary<int, Dictionary<int, List<CurvePoint>>> flagHzCurveDict)
+        {
+            InsertLog("寮�濮嬪垎鏋愭车");
+            if (pumps == null || pumps.Count < 1)
+            {
+                InsertLog("鍒嗘瀽澶辫触:娌℃湁娉垫暟鎹�!");
+                return;
+            }
+
+            var ana_pump_list = new List<AnaPump>();
+            foreach (var pump in pumps)
+            {
+                var ana_pump = new AnaPump(pump);
+                if (!ana_pump.AllowCalc)
+                {
+                    throw new Exception("鏇茬嚎鏁版嵁寮傚父!");
+                }
+
+                var hzCurveDict = flagHzCurveDict[pump.Flag];
+                var ana_pump_fre_item_list = new List<AnaPumpFreItem>();
+                if (!pump.IsBp)
+                {
+                    ana_pump_fre_item_list = GetAnaPumpFreItems(_frequency_def, _frequency_def, _frequency_def, _frequency_space, pump, hzCurveDict);
+                }
+                else
+                { 
+                    ana_pump_fre_item_list = GetAnaPumpFreItems(_frequency_def, _frequency_min, _frequency_max, _frequency_space, pump, hzCurveDict);
+                }
+
+                ana_pump.AnaPumpFreItems = ana_pump_fre_item_list;
+                ana_pump_list.Add(ana_pump);
+            }
+
+            if (!ana_pump_list.Any())
+            {
+                InsertLog($"鍒嗘瀽杩涘害:娌℃湁娉靛彲鍒嗘瀽");
+                return;
+            }
+            for (int i = 0; i < ana_pump_list.Count; i++)
+            {
+                var pump = ana_pump_list[i];
+                var ana_pump_fre_items = pump.AnaPumpFreItems;
+                if (ana_pump_fre_items == null || !ana_pump_fre_items.Any())
+                    continue;
+
+                var run_flag = RunFlagHelper.Get(pump.Flag, pump.IsBp);
+                InsertLog($"鍒嗘瀽杩涘害:绗瑊i + 1}鍙版车");
+
+                var list = new List<Entity.AnalysisPump>(pump.AnaPumpFreItems.Count);
+                foreach (var freItem in ana_pump_fre_items)
+                {
+                    var analysis_pump = new Entity.AnalysisPump();
+                    analysis_pump.ID = Yw.YitIdHelper.NextId();
+                    analysis_pump.Flag = pump.Flag;
+                    analysis_pump.Hz = freItem.Frequency;
+                    analysis_pump.CurveQH = freItem.CurveQH.ToJson();
+                    analysis_pump.CurveQP = freItem.CurveQP.ToJson();
+
+                    freItem.CurveQH.GetMinMaxPointY(out double maxHead, out double minHead);
+                    analysis_pump.MinFlow = Math.Round(freItem.CurveQH.Min, 4);
+                    analysis_pump.MaxFlow = Math.Round(freItem.CurveQH.Max, 4);
+                    analysis_pump.MaxHead = Math.Round(maxHead, 4);
+                    analysis_pump.MinHead = Math.Round(minHead, 4);
+                    list.Add(analysis_pump);
+                }
+                Inserts(i + 1, run_flag, list);
+            }
+
+            InsertLog($"鍒嗘瀽杩涘害:{pumps.Count}鍙版车,鍒嗘瀽瀹屾瘯!");
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍒嗘瀽娉靛彉棰戦」
+        /// </summary> 
+        private static List<AnaPumpFreItem> GetAnaPumpFreItems(
+             decimal fre_def,
+             decimal fre_min,
+             decimal fre_max,
+             decimal fre_space,
+            Model.Pump pump,
+            Dictionary<int,List<CurvePoint>> hzCurveDict)
+        {
+            if (pump == null)
+            {
+                return default;
+            }
+            if (pump.CurveQH == null || pump.CurveQP == null)
+            {
+                return default;
+            }
+            var list = new List<AnaPumpFreItem>();
+            for (int i = (int)fre_max; i >= fre_min; i--)
+            {
+                var hz = i;
+                if (!hzCurveDict.ContainsKey(hz))
+                {
+                    continue;
+                }
+                var qhHzCurve = hzCurveDict[hz];
+                if (pump.IsBp)
+                {
+                    for (decimal j = 0; j <= 0.9m; j += fre_space)
+                    {
+                        var fre = hz - j;
+
+                        var qp = Curve.PumpCalculateHelper.CalculateSimilarQP(pump.CurveQP, (double)fre_def, (double)fre);
+                        var qh = IStation.Curve.FitHelper.BuildCurveExpress(qhHzCurve);
+                        //var qh2 = qh.GetFitPointsByXRange(pump.CurveQP.Min, pump.CurveQP.Max);
+                        //var qh3 = IStation.Curve.FitHelper.BuildCurveExpress(qh2);
+                        var freItem = new AnaPumpFreItem();
+                        freItem.Frequency = (double)fre;
+                        freItem.CurveQH = Curve.PumpCalculateHelper.CalculateSimilarQH(qh, (double)hz, (double)fre);
+                        freItem.CurveQP = qp;
+                        list.Add(freItem);
+                    }
+                }
+                else
+                {
+                    var qh = IStation.Curve.FitHelper.BuildCurveExpress(qhHzCurve);
+                    var qh2 = qh.GetFitPointsByXRange(pump.CurveQP.Min, pump.CurveQP.Max);
+                    var qh3 = IStation.Curve.FitHelper.BuildCurveExpress(qh2);
+                    var qp = pump.CurveQP;
+                    var freItem = new AnaPumpFreItem();
+                    freItem.Frequency = 50;
+                    freItem.CurveQH = qh3;
+                    freItem.CurveQP = qp;
+                    list.Add(freItem);
+                }
+                
+
+            } 
+
+            return list;
+
+        }
+
         #endregion
 
         #region AnalysisParameter

--
Gitblit v1.9.3