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