From 2be5d90e96f163c67101571f6865b17effcb0f3f Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期三, 12 四月 2023 13:26:55 +0800
Subject: [PATCH] Merge branch 'master' of http://47.103.154.90:83/r/IStation/Service.V4.1

---
 Application/IStation.Application.OpenApi/shys/dispatch/DispatchAna_ShysController.cs |  227 ++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 163 insertions(+), 64 deletions(-)

diff --git a/Application/IStation.Application.OpenApi/shys/dispatch/DispatchAna_ShysController.cs b/Application/IStation.Application.OpenApi/shys/dispatch/DispatchAna_ShysController.cs
index 0b9eafc..1fdb198 100644
--- a/Application/IStation.Application.OpenApi/shys/dispatch/DispatchAna_ShysController.cs
+++ b/Application/IStation.Application.OpenApi/shys/dispatch/DispatchAna_ShysController.cs
@@ -8,6 +8,7 @@
 using System.ComponentModel.DataAnnotations;
 using Mapster;
 using Microsoft.AspNetCore.Authorization;
+using SqlSugar;
 
 namespace IStation.Application
 {
@@ -16,7 +17,7 @@
     /// </summary>
     [Route("OpenApi/DispatchAna/SHYS")]
     [ApiDescriptionSettings("OpenApi", Name = "涓婃捣鍘熸按璋冨害鍒嗘瀽", Order = 1000)]
-    public class DispatchAna_ShysController : IDynamicApiController 
+    public class DispatchAna_ShysController : IDynamicApiController
     {
         /// <summary>
         /// 璁$畻淇濇寔鐨勬柟妗�
@@ -29,10 +30,20 @@
         {
             if (input == null)
                 return default;
-            LogHelper.Debug(JsonHelper.Object2Json(input));
+            //浼楁瘏杩炵画涓ゆ璋冪敤瑙e喅鏂规
+            if (!string.IsNullOrEmpty(_lastFlowId))
+            {
+                if (_lastFlowId == input.flowId)
+                {
+                    LogHelper.Debug($"浼楁瘏閲嶅鍏ュ弬锛歿JsonHelper.Object2Json(input)}");
+                    return default;
+                }
+            }
+            _lastFlowId = input.flowId;
+            LogHelper.Debug($"浼楁瘏鍏ュ弬锛歿JsonHelper.Object2Json(input)}");
             var url_sg = Settings.WebApi.OpenApi.SanGaoDispatchUrl;
-            var responseText = HttpRequestHelper.Post(url_sg,JsonHelper.Object2Json(input));
-            LogHelper.Debug(responseText);
+            var responseText = HttpRequestHelper.Post(url_sg, JsonHelper.Object2Json(input));
+            LogHelper.Debug($"涓夐珮鍑哄弬锛歿responseText}");
             var result_sg = JsonHelper.Json2Object<DispatchFactoryDto>(responseText);
             if (result_sg == null)
                 return default;
@@ -41,13 +52,14 @@
             {
                 case 1://闀垮叴娉电珯
                     {
-                        var result= shys_cxd(input, result_sg,out error_info);
-                        //LogHelper.Debug(JsonHelper.Object2Json(result));
+                        var result = shys_cxd(input, result_sg, out error_info);
+                        LogHelper.Debug($"涔夌淮鍑哄弬锛歿JsonHelper.Object2Json(result)}");
                         return result;
                     }
-                default:return default;
+                default: return default;
             }
         }
+        private static string _lastFlowId = null;
 
         /// <summary>
         /// 璁$畻淇濇寔鐨勬柟妗�
@@ -116,16 +128,16 @@
             var input = new StationDispatchExInput();
             input.flowId = "娴嬭瘯";
             input.type = 1;
-            input.factory = new List<FactoryDispatchInput>() { new FactoryDispatchInput() { id=1,value=200} };
+            input.factory = new List<FactoryDispatchInput>() { new FactoryDispatchInput() { id = 1, value = 200 } };
 
             var result_sg = new DispatchFactoryDto();
             result_sg.result = new List<DispatchBranchDto>();
-            result_sg.result.Add(new DispatchBranchDto() { key= "stationCX_1#_flow",value= flow1 });
+            result_sg.result.Add(new DispatchBranchDto() { key = "stationCX_1#_flow", value = flow1 });
             result_sg.result.Add(new DispatchBranchDto() { key = "stationCX_1#_pressure", value = press1 });
             result_sg.result.Add(new DispatchBranchDto() { key = "stationCX_2#_flow", value = flow2 });
             result_sg.result.Add(new DispatchBranchDto() { key = "stationCX_2#_pressure", value = press2 });
             result_sg.scada = new List<DispatchScadaDto>();
-            result_sg.scada.Add(new DispatchScadaDto() {tagname= "_0402010404030103001",value=waterLevel });
+            result_sg.scada.Add(new DispatchScadaDto() { tagname = "_0402010404030103001", value = waterLevel });
             result_sg.scada.Add(new DispatchScadaDto() { tagname = "_0402010403150103003", value = middleValveStatus });
             result_sg.scada.Add(new DispatchScadaDto() { tagname = "_0402010403010101003", value = runStatus1 });
             result_sg.scada.Add(new DispatchScadaDto() { tagname = "_0402010403010201003", value = runStatus2 });
@@ -175,11 +187,13 @@
             {
                 water_level = scada_water.value;
             }
-      
+
             complex_request_paras.InletPipePara = new List<IStation.Calculation.DispatchAna.Model.InletPipePara>();
-            complex_request_paras.InletPipePara.Add(new IStation.Calculation.DispatchAna.Model.InletPipePara() {
-                Name = "鍚告按浜曟恫浣�", 
-                Value = water_level });
+            complex_request_paras.InletPipePara.Add(new IStation.Calculation.DispatchAna.Model.InletPipePara()
+            {
+                Name = "鍚告按浜曟恫浣�",
+                Value = water_level
+            });
 
 
 
@@ -190,7 +204,7 @@
                 middleValveStatus = (int)scada_middle_vavle.value;
             complex_request_paras.ValvePara = new List<IStation.Calculation.DispatchAna.Model.ValvePara>();
             complex_request_paras.ValvePara.Add(new IStation.Calculation.DispatchAna.Model.ValvePara() { Name = "涓棿闃�闂�", OpenStatus = middleValveStatus });
- 
+
 
             //鏈烘车 寮�鍋滄満鐘舵��
             List<long> machine_id_array = new List<long> { 19, 22, 25, 28 };
@@ -199,7 +213,7 @@
             var scada_runstatus1 = result_sg.scada.Find(t => t.tagname == "_0402010403010101003");
             if (scada_runstatus1 != null && (int)scada_runstatus1.value == 1)
                 machine_run_status.Add(machine_id_array[0]);
- 
+
             //2鍙锋车寮�鏈虹姸鎬�
             var scada_runstatus2 = result_sg.scada.Find(t => t.tagname == "_0402010403010201003");
             if (scada_runstatus2 != null && (int)scada_runstatus2.value == 1)
@@ -225,7 +239,7 @@
             IStation.Calculation.DispatchAna.Model.OutletPipePara pipe1 = new Calculation.DispatchAna.Model.OutletPipePara();
             pipe1.Name = "涓�鍙风";
             var flow1 = result_sg.result.Find(x => x.key == "stationCX_1#_flow");
-            if(flow1 == null)
+            if (flow1 == null)
             {
                 error_info = "涓�鍙风娴侀噺鏃犳硶鑾峰彇";
                 return null;
@@ -233,7 +247,7 @@
             else
             {
                 pipe1.TargetFlow = flow1.value;
-            } 
+            }
             var press1 = result_sg.result.Find(x => x.key == "stationCX_1#_pressure");
             if (press1 == null)
             {
@@ -243,14 +257,14 @@
             else
             {
                 pipe1.TargetPress = press1.value;
-            }    
+            }
             var pipe1_val = result_sg.scada.Find(t => t.tagname == "_0402010403150101003");
             if (pipe1_val != null)
             {
-                pipe1.ValveStatus =  (int)pipe1_val.value;
+                pipe1.ValveStatus = (int)pipe1_val.value;
             }
-             
-    
+
+
 
             //2鍙风
             IStation.Calculation.DispatchAna.Model.OutletPipePara pipe2 = new Calculation.DispatchAna.Model.OutletPipePara();
@@ -265,7 +279,7 @@
             {
                 pipe2.TargetFlow = flow2.value;
             }
-           
+
             var press2 = result_sg.result.Find(x => x.key == "stationCX_2#_pressure");
             if (press2 == null)
             {
@@ -275,13 +289,13 @@
             else
             {
                 pipe2.TargetPress = press2.value;
-            } 
+            }
             var pipe2_val = result_sg.scada.Find(t => t.tagname == "_0402010403150102003");
             if (pipe2_val != null)
             {
                 pipe2.ValveStatus = (int)pipe2_val.value;
             }
-    
+
 
             complex_request_paras.OutletPipePara = new List<IStation.Calculation.DispatchAna.Model.OutletPipePara>(2);
             complex_request_paras.OutletPipePara.Add(pipe1);
@@ -292,10 +306,43 @@
 
             //鏋勯�犺绠楀櫒
             var calulator = IStation.Calculation.DispatchAnalyCalculatorFactory.CreateKeepStatusCalculator(4,
-                IStation.ObjectType.Station, 2,null);
+                IStation.ObjectType.Station, 2, null);
             calulator.IntialRequest(complex_request_paras,
                     null,
                     machine_run_status);
+
+            #region 瀹炴椂閲�
+            double real_total_flow_pipe1 = 0;
+            var pipe1_val_flow_real = result_sg.scada.Find(t => t.tagname == "_0402010403030002001");
+            if (pipe1_val_flow_real != null && pipe1_val_flow_real.value > 100)
+            {//瀹炴椂閲�,  stationCX_2#_flow" 涓夐珮缁欑殑鐩爣閲�
+                real_total_flow_pipe1 = pipe1_val_flow_real.value;
+            }
+
+            double real_oulet_press_pipe1 = 0;
+            var pipe1_val_press_real = result_sg.scada.Find(t => t.tagname == "_0402010403030002005");
+            if (pipe1_val_press_real != null && pipe1_val_press_real.value > 100)
+            {//瀹炴椂閲�,  stationCX_2#_flow" 涓夐珮缁欑殑鐩爣閲�
+                real_oulet_press_pipe1 = pipe1_val_press_real.value;
+            }
+
+
+            double real_total_flow_pipe2 = 0;
+            var pipe2_val_flow_real = result_sg.scada.Find(t => t.tagname == "_0402010403030002002");
+            if (pipe2_val_flow_real != null && pipe2_val_flow_real.value > 100)
+            {
+                real_total_flow_pipe2 = pipe2_val_flow_real.value;
+            }
+
+            double real_oulet_press_pipe2 = 0;
+            var pipe2_val_press_real = result_sg.scada.Find(t => t.tagname == "_0402010403030002006");
+            if (pipe2_val_press_real != null && pipe2_val_press_real.value > 100)
+            {//瀹炴椂閲�,  stationCX_2#_flow" 涓夐珮缁欑殑鐩爣閲�
+                real_oulet_press_pipe2 = pipe2_val_press_real.value;
+            }
+
+            #endregion
+
 
             //鍑烘柟妗� 
             var scheme = calulator.Calc(out error_info);
@@ -309,6 +356,48 @@
             result.P = scheme.TotalWrkP;
             result.WP = scheme.WP;
             result.UWP = scheme.UWP;
+            result.Scheme = new DispatchAnaCurrentOutput();
+            result.Scheme.MiddleValveStatus = middleValveStatus;
+            result.Scheme.Pipes = new List<DispatchAnaCurrentOutput.PipeParaOutput>();
+            result.Scheme.Pipes.Add(
+                new DispatchAnaCurrentOutput.PipeParaOutput()
+                {
+                    Name = "1#绠�",
+                    TargetFlow = pipe1.TargetFlow,
+                    TargetPressure = pipe1.TargetPress,
+                    CurrentFlow = real_total_flow_pipe1,
+                    CurrentPressure = real_oulet_press_pipe1
+                }
+                );
+            result.Scheme.Pipes.Add(
+                new DispatchAnaCurrentOutput.PipeParaOutput()
+                {
+                    Name = "2#绠�",
+                    TargetFlow = pipe2.TargetFlow,
+                    TargetPressure = pipe2.TargetPress,
+                    CurrentFlow = real_total_flow_pipe2,
+                    CurrentPressure = real_oulet_press_pipe2
+                }
+            );
+
+            List<string> machine_frq_hz_target_name = new List<string> {
+                        "_0402010403010112007",
+                        "_0402010403010212019",
+                        "_0402010403010312007",
+                        "_0402010403010412019" };
+
+            List<string> machine_speed_target_name = new List<string> {
+                        "_0402010403010112008",
+                        "_0402010403010212020",
+                        "_0402010403010312008",
+                        "_0402010403010412020" };
+
+            List<string> machine_names = new List<string> {
+                        "闀垮叴娉垫埧1鍙锋満娉�",
+                        "闀垮叴娉垫埧2鍙锋満娉�",
+                        "闀垮叴娉垫埧3鍙锋満娉�",
+                        "闀垮叴娉垫埧4鍙锋満娉�" };
+
             result.Pumps = new List<IStation.Application.DispatchAnaSchemeItemOutput>();
             foreach (IStation.Calculation.DispatchAna.Model.AnaSchemeItem item in scheme.Items)
             {
@@ -324,63 +413,71 @@
                 pump_item.P = item.WorkPointP;
                 pump_item.Frequency = item.Frequence;
                 pump_item.Speed = item.Speed;
-                result.Pumps.Add(pump_item);
 
-                if (pump_item.Index == 0)
-                    pump_item.Name = "闀垮叴娉垫埧1鍙锋満娉�";
-                else if (pump_item.Index == 1)
-                    pump_item.Name = "闀垮叴娉垫埧2鍙锋満娉�";
-                else if (pump_item.Index == 2)
-                    pump_item.Name = "闀垮叴娉垫埧3鍙锋満娉�";
-                else if (pump_item.Index == 3)
-                    pump_item.Name = "闀垮叴娉垫埧4鍙锋満娉�";
+                if (pump_item.Index >= 0 && pump_item.Index < 4)
+                {
+                    //鑾峰彇瀹炴椂棰戠巼
+                    var fr_hz_tag_name = machine_frq_hz_target_name[pump_item.Index];
+                    var current_val_fr_hz = result_sg.scada.Find(t => t.tagname == fr_hz_tag_name);
+                    if (current_val_fr_hz != null && current_val_fr_hz.value > 10)
+                    {
+                        pump_item.CurrentFrequency = current_val_fr_hz.value;
+                    }
+
+                    //鑾峰彇瀹炴椂杞��
+                    var speed_tag_name = machine_speed_target_name[pump_item.Index];
+                    var current_val_speed = result_sg.scada.Find(t => t.tagname == speed_tag_name);
+                    if (current_val_speed != null && current_val_speed.value > 10)
+                    {
+                        pump_item.CurrentSpeed = current_val_speed.value;
+                    }
+
+                    //鏈烘车鍚嶇О
+                    pump_item.Name = machine_names[pump_item.Index];
+                }
+
+                result.Pumps.Add(pump_item);
             }
 
 
-
-            
             if (machine_run_status.Count == 1)
             {//淇濊瘉寮�涓�鍙版车鏃�, 娴侀噺澶� 棰戠巼涔熷ぇ, 娴侀噺灏� , 棰戠巼涔熷皬
-                double current_total_flow = 0;
-                var pipe1_val_flow_current = result_sg.scada.Find(t => t.tagname == "_0402010403030002001");
-                if (pipe1_val_flow_current != null && pipe1_val_flow_current.value>100)
+                if (pipe1.TargetFlow + pipe2.TargetFlow > 100)
                 {
-                    current_total_flow = pipe1_val_flow_current.value;
-                }
-                else
-                {
-                    var pipe2_val_flow_current = result_sg.scada.Find(t => t.tagname == "_0402010403030002002");
-                    if (pipe2_val_flow_current != null && pipe2_val_flow_current.value > 100)
-                    {
-                        current_total_flow = pipe2_val_flow_current.value;
-                    }
-                }
+                    double current_total_flow = 0;
+                    if (pipe1.TargetFlow > 100)
+                        current_total_flow = pipe1.TargetFlow;
+                    else
+                        current_total_flow = pipe2.TargetFlow;
 
-                if(current_total_flow > 100)
-                {
-                    List<string > machine_frq_hz_target_name = new List<string> { 
-                        "_0402010403010112007", 
-                        "_0402010403010212019", 
-                        "_0402010403010312007", 
-                        "_0402010403010412019" };
+
                     var open_pump = result.Pumps.First();
                     var fr_hz_tag_name = machine_frq_hz_target_name[open_pump.Index];
                     var current_val_fr_hz = result_sg.scada.Find(t => t.tagname == fr_hz_tag_name);
                     if (current_val_fr_hz != null && current_val_fr_hz.value > 10)
                     {
                         if (current_total_flow < scheme.TotalWrkQ && current_val_fr_hz.value > open_pump.Frequency)
-                        {
+                        {//淇濊瘉瓒嬪娍姝g‘
                             open_pump.Frequency = Math.Round(current_val_fr_hz.value * scheme.TotalWrkQ / current_total_flow, 2);
                         }
                         else if (current_total_flow > scheme.TotalWrkQ && current_val_fr_hz.value < open_pump.Frequency)
-                        {
+                        {//淇濊瘉瓒嬪娍姝g‘
                             open_pump.Frequency = Math.Round(current_val_fr_hz.value * scheme.TotalWrkQ / current_total_flow, 2);
                         }
                         else
                         {//鍘熸按鍙嶉 , 鐢ㄦ洸绾胯绠�, 棰戠巼鍋忎綆, 浜轰负澧炲姞0.5HZ
-                            open_pump.Frequency = open_pump.Frequency + 0.5;
+                            if (open_pump.Frequency < 49.5)
+                            {
+                                open_pump.Speed = Math.Round
+                                    (open_pump.Speed * (open_pump.Frequency + 0.5) / (open_pump.Frequency), 0);
+                                open_pump.Frequency = open_pump.Frequency + 0.5;
+                            }
+
                             if (open_pump.Frequency > 50)
+                            {
                                 open_pump.Frequency = 50;
+                            }
+
                         }
                     }
                 }
@@ -391,7 +488,12 @@
                 {//鍘熸按鍙嶉 , 鐢ㄦ洸绾胯绠�, 棰戠巼鍋忎綆, 浜轰负澧炲姞0.5HZ
                     if (x.Frequency > 10)
                     {
-                        x.Frequency = x.Frequency + 0.5;//
+                        if (x.Frequency < 49.5)
+                        {
+                            x.Speed = Math.Round
+                                (x.Speed * (x.Frequency + 0.5) / (x.Frequency), 0);
+                            x.Frequency = x.Frequency + 0.5;
+                        }
                     }
                     if (x.Frequency > 50)
                         x.Frequency = 50;
@@ -400,9 +502,6 @@
 
             return result;
         }
-
-
-
 
 
     }

--
Gitblit v1.9.3