From 0171d347fec140d31db39ab5d76d51eebac472c2 Mon Sep 17 00:00:00 2001
From: ningshuxia <ningshuxia0927@outlook.com>
Date: 星期一, 31 十月 2022 14:28:48 +0800
Subject: [PATCH] Merge branch 'master' of http://47.103.154.90:83/r/IStation/Service.V4.1

---
 Calculation/IStation.Calculation.Dispatch/general/OptAna.cs                          |   16 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/金海泵站/KeepStatus.cs     |  231 ++
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/长兴岛/OptAna.cs          |   59 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/陈行一输/Current.cs        |   96 
 Application/IStation.Application.OpenApi/shys/plan/shys/shys长兴泵站.cs                  |    4 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/五号沟金海方向/Current.cs     |   19 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/陈行二输/Base.cs           |   62 
 Calculation/IStation.Calculation.Dispatch/input/RequestParasComplex.cs               |   10 
 Application/IStation.Application.OpenApi/IStation.Application.OpenApi.csproj         |    4 
 Application/IStation.Application.OpenApi/shys/plan/shys/shys陈行一输.cs                  |  146 +
 Application/IStation.Application.OpenApi/shys/plan/shys/shys泰和泵站.cs                  |   97 
 Application/IStation.Application.OpenApi/shys/plan/shys/shys金泽泵站.cs                  |    2 
 Application/IStation.Application.OpenApi/shys/plan/shys/shys徐泾泵站.cs                  |    4 
 Application/IStation.Application.OpenApi/shys/plan/shys/shys大桥泵站.cs                  |   33 
 Calculation/IStation.Calculation.Dispatch/Model/CurrentRecordBundle.cs               |   16 
 Application/IStation.Application.OpenApi/shys/plan/shys/shys五号沟金海方向.cs               |   14 
 Application/IStation.Application.OpenApi/shys/plan/shys/shys临江2号泵房.cs                |   87 
 Application/IStation.Application.OpenApi/shys/plan/shys/shys南汇北泵站.cs                 |  100 
 Calculation/IStation.Calculation.Dispatch/input/InletPipePara.cs                     |   12 
 Calculation/IStation.Calculation.Dispatch/input/OutletPipePara.cs                    |    7 
 Application/IStation.Application.Eta/dispatch_analy/dto/Dto.cs                       |   10 
 Application/IStation.Application.OpenApi/shys/dispatch/DispatchAna_ShysController.cs |    4 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/金海泵站/Current.cs        |   81 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/泰和泵站/Base.cs           |   64 
 Application/IStation.Application.Eta/IStation.Application.Eta.csproj                 |    1 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/五号沟金海方向/OptAna.cs      |  419 +--
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/陈行一输/KeepStatus.cs     |  233 ++
 Calculation/IStation.Calculation.Dispatch/helper/DispatchAnaGeneralHelper压力.cs       |  131 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/陈行二输/OptAna.cs         |  366 +++
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/南汇北/OptAna.cs          |  244 ++
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/陈行一输/OptAna.cs         |  447 ++++
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/长兴岛/Base.cs            |   37 
 Application/IStation.Application.OpenApi/shys/plan/shys/shys五号沟严桥方向1.cs              |    4 
 Application/IStation.Application.OpenApi/shys/plan/shys/shys临江1号泵房.cs                |   13 
 Application/IStation.Application.OpenApi/shys/plan/shys/shys五号沟凌桥方向.cs               |    4 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/陈行一输/Base.cs           |   87 
 Application/IStation.Application.OpenApi/shys/plan/helper/PlanAnaBaseCalculator.cs   |    4 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/长兴岛/KeepStatus.cs      |   27 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/南汇北/KeepStatus.cs      |  165 +
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/泰和泵站/OptAna.cs         |  483 ++++
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/五号沟金海方向/Base.cs        |   49 
 Application/IStation.Application.OpenApi/shys/plan/shys/shys松江泵站.cs                  |   14 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/南汇北/Base.cs            |   71 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/南汇北/Current.cs         |   72 
 Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs         |    4 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/陈行二输/KeepStatus.cs     |  193 +
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/泰和泵站/Current.cs        |   68 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/泰和泵站/KeepStatus.cs     |  378 +++
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/金海泵站/OptAna.cs         |  519 +++++
 Calculation/IStation.Calculation.Dispatch/general/KeepStatus.cs                      |    8 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/陈行二输/Current.cs        |   64 
 Application/IStation.Application.OpenApi/shys/plan/shys/shys五号沟严桥方向2.cs              |    4 
 Application/IStation.Application.OpenApi/shys/plan/shys/shys陈行二输.cs                  |  104 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/五号沟金海方向/KeepStatus.cs  |  195 +
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/金海泵站/Base.cs           |   90 
 Application/IStation.Application.OpenApi/shys/plan/shys/shys金海泵站.cs                  |  135 
 Application/IStation.Application.OpenApi/shys/plan/shys/ShysHelper.cs                |   83 
 Calculation/IStation.Calculation.Dispatch/custom/shys/station/长兴岛/Current.cs         |   15 
 Calculation/IStation.Calculation.Dispatch/base/CalculatorOptAnaBase.cs               |   19 
 59 files changed, 5,160 insertions(+), 768 deletions(-)

diff --git a/Application/IStation.Application.Eta/IStation.Application.Eta.csproj b/Application/IStation.Application.Eta/IStation.Application.Eta.csproj
index b1924f7..6d7d6df 100644
--- a/Application/IStation.Application.Eta/IStation.Application.Eta.csproj
+++ b/Application/IStation.Application.Eta/IStation.Application.Eta.csproj
@@ -23,7 +23,6 @@
     <ProjectReference Include="..\..\Service\IStation.Service.Main\IStation.Service.Main.csproj" />
     <ProjectReference Include="..\..\Service\IStation.Service.Product\IStation.Service.Product.csproj" />
     <ProjectReference Include="..\IStation.Application.Core\IStation.Application.Core.csproj" />
-    <ProjectReference Include="..\IStation.Application.Epanet\IStation.Application.Epanet.csproj" />
   </ItemGroup>
 
 </Project>
diff --git a/Application/IStation.Application.Eta/dispatch_analy/dto/Dto.cs b/Application/IStation.Application.Eta/dispatch_analy/dto/Dto.cs
index 99c6f5e..fc1303c 100644
--- a/Application/IStation.Application.Eta/dispatch_analy/dto/Dto.cs
+++ b/Application/IStation.Application.Eta/dispatch_analy/dto/Dto.cs
@@ -117,7 +117,7 @@
         {
             error_info = null;
             var complex_request_paras = new  Calculation.DispatchAna.Model.RequestParasComplex();
-            complex_request_paras.WaterLevelPara = new List<Calculation.DispatchAna.Model.WaterLevelPara>();
+            complex_request_paras.InletPipePara = new List<Calculation.DispatchAna.Model.InletPipePara>();
             complex_request_paras.CorpID = this.CorpID;
             complex_request_paras.StationID = this.StationID;
 
@@ -125,8 +125,8 @@
             {//1:琛ㄧず鎵▼ 
                 complex_request_paras.PressValueType = Calculation.DispatchAna.Model.RequestParasComplex.ePressValueType.鎵▼;
 
-                complex_request_paras.WaterLevelPara = new List<Calculation.DispatchAna.Model.WaterLevelPara>();
-                complex_request_paras.WaterLevelPara.Add(new Calculation.DispatchAna.Model.WaterLevelPara(0));
+                complex_request_paras.InletPipePara = new List<Calculation.DispatchAna.Model.InletPipePara>();
+                complex_request_paras.InletPipePara.Add(new Calculation.DispatchAna.Model.InletPipePara(0));
             }
             else
             {//鍘嬪姏
@@ -134,10 +134,10 @@
 
                 if (WaterLevelList != null && WaterLevelList.Count > 0)
                 {
-                    complex_request_paras.WaterLevelPara = new List<Calculation.DispatchAna.Model.WaterLevelPara>();
+                    complex_request_paras.InletPipePara = new List<Calculation.DispatchAna.Model.InletPipePara>();
                     foreach (var wl in WaterLevelList)
                     {
-                        complex_request_paras.WaterLevelPara.Add(new Calculation.DispatchAna.Model.WaterLevelPara(wl));
+                        complex_request_paras.InletPipePara.Add(new Calculation.DispatchAna.Model.InletPipePara(wl));
                     }
                 }             
             }
diff --git a/Application/IStation.Application.OpenApi/IStation.Application.OpenApi.csproj b/Application/IStation.Application.OpenApi/IStation.Application.OpenApi.csproj
index 7b8e887..301c963 100644
--- a/Application/IStation.Application.OpenApi/IStation.Application.OpenApi.csproj
+++ b/Application/IStation.Application.OpenApi/IStation.Application.OpenApi.csproj
@@ -10,6 +10,10 @@
   </PropertyGroup>
 
   <ItemGroup>
+    <Compile Remove="shys\plan\helper\PlanAnaCalculatorFactory.cs" />
+  </ItemGroup>
+
+  <ItemGroup>
     <ProjectReference Include="..\..\Calculation\IStation.Calculation.Dispatch\IStation.Calculation.Dispatch.csproj" />
     <ProjectReference Include="..\IStation.Application.Core\IStation.Application.Core.csproj" />
   </ItemGroup>
diff --git a/Application/IStation.Application.OpenApi/shys/dispatch/DispatchAna_ShysController.cs b/Application/IStation.Application.OpenApi/shys/dispatch/DispatchAna_ShysController.cs
index f7571b2..c31e9cb 100644
--- a/Application/IStation.Application.OpenApi/shys/dispatch/DispatchAna_ShysController.cs
+++ b/Application/IStation.Application.OpenApi/shys/dispatch/DispatchAna_ShysController.cs
@@ -176,8 +176,8 @@
                 water_level = scada_water.value;
             }
       
-            complex_request_paras.WaterLevelPara = new List<IStation.Calculation.DispatchAna.Model.WaterLevelPara>();
-            complex_request_paras.WaterLevelPara.Add(new IStation.Calculation.DispatchAna.Model.WaterLevelPara() {
+            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 });
 
diff --git a/Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs b/Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs
index ae87f0d..96a3c70 100644
--- a/Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs
+++ b/Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs
@@ -186,8 +186,8 @@
             var resultList = calculator.Calc(station, sg_factoryId, sumRecordList, out ana_error_info);
             if (resultList == null || resultList.Count() < 1)
             {
-                error_info = $"factoryId:{sg_factoryId},娉电珯鍚嶇О:{station.Name} 娉电珯id:{stationId},鍒嗘瀽閿欒,鍘熷洜鏄�:{ana_error_info}";
-                LogHelper.Error("涓婃捣鍘熸按鑳借�楄鍒掑垎鏋愯绠椾腑锛�"+error_info);
+                error_info = $"娉电珯鍚嶇О:{station.Name} 娉电珯id:{stationId},鍘熷洜鏄�:{ana_error_info}";
+                LogHelper.Error("涓婃捣鍘熸按鑳借�楄鍒掑垎鏋愯绠椾腑 factoryId:{sg_factoryId},锛�" + error_info);
                 return null;
             }
 
diff --git a/Application/IStation.Application.OpenApi/shys/plan/helper/PlanAnaBaseCalculator.cs b/Application/IStation.Application.OpenApi/shys/plan/helper/PlanAnaBaseCalculator.cs
index 4004cd1..e9eff1d 100644
--- a/Application/IStation.Application.OpenApi/shys/plan/helper/PlanAnaBaseCalculator.cs
+++ b/Application/IStation.Application.OpenApi/shys/plan/helper/PlanAnaBaseCalculator.cs
@@ -99,10 +99,10 @@
                 //涓�涓湀鐨勫ぉ鏁�
                 var dayNumber = DateTime.DaysInMonth(year, monthRecord.Month);
                 //姣忓ぉ鐨勬眹鎬�
-                var daySum = this._dispatchAnaCalc.CalcSumData(allHourRequests,true, out error_info);
+                var daySum = this._dispatchAnaCalc.CalcSumData(allHourRequests, true, out error_info);
                 if (daySum == null || daySum.Qt <= 0)
                 {
-                    error_info = "璋冨害鍒嗘瀽澶辫触,鍘熷洜:" + error_info;
+                    error_info = String.Format( "{0}鏈�,璋冨害鍒嗘瀽澶辫触,鍘熷洜:{1}" ,monthRecord.Month, error_info);
                     return null;
                 }
                 //璁$畻姣忔湀鐨勬眹鎬�
diff --git a/Application/IStation.Application.OpenApi/shys/plan/shys/ShysHelper.cs b/Application/IStation.Application.OpenApi/shys/plan/shys/ShysHelper.cs
index 8d046c3..65c9363 100644
--- a/Application/IStation.Application.OpenApi/shys/plan/shys/ShysHelper.cs
+++ b/Application/IStation.Application.OpenApi/shys/plan/shys/ShysHelper.cs
@@ -27,59 +27,58 @@
 
             return  _dict[SgFactoryId];
         }
-
+        //    {1,2},//闀垮叴娉电珯
+        //    {2,12},//浜斿彿娌熷噷妗ユ柟鍚�
+        //    {3,9},//浜斿彿娌熼噾娴锋柟鍚�
+        //    {4,3},//浜斿彿娌熶弗妗ユ柟鍚�1
+        //    {5,5},//浜斿彿娌熶弗妗ユ柟鍚�2
+        //    {6,4},//涓ユˉ娉电珯
+        //    {7,6},//涓存睙1#娉电珯
+        //    {8,7},//涓存睙2#娉电珯
+        //    {9,8},//寰愭尘娉电珯
+        //    {10,10},//閲戞捣娉电珯
+        //    {11,11},//鍗楁眹鍖楁车绔�
+        //    {12,15},//闄堣涓�杈�
+        //    {13,16},//闄堣浜岃緭
+        //    {14,17},//娉板拰娉电珯
+        //    {15,19},//閲戞辰娉电珯
+        //    {16,20},//鏉炬睙娉电珯
+        //    {17,21},//澶фˉ娉电珯
         static Dictionary<int, StationInfo> _dict;
         private static void Inital()
         {
             _dict = new Dictionary<int, StationInfo>();
+
             // 鍑烘按鎬荤鍘嬪姏, 娌℃湁鏁版嵁
             //_dict.Add(15, new StationInfo(19, new IStation.Calculation.shys閲戞辰娉电珯()));//NG 鍑烘按鎬荤鍘嬪姏,鐬椂娴侀噺娌℃湁鏁版嵁 涓夐珮鏁版嵁涓嶅叏
             //_dict.Add(9, new StationInfo(8, new IStation.Calculation.shys寰愭尘娉电珯()));//NG 娌℃湁姘存睜姘翠綅,杩涙按鍘嬪姏楂樹簬鍑烘按鍘嬪姏
             //_dict.Add(6, new StationInfo(4, new IStation.Calculation.shys涓ユˉ娉电珯()));//NG 娌℃湁娴侀噺鏁版嵁, 娌℃湁鍑哄彛娑蹭綅鏁版嵁
+            //_dict.Add(3, new StationInfo(9, new IStation.Calculation.shys浜斿彿娌熼噾娴锋柟鍚�()));//NG 鍑哄彛鍘嬪姏鏈夌殑鏄�1MPa 鏈夌殑3MPa  娉电珯鏍规湰杈句笉鍒拌繖涓帇鍔�
 
+            //_dict.Add(10, new StationInfo(10, new IStation.Calculation.shys閲戞捣娉电珯()));//NG 绠¤矾涓� 杩涘彛鍘嬪姏:0.1259MPa,鍑哄彛鍘嬪姏:0.2135MPa,绾�8.8m鎵▼,娴侀噺瑕佹眰:11596, 娉甸瀹氭壃绋嬩负47m,鍙橀涔熸棤娉曞緱鍒板姝や綆鐨勬壃绋�
+            //_dict.Add(12, new StationInfo(15, new IStation.Calculation.shys闄堣涓�杈�()));//NG 娌℃湁鎻愪緵 _0402010503030202003 涓夊彿绠″嚭鍙f祦閲忓��
+            //_dict.Add(7, new StationInfo(6, new IStation.Calculation.shys涓存睙1鍙锋车鎴�())); //NG 娌℃湁鎻愪緵 娴侀噺 ,鏃犳硶璁$畻
+            //_dict.Add(11, new StationInfo(11, new IStation.Calculation.shys鍗楁眹鍖楁车绔�()));//NG 绠¤矾涓� 杩涘彛鍘嬪姏: 6MPa , 涓嶅彲鑳借揪鍒拌繖涔堥珮鍘嬪姏
+            //_dict.Add(16, new StationInfo(20, new IStation.Calculation.shys鏉炬睙娉电珯()));//NG 娌℃湁鎻愪緵 鍑烘按鎬荤鍘嬪姏 鍜屾祦閲� ,鏃犳硶璁$畻
+            //_dict.Add(17, new StationInfo(21, new IStation.Calculation.shys澶фˉ娉电珯())); // NG 娌℃湁鎻愪緵 娴侀噺 ,鏃犳硶璁$畻
 
-            _dict.Add(3, new StationInfo(9, new IStation.Calculation.shys浜斿彿娌熼噾娴锋柟鍚�()));
+            // _dict.Add(14, new StationInfo(17, new IStation.Calculation.shys娉板拰娉电珯()));//NG  绠¤矾浜岃皟搴︽柟妗堟棤娉曡绠�,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,杩涘彛鍘嬪姏:0.12395039999999999MPa,鍑哄彛鍘嬪姏:0.14949020652770995MPa,娴侀噺瑕佹眰:4180.51220703125"
 
-
-            //_dict.Add(1, new StationInfo(2, new IStation.Calculation.shys闀垮叴娉电珯()));//OK
-            //_dict.Add(2, new StationInfo(12, new IStation.Calculation.shys浜斿彿娌熷噷妗ユ柟鍚�()));//ok
-            //_dict.Add(4, new StationInfo(3, new IStation.Calculation.shys浜斿彿娌熶弗妗ユ柟鍚�1()));//OK
-            //_dict.Add(5, new StationInfo(5, new IStation.Calculation.shys浜斿彿娌熶弗妗ユ柟鍚�2()));//OK
-
-
-            // 
-            //
-            //_dict.Add(7, new StationInfo(6, new IStation.Calculation.shys涓存睙1鍙锋车鎴�())); 
-            //_dict.Add(8, new StationInfo(7, new IStation.Calculation.shys涓存睙2鍙锋车鎴�())); 
-            //
-            //_dict.Add(10, new StationInfo(10, new IStation.Calculation.shys閲戞捣娉电珯())); 
-            //_dict.Add(11, new StationInfo(11, new IStation.Calculation.shys鍗楁眹鍖楁车绔�())); 
-            //_dict.Add(12, new StationInfo(15, new IStation.Calculation.shys闄堣涓�杈�())); 
-            //_dict.Add(13, new StationInfo(16, new IStation.Calculation.shys闄堣浜岃緭())); 
-            //_dict.Add(14, new StationInfo(17, new IStation.Calculation.shys娉板拰娉电珯())); 
-            // 
-            //_dict.Add(16, new StationInfo(20, new IStation.Calculation.shys鏉炬睙娉电珯())); 
-            //_dict.Add(17, new StationInfo(21, new IStation.Calculation.shys澶фˉ娉电珯())); 
-
-
-            //    {1,2},//闀垮叴娉电珯
-            //    {2,12},//浜斿彿娌熷噷妗ユ柟鍚�
-            //    {3,9},//浜斿彿娌熼噾娴锋柟鍚�
-            //    {4,3},//浜斿彿娌熶弗妗ユ柟鍚�1
-            //    {5,5},//浜斿彿娌熶弗妗ユ柟鍚�2
-            //    {6,4},//涓ユˉ娉电珯
-            //    {7,6},//涓存睙1#娉电珯
-            //    {8,7},//涓存睙2#娉电珯
-            //    {9,8},//寰愭尘娉电珯
-            //    {10,10},//閲戞捣娉电珯
-            //    {11,11},//鍗楁眹鍖楁车绔�
-            //    {12,15},//闄堣涓�杈�
-            //    {13,16},//闄堣浜岃緭
-            //    {14,17},//娉板拰娉电珯
-            //    {15,19},//閲戞辰娉电珯
-            //    {16,20},//鏉炬睙娉电珯
-            //    {17,21},//澶фˉ娉电珯
-
+#if (DEBUG)
+            _dict.Add(1, new StationInfo(2, new IStation.Calculation.shys闀垮叴娉电珯()));//OK
+            _dict.Add(2, new StationInfo(12, new IStation.Calculation.shys浜斿彿娌熷噷妗ユ柟鍚�()));//ok
+            _dict.Add(4, new StationInfo(3, new IStation.Calculation.shys浜斿彿娌熶弗妗ユ柟鍚�1()));//OK
+            _dict.Add(5, new StationInfo(5, new IStation.Calculation.shys浜斿彿娌熶弗妗ユ柟鍚�2()));//OK
+            _dict.Add(13, new StationInfo(16, new IStation.Calculation.shys闄堣浜岃緭()));//ok
+            _dict.Add(8, new StationInfo(7, new IStation.Calculation.shys涓存睙2鍙锋车鎴�()));//ok
+#else
+            _dict.Add(1, new StationInfo(2, new IStation.Calculation.shys闀垮叴娉电珯()));//OK
+            _dict.Add(2, new StationInfo(12, new IStation.Calculation.shys浜斿彿娌熷噷妗ユ柟鍚�()));//ok
+            _dict.Add(4, new StationInfo(3, new IStation.Calculation.shys浜斿彿娌熶弗妗ユ柟鍚�1()));//OK
+            _dict.Add(5, new StationInfo(5, new IStation.Calculation.shys浜斿彿娌熶弗妗ユ柟鍚�2()));//OK
+            _dict.Add(13, new StationInfo(16, new IStation.Calculation.shys闄堣浜岃緭()));//ok
+            _dict.Add(8, new StationInfo(7, new IStation.Calculation.shys涓存睙2鍙锋车鎴�()));//ok
+#endif
         }
 
         /// <summary>
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\270\264\346\261\2371\345\217\267\346\263\265\346\210\277.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\270\264\346\261\2371\345\217\267\346\263\265\346\210\277.cs"
index d7472cc..f2b961b 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\270\264\346\261\2371\345\217\267\346\263\265\346\210\277.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\270\264\346\261\2371\345\217\267\346\263\265\346\210\277.cs"
@@ -21,8 +21,6 @@
         private Tuple<string, long> monitor鍑烘按鍓嶆睜娑蹭綅 = new Tuple<string, long>("_0402010102089903002", 458);
 
 
-
-
         /// <summary>
         /// 
         /// </summary>
@@ -32,10 +30,11 @@
         {
             if (tagname == monitor杩涙按鍓嶆睜娑蹭綅.Item1)
                 return true;
-            if (tagname == monitor鍑烘按鍓嶆睜娑蹭綅.Item1)
-                return true;
-            return false;
+            else
+                return false;
         }
+
+ 
 
         /// <summary>
         /// 鏍规嵁涓夐珮鎻愪緵鐨勫弬鏁�,鏋勫缓璋冨害鍒嗘瀽鎵�闇�鐨勫弬鏁�, (杩欎釜姣忎釜娉电珯閮戒笉涓�鏍�)
@@ -82,9 +81,9 @@
             complex_dispatch_request.StationID = this._stationID;
             complex_dispatch_request.SchemeNumber = 1;
             complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
+            complex_dispatch_request.InletPipePara = new List<DispatchAna.Model.InletPipePara>()
                         {
-                            new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level.RecordValue}
+                            new DispatchAna.Model.InletPipePara(){ Name="姘存睜", Value = water_level.RecordValue}
                         };
             complex_dispatch_request.OutletPipePara = new List<DispatchAna.Model.OutletPipePara>();
             complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\270\264\346\261\2372\345\217\267\346\263\265\346\210\277.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\270\264\346\261\2372\345\217\267\346\263\265\346\210\277.cs"
index 565dee5..cf80101 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\270\264\346\261\2372\345\217\267\346\263\265\346\210\277.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\270\264\346\261\2372\345\217\267\346\263\265\346\210\277.cs"
@@ -17,10 +17,7 @@
         /// <summary>
         /// 娴嬬偣瀛楀吀(杩欎釜姣忎釜娉电珯閮戒笉涓�鏍�)
         /// </summary>
-
-
         private Tuple<string, long> monitor鍑烘按鎬荤1鍘嬪姏 = new Tuple<string, long>("_0402010601040104001", 510);
-
         private Tuple<string, long> monitor鍑烘按鎬荤1鐬椂娴侀噺= new Tuple<string, long>("_0402010601040105001", 511);
         private Tuple<string, long> monitor鍑烘按鎬荤2鍘嬪姏 = new Tuple<string, long>("_0402010601040204001", 513);
         private Tuple<string, long> monitor鍑烘按鎬荤2鐬椂娴侀噺 = new Tuple<string, long>("_0402010601040205001", 514);
@@ -54,6 +51,8 @@
                 return "鍑烘按鎬荤3鍘嬪姏";
             if (monitor鍑烘按鎬荤3鐬椂娴侀噺.Item1 == tagname)
                 return "鍑烘按鎬荤3鐬椂娴侀噺";
+            if (monitor璋冭妭姹犳恫浣�.Item1 == tagname)
+                return "璋冭妭姹犳恫浣�";
             return "鏈煡娴嬬偣";
         }
         /// <summary>
@@ -68,7 +67,7 @@
         {
             if (allRecords_hour == null || allRecords_hour.Count == 0)
             {
-                error_info = "浜斿彿娌熷噷妗ユ柟鍚戞祴鐐规暟鎹负绌�";
+                error_info = "涓存睙2鍙锋车鎴挎祴鐐规暟鎹负绌�";
                 return null;
             }
             var complex_dispatch_request = new DispatchAna.Model.RequestParasComplex();
@@ -78,39 +77,85 @@
                 water_level = allRecords_hour.Find(x => x.MonitorTag == monitor璋冭妭姹犳恫浣�.Item1);
                 if (water_level == null)
                 {
-                    error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按搴撴恫浣嶆祴鐐规湭鎵惧埌";
+                    error_info = "涓存睙2鍙锋车鎴挎按搴撴恫浣嶆祴鐐规湭鎵惧埌";
                     return null;
                 }
             }
-            //var pipe1_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤鐬椂娴侀噺.Item1);
-            //if (pipe1_flow == null)
-            //{
-            //    error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按绠¢亾1娴侀噺娴嬬偣鏈壘鍒�";
-            //    return null;
-            //}
+            var pipe1_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤1鐬椂娴侀噺.Item1);
+            if (pipe1_flow == null)
+            {
+                error_info = "涓存睙2鍙锋车鎴挎按绠¢亾1娴侀噺娴嬬偣鏈壘鍒�";
+                return null;
+            }
 
-            //var pipe1_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤鍘嬪姏.Item1);
-            //if (pipe1_press == null)
-            //{
-            //    error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按绠¢亾1鍘嬪姏娴嬬偣鏈壘鍒�";
-            //    return null;
-            //}
+            var pipe1_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤1鍘嬪姏.Item1);
+            if (pipe1_press == null)
+            {
+                error_info = "涓存睙2鍙锋车鎴挎按绠¢亾1鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
 
+            var pipe2_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤2鐬椂娴侀噺.Item1);
+            if (pipe2_flow == null)
+            {
+                error_info = "涓存睙2鍙锋车鎴挎按绠¢亾2娴侀噺娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+            var pipe2_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤2鍘嬪姏.Item1);
+            if (pipe2_press == null)
+            {
+                error_info = "涓存睙2鍙锋车鎴挎按绠¢亾2鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+            var pipe3_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤3鐬椂娴侀噺.Item1);
+            if (pipe3_flow == null)
+            {
+                error_info = "涓存睙2鍙锋车鎴挎按绠¢亾3娴侀噺娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+            var pipe3_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤3鍘嬪姏.Item1);
+            if (pipe3_press == null)
+            {
+                error_info = "涓存睙2鍙锋车鎴挎按绠¢亾1鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+            double pipe_count = 0;
+            double avery_press = 0;
+            if (pipe1_press.RecordValue > 0.01)
+            {
+                avery_press += pipe1_press.RecordValue;
+                pipe_count++;
+            }
+            if (pipe2_press.RecordValue > 0.01)
+            {
+                avery_press += pipe2_press.RecordValue;
+                pipe_count++;
+            }
+            if (pipe3_press.RecordValue > 0.01)
+            {
+                avery_press += pipe3_press.RecordValue;
+                pipe_count++;
+            }
+            avery_press = Math.Round(avery_press / pipe_count, 5);
 
             complex_dispatch_request.CorpID = this._corpID;
             complex_dispatch_request.StationID = this._stationID;
             complex_dispatch_request.SchemeNumber = 1;
             complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
+            complex_dispatch_request.InletPipePara = new List<DispatchAna.Model.InletPipePara>()
                         {
-                            new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level.RecordValue}
+                            new DispatchAna.Model.InletPipePara(){ Name="姘存睜", Value = water_level.RecordValue}
                         };
             complex_dispatch_request.OutletPipePara = new List<DispatchAna.Model.OutletPipePara>();
             complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
             {
                 Name = "鎬荤璺�",
-                //TargetFlow = pipe1_flow.RecordValue,
-                //TargetPress = pipe1_press.RecordValue,
+                TargetFlow = pipe1_flow.RecordValue+ pipe2_flow.RecordValue+ pipe3_flow.RecordValue,
+                 TargetPress = avery_press,
             });
 
 
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\272\224\345\217\267\346\262\237\344\270\245\346\241\245\346\226\271\345\220\2211.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\272\224\345\217\267\346\262\237\344\270\245\346\241\245\346\226\271\345\220\2211.cs"
index eca0469..4dbbac7 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\272\224\345\217\267\346\262\237\344\270\245\346\241\245\346\226\271\345\220\2211.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\272\224\345\217\267\346\262\237\344\270\245\346\241\245\346\226\271\345\220\2211.cs"
@@ -78,9 +78,9 @@
             complex_dispatch_request.StationID = this._stationID;
             complex_dispatch_request.SchemeNumber = 1;
             complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
+            complex_dispatch_request.InletPipePara = new List<DispatchAna.Model.InletPipePara>()
                         {
-                            new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level.RecordValue}
+                            new DispatchAna.Model.InletPipePara(){ Name="姘存睜", Value = water_level.RecordValue}
                         };
             complex_dispatch_request.OutletPipePara = new List<DispatchAna.Model.OutletPipePara>();
             complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\272\224\345\217\267\346\262\237\344\270\245\346\241\245\346\226\271\345\220\2212.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\272\224\345\217\267\346\262\237\344\270\245\346\241\245\346\226\271\345\220\2212.cs"
index 582a225..b4b5554 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\272\224\345\217\267\346\262\237\344\270\245\346\241\245\346\226\271\345\220\2212.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\272\224\345\217\267\346\262\237\344\270\245\346\241\245\346\226\271\345\220\2212.cs"
@@ -84,9 +84,9 @@
             complex_dispatch_request.StationID = this._stationID;
             complex_dispatch_request.SchemeNumber = 1;
             complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
+            complex_dispatch_request.InletPipePara = new List<DispatchAna.Model.InletPipePara>()
                         {
-                            new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level.RecordValue}
+                            new DispatchAna.Model.InletPipePara(){ Name="姘存睜", Value = water_level.RecordValue}
                         };
             complex_dispatch_request.OutletPipePara = new List<DispatchAna.Model.OutletPipePara>();
             complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\272\224\345\217\267\346\262\237\345\207\214\346\241\245\346\226\271\345\220\221.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\272\224\345\217\267\346\262\237\345\207\214\346\241\245\346\226\271\345\220\221.cs"
index b990803..2441538 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\272\224\345\217\267\346\262\237\345\207\214\346\241\245\346\226\271\345\220\221.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\272\224\345\217\267\346\262\237\345\207\214\346\241\245\346\226\271\345\220\221.cs"
@@ -82,9 +82,9 @@
             complex_dispatch_request.StationID = this._stationID;
             complex_dispatch_request.SchemeNumber = 1;
             complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
+            complex_dispatch_request.InletPipePara = new List<DispatchAna.Model.InletPipePara>()
                         {
-                            new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level.RecordValue}
+                            new DispatchAna.Model.InletPipePara(){ Name="姘存睜", Value = water_level.RecordValue}
                         };
             complex_dispatch_request.OutletPipePara = new List<DispatchAna.Model.OutletPipePara>();
             complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221.cs"
index 2c06038..eda42ef 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221.cs"
@@ -23,6 +23,7 @@
         private Tuple<string, long> monitor鍑烘按鎬荤2鐬椂娴侀噺 = new Tuple<string, long>("_0402010501080102005", 269);
         private Tuple<string, long> monitor鍓嶆睜娑蹭綅4 = new Tuple<string, long>("_0402010501080103001", 263);
         private Tuple<string, long> monitor鍓嶆睜娑蹭綅5 = new Tuple<string, long>("_0402010501080103002", 264);
+
         /// <summary>
         /// 
         /// </summary>
@@ -68,13 +69,19 @@
                 return null;
             }
             var complex_dispatch_request = new DispatchAna.Model.RequestParasComplex();
+
             var water_level5 = allRecords_hour.Find(x => x.MonitorTag == monitor鍓嶆睜娑蹭綅5.Item1);
             if (water_level5 == null)
             {
                 error_info = "浜斿彿娌熼噾娴锋柟鍚戝墠姹犳恫浣�5 娴嬬偣鏈壘鍒�";
                 return null;
             }
-   
+            var water_level4 = allRecords_hour.Find(x => x.MonitorTag == monitor鍓嶆睜娑蹭綅4.Item1);
+            if (water_level4 == null)
+            {
+                error_info = "浜斿彿娌熼噾娴锋柟鍚戝墠姹犳恫浣�4 娴嬬偣鏈壘鍒�";
+                return null;
+            }
             var pipe1_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤1鐬椂娴侀噺.Item1);
             if (pipe1_flow == null)
             {
@@ -107,9 +114,10 @@
             complex_dispatch_request.StationID = this._stationID;
             complex_dispatch_request.SchemeNumber = 1;
             complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
+            complex_dispatch_request.InletPipePara = new List<DispatchAna.Model.InletPipePara>()
                         {
-                            new DispatchAna.Model.WaterLevelPara(){ Name="鍓嶆睜娑蹭綅5", Value = water_level5.RecordValue}
+                            new DispatchAna.Model.InletPipePara(){ Name="鍓嶆睜娑蹭綅4", Value = water_level4.RecordValue},
+                            new DispatchAna.Model.InletPipePara(){ Name="鍓嶆睜娑蹭綅5", Value = water_level5.RecordValue}
                         };
             complex_dispatch_request.OutletPipePara = new List<DispatchAna.Model.OutletPipePara>();
             complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\345\215\227\346\261\207\345\214\227\346\263\265\347\253\231.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\345\215\227\346\261\207\345\214\227\346\263\265\347\253\231.cs"
index 3c74b03..aeefec5 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\345\215\227\346\261\207\345\214\227\346\263\265\347\253\231.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\345\215\227\346\261\207\345\214\227\346\263\265\347\253\231.cs"
@@ -17,14 +17,26 @@
         /// <summary>
         /// 娴嬬偣瀛楀吀(杩欎釜姣忎釜娉电珯閮戒笉涓�鏍�)
         /// </summary>
-
-
         private Tuple<string, long> monitor鍑烘按鎬荤1鍘嬪姏 = new Tuple<string, long>("_0402010503030107003", 739);
         private Tuple<string, long> monitor鍑烘按鎬荤1鐬椂娴侀噺 = new Tuple<string, long>("_0402010503030102003", 740);
         private Tuple<string, long> monitor鍑烘按鎬荤2鍘嬪姏 = new Tuple<string, long>("_0402010503030207004", 742);
         private Tuple<string, long> monitor鍑烘按鎬荤2鐬椂娴侀噺 = new Tuple<string, long>("_0402010503030202003", 743);
         private Tuple<string, long> monitor杩涙按鎬荤1鍘嬪姏 = new Tuple<string, long>("_0402010503030107001", 733);
         private Tuple<string, long> monitor杩涙按鎬荤2鍘嬪姏 = new Tuple<string, long>("_0402010503030207002", 736);
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="tagname"></param>
+        /// <returns></returns>
+        public override bool Is娑蹭綅Monitor(string tagname)
+        {
+            return false;
+        }
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="tagname"></param>
+        /// <returns></returns>
         public override string GetMonitorNameByTag(string tagname)
         {
             if (monitor鍑烘按鎬荤1鍘嬪姏.Item1 == tagname)
@@ -53,54 +65,76 @@
         {
             if (allRecords_hour == null || allRecords_hour.Count == 0)
             {
-                error_info = "浜斿彿娌熷噷妗ユ柟鍚戞祴鐐规暟鎹负绌�";
+                error_info = "鍗楁眹鍖楁车绔欐祴鐐规暟鎹负绌�";
                 return null;
             }
             var complex_dispatch_request = new DispatchAna.Model.RequestParasComplex();
-            //var water_level = allRecords_hour.Find(x => x.MonitorTag == monitor璋冭妭姹犳恫浣�.Item1);
-            //if (water_level == null)
-            //{
-            //    water_level = allRecords_hour.Find(x => x.MonitorTag == monitor璋冭妭姹犳恫浣�.Item1);
-            //    if (water_level == null)
-            //    {
-            //        error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按搴撴恫浣嶆祴鐐规湭鎵惧埌";
-            //        return null;
-            //    }
-            //}
-            //var pipe1_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤鐬椂娴侀噺.Item1);
-            //if (pipe1_flow == null)
-            //{
-            //    error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按绠¢亾1娴侀噺娴嬬偣鏈壘鍒�";
-            //    return null;
-            //}
+            var inlet_press1 = allRecords_hour.Find(x => x.MonitorTag == monitor杩涙按鎬荤1鍘嬪姏.Item1);
+            if (inlet_press1 == null)
+            {
+                error_info = "鍗楁眹鍖楁车绔欒繘姘存�荤1鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
+            var inlet_press2 = allRecords_hour.Find(x => x.MonitorTag == monitor杩涙按鎬荤2鍘嬪姏.Item1);
+            if (inlet_press2 == null)
+            {
+                error_info = "鍗楁眹鍖楁车绔欒繘姘存�荤2鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
 
-            //var pipe1_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤鍘嬪姏.Item1);
-            //if (pipe1_press == null)
-            //{
-            //    error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按绠¢亾1鍘嬪姏娴嬬偣鏈壘鍒�";
-            //    return null;
-            //}
+
+            var pipe1_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤1鐬椂娴侀噺.Item1);
+            if (pipe1_flow == null)
+            {
+                error_info = "鍗楁眹鍖楁车绔欐按绠¢亾1娴侀噺娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+            var pipe1_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤1鍘嬪姏.Item1);
+            if (pipe1_press == null)
+            {
+                error_info = "鍗楁眹鍖楁车绔欐按绠¢亾1鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+
+            var pipe2_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤2鐬椂娴侀噺.Item1);
+            if (pipe2_flow == null)
+            {
+                error_info = "鍗楁眹鍖楁车绔欐按绠¢亾2娴侀噺娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+            var pipe2_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤2鍘嬪姏.Item1);
+            if (pipe2_press == null)
+            {
+                error_info = "鍗楁眹鍖楁车绔欐按绠¢亾2鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
 
 
             complex_dispatch_request.CorpID = this._corpID;
             complex_dispatch_request.StationID = this._stationID;
             complex_dispatch_request.SchemeNumber = 1;
             complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
+            complex_dispatch_request.InletPipePara = new List<DispatchAna.Model.InletPipePara>()
                         {
-                            //new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level.RecordValue}
+                            new DispatchAna.Model.InletPipePara()
+                            {
+                                Name="杩涘彛鍘嬪姏", 
+                                IsWaterLevel=false,
+                                Value = (inlet_press1.RecordValue+inlet_press2.RecordValue)/2
+                            }
                         };
             complex_dispatch_request.OutletPipePara = new List<DispatchAna.Model.OutletPipePara>();
             complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
             {
                 Name = "鎬荤璺�",
-                //TargetFlow = pipe1_flow.RecordValue,
-                //TargetPress = pipe1_press.RecordValue,
+                IsWaterLevel = false,
+                TargetFlow = (pipe1_flow.RecordValue + pipe2_flow.RecordValue),
+                TargetPress = (pipe1_press.RecordValue + pipe2_press.RecordValue) / 2
             });
-
-
-
-
+ 
 
             error_info = null;
             return complex_dispatch_request;
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\345\244\247\346\241\245\346\263\265\347\253\231.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\345\244\247\346\241\245\346\263\265\347\253\231.cs"
index e887472..cbdcb81 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\345\244\247\346\241\245\346\263\265\347\253\231.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\345\244\247\346\241\245\346\263\265\347\253\231.cs"
@@ -17,8 +17,6 @@
         /// <summary>
         /// 娴嬬偣瀛楀吀(杩欎釜姣忎釜娉电珯閮戒笉涓�鏍�)
         /// </summary>
-
-
         private Tuple<string, long> monitor鍑烘按鎬荤涓滆皟鍘嬫睜 = new Tuple<string, long>("_0402010301080103002", 1049);
         private Tuple<string, long> monitor鍑烘按鎬荤瑗胯皟鍘嬫睜 = new Tuple<string, long>("_0402010301080103001", 1050);
         private Tuple<string, long> monitor鍑烘按鎬荤鐬椂娴侀噺 = new Tuple<string, long>("_0402010301090103004", 1051);
@@ -28,7 +26,11 @@
         private Tuple<string, long> monitor杩涙按鍓嶆恫浣�4 = new Tuple<string, long>("_0402010301034403001", 1047);
 
 
-
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="tagname"></param>
+        /// <returns></returns>
         public override bool Is娑蹭綅Monitor(string tagname)
         {
             if (monitor杩涙按鍓嶆恫浣�1.Item1 == tagname)
@@ -39,17 +41,30 @@
                 return true;
             if (monitor杩涙按鍓嶆恫浣�4.Item1 == tagname)
                 return true;
-            if (monitor鍑烘按鎬荤涓滆皟鍘嬫睜.Item1 == tagname)
-                return true;
-            if (monitor鍑烘按鎬荤瑗胯皟鍘嬫睜.Item1 == tagname)
-                return true;
+ 
             return false;
         }
-
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="tagname"></param>
+        /// <returns></returns>
         public override string GetMonitorNameByTag(string tagname)
         {
             if (monitor鍑烘按鎬荤鐬椂娴侀噺.Item1 == tagname)
                 return "鍑烘按鎬荤鐬椂娴侀噺";
+            if (monitor杩涙按鍓嶆恫浣�1.Item1 == tagname)
+                return "杩涙按鍓嶆恫浣�1";
+            if (monitor杩涙按鍓嶆恫浣�2.Item1 == tagname)
+                return "杩涙按鍓嶆恫浣�2";
+            if (monitor杩涙按鍓嶆恫浣�3.Item1 == tagname)
+                return "杩涙按鍓嶆恫浣�3";
+            if (monitor杩涙按鍓嶆恫浣�4.Item1 == tagname)
+                return "杩涙按鍓嶆恫浣�4";
+            if (monitor鍑烘按鎬荤涓滆皟鍘嬫睜.Item1 == tagname)
+                return "鍑烘按鎬荤涓滆皟鍘嬫睜";
+            if (monitor鍑烘按鎬荤瑗胯皟鍘嬫睜.Item1 == tagname)
+                return "鍑烘按鎬荤瑗胯皟鍘嬫睜";
             return "鏈煡娴嬬偣";
         }
         /// <summary>
@@ -97,7 +112,7 @@
             complex_dispatch_request.StationID = this._stationID;
             complex_dispatch_request.SchemeNumber = 1;
             complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
+            complex_dispatch_request.InletPipePara = new List<DispatchAna.Model.InletPipePara>()
                         {
                             //new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level.RecordValue}
                         };
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\345\276\220\346\263\276\346\263\265\347\253\231.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\345\276\220\346\263\276\346\263\265\347\253\231.cs"
index 4f3ed44..6438d8d 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\345\276\220\346\263\276\346\263\265\347\253\231.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\345\276\220\346\263\276\346\263\265\347\253\231.cs"
@@ -79,9 +79,9 @@
             complex_dispatch_request.StationID = this._stationID;
             complex_dispatch_request.SchemeNumber = 1;
             complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
+            complex_dispatch_request.InletPipePara = new List<DispatchAna.Model.InletPipePara>()
                         {
-                             new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level_value}
+                             new DispatchAna.Model.InletPipePara(){ Name="姘存睜", Value = water_level_value}
                         };
             complex_dispatch_request.OutletPipePara = new List<DispatchAna.Model.OutletPipePara>();
             complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\346\235\276\346\261\237\346\263\265\347\253\231.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\346\235\276\346\261\237\346\263\265\347\253\231.cs"
index 0caa6a8..31b85e1 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\346\235\276\346\261\237\346\263\265\347\253\231.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\346\235\276\346\261\237\346\263\265\347\253\231.cs"
@@ -17,12 +17,16 @@
         /// <summary>
         /// 娴嬬偣瀛楀吀(杩欎釜姣忎釜娉电珯閮戒笉涓�鏍�)
         /// </summary>
-
-
         private Tuple<string, long> monitor鍑烘按鎬荤鍘嬪姏 = new Tuple<string, long>("_0402010791000000004", 1134);
         private Tuple<string, long> monitor鍑烘按鎬荤鐬椂娴侀噺 = new Tuple<string, long>("_0402010791000000005", 1135);
         private Tuple<string, long> monitor鍖椾晶鍓嶆睜娑蹭綅 = new Tuple<string, long>("_0402010791000000101", 1129);
         private Tuple<string, long> monitor鍗椾晶鍓嶆睜娑蹭綅 = new Tuple<string, long>("_0402010791000000100", 1130);
+       
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="tagname"></param>
+        /// <returns></returns>
         public override bool Is娑蹭綅Monitor(string tagname)
         {
             if (tagname == monitor鍖椾晶鍓嶆睜娑蹭綅.Item1)
@@ -37,6 +41,10 @@
                 return "鍑烘按鎬荤鍘嬪姏";
             if (monitor鍑烘按鎬荤鐬椂娴侀噺.Item1 == tagname)
                 return "鍑烘按鎬荤鐬椂娴侀噺";
+            if (monitor鍖椾晶鍓嶆睜娑蹭綅.Item1 == tagname)
+                return "鍖椾晶鍓嶆睜娑蹭綅";
+            if (monitor鍗椾晶鍓嶆睜娑蹭綅.Item1 == tagname)
+                return "鍗椾晶鍓嶆睜娑蹭綅";
             return "鏈煡娴嬬偣";
         }
         /// <summary>
@@ -84,7 +92,7 @@
             complex_dispatch_request.StationID = this._stationID;
             complex_dispatch_request.SchemeNumber = 1;
             complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
+            complex_dispatch_request.InletPipePara = new List<DispatchAna.Model.InletPipePara>()
                         {
                             //new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level.RecordValue}
                         };
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\346\263\260\345\222\214\346\263\265\347\253\231.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\346\263\260\345\222\214\346\263\265\347\253\231.cs"
index ae6dec2..b2e59aa 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\346\263\260\345\222\214\346\263\265\347\253\231.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\346\263\260\345\222\214\346\263\265\347\253\231.cs"
@@ -11,19 +11,23 @@
         public shys娉板拰娉电珯()
         {
             this._corpID = 4;
-            this._dispatchAnaCalc = new IStation.Calculation.DispatchAna.Calculator_OptAna_General();
+            this._dispatchAnaCalc = new IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_娉板拰娉电珯();
         }
 
         /// <summary>
         /// 娴嬬偣瀛楀吀(杩欎釜姣忎釜娉电珯閮戒笉涓�鏍�)
         /// </summary>
+        private Tuple<string, long> monitor鍑烘按鎬荤1鍘嬪姏 = new Tuple<string, long>("_0402010602081304001",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_娉板拰娉电珯._monitor_id_pipe_press1);
+        private Tuple<string, long> monitor鍑烘按鎬荤1鐬椂娴侀噺 = new Tuple<string, long>("_0402010602081302001",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_娉板拰娉电珯._monitor_id_pipe_flow1);
+        private Tuple<string, long> monitor鍑烘按鎬荤2鍘嬪姏 = new Tuple<string, long>("_0402010602081404001",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_娉板拰娉电珯._monitor_id_pipe_press2);
+        private Tuple<string, long> monitor鍑烘按鎬荤2鐬椂娴侀噺 = new Tuple<string, long>("_0402010602081402001",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_娉板拰娉电珯._monitor_id_pipe_flow2);
+        private Tuple<string, long> monitor杩涙按杩涘彛鍘嬪姏 = new Tuple<string, long>("_0402010202010505001",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_娉板拰娉电珯._montiro_id_inlet_press);
 
-
-        private Tuple<string, long> monitor鍑烘按鎬荤1鍘嬪姏 = new Tuple<string, long>("_0402010602081304001", 989);
-        private Tuple<string, long> monitor鍑烘按鎬荤1鐬椂娴侀噺 = new Tuple<string, long>("_0402010602081302001", 990);
-        private Tuple<string, long> monitor鍑烘按鎬荤2鍘嬪姏 = new Tuple<string, long>("_0402010602081404001", 992);
-        private Tuple<string, long> monitor鍑烘按鎬荤2鐬椂娴侀噺 = new Tuple<string, long>("_0402010602081402001", 993);
-        private Tuple<string, long> monitor杩涙按杩涘彛鍘嬪姏 = new Tuple<string, long>("_0402010202010505001", 988);
         public override string GetMonitorNameByTag(string tagname)
         {
             if (monitor鍑烘按鎬荤1鍘嬪姏.Item1 == tagname)
@@ -50,53 +54,66 @@
         {
             if (allRecords_hour == null || allRecords_hour.Count == 0)
             {
-                error_info = "浜斿彿娌熷噷妗ユ柟鍚戞祴鐐规暟鎹负绌�";
+                error_info = "娉板拰娉电珯鏂瑰悜娴嬬偣鏁版嵁涓虹┖";
                 return null;
             }
             var complex_dispatch_request = new DispatchAna.Model.RequestParasComplex();
-            //var water_level = allRecords_hour.Find(x => x.MonitorTag == monitor璋冭妭姹犳恫浣�.Item1);
-            //if (water_level == null)
-            //{
-            //    water_level = allRecords_hour.Find(x => x.MonitorTag == monitor璋冭妭姹犳恫浣�.Item1);
-            //    if (water_level == null)
-            //    {
-            //        error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按搴撴恫浣嶆祴鐐规湭鎵惧埌";
-            //        return null;
-            //    }
-            //}
-            //var pipe1_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤鐬椂娴侀噺.Item1);
-            //if (pipe1_flow == null)
-            //{
-            //    error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按绠¢亾1娴侀噺娴嬬偣鏈壘鍒�";
-            //    return null;
-            //}
+            var inlet_press = allRecords_hour.Find(x => x.MonitorTag == monitor杩涙按杩涘彛鍘嬪姏.Item1);
+            if (inlet_press == null)
+            {
+                error_info = "娉板拰娉电珯鏂瑰悜杩涘彛鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
+            var pipe1_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤1鐬椂娴侀噺.Item1);
+            if (pipe1_flow == null)
+            {
+                error_info = "娉板拰娉电珯绠¢亾1娴侀噺娴嬬偣鏈壘鍒�";
+                return null;
+            }
 
-            //var pipe1_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤鍘嬪姏.Item1);
-            //if (pipe1_press == null)
-            //{
-            //    error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按绠¢亾1鍘嬪姏娴嬬偣鏈壘鍒�";
-            //    return null;
-            //}
+            var pipe1_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤1鍘嬪姏.Item1);
+            if (pipe1_press == null)
+            {
+                error_info = "娉板拰娉电珯绠¢亾1鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+
+            var pipe2_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤2鐬椂娴侀噺.Item1);
+            if (pipe2_flow == null)
+            {
+                error_info = "娉板拰娉电珯绠¢亾2娴侀噺娴嬬偣鏈壘鍒�";
+                return null;
+            }
+            var pipe2_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤2鍘嬪姏.Item1);
+            if (pipe2_press == null)
+            {
+                error_info = "娉板拰娉电珯绠¢亾2鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
 
 
             complex_dispatch_request.CorpID = this._corpID;
             complex_dispatch_request.StationID = this._stationID;
             complex_dispatch_request.SchemeNumber = 1;
             complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
-                        {
-                            //new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level.RecordValue}
-                        };
+            complex_dispatch_request.InletPipePara = new List<DispatchAna.Model.InletPipePara>()
+            {
+                new DispatchAna.Model.InletPipePara(){ Name="杩涘彛鍘嬪姏", Value = inlet_press.RecordValue, IsWaterLevel=false}
+            };
             complex_dispatch_request.OutletPipePara = new List<DispatchAna.Model.OutletPipePara>();
             complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
             {
-                Name = "鎬荤璺�",
-                //TargetFlow = pipe1_flow.RecordValue,
-                //TargetPress = pipe1_press.RecordValue,
+                Name = "涓�鍙风璺�",
+                TargetFlow = pipe1_flow.RecordValue,
+                TargetPress = pipe1_press.RecordValue,
             });
-
-
-
+            complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
+            {
+                Name = "浜屽彿绠¤矾",
+                TargetFlow = pipe2_flow.RecordValue,
+                TargetPress = pipe2_press.RecordValue,
+            });
 
 
             error_info = null;
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\207\221\346\263\275\346\263\265\347\253\231.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\207\221\346\263\275\346\263\265\347\253\231.cs"
index 246dd54..b0d8253 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\207\221\346\263\275\346\263\265\347\253\231.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\207\221\346\263\275\346\263\265\347\253\231.cs"
@@ -89,7 +89,7 @@
             complex_dispatch_request.StationID = this._stationID;
             complex_dispatch_request.SchemeNumber = 1;
             complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
+            complex_dispatch_request.InletPipePara = new List<DispatchAna.Model.InletPipePara>()
                         {
                             //new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level.RecordValue}
                         };
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\207\221\346\265\267\346\263\265\347\253\231.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\207\221\346\265\267\346\263\265\347\253\231.cs"
index f109c7f..857f150 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\207\221\346\265\267\346\263\265\347\253\231.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\207\221\346\265\267\346\263\265\347\253\231.cs"
@@ -11,21 +11,23 @@
         public shys閲戞捣娉电珯()
         {
             this._corpID = 4;
-            this._dispatchAnaCalc = new IStation.Calculation.DispatchAna.Calculator_OptAna_General();
+            this._dispatchAnaCalc = new IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_閲戞捣娉电珯();
         }
 
         /// <summary>
         /// 娴嬬偣瀛楀吀(杩欎釜姣忎釜娉电珯閮戒笉涓�鏍�)
         /// </summary>
+        private Tuple<string, long> monitor鍑烘按鍗楁眹1鍘嬪姏 = new Tuple<string, long>("_0402010502090105011",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_閲戞捣娉电珯._monitor_id_涓�鍙风鍘嬪姏_鍗楁眹1);
+        private Tuple<string, long> monitor鍑烘按鍗楁眹1娴侀噺 = new Tuple<string, long>("_0402010502090103013", 616);
 
-
-        private Tuple<string, long> monitor鍑烘按鍗楁眹1鍘嬪姏 = new Tuple<string, long>("_0402010502090105011", 615);
-        private Tuple<string, long> monitor鍑烘按鍗楁眹1鐬椂娴侀噺 = new Tuple<string, long>("_0402010502090103013", 616);
         private Tuple<string, long> monitor鍑烘按鍗楁眹2鍘嬪姏 = new Tuple<string, long>("_0402010502090105012", 618);
-        private Tuple<string, long> monitor鍑烘按鍗楁眹2鐬椂娴侀噺 = new Tuple<string, long>("_0402010502090103014", 619);
+        private Tuple<string, long> monitor鍑烘按鍗楁眹2娴侀噺 = new Tuple<string, long>("_0402010502090103014", 619);
+        
+        private Tuple<string, long> monitor鍑烘按宸濇矙鍘嬪姏 = new Tuple<string, long>("_0402010502090105013", 621);
+        private Tuple<string, long> monitor鍑烘按宸濇矙娴侀噺 = new Tuple<string, long>("_0402010502090103015", 622);
+
         //private Tuple<string, long> monitor鍑烘按宸濇矙鎬荤杩涙按鍘嬪姏 = new Tuple<string, long>("_0402010502090105013", 613);
-        private Tuple<string, long> monitor鍑烘按宸濇矙鎬荤鍘嬪姏 = new Tuple<string, long>("_0402010502090105013", 621);
-        private Tuple<string, long> monitor鍑烘按宸濇矙鐬椂娴侀噺 = new Tuple<string, long>("_0402010502090103015", 622);
         private Tuple<string, long> monitor杩涙按鎬荤鍘嬪姏1 = new Tuple<string, long>("_0402010502090105001", 611);
         private Tuple<string, long> monitor杩涙按鎬荤鍘嬪姏2 = new Tuple<string, long>("_0402010502090205001", 613);
 
@@ -33,16 +35,16 @@
         {
             if (monitor鍑烘按鍗楁眹1鍘嬪姏.Item1 == tagname)
                 return "鍑烘按鍗楁眹1鍘嬪姏";
-            if (monitor鍑烘按鍗楁眹1鐬椂娴侀噺.Item1 == tagname)
-                return "鍑烘按鍗楁眹1鐬椂娴侀噺";
+            if (monitor鍑烘按鍗楁眹1娴侀噺.Item1 == tagname)
+                return "鍑烘按鍗楁眹1娴侀噺";
             if (monitor鍑烘按鍗楁眹2鍘嬪姏.Item1 == tagname)
                 return "鍑烘按鍗楁眹2鍘嬪姏";
-            if (monitor鍑烘按鍗楁眹2鐬椂娴侀噺.Item1 == tagname)
-                return "鍑烘按鍗楁眹2鐬椂娴侀噺";
-            if (monitor鍑烘按宸濇矙鎬荤鍘嬪姏.Item1 == tagname)
-                return "鍑烘按宸濇矙鎬荤鍘嬪姏";
-            if (monitor鍑烘按宸濇矙鐬椂娴侀噺.Item1 == tagname)
-                return "鍑烘按宸濇矙鐬椂娴侀噺";
+            if (monitor鍑烘按鍗楁眹2娴侀噺.Item1 == tagname)
+                return "鍑烘按鍗楁眹2娴侀噺";
+            if (monitor鍑烘按宸濇矙鍘嬪姏.Item1 == tagname)
+                return "鍑烘按宸濇矙鍘嬪姏";
+            if (monitor鍑烘按宸濇矙娴侀噺.Item1 == tagname)
+                return "鍑烘按宸濇矙娴侀噺";
             if (monitor杩涙按鎬荤鍘嬪姏1.Item1 == tagname)
                 return "杩涙按鎬荤鍘嬪姏1";
             if (monitor杩涙按鎬荤鍘嬪姏2.Item1 == tagname)
@@ -61,52 +63,99 @@
         {
             if (allRecords_hour == null || allRecords_hour.Count == 0)
             {
-                error_info = "浜斿彿娌熷噷妗ユ柟鍚戞祴鐐规暟鎹负绌�";
+                error_info = "閲戞捣娉电珯娴嬬偣鏁版嵁涓虹┖";
                 return null;
             }
             var complex_dispatch_request = new DispatchAna.Model.RequestParasComplex();
-            //var water_level = allRecords_hour.Find(x => x.MonitorTag == monitor璋冭妭姹犳恫浣�.Item1);
-            //if (water_level == null)
-            //{
-            //    water_level = allRecords_hour.Find(x => x.MonitorTag == monitor璋冭妭姹犳恫浣�.Item1);
-            //    if (water_level == null)
-            //    {
-            //        error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按搴撴恫浣嶆祴鐐规湭鎵惧埌";
-            //        return null;
-            //    }
-            //}
-            //var pipe1_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤鐬椂娴侀噺.Item1);
-            //if (pipe1_flow == null)
-            //{
-            //    error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按绠¢亾1娴侀噺娴嬬偣鏈壘鍒�";
-            //    return null;
-            //}
+            var inlet_press1 = allRecords_hour.Find(x => x.MonitorTag == monitor杩涙按鎬荤鍘嬪姏1.Item1);
+            if (inlet_press1 == null)
+            {
+                error_info = "杩涙按鎬荤鍘嬪姏1娴嬬偣鏈壘鍒�";
+                return null;
+            }
+            var inlet_press2 = allRecords_hour.Find(x => x.MonitorTag == monitor杩涙按鎬荤鍘嬪姏2.Item1);
+            if (inlet_press2 == null)
+            {
+                error_info = "杩涙按鎬荤鍘嬪姏2娴嬬偣鏈壘鍒�";
+                return null;
+            }
 
-            //var pipe1_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤鍘嬪姏.Item1);
-            //if (pipe1_press == null)
-            //{
-            //    error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按绠¢亾1鍘嬪姏娴嬬偣鏈壘鍒�";
-            //    return null;
-            //}
+
+
+            var pipe1_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鍗楁眹1娴侀噺.Item1);
+            if (pipe1_flow == null)
+            {
+                error_info = "閲戞捣娉电珯姘寸閬撳崡姹�1娴侀噺娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+            var pipe1_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鍗楁眹1鍘嬪姏.Item1);
+            if (pipe1_press == null)
+            {
+                error_info = "閲戞捣娉电珯姘寸閬撳崡姹�1鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+            var pipe2_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鍗楁眹2娴侀噺.Item1);
+            if (pipe2_flow == null)
+            {
+                error_info = "閲戞捣娉电珯姘寸閬撳崡姹�2娴侀噺娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+            var pipe2_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鍗楁眹2鍘嬪姏.Item1);
+            if (pipe2_press == null)
+            {
+                error_info = "閲戞捣娉电珯姘寸閬撳崡姹�2鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+            var pipe3_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按宸濇矙娴侀噺.Item1);
+            if (pipe3_flow == null)
+            {
+                error_info = "閲戞捣娉电珯姘寸閬撳窛娌欐祦閲忔祴鐐规湭鎵惧埌";
+                return null;
+            }
+
+            var pipe3_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按宸濇矙鍘嬪姏.Item1);
+            if (pipe3_press == null)
+            {
+                error_info = "閲戞捣娉电珯姘寸閬撳窛娌欏帇鍔涙祴鐐规湭鎵惧埌";
+                return null;
+            }
+
 
 
             complex_dispatch_request.CorpID = this._corpID;
             complex_dispatch_request.StationID = this._stationID;
             complex_dispatch_request.SchemeNumber = 1;
             complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
+            complex_dispatch_request.InletPipePara = new List<DispatchAna.Model.InletPipePara>()
                         {
-                            //new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level.RecordValue}
+                          new DispatchAna.Model.InletPipePara(){ Name="涓�鍙疯繘鍙g鍘嬪姏", Value = inlet_press1.RecordValue},
+                          new DispatchAna.Model.InletPipePara(){ Name="浜屽彿杩涘彛绠″帇鍔�", Value = inlet_press2.RecordValue}
                         };
             complex_dispatch_request.OutletPipePara = new List<DispatchAna.Model.OutletPipePara>();
             complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
             {
-                Name = "鎬荤璺�",
-                //TargetFlow = pipe1_flow.RecordValue,
-                //TargetPress = pipe1_press.RecordValue,
+                Name = "绠¤矾1",
+                TargetFlow = pipe1_flow.RecordValue,
+                TargetPress = pipe1_press.RecordValue,
             });
 
+            complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
+            {
+                Name = "绠¤矾2",
+                TargetFlow = pipe2_flow.RecordValue,
+                TargetPress = pipe2_press.RecordValue,
+            });
 
+            complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
+            {
+                Name = "绠¤矾3",
+                TargetFlow = pipe3_flow.RecordValue,
+                TargetPress = pipe3_press.RecordValue,
+            });
 
 
 
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\225\277\345\205\264\346\263\265\347\253\231.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\225\277\345\205\264\346\263\265\347\253\231.cs"
index 48a3720..1cc3724 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\225\277\345\205\264\346\263\265\347\253\231.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\225\277\345\205\264\346\263\265\347\253\231.cs"
@@ -80,9 +80,9 @@
             complex_dispatch_request.StationID = this._stationID;
             complex_dispatch_request.SchemeNumber = 1;
             complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
+            complex_dispatch_request.InletPipePara = new List<DispatchAna.Model.InletPipePara>()
                         {
-                            new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level.RecordValue}
+                            new DispatchAna.Model.InletPipePara(){ Name="姘存睜", Value = water_level.RecordValue}
                         };
             complex_dispatch_request.OutletPipePara = new List<DispatchAna.Model.OutletPipePara>();
             complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\231\210\350\241\214\344\270\200\350\276\223.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\231\210\350\241\214\344\270\200\350\276\223.cs"
index 13ef656..168743a 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\231\210\350\241\214\344\270\200\350\276\223.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\231\210\350\241\214\344\270\200\350\276\223.cs"
@@ -11,21 +11,30 @@
         public shys闄堣涓�杈�()
         {
             this._corpID = 4;
-            this._dispatchAnaCalc = new IStation.Calculation.DispatchAna.Calculator_OptAna_General();
+            this._dispatchAnaCalc = new IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闄堣涓�杈�();
         }
 
         /// <summary>
         /// 娴嬬偣瀛楀吀(杩欎釜姣忎釜娉电珯閮戒笉涓�鏍�)
         /// </summary>
-        private Tuple<string, long> monitor鍑烘按鎬荤1鍘嬪姏 = new Tuple<string, long>("_0402010201090105001", 859);
-        private Tuple<string, long> monitor鍑烘按鎬荤1鐬椂娴侀噺 = new Tuple<string, long>("_0402060601010103000", 860);
-        private Tuple<string, long> monitor鍑烘按鎬荤2鍘嬪姏 = new Tuple<string, long>("_0402010201090105002", 862);
-        private Tuple<string, long> monitor鍑烘按鎬荤2鐬椂娴侀噺 = new Tuple<string, long>("_0402060601010203000", 863);
-        private Tuple<string, long> monitor鍑烘按鎬荤3鍘嬪姏 = new Tuple<string, long>("_0402060601010305000", 865);
-        private Tuple<string, long> monitor鍑烘按鎬荤3鐬椂娴侀噺 = new Tuple<string, long>("_0402010503030202003", 866);
-        private Tuple<string, long> monitor杩涙按鍓嶆睜娑蹭綅1 = new Tuple<string, long>("_0402010201090104011", 856);
-        private Tuple<string, long> monitor杩涙按鍓嶆睜娑蹭綅2 = new Tuple<string, long>("_0402010201091104123", 857);
-        private Tuple<string, long> monitor杩涙按鍓嶆睜娑蹭綅3 = new Tuple<string, long>("_0402010201091104122", 858);
+        private Tuple<string, long> monitor鍑烘按鎬荤1鍘嬪姏 = new Tuple<string, long>("_0402010201090105001",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闄堣涓�杈�._monitor_id_涓�鍙风鍘嬪姏);
+        private Tuple<string, long> monitor鍑烘按鎬荤1鐬椂娴侀噺 = new Tuple<string, long>("_0402060601010103000",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闄堣涓�杈�._monitor_id_涓�鍙风娴侀噺);
+        private Tuple<string, long> monitor鍑烘按鎬荤2鍘嬪姏 = new Tuple<string, long>("_0402010201090105002",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闄堣涓�杈�._monitor_id_浜屽彿绠″帇鍔�);
+        private Tuple<string, long> monitor鍑烘按鎬荤2鐬椂娴侀噺 = new Tuple<string, long>("_0402060601010203000", 
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闄堣涓�杈�._monitor_id_浜屽彿绠℃祦閲�);
+        private Tuple<string, long> monitor鍑烘按鎬荤3鍘嬪姏 = new Tuple<string, long>("_0402060601010305000",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闄堣涓�杈�._monitor_id_涓夊彿绠″帇鍔�);
+        private Tuple<string, long> monitor鍑烘按鎬荤3鐬椂娴侀噺 = new Tuple<string, long>("_0402010503030202003",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闄堣涓�杈�._monitor_id_涓夊彿绠℃祦閲�);
+        private Tuple<string, long> monitor杩涙按鍓嶆睜娑蹭綅1 = new Tuple<string, long>("_0402010201090104011",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闄堣涓�杈�._monitor_id_娑蹭綅1);
+        private Tuple<string, long> monitor杩涙按鍓嶆睜娑蹭綅2 = new Tuple<string, long>("_0402010201091104123",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闄堣涓�杈�._monitor_id_娑蹭綅2);
+        private Tuple<string, long> monitor杩涙按鍓嶆睜娑蹭綅3 = new Tuple<string, long>("_0402010201091104122",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闄堣涓�杈�._monitor_id_娑蹭綅3);
 
 
         public override bool Is娑蹭綅Monitor(string tagname)
@@ -53,6 +62,12 @@
                 return "鍑烘按鎬荤3鍘嬪姏";
             if (monitor鍑烘按鎬荤3鐬椂娴侀噺.Item1 == tagname)
                 return "鍑烘按鎬荤3鐬椂娴侀噺";
+            if (monitor杩涙按鍓嶆睜娑蹭綅1.Item1 == tagname)
+                return "杩涙按鍓嶆睜娑蹭綅1";
+            if (monitor杩涙按鍓嶆睜娑蹭綅2.Item1 == tagname)
+                return "杩涙按鍓嶆睜娑蹭綅2";
+            if (monitor杩涙按鍓嶆睜娑蹭綅3.Item1 == tagname)
+                return "杩涙按鍓嶆睜娑蹭綅3";
             return "鏈煡娴嬬偣";
         }
 
@@ -68,49 +83,104 @@
         {
             if (allRecords_hour == null || allRecords_hour.Count == 0)
             {
-                error_info = "浜斿彿娌熷噷妗ユ柟鍚戞祴鐐规暟鎹负绌�";
+                error_info = "闄堣涓�杈撴祴鐐规暟鎹负绌�";
                 return null;
             }
             var complex_dispatch_request = new DispatchAna.Model.RequestParasComplex();
-            //var water_level = allRecords_hour.Find(x => x.MonitorTag == monitor璋冭妭姹犳恫浣�.Item1);
-            //if (water_level == null)
-            //{
-            //    water_level = allRecords_hour.Find(x => x.MonitorTag == monitor璋冭妭姹犳恫浣�.Item1);
-            //    if (water_level == null)
-            //    {
-            //        error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按搴撴恫浣嶆祴鐐规湭鎵惧埌";
-            //        return null;
-            //    }
-            //}
-            //var pipe1_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤鐬椂娴侀噺.Item1);
-            //if (pipe1_flow == null)
-            //{
-            //    error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按绠¢亾1娴侀噺娴嬬偣鏈壘鍒�";
-            //    return null;
-            //}
+            var water_level1 = allRecords_hour.Find(x => x.MonitorTag == monitor杩涙按鍓嶆睜娑蹭綅1.Item1);
+            if (water_level1 == null)
+            {
+                error_info = "闄堣涓�杈撴按搴撴恫浣�1娴嬬偣鏈壘鍒�";
+                return null;
+            }
+            var water_level2 = allRecords_hour.Find(x => x.MonitorTag == monitor杩涙按鍓嶆睜娑蹭綅2.Item1);
+            if (water_level2 == null)
+            {
+                error_info = "闄堣涓�杈撴按搴撴恫浣�2娴嬬偣鏈壘鍒�";
+                return null;
+            }
+            var water_level3 = allRecords_hour.Find(x => x.MonitorTag == monitor杩涙按鍓嶆睜娑蹭綅3.Item1);
+            if (water_level3 == null)
+            {
+                error_info = "闄堣涓�杈撴按搴撴恫浣�3娴嬬偣鏈壘鍒�";
+                return null;
+            }
 
-            //var pipe1_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤鍘嬪姏.Item1);
-            //if (pipe1_press == null)
-            //{
-            //    error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按绠¢亾1鍘嬪姏娴嬬偣鏈壘鍒�";
-            //    return null;
-            //}
+
+            var pipe1_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤1鐬椂娴侀噺.Item1);
+            if (pipe1_flow == null)
+            {
+                error_info = "闄堣涓�杈撴按绠¢亾1娴侀噺娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+            var pipe1_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤1鍘嬪姏.Item1);
+            if (pipe1_press == null)
+            {
+                error_info = "闄堣涓�杈撴按绠¢亾1鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+            var pipe2_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤2鐬椂娴侀噺.Item1);
+            if (pipe2_flow == null)
+            {
+                error_info = "闄堣涓�杈撴按绠¢亾2娴侀噺娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+            var pipe2_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤2鍘嬪姏.Item1);
+            if (pipe2_press == null)
+            {
+                error_info = "闄堣涓�杈撴按绠¢亾2鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+
+            var pipe3_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤3鐬椂娴侀噺.Item1);
+            if (pipe3_flow == null)
+            {
+                error_info = "闄堣涓�杈撴按绠¢亾3娴侀噺娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+            var pipe3_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤3鍘嬪姏.Item1);
+            if (pipe3_press == null)
+            {
+                error_info = "闄堣涓�杈撴按绠¢亾3鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
 
 
             complex_dispatch_request.CorpID = this._corpID;
             complex_dispatch_request.StationID = this._stationID;
             complex_dispatch_request.SchemeNumber = 1;
             complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
+            complex_dispatch_request.InletPipePara = new List<DispatchAna.Model.InletPipePara>()
                         {
-                            //new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level.RecordValue}
+                          new DispatchAna.Model.InletPipePara(){ Name="娑蹭綅1", Value = water_level1.RecordValue},
+                          new DispatchAna.Model.InletPipePara(){ Name="娑蹭綅2", Value = water_level2.RecordValue},
+                          new DispatchAna.Model.InletPipePara(){ Name="娑蹭綅3", Value = water_level3.RecordValue}
                         };
             complex_dispatch_request.OutletPipePara = new List<DispatchAna.Model.OutletPipePara>();
             complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
             {
-                Name = "鎬荤璺�",
-                //TargetFlow = pipe1_flow.RecordValue,
-                //TargetPress = pipe1_press.RecordValue,
+                Name = "绠¤矾1",
+                TargetFlow = pipe1_flow.RecordValue,
+                TargetPress = pipe1_press.RecordValue,
+            });
+
+            complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
+            {
+                Name = "绠¤矾2",
+                TargetFlow = pipe2_flow.RecordValue,
+                TargetPress = pipe2_press.RecordValue,
+            });
+
+            complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
+            {
+                Name = "绠¤矾3",
+                TargetFlow = pipe3_flow.RecordValue,
+                TargetPress = pipe3_press.RecordValue,
             });
 
 
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\231\210\350\241\214\344\272\214\350\276\223.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\231\210\350\241\214\344\272\214\350\276\223.cs"
index 535d947..acf3e2e 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\231\210\350\241\214\344\272\214\350\276\223.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\231\210\350\241\214\344\272\214\350\276\223.cs"
@@ -1,4 +1,5 @@
-锘縰sing System;
+锘縰sing IStation.Calculation.DispatchAna;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -11,17 +12,24 @@
         public shys闄堣浜岃緭()
         {
             this._corpID = 4;
-            this._dispatchAnaCalc = new IStation.Calculation.DispatchAna.Calculator_OptAna_General();
+            this._dispatchAnaCalc = new IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闄堣浜岃緭();
         }
 
         /// <summary>
         /// 娴嬬偣瀛楀吀(杩欎釜姣忎釜娉电珯閮戒笉涓�鏍�)
         /// </summary>
-        private Tuple<string, long> monitor鍑烘按鎬荤1鍘嬪姏 = new Tuple<string, long>("_0402010201090105004", 917);
-        private Tuple<string, long> monitor鍑烘按鎬荤1鐬椂娴侀噺 = new Tuple<string, long>("_0402010201090103020", 918);
-        private Tuple<string, long> monitor鍑烘按鎬荤2鍘嬪姏 = new Tuple<string, long>("_0402010201090105003", 920);
-        private Tuple<string, long> monitor鍑烘按鎬荤2鐬椂娴侀噺 = new Tuple<string, long>("_0402010201090103017", 921);
-        private Tuple<string, long> monitor杩涙按鍓嶆睜娑蹭綅 = new Tuple<string, long>("_0402010201080204002", 916);
+        private Tuple<string, long> monitor鍑烘按鎬荤1鍘嬪姏 = new Tuple<string, long>("_0402010201090105004",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闄堣浜岃緭._monitor_id_涓�鍙风鍘嬪姏);
+        private Tuple<string, long> monitor鍑烘按鎬荤1鐬椂娴侀噺 = new Tuple<string, long>("_0402010201090103020",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闄堣浜岃緭._monitor_id_涓�鍙风娴侀噺);
+
+        private Tuple<string, long> monitor鍑烘按鎬荤2鍘嬪姏 = new Tuple<string, long>("_0402010201090105003",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闄堣浜岃緭._monitor_id_浜屽彿绠″帇鍔�);
+        private Tuple<string, long> monitor鍑烘按鎬荤2鐬椂娴侀噺 = new Tuple<string, long>("_0402010201090103017",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闄堣浜岃緭._monitor_id_浜屽彿绠℃祦閲�);
+
+        private Tuple<string, long> monitor杩涙按鍓嶆睜娑蹭綅 = new Tuple<string, long>("_0402010201080204002",
+            IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闄堣浜岃緭._monitor_id_娑蹭綅);
 
         public override bool Is娑蹭綅Monitor(string tagname)
         {
@@ -40,6 +48,8 @@
                 return "鍑烘按鎬荤2鍘嬪姏";
             if (monitor鍑烘按鎬荤2鐬椂娴侀噺.Item1 == tagname)
                 return "鍑烘按鎬荤2鐬椂娴侀噺";
+            if (monitor杩涙按鍓嶆睜娑蹭綅.Item1 == tagname)
+                return "杩涙按鍓嶆睜娑蹭綅";
             return "鏈煡娴嬬偣";
         }
 
@@ -55,50 +65,70 @@
         {
             if (allRecords_hour == null || allRecords_hour.Count == 0)
             {
-                error_info = "浜斿彿娌熷噷妗ユ柟鍚戞祴鐐规暟鎹负绌�";
+                error_info = "闄堣浜岃緭娴嬬偣鏁版嵁涓虹┖";
                 return null;
             }
             var complex_dispatch_request = new DispatchAna.Model.RequestParasComplex();
-            //var water_level = allRecords_hour.Find(x => x.MonitorTag == monitor璋冭妭姹犳恫浣�.Item1);
-            //if (water_level == null)
-            //{
-            //    water_level = allRecords_hour.Find(x => x.MonitorTag == monitor璋冭妭姹犳恫浣�.Item1);
-            //    if (water_level == null)
-            //    {
-            //        error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按搴撴恫浣嶆祴鐐规湭鎵惧埌";
-            //        return null;
-            //    }
-            //}
-            //var pipe1_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤鐬椂娴侀噺.Item1);
-            //if (pipe1_flow == null)
-            //{
-            //    error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按绠¢亾1娴侀噺娴嬬偣鏈壘鍒�";
-            //    return null;
-            //}
-
-            //var pipe1_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤鍘嬪姏.Item1);
-            //if (pipe1_press == null)
-            //{
-            //    error_info = "浜斿彿娌熷噷妗ユ柟鍚戞按绠¢亾1鍘嬪姏娴嬬偣鏈壘鍒�";
-            //    return null;
-            //}
-
+            var water_level = allRecords_hour.Find(x => x.MonitorTag == monitor杩涙按鍓嶆睜娑蹭綅.Item1);
+            if (water_level == null)
+            {
+                water_level = allRecords_hour.Find(x => x.MonitorTag == monitor杩涙按鍓嶆睜娑蹭綅.Item1);
+                if (water_level == null)
+                {
+                    error_info = "闄堣浜岃緭姘村簱娑蹭綅娴嬬偣鏈壘鍒�";
+                    return null;
+                }
+            }
+            var pipe1_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤1鐬椂娴侀噺.Item1);
+            if (pipe1_flow == null)
+            {
+                error_info = "闄堣浜岃緭姘寸閬�1娴侀噺娴嬬偣鏈壘鍒�";
+                return null;
+            }
+            var pipe2_flow = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤2鐬椂娴侀噺.Item1);
+            if (pipe2_flow == null)
+            {
+                error_info = "闄堣浜岃緭姘寸閬�2娴侀噺娴嬬偣鏈壘鍒�";
+                return null;
+            }
+            var pipe1_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤1鍘嬪姏.Item1);
+            if (pipe1_press == null)
+            {
+                error_info = "闄堣浜岃緭姘寸閬�1鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
+            var pipe2_press = allRecords_hour.Find(x => x.MonitorTag == monitor鍑烘按鎬荤2鍘嬪姏.Item1);
+            if (pipe2_press == null)
+            {
+                error_info = "闄堣浜岃緭姘寸閬�2鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
 
             complex_dispatch_request.CorpID = this._corpID;
             complex_dispatch_request.StationID = this._stationID;
             complex_dispatch_request.SchemeNumber = 1;
             complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
+            complex_dispatch_request.InletPipePara = new List<DispatchAna.Model.InletPipePara>()
                         {
-                            //new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level.RecordValue}
+                            new DispatchAna.Model.InletPipePara(){ Name="姘存睜", Value = water_level.RecordValue}
                         };
             complex_dispatch_request.OutletPipePara = new List<DispatchAna.Model.OutletPipePara>();
             complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
             {
-                Name = "鎬荤璺�",
-                //TargetFlow = pipe1_flow.RecordValue,
-                //TargetPress = pipe1_press.RecordValue,
+                Name = "涓�鍙风璺�",
+                TargetFlow = pipe1_flow.RecordValue,
+                TargetPress = pipe1_press.RecordValue,
             });
+            complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
+            {
+                Name = "浜屽彿绠¤矾",
+                TargetFlow = pipe2_flow.RecordValue,
+                TargetPress = pipe2_press.RecordValue,
+            });
+
+            complex_dispatch_request.ValvePara = new List<DispatchAna.Model.ValvePara>();
+            complex_dispatch_request.ValvePara.Add(new DispatchAna.Model.ValvePara() { Name = "涓棿闃�闂�", OpenStatus = 1 });
+
 
 
 
diff --git a/Calculation/IStation.Calculation.Dispatch/Model/CurrentRecordBundle.cs b/Calculation/IStation.Calculation.Dispatch/Model/CurrentRecordBundle.cs
index 70249bb..dd84a98 100644
--- a/Calculation/IStation.Calculation.Dispatch/Model/CurrentRecordBundle.cs
+++ b/Calculation/IStation.Calculation.Dispatch/Model/CurrentRecordBundle.cs
@@ -54,8 +54,20 @@
                 {
                     this.Value = vvv;
 
-                }
-             
+                }       
+            }
+            /// <summary>
+            /// 
+            /// </summary>
+            /// <param name="name"></param>
+            /// <param name="v"></param> 
+            public RecordValue(string name, double v)
+            {
+                this.Name = name;
+
+                this.Value = v;
+
+
             }
             /// <summary>
             /// 
diff --git a/Calculation/IStation.Calculation.Dispatch/base/CalculatorOptAnaBase.cs b/Calculation/IStation.Calculation.Dispatch/base/CalculatorOptAnaBase.cs
index 50c3be7..88abe46 100644
--- a/Calculation/IStation.Calculation.Dispatch/base/CalculatorOptAnaBase.cs
+++ b/Calculation/IStation.Calculation.Dispatch/base/CalculatorOptAnaBase.cs
@@ -49,7 +49,7 @@
                 #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;
                 }
@@ -75,9 +75,9 @@
                 {//妫�鏌ュ帇鍔�
                     continue;
                 }
-                if (complex_request_paras.WaterLevelPara != null)
+                if (complex_request_paras.InletPipePara != null)
                 {
-                    foreach (var wl in complex_request_paras.WaterLevelPara)
+                    foreach (var wl in complex_request_paras.InletPipePara)
                     {
                         cacheNameBuilder.AppendFormat("V{0}", Math.Round(wl.Value, 0));
                     }
@@ -97,7 +97,18 @@
                     var result_anaSchemes = CalcSchemes鍘嬪姏(complex_request_paras, null, out error_info);
                     if (result_anaSchemes == null || result_anaSchemes.Count == 0)
                     {
-                        error_info = string.Format("绗瑊0},鍒嗘瀽鍑洪敊,鍘熷洜鏄�:{1}", hourRequest.Hour + 1, error_info);
+                        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();
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221/Base.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221/Base.cs"
index b6fb895..4ad7a8c 100644
--- "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221/Base.cs"
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221/Base.cs"
@@ -7,13 +7,56 @@
 namespace IStation.Calculation.DispatchAna
 {
     /// <summary>
-    /// 闀垮叴娉电珯璋冨害鏂规璁$畻鍣�
+    /// 浜斿彿娌熼噾娴锋柟鍚戣皟搴︽柟妗堣绠楀櫒
     /// </summary>
-    internal class CalculatorBase_SHYS_浜斿彿娌熼噾娴锋柟鍚� : CalculatorBase
+    public class CalculatorBase_SHYS_浜斿彿娌熼噾娴锋柟鍚� : CalculatorOptAnaBase
     {
-        protected List<long> machine_ids = new List<long>() { 148, 151, 154, 157, 160, 163, 166 };
+        /// <summary>
+        /// 
+        /// </summary>
+        static protected List<long> machine_ids = new List<long>() { 148, 151, 154, 157, 160, 163, 166 };
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected List<long> pipe1_machineIds = null;//1鍙锋车锛�2鍙锋车,3鍙锋车
+        /// <summary>
+        /// 
+        /// </summary>
+        protected List<long> pipe2_machineIds = null;//锛�4鍙锋车 锛�5鍙锋车 锛�6鍙锋车锛�7鍙锋车  
+        /// <summary>
+        /// 
+        /// </summary>
+        static protected long _monitor_id_鍓嶆睜娑蹭綅4 = 263;
+        /// <summary>
+        /// 
+        /// </summary>
+        static protected long _monitor_id_鍓嶆睜娑蹭綅5 = 264;
+        /// <summary>
+        /// 
+        /// </summary>
+        static protected long _monitor_id_涓�鍙风鍘嬪姏 = 265;
+        /// <summary>
+        /// 
+        /// </summary>
+        static protected long _monitor_id_浜屽彿绠″帇鍔� = 268;
+        /// <summary>
+        /// 
+        /// </summary>
+        static protected long _monitor_id_涓�鍙风娴侀噺 = 266;
+        /// <summary>
+        /// 
+        /// </summary>
+        static  protected long _monitor_id_浜屽彿绠℃祦閲� = 269;
+
+        /// <summary>
+        /// 
+        /// </summary>
         public CalculatorBase_SHYS_浜斿彿娌熼噾娴锋柟鍚�()
         {
+            pipe1_machineIds = new List<long>() { machine_ids[0], machine_ids[1], machine_ids[2] };//1鍙锋车锛�2鍙锋车,3鍙锋车
+            pipe2_machineIds = new List<long>() { machine_ids[3], machine_ids[4], machine_ids[5], machine_ids[6] };//锛�4鍙锋车 锛�5鍙锋车 锛�6鍙锋车锛�7鍙锋车  
+
             _corpID = 4;
             _stationID = 9;
         }
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221/Current.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221/Current.cs"
index 254383b..b54d8af 100644
--- "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221/Current.cs"
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221/Current.cs"
@@ -11,10 +11,6 @@
     /// </summary>
     internal class Calculator_Current_SHYS_浜斿彿娌熼噾娴锋柟鍚�: CalculatorBase_SHYS_浜斿彿娌熼噾娴锋柟鍚�, IGetCurrentRecord
     {
-        public Calculator_Current_SHYS_浜斿彿娌熼噾娴锋柟鍚�()
-        {
- 
-        }
         /// <summary>
         /// 鑾峰彇褰撳墠璋冨害淇℃伅
         /// </summary>
@@ -25,26 +21,27 @@
         public Model.CurrentRecordBundle GetCurrentRecord(long CorpID, long StationID, out string error_info)
         {
             error_info = null;
-            List<long> monitor_ids = new List<long>() { 263, 264, 265, 268, 266, 269 };
+            List<long> monitor_ids = new List<long>() { _monitor_id_鍓嶆睜娑蹭綅4, _monitor_id_鍓嶆睜娑蹭綅5, _monitor_id_涓�鍙风鍘嬪姏,
+                _monitor_id_浜屽彿绠″帇鍔�, _monitor_id_涓�鍙风娴侀噺, _monitor_id_浜屽彿绠℃祦閲� };
             var monitor_records = new Service.MonitorRecord().GetLastRecord(_corpID, monitor_ids);
 
             Model.CurrentRecordBundle bundle = new Model.CurrentRecordBundle();
 
             bundle.WaterLevelList = new List<Model.CurrentRecordBundle.RecordValue>();
 
-            var water_level4 = monitor_records.Find(x => x.MonitorPointID == 263);
+            var water_level4 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_鍓嶆睜娑蹭綅4);
             if (water_level4 != null)
             { 
                 bundle.WaterLevelList.Add(new Model.CurrentRecordBundle.RecordValue("鍓嶆睜娑蹭綅4", water_level4, 2));
             }
-            var water_level5 = monitor_records.Find(x => x.MonitorPointID == 264);
+            var water_level5 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_鍓嶆睜娑蹭綅5);
             if (water_level5 != null)
             {
                 bundle.WaterLevelList.Add(new Model.CurrentRecordBundle.RecordValue("鍓嶆睜娑蹭綅5", water_level4, 2));
             }
 
-            var pipe_press1 = monitor_records.Find(x => x.MonitorPointID == 265);
-            var pipe_press2 = monitor_records.Find(x => x.MonitorPointID == 268);
+            var pipe_press1 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓�鍙风鍘嬪姏);
+            var pipe_press2 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_浜屽彿绠″帇鍔�);
             if (pipe_press1 != null && pipe_press2 != null)
             {
                 bundle.PressList = new List<Model.CurrentRecordBundle.RecordValue>();
@@ -52,8 +49,8 @@
                 bundle.PressList.Add(new Model.CurrentRecordBundle.RecordValue("浜屽彿绠�", pipe_press2, 4));
             }
 
-            var pipe_flow1 = monitor_records.Find(x => x.MonitorPointID == 266);
-            var pipe_flow2 = monitor_records.Find(x => x.MonitorPointID == 269);
+            var pipe_flow1 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓�鍙风娴侀噺);
+            var pipe_flow2 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_浜屽彿绠℃祦閲�);
             if (pipe_flow1 != null && pipe_flow2 != null)
             {
                 bundle.FlowList = new List<Model.CurrentRecordBundle.RecordValue>();
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221/KeepStatus.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221/KeepStatus.cs"
index 2b06af5..23965dd 100644
--- "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221/KeepStatus.cs"
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221/KeepStatus.cs"
@@ -13,9 +13,12 @@
     {
         public Calculator_KeepStatus_SHYS_浜斿彿娌熼噾娴锋柟鍚�()
         {
+
         }
         Model.RequestParasComplex _request_paras;
         List<long> _open_machine_IdList ;
+
+        List<Model.MachineDetail> _allMachineList = null;
         /// <summary>
         /// 鍒濆鍖栧弬鏁�
         /// </summary>
@@ -67,117 +70,133 @@
 
             double pipe1_TargetPess = _request_paras.OutletPipePara[0].TargetPress;
             double pipe2_TargetPess = _request_paras.OutletPipePara[1].TargetPress;
-
+            if (pipe1_TargetFlow > 50)
+            {
+                if (pipe1_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,浜斿彿娌熼噾娴锋柟鍚戦渶瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe2_TargetFlow > 50)
+            {
+                if (pipe2_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,浜斿彿娌熼噾娴锋柟鍚戦渶瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
 
             double water_level = 0;//姘翠綅
-            if (_request_paras.WaterLevelPara != null && _request_paras.WaterLevelPara.Count > 0)
+            if (_request_paras.InletPipePara != null && _request_paras.InletPipePara.Count > 0)
             {
-                if (_request_paras.WaterLevelPara.Count == 1)
+                if (_request_paras.InletPipePara.Count == 1)
                 {
-                    water_level = _request_paras.WaterLevelPara[0].Value;
+                    water_level = _request_paras.InletPipePara[0].Value;
                 }
                 else
                 {//鐢ㄥ钩鍧囧��
-                    water_level = _request_paras.WaterLevelPara[0].Value+
-                        _request_paras.WaterLevelPara[1].Value;
+                    water_level = _request_paras.InletPipePara[0].Value +
+                        _request_paras.InletPipePara[1].Value;
                     water_level = water_level / 2;
-                }        
-            }
-
-
-            if (_request_paras.ValvePara == null || _request_paras.ValvePara.Count < 1)
-            {
-                error_info = "ERROR 57";
-                return null;
-            }
-   
-            List<Model.MachineDetail> allMachineList = null;
-            if (!BuildMachineList(
-                out allMachineList,
-                out error_info))
-            {
-                error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
-                return null;
-            }
-
- 
-            {
-                var pipe1_machineIds = new List<long>() { 19, 22 };//1鍙锋车锛�2鍙锋车 
-                var pipe2_machineIds = new List<long>() { 25, 28 };//3鍙锋车锛�4鍙锋车 
-
-                Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper
-                    = new Common.DispatchAnaGeneralHelper鍘嬪姏();
-
-                Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe2_helper
-                    = new Common.DispatchAnaGeneralHelper鍘嬪姏();
-
-                if (pipe2_TargetFlow < 30)
-                {//鍙紑涓�鍙锋车浜屽彿娉�   
-                    calc_pipe1_helper.InitialParas(
-                        pipe1_TargetFlow,
-                        water_level,
-                        pipe1_TargetPess,
-                        null, null,
-                        (from x in allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(), null);
-
-                    return calc_pipe1_helper.CalcKeepStatus(_open_machine_IdList);
                 }
-                else if (pipe1_TargetFlow < 30)
+            }
+
+            //鏈烘车淇℃伅
+            if(_allMachineList == null)
+            {
+                if (!BuildMachineList(
+                    out _allMachineList,
+                    out error_info))
                 {
-                    calc_pipe2_helper.InitialParas(
-                        pipe2_TargetFlow,
-                        water_level,
-                        pipe2_TargetPess,
-                        null, null,
-                        (from x in allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(), null);
-
-                    return calc_pipe2_helper.CalcKeepStatus(_open_machine_IdList);
+                    error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
+                    return null;
                 }
+            }
 
 
 
 
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe2_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+            if (pipe2_TargetFlow < 30)
+            {//鍙紑涓�鍙锋车浜屽彿娉�   
                 calc_pipe1_helper.InitialParas(
                     pipe1_TargetFlow,
-                    water_level,
-                    pipe1_TargetPess,
-                     null, null,
-                    (from x in allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(), null);
-                var pipe1_result = calc_pipe1_helper.CalcKeepStatus(_open_machine_IdList);
+                    water_level,true ,
+                    pipe1_TargetPess,false ,
+                    null, null,
+                    (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(), null);
 
-
+                return calc_pipe1_helper.CalcKeepStatus(_open_machine_IdList);
+            }
+            else if (pipe1_TargetFlow < 30)
+            {
                 calc_pipe2_helper.InitialParas(
                     pipe2_TargetFlow,
-                    water_level,
-                    pipe2_TargetPess,
+                    water_level, true,
+                    pipe2_TargetPess,false,
                     null, null,
-                    (from x in allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(), null);
+                    (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(), null);
 
-                var pipe2_result = calc_pipe2_helper.CalcKeepStatus(_open_machine_IdList);
-
-                if (pipe1_result == null || pipe2_result == null)
-                    return default;
-
-
-
-                var connect_scheme = new Model.AnaScheme();
-                connect_scheme.ID = 1;
-                connect_scheme.TotalWrkQ = pipe1_result.TotalWrkQ + pipe2_result.TotalWrkQ;
-                connect_scheme.TotalWrkH = (pipe1_result.TotalWrkH + pipe2_result.TotalWrkH) / 2;
-                connect_scheme.TotalWrkP = pipe1_result.TotalWrkP + pipe2_result.TotalWrkP;
-                connect_scheme.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH, connect_scheme.TotalWrkP);
-                connect_scheme.UWP = CalculateUWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH);
-                connect_scheme.WP = CalculateWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ);
-
-                connect_scheme.Items = new List<Model.AnaSchemeItem>();
-                if (pipe1_result.Items != null && pipe1_result.Items.Count > 0)
-                    connect_scheme.Items.AddRange(pipe1_result.Items);
-                if (pipe2_result.Items != null && pipe2_result.Items.Count > 0)
-                    connect_scheme.Items.AddRange(pipe2_result.Items);
-
-
-                return connect_scheme;
+                return calc_pipe2_helper.CalcKeepStatus(_open_machine_IdList);
             }
+
+
+
+
+            calc_pipe1_helper.InitialParas(
+                pipe1_TargetFlow,
+                water_level,true,
+                pipe1_TargetPess,false ,
+                 null, null,
+                (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(), null);
+            var pipe1_result = calc_pipe1_helper.CalcKeepStatus(_open_machine_IdList);
+            if (pipe1_result == null)
+            {
+                error_info = "绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�";
+                return null;
+            }
+
+            calc_pipe2_helper.InitialParas(
+                pipe2_TargetFlow, 
+                water_level, true,
+                pipe2_TargetPess, false,
+                null, null,
+                (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(), null);
+
+            var pipe2_result = calc_pipe2_helper.CalcKeepStatus(_open_machine_IdList);
+            if (pipe2_result == null)
+            {
+                error_info = "绠¤矾浜岃皟搴︽柟妗堟棤娉曡绠楄纭鏁版嵁鏄惁鍚堢悊";
+                return null;
+            }
+
+
+
+            var connect_scheme = new Model.AnaScheme();
+            connect_scheme.ID = 1;
+            connect_scheme.TotalWrkQ = pipe1_result.TotalWrkQ + pipe2_result.TotalWrkQ;
+            connect_scheme.TotalWrkH = (pipe1_result.TotalWrkH + pipe2_result.TotalWrkH) / 2;
+            connect_scheme.TotalWrkP = pipe1_result.TotalWrkP + pipe2_result.TotalWrkP;
+            connect_scheme.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH, connect_scheme.TotalWrkP);
+            connect_scheme.UWP = CalculateUWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH);
+            connect_scheme.WP = CalculateWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ);
+
+            connect_scheme.Items = new List<Model.AnaSchemeItem>();
+            if (pipe1_result.Items != null && pipe1_result.Items.Count > 0)
+                connect_scheme.Items.AddRange(pipe1_result.Items);
+            if (pipe2_result.Items != null && pipe2_result.Items.Count > 0)
+                connect_scheme.Items.AddRange(pipe2_result.Items);
+
+
+            return connect_scheme;
+
         }
     }
 }
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221/OptAna.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221/OptAna.cs"
index 7d7fd12..05e8191 100644
--- "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221/OptAna.cs"
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\344\272\224\345\217\267\346\262\237\351\207\221\346\265\267\346\226\271\345\220\221/OptAna.cs"
@@ -9,19 +9,21 @@
 namespace IStation.Calculation.DispatchAna
 {
     /// <summary>
-    /// 闀垮叴娉电珯璋冨害鏂规璁$畻鍣�(鏈�浼樻柟妗�)
+    /// 浜斿彿娌熼噾娴锋柟鍚戣皟搴︽柟妗堣绠楀櫒(鏈�浼樻柟妗�)
     /// </summary>
-    public  class Calculator_OptAna_SHYS_浜斿彿娌熼噾娴锋柟鍚�: CalculatorOptAnaBase, IOptAnaCalc
+    public  class Calculator_OptAna_SHYS_浜斿彿娌熼噾娴锋柟鍚�: CalculatorBase_SHYS_浜斿彿娌熼噾娴锋柟鍚�, IOptAnaCalc
     {
+        List<Model.MachineDetail> _allMachineList = null;
+
+
         /// <summary>
         /// /
         /// </summary>
         public Calculator_OptAna_SHYS_浜斿彿娌熼噾娴锋柟鍚�()
         {
-            _corpID = 4;
-            _stationID = 2;
+
         }
-        List<Model.MachineDetail> _allMachineList = null;
+       
 
         #region 璁$畻 鏈�浼樻柟妗� 
         /// <summary>
@@ -41,46 +43,12 @@
             this._corpID = complex_request_paras.CorpID;
             this._stationID = complex_request_paras.StationID;
 
-            if (complex_request_paras.ValvePara == null || complex_request_paras.ValvePara.Count() == 0)
-            {//榛樿涓棿闃�闂ㄦ槸鍏�
-                complex_request_paras.ValvePara = new List<Model.ValvePara>();
-                complex_request_paras.ValvePara.Add(new Model.ValvePara() { Name = "涓棿闃�闂�", OpenStatus = 0 });
-            }
+ 
 
 
             var isUsePress = complex_request_paras.PressValueType == Model.RequestParasComplex.ePressValueType.鍘嬪姏 ? true : false;
 
-            if (eta_ana_records != null && eta_ana_records.Q.HasValue && eta_ana_records.H.HasValue)
-            {
-                if (complex_request_paras.OutletPipePara[0].TargetFlow < 50 ||
-                     complex_request_paras.OutletPipePara[1].TargetFlow < 50)
-                {
-                    complex_request_paras.ValvePara[0].OpenStatus = 0;//鍏抽棴
-                    if (complex_request_paras.OutletPipePara[0].TargetFlow < 50)
-                    {
-                        complex_request_paras.OutletPipePara[0].TargetFlow = 0;
-                        complex_request_paras.OutletPipePara[1].TargetFlow = eta_ana_records.Q.Value;
-
-                        complex_request_paras.OutletPipePara[0].TargetPress = eta_ana_records.H.Value;
-                        complex_request_paras.OutletPipePara[1].TargetPress = eta_ana_records.H.Value;
-                    }
-                    else
-                    {
-                        complex_request_paras.OutletPipePara[1].TargetFlow = 0;
-                        complex_request_paras.OutletPipePara[0].TargetFlow = eta_ana_records.Q.Value;
-
-                        complex_request_paras.OutletPipePara[0].TargetPress = eta_ana_records.H.Value;
-                        complex_request_paras.OutletPipePara[1].TargetPress = eta_ana_records.H.Value;
-                    }
-                }
-                else
-                {
-                    complex_request_paras.OutletPipePara[0].TargetPress = eta_ana_records.H.Value;
-                    complex_request_paras.OutletPipePara[1].TargetPress = eta_ana_records.H.Value;
-                }
-                isUsePress = false;
-            }
-
+     
             if (isUsePress)
                 return CalcSchemes鍘嬪姏(complex_request_paras, machine_run_status, out error_info);
             else
@@ -107,7 +75,7 @@
             if (complex_request_paras.OutletPipePara == null ||
                 complex_request_paras.OutletPipePara.Count < 2)
             {
-                error_info = "ERROR 35,闀垮叴娉电珯闇�瑕佷袱涓璺殑娴侀噺";
+                error_info = "ERROR 35,浜斿彿娌熼噾娴锋柟鍚戦渶瑕佷袱涓璺殑娴侀噺";
                 return null;
             }
 
@@ -115,7 +83,7 @@
             double pipe2_TargetFlow = complex_request_paras.OutletPipePara[1].TargetFlow;
             if (pipe1_TargetFlow < 50 && pipe2_TargetFlow < 50)
             {//閮藉叧鏈�
-               error_info = "ERROR 35,闀垮叴娉电珯闇�瑕佷袱涓璺殑娴侀噺d閮戒负0";
+                error_info = "ERROR 35,浜斿彿娌熼噾娴锋柟鍚戦渶瑕佷袱涓璺殑娴侀噺閮戒负0";
                 return null;
             }
 
@@ -123,38 +91,38 @@
             double pipe2_TargetPess = complex_request_paras.OutletPipePara[1].TargetPress;
             if (pipe1_TargetFlow > 50)
             {
-                if (pipe1_TargetPess < 0.01  )
+                if (pipe1_TargetPess < 0.01)
                 {
-                    error_info = "ERROR 35,闀垮叴娉电珯闇�瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    error_info = "ERROR 35,浜斿彿娌熼噾娴锋柟鍚戦渶瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
                     return default;
                 }
             }
             if (pipe2_TargetFlow > 50)
             {
-                if (  pipe2_TargetPess < 0.01)
+                if (pipe2_TargetPess < 0.01)
                 {
-                    error_info = "ERROR 35,闀垮叴娉电珯闇�瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    error_info = "ERROR 35,浜斿彿娌熼噾娴锋柟鍚戦渶瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
                     return default;
                 }
             }
             double water_level = 0;//姘翠綅
-            if (complex_request_paras.WaterLevelPara != null && complex_request_paras.WaterLevelPara.Count > 0)
+            if (complex_request_paras.InletPipePara != null && complex_request_paras.InletPipePara.Count > 0)
             {
-                //var inletLevel = paras.MonitorPointInfoList.Find(x => x.SignalType == IStation.SignalType.姘翠綅);
-                //Elevation = inletLevel?.Elevation != null ? inletLevel.Elevation.Value : 0;//鑾峰彇娴嬬偣鐨勬爣楂�
-                water_level = complex_request_paras.WaterLevelPara.First().Value;
+                if (complex_request_paras.InletPipePara.Count == 1)
+                {
+                    water_level = complex_request_paras.InletPipePara[0].Value;
+                }
+                else
+                {//鐢ㄥ钩鍧囧��
+                    water_level = complex_request_paras.InletPipePara[0].Value +
+                        complex_request_paras.InletPipePara[1].Value;
+                    water_level = water_level / 2;
+                }             
             }
 
-            //涓棿闃�闂ㄧ姸鎬�
-            if (complex_request_paras.ValvePara == null || complex_request_paras.ValvePara.Count < 1)
-            {
-                error_info = "ERROR 57";
-                return null;
-            }
-            int isOpenMiddleValve = complex_request_paras.ValvePara.First().OpenStatus;
 
             //鏈烘车淇℃伅
-            if(_allMachineList == null)
+            if (_allMachineList == null)
             {
                 if (!BuildMachineList(
                     out _allMachineList,
@@ -165,109 +133,90 @@
                 }
             }
 
+ 
+   
 
-            if (isOpenMiddleValve == 1)//闃�闂ㄥ紑鐨勭姸鎬佷笅 涓ょ鐩歌繛鏁版嵁鐩稿姞姹傚钩鍧囧��
-            {
-                #region 闃�闂ㄥ紑鐨勭姸鎬佷笅
-                if (pipe1_TargetPess < 0.01 || pipe2_TargetPess < 0.01)
-                {
-                    error_info = "ERROR 135,闀垮叴娉电珯闃�闂ㄦ墦寮�鐨勭姸鎬佷笅, 鏈変竴涓璺帇鍔涙湭璧嬪��";
-                    return default;
-                }
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper =
+     new Common.DispatchAnaGeneralHelper鍘嬪姏();
 
-                Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe_helper = new Common.DispatchAnaGeneralHelper鍘嬪姏();
-                calc_pipe_helper.InitialParas(
-                    pipe1_TargetFlow + pipe2_TargetFlow,
-                    water_level,
-                  (pipe1_TargetPess + pipe2_TargetPess) / 2,
-                  null, null,
-                  _allMachineList, machine_run_status.MachineRunFilter);
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe2_helper =
+      new Common.DispatchAnaGeneralHelper鍘嬪姏();
 
-                return calc_pipe_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
-                #endregion
-            }
-            else //闃�闂ㄥ叧鐨勭姸鎬佷笅  涓ょ鐩歌繛鏁版嵁鐩稿姞
-            {
-                #region 涓棿闃�闂ㄥ叧鐨勭姸鎬佷笅
-                var pipe1_machineIds = new List<long>() { 19, 22 };//1鍙锋车锛�2鍙锋车 
-                var pipe2_machineIds = new List<long>() { 25, 28 };//3鍙锋车锛�4鍙锋车 
-
-
-                Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper =
-         new Common.DispatchAnaGeneralHelper鍘嬪姏();
-
-                Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe2_helper =
-          new Common.DispatchAnaGeneralHelper鍘嬪姏();
-
-                if (pipe2_TargetFlow < 50)
-                {//鍙紑涓�鍙锋车浜屽彿娉�
-                    calc_pipe1_helper.InitialParas(
-                        pipe1_TargetFlow,
-                        water_level,
-                        pipe1_TargetPess,
-                        null, null,
-                        (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
-                       machine_run_status ==null?null: machine_run_status.MachineRunFilter);
-
-                    return calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
-                }
-                else if (pipe1_TargetFlow < 50)
-                {
-                    calc_pipe2_helper.InitialParas(
-                        pipe2_TargetFlow,
-                        water_level,
-                      pipe2_TargetPess,
-                      null, null,
-                     (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
-                     machine_run_status == null ? null : machine_run_status.MachineRunFilter);
-
-                    return calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
-                }
+            if (pipe2_TargetFlow < 50)
+            {//鍙紑涓�鍙锋车浜屽彿娉�
                 calc_pipe1_helper.InitialParas(
                     pipe1_TargetFlow,
-                    water_level,
-                    pipe1_TargetPess,
-                  null, null,
-                 (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
-                machine_run_status == null ? null : machine_run_status.MachineRunFilter);
-                var pipe1_result = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                    water_level, true,
+                    pipe1_TargetPess,false ,
+                    null, null,
+                    (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+                   machine_run_status == null ? null : machine_run_status.MachineRunFilter);
 
-
-                calc_pipe2_helper.InitialParas(
-                    pipe2_TargetFlow,
-                    water_level,
-                  pipe2_TargetPess,
-                  null, null,
-                 (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
-                machine_run_status == null ? null : machine_run_status.MachineRunFilter);
-
-                var pipe2_result = calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
-
-                if (pipe1_result == null || pipe2_result == null)
-                    return default;
-
-                var result_1 = pipe1_result.First();
-                var result_2 = pipe2_result.First();
-
-                var plan = new Model.AnaScheme();
-                plan.ID = 1;
-                plan.TotalWrkQ = result_1.TotalWrkQ + result_2.TotalWrkQ;
-                plan.TotalWrkH = result_1.TotalWrkH + result_2.TotalWrkH;
-                plan.TotalWrkP = result_1.TotalWrkP + result_2.TotalWrkP;
-                plan.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(plan.TotalWrkQ, plan.TotalWrkH, plan.TotalWrkP);
-                plan.UWP = CalculateUWP(plan.TotalWrkP, plan.TotalWrkQ, plan.TotalWrkH);
-                plan.WP = CalculateWP(plan.TotalWrkP, plan.TotalWrkQ);
-
-                plan.Items = new List<Model.AnaSchemeItem>();
-                if (result_1.Items != null && result_1.Items.Count > 0)
-                    plan.Items.AddRange(result_1.Items);
-                if (result_2.Items != null && result_2.Items.Count > 0)
-                    plan.Items.AddRange(result_2.Items);
-
-
-                return new List<Model.AnaScheme>() { plan };
-                #endregion
+                return calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
             }
+            else if (pipe1_TargetFlow < 50)
+            {
+                calc_pipe2_helper.InitialParas(
+                    pipe2_TargetFlow, 
+                    water_level, true,
+                    pipe2_TargetPess, false,
+                    null, null,
+                 (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+                 machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                return calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+            }
+            calc_pipe1_helper.InitialParas(
+                pipe1_TargetFlow,
+                water_level,true,
+                pipe1_TargetPess,false,
+              null, null,
+             (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+            machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+            var pipe1_result = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+            if (pipe1_result == null)
+            {
+                error_info = String.Format("绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,娑蹭綅:{0}m,鍑哄彛鍘嬪姏:{1}MPa,娴侀噺瑕佹眰:{2}",
+             water_level, pipe1_TargetPess, pipe1_TargetFlow);
+                return null;
+            }
+
+            calc_pipe2_helper.InitialParas(
+                pipe2_TargetFlow,
+                water_level,true,   
+                pipe2_TargetPess,false,
+                null, null,
+                (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+            machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+            var pipe2_result = calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+            if (pipe2_result == null)
+            {
+                error_info = String.Format("绠¤矾2璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,娑蹭綅:{0}m,鍑哄彛鍘嬪姏:{1}MPa,娴侀噺瑕佹眰:{2}",
+    water_level, pipe2_TargetPess, pipe2_TargetFlow);
+                return null;
+            }
+
+            var result_1 = pipe1_result.First();
+            var result_2 = pipe2_result.First();
+
+            var plan = new Model.AnaScheme();
+            plan.ID = 1;
+            plan.TotalWrkQ = result_1.TotalWrkQ + result_2.TotalWrkQ;
+            plan.TotalWrkH = result_1.TotalWrkH + result_2.TotalWrkH;
+            plan.TotalWrkP = result_1.TotalWrkP + result_2.TotalWrkP;
+            plan.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(plan.TotalWrkQ, plan.TotalWrkH, plan.TotalWrkP);
+            plan.UWP = CalculateUWP(plan.TotalWrkP, plan.TotalWrkQ, plan.TotalWrkH);
+            plan.WP = CalculateWP(plan.TotalWrkP, plan.TotalWrkQ);
+
+            plan.Items = new List<Model.AnaSchemeItem>();
+            if (result_1.Items != null && result_1.Items.Count > 0)
+                plan.Items.AddRange(result_1.Items);
+            if (result_2.Items != null && result_2.Items.Count > 0)
+                plan.Items.AddRange(result_2.Items);
+
+
+            return new List<Model.AnaScheme>() { plan };   
         }
 
 
@@ -285,7 +234,7 @@
             if (complex_request_paras.OutletPipePara == null ||
                 complex_request_paras.OutletPipePara.Count < 2)
             {
-                error_info = "ERROR 35,闀垮叴娉电珯闇�瑕佷袱涓璺殑娴侀噺";
+                error_info = "ERROR 35,浜斿彿娌熼噾娴锋柟鍚戦渶瑕佷袱涓璺殑娴侀噺";
                 return null;
             }
 
@@ -293,7 +242,7 @@
             double pipe2_TargetFlow = complex_request_paras.OutletPipePara[1].TargetFlow;
             if (pipe1_TargetFlow < 50 && pipe2_TargetFlow < 50)
             {//閮藉叧鏈�
-                error_info = "ERROR 35,闀垮叴娉电珯闇�瑕佷袱涓璺殑娴侀噺d閮戒负0";
+                error_info = "ERROR 35,浜斿彿娌熼噾娴锋柟鍚戦渶瑕佷袱涓璺殑娴侀噺 閮戒负0";
                 return null;
             }
 
@@ -304,7 +253,7 @@
             {
                 if (pipe1_TargetHead < 0.01)
                 {
-                    error_info = "ERROR 35,闀垮叴娉电珯闇�瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    error_info = "ERROR 35,浜斿彿娌熼噾娴锋柟鍚戦渶瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
                     return default;
                 }
             }
@@ -312,20 +261,12 @@
             {
                 if (pipe2_TargetHead < 0.01)
                 {
-                    error_info = "ERROR 35,闀垮叴娉电珯闇�瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    error_info = "ERROR 35,浜斿彿娌熼噾娴锋柟鍚戦渶瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
                     return default;
                 }
             }
 
 
-
-            //涓棿闃�闂ㄧ姸鎬�
-            if (complex_request_paras.ValvePara == null || complex_request_paras.ValvePara.Count < 1)
-            {
-                error_info = "ERROR 57";
-                return null;
-            }
-            int isOpenMiddleValve = complex_request_paras.ValvePara.First().OpenStatus;
 
             //鏈烘车淇℃伅
             if (_allMachineList == null)
@@ -339,107 +280,93 @@
                 }
             }
 
-            if (isOpenMiddleValve == 1)//闃�闂ㄥ紑鐨勭姸鎬佷笅 涓ょ鐩歌繛鏁版嵁鐩稿姞姹傚钩鍧囧��
-            {
-                #region 闃�闂ㄥ紑鐨勭姸鎬佷笅
-                if (pipe1_TargetHead < 0.01 || pipe2_TargetHead < 0.01)
-                {
-                    error_info = "ERROR 135,闀垮叴娉电珯闃�闂ㄦ墦寮�鐨勭姸鎬佷笅, 鏈変竴涓璺帇鍔涙湭璧嬪��";
-                    return default;
-                }
-                Common.DispatchAnaGeneralHelper鎵▼ calc_pipe_helper = new Common.DispatchAnaGeneralHelper鎵▼();
-                calc_pipe_helper.InitialParas(
-                   pipe1_TargetFlow + pipe2_TargetFlow,
-                  (pipe1_TargetHead + pipe2_TargetHead) / 2,
-                  null, null,
-                  _allMachineList, machine_run_status == null ? null : machine_run_status.MachineRunFilter);
-
-                return calc_pipe_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
-                #endregion
-            }
-            else //闃�闂ㄥ叧鐨勭姸鎬佷笅  涓ょ鐩歌繛鏁版嵁鐩稿姞
-            {
-                #region 涓棿闃�闂ㄥ叧鐨勭姸鎬佷笅
-                var pipe1_machineIds = new List<long>() { 19, 22 };//1鍙锋车锛�2鍙锋车 
-                var pipe2_machineIds = new List<long>() { 25, 28 };//3鍙锋车锛�4鍙锋车 
 
 
-                Common.DispatchAnaGeneralHelper鎵▼ calc_pipe1_helper =
-         new Common.DispatchAnaGeneralHelper鎵▼();
 
-                Common.DispatchAnaGeneralHelper鎵▼ calc_pipe2_helper =
-          new Common.DispatchAnaGeneralHelper鎵▼();
 
-                if (pipe2_TargetFlow < 50)
-                {//鍙紑涓�鍙锋车浜屽彿娉�
-                    calc_pipe1_helper.InitialParas(
-                        pipe1_TargetFlow,
-                        pipe1_TargetHead,
-                        null, null,
-                        (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
-                    machine_run_status == null ? null : machine_run_status.MachineRunFilter);
 
-                    return calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
-                }
-                else if (pipe1_TargetFlow < 50)
-                {
-                    calc_pipe2_helper.InitialParas(
-                        pipe2_TargetFlow,
-                        pipe2_TargetHead,
-                        null, null,
-                     (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
-                    machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+            Common.DispatchAnaGeneralHelper鎵▼ calc_pipe1_helper =
+     new Common.DispatchAnaGeneralHelper鎵▼();
 
-                    return calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
-                }
+            Common.DispatchAnaGeneralHelper鎵▼ calc_pipe2_helper =
+      new Common.DispatchAnaGeneralHelper鎵▼();
+
+            if (pipe2_TargetFlow < 50)
+            {//鍙紑涓�鍙锋车浜屽彿娉�
                 calc_pipe1_helper.InitialParas(
                     pipe1_TargetFlow,
                     pipe1_TargetHead,
-                  null, null,
-                 (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
-               machine_run_status == null ? null : machine_run_status.MachineRunFilter);
-                var pipe1_result = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                    null, null,
+                    (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+                machine_run_status == null ? null : machine_run_status.MachineRunFilter);
 
-
+                return calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+            }
+            else if (pipe1_TargetFlow < 50)
+            {
                 calc_pipe2_helper.InitialParas(
+                    pipe2_TargetFlow,
+                    pipe2_TargetHead,
+                    null, null,
+                 (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+                machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                return calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+            }
+            calc_pipe1_helper.InitialParas(
+                pipe1_TargetFlow,
+                pipe1_TargetHead,
+              null, null,
+             (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+           machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+            var pipe1_result = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+            if (pipe1_result == null)
+            {
+                error_info = String.Format("绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�, 娴侀噺瑕佹眰:{1},鎵▼{0}m",
+                 pipe1_TargetFlow, pipe1_TargetHead);
+                return null;
+            }
+
+            calc_pipe2_helper.InitialParas(
                     pipe2_TargetFlow,
                     pipe2_TargetHead,
                     null, null,
                  (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
                  machine_run_status == null ? null : machine_run_status.MachineRunFilter);
 
-                var pipe2_result = calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
-
-                if (pipe1_result == null || pipe2_result == null)
-                    return default;
-
-                var result_1 = pipe1_result.First();
-                var result_2 = pipe2_result.First();
-
-                var plan = new Model.AnaScheme();
-                plan.ID = 1;
-                plan.TotalWrkQ = result_1.TotalWrkQ + result_2.TotalWrkQ;
-                plan.TotalWrkH = result_1.TotalWrkH + result_2.TotalWrkH;
-                plan.TotalWrkP = result_1.TotalWrkP + result_2.TotalWrkP;
-                plan.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(plan.TotalWrkQ, plan.TotalWrkH, plan.TotalWrkP);
-                plan.UWP = CalculateUWP(plan.TotalWrkP, plan.TotalWrkQ, plan.TotalWrkH);
-                plan.WP = CalculateWP(plan.TotalWrkP, plan.TotalWrkQ);
-
-                plan.Items = new List<Model.AnaSchemeItem>();
-                if (result_1.Items != null && result_1.Items.Count > 0)
-                    plan.Items.AddRange(result_1.Items);
-                if (result_2.Items != null && result_2.Items.Count > 0)
-                    plan.Items.AddRange(result_2.Items);
-
-
-                return new List<Model.AnaScheme>() { plan };
-                #endregion
+            var pipe2_result = calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+            if (pipe2_result == null)
+            {
+                error_info = String.Format("绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�, 娴侀噺瑕佹眰:{1},鎵▼{0}m",
+                 pipe2_TargetFlow, pipe2_TargetHead);
+                return null;
             }
+
+            var result_1 = pipe1_result.First();
+            var result_2 = pipe2_result.First();
+
+            var plan = new Model.AnaScheme();
+            plan.ID = 1;
+            plan.TotalWrkQ = result_1.TotalWrkQ + result_2.TotalWrkQ;
+            plan.TotalWrkH = (result_1.TotalWrkH + result_2.TotalWrkH)/2;
+            plan.TotalWrkP = result_1.TotalWrkP + result_2.TotalWrkP;
+            plan.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(plan.TotalWrkQ, plan.TotalWrkH, plan.TotalWrkP);
+            plan.UWP = CalculateUWP(plan.TotalWrkP, plan.TotalWrkQ, plan.TotalWrkH);
+            plan.WP = CalculateWP(plan.TotalWrkP, plan.TotalWrkQ);
+
+            plan.Items = new List<Model.AnaSchemeItem>();
+            if (result_1.Items != null && result_1.Items.Count > 0)
+                plan.Items.AddRange(result_1.Items);
+            if (result_2.Items != null && result_2.Items.Count > 0)
+                plan.Items.AddRange(result_2.Items);
+
+
+            return new List<Model.AnaScheme>() { plan };
         }
 
         #endregion
 
- 
+
 
 
     }
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\345\215\227\346\261\207\345\214\227/Base.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\345\215\227\346\261\207\345\214\227/Base.cs"
new file mode 100644
index 0000000..367551e
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\345\215\227\346\261\207\345\214\227/Base.cs"
@@ -0,0 +1,71 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 鍗楁眹鍖楄皟搴︽柟妗堣绠楀櫒
+    /// </summary>
+    public class CalculatorBase_SHYS_鍗楁眹鍖� : CalculatorOptAnaBase
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        static protected List<long> machine_ids = new List<long>() { 169, 172, 175, 178, 181 };
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_涓�鍙疯繘姘寸鍘嬪姏 = 733;
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_涓�鍙疯繘姘寸娴侀噺 = 734;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_浜屽彿杩涙按绠″帇鍔� = 736;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_浜屽彿杩涙按绠℃祦閲� = 737;
+
+
+
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_涓�鍙峰嚭姘寸鍘嬪姏 = 739;
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_涓�鍙峰嚭姘寸娴侀噺 = 740;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_浜屽彿鍑烘按绠″帇鍔� = 742;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_浜屽彿鍑烘按绠℃祦閲� = 743;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public CalculatorBase_SHYS_鍗楁眹鍖�()
+        {
+  
+            _corpID = 4;
+            _stationID = 11;
+        }
+ 
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\345\215\227\346\261\207\345\214\227/Current.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\345\215\227\346\261\207\345\214\227/Current.cs"
new file mode 100644
index 0000000..c92240c
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\345\215\227\346\261\207\345\214\227/Current.cs"
@@ -0,0 +1,72 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 鍗楁眹鍖楁车绔欒皟搴︽柟妗堣绠楀櫒
+    /// </summary>
+    internal class Calculator_Current_SHYS_鍗楁眹鍖�: CalculatorBase_SHYS_鍗楁眹鍖�, IGetCurrentRecord
+    {
+        /// <summary>
+        /// 鑾峰彇褰撳墠璋冨害淇℃伅
+        /// </summary>
+        /// <param name="CorpID"></param>
+        /// <param name="StationID"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        public Model.CurrentRecordBundle GetCurrentRecord(long CorpID, long StationID, out string error_info)
+        {
+            error_info = null;
+            List<long> monitor_ids = new List<long>() {
+                _monitor_id_涓�鍙疯繘姘寸鍘嬪姏, _monitor_id_涓�鍙疯繘姘寸娴侀噺,
+                _monitor_id_浜屽彿杩涙按绠″帇鍔�, _monitor_id_浜屽彿杩涙按绠℃祦閲�,
+                _monitor_id_涓�鍙峰嚭姘寸鍘嬪姏, _monitor_id_涓�鍙峰嚭姘寸娴侀噺,
+                _monitor_id_浜屽彿鍑烘按绠″帇鍔�, _monitor_id_浜屽彿鍑烘按绠℃祦閲�,
+            };
+            var monitor_records = new Service.MonitorRecord().GetLastRecord(_corpID, monitor_ids);
+
+            Model.CurrentRecordBundle bundle = new Model.CurrentRecordBundle();
+
+            bundle.WaterLevelList = new List<Model.CurrentRecordBundle.RecordValue>();
+
+            var inlet_press1  = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓�鍙疯繘姘寸鍘嬪姏);
+            if (inlet_press1 != null)
+            { 
+                bundle.WaterLevelList.Add(new Model.CurrentRecordBundle.RecordValue("涓�鍙疯繘姘寸鍘嬪姏", inlet_press1, 2));
+            }
+            var inlet_press2 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_浜屽彿杩涙按绠″帇鍔�);
+            if (inlet_press2 != null)
+            {
+                bundle.WaterLevelList.Add(new Model.CurrentRecordBundle.RecordValue("浜屽彿杩涙按绠″帇鍔�", inlet_press2, 2));
+            }
+
+            var pipe_press1 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓�鍙峰嚭姘寸鍘嬪姏);
+            var pipe_press2 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_浜屽彿鍑烘按绠″帇鍔�);
+            if (pipe_press1 != null && pipe_press2 != null)
+            {
+                bundle.PressList = new List<Model.CurrentRecordBundle.RecordValue>();
+                bundle.PressList.Add(new Model.CurrentRecordBundle.RecordValue("涓�鍙风", pipe_press1, 4));
+                bundle.PressList.Add(new Model.CurrentRecordBundle.RecordValue("浜屽彿绠�", pipe_press2, 4));
+            }
+
+            var pipe_flow1 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓�鍙峰嚭姘寸娴侀噺);
+            var pipe_flow2 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_浜屽彿鍑烘按绠℃祦閲�);
+            if (pipe_flow1 != null && pipe_flow2 != null)
+            {
+                bundle.FlowList = new List<Model.CurrentRecordBundle.RecordValue>();
+                bundle.FlowList.Add(new Model.CurrentRecordBundle.RecordValue("涓�鍙风", pipe_flow1, 0));
+                bundle.FlowList.Add(new Model.CurrentRecordBundle.RecordValue("浜屽彿绠�", pipe_flow2, 0));
+            }
+
+             
+            return bundle;
+        }
+
+ 
+         
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\345\215\227\346\261\207\345\214\227/KeepStatus.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\345\215\227\346\261\207\345\214\227/KeepStatus.cs"
new file mode 100644
index 0000000..a7a4eed
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\345\215\227\346\261\207\345\214\227/KeepStatus.cs"
@@ -0,0 +1,165 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 鍗楁眹鍖楁车绔欒皟搴︽柟妗堣绠楀櫒
+    /// </summary>
+    internal class Calculator_KeepStatus_SHYS_鍗楁眹鍖� : CalculatorBase_SHYS_鍗楁眹鍖�, IKeepStatusCalc
+    {
+        public Calculator_KeepStatus_SHYS_鍗楁眹鍖�()
+        {
+
+        }
+        Model.RequestParasComplex _request_paras;
+        List<long> _open_machine_IdList ;
+
+        List<Model.MachineDetail> _allMachineList = null;
+        /// <summary>
+        /// 鍒濆鍖栧弬鏁�
+        /// </summary>
+        /// <param name="complex_request_paras"></param>
+        /// <param name="eta_ana_records"></param>
+        /// <param name="open_machine_ids"></param>
+        public  void IntialRequest(
+            IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+            IStation.Calculation.DispatchAna.Model.EtaAnaRecord4Station eta_ana_records,
+            List<long> open_machine_ids)
+        {
+            this._request_paras = complex_request_paras;
+            this._open_machine_IdList = open_machine_ids;
+        }
+
+
+
+
+        /// <summary>
+        /// 璁$畻淇濇寔褰撳墠寮�鏈虹姸鎬�
+        /// </summary> 
+        /// <param name="error_info">閿欒淇℃伅</param>
+        /// <returns></returns>
+        public Model.AnaScheme Calc(out string error_info)
+        {
+            if (_open_machine_IdList == null || _open_machine_IdList.Count == 0)
+            {
+                error_info = "ERROR 25";
+                return null;
+            }
+            error_info = null;
+            if (_request_paras == null)
+            {
+                error_info = "ERROR 30";
+                return null;
+            }
+
+            if (_request_paras.OutletPipePara == null || _request_paras.OutletPipePara.Count < 2)
+            {
+                error_info = "ERROR 35";
+                return null;
+            }
+            double pipe1_TargetFlow = _request_paras.OutletPipePara[0].TargetFlow;
+            double pipe2_TargetFlow = _request_paras.OutletPipePara[1].TargetFlow;
+            if (pipe1_TargetFlow < 10 && pipe2_TargetFlow < 10)
+            {
+                return default;
+            }
+
+            double pipe1_TargetPess = _request_paras.OutletPipePara[0].TargetPress;
+            double pipe2_TargetPess = _request_paras.OutletPipePara[1].TargetPress;
+            if (pipe1_TargetFlow > 50)
+            {
+                if (pipe1_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,鍗楁眹鍖楅渶瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe2_TargetFlow > 50)
+            {
+                if (pipe2_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,鍗楁眹鍖楅渶瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+
+            double inlet_press = 0;//姘翠綅
+            if (_request_paras.InletPipePara != null && _request_paras.InletPipePara.Count > 0)
+            {
+         
+                if (_request_paras.InletPipePara.Count > 1)
+                {
+                    inlet_press = (_request_paras.InletPipePara[0].Value + _request_paras.InletPipePara[1].Value)/2;
+                }
+                else
+                {
+                    inlet_press = _request_paras.InletPipePara[0].Value;
+                }
+            }
+            double water_level = inlet_press * 102;
+
+            //鏈烘车淇℃伅
+            if (_allMachineList == null)
+            {
+                if (!BuildMachineList(
+                    out _allMachineList,
+                    out error_info))
+                {
+                    error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
+                    return null;
+                }
+            }
+
+
+
+
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+ 
+ 
+
+
+
+
+            calc_pipe1_helper.InitialParas(
+                pipe1_TargetFlow+ pipe2_TargetFlow,
+                water_level, true,
+                (pipe1_TargetPess+ pipe2_TargetPess)/2,false ,
+                 null, null,
+                 _allMachineList , null);
+            var pipe1_result = calc_pipe1_helper.CalcKeepStatus(_open_machine_IdList);
+            if (pipe1_result == null)
+            {
+                error_info = "绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�";
+                return null;
+            }
+
+ 
+
+
+
+            var connect_scheme = new Model.AnaScheme();
+            connect_scheme.ID = 1;
+            connect_scheme.TotalWrkQ = pipe1_result.TotalWrkQ  ;
+            connect_scheme.TotalWrkH = (pipe1_result.TotalWrkH  )  ;
+            connect_scheme.TotalWrkP = pipe1_result.TotalWrkP  ;
+            connect_scheme.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH, connect_scheme.TotalWrkP);
+            connect_scheme.UWP = CalculateUWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH);
+            connect_scheme.WP = CalculateWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ);
+
+            connect_scheme.Items = new List<Model.AnaSchemeItem>();
+            if (pipe1_result.Items != null && pipe1_result.Items.Count > 0)
+                connect_scheme.Items.AddRange(pipe1_result.Items);
+ 
+
+
+            return connect_scheme;
+
+        }
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\345\215\227\346\261\207\345\214\227/OptAna.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\345\215\227\346\261\207\345\214\227/OptAna.cs"
new file mode 100644
index 0000000..a38c577
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\345\215\227\346\261\207\345\214\227/OptAna.cs"
@@ -0,0 +1,244 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Numerics;
+using System.Text;
+using System.Threading.Tasks;
+using IStation.Calculation.DispatchAna.Model;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 鍗楁眹鍖楄皟搴︽柟妗堣绠楀櫒(鏈�浼樻柟妗�)
+    /// </summary>
+    public  class Calculator_OptAna_SHYS_鍗楁眹鍖�: CalculatorBase_SHYS_鍗楁眹鍖�, IOptAnaCalc
+    {
+        List<Model.MachineDetail> _allMachineList = null;
+
+
+        /// <summary>
+        /// /
+        /// </summary>
+        public Calculator_OptAna_SHYS_鍗楁眹鍖�()
+        {
+
+        }
+       
+
+        #region 璁$畻 鏈�浼樻柟妗� 
+        /// <summary>
+        /// 璁$畻 鏈�浼樻柟妗� 
+        /// </summary>
+        /// <param name="complex_request_paras"></param>
+        /// <param name="eta_ana_records"></param>
+        /// <param name="machine_run_status"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        public List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcSchemes(
+            IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+            IStation.Calculation.DispatchAna.Model.EtaAnaRecord4Station eta_ana_records,
+            IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
+            out string error_info)
+        {
+            this._corpID = complex_request_paras.CorpID;
+            this._stationID = complex_request_paras.StationID;
+
+ 
+
+
+            var isUsePress = complex_request_paras.PressValueType == Model.RequestParasComplex.ePressValueType.鍘嬪姏 ? true : false;
+
+     
+            if (isUsePress)
+                return CalcSchemes鍘嬪姏(complex_request_paras, machine_run_status, out error_info);
+            else
+                return CalcSchemes鎵▼(complex_request_paras, machine_run_status, out error_info);
+        }
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="complex_request_paras"></param>
+        /// <param name="machine_run_status"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        protected override  List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcSchemes鍘嬪姏(
+                    IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+                    IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
+                    out string error_info)
+        {
+            error_info = "";
+            if (complex_request_paras == null)
+            {
+                error_info = "ERROR 30";
+                return null;
+            }
+            if (complex_request_paras.OutletPipePara == null ||
+                complex_request_paras.OutletPipePara.Count < 2)
+            {
+                error_info = "ERROR 35,鍗楁眹鍖楅渶瑕佷袱涓璺殑娴侀噺";
+                return null;
+            }
+
+            double pipe1_TargetFlow = complex_request_paras.OutletPipePara[0].TargetFlow;
+            double pipe2_TargetFlow = complex_request_paras.OutletPipePara[1].TargetFlow;
+            if (pipe1_TargetFlow < 50 && pipe2_TargetFlow < 50)
+            {//閮藉叧鏈�
+                error_info = "ERROR 35,鍗楁眹鍖楅渶瑕佷袱涓璺殑娴侀噺閮戒负0";
+                return null;
+            }
+
+            double pipe1_TargetPess = complex_request_paras.OutletPipePara[0].TargetPress;
+            double pipe2_TargetPess = complex_request_paras.OutletPipePara[1].TargetPress;
+            if (pipe1_TargetFlow > 50)
+            {
+                if (pipe1_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,鍗楁眹鍖楅渶瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe2_TargetFlow > 50)
+            {
+                if (pipe2_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,鍗楁眹鍖楅渶瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            double inlet_press = 0;//姘翠綅
+            if (complex_request_paras.InletPipePara != null && complex_request_paras.InletPipePara.Count > 0)
+            {
+                if (complex_request_paras.InletPipePara.Count > 1)
+                {
+                    inlet_press = (complex_request_paras.InletPipePara[0].Value + complex_request_paras.InletPipePara[1].Value) / 2;
+                }
+                else
+                {
+                    inlet_press = complex_request_paras.InletPipePara[0].Value;
+                }
+            }
+            double water_level = inlet_press * 102;
+
+
+            //鏈烘车淇℃伅
+            if (_allMachineList == null)
+            {
+                if (!BuildMachineList(
+                    out _allMachineList,
+                    out error_info))
+                {
+                    error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
+                    return null;
+                }
+            }
+
+ 
+   
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper =
+     new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+ 
+
+ 
+                calc_pipe1_helper.InitialParas(
+                    pipe1_TargetFlow + pipe2_TargetFlow,
+                    water_level,true ,
+                    (pipe1_TargetPess + pipe2_TargetPess) / 2,false ,
+                    null, null,
+                    _allMachineList,
+                    machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                return calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+           
+ 
+        }
+
+
+        private List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcSchemes鎵▼(
+                    IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+                    IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
+                    out string error_info)
+        {
+            error_info = "";
+            if (complex_request_paras == null)
+            {
+                error_info = "ERROR 30";
+                return null;
+            }
+            if (complex_request_paras.OutletPipePara == null ||
+                complex_request_paras.OutletPipePara.Count < 2)
+            {
+                error_info = "ERROR 35,鍗楁眹鍖楅渶瑕佷袱涓璺殑娴侀噺";
+                return null;
+            }
+
+            double pipe1_TargetFlow = complex_request_paras.OutletPipePara[0].TargetFlow;
+            double pipe2_TargetFlow = complex_request_paras.OutletPipePara[1].TargetFlow;
+            if (pipe1_TargetFlow < 50 && pipe2_TargetFlow < 50)
+            {//閮藉叧鏈�
+                error_info = "ERROR 35,鍗楁眹鍖楅渶瑕佷袱涓璺殑娴侀噺 閮戒负0";
+                return null;
+            }
+
+            double pipe1_TargetHead = complex_request_paras.OutletPipePara[0].TargetPress;
+            double pipe2_TargetHead = complex_request_paras.OutletPipePara[1].TargetPress;
+
+            if (pipe1_TargetFlow > 50)
+            {
+                if (pipe1_TargetHead < 0.01)
+                {
+                    error_info = "ERROR 35,鍗楁眹鍖楅渶瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe2_TargetFlow > 50)
+            {
+                if (pipe2_TargetHead < 0.01)
+                {
+                    error_info = "ERROR 35,鍗楁眹鍖楅渶瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+
+
+
+            //鏈烘车淇℃伅
+            if (_allMachineList == null)
+            {
+                if (!BuildMachineList(
+                out _allMachineList,
+                out error_info))
+                {
+                    error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
+                    return null;
+                }
+            }
+
+
+
+
+
+
+            Common.DispatchAnaGeneralHelper鎵▼ calc_pipe1_helper =
+     new Common.DispatchAnaGeneralHelper鎵▼();
+
+ 
+                calc_pipe1_helper.InitialParas(
+                    pipe1_TargetFlow+ pipe2_TargetFlow,
+                    (pipe1_TargetHead + pipe1_TargetHead)/2,
+                    null, null,
+                    _allMachineList,
+                machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                return calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+            
+        }
+
+        #endregion
+
+
+
+
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\346\263\260\345\222\214\346\263\265\347\253\231/Base.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\346\263\260\345\222\214\346\263\265\347\253\231/Base.cs"
new file mode 100644
index 0000000..a0b557c
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\346\263\260\345\222\214\346\263\265\347\253\231/Base.cs"
@@ -0,0 +1,64 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 娉板拰娉电珯璋冨害鏂规璁$畻鍣�
+    /// </summary>
+    public  class CalculatorBase_SHYS_娉板拰娉电珯 : CalculatorOptAnaBase
+    {
+        /// <summary>
+        /// 娌℃湁5鍙锋车: 1234 67
+        /// </summary>
+        static protected List<long> machine_ids = new List<long>() { 304,307,310,313,0,316,319 };
+
+        /// <summary>
+        /// 杩涘彛绠¤矾鍘嬪姏
+        /// </summary>
+        public static long _montiro_id_inlet_press = 988;
+
+        /// <summary>
+        /// 鍑烘按绠$璺�1鐨勫帇鍔�
+        /// </summary>
+        public static long _monitor_id_pipe_press1 = 989;
+
+        /// <summary>
+        /// 鍑烘按绠$璺�1鐨勬祦閲�
+        /// </summary>
+        public static long _monitor_id_pipe_flow1 = 990;
+
+        /// <summary>
+        /// 鍑烘按绠$璺�2鐨勫帇鍔�
+        /// </summary>
+        public static long _monitor_id_pipe_press2 = 992;
+
+        /// <summary>
+        /// 鍑烘按绠$璺�2鐨勬祦閲�
+        /// </summary>
+        public static long _monitor_id_pipe_flow2 = 993;
+
+        /// <summary>
+        /// 4鍜�6涔嬮棿闃�闂ㄧ姸鎬�, 娌℃湁鑾峰彇鍒�
+        /// </summary>
+        public static long _monitor_id_涓棿闃�闂ㄧ姸鎬乢46 = 0;
+
+        /// <summary>
+        /// 6鍜�7涔嬮棿闃�闂ㄧ姸鎬�, 娌℃湁鑾峰彇鍒�
+        /// </summary>
+        public static long _monitor_id_涓棿闃�闂ㄧ姸鎬乢67 = 0;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public CalculatorBase_SHYS_娉板拰娉电珯()
+        {
+            _corpID = 4;
+            _stationID = 17;
+        }
+ 
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\346\263\260\345\222\214\346\263\265\347\253\231/Current.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\346\263\260\345\222\214\346\263\265\347\253\231/Current.cs"
new file mode 100644
index 0000000..1964dc6
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\346\263\260\345\222\214\346\263\265\347\253\231/Current.cs"
@@ -0,0 +1,68 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 娉板拰娉电珯璋冨害鏂规璁$畻鍣�
+    /// </summary>
+    internal class Calculator_Current_SHYS_娉板拰娉电珯: CalculatorBase_SHYS_娉板拰娉电珯, IGetCurrentRecord
+    {
+        public Calculator_Current_SHYS_娉板拰娉电珯()
+        {
+ 
+        }
+        /// <summary>
+        /// 鑾峰彇褰撳墠璋冨害淇℃伅
+        /// </summary>
+        /// <param name="CorpID"></param>
+        /// <param name="StationID"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        public Model.CurrentRecordBundle GetCurrentRecord(long CorpID, long StationID, out string error_info)
+        {
+            error_info = null;
+            var monitor_ids = new List<long>() {
+                _montiro_id_inlet_press, 
+                _monitor_id_pipe_press1, _monitor_id_pipe_flow1,
+                _monitor_id_pipe_press2, _monitor_id_pipe_flow2 };
+            var monitor_records = new Service.MonitorRecord().GetLastRecord(_corpID, monitor_ids);
+
+            Model.CurrentRecordBundle bundle = new Model.CurrentRecordBundle();
+
+            var inlet_press = monitor_records.Find(x => x.MonitorPointID == _montiro_id_inlet_press);
+            if (inlet_press != null)
+            {
+                bundle.WaterLevelList = new List<Model.CurrentRecordBundle.RecordValue>();
+                bundle.WaterLevelList.Add(new Model.CurrentRecordBundle.RecordValue("杩涙按绠¤矾鍘嬪姏", inlet_press, 4));
+            }
+            
+            var pipe_press1 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_pipe_press1);
+            var pipe_press2 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_pipe_press2);
+            if (pipe_press1 != null && pipe_press2 != null)
+            {
+                bundle.PressList = new List<Model.CurrentRecordBundle.RecordValue>();
+                bundle.PressList.Add(new Model.CurrentRecordBundle.RecordValue("涓�鍙风", pipe_press1, 4));
+                bundle.PressList.Add(new Model.CurrentRecordBundle.RecordValue("浜屽彿绠�", pipe_press2, 4));
+            }
+
+            var pipe_flow1 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_pipe_flow1);
+            var pipe_flow2 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_pipe_flow2);
+            if (pipe_flow1 != null && pipe_flow2 != null)
+            {
+                bundle.FlowList = new List<Model.CurrentRecordBundle.RecordValue>();
+                bundle.FlowList.Add(new Model.CurrentRecordBundle.RecordValue("涓�鍙风", pipe_flow1, 0));
+                bundle.FlowList.Add(new Model.CurrentRecordBundle.RecordValue("浜屽彿绠�", pipe_flow2, 0));
+            }
+
+             
+            return bundle;
+        }
+
+ 
+         
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\346\263\260\345\222\214\346\263\265\347\253\231/KeepStatus.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\346\263\260\345\222\214\346\263\265\347\253\231/KeepStatus.cs"
new file mode 100644
index 0000000..ad7b6aa
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\346\263\260\345\222\214\346\263\265\347\253\231/KeepStatus.cs"
@@ -0,0 +1,378 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 娉板拰娉电珯璋冨害鏂规璁$畻鍣�
+    /// </summary>
+    internal class Calculator_KeepStatus_SHYS_娉板拰娉电珯 : CalculatorBase_SHYS_娉板拰娉电珯, IKeepStatusCalc
+    {
+        public Calculator_KeepStatus_SHYS_娉板拰娉电珯()
+        {
+        }
+        Model.RequestParasComplex _request_paras;
+        List<long> _open_machine_IdList ;
+        /// <summary>
+        /// 鍒濆鍖栧弬鏁�
+        /// </summary>
+        /// <param name="complex_request_paras"></param>
+        /// <param name="eta_ana_records"></param>
+        /// <param name="open_machine_ids"></param>
+        public  void IntialRequest(
+            IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+            IStation.Calculation.DispatchAna.Model.EtaAnaRecord4Station eta_ana_records,
+            List<long> open_machine_ids)
+        {
+            this._request_paras = complex_request_paras;
+            this._open_machine_IdList = open_machine_ids;
+        }
+
+
+
+
+        /// <summary>
+        /// 璁$畻淇濇寔褰撳墠寮�鏈虹姸鎬�
+        /// </summary> 
+        /// <param name="error_info">閿欒淇℃伅</param>
+        /// <returns></returns>
+        public Model.AnaScheme Calc(out string error_info)
+        {
+            if (_open_machine_IdList == null || _open_machine_IdList.Count == 0)
+            {
+                error_info = "ERROR 25";
+                return null;
+            }
+            error_info = null;
+            if (_request_paras == null)
+            {
+                error_info = "ERROR 30";
+                return null;
+            }
+
+            if (_request_paras.OutletPipePara == null || _request_paras.OutletPipePara.Count < 2)
+            {
+                error_info = "ERROR 35";
+                return null;
+            }
+            double pipe1_TargetFlow = _request_paras.OutletPipePara[0].TargetFlow;
+            double pipe2_TargetFlow = _request_paras.OutletPipePara[1].TargetFlow;
+            if (pipe1_TargetFlow < 10 && pipe2_TargetFlow < 10)
+            {
+                return default;
+            }
+
+            double pipe1_TargetPess = _request_paras.OutletPipePara[0].TargetPress;
+            double pipe2_TargetPess = _request_paras.OutletPipePara[1].TargetPress;
+
+
+            double inlet_press = 0;//鍘嬪姏
+            if (_request_paras.InletPipePara != null && _request_paras.InletPipePara.Count > 0)
+            {
+                inlet_press = _request_paras.InletPipePara.First().Value;
+            }
+            double water_level = inlet_press * 102;
+
+            bool isOpenMiddleValve46 = false;
+            bool isOpenMiddleValve67 = true;
+            if (pipe2_TargetFlow > 18000)
+            {
+                isOpenMiddleValve46 = true;
+                isOpenMiddleValve67 = true;
+            }
+            else if (pipe2_TargetFlow > 9000)
+            {
+                isOpenMiddleValve46 = false;
+                isOpenMiddleValve67 = true;
+            }
+            else
+            {
+                isOpenMiddleValve46 = true;
+                isOpenMiddleValve67 = false;
+            }
+
+
+            List<Model.MachineDetail> allMachineList = null;
+            if (!BuildMachineList(
+                out allMachineList,
+                out error_info))
+            {
+                error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
+                return null;
+            }
+
+            if (isOpenMiddleValve46 && isOpenMiddleValve67)//闃�闂ㄥ紑鐨勭姸鎬佷笅 涓ょ鐩歌繛鏁版嵁鐩稿姞姹傚钩鍧囧��
+            {
+                double outlet_press = 0;
+                if (pipe1_TargetPess > 0.1 && pipe2_TargetPess > 0.1)
+                {
+                    outlet_press = (pipe1_TargetPess + pipe2_TargetPess) / 2;
+                }
+                else
+                {
+                    if (pipe1_TargetPess > 0.01)
+                        outlet_press = pipe1_TargetPess;
+                    else if (pipe2_TargetPess > 0.01)
+                        outlet_press = pipe2_TargetPess;
+                    else
+                        return null;
+                }
+                Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe_helper =
+                    new Common.DispatchAnaGeneralHelper鍘嬪姏();
+                calc_pipe_helper.InitialParas(
+                    pipe1_TargetFlow + pipe2_TargetFlow,
+                    water_level,true ,
+                    outlet_press,false ,
+                    null, null,
+                    allMachineList, null);
+
+                return calc_pipe_helper.CalcKeepStatus(_open_machine_IdList);
+            }
+            else if (isOpenMiddleValve46 && !isOpenMiddleValve67)
+            {//7 骞惰仈  12346骞惰仈
+                Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper
+                    = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+                Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe2_helper
+                    = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+                List<long> pipe1_machineIds = new List<long>() { machine_ids[0], machine_ids[1], machine_ids[2], machine_ids[3], machine_ids[5] };
+                List<long> pipe2_machineIds = new List<long>() { machine_ids[6] };
+
+                if (pipe2_TargetFlow < 30)
+                {//鍙紑涓�鍙锋车浜屽彿娉�   
+                    calc_pipe1_helper.InitialParas(
+                        pipe1_TargetFlow,
+                        water_level,true ,
+                        pipe1_TargetPess,false ,
+                        null, null,
+                        (from x in allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(), null);
+
+                    return calc_pipe1_helper.CalcKeepStatus(_open_machine_IdList);
+                }
+                else if (pipe1_TargetFlow < 30)
+                {
+                    calc_pipe2_helper.InitialParas(
+                        pipe2_TargetFlow,
+                        water_level, true,
+                        pipe2_TargetPess, false,
+                        null, null,
+                        (from x in allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(), null);
+
+                    return calc_pipe2_helper.CalcKeepStatus(_open_machine_IdList);
+                }
+
+
+
+
+                calc_pipe1_helper.InitialParas(
+                    pipe1_TargetFlow,
+                    water_level, true,
+                    pipe1_TargetPess, false,
+                     null, null,
+                    (from x in allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(), null);
+                var pipe1_result = calc_pipe1_helper.CalcKeepStatus(_open_machine_IdList);
+
+
+                calc_pipe2_helper.InitialParas(
+                    pipe2_TargetFlow,
+                    water_level,true ,
+                    pipe2_TargetPess,false ,
+                    null, null,
+                    (from x in allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(), null);
+
+                var pipe2_result = calc_pipe2_helper.CalcKeepStatus(_open_machine_IdList);
+
+                if (pipe1_result == null || pipe2_result == null)
+                    return default;
+
+
+
+                var connect_scheme = new Model.AnaScheme();
+                connect_scheme.ID = 1;
+                connect_scheme.TotalWrkQ = pipe1_result.TotalWrkQ + pipe2_result.TotalWrkQ;
+                connect_scheme.TotalWrkH = (pipe1_result.TotalWrkH + pipe2_result.TotalWrkH) / 2;
+                connect_scheme.TotalWrkP = pipe1_result.TotalWrkP + pipe2_result.TotalWrkP;
+                connect_scheme.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH, connect_scheme.TotalWrkP);
+                connect_scheme.UWP = CalculateUWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH);
+                connect_scheme.WP = CalculateWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ);
+
+                connect_scheme.Items = new List<Model.AnaSchemeItem>();
+                if (pipe1_result.Items != null && pipe1_result.Items.Count > 0)
+                    connect_scheme.Items.AddRange(pipe1_result.Items);
+                if (pipe2_result.Items != null && pipe2_result.Items.Count > 0)
+                    connect_scheme.Items.AddRange(pipe2_result.Items);
+
+
+                return connect_scheme;
+            }
+
+            else if (!isOpenMiddleValve46 && isOpenMiddleValve67)
+            {//67 骞惰仈  1234骞惰仈
+
+                List<long> pipe1_machineIds = new List<long>() { machine_ids[0], machine_ids[1], machine_ids[2], machine_ids[3] };
+                List<long> pipe2_machineIds = new List<long>() { machine_ids[5], machine_ids[6] };
+
+                Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper
+                    = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+                Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe2_helper
+                    = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+                if (pipe2_TargetFlow < 30)
+                {//鍙紑涓�鍙锋车浜屽彿娉�   
+                    calc_pipe1_helper.InitialParas(
+                        pipe1_TargetFlow,
+                        water_level, true,
+                        pipe1_TargetPess, false,
+                        null, null,
+                        (from x in allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(), null);
+
+                    return calc_pipe1_helper.CalcKeepStatus(_open_machine_IdList);
+                }
+                else if (pipe1_TargetFlow < 30)
+                {
+                    calc_pipe2_helper.InitialParas(
+                        pipe2_TargetFlow,
+                        water_level,true ,
+                        pipe2_TargetPess,false ,
+                        null, null,
+                        (from x in allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(), null);
+
+                    return calc_pipe2_helper.CalcKeepStatus(_open_machine_IdList);
+                }
+
+
+
+
+                calc_pipe1_helper.InitialParas(
+                    pipe1_TargetFlow,
+                    water_level, true,
+                    pipe1_TargetPess, false,
+                     null, null,
+                    (from x in allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(), null);
+                var pipe1_result = calc_pipe1_helper.CalcKeepStatus(_open_machine_IdList);
+
+
+                calc_pipe2_helper.InitialParas(
+                    pipe2_TargetFlow,
+                    water_level, true,
+                    pipe2_TargetPess, false,
+                    null, null,
+                    (from x in allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(), null);
+
+                var pipe2_result = calc_pipe2_helper.CalcKeepStatus(_open_machine_IdList);
+
+                if (pipe1_result == null || pipe2_result == null)
+                    return default;
+
+
+
+                var connect_scheme = new Model.AnaScheme();
+                connect_scheme.ID = 1;
+                connect_scheme.TotalWrkQ = pipe1_result.TotalWrkQ + pipe2_result.TotalWrkQ;
+                connect_scheme.TotalWrkH = (pipe1_result.TotalWrkH + pipe2_result.TotalWrkH) / 2;
+                connect_scheme.TotalWrkP = pipe1_result.TotalWrkP + pipe2_result.TotalWrkP;
+                connect_scheme.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH, connect_scheme.TotalWrkP);
+                connect_scheme.UWP = CalculateUWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH);
+                connect_scheme.WP = CalculateWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ);
+
+                connect_scheme.Items = new List<Model.AnaSchemeItem>();
+                if (pipe1_result.Items != null && pipe1_result.Items.Count > 0)
+                    connect_scheme.Items.AddRange(pipe1_result.Items);
+                if (pipe2_result.Items != null && pipe2_result.Items.Count > 0)
+                    connect_scheme.Items.AddRange(pipe2_result.Items);
+
+
+                return connect_scheme;
+            }
+
+            else if (!isOpenMiddleValve46 && !isOpenMiddleValve67)
+            {//7 骞惰仈  1234骞惰仈
+
+                List<long> pipe1_machineIds = new List<long>() { machine_ids[0], machine_ids[1], machine_ids[2], machine_ids[3] };
+                List<long> pipe2_machineIds = new List<long>() { machine_ids[6] };
+
+                Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper
+                    = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+                Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe2_helper
+                    = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+                if (pipe2_TargetFlow < 30)
+                {//鍙紑涓�鍙锋车浜屽彿娉�   
+                    calc_pipe1_helper.InitialParas(
+                        pipe1_TargetFlow,
+                        water_level, true,
+                        pipe1_TargetPess,false ,
+                        null, null,
+                        (from x in allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(), null);
+
+                    return calc_pipe1_helper.CalcKeepStatus(_open_machine_IdList);
+                }
+                else if (pipe1_TargetFlow < 30)
+                {
+                    calc_pipe2_helper.InitialParas(
+                        pipe2_TargetFlow,
+                        water_level, true,
+                        pipe2_TargetPess, false,
+                        null, null,
+                        (from x in allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(), null);
+
+                    return calc_pipe2_helper.CalcKeepStatus(_open_machine_IdList);
+                }
+
+
+
+
+                calc_pipe1_helper.InitialParas(
+                    pipe1_TargetFlow,
+                    water_level,true,
+                    pipe1_TargetPess,false ,
+                     null, null,
+                    (from x in allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(), null);
+                var pipe1_result = calc_pipe1_helper.CalcKeepStatus(_open_machine_IdList);
+
+
+                calc_pipe2_helper.InitialParas(
+                    pipe2_TargetFlow,
+                    water_level,true ,
+                    pipe2_TargetPess,false ,
+                    null, null,
+                    (from x in allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(), null);
+
+                var pipe2_result = calc_pipe2_helper.CalcKeepStatus(_open_machine_IdList);
+
+                if (pipe1_result == null || pipe2_result == null)
+                    return default;
+
+
+
+                var connect_scheme = new Model.AnaScheme();
+                connect_scheme.ID = 1;
+                connect_scheme.TotalWrkQ = pipe1_result.TotalWrkQ + pipe2_result.TotalWrkQ;
+                connect_scheme.TotalWrkH = (pipe1_result.TotalWrkH + pipe2_result.TotalWrkH) / 2;
+                connect_scheme.TotalWrkP = pipe1_result.TotalWrkP + pipe2_result.TotalWrkP;
+                connect_scheme.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH, connect_scheme.TotalWrkP);
+                connect_scheme.UWP = CalculateUWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH);
+                connect_scheme.WP = CalculateWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ);
+
+                connect_scheme.Items = new List<Model.AnaSchemeItem>();
+                if (pipe1_result.Items != null && pipe1_result.Items.Count > 0)
+                    connect_scheme.Items.AddRange(pipe1_result.Items);
+                if (pipe2_result.Items != null && pipe2_result.Items.Count > 0)
+                    connect_scheme.Items.AddRange(pipe2_result.Items);
+
+
+                return connect_scheme;
+            }
+            else
+            {
+                return null;
+            }
+        }
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\346\263\260\345\222\214\346\263\265\347\253\231/OptAna.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\346\263\260\345\222\214\346\263\265\347\253\231/OptAna.cs"
new file mode 100644
index 0000000..96a8635
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\346\263\260\345\222\214\346\263\265\347\253\231/OptAna.cs"
@@ -0,0 +1,483 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Numerics;
+using System.Text;
+using System.Threading.Tasks;
+using IStation.Calculation.DispatchAna.Model;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 娉板拰娉电珯璋冨害鏂规璁$畻鍣�(鏈�浼樻柟妗�)
+    /// </summary>
+    public class Calculator_OptAna_SHYS_娉板拰娉电珯: CalculatorBase_SHYS_娉板拰娉电珯, IOptAnaCalc
+    {
+        /// <summary>
+        /// /
+        /// </summary>
+        public Calculator_OptAna_SHYS_娉板拰娉电珯()
+        {
+ 
+        }
+        List<Model.MachineDetail> _allMachineList = null;
+
+        #region 璁$畻 鏈�浼樻柟妗� 
+        /// <summary>
+        /// 璁$畻 鏈�浼樻柟妗� 
+        /// </summary>
+        /// <param name="complex_request_paras"></param>
+        /// <param name="eta_ana_records"></param>
+        /// <param name="machine_run_status"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        public List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcSchemes(
+            IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+            IStation.Calculation.DispatchAna.Model.EtaAnaRecord4Station eta_ana_records,
+            IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
+            out string error_info)
+        {
+            this._corpID = complex_request_paras.CorpID;
+            this._stationID = complex_request_paras.StationID;
+
+            var isUsePress = complex_request_paras.PressValueType == Model.RequestParasComplex.ePressValueType.鍘嬪姏 ? true : false;
+
+            if (isUsePress)
+                return CalcSchemes鍘嬪姏(complex_request_paras, machine_run_status, out error_info);
+            else
+                return CalcSchemes鎵▼(complex_request_paras, machine_run_status, out error_info);
+        }
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="complex_request_paras"></param>
+        /// <param name="machine_run_status"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        protected override  List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcSchemes鍘嬪姏(
+                    IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+                    IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
+                    out string error_info)
+        {
+            error_info = "";
+            if (complex_request_paras == null)
+            {
+                error_info = "ERROR 30";
+                return null;
+            }
+            if (complex_request_paras.OutletPipePara == null ||
+                complex_request_paras.OutletPipePara.Count < 2)
+            {
+                error_info = "ERROR 35,娉板拰娉电珯闇�瑕佷袱涓璺殑娴侀噺";
+                return null;
+            }
+
+            double pipe1_TargetFlow = complex_request_paras.OutletPipePara[0].TargetFlow;
+            double pipe2_TargetFlow = complex_request_paras.OutletPipePara[1].TargetFlow;
+            if (pipe1_TargetFlow < 50 && pipe2_TargetFlow < 50)
+            {//閮藉叧鏈�
+               error_info = "ERROR 35,娉板拰娉电珯闇�瑕佷袱涓璺殑娴侀噺d閮戒负0";
+                return null;
+            }
+
+            double pipe1_TargetPess = complex_request_paras.OutletPipePara[0].TargetPress;
+            double pipe2_TargetPess = complex_request_paras.OutletPipePara[1].TargetPress;
+            if (pipe1_TargetFlow > 50)
+            {
+                if (pipe1_TargetPess < 0.01  )
+                {
+                    error_info = "ERROR 35,娉板拰娉电珯闇�瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe2_TargetFlow > 50)
+            {
+                if (pipe2_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,娉板拰娉电珯闇�瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            double inlet_press = 0;//鍘嬪姏
+            if (complex_request_paras.InletPipePara != null && complex_request_paras.InletPipePara.Count > 0)
+            {
+                inlet_press = complex_request_paras.InletPipePara.First().Value;
+            }
+ 
+
+            bool isOpenMiddleValve46 = false;
+            bool isOpenMiddleValve67 = true;
+            if (pipe2_TargetFlow > 18000)
+            {
+                isOpenMiddleValve46 = true;
+                isOpenMiddleValve67 = true;
+            }
+            else if (pipe2_TargetFlow > 9000)
+            {
+                isOpenMiddleValve46 = false;
+                isOpenMiddleValve67 = true;
+            }
+            else
+            {
+                isOpenMiddleValve46 = true;
+                isOpenMiddleValve67 = false;
+            }
+
+ 
+            //鏈烘车淇℃伅
+            if(_allMachineList == null)
+            {
+                if (!BuildMachineList(
+                    out _allMachineList,
+                    out error_info))
+                {
+                    error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
+                    return null;
+                }
+            }
+
+
+            if (isOpenMiddleValve46 && isOpenMiddleValve67)//闃�闂ㄥ紑鐨勭姸鎬佷笅 涓ょ鐩歌繛鏁版嵁鐩稿姞姹傚钩鍧囧��
+            {
+                #region 闃�闂ㄥ紑鐨勭姸鎬佷笅
+                double outlet_press = 0;
+                if (pipe1_TargetPess > 0.1 && pipe2_TargetPess > 0.1)
+                {
+                    outlet_press = (pipe1_TargetPess + pipe2_TargetPess) / 2;
+                }
+                else
+                {
+                    if (pipe1_TargetPess > 0.01)
+                        outlet_press = pipe1_TargetPess;
+                    else if (pipe2_TargetPess > 0.01)
+                        outlet_press = pipe2_TargetPess;
+                    else
+                        return null;
+                }
+
+                if (pipe1_TargetPess < 0.01 || pipe2_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 135,娉板拰娉电珯闃�闂ㄦ墦寮�鐨勭姸鎬佷笅, 鏈変竴涓璺帇鍔涙湭璧嬪��";
+                    return default;
+                }
+
+                Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe_helper = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+                calc_pipe_helper.InitialParas(
+                    pipe1_TargetFlow + pipe2_TargetFlow,
+                    inlet_press, false  ,
+                    outlet_press,false ,
+                    null, null,
+                    _allMachineList, machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                return calc_pipe_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                #endregion
+            }
+            else
+            {
+                List<long> pipe1_machineIds = new List<long>() { machine_ids[0], machine_ids[1], machine_ids[2], machine_ids[3], machine_ids[5] };
+                List<long> pipe2_machineIds = new List<long>() { machine_ids[6] };
+
+                if (isOpenMiddleValve46 && !isOpenMiddleValve67)
+                {//7 骞惰仈  12346骞惰仈
+                    pipe1_machineIds = new List<long>() { machine_ids[0], machine_ids[1], machine_ids[2], machine_ids[3], machine_ids[5] };
+                    pipe2_machineIds = new List<long>() { machine_ids[6] };
+                }
+                else if (!isOpenMiddleValve46 && isOpenMiddleValve67)
+                {//67 骞惰仈  1234骞惰仈 
+                    pipe1_machineIds = new List<long>() { machine_ids[0], machine_ids[1], machine_ids[2], machine_ids[3] };
+                    pipe2_machineIds = new List<long>() { machine_ids[5], machine_ids[6] };
+                }
+                else if (!isOpenMiddleValve46 && !isOpenMiddleValve67)
+                {//7 骞惰仈  1234骞惰仈
+                    pipe1_machineIds = new List<long>() { machine_ids[0], machine_ids[1], machine_ids[2], machine_ids[3] };
+                    pipe2_machineIds = new List<long>() { machine_ids[6] };
+                }
+                #region  
+
+
+
+                Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper =
+         new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+                Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe2_helper =
+          new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+                if (pipe2_TargetFlow < 50)
+                {//鍙紑涓�鍙锋车浜屽彿娉�
+                    calc_pipe1_helper.InitialParas(
+                        pipe1_TargetFlow,
+                        inlet_press, false  ,
+                        pipe1_TargetPess,false ,
+                        null, null,
+                        (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+                       machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                    return calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                }
+                else if (pipe1_TargetFlow < 50)
+                {
+                    calc_pipe2_helper.InitialParas(
+                        pipe2_TargetFlow,
+                        inlet_press, false  ,
+                        pipe2_TargetPess,false ,
+                        null, null,
+                     (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+                     machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                    return calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                }
+                calc_pipe1_helper.InitialParas(
+                    pipe1_TargetFlow,
+                    inlet_press, false ,
+                    pipe1_TargetPess,false,
+                  null, null,
+                 (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+                machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+                var pipe1_result = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                if (pipe1_result == null || pipe1_result.Count() == 0)
+                {
+                    error_info = String.Format("绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,杩涘彛鍘嬪姏:{0}MPa,鍑哄彛鍘嬪姏:{1}MPa,娴侀噺瑕佹眰:{2}",
+                 inlet_press, pipe1_TargetPess, pipe1_TargetFlow);
+                    return null;
+                }
+
+                calc_pipe2_helper.InitialParas(
+                    pipe2_TargetFlow,
+                    inlet_press, false  ,
+                    pipe2_TargetPess,false  ,
+                    null, null,
+                 (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+                machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                var pipe2_result = calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                if (pipe2_result == null || pipe2_result.Count() == 0)
+                {
+                    error_info = String.Format("绠¤矾浜岃皟搴︽柟妗堟棤娉曡绠�,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,杩涘彛鍘嬪姏:{0}MPa,鍑哄彛鍘嬪姏:{1}MPa,娴侀噺瑕佹眰:{2}",
+                 inlet_press, pipe2_TargetPess, pipe2_TargetFlow);
+                    return null;
+                }
+
+                var result_1 = pipe1_result.First();
+                var result_2 = pipe2_result.First();
+
+                var plan = new Model.AnaScheme();
+                plan.ID = 1;
+                plan.TotalWrkQ = result_1.TotalWrkQ + result_2.TotalWrkQ;
+                plan.TotalWrkH = result_1.TotalWrkH + result_2.TotalWrkH;
+                plan.TotalWrkP = result_1.TotalWrkP + result_2.TotalWrkP;
+                plan.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(plan.TotalWrkQ, plan.TotalWrkH, plan.TotalWrkP);
+                plan.UWP = CalculateUWP(plan.TotalWrkP, plan.TotalWrkQ, plan.TotalWrkH);
+                plan.WP = CalculateWP(plan.TotalWrkP, plan.TotalWrkQ);
+
+                plan.Items = new List<Model.AnaSchemeItem>();
+                if (result_1.Items != null && result_1.Items.Count > 0)
+                    plan.Items.AddRange(result_1.Items);
+                if (result_2.Items != null && result_2.Items.Count > 0)
+                    plan.Items.AddRange(result_2.Items);
+
+
+                return new List<Model.AnaScheme>() { plan };
+                #endregion
+            }
+        }
+
+
+        private List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcSchemes鎵▼(
+                    IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+                    IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
+                    out string error_info)
+        {
+            error_info = "";
+            if (complex_request_paras == null)
+            {
+                error_info = "ERROR 30";
+                return null;
+            }
+            if (complex_request_paras.OutletPipePara == null ||
+                complex_request_paras.OutletPipePara.Count < 2)
+            {
+                error_info = "ERROR 35,娉板拰娉电珯闇�瑕佷袱涓璺殑娴侀噺";
+                return null;
+            }
+
+            double pipe1_TargetFlow = complex_request_paras.OutletPipePara[0].TargetFlow;
+            double pipe2_TargetFlow = complex_request_paras.OutletPipePara[1].TargetFlow;
+            if (pipe1_TargetFlow < 50 && pipe2_TargetFlow < 50)
+            {//閮藉叧鏈�
+                error_info = "ERROR 35,娉板拰娉电珯闇�瑕佷袱涓璺殑娴侀噺d閮戒负0";
+                return null;
+            }
+
+            double pipe1_TargetHead = complex_request_paras.OutletPipePara[0].TargetPress;
+            double pipe2_TargetHead = complex_request_paras.OutletPipePara[1].TargetPress;
+
+            if (pipe1_TargetFlow > 50)
+            {
+                if (pipe1_TargetHead < 0.01)
+                {
+                    error_info = "ERROR 35,娉板拰娉电珯闇�瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe2_TargetFlow > 50)
+            {
+                if (pipe2_TargetHead < 0.01)
+                {
+                    error_info = "ERROR 35,娉板拰娉电珯闇�瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+
+            bool isOpenMiddleValve46 = false;
+            bool isOpenMiddleValve67 = true;
+            if (pipe2_TargetFlow > 18000)
+            {
+                isOpenMiddleValve46 = true;
+                isOpenMiddleValve67 = true;
+            }
+            else if (pipe2_TargetFlow > 9000)
+            {
+                isOpenMiddleValve46 = false;
+                isOpenMiddleValve67 = true;
+            }
+            else
+            {
+                isOpenMiddleValve46 = true;
+                isOpenMiddleValve67 = false;
+            }
+
+            //鏈烘车淇℃伅
+            if (_allMachineList == null)
+            {
+                if (!BuildMachineList(
+                out _allMachineList,
+                out error_info))
+                {
+                    error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
+                    return null;
+                }
+            }
+
+            if (isOpenMiddleValve46 && isOpenMiddleValve67)//闃�闂ㄥ紑鐨勭姸鎬佷笅 涓ょ鐩歌繛鏁版嵁鐩稿姞姹傚钩鍧囧��
+            {
+                #region 闃�闂ㄥ紑鐨勭姸鎬佷笅
+                if (pipe1_TargetHead < 0.01 || pipe2_TargetHead < 0.01)
+                {
+                    error_info = "ERROR 135,娉板拰娉电珯闃�闂ㄦ墦寮�鐨勭姸鎬佷笅, 鏈変竴涓璺帇鍔涙湭璧嬪��";
+                    return default;
+                }
+                Common.DispatchAnaGeneralHelper鎵▼ calc_pipe_helper = new Common.DispatchAnaGeneralHelper鎵▼();
+                calc_pipe_helper.InitialParas(
+                   pipe1_TargetFlow + pipe2_TargetFlow,
+                  (pipe1_TargetHead + pipe2_TargetHead) / 2,
+                  null, null,
+                  _allMachineList, machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                return calc_pipe_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                #endregion
+            }
+            else //闃�闂ㄥ叧鐨勭姸鎬佷笅  涓ょ鐩歌繛鏁版嵁鐩稿姞
+            {
+                List<long> pipe1_machineIds = new List<long>() { machine_ids[0], machine_ids[1], machine_ids[2], machine_ids[3], machine_ids[5] };
+                List<long> pipe2_machineIds = new List<long>() { machine_ids[6] };
+
+                if (isOpenMiddleValve46 && !isOpenMiddleValve67)
+                {//7 骞惰仈  12346骞惰仈
+                    pipe1_machineIds = new List<long>() { machine_ids[0], machine_ids[1], machine_ids[2], machine_ids[3], machine_ids[5] };
+                    pipe2_machineIds = new List<long>() { machine_ids[6] };
+                }
+                else if (!isOpenMiddleValve46 && isOpenMiddleValve67)
+                {//67 骞惰仈  1234骞惰仈
+                    pipe1_machineIds = new List<long>() { machine_ids[0], machine_ids[1], machine_ids[2], machine_ids[3] };
+                    pipe2_machineIds = new List<long>() { machine_ids[5], machine_ids[6] };
+                }
+                else if (!isOpenMiddleValve46 && !isOpenMiddleValve67)
+                {//7 骞惰仈  1234骞惰仈
+                    pipe1_machineIds = new List<long>() { machine_ids[0], machine_ids[1], machine_ids[2], machine_ids[3] };
+                    pipe2_machineIds = new List<long>() { machine_ids[6] };
+                }
+
+                #region 涓棿闃�闂ㄥ叧鐨勭姸鎬佷笅
+
+
+
+                Common.DispatchAnaGeneralHelper鎵▼ calc_pipe1_helper =
+         new Common.DispatchAnaGeneralHelper鎵▼();
+
+                Common.DispatchAnaGeneralHelper鎵▼ calc_pipe2_helper =
+          new Common.DispatchAnaGeneralHelper鎵▼();
+
+                if (pipe2_TargetFlow < 50)
+                {//鍙紑涓�鍙锋车浜屽彿娉�
+                    calc_pipe1_helper.InitialParas(
+                        pipe1_TargetFlow,
+                        pipe1_TargetHead,
+                        null, null,
+                        (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+                    machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                    return calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                }
+                else if (pipe1_TargetFlow < 50)
+                {
+                    calc_pipe2_helper.InitialParas(
+                        pipe2_TargetFlow,
+                        pipe2_TargetHead,
+                        null, null,
+                     (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+                    machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                    return calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                }
+                calc_pipe1_helper.InitialParas(
+                    pipe1_TargetFlow,
+                    pipe1_TargetHead,
+                  null, null,
+                 (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+               machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+                var pipe1_result = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+
+
+                calc_pipe2_helper.InitialParas(
+                    pipe2_TargetFlow,
+                    pipe2_TargetHead,
+                    null, null,
+                 (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+                 machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                var pipe2_result = calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+
+                if (pipe1_result == null || pipe2_result == null)
+                    return default;
+
+                var result_1 = pipe1_result.First();
+                var result_2 = pipe2_result.First();
+
+                var plan = new Model.AnaScheme();
+                plan.ID = 1;
+                plan.TotalWrkQ = result_1.TotalWrkQ + result_2.TotalWrkQ;
+                plan.TotalWrkH = (result_1.TotalWrkH + result_2.TotalWrkH)/2;
+                plan.TotalWrkP = result_1.TotalWrkP + result_2.TotalWrkP;
+                plan.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(plan.TotalWrkQ, plan.TotalWrkH, plan.TotalWrkP);
+                plan.UWP = CalculateUWP(plan.TotalWrkP, plan.TotalWrkQ, plan.TotalWrkH);
+                plan.WP = CalculateWP(plan.TotalWrkP, plan.TotalWrkQ);
+
+                plan.Items = new List<Model.AnaSchemeItem>();
+                if (result_1.Items != null && result_1.Items.Count > 0)
+                    plan.Items.AddRange(result_1.Items);
+                if (result_2.Items != null && result_2.Items.Count > 0)
+                    plan.Items.AddRange(result_2.Items);
+
+
+                return new List<Model.AnaScheme>() { plan };
+                #endregion
+            }
+        }
+
+        #endregion
+
+ 
+
+
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\207\221\346\265\267\346\263\265\347\253\231/Base.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\207\221\346\265\267\346\263\265\347\253\231/Base.cs"
new file mode 100644
index 0000000..1ad9787
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\207\221\346\265\267\346\263\265\347\253\231/Base.cs"
@@ -0,0 +1,90 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 閲戞捣娉电珯璋冨害鏂规璁$畻鍣�
+    /// </summary>
+    public class CalculatorBase_SHYS_閲戞捣娉电珯 : CalculatorOptAnaBase
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        protected List<long> machine_ids = new List<long>() { 199,202,208,211,214,217,220,223,226,229 };
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected List<long> pipe1_machineIds = null;//1鍙锋车锛�2鍙锋车,3鍙锋车
+        /// <summary>
+        /// 
+        /// </summary>
+        protected List<long> pipe2_machineIds = null;//锛�4鍙锋车 锛�5鍙锋车 锛�6鍙锋车  
+        /// <summary>
+        /// 
+        /// </summary>
+        protected List<long> pipe3_machineIds = null;//锛�7鍙锋车 锛�8鍙锋车锛� 9鍙锋车 锛�10鍙锋车 
+        /// <summary>
+        /// 
+        /// </summary>
+        static public  long _monitor_id_涓�鍙疯繘鍙g_鍘嬪姏 = 611;
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_浜屽彿杩涘彛绠鍘嬪姏 = 613;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_涓�鍙疯繘鍙g_娴侀噺 = 612;
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_浜屽彿杩涘彛绠娴侀噺 = 614;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_涓�鍙风鍘嬪姏_鍗楁眹1 = 615;
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_涓�鍙风娴侀噺_鍗楁眹1 = 616;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_浜屽彿绠″帇鍔沖鍗楁眹2 = 618;
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_浜屽彿绠℃祦閲廮鍗楁眹2 = 619;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_涓夊彿绠″帇鍔沖宸濇矙 = 621;
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_涓夊彿绠℃祦閲廮宸濇矙 = 622;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public CalculatorBase_SHYS_閲戞捣娉电珯()
+        {
+            pipe1_machineIds = new List<long>() { machine_ids[0], machine_ids[1], machine_ids[2] };//1鍙锋车锛�2鍙锋车,3鍙锋车
+            pipe2_machineIds = new List<long>() { machine_ids[3], machine_ids[4], machine_ids[5] };//锛�4鍙锋车 锛�5鍙锋车 锛�6鍙锋车   
+            pipe3_machineIds = new List<long>() { machine_ids[6], machine_ids[7], machine_ids[8], machine_ids[9] };//锛�7鍙锋车 锛�8鍙锋车 锛�9鍙锋车 锛�10鍙锋车   
+
+            _corpID = 4;
+            _stationID = 10;
+        }
+ 
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\207\221\346\265\267\346\263\265\347\253\231/Current.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\207\221\346\265\267\346\263\265\347\253\231/Current.cs"
new file mode 100644
index 0000000..641523e
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\207\221\346\265\267\346\263\265\347\253\231/Current.cs"
@@ -0,0 +1,81 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 闀垮叴娉电珯璋冨害鏂规璁$畻鍣�
+    /// </summary>
+    internal class Calculator_Current_SHYS_閲戞捣娉电珯: CalculatorBase_SHYS_閲戞捣娉电珯, IGetCurrentRecord
+    {
+        public Calculator_Current_SHYS_閲戞捣娉电珯()
+        {
+ 
+        }
+        /// <summary>
+        /// 鑾峰彇褰撳墠璋冨害淇℃伅
+        /// </summary>
+        /// <param name="CorpID"></param>
+        /// <param name="StationID"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        public Model.CurrentRecordBundle GetCurrentRecord(long CorpID, long StationID, out string error_info)
+        {
+            error_info = null;
+            List<long> monitor_ids = new List<long>() {
+                _monitor_id_涓�鍙疯繘鍙g_鍘嬪姏,_monitor_id_涓�鍙疯繘鍙g_娴侀噺,
+                _monitor_id_浜屽彿杩涘彛绠鍘嬪姏, _monitor_id_浜屽彿杩涘彛绠娴侀噺,
+                _monitor_id_涓�鍙风鍘嬪姏_鍗楁眹1, _monitor_id_浜屽彿绠″帇鍔沖鍗楁眹2, 
+                _monitor_id_涓�鍙风娴侀噺_鍗楁眹1, _monitor_id_浜屽彿绠℃祦閲廮鍗楁眹2 ,
+                _monitor_id_涓夊彿绠″帇鍔沖宸濇矙, _monitor_id_涓夊彿绠℃祦閲廮宸濇矙};
+            var monitor_records = new Service.MonitorRecord().GetLastRecord(_corpID, monitor_ids);
+
+            Model.CurrentRecordBundle bundle = new Model.CurrentRecordBundle();
+
+            bundle.WaterLevelList = new List<Model.CurrentRecordBundle.RecordValue>();
+
+            var press_涓�鍙疯繘鍙g = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓�鍙疯繘鍙g_鍘嬪姏);
+            if (press_涓�鍙疯繘鍙g != null)
+            {
+                bundle.WaterLevelList.Add(new Model.CurrentRecordBundle.RecordValue("涓�鍙疯繘鍙g鍘嬪姏", press_涓�鍙疯繘鍙g, 4));
+            }
+            var press_浜屽彿杩涘彛绠� = monitor_records.Find(x => x.MonitorPointID == _monitor_id_浜屽彿杩涘彛绠鍘嬪姏);
+            if (press_浜屽彿杩涘彛绠� != null)
+            {
+                bundle.WaterLevelList.Add(new Model.CurrentRecordBundle.RecordValue("浜屽彿杩涘彛绠″帇鍔�", press_浜屽彿杩涘彛绠�, 4));
+            }
+
+            var pipe_press1 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓�鍙风鍘嬪姏_鍗楁眹1);
+            var pipe_press2 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_浜屽彿绠″帇鍔沖鍗楁眹2);
+            var pipe_press3 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓夊彿绠″帇鍔沖宸濇矙);
+
+            if (pipe_press1 != null && pipe_press2 != null && pipe_press3 != null)
+            {
+                bundle.PressList = new List<Model.CurrentRecordBundle.RecordValue>();
+                bundle.PressList.Add(new Model.CurrentRecordBundle.RecordValue("涓�鍙峰嚭鍙g", pipe_press1, 4));
+                bundle.PressList.Add(new Model.CurrentRecordBundle.RecordValue("浜屽彿鍑哄彛绠�", pipe_press2, 4));
+                bundle.PressList.Add(new Model.CurrentRecordBundle.RecordValue("涓夊彿鍑哄彛绠�", pipe_press3, 4));
+            }
+
+            var pipe_flow1 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓�鍙风娴侀噺_鍗楁眹1);
+            var pipe_flow2 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_浜屽彿绠℃祦閲廮鍗楁眹2);
+            var pipe_flow3 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓夊彿绠℃祦閲廮宸濇矙);
+            if (pipe_flow1 != null && pipe_flow2 != null && pipe_flow3 != null)
+            {
+                bundle.FlowList = new List<Model.CurrentRecordBundle.RecordValue>();
+                bundle.FlowList.Add(new Model.CurrentRecordBundle.RecordValue("涓�鍙峰嚭鍙g", pipe_flow1, 0));
+                bundle.FlowList.Add(new Model.CurrentRecordBundle.RecordValue("浜屽彿鍑哄彛绠�", pipe_flow2, 0));
+                bundle.FlowList.Add(new Model.CurrentRecordBundle.RecordValue("涓夊彿鍑哄彛绠�", pipe_flow3, 0));
+            }
+
+
+            return bundle;
+        }
+
+
+
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\207\221\346\265\267\346\263\265\347\253\231/KeepStatus.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\207\221\346\265\267\346\263\265\347\253\231/KeepStatus.cs"
new file mode 100644
index 0000000..8712dce
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\207\221\346\265\267\346\263\265\347\253\231/KeepStatus.cs"
@@ -0,0 +1,231 @@
+锘縰sing IStation.Calculation.DispatchAna.Model;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 闀垮叴娉电珯璋冨害鏂规璁$畻鍣�
+    /// </summary>
+    internal class Calculator_KeepStatus_SHYS_閲戞捣娉电珯 : CalculatorBase_SHYS_閲戞捣娉电珯, IKeepStatusCalc
+    {
+        public Calculator_KeepStatus_SHYS_閲戞捣娉电珯()
+        {
+
+        }
+        Model.RequestParasComplex _request_paras;
+        List<long> _open_machine_IdList ;
+        /// <summary>
+        /// 鍒濆鍖栧弬鏁�
+        /// </summary>
+        /// <param name="complex_request_paras"></param>
+        /// <param name="eta_ana_records"></param>
+        /// <param name="open_machine_ids"></param>
+        public  void IntialRequest(
+            IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+            IStation.Calculation.DispatchAna.Model.EtaAnaRecord4Station eta_ana_records,
+            List<long> open_machine_ids)
+        {
+            this._request_paras = complex_request_paras;
+            this._open_machine_IdList = open_machine_ids;
+        }
+
+
+        List<Model.MachineDetail> _allMachineList = null;
+
+        /// <summary>
+        /// 璁$畻淇濇寔褰撳墠寮�鏈虹姸鎬�
+        /// </summary> 
+        /// <param name="error_info">閿欒淇℃伅</param>
+        /// <returns></returns>
+        public Model.AnaScheme Calc(out string error_info)
+        {
+            if (_open_machine_IdList == null || _open_machine_IdList.Count == 0)
+            {
+                error_info = "ERROR 25";
+                return null;
+            }
+            error_info = null;
+            if (_request_paras == null)
+            {
+                error_info = "ERROR 30";
+                return null;
+            }
+
+            if (_request_paras.OutletPipePara == null || _request_paras.OutletPipePara.Count < 3)
+            {
+                error_info = "ERROR 35";
+                return null;
+            }
+            double pipe1_TargetFlow = _request_paras.OutletPipePara[0].TargetFlow;
+            double pipe2_TargetFlow = _request_paras.OutletPipePara[1].TargetFlow;
+            double pipe3_TargetFlow = _request_paras.OutletPipePara[2].TargetFlow;
+            if (pipe1_TargetFlow < 10 && pipe2_TargetFlow < 10 && pipe3_TargetFlow < 10)
+            {
+                return default;
+            }
+
+            double pipe1_TargetPess = _request_paras.OutletPipePara[0].TargetPress;
+            double pipe2_TargetPess = _request_paras.OutletPipePara[1].TargetPress;
+            double pipe3_TargetPess = _request_paras.OutletPipePara[2].TargetPress;
+            if (pipe1_TargetFlow > 50)
+            {
+                if (pipe1_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,閲戞捣娉电珯闇�瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe2_TargetFlow > 50)
+            {
+                if (pipe2_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,閲戞捣娉电珯闇�瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe3_TargetFlow > 50)
+            {
+                if (pipe3_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,閲戞捣娉电珯闇�瑕佷笁鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+
+            double inlet_press = 0;//杩涘彛鍘嬪姏(鏈変袱涓繘鍙e帇鍔�)
+            if (_request_paras.InletPipePara != null && _request_paras.InletPipePara.Count > 0)
+            {
+                if (_request_paras.InletPipePara.Count == 1)
+                {
+                    inlet_press = _request_paras.InletPipePara[0].Value;
+                }
+                else 銆�
+                {//鐢ㄥ钩鍧囧��
+                    inlet_press = _request_paras.InletPipePara[0].Value+
+                        _request_paras.InletPipePara[1].Value;
+                    inlet_press = inlet_press / 2;
+                }        
+            }
+            double water_level = inlet_press * 100;
+
+
+            //鏈烘车淇℃伅
+            if (_allMachineList == null)
+            {
+                if (!BuildMachineList(
+                    out _allMachineList,
+                    out error_info))
+                {
+                    error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
+                    return null;
+                }
+            }
+
+
+
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe2_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe3_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+
+            double totalQ = 0, totalH = 0, totalP = 0;
+            int pipe_count = 0;
+
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe1_result = null;
+            if (pipe1_TargetFlow > 50)
+            {
+                calc_pipe1_helper.InitialParas(
+                 pipe1_TargetFlow,
+                 water_level,true ,
+                 pipe1_TargetPess,false ,
+                  null, null,
+                 (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(), null);
+                pipe1_result = calc_pipe1_helper.CalcKeepStatus(_open_machine_IdList);
+                if (pipe1_result == null)
+                {
+                    error_info = "绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�";
+                    return null;
+                }
+                totalQ += pipe1_result.TotalWrkQ;
+                totalP += pipe1_result.TotalWrkP;
+                totalH += pipe1_result.TotalWrkH;
+                pipe_count++;
+            }
+
+
+
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe2_result = null;
+            if (pipe2_TargetFlow > 50)
+            {
+                calc_pipe2_helper.InitialParas(
+                 pipe2_TargetFlow,
+                 water_level,true ,
+                 pipe2_TargetPess, false ,
+                  null, null,
+                 (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(), null);
+                pipe2_result = calc_pipe2_helper.CalcKeepStatus(_open_machine_IdList);
+                if (pipe2_result == null)
+                {
+                    error_info = "绠¤矾2璋冨害鏂规鏃犳硶璁$畻璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�";
+                    return null;
+                }
+                totalQ += pipe2_result.TotalWrkQ;
+                totalP += pipe2_result.TotalWrkP;
+                totalH += pipe2_result.TotalWrkH;
+                pipe_count++;
+            }
+
+
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe3_result = null;
+            if (pipe3_TargetFlow > 50)
+            {
+                calc_pipe3_helper.InitialParas(
+                 pipe3_TargetFlow,
+                 water_level, true,
+                 pipe3_TargetPess, false,
+                  null, null,
+                 (from x in _allMachineList where pipe3_machineIds.Contains(x.MachineID) select x).ToList(), null);
+                pipe3_result = calc_pipe3_helper.CalcKeepStatus(_open_machine_IdList);
+                if (pipe3_result == null)
+                {
+                    error_info = "绠¤矾3璋冨害鏂规鏃犳硶璁$畻璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�";
+                    return null;
+                }
+                totalQ += pipe3_result.TotalWrkQ;
+                totalP += pipe3_result.TotalWrkP;
+                totalH += pipe3_result.TotalWrkH;
+                pipe_count++;
+            }
+
+            var connect_scheme = new Model.AnaScheme();
+            connect_scheme.ID = 1;
+            connect_scheme.TotalWrkQ = Math.Round(totalQ, 1);
+            connect_scheme.TotalWrkH = Math.Round(totalH / totalH,2);
+            connect_scheme.TotalWrkP = Math.Round(totalP, 1);
+            connect_scheme.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH, connect_scheme.TotalWrkP);
+            connect_scheme.UWP = CalculateUWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH);
+            connect_scheme.WP = CalculateWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ);
+
+            connect_scheme.Items = new List<Model.AnaSchemeItem>();
+            if (pipe1_result.Items != null && pipe1_result.Items.Count > 0)
+                connect_scheme.Items.AddRange(pipe1_result.Items);
+            if (pipe2_result.Items != null && pipe2_result.Items.Count > 0)
+                connect_scheme.Items.AddRange(pipe2_result.Items);
+            if (pipe3_result.Items != null && pipe3_result.Items.Count > 0)
+                connect_scheme.Items.AddRange(pipe3_result.Items);
+
+            return connect_scheme;
+            銆�
+        }
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\207\221\346\265\267\346\263\265\347\253\231/OptAna.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\207\221\346\265\267\346\263\265\347\253\231/OptAna.cs"
new file mode 100644
index 0000000..4ae1b3e
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\207\221\346\265\267\346\263\265\347\253\231/OptAna.cs"
@@ -0,0 +1,519 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Numerics;
+using System.Text;
+using System.Threading.Tasks;
+using IStation.Calculation.DispatchAna.Model;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 閲戞捣娉电珯璋冨害鏂规璁$畻鍣�(鏈�浼樻柟妗�)
+    /// </summary>
+    public  class Calculator_OptAna_SHYS_閲戞捣娉电珯: CalculatorBase_SHYS_閲戞捣娉电珯, IOptAnaCalc
+    {
+        List<Model.MachineDetail> _allMachineList = null;
+ 
+
+ 
+       
+
+        #region 璁$畻 鏈�浼樻柟妗� 
+        /// <summary>
+        /// 璁$畻 鏈�浼樻柟妗� 
+        /// </summary>
+        /// <param name="complex_request_paras"></param>
+        /// <param name="eta_ana_records"></param>
+        /// <param name="machine_run_status"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        public List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcSchemes(
+            IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+            IStation.Calculation.DispatchAna.Model.EtaAnaRecord4Station eta_ana_records,
+            IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
+            out string error_info)
+        {
+            this._corpID = complex_request_paras.CorpID;
+            this._stationID = complex_request_paras.StationID;
+
+ 
+
+
+            var isUsePress = complex_request_paras.PressValueType == Model.RequestParasComplex.ePressValueType.鍘嬪姏 ? true : false;
+
+     
+            if (isUsePress)
+                return CalcSchemes鍘嬪姏(complex_request_paras, machine_run_status, out error_info);
+            else
+                return CalcSchemes鎵▼(complex_request_paras, machine_run_status, out error_info);
+        }
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="complex_request_paras"></param>
+        /// <param name="machine_run_status"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        protected override  List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcSchemes鍘嬪姏(
+                    IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+                    IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
+                    out string error_info)
+        {
+            error_info = "";
+            if (complex_request_paras == null)
+            {
+                error_info = "ERROR 30";
+                return null;
+            }
+            if (complex_request_paras.OutletPipePara == null ||
+                complex_request_paras.OutletPipePara.Count < 3)
+            {
+                error_info = "ERROR 35,閲戞捣娉电珯闇�瑕�3涓嚭鍙g璺殑娴侀噺";
+                return null;
+            }
+            double inlet_press = 0;//杩涘彛鍘嬪姏(鏈変袱涓繘鍙e帇鍔�)
+            if (complex_request_paras.InletPipePara != null && complex_request_paras.InletPipePara.Count > 0)
+            {
+                if (complex_request_paras.InletPipePara.Count == 1)
+                {
+                    inlet_press = complex_request_paras.InletPipePara[0].Value;
+                }
+                else
+                {//鐢ㄥ钩鍧囧��
+                    inlet_press = complex_request_paras.InletPipePara[0].Value +
+                        complex_request_paras.InletPipePara[1].Value;
+                    inlet_press = inlet_press / 2;
+                }
+            }
+            double water_level = inlet_press * 100;
+
+
+            double pipe1_TargetFlow = complex_request_paras.OutletPipePara[0].TargetFlow;
+            double pipe2_TargetFlow = complex_request_paras.OutletPipePara[1].TargetFlow;
+            double pipe3_TargetFlow = complex_request_paras.OutletPipePara[2].TargetFlow;
+            if (pipe1_TargetFlow < 50 && pipe2_TargetFlow < 50 && pipe3_TargetFlow < 50)
+            {//閮藉叧鏈�
+                error_info = "ERROR 35,閲戞捣娉电珯闇�瑕�3涓嚭鍙g璺殑娴侀噺閮戒负0";
+                return null;
+            }
+
+            double pipe1_TargetPess = complex_request_paras.OutletPipePara[0].TargetPress;
+            double pipe2_TargetPess = complex_request_paras.OutletPipePara[1].TargetPress;
+            double pipe3_TargetPess = complex_request_paras.OutletPipePara[2].TargetPress;
+            if (pipe1_TargetFlow > 50)
+            {
+                if (pipe1_TargetPess < inlet_press+0.01)
+                {
+                    error_info = "ERROR 35,閲戞捣娉电珯闇�瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe2_TargetFlow > 50)
+            {
+                if (pipe2_TargetPess < inlet_press + 0.01)
+                {
+                    error_info = "ERROR 35,閲戞捣娉电珯闇�瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe3_TargetFlow > 50)
+            {
+                if (pipe3_TargetPess < inlet_press + 0.01)
+                {
+                    error_info = "ERROR 35,閲戞捣娉电珯闇�瑕佷笁鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+
+
+
+
+
+
+            //鏈烘车淇℃伅
+            if (_allMachineList == null)
+            {
+                if (!BuildMachineList(
+                    out _allMachineList,
+                    out error_info))
+                {
+                    error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
+                    return null;
+                }
+            }
+
+
+
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe2_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe3_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+
+            double totalQ = 0, totalH = 0, totalP = 0;
+            int pipe_count = 0;
+
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe1_result = null;
+            List<IStation.Calculation.DispatchAna.Model.AnaScheme> pipe1_results = null;
+            if (pipe1_TargetFlow > 50)
+            {
+                calc_pipe1_helper.InitialParas(
+                pipe1_TargetFlow,
+                water_level,true,
+                pipe1_TargetPess,false,
+              null, null,
+             (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+            machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+                pipe1_results = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                if (pipe1_results == null || pipe1_results.Count() == 0)
+                {
+                    error_info = String.Format("绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,杩涘彛鍘嬪姏:{0}MPa,鍑哄彛鍘嬪姏:{1}MPa,娴侀噺瑕佹眰:{2}",
+                        Math.Round( inlet_press,4), Math.Round(pipe1_TargetPess,4), pipe1_TargetFlow);
+                    return null;
+                }
+                pipe1_result = pipe1_results[0];
+                totalQ += pipe1_result.TotalWrkQ;
+                totalP += pipe1_result.TotalWrkP;
+                totalH += pipe1_result.TotalWrkH;
+                pipe_count++;
+            }
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe2_result = null;
+            List<IStation.Calculation.DispatchAna.Model.AnaScheme> pipe2_results = null;
+            if (pipe2_TargetFlow > 50)
+            {
+                calc_pipe2_helper.InitialParas(
+                pipe2_TargetFlow,
+                water_level,true ,
+              pipe2_TargetPess,false ,
+              null, null,
+             (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+            machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                pipe2_results = calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                if (pipe2_results == null || pipe2_results.Count() == 0)
+                {
+                    error_info = String.Format("绠¤矾2璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,杩涘彛鍘嬪姏:{0}MPa,鍑哄彛鍘嬪姏:{1}MPa,娴侀噺瑕佹眰:{2}",
+                   Math.Round(inlet_press, 4), Math.Round(pipe2_TargetPess, 4), pipe2_TargetFlow);
+                    return null;
+                }
+                pipe2_result = pipe2_results[0];
+                totalQ += pipe2_result.TotalWrkQ;
+                totalP += pipe2_result.TotalWrkP;
+                totalH += pipe2_result.TotalWrkH;
+                pipe_count++;
+            }
+
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe3_result = null;
+            List<IStation.Calculation.DispatchAna.Model.AnaScheme> pipe3_results = null;
+            if (pipe3_TargetFlow > 50)
+            {
+                calc_pipe3_helper.InitialParas(
+                pipe3_TargetFlow,
+                water_level, true,
+                pipe3_TargetPess,false ,
+                null, null,
+             (from x in _allMachineList where pipe3_machineIds.Contains(x.MachineID) select x).ToList(),
+            machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                pipe3_results = calc_pipe3_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                if (pipe3_results == null || pipe3_results.Count() == 0)
+                {
+                    error_info = String.Format("绠¤矾3璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,杩涘彛鍘嬪姏:{0}MPa,鍑哄彛鍘嬪姏:{1}MPa,娴侀噺瑕佹眰:{2}",
+                        Math.Round(inlet_press, 4), Math.Round(pipe3_TargetPess, 4),  pipe3_TargetFlow);
+                    return null;
+                }
+                pipe3_result = pipe3_results[0];
+                totalQ += pipe3_result.TotalWrkQ;
+                totalP += pipe3_result.TotalWrkP;
+                totalH += pipe3_result.TotalWrkH;
+                pipe_count++;
+            }
+
+            var plan = new Model.AnaScheme();
+            plan.ID = 1;
+            plan.TotalWrkQ = Math.Round(totalQ, 1);
+            plan.TotalWrkH = Math.Round(totalH / totalH, 2);
+            plan.TotalWrkP = Math.Round(totalP, 1);
+            plan.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(plan.TotalWrkQ, plan.TotalWrkH, plan.TotalWrkP);
+            plan.UWP = CalculateUWP(plan.TotalWrkP, plan.TotalWrkQ, plan.TotalWrkH);
+            plan.WP = CalculateWP(plan.TotalWrkP, plan.TotalWrkQ);
+
+            plan.Items = new List<Model.AnaSchemeItem>();
+            if (pipe1_result.Items != null && pipe1_result.Items.Count > 0)
+                plan.Items.AddRange(pipe1_result.Items);
+            if (pipe2_result.Items != null && pipe2_result.Items.Count > 0)
+                plan.Items.AddRange(pipe2_result.Items);
+            if (pipe3_result.Items != null && pipe3_result.Items.Count > 0)
+                plan.Items.AddRange(pipe3_result.Items);
+
+
+            return new List<Model.AnaScheme>() { plan };   
+        }
+
+
+        private List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcSchemes鎵▼(
+                    IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+                    IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
+                    out string error_info)
+        {
+            error_info = "";
+            if (complex_request_paras == null)
+            {
+                error_info = "ERROR 30";
+                return null;
+            }
+            if (complex_request_paras.OutletPipePara == null ||
+                complex_request_paras.OutletPipePara.Count < 2)
+            {
+                error_info = "ERROR 35,閲戞捣娉电珯闇�瑕佷袱涓璺殑娴侀噺";
+                return null;
+            }
+
+            double pipe1_TargetFlow = complex_request_paras.OutletPipePara[0].TargetFlow;
+            double pipe2_TargetFlow = complex_request_paras.OutletPipePara[1].TargetFlow;
+            double pipe3_TargetFlow = complex_request_paras.OutletPipePara[2].TargetFlow;
+            if (pipe1_TargetFlow < 50 && pipe2_TargetFlow < 50 && pipe3_TargetFlow < 50)
+            {//閮藉叧鏈�
+                error_info = "ERROR 35,閲戞捣娉电珯闇�瑕佷袱涓璺殑娴侀噺 閮戒负0";
+                return null;
+            }
+
+            double pipe1_TargetHead = complex_request_paras.OutletPipePara[0].TargetPress;
+            double pipe2_TargetHead = complex_request_paras.OutletPipePara[1].TargetPress;
+            double pipe3_TargetHead = complex_request_paras.OutletPipePara[2].TargetPress;
+            if (pipe1_TargetFlow > 50)
+            {
+                if (pipe1_TargetHead < 0.01)
+                {
+                    error_info = "ERROR 35,閲戞捣娉电珯闇�瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe2_TargetFlow > 50)
+            {
+                if (pipe2_TargetHead < 0.01)
+                {
+                    error_info = "ERROR 35,閲戞捣娉电珯闇�瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe3_TargetFlow > 50)
+            {
+                if (pipe3_TargetHead < 0.01)
+                {
+                    error_info = "ERROR 35,閲戞捣娉电珯闇�瑕�3鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+
+
+            //鏈烘车淇℃伅
+            if (_allMachineList == null)
+            {
+                if (!BuildMachineList(
+                out _allMachineList,
+                out error_info))
+                {
+                    error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
+                    return null;
+                }
+            }
+ 
+             
+          
+      
+/*
+
+                Common.DispatchAnaGeneralHelper鎵▼ calc_pipe1_helper =
+         new Common.DispatchAnaGeneralHelper鎵▼();
+
+                Common.DispatchAnaGeneralHelper鎵▼ calc_pipe2_helper =
+          new Common.DispatchAnaGeneralHelper鎵▼();
+
+                if (pipe2_TargetFlow < 50)
+                {//鍙紑涓�鍙锋车浜屽彿娉�
+                    calc_pipe1_helper.InitialParas(
+                        pipe1_TargetFlow,
+                        pipe1_TargetHead,
+                        null, null,
+                        (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+                    machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                    return calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                }
+                else if (pipe1_TargetFlow < 50)
+                {
+                    calc_pipe2_helper.InitialParas(
+                        pipe2_TargetFlow,
+                        pipe2_TargetHead,
+                        null, null,
+                     (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+                    machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                    return calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                }
+                calc_pipe1_helper.InitialParas(
+                    pipe1_TargetFlow,
+                    pipe1_TargetHead,
+                  null, null,
+                 (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+               machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+                var pipe1_result = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+
+
+                calc_pipe2_helper.InitialParas(
+                    pipe2_TargetFlow,
+                    pipe2_TargetHead,
+                    null, null,
+                 (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+                 machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                var pipe2_result = calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+
+                if (pipe1_result == null || pipe2_result == null)
+                    return default;
+
+                var result_1 = pipe1_result.First();
+                var result_2 = pipe2_result.First();
+
+                var plan = new Model.AnaScheme();
+                plan.ID = 1;
+                plan.TotalWrkQ = result_1.TotalWrkQ + result_2.TotalWrkQ;
+                plan.TotalWrkH = result_1.TotalWrkH + result_2.TotalWrkH;
+                plan.TotalWrkP = result_1.TotalWrkP + result_2.TotalWrkP;
+                plan.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(plan.TotalWrkQ, plan.TotalWrkH, plan.TotalWrkP);
+                plan.UWP = CalculateUWP(plan.TotalWrkP, plan.TotalWrkQ, plan.TotalWrkH);
+                plan.WP = CalculateWP(plan.TotalWrkP, plan.TotalWrkQ);
+
+                plan.Items = new List<Model.AnaSchemeItem>();
+                if (result_1.Items != null && result_1.Items.Count > 0)
+                    plan.Items.AddRange(result_1.Items);
+                if (result_2.Items != null && result_2.Items.Count > 0)
+                    plan.Items.AddRange(result_2.Items);
+
+
+                return new List<Model.AnaScheme>() { plan };
+*/
+
+
+            Common.DispatchAnaGeneralHelper鎵▼ calc_pipe1_helper
+                = new Common.DispatchAnaGeneralHelper鎵▼();
+
+            Common.DispatchAnaGeneralHelper鎵▼ calc_pipe2_helper
+                = new Common.DispatchAnaGeneralHelper鎵▼();
+
+            Common.DispatchAnaGeneralHelper鎵▼ calc_pipe3_helper
+                = new Common.DispatchAnaGeneralHelper鎵▼();
+
+
+            double totalQ = 0, totalH = 0, totalP = 0;
+            int pipe_count = 0;
+
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe1_result = null;
+            List<IStation.Calculation.DispatchAna.Model.AnaScheme> pipe1_results = null;
+            if (pipe1_TargetFlow > 50)
+            {
+                calc_pipe1_helper.InitialParas(
+                pipe1_TargetFlow,
+                pipe1_TargetHead,
+              null, null,
+             (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+            machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+                pipe1_results = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                if (pipe1_results == null || pipe1_results.Count() == 0)
+                {
+                    error_info = String.Format("绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,鎵▼瑕佹眰:{0}m,娴侀噺瑕佹眰:{1}",
+                        pipe1_TargetHead, pipe1_TargetFlow);
+                    return null;
+                }
+                pipe1_result = pipe1_results[0];
+                totalQ += pipe1_result.TotalWrkQ;
+                totalP += pipe1_result.TotalWrkP;
+                totalH += pipe1_result.TotalWrkH;
+                pipe_count++;
+            }
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe2_result = null;
+            List<IStation.Calculation.DispatchAna.Model.AnaScheme> pipe2_results = null;
+            if (pipe2_TargetFlow > 50)
+            {
+                calc_pipe2_helper.InitialParas(
+                pipe2_TargetFlow,
+                pipe2_TargetHead,
+                null, null,
+                (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+                machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                pipe2_results = calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                if (pipe2_results == null || pipe2_results.Count() == 0)
+                {
+                    error_info = String.Format("绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,鎵▼瑕佹眰:{0}m,娴侀噺瑕佹眰:{1}",
+                        pipe2_TargetHead, pipe1_TargetFlow);
+                    return null;
+                }
+                pipe2_result = pipe2_results[0];
+                totalQ += pipe2_result.TotalWrkQ;
+                totalP += pipe2_result.TotalWrkP;
+                totalH += pipe2_result.TotalWrkH;
+                pipe_count++;
+            }
+
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe3_result = null;
+            List<IStation.Calculation.DispatchAna.Model.AnaScheme> pipe3_results = null;
+            if (pipe3_TargetFlow > 50)
+            {
+                calc_pipe3_helper.InitialParas(
+                pipe3_TargetFlow,
+                pipe3_TargetHead,
+                null, null,
+             (from x in _allMachineList where pipe3_machineIds.Contains(x.MachineID) select x).ToList(),
+            machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                pipe3_results = calc_pipe3_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                if (pipe3_results == null || pipe3_results.Count() == 0)
+                {
+                    error_info = String.Format("绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,鎵▼瑕佹眰:{0}m,娴侀噺瑕佹眰:{1}",
+                        pipe3_TargetHead, pipe3_TargetFlow);
+                    return null;
+                }
+                pipe3_result = pipe3_results[0];
+                totalQ += pipe3_result.TotalWrkQ;
+                totalP += pipe3_result.TotalWrkP;
+                totalH += pipe3_result.TotalWrkH;
+                pipe_count++;
+            }
+
+            var plan = new Model.AnaScheme();
+            plan.ID = 1;
+            plan.TotalWrkQ = Math.Round(totalQ, 1);
+            plan.TotalWrkH = Math.Round(totalH / totalH, 2);
+            plan.TotalWrkP = Math.Round(totalP, 1);
+            plan.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(plan.TotalWrkQ, plan.TotalWrkH, plan.TotalWrkP);
+            plan.UWP = CalculateUWP(plan.TotalWrkP, plan.TotalWrkQ, plan.TotalWrkH);
+            plan.WP = CalculateWP(plan.TotalWrkP, plan.TotalWrkQ);
+
+            plan.Items = new List<Model.AnaSchemeItem>();
+            if (pipe1_result.Items != null && pipe1_result.Items.Count > 0)
+                plan.Items.AddRange(pipe1_result.Items);
+            if (pipe2_result.Items != null && pipe2_result.Items.Count > 0)
+                plan.Items.AddRange(pipe2_result.Items);
+            if (pipe3_result.Items != null && pipe3_result.Items.Count > 0)
+                plan.Items.AddRange(pipe3_result.Items);
+
+
+            return new List<Model.AnaScheme>() { plan };
+        }
+
+
+        #endregion
+
+
+
+
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\225\277\345\205\264\345\262\233/Base.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\225\277\345\205\264\345\262\233/Base.cs"
index 76f79bb..1a72863 100644
--- "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\225\277\345\205\264\345\262\233/Base.cs"
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\225\277\345\205\264\345\262\233/Base.cs"
@@ -9,8 +9,43 @@
     /// <summary>
     /// 闀垮叴娉电珯璋冨害鏂规璁$畻鍣�
     /// </summary>
-    internal class CalculatorBase_SHYS_闀垮叴宀� : CalculatorBase
+    public  class CalculatorBase_SHYS_闀垮叴宀� : CalculatorOptAnaBase
     {
+        /// <summary>
+        /// 
+        /// </summary>
+       protected  List<long> pipe1_machineIds = new List<long>() { 19, 22 };//1鍙锋车锛�2鍙锋车 
+        /// <summary>
+        /// 
+        /// </summary>
+        protected List<long> pipe2_machineIds = new List<long>() { 25, 28 };//3鍙锋车锛�4鍙锋车 
+        /// <summary>
+        /// 
+        /// </summary>
+        public static long _monitor_id_pipe_press1 = 72;
+        /// <summary>
+        /// 
+        /// </summary>
+        public static long _monitor_id_pipe_press2 = 76;
+        /// <summary>
+        /// 
+        /// </summary>
+        public static long _monitor_id_pipe_flow1 = 73;
+        /// <summary>
+        /// 
+        /// </summary>
+        public static long _monitor_id_pipe_flow2 = 77;
+        /// <summary>
+        /// 
+        /// </summary>
+        public static long _monitor_id_涓棿闃�闂ㄧ姸鎬� = 71;
+        /// <summary>
+        /// 
+        /// </summary>
+        public static long _montiro_id_water_level = 70;
+        /// <summary>
+        /// 
+        /// </summary>
         public CalculatorBase_SHYS_闀垮叴宀�()
         {
             _corpID = 4;
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\225\277\345\205\264\345\262\233/Current.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\225\277\345\205\264\345\262\233/Current.cs"
index f4c70bd..df94ebe 100644
--- "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\225\277\345\205\264\345\262\233/Current.cs"
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\225\277\345\205\264\345\262\233/Current.cs"
@@ -25,20 +25,21 @@
         public Model.CurrentRecordBundle GetCurrentRecord(long CorpID, long StationID, out string error_info)
         {
             error_info = null;
-            var monitor_ids = new List<long>() { 70, 71, 72, 73, 76, 77, 79 };
+            var monitor_ids = new List<long>() { _montiro_id_water_level, _monitor_id_涓棿闃�闂ㄧ姸鎬�, _monitor_id_pipe_press1, _monitor_id_pipe_flow1,
+                _monitor_id_pipe_press2, _monitor_id_pipe_flow2, 79 };
             var monitor_records = new Service.MonitorRecord().GetLastRecord(_corpID, monitor_ids);
 
             Model.CurrentRecordBundle bundle = new Model.CurrentRecordBundle();
 
-            var water_level = monitor_records.Find(x => x.MonitorPointID == 70);
+            var water_level = monitor_records.Find(x => x.MonitorPointID == _montiro_id_water_level);
             if (water_level != null)
             {
                 bundle.WaterLevelList = new List<Model.CurrentRecordBundle.RecordValue>();
                 bundle.WaterLevelList.Add(new Model.CurrentRecordBundle.RecordValue("杩涙按娑蹭綅", water_level, 2));
             }
             
-            var pipe_press1 = monitor_records.Find(x => x.MonitorPointID == 72);
-            var pipe_press2 = monitor_records.Find(x => x.MonitorPointID == 76);
+            var pipe_press1 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_pipe_press1);
+            var pipe_press2 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_pipe_press2);
             if (pipe_press1 != null && pipe_press2 != null)
             {
                 bundle.PressList = new List<Model.CurrentRecordBundle.RecordValue>();
@@ -46,15 +47,15 @@
                 bundle.PressList.Add(new Model.CurrentRecordBundle.RecordValue("浜屽彿绠�", pipe_press2, 4));
             }
 
-            var pipe_flow1 = monitor_records.Find(x => x.MonitorPointID == 73);
-            var pipe_flow2 = monitor_records.Find(x => x.MonitorPointID == 77);
+            var pipe_flow1 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_pipe_flow1);
+            var pipe_flow2 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_pipe_flow2);
             if (pipe_flow1 != null && pipe_flow2 != null)
             {
                 bundle.FlowList = new List<Model.CurrentRecordBundle.RecordValue>();
                 bundle.FlowList.Add(new Model.CurrentRecordBundle.RecordValue("涓�鍙风", pipe_flow1, 0));
                 bundle.FlowList.Add(new Model.CurrentRecordBundle.RecordValue("浜屽彿绠�", pipe_flow2, 0));
 
-                var middle_valve = monitor_records.Find(x => x.MonitorPointID == 71);
+                var middle_valve = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓棿闃�闂ㄧ姸鎬�);
                 if (middle_valve != null)
                 {
                     bundle.VavleOpenList = new List<Model.CurrentRecordBundle.RecordValue>();
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\225\277\345\205\264\345\262\233/KeepStatus.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\225\277\345\205\264\345\262\233/KeepStatus.cs"
index b57cb92..6c941d1 100644
--- "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\225\277\345\205\264\345\262\233/KeepStatus.cs"
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\225\277\345\205\264\345\262\233/KeepStatus.cs"
@@ -70,9 +70,9 @@
 
 
             double water_level = 0;//姘翠綅
-            if (_request_paras.WaterLevelPara != null && _request_paras.WaterLevelPara.Count > 0)
+            if (_request_paras.InletPipePara != null && _request_paras.InletPipePara.Count > 0)
             {
-                water_level = _request_paras.WaterLevelPara.First().Value;
+                water_level = _request_paras.InletPipePara.First().Value;
             }
 
 
@@ -112,8 +112,8 @@
                     new Common.DispatchAnaGeneralHelper鍘嬪姏();
                 calc_pipe_helper.InitialParas(
                     pipe1_TargetFlow + pipe2_TargetFlow,
-                    water_level,
-                    press,
+                    water_level,true ,
+                    press, false,
                     null, null,
                     allMachineList, null);
 
@@ -121,9 +121,6 @@
             }
             else //闃�闂ㄥ叧鐨勭姸鎬佷笅  涓ょ鐩歌繛鏁版嵁鐩稿姞
             {
-                var pipe1_machineIds = new List<long>() { 19, 22 };//1鍙锋车锛�2鍙锋车 
-                var pipe2_machineIds = new List<long>() { 25, 28 };//3鍙锋车锛�4鍙锋车 
-
                 Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper
                     = new Common.DispatchAnaGeneralHelper鍘嬪姏();
 
@@ -134,8 +131,8 @@
                 {//鍙紑涓�鍙锋车浜屽彿娉�   
                     calc_pipe1_helper.InitialParas(
                         pipe1_TargetFlow,
-                        water_level,
-                        pipe1_TargetPess,
+                        water_level, true,
+                        pipe1_TargetPess, false,
                         null, null,
                         (from x in allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(), null);
 
@@ -145,8 +142,8 @@
                 {
                     calc_pipe2_helper.InitialParas(
                         pipe2_TargetFlow,
-                        water_level,
-                        pipe2_TargetPess,
+                        water_level, true,
+                        pipe2_TargetPess, false,
                         null, null,
                         (from x in allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(), null);
 
@@ -158,8 +155,8 @@
 
                 calc_pipe1_helper.InitialParas(
                     pipe1_TargetFlow,
-                    water_level,
-                    pipe1_TargetPess,
+                    water_level, true,
+                    pipe1_TargetPess, false,
                      null, null,
                     (from x in allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(), null);
                 var pipe1_result = calc_pipe1_helper.CalcKeepStatus(_open_machine_IdList);
@@ -167,8 +164,8 @@
 
                 calc_pipe2_helper.InitialParas(
                     pipe2_TargetFlow,
-                    water_level,
-                    pipe2_TargetPess,
+                    water_level,true ,
+                    pipe2_TargetPess,false ,
                     null, null,
                     (from x in allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(), null);
 
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\225\277\345\205\264\345\262\233/OptAna.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\225\277\345\205\264\345\262\233/OptAna.cs"
index 4fcb775..f9a1fe5 100644
--- "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\225\277\345\205\264\345\262\233/OptAna.cs"
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\225\277\345\205\264\345\262\233/OptAna.cs"
@@ -11,7 +11,7 @@
     /// <summary>
     /// 闀垮叴娉电珯璋冨害鏂规璁$畻鍣�(鏈�浼樻柟妗�)
     /// </summary>
-    public  class Calculator_OptAna_SHYS_闀垮叴宀�: CalculatorOptAnaBase, IOptAnaCalc
+    public  class Calculator_OptAna_SHYS_闀垮叴宀�: CalculatorBase_SHYS_闀垮叴宀�, IOptAnaCalc
     {
         /// <summary>
         /// /
@@ -138,11 +138,11 @@
                 }
             }
             double water_level = 0;//姘翠綅
-            if (complex_request_paras.WaterLevelPara != null && complex_request_paras.WaterLevelPara.Count > 0)
+            if (complex_request_paras.InletPipePara != null && complex_request_paras.InletPipePara.Count > 0)
             {
                 //var inletLevel = paras.MonitorPointInfoList.Find(x => x.SignalType == IStation.SignalType.姘翠綅);
                 //Elevation = inletLevel?.Elevation != null ? inletLevel.Elevation.Value : 0;//鑾峰彇娴嬬偣鐨勬爣楂�
-                water_level = complex_request_paras.WaterLevelPara.First().Value;
+                water_level = complex_request_paras.InletPipePara.First().Value;
             }
 
             //涓棿闃�闂ㄧ姸鎬�
@@ -178,10 +178,10 @@
                 Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe_helper = new Common.DispatchAnaGeneralHelper鍘嬪姏();
                 calc_pipe_helper.InitialParas(
                     pipe1_TargetFlow + pipe2_TargetFlow,
-                    water_level,
-                  (pipe1_TargetPess + pipe2_TargetPess) / 2,
-                  null, null,
-                  _allMachineList, machine_run_status.MachineRunFilter);
+                    water_level,true ,
+                   (pipe1_TargetPess + pipe2_TargetPess) / 2,false   ,
+                   null, null,
+                   _allMachineList, machine_run_status==null?null: machine_run_status.MachineRunFilter);
 
                 return calc_pipe_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
                 #endregion
@@ -189,10 +189,6 @@
             else //闃�闂ㄥ叧鐨勭姸鎬佷笅  涓ょ鐩歌繛鏁版嵁鐩稿姞
             {
                 #region 涓棿闃�闂ㄥ叧鐨勭姸鎬佷笅
-                var pipe1_machineIds = new List<long>() { 19, 22 };//1鍙锋车锛�2鍙锋车 
-                var pipe2_machineIds = new List<long>() { 25, 28 };//3鍙锋车锛�4鍙锋车 
-
-
                 Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper =
          new Common.DispatchAnaGeneralHelper鍘嬪姏();
 
@@ -203,8 +199,8 @@
                 {//鍙紑涓�鍙锋车浜屽彿娉�
                     calc_pipe1_helper.InitialParas(
                         pipe1_TargetFlow,
-                        water_level,
-                        pipe1_TargetPess,
+                        water_level,true ,
+                        pipe1_TargetPess,false ,
                         null, null,
                         (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
                        machine_run_status ==null?null: machine_run_status.MachineRunFilter);
@@ -215,36 +211,44 @@
                 {
                     calc_pipe2_helper.InitialParas(
                         pipe2_TargetFlow,
-                        water_level,
-                      pipe2_TargetPess,
-                      null, null,
-                     (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+                        water_level, true,
+                        pipe2_TargetPess, false,
+                        null, null,
+                        (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
                      machine_run_status == null ? null : machine_run_status.MachineRunFilter);
 
                     return calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
                 }
                 calc_pipe1_helper.InitialParas(
                     pipe1_TargetFlow,
-                    water_level,
-                    pipe1_TargetPess,
+                    water_level, true,
+                    pipe1_TargetPess, false,
                   null, null,
                  (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
                 machine_run_status == null ? null : machine_run_status.MachineRunFilter);
                 var pipe1_result = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
-
+                if (pipe1_result == null)
+                {
+                    error_info = String.Format("绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,娑蹭綅:{0}m,鍑哄彛鍘嬪姏:{1}MPa,娴侀噺瑕佹眰:{2}",
+                 water_level, pipe1_TargetPess, pipe1_TargetFlow);
+                    return null;
+                }
 
                 calc_pipe2_helper.InitialParas(
                     pipe2_TargetFlow,
-                    water_level,
-                  pipe2_TargetPess,
+                    water_level,true ,
+                  pipe2_TargetPess,false ,
                   null, null,
                  (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
                 machine_run_status == null ? null : machine_run_status.MachineRunFilter);
 
                 var pipe2_result = calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
-
-                if (pipe1_result == null || pipe2_result == null)
-                    return default;
+                if (pipe2_result == null)
+                {
+                    error_info = String.Format("绠¤矾浜岃皟搴︽柟妗堟棤娉曡绠�,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,娑蹭綅:{0}m,鍑哄彛鍘嬪姏:{1}MPa,娴侀噺瑕佹眰:{2}",
+                 water_level, pipe2_TargetPess, pipe2_TargetFlow);
+                    return null;
+                }
 
                 var result_1 = pipe1_result.First();
                 var result_2 = pipe2_result.First();
@@ -360,8 +364,7 @@
             else //闃�闂ㄥ叧鐨勭姸鎬佷笅  涓ょ鐩歌繛鏁版嵁鐩稿姞
             {
                 #region 涓棿闃�闂ㄥ叧鐨勭姸鎬佷笅
-                var pipe1_machineIds = new List<long>() { 19, 22 };//1鍙锋车锛�2鍙锋车 
-                var pipe2_machineIds = new List<long>() { 25, 28 };//3鍙锋车锛�4鍙锋车 
+
 
 
                 Common.DispatchAnaGeneralHelper鎵▼ calc_pipe1_helper =
@@ -419,7 +422,7 @@
                 var plan = new Model.AnaScheme();
                 plan.ID = 1;
                 plan.TotalWrkQ = result_1.TotalWrkQ + result_2.TotalWrkQ;
-                plan.TotalWrkH = result_1.TotalWrkH + result_2.TotalWrkH;
+                plan.TotalWrkH = (result_1.TotalWrkH + result_2.TotalWrkH)/2;
                 plan.TotalWrkP = result_1.TotalWrkP + result_2.TotalWrkP;
                 plan.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(plan.TotalWrkQ, plan.TotalWrkH, plan.TotalWrkP);
                 plan.UWP = CalculateUWP(plan.TotalWrkP, plan.TotalWrkQ, plan.TotalWrkH);
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\270\200\350\276\223/Base.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\270\200\350\276\223/Base.cs"
new file mode 100644
index 0000000..9abccb0
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\270\200\350\276\223/Base.cs"
@@ -0,0 +1,87 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 闄堣涓�杈撹皟搴︽柟妗堣绠楀櫒
+    /// </summary>
+    public class CalculatorBase_SHYS_闄堣涓�杈� : CalculatorOptAnaBase
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        protected List<long> machine_ids = new List<long>() { 262,265,268,271,259,274,277,280 };
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected List<long> pipe1_machineIds = null;//1鍙锋车锛�2鍙锋车
+        /// <summary>
+        /// 
+        /// </summary>
+        protected List<long> pipe2_machineIds = null;//,3鍙锋车锛�4鍙锋车 锛�5鍙锋车   
+        /// <summary>
+        /// 
+        /// </summary>
+        protected List<long> pipe3_machineIds = null;//锛�6鍙锋车锛�7鍙锋车 锛�8鍙锋车 
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_娑蹭綅1 = 856;
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_娑蹭綅2 = 857;
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_娑蹭綅3 = 858;
+
+ 
+
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_涓�鍙风鍘嬪姏  = 859;
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_涓�鍙风娴侀噺  = 860;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_浜屽彿绠″帇鍔� = 862;
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_浜屽彿绠℃祦閲� = 863;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_涓夊彿绠″帇鍔� = 865;
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_涓夊彿绠℃祦閲� = 866;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public CalculatorBase_SHYS_闄堣涓�杈�()
+        {
+            pipe1_machineIds = new List<long>() { machine_ids[0], machine_ids[1]  };//1鍙锋车锛�2鍙锋车 
+            pipe2_machineIds = new List<long>() { machine_ids[2], machine_ids[3], machine_ids[4] };//3鍙锋车 锛�4鍙锋车 锛�5鍙锋车
+            pipe3_machineIds = new List<long>() { machine_ids[5], machine_ids[6], machine_ids[7] };//6鍙锋车锛�7鍙锋车 锛�8鍙锋车  
+
+            _corpID = 4;
+            _stationID = 15;
+        }
+ 
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\270\200\350\276\223/Current.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\270\200\350\276\223/Current.cs"
new file mode 100644
index 0000000..84006da
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\270\200\350\276\223/Current.cs"
@@ -0,0 +1,96 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 闀垮叴娉电珯璋冨害鏂规璁$畻鍣�
+    /// </summary>
+    internal class Calculator_Current_SHYS_闄堣涓�杈�: CalculatorBase_SHYS_闄堣涓�杈�, IGetCurrentRecord
+    {
+        public Calculator_Current_SHYS_闄堣涓�杈�()
+        {
+ 
+        }
+        /// <summary>
+        /// 鑾峰彇褰撳墠璋冨害淇℃伅
+        /// </summary>
+        /// <param name="CorpID"></param>
+        /// <param name="StationID"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        public Model.CurrentRecordBundle GetCurrentRecord(long CorpID, long StationID, out string error_info)
+        {
+            error_info = null;
+            List<long> monitor_ids = new List<long>() {
+                _monitor_id_娑蹭綅1,_monitor_id_娑蹭綅2,_monitor_id_娑蹭綅3,
+                _monitor_id_涓�鍙风鍘嬪姏, _monitor_id_浜屽彿绠″帇鍔� , _monitor_id_涓夊彿绠″帇鍔� ,
+                _monitor_id_涓�鍙风娴侀噺 , _monitor_id_浜屽彿绠℃祦閲�  , _monitor_id_涓夊彿绠℃祦閲� };
+            var monitor_records = new Service.MonitorRecord().GetLastRecord(_corpID, monitor_ids);
+
+            Model.CurrentRecordBundle bundle = new Model.CurrentRecordBundle();
+
+            bundle.WaterLevelList = new List<Model.CurrentRecordBundle.RecordValue>();
+
+            var water_level1 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_娑蹭綅1);
+            if (water_level1 != null)
+            {
+                bundle.WaterLevelList.Add(new Model.CurrentRecordBundle.RecordValue("娑蹭綅1", water_level1, 4));
+            }
+            else
+            {
+                bundle.WaterLevelList.Add(new Model.CurrentRecordBundle.RecordValue("娑蹭綅1", 0 ));
+            }
+            var water_level2 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_娑蹭綅2);
+            if (water_level2 != null)
+            {
+                bundle.WaterLevelList.Add(new Model.CurrentRecordBundle.RecordValue("娑蹭綅2", water_level2, 4));
+            }
+            else
+            {
+                bundle.WaterLevelList.Add(new Model.CurrentRecordBundle.RecordValue("娑蹭綅2", 0));
+            }
+            var water_level3 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_娑蹭綅3);
+            if (water_level3 != null)
+            {
+                bundle.WaterLevelList.Add(new Model.CurrentRecordBundle.RecordValue("娑蹭綅3", water_level3, 4));
+            }
+            else
+            {
+                bundle.WaterLevelList.Add(new Model.CurrentRecordBundle.RecordValue("娑蹭綅3", 0));
+            }
+
+            var pipe_press1 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓�鍙风鍘嬪姏 );
+            var pipe_press2 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_浜屽彿绠″帇鍔� );
+            var pipe_press3 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓夊彿绠″帇鍔� );
+
+            if (pipe_press1 != null && pipe_press2 != null && pipe_press3 != null)
+            {
+                bundle.PressList = new List<Model.CurrentRecordBundle.RecordValue>();
+                bundle.PressList.Add(new Model.CurrentRecordBundle.RecordValue("涓�鍙峰嚭鍙g", pipe_press1, 4));
+                bundle.PressList.Add(new Model.CurrentRecordBundle.RecordValue("浜屽彿鍑哄彛绠�", pipe_press2, 4));
+                bundle.PressList.Add(new Model.CurrentRecordBundle.RecordValue("涓夊彿鍑哄彛绠�", pipe_press3, 4));
+            }
+
+            var pipe_flow1 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓�鍙风娴侀噺 );
+            var pipe_flow2 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_浜屽彿绠℃祦閲� );
+            var pipe_flow3 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓夊彿绠℃祦閲� );
+            if (pipe_flow1 != null && pipe_flow2 != null && pipe_flow3 != null)
+            {
+                bundle.FlowList = new List<Model.CurrentRecordBundle.RecordValue>();
+                bundle.FlowList.Add(new Model.CurrentRecordBundle.RecordValue("涓�鍙峰嚭鍙g", pipe_flow1, 0));
+                bundle.FlowList.Add(new Model.CurrentRecordBundle.RecordValue("浜屽彿鍑哄彛绠�", pipe_flow2, 0));
+                bundle.FlowList.Add(new Model.CurrentRecordBundle.RecordValue("涓夊彿鍑哄彛绠�", pipe_flow3, 0));
+            }
+
+
+            return bundle;
+        }
+
+
+
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\270\200\350\276\223/KeepStatus.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\270\200\350\276\223/KeepStatus.cs"
new file mode 100644
index 0000000..58616e2
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\270\200\350\276\223/KeepStatus.cs"
@@ -0,0 +1,233 @@
+锘縰sing IStation.Calculation.DispatchAna.Model;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 闀垮叴娉电珯璋冨害鏂规璁$畻鍣�
+    /// </summary>
+    internal class Calculator_KeepStatus_SHYS_闄堣涓�杈� : CalculatorBase_SHYS_闄堣涓�杈�, IKeepStatusCalc
+    {
+        public Calculator_KeepStatus_SHYS_闄堣涓�杈�()
+        {
+
+        }
+        Model.RequestParasComplex _request_paras;
+        List<long> _open_machine_IdList ;
+        /// <summary>
+        /// 鍒濆鍖栧弬鏁�
+        /// </summary>
+        /// <param name="complex_request_paras"></param>
+        /// <param name="eta_ana_records"></param>
+        /// <param name="open_machine_ids"></param>
+        public  void IntialRequest(
+            IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+            IStation.Calculation.DispatchAna.Model.EtaAnaRecord4Station eta_ana_records,
+            List<long> open_machine_ids)
+        {
+            this._request_paras = complex_request_paras;
+            this._open_machine_IdList = open_machine_ids;
+        }
+
+
+        List<Model.MachineDetail> _allMachineList = null;
+
+        /// <summary>
+        /// 璁$畻淇濇寔褰撳墠寮�鏈虹姸鎬�
+        /// </summary> 
+        /// <param name="error_info">閿欒淇℃伅</param>
+        /// <returns></returns>
+        public Model.AnaScheme Calc(out string error_info)
+        {
+            if (_open_machine_IdList == null || _open_machine_IdList.Count == 0)
+            {
+                error_info = "ERROR 25";
+                return null;
+            }
+            error_info = null;
+            if (_request_paras == null)
+            {
+                error_info = "ERROR 30";
+                return null;
+            }
+
+            if (_request_paras.OutletPipePara == null || _request_paras.OutletPipePara.Count < 3)
+            {
+                error_info = "ERROR 35";
+                return null;
+            }
+            double pipe1_TargetFlow = _request_paras.OutletPipePara[0].TargetFlow;
+            double pipe2_TargetFlow = _request_paras.OutletPipePara[1].TargetFlow;
+            double pipe3_TargetFlow = _request_paras.OutletPipePara[2].TargetFlow;
+            if (pipe1_TargetFlow < 10 && pipe2_TargetFlow < 10 && pipe3_TargetFlow < 10)
+            {
+                return default;
+            }
+
+            double pipe1_TargetPess = _request_paras.OutletPipePara[0].TargetPress;
+            double pipe2_TargetPess = _request_paras.OutletPipePara[1].TargetPress;
+            double pipe3_TargetPess = _request_paras.OutletPipePara[2].TargetPress;
+            if (pipe1_TargetFlow > 50)
+            {
+                if (pipe1_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,闄堣涓�杈撻渶瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe2_TargetFlow > 50)
+            {
+                if (pipe2_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,闄堣涓�杈撻渶瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe3_TargetFlow > 50)
+            {
+                if (pipe3_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,闄堣涓�杈撻渶瑕佷笁鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+
+            double water_level1 = 0, water_level2=0, water_level3=0; 
+            if (_request_paras.InletPipePara != null && _request_paras.InletPipePara.Count > 0)
+            {
+                if (_request_paras.InletPipePara.Count >= 1)
+                {
+                    water_level1 = _request_paras.InletPipePara[0].Value;
+                }
+                if (_request_paras.InletPipePara.Count >=2)
+                {
+                    water_level2 = _request_paras.InletPipePara[1].Value;
+                }
+                if (_request_paras.InletPipePara.Count >= 3)
+                {
+                    water_level3 = _request_paras.InletPipePara[2].Value;
+                }
+            }
+       
+
+
+            //鏈烘车淇℃伅
+            if (_allMachineList == null)
+            {
+                if (!BuildMachineList(
+                    out _allMachineList,
+                    out error_info))
+                {
+                    error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
+                    return null;
+                }
+            }
+
+
+
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe2_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe3_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+
+            double totalQ = 0, totalH = 0, totalP = 0;
+            int pipe_count = 0;
+
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe1_result = null;
+            if (pipe1_TargetFlow > 50)
+            {
+                calc_pipe1_helper.InitialParas(
+                 pipe1_TargetFlow,
+                 water_level1,true ,
+                 pipe1_TargetPess,false ,
+                  null, null,
+                 (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(), null);
+                pipe1_result = calc_pipe1_helper.CalcKeepStatus(_open_machine_IdList);
+                if (pipe1_result == null)
+                {
+                    error_info = "绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�";
+                    return null;
+                }
+                totalQ += pipe1_result.TotalWrkQ;
+                totalP += pipe1_result.TotalWrkP;
+                totalH += pipe1_result.TotalWrkH;
+                pipe_count++;
+            }
+
+
+
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe2_result = null;
+            if (pipe2_TargetFlow > 50)
+            {
+                calc_pipe2_helper.InitialParas(
+                 pipe2_TargetFlow,
+                 water_level2,true ,
+                 pipe2_TargetPess,false ,
+                  null, null,
+                 (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(), null);
+                pipe2_result = calc_pipe2_helper.CalcKeepStatus(_open_machine_IdList);
+                if (pipe2_result == null)
+                {
+                    error_info = "绠¤矾2璋冨害鏂规鏃犳硶璁$畻璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�";
+                    return null;
+                }
+                totalQ += pipe2_result.TotalWrkQ;
+                totalP += pipe2_result.TotalWrkP;
+                totalH += pipe2_result.TotalWrkH;
+                pipe_count++;
+            }
+
+
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe3_result = null;
+            if (pipe3_TargetFlow > 50)
+            {
+                calc_pipe3_helper.InitialParas(
+                 pipe3_TargetFlow,
+                 water_level3, true,
+                 pipe3_TargetPess,false,
+                  null, null,
+                 (from x in _allMachineList where pipe3_machineIds.Contains(x.MachineID) select x).ToList(), null);
+                pipe3_result = calc_pipe3_helper.CalcKeepStatus(_open_machine_IdList);
+                if (pipe3_result == null)
+                {
+                    error_info = "绠¤矾3璋冨害鏂规鏃犳硶璁$畻璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�";
+                    return null;
+                }
+                totalQ += pipe3_result.TotalWrkQ;
+                totalP += pipe3_result.TotalWrkP;
+                totalH += pipe3_result.TotalWrkH;
+                pipe_count++;
+            }
+
+            var connect_scheme = new Model.AnaScheme();
+            connect_scheme.ID = 1;
+            connect_scheme.TotalWrkQ = Math.Round(totalQ, 1);
+            connect_scheme.TotalWrkH = Math.Round(totalH / totalH,2);
+            connect_scheme.TotalWrkP = Math.Round(totalP, 1);
+            connect_scheme.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH, connect_scheme.TotalWrkP);
+            connect_scheme.UWP = CalculateUWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH);
+            connect_scheme.WP = CalculateWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ);
+
+            connect_scheme.Items = new List<Model.AnaSchemeItem>();
+            if (pipe1_result.Items != null && pipe1_result.Items.Count > 0)
+                connect_scheme.Items.AddRange(pipe1_result.Items);
+            if (pipe2_result.Items != null && pipe2_result.Items.Count > 0)
+                connect_scheme.Items.AddRange(pipe2_result.Items);
+            if (pipe3_result.Items != null && pipe3_result.Items.Count > 0)
+                connect_scheme.Items.AddRange(pipe3_result.Items);
+
+            return connect_scheme;
+            銆�
+        }
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\270\200\350\276\223/OptAna.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\270\200\350\276\223/OptAna.cs"
new file mode 100644
index 0000000..c3d5ae7
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\270\200\350\276\223/OptAna.cs"
@@ -0,0 +1,447 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Numerics;
+using System.Text;
+using System.Threading.Tasks;
+using IStation.Calculation.DispatchAna.Model;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 闄堣涓�杈撹皟搴︽柟妗堣绠楀櫒(鏈�浼樻柟妗�)
+    /// </summary>
+    public  class Calculator_OptAna_SHYS_闄堣涓�杈�: CalculatorBase_SHYS_闄堣涓�杈�, IOptAnaCalc
+    {
+        List<Model.MachineDetail> _allMachineList = null;
+ 
+
+ 
+       
+
+        #region 璁$畻 鏈�浼樻柟妗� 
+        /// <summary>
+        /// 璁$畻 鏈�浼樻柟妗� 
+        /// </summary>
+        /// <param name="complex_request_paras"></param>
+        /// <param name="eta_ana_records"></param>
+        /// <param name="machine_run_status"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        public List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcSchemes(
+            IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+            IStation.Calculation.DispatchAna.Model.EtaAnaRecord4Station eta_ana_records,
+            IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
+            out string error_info)
+        {
+            this._corpID = complex_request_paras.CorpID;
+            this._stationID = complex_request_paras.StationID;
+
+ 
+
+
+            var isUsePress = complex_request_paras.PressValueType == Model.RequestParasComplex.ePressValueType.鍘嬪姏 ? true : false;
+
+     
+            if (isUsePress)
+                return CalcSchemes鍘嬪姏(complex_request_paras, machine_run_status, out error_info);
+            else
+                return CalcSchemes鎵▼(complex_request_paras, machine_run_status, out error_info);
+        }
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="complex_request_paras"></param>
+        /// <param name="machine_run_status"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        protected override  List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcSchemes鍘嬪姏(
+                    IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+                    IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
+                    out string error_info)
+        {
+            error_info = "";
+            if (complex_request_paras == null)
+            {
+                error_info = "ERROR 30";
+                return null;
+            }
+            if (complex_request_paras.OutletPipePara == null ||
+                complex_request_paras.OutletPipePara.Count < 3)
+            {
+                error_info = "ERROR 35,闄堣涓�杈撻渶瑕�3涓嚭鍙g璺殑娴侀噺";
+                return null;
+            }
+            double water_level1 = 0, water_level2 = 0, water_level3 = 0;
+            if (complex_request_paras.InletPipePara != null && complex_request_paras.InletPipePara.Count > 0)
+            {
+                if (complex_request_paras.InletPipePara.Count >= 1)
+                {
+                    water_level1 = complex_request_paras.InletPipePara[0].Value;
+                }
+                if (complex_request_paras.InletPipePara.Count >= 2)
+                {
+                    water_level2 = complex_request_paras.InletPipePara[1].Value;
+                }
+                if (complex_request_paras.InletPipePara.Count >= 3)
+                {
+                    water_level3 = complex_request_paras.InletPipePara[2].Value;
+                }
+            }
+
+
+            double pipe1_TargetFlow = complex_request_paras.OutletPipePara[0].TargetFlow;
+            double pipe2_TargetFlow = complex_request_paras.OutletPipePara[1].TargetFlow;
+            double pipe3_TargetFlow = complex_request_paras.OutletPipePara[2].TargetFlow;
+            if (pipe1_TargetFlow < 50 && pipe2_TargetFlow < 50 && pipe3_TargetFlow < 50)
+            {//閮藉叧鏈�
+                error_info = "ERROR 35,闄堣涓�杈撻渶瑕�3涓嚭鍙g璺殑娴侀噺閮戒负0";
+                return null;
+            }
+
+            double pipe1_TargetPess = complex_request_paras.OutletPipePara[0].TargetPress;
+            double pipe2_TargetPess = complex_request_paras.OutletPipePara[1].TargetPress;
+            double pipe3_TargetPess = complex_request_paras.OutletPipePara[2].TargetPress;
+            if (pipe1_TargetFlow > 50)
+            {
+                if (pipe1_TargetPess < water_level1/100 + 0.01)
+                {
+                    error_info = "ERROR 35,闄堣涓�杈撻渶瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe2_TargetFlow > 50)
+            {
+                if (pipe2_TargetPess < water_level2 / 100 + 0.01)
+                {
+                    error_info = "ERROR 35,闄堣涓�杈撻渶瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe3_TargetFlow > 50)
+            {
+                if (pipe3_TargetPess < water_level3 / 100 + 0.01)
+                {
+                    error_info = "ERROR 35,闄堣涓�杈撻渶瑕佷笁鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+
+
+
+
+
+
+            //鏈烘车淇℃伅
+            if (_allMachineList == null)
+            {
+                if (!BuildMachineList(
+                    out _allMachineList,
+                    out error_info))
+                {
+                    error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
+                    return null;
+                }
+            }
+
+
+
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe2_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe3_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+
+            double totalQ = 0, totalH = 0, totalP = 0;
+            int pipe_count = 0;
+
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe1_result = null;
+            List<IStation.Calculation.DispatchAna.Model.AnaScheme> pipe1_results = null;
+            if (pipe1_TargetFlow > 50)
+            {
+                calc_pipe1_helper.InitialParas(
+                pipe1_TargetFlow,
+                water_level1  ,true ,
+                pipe1_TargetPess,false,
+              null, null,
+             (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+            machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+                pipe1_results = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                if (pipe1_results == null || pipe1_results.Count() == 0)
+                {
+                    error_info = String.Format("绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,杩涘彛娑蹭綅:{0} ,鍑哄彛鍘嬪姏:{1}MPa, 娴侀噺瑕佹眰:{2}",
+                        Math.Round(water_level1, 4), Math.Round(pipe1_TargetPess,4), pipe1_TargetFlow);
+                    return null;
+                }
+                pipe1_result = pipe1_results[0];
+                totalQ += pipe1_result.TotalWrkQ;
+                totalP += pipe1_result.TotalWrkP;
+                totalH += pipe1_result.TotalWrkH;
+                pipe_count++;
+            }
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe2_result = null;
+            List<IStation.Calculation.DispatchAna.Model.AnaScheme> pipe2_results = null;
+            if (pipe2_TargetFlow > 50)
+            {
+                calc_pipe2_helper.InitialParas(
+                pipe2_TargetFlow,
+                water_level2, true,
+                pipe2_TargetPess,false ,
+              null, null,
+             (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+            machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                pipe2_results = calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                if (pipe2_results == null || pipe2_results.Count() == 0)
+                {
+                    error_info = String.Format("绠¤矾2璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,杩涘彛娑蹭綅:{0} ,鍑哄彛鍘嬪姏:{1}MPa,娴侀噺瑕佹眰:{2}",
+                   Math.Round(water_level1, 4), Math.Round(pipe2_TargetPess, 4), pipe2_TargetFlow);
+                    return null;
+                }
+                pipe2_result = pipe2_results[0];
+                totalQ += pipe2_result.TotalWrkQ;
+                totalP += pipe2_result.TotalWrkP;
+                totalH += pipe2_result.TotalWrkH;
+                pipe_count++;
+            }
+
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe3_result = null;
+            List<IStation.Calculation.DispatchAna.Model.AnaScheme> pipe3_results = null;
+            if (pipe3_TargetFlow > 50)
+            {
+                calc_pipe3_helper.InitialParas(
+                pipe3_TargetFlow,
+                water_level3,true ,
+                pipe3_TargetPess,false ,
+                null, null,
+             (from x in _allMachineList where pipe3_machineIds.Contains(x.MachineID) select x).ToList(),
+            machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                pipe3_results = calc_pipe3_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                if (pipe3_results == null || pipe3_results.Count() == 0)
+                {
+                    error_info = String.Format("绠¤矾3璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,杩涘彛娑蹭綅:{0} ,鍑哄彛鍘嬪姏:{1}MPa,娴侀噺瑕佹眰:{2}",
+                        Math.Round(water_level3, 4), Math.Round(pipe3_TargetPess, 4),  pipe3_TargetFlow);
+                    return null;
+                }
+                pipe3_result = pipe3_results[0];
+                totalQ += pipe3_result.TotalWrkQ;
+                totalP += pipe3_result.TotalWrkP;
+                totalH += pipe3_result.TotalWrkH;
+                pipe_count++;
+            }
+
+            var plan = new Model.AnaScheme();
+            plan.ID = 1;
+            plan.TotalWrkQ = Math.Round(totalQ, 1);
+            plan.TotalWrkH = Math.Round(totalH / totalH, 2);
+            plan.TotalWrkP = Math.Round(totalP, 1);
+            plan.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(plan.TotalWrkQ, plan.TotalWrkH, plan.TotalWrkP);
+            plan.UWP = CalculateUWP(plan.TotalWrkP, plan.TotalWrkQ, plan.TotalWrkH);
+            plan.WP = CalculateWP(plan.TotalWrkP, plan.TotalWrkQ);
+
+            plan.Items = new List<Model.AnaSchemeItem>();
+            if (pipe1_result.Items != null && pipe1_result.Items.Count > 0)
+                plan.Items.AddRange(pipe1_result.Items);
+            if (pipe2_result.Items != null && pipe2_result.Items.Count > 0)
+                plan.Items.AddRange(pipe2_result.Items);
+            if (pipe3_result.Items != null && pipe3_result.Items.Count > 0)
+                plan.Items.AddRange(pipe3_result.Items);
+
+
+            return new List<Model.AnaScheme>() { plan };   
+        }
+
+
+        private List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcSchemes鎵▼(
+                    IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+                    IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
+                    out string error_info)
+        {
+            error_info = "";
+            if (complex_request_paras == null)
+            {
+                error_info = "ERROR 30";
+                return null;
+            }
+            if (complex_request_paras.OutletPipePara == null ||
+                complex_request_paras.OutletPipePara.Count < 2)
+            {
+                error_info = "ERROR 35,闄堣涓�杈撻渶瑕佷袱涓璺殑娴侀噺";
+                return null;
+            }
+
+            double pipe1_TargetFlow = complex_request_paras.OutletPipePara[0].TargetFlow;
+            double pipe2_TargetFlow = complex_request_paras.OutletPipePara[1].TargetFlow;
+            double pipe3_TargetFlow = complex_request_paras.OutletPipePara[2].TargetFlow;
+            if (pipe1_TargetFlow < 50 && pipe2_TargetFlow < 50 && pipe3_TargetFlow < 50)
+            {//閮藉叧鏈�
+                error_info = "ERROR 35,闄堣涓�杈撻渶瑕佷袱涓璺殑娴侀噺 閮戒负0";
+                return null;
+            }
+
+            double pipe1_TargetHead = complex_request_paras.OutletPipePara[0].TargetPress;
+            double pipe2_TargetHead = complex_request_paras.OutletPipePara[1].TargetPress;
+            double pipe3_TargetHead = complex_request_paras.OutletPipePara[2].TargetPress;
+            if (pipe1_TargetFlow > 50)
+            {
+                if (pipe1_TargetHead < 0.01)
+                {
+                    error_info = "ERROR 35,闄堣涓�杈撻渶瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe2_TargetFlow > 50)
+            {
+                if (pipe2_TargetHead < 0.01)
+                {
+                    error_info = "ERROR 35,闄堣涓�杈撻渶瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe3_TargetFlow > 50)
+            {
+                if (pipe3_TargetHead < 0.01)
+                {
+                    error_info = "ERROR 35,闄堣涓�杈撻渶瑕�3鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+
+
+            //鏈烘车淇℃伅
+            if (_allMachineList == null)
+            {
+                if (!BuildMachineList(
+                out _allMachineList,
+                out error_info))
+                {
+                    error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
+                    return null;
+                }
+            }
+ 
+             
+          
+  
+
+            Common.DispatchAnaGeneralHelper鎵▼ calc_pipe1_helper
+                = new Common.DispatchAnaGeneralHelper鎵▼();
+
+            Common.DispatchAnaGeneralHelper鎵▼ calc_pipe2_helper
+                = new Common.DispatchAnaGeneralHelper鎵▼();
+
+            Common.DispatchAnaGeneralHelper鎵▼ calc_pipe3_helper
+                = new Common.DispatchAnaGeneralHelper鎵▼();
+
+
+            double totalQ = 0, totalH = 0, totalP = 0;
+            int pipe_count = 0;
+
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe1_result = null;
+            List<IStation.Calculation.DispatchAna.Model.AnaScheme> pipe1_results = null;
+            if (pipe1_TargetFlow > 50)
+            {
+                calc_pipe1_helper.InitialParas(
+                pipe1_TargetFlow,
+                pipe1_TargetHead,
+              null, null,
+             (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+            machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+                pipe1_results = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                if (pipe1_results == null || pipe1_results.Count() == 0)
+                {
+                    error_info = String.Format("绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,鎵▼瑕佹眰:{0}m,娴侀噺瑕佹眰:{1}",
+                        pipe1_TargetHead, pipe1_TargetFlow);
+                    return null;
+                }
+                pipe1_result = pipe1_results[0];
+                totalQ += pipe1_result.TotalWrkQ;
+                totalP += pipe1_result.TotalWrkP;
+                totalH += pipe1_result.TotalWrkH;
+                pipe_count++;
+            }
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe2_result = null;
+            List<IStation.Calculation.DispatchAna.Model.AnaScheme> pipe2_results = null;
+            if (pipe2_TargetFlow > 50)
+            {
+                calc_pipe2_helper.InitialParas(
+                pipe2_TargetFlow,
+                pipe2_TargetHead,
+                null, null,
+                (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+                machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                pipe2_results = calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                if (pipe2_results == null || pipe2_results.Count() == 0)
+                {
+                    error_info = String.Format("绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,鎵▼瑕佹眰:{0}m,娴侀噺瑕佹眰:{1}",
+                        pipe2_TargetHead, pipe1_TargetFlow);
+                    return null;
+                }
+                pipe2_result = pipe2_results[0];
+                totalQ += pipe2_result.TotalWrkQ;
+                totalP += pipe2_result.TotalWrkP;
+                totalH += pipe2_result.TotalWrkH;
+                pipe_count++;
+            }
+
+            IStation.Calculation.DispatchAna.Model.AnaScheme pipe3_result = null;
+            List<IStation.Calculation.DispatchAna.Model.AnaScheme> pipe3_results = null;
+            if (pipe3_TargetFlow > 50)
+            {
+                calc_pipe3_helper.InitialParas(
+                pipe3_TargetFlow,
+                pipe3_TargetHead,
+                null, null,
+             (from x in _allMachineList where pipe3_machineIds.Contains(x.MachineID) select x).ToList(),
+            machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                pipe3_results = calc_pipe3_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+                if (pipe3_results == null || pipe3_results.Count() == 0)
+                {
+                    error_info = String.Format("绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,鎵▼瑕佹眰:{0}m,娴侀噺瑕佹眰:{1}",
+                        pipe3_TargetHead, pipe3_TargetFlow);
+                    return null;
+                }
+                pipe3_result = pipe3_results[0];
+                totalQ += pipe3_result.TotalWrkQ;
+                totalP += pipe3_result.TotalWrkP;
+                totalH += pipe3_result.TotalWrkH;
+                pipe_count++;
+            }
+
+            var plan = new Model.AnaScheme();
+            plan.ID = 1;
+            plan.TotalWrkQ = Math.Round(totalQ, 1);
+            plan.TotalWrkH = Math.Round(totalH / totalH, 2);
+            plan.TotalWrkP = Math.Round(totalP, 1);
+            plan.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(plan.TotalWrkQ, plan.TotalWrkH, plan.TotalWrkP);
+            plan.UWP = CalculateUWP(plan.TotalWrkP, plan.TotalWrkQ, plan.TotalWrkH);
+            plan.WP = CalculateWP(plan.TotalWrkP, plan.TotalWrkQ);
+
+            plan.Items = new List<Model.AnaSchemeItem>();
+            if (pipe1_result.Items != null && pipe1_result.Items.Count > 0)
+                plan.Items.AddRange(pipe1_result.Items);
+            if (pipe2_result.Items != null && pipe2_result.Items.Count > 0)
+                plan.Items.AddRange(pipe2_result.Items);
+            if (pipe3_result.Items != null && pipe3_result.Items.Count > 0)
+                plan.Items.AddRange(pipe3_result.Items);
+
+
+            return new List<Model.AnaScheme>() { plan };
+        }
+
+
+        #endregion
+
+
+
+
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\272\214\350\276\223/Base.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\272\214\350\276\223/Base.cs"
new file mode 100644
index 0000000..fd234dd
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\272\214\350\276\223/Base.cs"
@@ -0,0 +1,62 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 闄堣浜岃緭璋冨害鏂规璁$畻鍣�
+    /// </summary>
+    public class CalculatorBase_SHYS_闄堣浜岃緭 : CalculatorOptAnaBase
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        static protected List<long> machine_ids = new List<long>() { 283,286,289,292,295,298,301 };
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected List<long> pipe1_machineIds = null;//1鍙锋车锛�2鍙锋车,3鍙锋车
+        /// <summary>
+        /// 
+        /// </summary>
+        protected List<long> pipe2_machineIds = null;//锛�4鍙锋车 锛�5鍙锋车 锛�6鍙锋车锛�7鍙锋车  
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_娑蹭綅 = 916;
+ 
+        /// <summary>
+        /// 
+        /// </summary>
+        static public  long _monitor_id_涓�鍙风鍘嬪姏 = 917;
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_浜屽彿绠″帇鍔� = 920;
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_涓�鍙风娴侀噺 = 918;
+        /// <summary>
+        /// 
+        /// </summary>
+        static public long _monitor_id_浜屽彿绠℃祦閲� = 921;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public CalculatorBase_SHYS_闄堣浜岃緭()
+        {
+            pipe1_machineIds = new List<long>() { machine_ids[0], machine_ids[1], machine_ids[2] };//1鍙锋车锛�2鍙锋车,3鍙锋车
+            pipe2_machineIds = new List<long>() { machine_ids[3], machine_ids[4], machine_ids[5], machine_ids[6] };//锛�4鍙锋车 锛�5鍙锋车 锛�6鍙锋车锛�7鍙锋车  
+
+            _corpID = 4;
+            _stationID = 16;
+        }
+ 
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\272\214\350\276\223/Current.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\272\214\350\276\223/Current.cs"
new file mode 100644
index 0000000..7e8329f
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\272\214\350\276\223/Current.cs"
@@ -0,0 +1,64 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 闄堣浜岃緭娉电珯璋冨害鏂规璁$畻鍣�
+    /// </summary>
+    internal class Calculator_Current_SHYS_闄堣浜岃緭: CalculatorBase_SHYS_闄堣浜岃緭, IGetCurrentRecord
+    {
+        /// <summary>
+        /// 鑾峰彇褰撳墠璋冨害淇℃伅
+        /// </summary>
+        /// <param name="CorpID"></param>
+        /// <param name="StationID"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        public Model.CurrentRecordBundle GetCurrentRecord(long CorpID, long StationID, out string error_info)
+        {
+            error_info = null;
+            List<long> monitor_ids = new List<long>() { _monitor_id_娑蹭綅,   _monitor_id_涓�鍙风鍘嬪姏,
+                _monitor_id_浜屽彿绠″帇鍔�, _monitor_id_涓�鍙风娴侀噺, _monitor_id_浜屽彿绠℃祦閲� };
+            var monitor_records = new Service.MonitorRecord().GetLastRecord(_corpID, monitor_ids);
+
+            Model.CurrentRecordBundle bundle = new Model.CurrentRecordBundle();
+
+            bundle.WaterLevelList = new List<Model.CurrentRecordBundle.RecordValue>();
+
+            var water_level  = monitor_records.Find(x => x.MonitorPointID == _monitor_id_娑蹭綅);
+            if (water_level != null)
+            { 
+                bundle.WaterLevelList.Add(new Model.CurrentRecordBundle.RecordValue("娑蹭綅", water_level, 2));
+            }
+   
+
+            var pipe_press1 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓�鍙风鍘嬪姏);
+            var pipe_press2 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_浜屽彿绠″帇鍔�);
+            if (pipe_press1 != null && pipe_press2 != null)
+            {
+                bundle.PressList = new List<Model.CurrentRecordBundle.RecordValue>();
+                bundle.PressList.Add(new Model.CurrentRecordBundle.RecordValue("涓�鍙风", pipe_press1, 4));
+                bundle.PressList.Add(new Model.CurrentRecordBundle.RecordValue("浜屽彿绠�", pipe_press2, 4));
+            }
+
+            var pipe_flow1 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_涓�鍙风娴侀噺);
+            var pipe_flow2 = monitor_records.Find(x => x.MonitorPointID == _monitor_id_浜屽彿绠℃祦閲�);
+            if (pipe_flow1 != null && pipe_flow2 != null)
+            {
+                bundle.FlowList = new List<Model.CurrentRecordBundle.RecordValue>();
+                bundle.FlowList.Add(new Model.CurrentRecordBundle.RecordValue("涓�鍙风", pipe_flow1, 0));
+                bundle.FlowList.Add(new Model.CurrentRecordBundle.RecordValue("浜屽彿绠�", pipe_flow2, 0));
+            }
+
+             
+            return bundle;
+        }
+
+ 
+         
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\272\214\350\276\223/KeepStatus.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\272\214\350\276\223/KeepStatus.cs"
new file mode 100644
index 0000000..d8dfbe7
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\272\214\350\276\223/KeepStatus.cs"
@@ -0,0 +1,193 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 闄堣浜岃緭娉电珯璋冨害鏂规璁$畻鍣�
+    /// </summary>
+    internal class Calculator_KeepStatus_SHYS_闄堣浜岃緭 : CalculatorBase_SHYS_闄堣浜岃緭, IKeepStatusCalc
+    {
+        public Calculator_KeepStatus_SHYS_闄堣浜岃緭()
+        {
+
+        }
+        Model.RequestParasComplex _request_paras;
+        List<long> _open_machine_IdList ;
+
+        List<Model.MachineDetail> _allMachineList = null;
+        /// <summary>
+        /// 鍒濆鍖栧弬鏁�
+        /// </summary>
+        /// <param name="complex_request_paras"></param>
+        /// <param name="eta_ana_records"></param>
+        /// <param name="open_machine_ids"></param>
+        public  void IntialRequest(
+            IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+            IStation.Calculation.DispatchAna.Model.EtaAnaRecord4Station eta_ana_records,
+            List<long> open_machine_ids)
+        {
+            this._request_paras = complex_request_paras;
+            this._open_machine_IdList = open_machine_ids;
+        }
+
+
+
+
+        /// <summary>
+        /// 璁$畻淇濇寔褰撳墠寮�鏈虹姸鎬�
+        /// </summary> 
+        /// <param name="error_info">閿欒淇℃伅</param>
+        /// <returns></returns>
+        public Model.AnaScheme Calc(out string error_info)
+        {
+            if (_open_machine_IdList == null || _open_machine_IdList.Count == 0)
+            {
+                error_info = "ERROR 25";
+                return null;
+            }
+            error_info = null;
+            if (_request_paras == null)
+            {
+                error_info = "ERROR 30";
+                return null;
+            }
+
+            if (_request_paras.OutletPipePara == null || _request_paras.OutletPipePara.Count < 2)
+            {
+                error_info = "ERROR 35";
+                return null;
+            }
+            double pipe1_TargetFlow = _request_paras.OutletPipePara[0].TargetFlow;
+            double pipe2_TargetFlow = _request_paras.OutletPipePara[1].TargetFlow;
+            if (pipe1_TargetFlow < 10 && pipe2_TargetFlow < 10)
+            {
+                return default;
+            }
+
+            double pipe1_TargetPess = _request_paras.OutletPipePara[0].TargetPress;
+            double pipe2_TargetPess = _request_paras.OutletPipePara[1].TargetPress;
+            if (pipe1_TargetFlow > 50)
+            {
+                if (pipe1_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,闄堣浜岃緭闇�瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe2_TargetFlow > 50)
+            {
+                if (pipe2_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,闄堣浜岃緭闇�瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+
+            double water_level = 0;//姘翠綅
+            if (_request_paras.InletPipePara != null && _request_paras.InletPipePara.Count > 0)
+            {
+                    water_level = _request_paras.InletPipePara[0].Value;
+            }
+
+            //鏈烘车淇℃伅
+            if(_allMachineList == null)
+            {
+                if (!BuildMachineList(
+                    out _allMachineList,
+                    out error_info))
+                {
+                    error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
+                    return null;
+                }
+            }
+
+
+
+
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe2_helper
+                = new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+            if (pipe2_TargetFlow < 30)
+            {//鍙紑涓�鍙锋车浜屽彿娉�   
+                calc_pipe1_helper.InitialParas(
+                    pipe1_TargetFlow,
+                    water_level, true,
+                    pipe1_TargetPess, false,
+                    null, null,
+                    (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(), null);
+
+                return calc_pipe1_helper.CalcKeepStatus(_open_machine_IdList);
+            }
+            else if (pipe1_TargetFlow < 30)
+            {
+                calc_pipe2_helper.InitialParas(
+                    pipe2_TargetFlow,
+                    water_level,true ,
+                    pipe2_TargetPess,false ,
+                    null, null,
+                    (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(), null);
+
+                return calc_pipe2_helper.CalcKeepStatus(_open_machine_IdList);
+            }
+
+
+
+
+            calc_pipe1_helper.InitialParas(
+                pipe1_TargetFlow,
+                water_level, true,
+                pipe1_TargetPess, false,
+                 null, null,
+                (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(), null);
+            var pipe1_result = calc_pipe1_helper.CalcKeepStatus(_open_machine_IdList);
+            if (pipe1_result == null)
+            {
+                error_info = "绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�";
+                return null;
+            }
+
+            calc_pipe2_helper.InitialParas(
+                pipe2_TargetFlow,
+                water_level, true,
+                pipe2_TargetPess, true,
+                null, null,
+                (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(), null);
+
+            var pipe2_result = calc_pipe2_helper.CalcKeepStatus(_open_machine_IdList);
+            if (pipe2_result == null)
+            {
+                error_info = "绠¤矾浜岃皟搴︽柟妗堟棤娉曡绠楄纭鏁版嵁鏄惁鍚堢悊";
+                return null;
+            }
+
+
+
+            var connect_scheme = new Model.AnaScheme();
+            connect_scheme.ID = 1;
+            connect_scheme.TotalWrkQ = pipe1_result.TotalWrkQ + pipe2_result.TotalWrkQ;
+            connect_scheme.TotalWrkH = (pipe1_result.TotalWrkH + pipe2_result.TotalWrkH) / 2;
+            connect_scheme.TotalWrkP = pipe1_result.TotalWrkP + pipe2_result.TotalWrkP;
+            connect_scheme.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH, connect_scheme.TotalWrkP);
+            connect_scheme.UWP = CalculateUWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ, connect_scheme.TotalWrkH);
+            connect_scheme.WP = CalculateWP(connect_scheme.TotalWrkP, connect_scheme.TotalWrkQ);
+
+            connect_scheme.Items = new List<Model.AnaSchemeItem>();
+            if (pipe1_result.Items != null && pipe1_result.Items.Count > 0)
+                connect_scheme.Items.AddRange(pipe1_result.Items);
+            if (pipe2_result.Items != null && pipe2_result.Items.Count > 0)
+                connect_scheme.Items.AddRange(pipe2_result.Items);
+
+
+            return connect_scheme;
+
+        }
+    }
+}
diff --git "a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\272\214\350\276\223/OptAna.cs" "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\272\214\350\276\223/OptAna.cs"
new file mode 100644
index 0000000..22a7112
--- /dev/null
+++ "b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/\351\231\210\350\241\214\344\272\214\350\276\223/OptAna.cs"
@@ -0,0 +1,366 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Numerics;
+using System.Text;
+using System.Threading.Tasks;
+using IStation.Calculation.DispatchAna.Model;
+
+namespace IStation.Calculation.DispatchAna
+{
+    /// <summary>
+    /// 闄堣浜岃緭璋冨害鏂规璁$畻鍣�(鏈�浼樻柟妗�)
+    /// </summary>
+    public  class Calculator_OptAna_SHYS_闄堣浜岃緭: CalculatorBase_SHYS_闄堣浜岃緭, IOptAnaCalc
+    {
+        List<Model.MachineDetail> _allMachineList = null;
+
+
+        /// <summary>
+        /// /
+        /// </summary>
+        public Calculator_OptAna_SHYS_闄堣浜岃緭()
+        {
+
+        }
+       
+
+        #region 璁$畻 鏈�浼樻柟妗� 
+        /// <summary>
+        /// 璁$畻 鏈�浼樻柟妗� 
+        /// </summary>
+        /// <param name="complex_request_paras"></param>
+        /// <param name="eta_ana_records"></param>
+        /// <param name="machine_run_status"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        public List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcSchemes(
+            IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+            IStation.Calculation.DispatchAna.Model.EtaAnaRecord4Station eta_ana_records,
+            IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
+            out string error_info)
+        {
+            this._corpID = complex_request_paras.CorpID;
+            this._stationID = complex_request_paras.StationID;
+
+ 
+
+
+            var isUsePress = complex_request_paras.PressValueType == Model.RequestParasComplex.ePressValueType.鍘嬪姏 ? true : false;
+
+     
+            if (isUsePress)
+                return CalcSchemes鍘嬪姏(complex_request_paras, machine_run_status, out error_info);
+            else
+                return CalcSchemes鎵▼(complex_request_paras, machine_run_status, out error_info);
+        }
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="complex_request_paras"></param>
+        /// <param name="machine_run_status"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        protected override  List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcSchemes鍘嬪姏(
+                    IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+                    IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
+                    out string error_info)
+        {
+            error_info = "";
+            if (complex_request_paras == null)
+            {
+                error_info = "ERROR 30";
+                return null;
+            }
+            if (complex_request_paras.OutletPipePara == null ||
+                complex_request_paras.OutletPipePara.Count < 2)
+            {
+                error_info = "ERROR 35,闄堣浜岃緭闇�瑕佷袱涓璺殑娴侀噺";
+                return null;
+            }
+
+            double pipe1_TargetFlow = complex_request_paras.OutletPipePara[0].TargetFlow;
+            double pipe2_TargetFlow = complex_request_paras.OutletPipePara[1].TargetFlow;
+            if (pipe1_TargetFlow < 50 && pipe2_TargetFlow < 50)
+            {//閮藉叧鏈�
+                error_info = "ERROR 35,闄堣浜岃緭闇�瑕佷袱涓璺殑娴侀噺閮戒负0";
+                return null;
+            }
+
+            double pipe1_TargetPess = complex_request_paras.OutletPipePara[0].TargetPress;
+            double pipe2_TargetPess = complex_request_paras.OutletPipePara[1].TargetPress;
+            if (pipe1_TargetFlow > 50)
+            {
+                if (pipe1_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,闄堣浜岃緭闇�瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe2_TargetFlow > 50)
+            {
+                if (pipe2_TargetPess < 0.01)
+                {
+                    error_info = "ERROR 35,闄堣浜岃緭闇�瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            double water_level = 0;//姘翠綅
+            if (complex_request_paras.InletPipePara != null && complex_request_paras.InletPipePara.Count > 0)
+            {
+             
+                    water_level = complex_request_paras.InletPipePara[0].Value;
+                 
+            }
+
+
+            //鏈烘车淇℃伅
+            if (_allMachineList == null)
+            {
+                if (!BuildMachineList(
+                    out _allMachineList,
+                    out error_info))
+                {
+                    error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
+                    return null;
+                }
+            }
+
+ 
+   
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe1_helper =
+     new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+            Common.DispatchAnaGeneralHelper鍘嬪姏 calc_pipe2_helper =
+      new Common.DispatchAnaGeneralHelper鍘嬪姏();
+
+            if (pipe2_TargetFlow < 50)
+            {//鍙紑涓�鍙锋车浜屽彿娉�
+                calc_pipe1_helper.InitialParas(
+                    pipe1_TargetFlow,
+                    water_level,true ,
+                    pipe1_TargetPess,false ,
+                    null, null,
+                    (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+                   machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                return calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+            }
+            else if (pipe1_TargetFlow < 50)
+            {
+                calc_pipe2_helper.InitialParas(
+                    pipe2_TargetFlow,
+                    water_level, true,
+                    pipe2_TargetPess, false,
+                    null, null,
+                 (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+                 machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                return calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+            }
+            calc_pipe1_helper.InitialParas(
+                pipe1_TargetFlow,
+                water_level,true ,
+                pipe1_TargetPess,false ,
+              null, null,
+             (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+            machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+            var pipe1_result = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+            if (pipe1_result == null)
+            {
+                error_info = String.Format("绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,娑蹭綅:{0}m,鍑哄彛鍘嬪姏:{1}MPa,娴侀噺瑕佹眰:{2}",
+             water_level, pipe1_TargetPess, pipe1_TargetFlow);
+                return null;
+            }
+
+            calc_pipe2_helper.InitialParas(
+                pipe2_TargetFlow,
+                water_level, true,
+                pipe2_TargetPess, false,
+                null, null,
+             (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+            machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+            var pipe2_result = calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+            if (pipe2_result == null)
+            {
+                error_info = String.Format("绠¤矾2璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�,娑蹭綅:{0}m,鍑哄彛鍘嬪姏:{1}MPa,娴侀噺瑕佹眰:{2}",
+    water_level, pipe2_TargetPess, pipe2_TargetFlow);
+                return null;
+            }
+
+            var result_1 = pipe1_result.First();
+            var result_2 = pipe2_result.First();
+
+            var plan = new Model.AnaScheme();
+            plan.ID = 1;
+            plan.TotalWrkQ = result_1.TotalWrkQ + result_2.TotalWrkQ;
+            plan.TotalWrkH = result_1.TotalWrkH + result_2.TotalWrkH;
+            plan.TotalWrkP = result_1.TotalWrkP + result_2.TotalWrkP;
+            plan.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(plan.TotalWrkQ, plan.TotalWrkH, plan.TotalWrkP);
+            plan.UWP = CalculateUWP(plan.TotalWrkP, plan.TotalWrkQ, plan.TotalWrkH);
+            plan.WP = CalculateWP(plan.TotalWrkP, plan.TotalWrkQ);
+
+            plan.Items = new List<Model.AnaSchemeItem>();
+            if (result_1.Items != null && result_1.Items.Count > 0)
+                plan.Items.AddRange(result_1.Items);
+            if (result_2.Items != null && result_2.Items.Count > 0)
+                plan.Items.AddRange(result_2.Items);
+
+
+            return new List<Model.AnaScheme>() { plan };   
+        }
+
+
+        private List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcSchemes鎵▼(
+                    IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
+                    IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
+                    out string error_info)
+        {
+            error_info = "";
+            if (complex_request_paras == null)
+            {
+                error_info = "ERROR 30";
+                return null;
+            }
+            if (complex_request_paras.OutletPipePara == null ||
+                complex_request_paras.OutletPipePara.Count < 2)
+            {
+                error_info = "ERROR 35,闄堣浜岃緭闇�瑕佷袱涓璺殑娴侀噺";
+                return null;
+            }
+
+            double pipe1_TargetFlow = complex_request_paras.OutletPipePara[0].TargetFlow;
+            double pipe2_TargetFlow = complex_request_paras.OutletPipePara[1].TargetFlow;
+            if (pipe1_TargetFlow < 50 && pipe2_TargetFlow < 50)
+            {//閮藉叧鏈�
+                error_info = "ERROR 35,闄堣浜岃緭闇�瑕佷袱涓璺殑娴侀噺 閮戒负0";
+                return null;
+            }
+
+            double pipe1_TargetHead = complex_request_paras.OutletPipePara[0].TargetPress;
+            double pipe2_TargetHead = complex_request_paras.OutletPipePara[1].TargetPress;
+
+            if (pipe1_TargetFlow > 50)
+            {
+                if (pipe1_TargetHead < 0.01)
+                {
+                    error_info = "ERROR 35,闄堣浜岃緭闇�瑕佷竴鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+            if (pipe2_TargetFlow > 50)
+            {
+                if (pipe2_TargetHead < 0.01)
+                {
+                    error_info = "ERROR 35,闄堣浜岃緭闇�瑕佷簩鍙风鍘嬪姏鏈祴鍊�";
+                    return default;
+                }
+            }
+
+
+
+            //鏈烘车淇℃伅
+            if (_allMachineList == null)
+            {
+                if (!BuildMachineList(
+                out _allMachineList,
+                out error_info))
+                {
+                    error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
+                    return null;
+                }
+            }
+
+
+
+
+
+
+            Common.DispatchAnaGeneralHelper鎵▼ calc_pipe1_helper =
+     new Common.DispatchAnaGeneralHelper鎵▼();
+
+            Common.DispatchAnaGeneralHelper鎵▼ calc_pipe2_helper =
+      new Common.DispatchAnaGeneralHelper鎵▼();
+
+            if (pipe2_TargetFlow < 50)
+            {//鍙紑涓�鍙锋车浜屽彿娉�
+                calc_pipe1_helper.InitialParas(
+                    pipe1_TargetFlow,
+                    pipe1_TargetHead,
+                    null, null,
+                    (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+                machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                return calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+            }
+            else if (pipe1_TargetFlow < 50)
+            {
+                calc_pipe2_helper.InitialParas(
+                    pipe2_TargetFlow,
+                    pipe2_TargetHead,
+                    null, null,
+                 (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+                machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+                return calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+            }
+            calc_pipe1_helper.InitialParas(
+                pipe1_TargetFlow,
+                pipe1_TargetHead,
+              null, null,
+             (from x in _allMachineList where pipe1_machineIds.Contains(x.MachineID) select x).ToList(),
+           machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+            var pipe1_result = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+            if (pipe1_result == null)
+            {
+                error_info = String.Format("绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�, 娴侀噺瑕佹眰:{1},鎵▼{0}m",
+                 pipe1_TargetFlow, pipe1_TargetHead);
+                return null;
+            }
+
+            calc_pipe2_helper.InitialParas(
+                    pipe2_TargetFlow,
+                    pipe2_TargetHead,
+                    null, null,
+                 (from x in _allMachineList where pipe2_machineIds.Contains(x.MachineID) select x).ToList(),
+                 machine_run_status == null ? null : machine_run_status.MachineRunFilter);
+
+            var pipe2_result = calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
+            if (pipe2_result == null)
+            {
+                error_info = String.Format("绠¤矾涓�璋冨害鏂规鏃犳硶璁$畻,璇风‘璁ゆ暟鎹槸鍚﹀悎鐞�, 娴侀噺瑕佹眰:{1},鎵▼{0}m",
+                 pipe2_TargetFlow, pipe2_TargetHead);
+                return null;
+            }
+
+            var result_1 = pipe1_result.First();
+            var result_2 = pipe2_result.First();
+
+            var plan = new Model.AnaScheme();
+            plan.ID = 1;
+            plan.TotalWrkQ = result_1.TotalWrkQ + result_2.TotalWrkQ;
+            plan.TotalWrkH = (result_1.TotalWrkH + result_2.TotalWrkH)/2;
+            plan.TotalWrkP = result_1.TotalWrkP + result_2.TotalWrkP;
+            plan.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(plan.TotalWrkQ, plan.TotalWrkH, plan.TotalWrkP);
+            plan.UWP = CalculateUWP(plan.TotalWrkP, plan.TotalWrkQ, plan.TotalWrkH);
+            plan.WP = CalculateWP(plan.TotalWrkP, plan.TotalWrkQ);
+
+            plan.Items = new List<Model.AnaSchemeItem>();
+            if (result_1.Items != null && result_1.Items.Count > 0)
+                plan.Items.AddRange(result_1.Items);
+            if (result_2.Items != null && result_2.Items.Count > 0)
+                plan.Items.AddRange(result_2.Items);
+
+
+            return new List<Model.AnaScheme>() { plan };
+        }
+
+        #endregion
+
+
+
+
+    }
+}
diff --git a/Calculation/IStation.Calculation.Dispatch/general/KeepStatus.cs b/Calculation/IStation.Calculation.Dispatch/general/KeepStatus.cs
index c73b3db..d55b94b 100644
--- a/Calculation/IStation.Calculation.Dispatch/general/KeepStatus.cs
+++ b/Calculation/IStation.Calculation.Dispatch/general/KeepStatus.cs
@@ -73,9 +73,9 @@
             }
 
             double water_level = 0;//姘翠綅
-            if (_request_paras.WaterLevelPara != null && _request_paras.WaterLevelPara.Count > 0)
+            if (_request_paras.InletPipePara != null && _request_paras.InletPipePara.Count > 0)
             {
-                water_level = _request_paras.WaterLevelPara.First().Value;
+                water_level = _request_paras.InletPipePara.First().Value;
             }
     
             if (_request_paras.ValvePara == null || _request_paras.ValvePara.Count < 1)
@@ -97,8 +97,8 @@
                 new IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper鍘嬪姏();
             calc_pipe_helper.InitialParas(
                 target_flow,
-                water_level,
-                target_press,
+                water_level,true,
+                target_press,false,
                 _request_paras.OutletPipePara[0].TargetFlowRangeMin,
                 _request_paras.OutletPipePara[0].TargetFlowRangeMax,
                 allMachineList, null);
diff --git a/Calculation/IStation.Calculation.Dispatch/general/OptAna.cs b/Calculation/IStation.Calculation.Dispatch/general/OptAna.cs
index bf4a6e1..3623389 100644
--- a/Calculation/IStation.Calculation.Dispatch/general/OptAna.cs
+++ b/Calculation/IStation.Calculation.Dispatch/general/OptAna.cs
@@ -13,6 +13,7 @@
     public  class Calculator_OptAna_General : CalculatorOptAnaBase, IOptAnaCalc
     {
         List<IStation.Calculation.DispatchAna.Model.MachineDetail> allMachineList = null;
+
         #region 璁$畻 鏈�浼樻柟妗� 
         /// <summary>
         /// 璁$畻 鏈�浼樻柟妗� 
@@ -26,8 +27,7 @@
             IStation.Calculation.DispatchAna.Model.EtaAnaRecord4Station eta_ana_records,
             IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
             out string error_info)
-        {
-
+        { 
             var isUsePress = complex_request_paras.PressValueType == Model.RequestParasComplex.ePressValueType.鍘嬪姏 ? true : false;
 
             if (eta_ana_records != null && eta_ana_records.Q.HasValue && eta_ana_records.H.HasValue)
@@ -107,9 +107,13 @@
             }
 
             double water_level = 0;//姘翠綅
-            if (complex_request_paras.WaterLevelPara != null && complex_request_paras.WaterLevelPara.Count > 0)
+            if (complex_request_paras.InletPipePara != null && complex_request_paras.InletPipePara.Count > 0)
             {
-                water_level = complex_request_paras.WaterLevelPara.First().Value;
+                water_level = complex_request_paras.InletPipePara.First().Value;
+                if (!complex_request_paras.InletPipePara.First().IsWaterLevel)
+                {//鎹㈡垚M
+                    water_level = water_level * 102;
+                }
             }
 
 
@@ -132,8 +136,8 @@
                 new IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper鍘嬪姏();
             calc_pipe_helper.InitialParas(
                 target_flow,
-                water_level,
-                target_press,
+                water_level,true ,
+                target_press,false ,
                 complex_request_paras.OutletPipePara[0].TargetFlowRangeMin,
                 complex_request_paras.OutletPipePara[0].TargetFlowRangeMax,
                 allMachineList,
diff --git "a/Calculation/IStation.Calculation.Dispatch/helper/DispatchAnaGeneralHelper\345\216\213\345\212\233.cs" "b/Calculation/IStation.Calculation.Dispatch/helper/DispatchAnaGeneralHelper\345\216\213\345\212\233.cs"
index fdd7862..f4d3da2 100644
--- "a/Calculation/IStation.Calculation.Dispatch/helper/DispatchAnaGeneralHelper\345\216\213\345\212\233.cs"
+++ "b/Calculation/IStation.Calculation.Dispatch/helper/DispatchAnaGeneralHelper\345\216\213\345\212\233.cs"
@@ -65,20 +65,41 @@
         /// 鍒濆鍖栧弬鏁�
         /// </summary>
         /// <param name="targetQ"></param>
-        /// <param name="water_level"></param>
-        /// <param name="outlet_press"></param>
+        /// <param name="inlet_para"></param>
+        /// <param name="inlet_is_waterlevel"></param>
+        /// <param name="outlet_para"></param>
+        /// <param name="outlet_is_waterlevel"></param>
         /// <param name="MinQ"></param>
         /// <param name="MaxQ"></param>
         /// <param name="allEnginePumpList"></param>
         /// <param name="MachineRunFilterList"></param>
         /// <returns></returns>
         public bool InitialParas(
-            double targetQ, double water_level, double outlet_press, string MinQ, string MaxQ,
+            double targetQ, 
+            double inlet_para,bool inlet_is_waterlevel,
+            double outlet_para,bool outlet_is_waterlevel,
+            string MinQ, string MaxQ,
             List<IStation.Calculation.DispatchAna.Model.MachineDetail> allEnginePumpList,
             List<IStation.Calculation.DispatchAna.Model.MachineRunFilter> MachineRunFilterList)
-        {
-            this._targetInletPress = Math.Round(water_level / 102, 4);
-            this._targetOutletPress = outlet_press;
+        { 
+            if (inlet_is_waterlevel)
+            {
+                this._targetInletPress = Math.Round(inlet_para / 102, 4);
+            }
+            else
+            {
+                this._targetInletPress = Math.Round(inlet_para, 4);
+            }
+
+            if (outlet_is_waterlevel)
+            {
+                this._targetOutletPress = Math.Round(outlet_para / 102, 4);
+            }
+            else
+            {
+                this._targetOutletPress = outlet_para;
+            }
+
             this._targetQ = targetQ;
             this._allMachineList = allEnginePumpList;
 
@@ -283,51 +304,66 @@
 
             #region  寮�濮嬪垎鏋�
             _anaSchemeList = new List<IStation.Calculation.DispatchAna.Model.AnaScheme>();
-
-            int max_fre_num = 2;//鏈�澶氬彉棰�2鍙�, 鍏朵綑鐨勫嵆浣垮彉棰�,涔熸寜50HZ杩愯
-            var arry_allMachineList = all_machine_ana_result_list.ToArray();
-            for (int openPumpNum = 1; openPumpNum <= all_machine_ana_result_list.Count(); openPumpNum++)
+            if (all_machine_ana_result_list.Count() == 0)
             {
-                //寰楀埌鎵�鏈夋帓鍒楃粍鍚� 
-                List<IStation.Calculation.DispatchAna.Model.PumpAnaDataBase[]> open_machine_combine_list =
-                    IStation.Model.PermutationAndCombination<IStation.Calculation.DispatchAna.Model.PumpAnaDataBase>.GetCombination(
-                        arry_allMachineList, openPumpNum);
-
-
-                foreach (var open_machine_list in open_machine_combine_list)
+                return null;
+            }
+            else if (all_machine_ana_result_list.Count() == 1)
+            {
+                var first_pump = all_machine_ana_result_list.First();
+                first_pump.AsFrequency = true;
+                IStation.Calculation.DispatchAna.Model.PumpAnaDataBase[] open_machine_list = new
+                     IStation.Calculation.DispatchAna.Model.PumpAnaDataBase[] { first_pump };
+                AnaMahineComb(open_machine_list);
+            }
+            else
+            {
+                int max_fre_num = 2;//鏈�澶氬彉棰�2鍙�, 鍏朵綑鐨勫嵆浣垮彉棰�,涔熸寜50HZ杩愯
+                var arry_allMachineList = all_machine_ana_result_list.ToArray();
+                for (int openPumpNum = 1; openPumpNum <= all_machine_ana_result_list.Count(); openPumpNum++)
                 {
-                    var fre_machines = (from x in open_machine_list where x.IsFrequency select x).ToArray();
+                    //寰楀埌鎵�鏈夋帓鍒楃粍鍚� 
+                    List<IStation.Calculation.DispatchAna.Model.PumpAnaDataBase[]> open_machine_combine_list =
+                        IStation.Model.PermutationAndCombination<IStation.Calculation.DispatchAna.Model.PumpAnaDataBase>.GetCombination(
+                            arry_allMachineList, openPumpNum);
 
-                    if (fre_machines.Count() > max_fre_num)
-                    {//鏈�澶氭妸2鍙版车褰撲綔鍙橀娉佃繍琛�, 鍏朵綑鎸夊伐棰戞车杩愯
-                        List<IStation.Calculation.DispatchAna.Model.PumpAnaDataBase[]> real_fre_machine_combine_list =
-             IStation.Model.PermutationAndCombination<IStation.Calculation.DispatchAna.Model.PumpAnaDataBase>.GetCombination(
-             fre_machines, max_fre_num);//鎺掑垪缁勫悎,鎵鹃噷闈㈢殑2鍙�
 
-                        foreach (var real_fre_machine_list in real_fre_machine_combine_list)
+                    foreach (var open_machine_list in open_machine_combine_list)
+                    {
+                        var fre_machines = (from x in open_machine_list where x.IsFrequency select x).ToArray();
+
+                        if (fre_machines.Count() > max_fre_num)
+                        {//鏈�澶氭妸2鍙版车褰撲綔鍙橀娉佃繍琛�, 鍏朵綑鎸夊伐棰戞车杩愯
+                            List<IStation.Calculation.DispatchAna.Model.PumpAnaDataBase[]> real_fre_machine_combine_list =
+                 IStation.Model.PermutationAndCombination<IStation.Calculation.DispatchAna.Model.PumpAnaDataBase>.GetCombination(
+                 fre_machines, max_fre_num);//鎺掑垪缁勫悎,鎵鹃噷闈㈢殑2鍙�
+
+                            foreach (var real_fre_machine_list in real_fre_machine_combine_list)
+                            {
+                                foreach (var m in fre_machines)
+                                {//鍏堟妸鎵�鏈夊彉棰戞车褰撲綔宸ラ娉�
+                                    m.AsFrequency = false;
+                                }
+                                foreach (var m in real_fre_machine_list)
+                                {//鎶婃帓鍒楃粍鍚堜腑鐨勪袱鍙拌缃綅鍙橀娉�
+                                    m.AsFrequency = true;
+                                }
+                                AnaMahineComb(open_machine_list);
+                            }
+
+                        }
+                        else
                         {
                             foreach (var m in fre_machines)
-                            {//鍏堟妸鎵�鏈夊彉棰戞车褰撲綔宸ラ娉�
-                                m.AsFrequency = false;
-                            }
-                            foreach (var m in real_fre_machine_list)
-                            {//鎶婃帓鍒楃粍鍚堜腑鐨勪袱鍙拌缃綅鍙橀娉�
+                            {
                                 m.AsFrequency = true;
                             }
                             AnaMahineComb(open_machine_list);
                         }
-
-                    }
-                    else
-                    {
-                        foreach (var m in fre_machines)
-                        {
-                            m.AsFrequency = true;
-                        }
-                        AnaMahineComb(open_machine_list);
                     }
                 }
             }
+
 
             #endregion
             if (_anaSchemeList.Count() == 0)
@@ -409,15 +445,18 @@
                     fixPumpAnaCombine.Add(machine);
                 }
             }
+            if (fre_pump_count > 0)
+            {
+                if (total_min_flow > _targetQmax)
+                {
+                    return;
+                }
+                if (total_max_flow < _targetQmin)
+                {
+                    return;
+                }
+            }
 
-            if (total_min_flow > _targetQmax)
-            {
-                return;
-            }
-            if (total_max_flow < _targetQmin)
-            {
-                return;
-            }
 
             if (fre_pump_count == 0)
             {//鍙敤鍥洪娉靛嵆鍙�
diff --git a/Calculation/IStation.Calculation.Dispatch/input/WaterLevelPara.cs b/Calculation/IStation.Calculation.Dispatch/input/InletPipePara.cs
similarity index 71%
rename from Calculation/IStation.Calculation.Dispatch/input/WaterLevelPara.cs
rename to Calculation/IStation.Calculation.Dispatch/input/InletPipePara.cs
index 67ad288..bb313bd 100644
--- a/Calculation/IStation.Calculation.Dispatch/input/WaterLevelPara.cs
+++ b/Calculation/IStation.Calculation.Dispatch/input/InletPipePara.cs
@@ -9,20 +9,26 @@
     /// <summary>
     /// 
     /// </summary>
-    public class WaterLevelPara
+    public class InletPipePara
     {
         /// <summary>
         /// 
         /// </summary>
-        public WaterLevelPara() { }
+        public InletPipePara() { IsWaterLevel = true; }
         /// <summary>
         /// 
         /// </summary>
         /// <param name="v"></param>
-        public WaterLevelPara (double v)
+        public InletPipePara (double v)
         {
             this.Value = v; 
         }
+
+        /// <summary>
+        /// 鏄惁鏄按浣�
+        /// </summary>
+        public bool IsWaterLevel { get; set; } = true;
+
         /// <summary>
         /// 
         /// </summary>
diff --git a/Calculation/IStation.Calculation.Dispatch/input/OutletPipePara.cs b/Calculation/IStation.Calculation.Dispatch/input/OutletPipePara.cs
index 388df7b..43e6166 100644
--- a/Calculation/IStation.Calculation.Dispatch/input/OutletPipePara.cs
+++ b/Calculation/IStation.Calculation.Dispatch/input/OutletPipePara.cs
@@ -14,7 +14,7 @@
         /// <summary>
         /// 
         /// </summary>
-        public OutletPipePara() { }
+        public OutletPipePara() { IsWaterLevel = false ; }
         
         /// <summary>
         /// 
@@ -34,6 +34,11 @@
         public string Name { get; set; }
 
         /// <summary>
+        /// 鏄惁鏄按浣�
+        /// </summary>
+        public bool IsWaterLevel { get; set; } = false ;
+
+        /// <summary>
         /// 闃�闂ㄧ姸鎬� 1 寮� 0 鍏�
         /// </summary>
         public int ValveStatus { get; set; }
diff --git a/Calculation/IStation.Calculation.Dispatch/input/RequestParasComplex.cs b/Calculation/IStation.Calculation.Dispatch/input/RequestParasComplex.cs
index d622d07..dcedec6 100644
--- a/Calculation/IStation.Calculation.Dispatch/input/RequestParasComplex.cs
+++ b/Calculation/IStation.Calculation.Dispatch/input/RequestParasComplex.cs
@@ -60,6 +60,11 @@
         /// </summary>
         public List<OutletPipePara> OutletPipePara { get; set; }
 
+        /// <summary>
+        /// 杩涘彛绠¤矾
+        /// </summary>
+        public List<InletPipePara> InletPipePara { get; set; }
+
 
         /// <summary>
         /// 闃�闂ㄧ姸鎬�(涓嶅惈鍑哄彛绠¤矾鐨勯榾闂ㄧ姸鎬�)
@@ -67,10 +72,7 @@
         public List<ValvePara> ValvePara { get; set; }
 
 
-        /// <summary>
-        /// 姘翠綅鍙傛暟
-        /// </summary>
-        public List<WaterLevelPara> WaterLevelPara { get; set; }
+
 
 
 

--
Gitblit v1.9.3