From 2f1cbec203dcff25df7a5c2b51b13ec558f2c3db Mon Sep 17 00:00:00 2001
From: Shuxia Ning <NingShuxia0927@outlook.com>
Date: 星期四, 13 二月 2025 11:15:00 +0800
Subject: [PATCH] 泵状态更新

---
 01-api/Service/IStation.Service/07-helper/02-schedule/ScheduleHelper.cs |  112 ++++++++++++++++++++++++-------------------------------
 1 files changed, 49 insertions(+), 63 deletions(-)

diff --git a/01-api/Service/IStation.Service/07-helper/02-schedule/ScheduleHelper.cs b/01-api/Service/IStation.Service/07-helper/02-schedule/ScheduleHelper.cs
index 4f8c4a7..3f1d00e 100644
--- a/01-api/Service/IStation.Service/07-helper/02-schedule/ScheduleHelper.cs
+++ b/01-api/Service/IStation.Service/07-helper/02-schedule/ScheduleHelper.cs
@@ -1,7 +1,4 @@
-锘縰sing IStation.Application;
-using IStation.Model;
-
-namespace IStation.Service
+锘縩amespace IStation.Service
 {
     /// <summary>
     /// 璋冨害鍒嗘瀽杈呭姪绫�
@@ -19,8 +16,7 @@
                 this.Flag = flag;
             }
             public int Flag { get; set; }
-        }
-
+        } 
         #endregion
 
         #region Private Variable
@@ -37,7 +33,7 @@
         private readonly double _sel_opt_flow_deviation_ratio = 0.05;//鍙�夋柟妗堢殑娴侀噺鍋忓樊姣�
         private readonly double _sel_opt_reasonable_flow_deviation_ratio = 0.005;//鍚堢悊鐨勬柟妗堢殑娴侀噺鍋忓樊姣�
 
-        private readonly Service.AnalysisParameter _service_analysis_conclusion = new();
+        private readonly Service.AnalysisParameter _service_analysis_parameter = new();
         private readonly Service.AnalysisDeviation _service_analysis_deviation = new();
         private readonly Service.AnalysisFactor _service_analysis_factor = new();
 
@@ -45,15 +41,16 @@
         private int _max_open_count;//鏈�澶у紑娉垫暟閲�
         private List<int> _current_open_flag_list = null;// 褰撳墠寮�娉靛垪琛�
         private List<int> _must_open_flag_list = null; // 蹇呭紑娉靛垪琛�  
-        private List<int> _must_close_flag_list = null; // 蹇呭叧娉靛垪琛�   
+        private List<int> _must_close_flag_list = null; // 蹇呭叧娉靛垪琛�
         private List<List<int>> _forbidden_flag_combine_list = null; // 绂佺敤娉电粍鍚� 
         private List<List<int>> _associative_flag_combine_list = null; // 鍏宠仈娉电粍鍚� 
         private List<List<int>> _same_section_flag_combine_list = null; // 鍚屾娉电粍鍚�  
         private List<Model.WaterSupplyLimit> _water_supply_limit_list = null; //渚涙按闄愬埗鍒楄〃
         private List<Model.FrequencyLimit> _frequency_limit_list = null; // 棰戠巼闄愬埗鍒楄〃
         private Dictionary<int, double> _flag_cumulative_runtime_dict = null; // 娉电疮璁¤繍琛屾椂闀垮瓧鍏�
+        private List<int> _priority_open_flag_list = null; // 浼樺厛寮�娉靛垪琛�
 
-        
+
         private List<Model.AnalysisDeviation> _analysis_deviation_list = null;//鍒嗘瀽鍋忓樊
 
         #endregion
@@ -75,6 +72,7 @@
             _water_supply_limit_list = null;
             _frequency_limit_list = null;
             _flag_cumulative_runtime_dict = null;
+            _priority_open_flag_list = null;
             if (schedule_config != null)
             {
                 _min_open_count = schedule_config.MinOpenCount;
@@ -87,6 +85,7 @@
                 _water_supply_limit_list = schedule_config.WaterSupplyLimitList;
                 _frequency_limit_list = schedule_config.FrequencyLimitList;
                 _flag_cumulative_runtime_dict = schedule_config.FlagCumulativeRuntimeDict;
+                _priority_open_flag_list = schedule_config.PriorityOpenFlagList;
             }
 
             _analysis_deviation_list = analysis_deviation_list;
@@ -95,8 +94,7 @@
 
 
         #region OptAnaCombine
-
-
+         
         /// <summary>
         /// 鑾峰彇鏈�浼樼粍鍚�
         /// </summary>
@@ -107,7 +105,7 @@
         /// <returns></returns>
         public AnaCombine GetOptAnaCombine
             (
-            List<Model.Pump> pump_list, 
+            List<Model.Pump> pump_list,
             Dictionary<int, double> flag_inlet_water_level_dict,
             double target_flow,
             double target_pressure
@@ -131,6 +129,7 @@
             var water_supply_limit_list = _water_supply_limit_list;
             var frequency_limit_list = _frequency_limit_list;
             var flag_cumulative_runtime_dict = _flag_cumulative_runtime_dict;
+            var priority_open_flag_list = _priority_open_flag_list;
 
             var pump_bp_dict = pump_list.ToDictionary(x => x.Flag, x => x.IsBp);
             var pump_nr_dict = pump_list.ToDictionary(x => x.Flag, x => x.Nr);
@@ -193,6 +192,10 @@
             {
                 var water_supply_min = water_supply_limit_list.Min(x => x.Min);
                 var water_supply_max = water_supply_limit_list.Max(x => x.Max);
+
+#if DEBUG
+                water_supply_min = 0;
+#endif
                 if (target_flow < water_supply_min || target_flow > water_supply_max)
                 {
                     return default;
@@ -220,6 +223,18 @@
             {
                 flag_cumulative_runtime_loss_ratio_dict = GetFlagCumulativeRuntimeLossRatioDict(flag_cumulative_runtime_dict);
             }
+            #endregion
+
+            #region 瀛樺湪-浼樺厛寮�娉靛垪琛�
+
+            var priority_open_flag_list_remark = string.Empty;
+            var exist_priority_open_flag_list = priority_open_flag_list != null && priority_open_flag_list.Count > 0;
+            if (exist_priority_open_flag_list)
+            {
+                priority_open_flag_list = priority_open_flag_list.OrderBy(x => x).ToList();
+                priority_open_flag_list_remark = IntListHelper.ToString(priority_open_flag_list);
+            }
+
             #endregion
 
             #region 瀛樺湪-褰撳墠寮�娉靛垪琛� (鏄惁鍒囨车)
@@ -260,6 +275,7 @@
             }
 
             #endregion
+
 
             #endregion
 
@@ -405,6 +421,23 @@
                         }
                     }
 
+                    //浼樺厛寮�娉靛垪琛�
+                    if (exist_priority_open_flag_list)
+                    {
+                        //foreach (var flag in priority_open_flag_list)
+                        //{
+                        //    if (combine.Contains(flag))
+                        //    {
+                        //        combine_merit_ratio *= 1.05;
+                        //    } 
+                        //}
+
+                        //鐩墠閫昏緫 浼樺厛寮�娉�==蹇呭紑鏂规
+                        var combine_remark = IntListHelper.ToString(combine.OrderBy(x => x));
+                        if (!combine_remark.Contains(priority_open_flag_list_remark))
+                            continue;
+                    }
+
                     #endregion
 
                     var total_loss_ratio = Math.Pow(_start_stop_loss_coefficient, start_stop_count);//鍚仠涓�娆℃崯澶变簺鑳借��
@@ -477,54 +510,7 @@
                 return default;
 
             //鍏堜慨姝g粍鍚堟洸绾垮拰妯″瀷鐨勫亸宸壃绋�
-            var combine_deviation_factor_dict = GetCombineDeviationFactorDict(target_flow, combine);
-             
-            if (GlobalHelper.IsStation1(combine))
-            {
-                var err_combine = new List<Tuple<double, List<int>>>()
-                {
-                    new (23500, new List<int>(){12,13,14,15,17 })
-                };
-
-                var exist_err_combine = err_combine.Find(x => x.Item2.SequenceEqual(combine));
-                if (exist_err_combine != null)
-                {
-                    ScheduleLog.Info(-1, "娴嬭瘯", $"鐩爣:{target_pressure}");
-                    if (target_flow > exist_err_combine.Item1)
-                    {
-                        var dev_diff = 0.5;
-                        foreach (var flag in combine)
-                        {
-                            var dev_pressure = combine_deviation_factor_dict[flag];
-                            combine_deviation_factor_dict[flag] = dev_pressure - dev_diff;
-                            //combine_deviation_factor_dict[flag] = 0;
-                            ScheduleLog.Info(-1, "娴嬭瘯", $"{flag}#:鍘嬪姏鍋忓樊{dev_pressure}-{dev_diff}={dev_pressure - dev_diff:N4}");
-                        }
-                    }
-                }
-            }
-            else
-            {
-                //var err_combine = new List<Tuple<double, List<int>>>()
-                //{
-                //    new (29000, new List<int>(){22,23,26})
-                //};
-                //var exist_err_combine = err_combine.Find(x => x.Item2.SequenceEqual(combine));
-                //if (exist_err_combine != null)
-                //{
-                //    ScheduleLog.Info(-1, "娴嬭瘯", $"鐩爣:{target_pressure}");
-                //    if (target_flow > exist_err_combine.Item1)
-                //    {
-                //        foreach (var flag in combine)
-                //        {
-
-                //            combine_deviation_factor_dict[flag] = 0;
-                //            ScheduleLog.Info(-1, "娴嬭瘯", $"{flag}#:鍘嬪姏鍋忓樊{0}");
-                //        }
-                //    }
-                //}
-            }
-
+            var combine_deviation_factor_dict = GetCombineDeviationFactorDict(target_flow, combine); 
             var conclusion_ex_list_list = new List<List<AnalysisConclusionViewModel>>();
             var conclusion_ex_list_dict = new Dictionary<int, List<AnalysisConclusionViewModel>>();
             double max_supply_flow = 0;
@@ -545,13 +531,13 @@
                 if (exist_frequency_limit_list && frequency_limit_flag_dict.ContainsKey(flag))
                 {
                     var limit = frequency_limit_flag_dict[flag];
-                    conclusion_list = _service_analysis_conclusion.GetList(run_flag, limit.Min, limit.Max, current_pressure_diff);
+                    conclusion_list = _service_analysis_parameter.GetList(run_flag, limit.Min, limit.Max, current_pressure_diff);
                 }
                 else
                 {
 
                     //瀹氶娉� 鍙兘鏈�灏忓帇宸秴杩囩洰鏍囧帇宸�
-                    var min_pressure_diff_conclusion = _service_analysis_conclusion.GetMinPressureDiff(run_flag);
+                    var min_pressure_diff_conclusion = _service_analysis_parameter.GetMinPressureDiff(run_flag);
                     if (min_pressure_diff_conclusion != null && min_pressure_diff_conclusion.PressureDiff > current_pressure_diff)
                     {
                         conclusion_list = new List<Model.AnalysisParameter>() { min_pressure_diff_conclusion };
@@ -561,7 +547,7 @@
                         var is_bp = pump_bp_dict[flag];
                         if (is_bp)
                         {
-                            conclusion_list = _service_analysis_conclusion.GetList(run_flag, current_pressure_diff);
+                            conclusion_list = _service_analysis_parameter.GetList(run_flag, current_pressure_diff);
                         }
                         else
                         {

--
Gitblit v1.9.3