From 6b437da7145139fda9cbff0acaa5b8e2295d11cd Mon Sep 17 00:00:00 2001
From: tangxu <76880903@qq.com>
Date: 星期六, 08 十月 2022 10:55:23 +0800
Subject: [PATCH] 添加 能效计划

---
 Calculation/IStation.Calculation.Dispatch/IStation.Calculation.Dispatch.csproj        |    3 
 Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs          |  166 +++-----
 Calculation/IStation.Calculation.Dispatch/general/Calculator.cs                       |   76 +--
 Calculation/IStation.Calculation.Dispatch/input/OutletPipePara.cs                     |    2 
 Application/IStation.Application.Eta/dispatch_analy/dto/Dto.cs                        |  133 +++++--
 Calculation/IStation.Calculation.Dispatch/input/RequestParasComplex.cs                |   24 +
 Application/IStation.Application.OpenApi/IStation.Application.OpenApi.csproj          |    1 
 Application/IStation.Application.OpenApi/shys/dispatch/DispatchAna_ShysController.cs  |   12 
 Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaDto.cs                  |    2 
 Calculation/IStation.Calculation.Dispatch/DispatchAnalyCalculatorFactory.cs           |   95 ++++
 Application/IStation.Application.Eta/dispatch_analy/ParallelConnect_StdController.cs  |    8 
 Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaTransfer.cs             |   12 
 /dev/null                                                                             |   45 --
 Calculation/IStation.EtaCalculation4Custom/shys/station/EtaAnalyCalculator4长兴岛输水泵房.cs |  100 ++--
 Application/IStation.Application.Eta/dispatch_analy/DispatchAnaly_StdController.cs    |  108 ++---
 Calculation/IStation.Calculation.Dispatch/Model/MachineDetail.cs                      |    2 
 Calculation/IStation.Calculation.Plan/IStation.Calculation.Plan.csproj                |   17 
 Application/IStation.Application.Eta/dispatch_analy/dto/StationCurrentInfo.cs         |    4 
 Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaConstant.cs             |   67 +--
 Application/IStation.Application.Eta/dispatch_analy/dto/StationEtaAnaRecord.cs        |   38 ++
 Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaInput.cs                |    2 
 Entry/IStation.WebApi.Entry/IStation.WebApi.Entry.csproj                              |   17 
 IStation.WebApi.Dispatch.sln                                                          |  126 -------
 23 files changed, 498 insertions(+), 562 deletions(-)

diff --git a/Application/IStation.Application.Eta/dispatch_analy/DispatchAnaly_StdController.cs b/Application/IStation.Application.Eta/dispatch_analy/DispatchAnaly_StdController.cs
index e8c7dc5..f7fdedb 100644
--- a/Application/IStation.Application.Eta/dispatch_analy/DispatchAnaly_StdController.cs
+++ b/Application/IStation.Application.Eta/dispatch_analy/DispatchAnaly_StdController.cs
@@ -24,7 +24,7 @@
         /// </summary>
         [Route("GetCurrentInfo@V1.0")]
         [HttpGet]
-        public  IStation.Dto.ApiResult GetCurrentInfo([FromQuery][Required] StationIDUnderCorpInput input)
+        public IStation.Dto.ApiResult GetCurrentInfo([FromQuery][Required] StationIDUnderCorpInput input)
         {
             var pipeLineList = new Service.PipeLine().GetByBelongTypeAndBelongID(input.CorpID, IStation.ObjectType.Station, input.StationID);
             if (pipeLineList == null || pipeLineList.Count < 1)
@@ -77,27 +77,31 @@
             vm_ana_result.Name = string.Join(",", name_list);
 
 
-            IStation.Calculation.IDispatchAnalyCalculator calc_helper =
-                IStation.Calculation.DispatchAnalyCalculatorFactory.CreateCalculator(input.CorpID,
-                IStation.ObjectType.Station,
-                input.StationID, null);
+            IStation.Calculation.DispatchAna.IGetCurrentRecord calc_helper =
+                IStation.Calculation.DispatchAnalyCalculatorFactory.CreateGetCurrentRecord(
+                    input.CorpID, IStation.ObjectType.Station,
+                    input.StationID);
             if (calc_helper == null)
             {
-                return new Dto.ApiResult<IStation.Dto.DispatchAna.StationCurrentInfo>( new IStation.Dto.DispatchAna.StationCurrentInfo(vm_ana_result));
+                return new Dto.ApiResult<IStation.Dto.DispatchAna.StationCurrentInfo>(new IStation.Dto.DispatchAna.StationCurrentInfo(vm_ana_result));
+            }
+
+            string error_info = null;
+            var current_dispatch_info = calc_helper.GetCurrentRecord(input.CorpID, input.StationID, out error_info);
+            if (current_dispatch_info == null)
+            {
+                return new Dto.ApiResult<IStation.Dto.DispatchAna.StationCurrentInfo>(
+                    new IStation.Dto.DispatchAna.StationCurrentInfo(vm_ana_result));
             }
             else
             {
-                string error_info = null;
-                var current_dispatch_info = calc_helper.GetCurrentRecord(input.CorpID, input.StationID, out error_info);
-                if(current_dispatch_info == null)
-                {
-                    return new Dto.ApiResult<IStation.Dto.DispatchAna.StationCurrentInfo>(new IStation.Dto.DispatchAna.StationCurrentInfo(vm_ana_result));
-                }
-                else
-                {
-                    return new Dto.ApiResult<IStation.Dto.DispatchAna.StationCurrentInfo>(new IStation.Dto.DispatchAna.StationCurrentInfo(vm_ana_result, current_dispatch_info));
-                }
+                return new Dto.ApiResult<IStation.Dto.DispatchAna.StationCurrentInfo>(
+                    new IStation.Dto.DispatchAna.StationCurrentInfo(
+                        vm_ana_result, 
+                        current_dispatch_info)
+                    );
             }
+
         }
 
 
@@ -125,51 +129,29 @@
                 return IStation.Dto.ApiResult.Error("StationID涓虹┖");
             }
 
-            string error_info = null;
-            var complex = request.BuildRequestComplex(out error_info);
-            complex.SchemeSortType = (Calculation.DispatchAna.Model.eAnaSchemeSortType)request.SortType;
-
-
-            List<IStation.Calculation.DispatchAna.Model.MachineRunFilter> machine_run_filter_list = null;
-            if (request.RunStatusList == null)
-            {
-                // IStation.LogHelper.Info("RunStatusList none");
-            }
-            else if (request.RunStatusList.Count() == 0)
-            {
-                // IStation.LogHelper.Info("RunStatusList Count==0");
-            }
-            else //if (request.Setting.OpenStatus != null && request.Setting.OpenStatus.Count > 0)
-            {
-                machine_run_filter_list = new List<IStation.Calculation.DispatchAna.Model.MachineRunFilter>();
-                foreach (var d in request.RunStatusList)
-                {
-                    var binding_list = new Service.PipeLineBinding().GetByPipeLineID(request.CorpID, d.MachineID);
-                    machine_run_filter_list.Add(new IStation.Calculation.DispatchAna.Model.MachineRunFilter()
-                    {
-                        MachineID = binding_list.First().ID,
-                        RunStatus = d.Status,
-                        MaxFlow = -1
-                    });
-                }
-            }
-
-
-
-
-            IStation.Calculation.IDispatchAnalyCalculator calc_helper =
-                IStation.Calculation.DispatchAnalyCalculatorFactory.CreateCalculator(request.CorpID,
-                IStation.ObjectType.Station,
-                request.StationID, null);
+            //鑾峰彇杈呭姪绫�
+            IStation.Calculation.DispatchAna.IOptAnaCalc calc_helper =
+                IStation.Calculation.DispatchAnalyCalculatorFactory.CreateOptAnaCalculator(
+                    request.CorpID, IStation.ObjectType.Station,
+                    request.StationID,null);
             if (calc_helper == null)
             {
                 return IStation.Dto.ApiResult.Error("Calculator 杩樻湭鏋勫缓");
             }
-            var machine_run_status = new IStation.Calculation.DispatchAna.Model.MachineRunPara() { MachineRunFilter = machine_run_filter_list };
 
-            //璋冪敤CalcOptListByPre 鍥犱负鍙兘閮ㄥ垎鍙傛暟杩橀渶鑾峰彇瀹炴椂鏁版嵁
-   
-            var items = calc_helper.CalcOptListByPre(complex, machine_run_status, out error_info);
+
+            //鏋勫缓鍙傛暟
+            string error_info = null;
+            var complex_request_paras = request.BuildRequestComplex(out error_info);
+            var machine_run_status = request.BuildMachineRunPara(out error_info);
+            var eta_ana_records = request.BuildEtaAnaRecord(out error_info);
+ 
+            //璁$畻
+            var items = calc_helper.CalcSchemes(
+                complex_request_paras,
+                eta_ana_records,
+                machine_run_status,
+                out error_info);
             if (items == null || items.Count() == 0)
             {
                 return IStation.Dto.ApiResult.Alert(error_info);
@@ -252,7 +234,7 @@
                     continue;
 
                 IStation.Calculation.DispatchAna.Model.AnaCurveItem anaData = new IStation.Calculation.DispatchAna.Model.AnaCurveItem();
-                int ret = IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper.CalcAnaCurve(
+                int ret = IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper鍘嬪姏.CalcAnaCurve(
                     pump_curve.CurveInfo.CurveQH,
                     pump_curve.CurveInfo.CurveQP,
                     0, TargetH / 102, 0, 0, frequence, ref anaData);
@@ -275,8 +257,8 @@
             }
             project.TotalWrkQ = (from x in project.Items where x.WorkPointQ > 0 select x.WorkPointQ).Sum();
             project.TotalWrkP = (from x in project.Items where x.WorkPointP > 0 select x.WorkPointP).Sum();
-            project.UWP = Math.Round(IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper.Calcu_UWP(project.TotalWrkP, project.TotalWrkQ, TargetH), 3);
-            project.WP = Math.Round(IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper.Calcu_UWP(project.TotalWrkP, project.TotalWrkQ, TargetH), 3);
+            project.UWP = Math.Round(IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper鍘嬪姏.Calcu_UWP(project.TotalWrkP, project.TotalWrkQ, TargetH), 3);
+            project.WP = Math.Round(IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper鍘嬪姏.Calcu_UWP(project.TotalWrkP, project.TotalWrkQ, TargetH), 3);
 
             project.SpanQ = Math.Round(project.TotalWrkQ - TargetQ, 0);
 
@@ -340,11 +322,11 @@
                 if (frequence > 49.5)
                 {
                     var curve_qh = curve_default.CurveInfo.CurveQH;
-                    curve_qh.Max = curve_qh.Max * IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper.ExtendMaxRatio;
+                    curve_qh.Max = curve_qh.Max * IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper鍘嬪姏.ExtendMaxRatio;
                     curveListQH.Add(curve_qh);
 
                     var curve_qp = curve_default.CurveInfo.CurveQP;
-                    curve_qp.Max = curve_qp.Max * IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper.ExtendMaxRatio;
+                    curve_qp.Max = curve_qp.Max * IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper鍘嬪姏.ExtendMaxRatio;
                     curveListQP.Add(curve_qp);
                 }
                 else
@@ -352,9 +334,9 @@
                     var ration = frequence / 50.0;
 
                     var maxCurveQH = IStation.Model.FitCurveHelper.GetFitPointsByExtend(curve_default.CurveInfo.CurveQH,
-                        IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper.ExtendMaxRatio, 20);
+                        IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper鍘嬪姏.ExtendMaxRatio, 20);
                     var maxCurveQP = IStation.Model.FitCurveHelper.GetFitPointsByExtend(curve_default.CurveInfo.CurveQP,
-                        IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper.ExtendMaxRatio, 20);
+                        IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper鍘嬪姏.ExtendMaxRatio, 20);
 
                     List<IStation.Model.CurvePoint> simuPointsQH = new List<IStation.Model.CurvePoint>();
                     foreach (var pt in maxCurveQH)
diff --git a/Application/IStation.Application.Eta/dispatch_analy/ParallelConnect_StdController.cs b/Application/IStation.Application.Eta/dispatch_analy/ParallelConnect_StdController.cs
index e0a14da..7f56f4b 100644
--- a/Application/IStation.Application.Eta/dispatch_analy/ParallelConnect_StdController.cs
+++ b/Application/IStation.Application.Eta/dispatch_analy/ParallelConnect_StdController.cs
@@ -75,11 +75,11 @@
                 if (frequence > 49.5)
                 {
                     var curve_qh = curve_default.CurveInfo.CurveQH;
-                    curve_qh.Max = curve_qh.Max * IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper.ExtendMaxRatio;
+                    curve_qh.Max = curve_qh.Max * IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper鍘嬪姏.ExtendMaxRatio;
                     curveListQH.Add(curve_qh);
 
                     var curve_qp = curve_default.CurveInfo.CurveQP;
-                    curve_qp.Max = curve_qp.Max * IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper.ExtendMaxRatio;
+                    curve_qp.Max = curve_qp.Max * IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper鍘嬪姏.ExtendMaxRatio;
                     curveListQP.Add(curve_qp);
                 }
                 else
@@ -87,9 +87,9 @@
                     var ration = frequence / 50.0;
 
                     var maxCurveQH = IStation.Model.FitCurveHelper.GetFitPointsByExtend(curve_default.CurveInfo.CurveQH,
-                        IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper.ExtendMaxRatio, 20);
+                        IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper鍘嬪姏.ExtendMaxRatio, 20);
                     var maxCurveQP = IStation.Model.FitCurveHelper.GetFitPointsByExtend(curve_default.CurveInfo.CurveQP,
-                        IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper.ExtendMaxRatio, 20);
+                        IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper鍘嬪姏.ExtendMaxRatio, 20);
 
                     List<IStation.Model.CurvePoint> simuPointsQH = new List<IStation.Model.CurvePoint>();
                     foreach (var pt in maxCurveQH)
diff --git a/Application/IStation.Application.Eta/dispatch_analy/dto/Dto.cs b/Application/IStation.Application.Eta/dispatch_analy/dto/Dto.cs
index 133bae6..99c6f5e 100644
--- a/Application/IStation.Application.Eta/dispatch_analy/dto/Dto.cs
+++ b/Application/IStation.Application.Eta/dispatch_analy/dto/Dto.cs
@@ -11,7 +11,7 @@
     public class CalcBySimple_Request
     {
         /// <summary>
-        /// 
+        /// 鏈烘车杩愯鐘舵��
         /// </summary>
         public class RunStatus
         {
@@ -24,8 +24,19 @@
             /// </summary>
             public int Status { get; set; } = -1;
         }
+
         /// <summary>
         /// 
+        /// </summary>
+        public long CorpID { get; set; }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public long StationID { get; set; }
+
+        /// <summary>
+        /// 绠¤矾鍙傛暟
         /// </summary>
         public class PipeParas 
         {
@@ -48,7 +59,7 @@
         }
 
         /// <summary>
-        /// 
+        /// 闃�闂ㄥ弬鏁�
         /// </summary>
         public class ValveParas
         {
@@ -61,32 +72,24 @@
             /// </summary>
             public int Status { get; set; }
         }
-        /// <summary>
-        /// 
-        /// </summary>
-        public long CorpID { get; set; }
-        /// <summary>
-        /// 
-        /// </summary>
-        public long StationID { get; set; }
-
+      
         /// <summary>
         /// 姘翠綅鍙傛暟 
         /// </summary>
         public List<double> WaterLevelList { get; set; }
 
         /// <summary>
-        /// 
+        /// 绠¤矾鍙傛暟
         /// </summary>
         public List<PipeParas> PipeList { get; set; }
-      
+
         /// <summary>
-        /// 
+        /// 闃�闂ㄥ弬鏁�
         /// </summary>
         public List<ValveParas> ValveList { get; set; }
 
         /// <summary>
-        /// 
+        /// 鏈烘车杩愯鍙傛暟
         /// </summary>
         public List<RunStatus> RunStatusList { get; set; }
 
@@ -101,7 +104,12 @@
         public int PressValueType { get; set; }
 
         /// <summary>
-        /// /
+        /// 鑳芥晥鍒嗘瀽璁板綍
+        /// </summary>
+        public StationEtaAnaRecord EtaAnaRecord { get; set; }
+
+        /// <summary>
+        /// 鏋勫缓鎴愬鍚堝弬鏁�
         /// </summary>
         /// <param name="error_info"></param>
         /// <returns></returns>
@@ -113,20 +121,26 @@
             complex_request_paras.CorpID = this.CorpID;
             complex_request_paras.StationID = this.StationID;
 
-            if(WaterLevelList != null && WaterLevelList.Count > 0)
-            {
-                complex_request_paras.WaterLevelPara = new List<Calculation.DispatchAna.Model.WaterLevelPara>();
-                foreach(var wl in WaterLevelList)
-                {
-                    complex_request_paras.WaterLevelPara.Add(new Calculation.DispatchAna.Model.WaterLevelPara(wl));
-                }
-            }
-            else if (this.PressValueType == 1)
-            {//   1:琛ㄧず鎵▼ 
+            if (this.PressValueType == 1)
+            {//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));
             }
-  
+            else
+            {//鍘嬪姏
+                complex_request_paras.PressValueType = Calculation.DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
+
+                if (WaterLevelList != null && WaterLevelList.Count > 0)
+                {
+                    complex_request_paras.WaterLevelPara = new List<Calculation.DispatchAna.Model.WaterLevelPara>();
+                    foreach (var wl in WaterLevelList)
+                    {
+                        complex_request_paras.WaterLevelPara.Add(new Calculation.DispatchAna.Model.WaterLevelPara(wl));
+                    }
+                }             
+            }
 
             if (this.PipeList != null&& this.PipeList.Count > 0)
             {
@@ -134,16 +148,8 @@
                 foreach (var pipe in this.PipeList)
                 {
                     var pipe_model = new Calculation.DispatchAna.Model.OutletPipePara();
-                    pipe_model.InitialFlowInfo(pipe.TargetFlow, pipe.TargetFlowMinQ , pipe.TargetFlowMaxQ);
-
-                    if(this.PressValueType == 0)
-                    {// 0:琛ㄧず鍘嬪姏  
-                        pipe_model.TargetPress = pipe.TargetPress;
-                    }
-                    if (this.PressValueType == 1)
-                    {//   1:琛ㄧず鎵▼
-                        pipe_model.TargetPress = pipe.TargetPress / 102;
-                    }
+                    pipe_model.InitialFlowInfo(pipe.TargetFlow, pipe.TargetFlowMinQ, pipe.TargetFlowMaxQ);
+                    pipe_model.TargetPress = pipe.TargetPress;
                     complex_request_paras.OutletPipePara.Add(pipe_model);
                 }
             }
@@ -157,8 +163,61 @@
                         new Calculation.DispatchAna.Model.ValvePara() { Name = valve.Name, OpenStatus = valve.Status });
                 }
             }
+
+            complex_request_paras.SchemeSortType = (Calculation.DispatchAna.Model.eAnaSchemeSortType)this.SortType;
             return complex_request_paras;
         }
+    
+    
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public IStation.Calculation.DispatchAna.Model.MachineRunPara BuildMachineRunPara(out string error_info)
+        {
+            error_info = null;
+            List<IStation.Calculation.DispatchAna.Model.MachineRunFilter> machine_run_filter_list = null;
+            if (this.RunStatusList == null)
+            {
+                // IStation.LogHelper.Info("RunStatusList none");
+            }
+            else if (this.RunStatusList.Count() == 0)
+            {
+                // IStation.LogHelper.Info("RunStatusList Count==0");
+            }
+            else //if (request.Setting.OpenStatus != null && request.Setting.OpenStatus.Count > 0)
+            {
+                machine_run_filter_list = new List<IStation.Calculation.DispatchAna.Model.MachineRunFilter>();
+                foreach (var d in this.RunStatusList)
+                {
+                    var binding_list = new Service.PipeLineBinding().GetByPipeLineID(this.CorpID, d.MachineID);
+                    machine_run_filter_list.Add(new IStation.Calculation.DispatchAna.Model.MachineRunFilter()
+                    {
+                        MachineID = binding_list.First().ID,
+                        RunStatus = d.Status,
+                        MaxFlow = -1
+                    });
+                }
+            }
+            return new IStation.Calculation.DispatchAna.Model.MachineRunPara()
+            {
+                MachineRunFilter = machine_run_filter_list
+            }; 
+        }
+    
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        public IStation.Calculation.DispatchAna.Model.EtaAnaRecord4Station BuildEtaAnaRecord(out string error_info)
+        {
+            error_info = null;
+            if (EtaAnaRecord == null)
+                return null;
+    
+            return EtaAnaRecord.Build(out error_info);
+        }
     }
 
  
diff --git a/Application/IStation.Application.Eta/dispatch_analy/dto/StationCurrentInfo.cs b/Application/IStation.Application.Eta/dispatch_analy/dto/StationCurrentInfo.cs
index dd87ca0..c8bc0d8 100644
--- a/Application/IStation.Application.Eta/dispatch_analy/dto/StationCurrentInfo.cs
+++ b/Application/IStation.Application.Eta/dispatch_analy/dto/StationCurrentInfo.cs
@@ -30,7 +30,9 @@
         /// <summary>
         /// 
         /// </summary>
-        public StationCurrentInfo(StationEtaAnaRecord anaRecord, IStation.Calculation.DispatchAna.Model.CurrentRecordBundle signalRecord)
+        public StationCurrentInfo(
+            IStation.Dto.DispatchAna.StationEtaAnaRecord anaRecord, 
+            IStation.Calculation.DispatchAna.Model.CurrentRecordBundle signalRecord)
         {
             this.EtaAnaRecord = anaRecord;
  
diff --git a/Application/IStation.Application.Eta/dispatch_analy/dto/StationEtaAnaRecord.cs b/Application/IStation.Application.Eta/dispatch_analy/dto/StationEtaAnaRecord.cs
index 414076b..59a64dd 100644
--- a/Application/IStation.Application.Eta/dispatch_analy/dto/StationEtaAnaRecord.cs
+++ b/Application/IStation.Application.Eta/dispatch_analy/dto/StationEtaAnaRecord.cs
@@ -89,5 +89,43 @@
         /// </summary>
         public List<PumpEtaAnaRecord> Items { get; set; }
 
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        public IStation.Calculation.DispatchAna.Model.EtaAnaRecord4Station Build(out string error_info)
+        {
+            error_info = null;
+           
+            IStation.Calculation.DispatchAna.Model.EtaAnaRecord4Station eta_ana_records = new Calculation.DispatchAna.Model.EtaAnaRecord4Station();
+            eta_ana_records.Name = this.Name;
+            eta_ana_records.Q = this.Q;
+            eta_ana_records.H = this.H;
+            eta_ana_records.E = this.E;
+            eta_ana_records.P = this.P;
+            eta_ana_records.WP  = this.WP;
+            eta_ana_records.UWP = this.UWP;
+            eta_ana_records.RunStatus = this.RunStatus;
+            eta_ana_records.Items = new List<Calculation.DispatchAna.Model.EtaAnaRecord4Pump>();
+            foreach(var v in this.Items)
+            {
+                eta_ana_records.Items.Add(new Calculation.DispatchAna.Model.EtaAnaRecord4Pump()
+                { 
+                     MachineID = v.MachineID,
+                     PumpID = v.PumpID,
+                     Q = v.Q,
+                     H = v.H,
+                     E = v.E,
+                     P = v.P,
+                     WP = v.WP,
+                     UWP = v.UWP,
+                     PipeLineID = v.PipeLineID,
+                     Name = v.Name,
+                     HZ = v.HZ
+                });
+            }
+            return eta_ana_records;
+        }
     }
 }
diff --git a/Application/IStation.Application.OpenApi/IStation.Application.OpenApi.csproj b/Application/IStation.Application.OpenApi/IStation.Application.OpenApi.csproj
index 70a23d8..7b8e887 100644
--- a/Application/IStation.Application.OpenApi/IStation.Application.OpenApi.csproj
+++ b/Application/IStation.Application.OpenApi/IStation.Application.OpenApi.csproj
@@ -11,7 +11,6 @@
 
   <ItemGroup>
     <ProjectReference Include="..\..\Calculation\IStation.Calculation.Dispatch\IStation.Calculation.Dispatch.csproj" />
-    <ProjectReference Include="..\..\Calculation\IStation.Calculation.Plan\IStation.Calculation.Plan.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 d63eee2..f7571b2 100644
--- a/Application/IStation.Application.OpenApi/shys/dispatch/DispatchAna_ShysController.cs
+++ b/Application/IStation.Application.OpenApi/shys/dispatch/DispatchAna_ShysController.cs
@@ -42,7 +42,7 @@
                 case 1://闀垮叴娉电珯
                     {
                         var result= shys_cxd(input, result_sg,out error_info);
-                        LogHelper.Debug(JsonHelper.Object2Json(result));
+                        //LogHelper.Debug(JsonHelper.Object2Json(result));
                         return result;
                     }
                 default:return default;
@@ -290,11 +290,13 @@
             complex_request_paras.SchemeSortType = Calculation.DispatchAna.Model.eAnaSchemeSortType.鍔熺巼;
             complex_request_paras.SchemeNumber = 1;
 
+            //鏋勯�犺绠楀櫒 
+            var calulator = IStation.Calculation.DispatchAnalyCalculatorFactory.CreateKeepStatusCalculator(4, IStation.ObjectType.Station, 2,null);
+            calulator.IntialRequest(complex_request_paras,
+                    null,
+                    machine_run_status);
             //鍑烘柟妗� 
-            var scheme = new IStation.Calculation.DispatchAna.Calculator4ShysCxbz().CalcKeepStatusByWhole(
-                complex_request_paras, 
-                machine_run_status,
-                out error_info);
+            var scheme = calulator.Calc(out error_info);
             if (scheme == null)
                 return default;
             var result = new IStation.Application.DispatchAnaSchemeOutput();
diff --git a/Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs b/Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs
index b62ab44..7c745a8 100644
--- a/Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs
+++ b/Application/IStation.Application.OpenApi/shys/plan/PlanAna_ShysController.cs
@@ -6,10 +6,9 @@
 using IStation.Untity;
 using Furion.DynamicApiController;
 using System.ComponentModel.DataAnnotations;
-using Mapster;
 using Microsoft.AspNetCore.Authorization;
 using IStation.Calculation;
-using IStation.Calculation.PlanAna;
+using IStation.Dto;
 
 namespace IStation.Application
 {
@@ -45,7 +44,31 @@
             LogHelper.Debug(responseText);
 
             var planDataList = JsonHelper.Json2Object<List<PlanAnaData>>(responseText);
-            if (planDataList == null||planDataList.Count<1)
+            return CalculateCore(planDataList);
+        }
+
+        /// <summary>
+        /// 璁$畻-璋冭瘯
+        /// </summary>
+        [AllowAnonymous]
+        [NonUnify]
+        [Route("Calculate@Debug")]
+        [HttpGet]
+        public List<PlanAnaDto> Calculate_debug()
+        {
+            var responseText = System.IO.File.ReadAllText(@"E:\WorkData\IStation\result.txt");//(娴嬭瘯鐢ㄧ殑)
+            var planDataList = JsonHelper.Json2Object<List<PlanAnaData>>(responseText);
+            return CalculateCore(planDataList);
+        }
+       
+        /// <summary>
+        /// 鍒嗘瀽鏍稿績
+        /// </summary>
+        /// <param name="planDataList"></param>
+        /// <returns></returns>
+        private List<PlanAnaDto> CalculateCore(List<PlanAnaData> planDataList) 
+        {
+            if (planDataList == null || planDataList.Count < 1)
             {
                 LogHelper.Error("涓婃捣鍘熸按鑳借�楄鍒掑垎鏋愯绠椾笁楂樿繑鍥炴帴鍙e嚭鍙備负绌�");
                 return default;
@@ -56,97 +79,29 @@
                 return default;
             }
 
-            var factoryIds = planDataList.SelectMany(x=>x.datas).Select(x => x.factory).Distinct().ToList();
-            var vmList = new List<PlanAnaDto>();
-            foreach (var factoryId in factoryIds)
-            {
-                //鏋勯�犺绠楀叆鍙�
-                var sumRecordList = new List<MonthSumRecord>();
-                foreach (var planData in planDataList)
-                {
-                    var sumRecord = new MonthSumRecord();
-                    sumRecord.Month = planData.timeflag;
-                    sumRecord.HourRecords = new List<HourSumRecord>();
-                    var factoryData = planData.datas.Find(t=>t.factory==factoryId);
-                    for (int i = 0; i <= 23; i++)
-                    {
-                        var hourSumRecord = new HourSumRecord();
-                        hourSumRecord.Hour = i;
-                        hourSumRecord.Records = new List<Calculation.PlanAna.MonitorRecord>();
-                        if (factoryData.scada != null && factoryData.scada.Count > 0)
-                        {
-                            foreach (var scadaItem in factoryData.scada)
-                            {
-                                var scadaRecord = new Calculation.PlanAna.MonitorRecord();
-                                scadaRecord.MonitorId = PlanAnaConstant.MonitorDict[scadaItem.tagname];
-                                scadaRecord.RecordValue = scadaItem.values.Find(t => t.datetime.Trim() == PlanAnaConstant.HourDict[i]).value;
-                                hourSumRecord.Records.Add(scadaRecord);
-                            }
-                        }
-                        if (factoryData.result != null && factoryData.result.Count > 0)
-                        {
-                            foreach (var resultItem in factoryData.result)
-                            {
-                                var resultRecord = new Calculation.PlanAna.MonitorRecord();
-                                resultRecord.MonitorId = PlanAnaConstant.MonitorDict[resultItem.tagname];
-                                resultRecord.RecordValue = resultItem.values.Find(t => t.datetime.Trim() == PlanAnaConstant.HourDict[i]).value;
-                                hourSumRecord.Records.Add(resultRecord);
-                            }
-                        }
-                        sumRecord.HourRecords.Add(hourSumRecord);
-                    }
-                    sumRecordList.Add(sumRecord);
-                }
-
-                //鎵惧埌鐩稿叧娉电珯锛屽苟杩涜璁$畻
-                var stationId = PlanAnaConstant.FactoryDict[factoryId];
-                var station = new Service.Station().GetByID(_corpId, stationId);
-                var calculator = PlanAnaCalculatorFactory.CreateCalculator(_corpId, ObjectType.Station, stationId);
-                var resultList = calculator.Calculate(sumRecordList);
-                if (resultList == null || resultList.Count < 1)
-                {
-                    LogHelper.Error($"涓婃捣鍘熸按鑳借�楄鍒掑垎鏋愯绠椾腑锛屾车绔欏悕绉�:{station.Name} 娉电珯id:{stationId},璁$畻閿欒");
-                    continue;
-                }
-
-                //鐢熸垚杩斿洖缁撴灉
-                var vmItem = new PlanAnaDto();
-                vmItem.factory = factoryId;
-                vmItem.name = station.Name;
-                vmItem.values = new List<List<double>>();
-                for (int i = 1; i <= 12; i++)
-                {
-                    var result = resultList.Find(t => t.Month == i);
-                    if (result == null)
-                    {
-                        vmItem.values.Add(new List<double>() { 0, 0, 0 });
-                    }
-                    else
-                    {
-                        vmItem.values.Add(new List<double>() {result.Qt,result.Dt,result.WP});
-                    }
-                }
-                vmList.Add(vmItem);
-            }
-            return vmList;
-        }
-
-        /// <summary>
-        /// 璁$畻-璋冭瘯
-        /// </summary>
-        [AllowAnonymous]
-        [NonUnify]
-        [Route("Calculate@Debug")]
-        [HttpPost]
-        public List<PlanAnaDto> Calculate_debug()
-        {
-            var responseText = System.IO.File.ReadAllText(@"D:\result.txt");//(娴嬭瘯鐢ㄧ殑)
-            var planDataList = JsonHelper.Json2Object<List<PlanAnaData>>(responseText);
-
             var factoryIds = planDataList.SelectMany(x => x.datas).Select(x => x.factory).Distinct().ToList();
             var vmList = new List<PlanAnaDto>();
             foreach (var factoryId in factoryIds)
             {
+                //鎵惧埌鐩稿叧娉电珯锛屽苟杩涜璁$畻
+                if (!PlanAnaConstant.FactoryDict.ContainsKey(factoryId))
+                {
+                    LogHelper.Error("鏈壘鍒癷d:{factoryId},瀵瑰簲鐨勬车绔�");
+                    return default;
+                }
+                var stationId = PlanAnaConstant.FactoryDict[factoryId];
+                var station = new Service.Station().GetByID(_corpId, stationId);
+                if (station == null)
+                {
+                    LogHelper.Error($"涓婃捣鍘熸按鑳借�楄鍒掑垎鏋愯绠椾腑锛� 娉电珯id:{stationId}, 鏁版嵁搴撲腑鏈壘鍒版娉电珯");
+                    continue;
+                }
+                var calculator = PlanAnaCalculatorFactory.CreateCalculator(_corpId, ObjectType.Station, stationId);
+                if (calculator == null)
+                {
+                    LogHelper.Error($"涓婃捣鍘熸按鑳借�楄鍒掑垎鏋愯绠椾腑锛� 娉电珯id:{stationId}, 鏈瀯寤鸿绠楀櫒");
+                    continue;
+                }
                 //鏋勯�犺绠楀叆鍙�
                 var sumRecordList = new List<MonthSumRecord>();
                 foreach (var planData in planDataList)
@@ -159,14 +114,20 @@
                     {
                         var hourSumRecord = new HourSumRecord();
                         hourSumRecord.Hour = i;
-                        hourSumRecord.Records = new List<Calculation.PlanAna.MonitorRecord>();
+                        hourSumRecord.Records = new List<Dto.MonitorRecord4SG>();
                         if (factoryData.scada != null && factoryData.scada.Count > 0)
                         {
                             foreach (var scadaItem in factoryData.scada)
                             {
-                                var scadaRecord = new Calculation.PlanAna.MonitorRecord();
-                                scadaRecord.MonitorId = PlanAnaConstant.MonitorDict[scadaItem.tagname];
-                                scadaRecord.RecordValue = scadaItem.values.Find(t => t.datetime.Trim() == PlanAnaConstant.HourDict[i]).value;
+                                var scadaRecord = new Dto.MonitorRecord4SG();
+                                scadaRecord.MonitorTag =  scadaItem.tagname ;
+                                var ff = scadaItem.values.Find(t => t.GetHour() ==  i );
+                                if(ff == null)
+                                {
+                                    LogHelper.Error($"涓婃捣鍘熸按鑳借�楄鍒掑垎鏋愯绠椾腑锛� 娉电珯id:{stationId}, {scadaItem.tagname} 鏃堕棿鐐箋i}, 鏈壘鍒版暟鎹�" );
+                                    return default;
+                                }
+                                scadaRecord.RecordValue = ff.value;
                                 hourSumRecord.Records.Add(scadaRecord);
                             }
                         }
@@ -174,9 +135,9 @@
                         {
                             foreach (var resultItem in factoryData.result)
                             {
-                                var resultRecord = new Calculation.PlanAna.MonitorRecord();
-                                resultRecord.MonitorId = PlanAnaConstant.MonitorDict[resultItem.tagname];
-                                resultRecord.RecordValue = resultItem.values.Find(t => t.datetime.Trim() == PlanAnaConstant.HourDict[i]).value;
+                                var resultRecord = new Dto.MonitorRecord4SG();
+                                resultRecord.MonitorTag = resultItem.tagname;// PlanAnaConstant.MonitorDict[resultItem.tagname];
+                                resultRecord.RecordValue = resultItem.values.Find(t => t.GetHour() == i).value;
                                 hourSumRecord.Records.Add(resultRecord);
                             }
                         }
@@ -185,14 +146,11 @@
                     sumRecordList.Add(sumRecord);
                 }
 
-                //鎵惧埌鐩稿叧娉电珯锛屽苟杩涜璁$畻
-                var stationId = PlanAnaConstant.FactoryDict[factoryId];
-                var station = new Service.Station().GetByID(_corpId, stationId);
-                var calculator = PlanAnaCalculatorFactory.CreateCalculator(_corpId, ObjectType.Station, stationId);
-                var resultList = calculator.Calculate(sumRecordList);
-                if (resultList == null || resultList.Count < 1)
+                string error_info="";
+                var resultList = calculator.Calc(station, factoryId, sumRecordList, out error_info);
+                if (resultList == null || resultList.Count() < 1)
                 {
-                    LogHelper.Error($"涓婃捣鍘熸按鑳借�楄鍒掑垎鏋愯绠椾腑锛屾车绔欏悕绉�:{station.Name} 娉电珯id:{stationId},璁$畻閿欒");
+                    LogHelper.Error($"涓婃捣鍘熸按鑳借�楄鍒掑垎鏋愯绠椾腑锛屾车绔欏悕绉�:{station.Name} 娉电珯id:{stationId},璁$畻閿欒,鍘熷洜鏄�:{error_info}"  );
                     continue;
                 }
 
diff --git a/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaConstant.cs b/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaConstant.cs
index a648127..ea7a85f 100644
--- a/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaConstant.cs
+++ b/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaConstant.cs
@@ -35,49 +35,38 @@
             {17,21},//澶фˉ娉电珯
         };
 
-        /// <summary>
-        /// 娴嬬偣瀛楀吀
-        /// </summary>
-        public static Dictionary<string, long> MonitorDict = new Dictionary<string, long>()
-        {
-            {"_0402010403030103001",69},//闈掕崏娌欐按搴撴恫浣�
-            {"_0402010404030103001",70},//闈掕崏娌欐按搴撳惛姘翠簳娑蹭綅-闀垮叴娉电珯鍓嶆睜娑蹭綅  
-            {"_0402010403030002001",73},//闀垮叴娉电珯杈撴按娉靛嚭姘寸閬�1娴侀噺
-            {"_0402010403030002005",72},//闀垮叴娉电珯杈撴按绠¢亾1#鍘嬪姏
-            {"_0402010403030002002",77},//闀垮叴娉电珯杈撴按娉靛嚭姘寸閬�2娴侀噺
-            {"_0402010403030002006",76},//闀垮叴娉电珯杈撴按绠¢亾2#鍘嬪姏
-        };
+
 
         /// <summary>
         /// 鏃跺瓧鍏�
         /// </summary>
-        public static Dictionary<int,string> HourDict = new Dictionary<int,string>() 
-        {
-            { 0,"00:00"},
-            { 1,"01:00"},
-            { 2,"02:00"},
-            { 3,"03:00"},
-            { 4,"04:00"},
-            { 5,"05:00"},
-            { 6,"06:00"},
-            { 7,"07:00"},
-            { 8,"08:00"},
-            { 9,"09:00"},
-            { 10,"10:00"},
-            { 11,"11:00"},
-            { 12,"12:00"},
-            { 13,"13:00"},
-            { 14,"14:00"},
-            { 15,"15:00"},
-            { 16,"16:00"},
-            { 17,"17:00"},
-            { 18,"18:00"},
-            { 19,"19:00"},
-            { 20,"20:00"},
-            { 21,"21:00"},
-            { 22,"22:00"},
-            { 23,"23:00"}
-        };
+        //public static Dictionary<int,string> HourDict = new Dictionary<int,string>() 
+        //{
+        //    { 0,"00:00"},
+        //    { 1,"01:00"},
+        //    { 2,"02:00"},
+        //    { 3,"03:00"},
+        //    { 4,"04:00"},
+        //    { 5,"05:00"},
+        //    { 6,"06:00"},
+        //    { 7,"07:00"},
+        //    { 8,"08:00"},
+        //    { 9,"09:00"},
+        //    { 10,"10:00"},
+        //    { 11,"11:00"},
+        //    { 12,"12:00"},
+        //    { 13,"13:00"},
+        //    { 14,"14:00"},
+        //    { 15,"15:00"},
+        //    { 16,"16:00"},
+        //    { 17,"17:00"},
+        //    { 18,"18:00"},
+        //    { 19,"19:00"},
+        //    { 20,"20:00"},
+        //    { 21,"21:00"},
+        //    { 22,"22:00"},
+        //    { 23,"23:00"}
+        //};
 
 
     }
diff --git a/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaDto.cs b/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaDto.cs
index 467a807..f9e260d 100644
--- a/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaDto.cs
+++ b/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaDto.cs
@@ -4,7 +4,7 @@
 using System.Text;
 using System.Threading.Tasks;
 
-namespace IStation.Application
+namespace IStation.Dto
 {
     /// <summary>
     /// 璁″垝鍒嗘瀽dto
diff --git a/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaInput.cs b/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaInput.cs
index f833aac..c028b09 100644
--- a/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaInput.cs
+++ b/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaInput.cs
@@ -4,7 +4,7 @@
 using System.Text;
 using System.Threading.Tasks;
 
-namespace IStation.Application
+namespace IStation.Dto
 {
     /// <summary>
     /// 鑳借�楄鍒掓按閲忚緭鍏�
diff --git a/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaTransfer.cs b/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaTransfer.cs
index a1075d2..698006a 100644
--- a/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaTransfer.cs
+++ b/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaTransfer.cs
@@ -4,7 +4,7 @@
 using System.Text;
 using System.Threading.Tasks;
 
-namespace IStation.Application
+namespace IStation.Dto
 {
     /// <summary>
     /// 鏃跺��
@@ -17,6 +17,16 @@
         public string datetime { get; set; }
 
         /// <summary>
+        /// 
+        /// </summary>
+        /// <returns></returns>
+        public int GetHour()
+        {
+            var sss = datetime.Split(':');
+            return Convert.ToInt32(sss[0]);
+        }
+
+        /// <summary>
         /// 鍊�
         /// </summary>
         public double value { get; set; }
diff --git a/Calculation/IStation.Calculation.Dispatch/DispatchAnalyCalculatorFactory.cs b/Calculation/IStation.Calculation.Dispatch/DispatchAnalyCalculatorFactory.cs
index 701eeb0..e9f6ebb 100644
--- a/Calculation/IStation.Calculation.Dispatch/DispatchAnalyCalculatorFactory.cs
+++ b/Calculation/IStation.Calculation.Dispatch/DispatchAnalyCalculatorFactory.cs
@@ -3,6 +3,8 @@
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using IStation.Calculation.DispatchAna;
+using IStation.Numerics;
 
 namespace IStation.Calculation
 {
@@ -26,25 +28,104 @@
             EPT = 1
         }
         /// <summary>
-        /// 鍒涘缓璁$畻鍣�
+        /// 鍒涘缓璁$畻鍣�(褰撳墠璋冨害淇℃伅)
         /// </summary>
-        public static IDispatchAnalyCalculator CreateCalculator(long CorpID, string ObjectType,long ObjectID, eCalcTool? CalcTool)  
+        public static IGetCurrentRecord CreateGetCurrentRecord(
+            long CorpID, string ObjectType, long ObjectID )
         {
-            if(ObjectType == IStation.ObjectType.Station)
+            if (ObjectType == IStation.ObjectType.Station)
             {
-                if(CorpID == 4)
+                IGetCurrentRecord calc = null;
+                if (CorpID == 4)
                 {//涓婃捣 鍘熸按
                     if (ObjectID == 2)
                     {
-                        return new IStation.Calculation.DispatchAna.Calculator4ShysCxbz();
-                    }           
+                        calc = new IStation.Calculation.DispatchAna.Calculator_Current_SHYS_闀垮叴宀�();
+                    }
                 }
-                return new IStation.Calculation.DispatchAna.Calculator4StationGeneral();
+
+
+
+
+                if (calc == null)
+                {
+                    var general =   new IStation.Calculation.DispatchAna.Calculator_Current_Gneral();
+                    calc = general;
+                }
+                return calc;
             }
 
 
 
             return null;
         }
+
+        /// <summary>
+        /// 鍒涘缓璁$畻鍣�(鏈�浼樻柟妗堣绠�)
+        /// </summary>
+        public static IOptAnaCalc CreateOptAnaCalculator(
+            long CorpID, string ObjectType, long ObjectID, eCalcTool? CalcTool)  
+        {
+            if (ObjectType == IStation.ObjectType.Station)
+            {
+                IOptAnaCalc calc = null;
+                if (CorpID == 4)
+                {//涓婃捣 鍘熸按
+                    if (ObjectID == 2)
+                    {
+                        calc = new IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闀垮叴宀�();
+                    }
+                }
+
+                if (calc == null)
+                {
+                    var general = new IStation.Calculation.DispatchAna.Calculator_OptAna_General();
+                    calc = general;
+                }
+
+
+                return calc;
+            }
+
+
+
+            return null;
+        }
+
+
+        /// <summary>
+        /// 鍒涘缓璁$畻鍣�(鏈�浼樻柟妗堣绠�)
+        /// </summary>
+        public static IKeepStatusCalc CreateKeepStatusCalculator(
+            long CorpID, string ObjectType, long ObjectID, eCalcTool? CalcTool)
+        {
+            if (ObjectType == IStation.ObjectType.Station)
+            {
+                IKeepStatusCalc calc = null;
+                if (CorpID == 4)
+                {//涓婃捣 鍘熸按
+                    if (ObjectID == 2)
+                    {
+                        calc = new IStation.Calculation.DispatchAna.Calculator_KeepStatus_SHYS_闀垮叴宀�();
+                    }
+                }
+
+                if (calc == null)
+                {
+                    var general = new IStation.Calculation.DispatchAna.Calculator_KeepStatus_General();
+                    calc = general;
+                }
+
+
+                return calc;
+            }
+
+
+
+            return null;
+        }
+
+
+
     }
 }
diff --git a/Calculation/IStation.Calculation.Dispatch/IDispatchAnalyCalculator.cs b/Calculation/IStation.Calculation.Dispatch/IDispatchAnalyCalculator.cs
deleted file mode 100644
index 66226a2..0000000
--- a/Calculation/IStation.Calculation.Dispatch/IDispatchAnalyCalculator.cs
+++ /dev/null
@@ -1,64 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace IStation.Calculation
-{
-    /// <summary>
-    /// 璋冨害鍒嗘瀽璁$畻鍣ㄦ帴鍙�
-    /// </summary>
-    public interface IDispatchAnalyCalculator
-    {
-        /// <summary>
-        /// 鑾峰彇褰撳墠璋冨害淇℃伅
-        /// </summary>
-        /// <param name="CorpID"></param>
-        /// <param name="StationID"></param>
-        /// <param name="error_info"></param>
-        /// <returns></returns>
-        IStation.Calculation.DispatchAna.Model.CurrentRecordBundle GetCurrentRecord(long CorpID,long StationID,out string error_info);
-
-        /// <summary>
-        /// 璁$畻(鏈�浼�):闇�瑕佹坊鍔犲疄鏃舵暟鎹�
-        /// </summary>
-        /// <param name="complex_request_paras">闇�姹傚弬鏁�</param>
-        /// <param name="machine_run_status"></param>
-        /// <param name="error_info">閿欒淇℃伅</param>
-        /// <returns></returns>
-        List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcOptListByPre(
-                          IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
-                          IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
-                          out string error_info);
-
-        /// <summary>
-        /// 璁$畻(鏈�浼�)
-        /// </summary>
-        /// <param name="complex_request_paras"></param>
-        /// <param name="machine_run_status"></param>
-        /// <param name="error_info"></param>
-        /// <returns></returns>
-        List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcOptListByWhole(
-                IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
-                IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
-                out string error_info);
-
- 
-
-        /// <summary>
-        /// 璁$畻淇濇寔褰撳墠寮�鏈虹姸鎬�
-        /// </summary>
-        /// <param name="requesParas"></param>
-        /// <param name="openMachineIdList">寮�娉礗D</param>
-        /// <param name="error_info">閿欒淇℃伅</param>
-        /// <returns></returns>
-        IStation.Calculation.DispatchAna.Model.AnaScheme CalcKeepStatusByWhole(
-                            IStation.Calculation.DispatchAna.Model.RequestParasComplex requesParas,
-                            List<long> openMachineIdList,
-                            out string error_info);
-
-
-
-    }
-}
diff --git a/Calculation/IStation.Calculation.Dispatch/IStation.Calculation.Dispatch.csproj b/Calculation/IStation.Calculation.Dispatch/IStation.Calculation.Dispatch.csproj
index dc3a1d6..07a813f 100644
--- a/Calculation/IStation.Calculation.Dispatch/IStation.Calculation.Dispatch.csproj
+++ b/Calculation/IStation.Calculation.Dispatch/IStation.Calculation.Dispatch.csproj
@@ -19,7 +19,10 @@
   </ItemGroup>
 
   <ItemGroup>
+    <Compile Remove="base\CalculatorBase - 澶嶅埗.cs" />
     <Compile Remove="custom\shys\station\DispatchKeepSchemeCalculator4Cxbz - 鍓湰.cs" />
+    <Compile Remove="custom\shys\station\闀垮叴宀沑CxbzBase - 澶嶅埗.cs" />
+    <Compile Remove="general\Calculator.cs" />
     <Compile Remove="input\RequestParasSimple.cs" />
     <Compile Remove="input\TargetPressPara.cs" />
     <Compile Remove="Model\CurrentRecordValue.cs" />
diff --git a/Calculation/IStation.Calculation.Dispatch/Model/MachineDetail.cs b/Calculation/IStation.Calculation.Dispatch/Model/MachineDetail.cs
index 2076306..cdc34ee 100644
--- a/Calculation/IStation.Calculation.Dispatch/Model/MachineDetail.cs
+++ b/Calculation/IStation.Calculation.Dispatch/Model/MachineDetail.cs
@@ -26,7 +26,7 @@
         /// <summary>
         /// 娉靛瀷鍙�
         /// </summary>
-        public string PumpCode { get; set; }//
+        public string PumpCode { get; set; } 
         /// <summary>
         /// 
         /// </summary>
diff --git a/Calculation/IStation.Calculation.Dispatch/custom/CalculatorBase.cs b/Calculation/IStation.Calculation.Dispatch/custom/CalculatorBase.cs
deleted file mode 100644
index b0ddadc..0000000
--- a/Calculation/IStation.Calculation.Dispatch/custom/CalculatorBase.cs
+++ /dev/null
@@ -1,142 +0,0 @@
-锘縰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
-    {
-        /// <summary>
-        /// /
-        /// </summary>
-        protected long _corpID = 0;
-        /// <summary>
-        /// 
-        /// </summary>
-        protected long _stationID = 0;
-
- 
-
-        /// <summary>
-        /// 璁$畻(鏈�浼�)
-        /// </summary>
-        public virtual List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcOptListCore(
-                     IStation.Calculation.DispatchAna.Model.RequestParasComplex requesParas,
-                     IStation.Calculation.DispatchAna.Model.MachineRunPara runParas,
-                     out string error_info)
-        {
-            error_info = "鏈疄鐜�!Error:21";
-            return null;
-        }
-
-        /// <summary>
-        /// 璁$畻淇濇寔褰撳墠寮�鏈虹姸鎬�
-        /// </summary>
-        /// <param name="requesParas"></param>
-        /// <param name="openMachineIdList"></param>
-        /// <param name="error_info"></param>
-        /// <returns></returns>
-        public virtual IStation.Calculation.DispatchAna.Model.AnaScheme CalcKeepStatusCore(
-                            IStation.Calculation.DispatchAna.Model.RequestParasComplex requesParas,
-                            List<long> openMachineIdList,
-                            out string error_info)
-        {
-            error_info = "鏈疄鐜�!Error:34";
-            return null;
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="CorpID"></param>
-        /// <param name="StationID"></param>
-        /// <param name="allMachineList"></param>
-        /// <returns></returns>
-        protected bool BuildMachineList(
-            long CorpID,
-            long StationID,
-            out List<IStation.Calculation.DispatchAna.Model.MachineDetail> allMachineList)
-        {
-            this._corpID = CorpID;
-            this._stationID = StationID;
-
-            allMachineList = null;
-            IStation.Service.Product service_product = new IStation.Service.Product();
-            IStation.Service.PumpCurve service_curve = new IStation.Service.PumpCurve();
-
-            var allEnginePumpList = service_product.GetEnginePumpListByBelongTypeAndBelongID(CorpID, 
-                IStation.ObjectType.Station, StationID); //鑾峰彇鏈烘车鍒楄〃
-            //var allPumpList =  service_product.GetChildPumpByID(this._stationID);
-            if (allEnginePumpList == null || allEnginePumpList.Count() == 0)
-            {
-                return false;
-            }
-
-
-            allMachineList = new List<IStation.Calculation.DispatchAna.Model.MachineDetail>();
-
-            allEnginePumpList = allEnginePumpList.OrderBy(x => x.SortCode).ToList();
-            foreach (var engine in allEnginePumpList)
-            {
-                IStation.Model.Product<IStation.Model.Pump> pump = service_product.GetChildPumpByEnginePumpID(CorpID, engine.ID);
-                if (pump == null)
-                    continue;
-
-                var curve_default = service_curve.GetWorkingByPumpID(CorpID, pump.ID);
-                if (curve_default == null)
-                    continue;
-                if (curve_default.CurveInfo == null)
-                    continue;
-                //var motor = service_product.GetChildMotorProductByID(machine.ID);
-                //if (motor == null)
-                //    continue;
-                IStation.Calculation.DispatchAna.Model.MachineDetail detail =
-                    new IStation.Calculation.DispatchAna.Model.MachineDetail(engine, pump, curve_default);
-                allMachineList.Add(detail);
-            }
-
-
-            return true;
-        }
-
-
-        #region 璁$畻鑳借��
-
-        /// <summary>
-        /// 璁$畻鍗冨惃鑳借��
-        /// </summary>
-        /// <param name="p">鍔熺巼kW</param>
-        /// <param name="q">鐬椂娴侀噺m鲁/h</param>
-        /// <returns>kW路h/km鲁</returns>
-        public static double CalculateWP(double p, double q)
-        {
-            if (q < 0.1)
-                return 0;
-            return p / q * 1000;
-        }
-
-        /// <summary>
-        /// 璁$畻鍗曚綅鑳借��
-        /// </summary>
-        /// <param name="p">鍔熺巼kW</param>
-        /// <param name="q">鐬椂娴侀噺m鲁/h</param>
-        /// <param name="h">鎵▼m</param>
-        /// <returns>kW路h/km鲁</returns>
-        public static double CalculateUWP(double p, double q, double h)
-        {
-            if (q < 0.1)
-                return default;
-            if (h < 0.1)
-                return default;
-            return p / q / h * 1000;
-        }
-
-        #endregion
-
-    }
-}
diff --git a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/Cxbz.cs b/Calculation/IStation.Calculation.Dispatch/custom/shys/station/Cxbz.cs
deleted file mode 100644
index 3594043..0000000
--- a/Calculation/IStation.Calculation.Dispatch/custom/shys/station/Cxbz.cs
+++ /dev/null
@@ -1,445 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace IStation.Calculation.DispatchAna
-{
-    /// <summary>
-    /// 闀垮叴娉电珯璋冨害鏂规璁$畻鍣�
-    /// </summary>
-    public class  Calculator4ShysCxbz : CalculatorBase, IDispatchAnalyCalculator
-    {
-        /// <summary>
-        /// 鑾峰彇褰撳墠璋冨害淇℃伅
-        /// </summary>
-        /// <param name="CorpID"></param>
-        /// <param name="StationID"></param>
-        /// <param name="error_info"></param>
-        /// <returns></returns>
-        public IStation.Calculation.DispatchAna.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_records = new Service.MonitorRecord().GetLastRecord(CorpID, monitor_ids);
-
-            IStation.Calculation.DispatchAna.Model.CurrentRecordBundle bundle = new Model.CurrentRecordBundle();
-
-            var water_level = monitor_records.Find(x => x.MonitorPointID == 70);
-            if(water_level != null)
-            {
-                bundle.WaterLevelList = new List<Model.CurrentRecordBundle.RecordValue>();
-                bundle.WaterLevelList.Add(new Model.CurrentRecordBundle.RecordValue("杩涙按娑蹭綅",water_level,2));
-            }
-
-            var middle_valve = monitor_records.Find(x => x.MonitorPointID == 71);
-            if (middle_valve != null)
-            {
-                bundle.VavleOpenList = new List<Model.CurrentRecordBundle.RecordValue>();
-                bundle.VavleOpenList.Add(new Model.CurrentRecordBundle.RecordValue(middle_valve));
-            }
-
-            var pipe_press1 = monitor_records.Find(x => x.MonitorPointID == 72);
-            var pipe_press2 = monitor_records.Find(x => x.MonitorPointID == 76);
-            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 == 73);
-            var pipe_flow2 = monitor_records.Find(x => x.MonitorPointID == 77);
-            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;
-        }
-
-
-        /// <summary>
-        /// 璁$畻(鏈�浼�):闇�瑕佹坊鍔犲疄鏃舵暟鎹�
-        /// </summary>
-        /// <param name="complex_request_paras">闇�姹傚弬鏁�</param>
-        /// <param name="machine_run_status"></param>
-        /// <param name="error_info">閿欒淇℃伅</param>
-        /// <returns></returns>
-        public List<Calculation.DispatchAna.Model.AnaScheme> CalcOptListByPre(
-                          IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
-                          IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
-                          out string error_info)
-        {
-            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 });
-            }
-
-
-            return CalcOptListCore(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>
-        public List<Calculation.DispatchAna.Model.AnaScheme> CalcOptListByWhole(
-                          IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
-                          IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
-                          out string error_info)
-        {
-            return CalcOptListCore(complex_request_paras, machine_run_status, out error_info);
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="complex_request_paras"></param>
-        /// <param name="openMachineIdList"></param>
-        /// <param name="error_info"></param>
-        /// <returns></returns>
-       public IStation.Calculation.DispatchAna.Model.AnaScheme CalcKeepStatusByWhole(
-                            IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
-                            List<long> openMachineIdList,
-                            out string error_info)
-        {
-            return CalcKeepStatusCore(complex_request_paras, openMachineIdList, out error_info);
-        }
-
-        /// <summary>
-        /// 璁$畻(鏈�浼�)
-        /// </summary>
-        /// <param name="complex_request_paras">闇�姹傚弬鏁�</param>
-        /// <param name="machine_run_status"></param>
-        /// <param name="error_info">閿欒淇℃伅</param>
-        /// <returns></returns>
-        public override  List<Calculation.DispatchAna.Model.AnaScheme> CalcOptListCore(
-                            IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
-                            IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
-                            out string error_info)
-        {
-            error_info = null;
-            this._corpID = 4;
-            this._stationID = 2;
-   
-            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)
-            {
-                return default;
-            }
-
-            double pipe1_TargetPess = complex_request_paras.OutletPipePara[0].TargetPress;
-            double pipe2_TargetPess = complex_request_paras.OutletPipePara[1].TargetPress;
-   
-            if(pipe1_TargetPess<0.01 || pipe2_TargetPess<0.01)
-            {
-                return default;
-            }
-            double water_level = 0;//姘翠綅
-            if (complex_request_paras.WaterLevelPara != null && complex_request_paras.WaterLevelPara.Count > 0)
-            {
-                water_level = complex_request_paras.WaterLevelPara.First().Value;
-            }
-            //var inletLevel = paras.MonitorPointInfoList.Find(x => x.SignalType == IStation.SignalType.姘翠綅);
-            //Elevation = inletLevel?.Elevation != null ? inletLevel.Elevation.Value : 0;//鑾峰彇娴嬬偣鐨勬爣楂�
-
-            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;
-
-            List<IStation.Calculation.DispatchAna.Model.MachineDetail> allMachineList = null;
-            if (!BuildMachineList(complex_request_paras.CorpID, complex_request_paras.StationID, out allMachineList))
-            {
-                error_info = "ERROR 70";
-                return null;
-            }
-
-            if (isOpenMiddleValve == 1)//闃�闂ㄥ紑鐨勭姸鎬佷笅 涓ょ鐩歌繛鏁版嵁鐩稿姞姹傚钩鍧囧��
-            {
-                IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper calc_pipe_helper =
-               new IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper();
-                calc_pipe_helper.InitialParas(
-                    pipe1_TargetFlow + pipe2_TargetFlow,
-                    water_level,
-                  (pipe1_TargetPess + pipe2_TargetPess) / 2,
-                  null, null,
-                  allMachineList, machine_run_status.MachineRunFilter);
-
-                return calc_pipe_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
-            }
-            else //闃�闂ㄥ叧鐨勭姸鎬佷笅  涓ょ鐩歌繛鏁版嵁鐩稿姞
-            {
-                var pipe1_machineIds = new List<long>() { 19, 22 };//1鍙锋车锛�2鍙锋车 
-                var pipe2_machineIds = new List<long>() { 25, 28 };//3鍙锋车锛�4鍙锋车 
-
-
-                IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper calc_pipe1_helper =
-         new IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper();
-
-                IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper calc_pipe2_helper =
-          new IStation.Calculation.DispatchAna.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.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.MachineRunFilter);
-
-                    return calc_pipe2_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
-                }
-                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.MachineRunFilter);
-                var pipe1_result = calc_pipe1_helper.CalcOptList(complex_request_paras.SchemeSortType, 3);
-
-
-                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.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 Calculation.DispatchAna.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<Calculation.DispatchAna.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<Calculation.DispatchAna.Model.AnaScheme>() { plan };
-            }
-        }
-
-
-        /// <summary>
-        /// 璁$畻淇濇寔褰撳墠寮�鏈虹姸鎬�
-        /// </summary>
-        /// <param name="complex_request_paras"></param>
-        /// <param name="openMachineIdList">寮�娉礗D</param>
-        /// <param name="error_info">閿欒淇℃伅</param>
-        /// <returns></returns>
-        public override IStation.Calculation.DispatchAna.Model.AnaScheme CalcKeepStatusCore(
-                            IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
-                            List<long> openMachineIdList,
-                            out string error_info)
-        {
-            this._corpID = 4;
-            this._stationID = 2;
-            if(openMachineIdList == null || openMachineIdList.Count == 0)
-            {
-                error_info = "ERROR 25";
-                return null;
-            }
-            error_info = null;
-            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 < 10 && pipe2_TargetFlow < 10)
-            {
-                return default;
-            }
-    
-            double pipe1_TargetPess = complex_request_paras.OutletPipePara[0].TargetPress;
-            double pipe2_TargetPess = complex_request_paras.OutletPipePara[1].TargetPress;
-
-
-            double water_level = 0;//姘翠綅
-            if (complex_request_paras.WaterLevelPara != null && complex_request_paras.WaterLevelPara.Count > 0)
-            {
-                water_level = complex_request_paras.WaterLevelPara.First().Value;
-            }
- 
-
-            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;
-
-            List<IStation.Calculation.DispatchAna.Model.MachineDetail> allMachineList = null;
-            if (!BuildMachineList(complex_request_paras.CorpID, complex_request_paras.StationID, out allMachineList))
-            {
-                error_info = "ERROR 70";
-                return null;
-            }
-
-            if (isOpenMiddleValve == 1)//闃�闂ㄥ紑鐨勭姸鎬佷笅 涓ょ鐩歌繛鏁版嵁鐩稿姞姹傚钩鍧囧��
-            {
-                double press = 0;
-                if(pipe1_TargetPess > 0.1 && pipe2_TargetPess > 0.1)
-                {
-                    press = (pipe1_TargetPess + pipe2_TargetPess) / 2;
-                }
-                else
-                {
-                    if (pipe1_TargetPess > 0.01)
-                        press = pipe1_TargetPess;
-                    else if (pipe2_TargetPess > 0.01)
-                        press = pipe2_TargetPess;
-                    else
-                        return null;
-                }
-                IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper calc_pipe_helper =
-                    new IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper();
-                calc_pipe_helper.InitialParas(
-                    pipe1_TargetFlow + pipe2_TargetFlow,
-                    water_level,
-                  press,
-                  null, null,
-                  allMachineList, null);
-
-                return calc_pipe_helper.CalcKeepStatus(openMachineIdList);
-            }
-            else //闃�闂ㄥ叧鐨勭姸鎬佷笅  涓ょ鐩歌繛鏁版嵁鐩稿姞
-            {
-                var pipe1_machineIds = new List<long>() { 19, 22 };//1鍙锋车锛�2鍙锋车 
-                var pipe2_machineIds = new List<long>() { 25, 28 };//3鍙锋车锛�4鍙锋车 
-
-                IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper calc_pipe1_helper
-                    = new IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper();
-
-                IStation.Calculation.DispatchAna.Common.DispatchAnaGeneralHelper calc_pipe2_helper 
-                    = new IStation.Calculation.DispatchAna.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(openMachineIdList);
-                }
-                else if (pipe1_TargetFlow < 30)
-                {
-                    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(openMachineIdList);
-                }
-                 
-
-
-
-                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(openMachineIdList);
-
-
-                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);
-
-                var pipe2_result = calc_pipe2_helper.CalcKeepStatus(openMachineIdList);
-
-                if (pipe1_result == null || pipe2_result == null)
-                    return default;
-
-
-
-                var connect_scheme = new Calculation.DispatchAna.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<Calculation.DispatchAna.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/general/Calculator.cs b/Calculation/IStation.Calculation.Dispatch/general/Calculator.cs
index ae1bbd1..9a95740 100644
--- a/Calculation/IStation.Calculation.Dispatch/general/Calculator.cs
+++ b/Calculation/IStation.Calculation.Dispatch/general/Calculator.cs
@@ -10,7 +10,7 @@
     /// <summary>
     /// 甯歌
     /// </summary> 
-    public class Calculator4StationGeneral : CalculatorBase, IDispatchAnalyCalculator
+    internal class Calculator4StationGeneral : CalculatorBase 
     {
         /// <summary>
         /// 鑾峰彇褰撳墠璋冨害淇℃伅
@@ -19,55 +19,19 @@
         /// <param name="StationID"></param>
         /// <param name="error_info"></param>
         /// <returns></returns>
-        public IStation.Calculation.DispatchAna.Model.CurrentRecordBundle GetCurrentRecord(long CorpID, long StationID, out string error_info)
+        public IStation.Calculation.DispatchAna.Model.CurrentRecordBundle GetCurrentRecord(
+            long CorpID, 
+            long StationID, 
+            out string error_info)
         {
             error_info = null;
             return null;
         }
-        /// <summary>
-        /// 璁$畻(鏈�浼�):闇�瑕佹坊鍔犲疄鏃舵暟鎹�
-        /// </summary>
-        /// <param name="complex_request_paras">闇�姹傚弬鏁�</param>
-        /// <param name="machine_run_status"></param>
-        /// <param name="error_info">閿欒淇℃伅</param>
-        /// <returns></returns>
-        public List<Calculation.DispatchAna.Model.AnaScheme> CalcOptListByPre(
-                          IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
-                          IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
-                          out string error_info)
-        {
-            return CalcOptListCore(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>
-        public List<Calculation.DispatchAna.Model.AnaScheme> CalcOptListByWhole(
-                          IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
-                          IStation.Calculation.DispatchAna.Model.MachineRunPara machine_run_status,
-                          out string error_info)
-        {
-            return CalcOptListCore(complex_request_paras, machine_run_status, out error_info);
-        }
+ 
 
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="complex_request_paras"></param>
-        /// <param name="openMachineIdList"></param>
-        /// <param name="error_info"></param>
-        /// <returns></returns>
-        public IStation.Calculation.DispatchAna.Model.AnaScheme CalcKeepStatusByWhole(
-                            IStation.Calculation.DispatchAna.Model.RequestParasComplex complex_request_paras,
-                            List<long> openMachineIdList,
-                            out string error_info)
-        {
-            return CalcKeepStatusByWhole(complex_request_paras, openMachineIdList, out error_info);
-        }
+   
         /// <summary>
         /// 璁$畻(鏈�浼�)
         /// </summary>
@@ -117,9 +81,11 @@
  
 
             List<IStation.Calculation.DispatchAna.Model.MachineDetail> allMachineList = null;
-            if (!BuildMachineList(complex_request_paras.CorpID, complex_request_paras.StationID, out allMachineList))
+            if (!BuildMachineList( 
+                out allMachineList,
+                out error_info))
             {
-                error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70";
+                error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
                 return null;
             }
 
@@ -130,7 +96,8 @@
                 target_flow,
                 water_level,
                 target_press,
-                complex_request_paras.OutletPipePara[0].TargetFlowRangeMin, complex_request_paras.OutletPipePara[0].TargetFlowRangeMax,
+                complex_request_paras.OutletPipePara[0].TargetFlowRangeMin,
+                complex_request_paras.OutletPipePara[0].TargetFlowRangeMax,
                 allMachineList,
                 machine_run_status.MachineRunFilter);
 
@@ -144,7 +111,7 @@
         /// <param name="openMachineIdList">寮�娉礗D</param>
         /// <param name="error_info">閿欒淇℃伅</param>
         /// <returns></returns>
-        public override IStation.Calculation.DispatchAna.Model.AnaScheme CalcKeepStatusCore(
+        protected override IStation.Calculation.DispatchAna.Model.AnaScheme CalcKeepStatusCore(
                             IStation.Calculation.DispatchAna.Model.RequestParasComplex requesParas,
                             List<long> openMachineIdList,
                             out string error_info)
@@ -192,9 +159,11 @@
             }
 
             List<IStation.Calculation.DispatchAna.Model.MachineDetail> allMachineList = null;
-            if (!BuildMachineList(requesParas.CorpID, requesParas.StationID, out allMachineList))
+            if (!BuildMachineList( 
+                out allMachineList,
+                out error_info))
             {
-                error_info = "ERROR 70";
+                error_info = "鏈烘车缁勬棤娉曟瀯寤�,ERROR 70,閿欒淇℃伅:" + error_info;
                 return null;
             }
 
@@ -203,9 +172,10 @@
             calc_pipe_helper.InitialParas(
                 target_flow,
                 water_level,
-                target_press ,
-                requesParas.OutletPipePara[0].TargetFlowRangeMin, requesParas.OutletPipePara[0].TargetFlowRangeMax,
-                allMachineList ,null );
+                target_press,
+                requesParas.OutletPipePara[0].TargetFlowRangeMin,
+                requesParas.OutletPipePara[0].TargetFlowRangeMax,
+                allMachineList, null);
 
             return calc_pipe_helper.CalcKeepStatus(openMachineIdList);
         }
diff --git a/Calculation/IStation.Calculation.Dispatch/helper/DispatchAnaGeneralHelper.cs b/Calculation/IStation.Calculation.Dispatch/helper/DispatchAnaGeneralHelper.cs
deleted file mode 100644
index 3400a89..0000000
--- a/Calculation/IStation.Calculation.Dispatch/helper/DispatchAnaGeneralHelper.cs
+++ /dev/null
@@ -1,2143 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace IStation.Calculation.DispatchAna.Common
-{
-    /// <summary>
-    /// 璋冨害鍒嗘瀽(鏍稿績绠楁硶)
-    /// </summary>
-    public class DispatchAnaGeneralHelper 
-    {
-        /// <summary>
-        /// 
-        /// </summary>
-        static public double MinFlowIngore = 50;//娴侀噺浣庝簬澶氬皯灏变笉鑰冭檻浜�
-        /// <summary>
-        /// 
-        /// </summary>
-        static public double ExtendMaxRatio = 1.25;//鏈�澶у欢闀跨巼 25%
-        /// <summary>
-        /// 
-        /// </summary>
-        static public double MinChangeFrequence = 15;//鏈�灏忓彉鍖栫殑棰戠巼
-        /// <summary>
-        /// 
-        /// </summary>
-        static public double ChangeFrequenceSpaece = 0.5;//棰戠巼鍙樺寲鍊�
-
-        private double _defaultInletDia = 1000;
-        private double _defaultOutletDia = 800;
- 
-        private double _targetQ;
-        private double _targetInletPress;
-        private double _targetOutletPress;
-        private double _targetQmax, _targetQmin;
-
-        private List<IStation.Calculation.DispatchAna.Model.MachineRunFilter> _machineRunFilterList = null;
-        private List<long> _must_open_machine_array = null;
-        private List<long> _must_close_machine_array = null;
-        private Dictionary<long, double> _machine_flow_limit_max_dict = null;
-        private Dictionary<long, double> _machine_flow_limit_min_dict = null;
-        private int _max_open_machine_number = 0;//鏈�澶氬紑鏈烘暟閲�
-        private List<IStation.Calculation.DispatchAna.Model.AnaScheme> _anaSchemeList = null;
-        private List<IStation.Calculation.DispatchAna.Model.MachineDetail> _allMachineList = null;
-        //缁勫悎杩愯绾︽潫(绂佹鍒ゆ柇)
-        private List<IStation.Calculation.DispatchAna.Model.CombineRunJudge> _allCombineRunJudgeList4Forbid = null;
-        //缁勫悎杩愯绾︽潫(蹇呴』鍒ゆ柇)
-        private List<List<long>> _allCombineRunJudgeList4Must = null;
-        /// <summary>
-        /// 鍒濆鍖栧弬鏁�
-        /// </summary>
-        /// <param name="targetQ"></param>
-        /// <param name="water_level"></param>
-        /// <param name="outlet_press"></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,
-            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;
-            this._targetQ = targetQ;
-            this._allMachineList = allEnginePumpList;
-
-
-            this._targetQmax = targetQ * 1.25;
-            this._targetQmin = targetQ * 0.85;
-            if (!string.IsNullOrEmpty(MinQ))
-            {
-                double minq = targetQ;
-                if (MinQ.Contains("%"))
-                {
-                    double ratio;
-                    if (double.TryParse(MinQ.Replace("%", ""), out ratio))
-                    {
-                        minq = targetQ * (1 - Math.Abs(ratio));
-                    }
-                }
-                else
-                {
-                    double.TryParse(MinQ, out minq);
-                }
-                if (minq < targetQ)
-                {
-                    _targetQmin = minq;
-                }
-            }
-            //IStation.LogHelper.Info("min_q:" + _targetQmin);
-
-            if (!string.IsNullOrEmpty(MaxQ))
-            {
-                double maxq = targetQ;
-                if (MaxQ.Contains("%"))
-                {
-                    double ratio;
-                    if (double.TryParse(MaxQ.Replace("%", ""), out ratio))
-                    {
-                        maxq = targetQ * (1 + Math.Abs(ratio));
-                    }
-                }
-                else
-                {
-                    double.TryParse(MaxQ, out maxq);
-                }
-                if (maxq > targetQ)
-                {
-                    _targetQmax = maxq;
-                }
-            }
-
-
-            InitialFilter(MachineRunFilterList);
-
-
-            return true;
-        }
-
-        #region 杩囨护
-        private void InitialFilter(List<IStation.Calculation.DispatchAna.Model.MachineRunFilter> MachineRunFilterList)
-        {
-            this._machineRunFilterList = MachineRunFilterList;
-
-            if (_machineRunFilterList != null)
-            {
-                _must_open_machine_array = null;
-                _must_close_machine_array = null;
-                _machine_flow_limit_max_dict = null;
-                _machine_flow_limit_min_dict = null;
-                foreach (var m in _machineRunFilterList)
-                {
-                    if (m.RunStatus == 1)
-                    {
-                        if (_must_open_machine_array == null)
-                            _must_open_machine_array = new List<long>();
-
-                        _must_open_machine_array.Add(m.MachineID);
-                    }
-
-                    if (m.RunStatus == 0)
-                    {
-                        if (_must_close_machine_array == null)
-                            _must_close_machine_array = new List<long>();
-
-                        _must_close_machine_array.Add(m.MachineID);
-                    }
-
-                    if (m.MaxFlow > 10)
-                    {
-                        if (this._machine_flow_limit_max_dict == null)
-                            _machine_flow_limit_max_dict = new Dictionary<long, double>();
-                        _machine_flow_limit_max_dict[m.MachineID] = m.MaxFlow;
-                    }
-
-                }
-
-            }
-        }
-
-        //鏄惁绗﹀悎杩囨护
-        private bool IsAccordMachineRunFilter(List<long> current_open_machine_id_array)
-        {
-            if (current_open_machine_id_array == null || current_open_machine_id_array.Count() == 0)
-                return false;
-
-            //蹇呴』寮�鏈�
-            if (_must_open_machine_array != null && _must_open_machine_array.Count > 0)
-            {
-                foreach (var machine_id in _must_open_machine_array)
-                {
-                    if (!current_open_machine_id_array.Contains(machine_id))
-                        return false;
-                }
-            }
-
-            //涓嶈兘寮�鏈�
-            if (_must_close_machine_array != null && _must_close_machine_array.Count > 0)
-            {
-                foreach (var machine_id in current_open_machine_id_array)
-                {
-                    if (_must_close_machine_array.Contains(machine_id))
-                        return false;
-                }
-            }
-
-
-            //寮�鏈虹粍鍚� 绾︽潫(绂佹)
-            if (_allCombineRunJudgeList4Forbid != null && _allCombineRunJudgeList4Forbid.Count() > 0)
-            {
-                foreach (var combineRunJudge in _allCombineRunJudgeList4Forbid)
-                {//绗﹀悎绂佹绾︽潫灏变笉琛�
-                    if (combineRunJudge.Judgement(current_open_machine_id_array))
-                        return false;
-                }
-            }
-
-
-            //寮�鏈虹粍鍚� 绾︽潫(蹇呴』)
-            if (this._allCombineRunJudgeList4Must != null)
-            {
-                foreach( var item_arr in this._allCombineRunJudgeList4Must)
-                {
-                    var q = from a in item_arr join b in current_open_machine_id_array on a equals b select a;
-
-                    bool flag = item_arr.Count == current_open_machine_id_array.Count && q.Count() == item_arr.Count;
-
-                    if (!flag)
-                        return false;
-                }
-            }
-            return true;
-        }
-        #endregion
-
-
-        /// <summary>
-        /// 璁$畻(鏈�浼�)
-        /// </summary>
-        /// <param name="SchemeSortType"></param>
-        /// <param name="ReturnSchemeNumber"></param>
-        /// <returns></returns>
-        public List<IStation.Calculation.DispatchAna.Model.AnaScheme> CalcOptList (
-            IStation.Calculation.DispatchAna.Model.eAnaSchemeSortType SchemeSortType, 
-            int ReturnSchemeNumber)
-        {
-            if (_allMachineList == null || _allMachineList.Count() == 0)
-            {
-                return null;
-            }
-
-
-            #region 鑾峰彇骞堕绠椾竴涓�
-
-            List<IStation.Calculation.DispatchAna.Model.FixPumpAnaData> fixPumpAnaDataList = new List<IStation.Calculation.DispatchAna.Model.FixPumpAnaData>();//鍥洪娉�
-            List<IStation.Calculation.DispatchAna.Model.FrePumpAnaData> frePumpAnaDataList = new List<IStation.Calculation.DispatchAna.Model.FrePumpAnaData>();//鍙橀娉�
-
-            foreach (var machine in _allMachineList)
-            {
-                if (_must_close_machine_array != null)
-                {
-                    if (_must_close_machine_array.Contains(machine.MachineID))
-                        continue;//蹇呴』鍏抽棴
-                }
-
-
-                if (machine.IsFrequency)
-                {//鍙橀娉�
-                    var anaData = GetFrePumpAnaData(machine);
-                    if (anaData != null)
-                        frePumpAnaDataList.Add(anaData);
-                }
-                else
-                {//鍥洪娉�
-                    var anaData = GetFixPumpAnaData(machine);
-                    if (anaData != null)
-                        fixPumpAnaDataList.Add(anaData);
-                }
-            }
-            #endregion
-
-            #region  寮�濮嬪垎鏋�
-            _anaSchemeList = new List<IStation.Calculation.DispatchAna.Model.AnaScheme>();
-
-            if (fixPumpAnaDataList == null || fixPumpAnaDataList.Count() == 0)
-            {//娌℃湁鍚堥�傜殑鍥洪娉�
-                AddOnlyFrePumpPrj(frePumpAnaDataList.ToArray());
-            }
-            else
-            {
-                //鍒嗘瀽娌℃湁鍙橀娉靛紑鍚殑鎯呭喌
-                AddOnlyFrePumpPrj(frePumpAnaDataList.ToArray());
-
-                //鍒嗘瀽鏈夊浐棰戞车寮�鍚殑鎯呭喌
-                for (int fixPumpNum = 1; fixPumpNum <= fixPumpAnaDataList.Count(); fixPumpNum++)
-                {
-                    //寰楀埌鎵�鏈夋帓鍒楃粍鍚�(宸ラ)
-                    List<IStation.Calculation.DispatchAna.Model.FixPumpAnaData[]> fixPumpAnaCombineList = IStation.Model.PermutationAndCombination<IStation.Calculation.DispatchAna.Model.FixPumpAnaData>.GetCombination(
-                        fixPumpAnaDataList.ToArray(), fixPumpNum);
-
-                    #region 鍒嗘瀽姣忕缁勫悎
-                    foreach (IStation.Calculation.DispatchAna.Model.FixPumpAnaData[] fixPumpAnaCombine in fixPumpAnaCombineList)
-                    {//閬嶅巻鍚勭宸ラ缁勫悎
-                        #region 妫�鏌ユ槸鍚︾鍚堝紑鏈虹害鏉�
-                        List<long> machine_ids = new List<long>();
-                        if (fixPumpAnaCombine != null)
-                        {
-                            foreach (var item in fixPumpAnaCombine)
-                                machine_ids.Add(item.MachineDetail.MachineID);
-                        }
-                        if (!IsAccordMachineRunFilter(machine_ids))
-                        {
-                            continue;
-                        }
-                        #endregion
-
-                        var fix_pump_total_flow = (from x in fixPumpAnaCombine select x.AnaItem.WorkPointQ).Sum();
-                        if (fix_pump_total_flow > _targetQmax)
-                        {
-                            continue;
-                        }
-                        if (fix_pump_total_flow > _targetQmin)
-                        {//鍙敤鍥洪娉靛嵆鍙�
-                            AddOnlyFixPumpPrj(fixPumpAnaCombine, fix_pump_total_flow);
-                        }
-                        else if (frePumpAnaDataList.Count() > 0)
-                        {
-                            //鍙湁涓�鍙板彉棰戞车
-                            AddSingleFreqPumpPrj1(fixPumpAnaCombine, frePumpAnaDataList.ToArray());
-                            //鏈�2鍙板彉棰戞车
-                            if (fixPumpAnaCombine.Count() >= 2)
-                            {
-                                AddMultiFreqPumpPrj2(fixPumpAnaCombine, frePumpAnaDataList.ToArray());
-                            }
-                            //鏈�3鍙板彉棰戞车
-                            if (fixPumpAnaCombine.Count() >= 3)
-                            {
-                                AddMultiFreqPumpPrj3(fixPumpAnaCombine, frePumpAnaDataList.ToArray());
-                            }
-                            //鏈�4鍙板彉棰戞车
-                            if (fixPumpAnaCombine.Count() >= 4)
-                            {
-                                AddMultiFreqPumpPrj4(fixPumpAnaCombine, frePumpAnaDataList.ToArray(), fix_pump_total_flow);
-                            }
-                            //鏈�5鍙板彉棰戞车
-                            if (fixPumpAnaCombine.Count() >= 5)
-                            {
-                                AddMultiFreqPumpPrj5(fixPumpAnaCombine, frePumpAnaDataList.ToArray(), fix_pump_total_flow);
-                            }
-                        }
-                    }
-                    #endregion
-                }
-            }
-            #endregion
-
-            //璁$畻
-            var ds_disp_project_list = new List<IStation.Calculation.DispatchAna.Model.AnaScheme>();
-            foreach (var project in _anaSchemeList)
-            {
-                //璁$畻娴侀噺
-                //project.TotalWrkQ = (from x in project.Items where x.WorkPointQ > 0 select x.WorkPointQ).Sum();
-                if (project.TotalWrkQ <= _targetQmax && project.TotalWrkQ >= this._targetQmin)
-                    ds_disp_project_list.Add(project);
-
-                project.UWP = Math.Round(project.UWP, 3);
-                project.WP = Math.Round(project.WP, 3);
-                project.SpanQ = Math.Round(project.TotalWrkQ - _targetQ, 0);
-                project.CalcItemParas();
-            }
-
-            // 0 鍔熺巼 1 娴侀噺闂撮殧
-            if (SchemeSortType == IStation.Calculation.DispatchAna.Model.eAnaSchemeSortType.鍔熺巼)
-                ds_disp_project_list = (from x in ds_disp_project_list orderby x.TotalWrkP select x).ToList();
-            else if (SchemeSortType == IStation.Calculation.DispatchAna.Model.eAnaSchemeSortType.娴侀噺宸��)
-                ds_disp_project_list = (from x in ds_disp_project_list orderby Math.Abs(x.SpanQ) select x).ToList();
-
-            //閲嶆柊缂栧彿ID
-            for (int i = 0; i < ds_disp_project_list.Count; i++)
-            {
-                ds_disp_project_list[i].ID = i + 1;
-            }
-
-            if (ReturnSchemeNumber <= 0)
-                return ds_disp_project_list;
-            else
-                return ds_disp_project_list.Take(ReturnSchemeNumber).ToList();
-        }
-
-        /// <summary>
-        /// 璁$畻(淇濇寔褰撳墠寮�娉电姸鎬�)
-        /// </summary>
-        /// <param name="openMachineIdList"></param> 
-        /// <returns></returns>
-        public IStation.Calculation.DispatchAna.Model.AnaScheme CalcKeepStatus(List<long> openMachineIdList)
-        {
-            if (_allMachineList == null || _allMachineList.Count() == 0)
-            {
-                return null;
-            }
-            if (openMachineIdList == null || openMachineIdList.Count() == 0)
-            {
-                return null;
-            }
-            this._allCombineRunJudgeList4Must = new List<List<long>>();
-            _allCombineRunJudgeList4Must.Add(openMachineIdList);
-
-            #region 鑾峰彇骞堕绠椾竴涓�
-
-            List<IStation.Calculation.DispatchAna.Model.FixPumpAnaData> fixPumpAnaDataList = new List<IStation.Calculation.DispatchAna.Model.FixPumpAnaData>();//鍥洪娉�
-            List<IStation.Calculation.DispatchAna.Model.FrePumpAnaData> frePumpAnaDataList = new List<IStation.Calculation.DispatchAna.Model.FrePumpAnaData>();//鍙橀娉�
-
-            foreach (var machine_id in openMachineIdList)
-            {
-                var machine = this._allMachineList.Find(x => x.MachineID == machine_id);
-                if (machine == null)
-                    continue;
-
-                if (machine.IsFrequency)
-                {//鍙橀娉�
-                    var anaData = GetFrePumpAnaData(machine);
-                    if (anaData != null)
-                        frePumpAnaDataList.Add(anaData);
-                }
-                else
-                {//鍥洪娉�
-                    var anaData = GetFixPumpAnaData(machine);
-                    if (anaData != null)
-                        fixPumpAnaDataList.Add(anaData);
-                }
-            }
-            #endregion
-
-            #region  寮�濮嬪垎鏋�
-            _anaSchemeList = new List<IStation.Calculation.DispatchAna.Model.AnaScheme>();
-
-            if (fixPumpAnaDataList == null || fixPumpAnaDataList.Count() == 0)
-            {//娌℃湁鍚堥�傜殑鍥洪娉�
-                AddOnlyFrePumpPrj(frePumpAnaDataList.ToArray());
-            }
-            else
-            {
-                var fix_pump_total_flow = (from x in fixPumpAnaDataList select x.AnaItem.WorkPointQ).Sum();
-         
-                if (fix_pump_total_flow > _targetQmin)
-                {//鍙敤鍥洪娉靛嵆鍙�
-                    AddOnlyFixPumpPrj(fixPumpAnaDataList.ToArray(), fix_pump_total_flow);
-                }
-                else
-                {
-                    int iFrePumpCount = frePumpAnaDataList.Count();
-                    if (iFrePumpCount == 0)
-                    {//鍙敤鍥洪娉靛嵆鍙�
-                        AddOnlyFixPumpPrj(fixPumpAnaDataList.ToArray(), fix_pump_total_flow);
-                    }
-                    else if (iFrePumpCount == 1)
-                    {//鍙湁涓�鍙板彉棰戞车
-                        AddSingleFreqPumpPrj1(fixPumpAnaDataList.ToArray(), frePumpAnaDataList.ToArray());
-                    }                 
-                    else if (iFrePumpCount == 2)
-                    {//鏈�2鍙板彉棰戞车
-                        AddMultiFreqPumpPrj2(fixPumpAnaDataList.ToArray(), frePumpAnaDataList.ToArray());
-                    }                
-                    else if (iFrePumpCount == 3)
-                    {//鏈�3鍙板彉棰戞车
-                        AddMultiFreqPumpPrj3(fixPumpAnaDataList.ToArray(), frePumpAnaDataList.ToArray());
-                    }
-                    else if (iFrePumpCount == 4)
-                    {//鏈�4鍙板彉棰戞车
-                        AddMultiFreqPumpPrj4(fixPumpAnaDataList.ToArray(), frePumpAnaDataList.ToArray(), fix_pump_total_flow);
-                    }             
-                    else if (iFrePumpCount == 5)
-                    { //鏈�5鍙板彉棰戞车
-                        AddMultiFreqPumpPrj5(fixPumpAnaDataList.ToArray(), frePumpAnaDataList.ToArray(), fix_pump_total_flow);
-                    }
-                    else
-                    { //鏈�6鍙板彉棰戞车
-                        AddMultiFreqPumpPrj6(fixPumpAnaDataList.ToArray(), frePumpAnaDataList.ToArray(), fix_pump_total_flow);
-                    }
-                }
-            }
-            #endregion
-
-            if (_anaSchemeList.Count() == 0)
-                return null;
-
-            //璁$畻
-            var ds_disp_project_list = new List<IStation.Calculation.DispatchAna.Model.AnaScheme>();
-            foreach (var project in _anaSchemeList)
-            {
-                project.UWP = Math.Round(project.UWP, 3);
-                project.WP = Math.Round(project.WP, 3);
-                project.SpanQ = Math.Round(project.TotalWrkQ - _targetQ, 0);
-                project.CalcItemParas();
-
-                ds_disp_project_list.Add(project);
-            }
-
-           return  (from x in ds_disp_project_list orderby x.TotalWrkP select x).FirstOrDefault();
-        }
-
-        #region 绠楀嚭鏄惁绗﹀悎鐨勫浐棰戞车:GetFixPumpAnaData
-        private IStation.Calculation.DispatchAna.Model.FixPumpAnaData GetFixPumpAnaData(IStation.Calculation.DispatchAna.Model.MachineDetail Machine)
-        {
-            if (Machine == null)
-                return null;
-            IStation.Calculation.DispatchAna.Model.AnaCurveItem anaData = new IStation.Calculation.DispatchAna.Model.AnaCurveItem();
-            if (CalcAnaCurve(Machine.MaxCurveInfoQH, Machine.MaxCurveInfoQP,
-                this._targetInletPress, this._targetOutletPress, this._defaultInletDia, this._defaultOutletDia, 50, ref anaData) <= 0)
-                return null;
-            
-            anaData.CurveInfoQH = Machine.MaxCurveInfoQH;
-            anaData.CurveInfoQP = Machine.MaxCurveInfoQP;
-            anaData.Frequence = 50;
-            anaData.Speed = Machine.Ratedn;
-
-            return new IStation.Calculation.DispatchAna.Model.FixPumpAnaData() { MachineDetail = Machine, AnaItem = anaData };
-        }
-        #endregion
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="InletPress"></param>
-        /// <param name="OutletPress"></param>
-        /// <param name="InletDia"></param>
-        /// <param name="OutletDia"></param>
-        /// <param name="Flow"></param>
-        /// <returns></returns>
-        private double CalcHeadByPress(double InletPress, double OutletPress,double InletDia,double OutletDia, double Flow)
-        {
-            //return (OutletPress - InletPress) * 102;
-            double h4Press = (OutletPress - InletPress) * 102;
-            if(Flow>0 && InletDia>0 && OutletDia > 0)
-            {
-                double rPipeInV = OtherPressCoeff * Flow / InletDia / InletDia;
-                double rPipeOutV = OtherPressCoeff * Flow / OutletDia / OutletDia;
-
-                double rVDif = (rPipeOutV * rPipeOutV - rPipeInV * rPipeInV) / 9.81 / 2.0;
-
-                return h4Press + rVDif;
-            }
-            else
-            {
-                return h4Press;
-            }
-        }
-
-        #region 绠楀嚭鏄惁绗﹀悎鐨勫彉棰戞车:GetFrePumpAnaData
-
-        private IStation.Calculation.DispatchAna.Model.FrePumpAnaData GetFrePumpAnaData(
-            IStation.Calculation.DispatchAna.Model.MachineDetail Machine)
-        {
-            if (Machine == null)
-                return null;
-
-            IStation.Calculation.DispatchAna.Model.FrePumpAnaData anaData = new IStation.Calculation.DispatchAna.Model.FrePumpAnaData();
-            anaData.MachineDetail = Machine;
-            anaData.AnaItemList = new List<IStation.Calculation.DispatchAna.Model.AnaCurveItem>();
-
-            double targetH =  this.CalcHeadByPress(this._targetInletPress,
-                this._targetOutletPress, this._defaultInletDia, this._defaultOutletDia, this._targetQ ) ;
-            //CalcHeadByPress(this._targetInletPress, this._targetOutletPress);
-
-
-
-
-            double maxH;
-            double minH;
-            var points50 = IStation.Model.FitCurveHelper.GetFitPoints(Machine.MaxCurveInfoQH, 50);
-            IStation.Model.FitCurveHelper.GetMinMaxPointY(points50, out maxH, out minH);
-            if (maxH < targetH)
-            {
-                return null;
-            }
-
-
-            var pointsMin = IStation.Common.SpeedSimuCalculer.GetSimuPointQH(Machine.MaxCurveInfoQH, 50, MinChangeFrequence);
-            IStation.Model.FitCurveHelper.GetMinMaxPointY(pointsMin, out maxH, out minH);
-            if (minH > targetH)
-            {
-                return null;
-            }
-
-            //鑾峰彇姣忎釜棰戠巼鐨勫��(绮楃畻)
-            for (double freqCurrentFrequ = 50; freqCurrentFrequ > MinChangeFrequence;
-                    freqCurrentFrequ = freqCurrentFrequ - ChangeFrequenceSpaece)
-            {
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curve = new IStation.Calculation.DispatchAna.Model.AnaCurveItem();
-                int ret = CalcAnaCurve(Machine.MaxCurveInfoQH, Machine.MaxCurveInfoQP, 
-                    this._targetInletPress, this._targetOutletPress, this._defaultInletDia, this._defaultOutletDia, freqCurrentFrequ, ref curve);
-                if (ret == -1)
-                    break;//-1 琛ㄧず鏈�澶ф壃绋嬮兘宸茬粡浣庝簬鐩爣鎵▼浜�, 娌″繀瑕佸啀杩唬浜�
-                if (ret == 0)
-                    continue;
-                curve.Speed = Machine.CalcSpeedByFrequence(curve.Frequence);
-
-                anaData.AnaItemList.Add(curve);
-            }
-
-
-
-            return anaData;
-        }
-        #endregion
-
-
-        #region 绮剧畻
-        private void CalcDetailAccurate(ref IStation.Calculation.DispatchAna.Model.AnaScheme project)
-        {
-            //娌℃湁鍙橀娉�, 灏辨病鏈夊繀瑕佺簿绠�
-            var frequecePumps = (from x in project.Items where x.IsFrequency select x);
-            if (frequecePumps == null || frequecePumps.Count() == 0)
-                return;
-
-
-            if (frequecePumps.Count() == 1)
-            {//鍙湁涓�鍙�,姣旇緝绠�鍗�
-                #region 鍙湁涓�鍙�,姣旇緝绠�鍗�
-                IStation.Calculation.DispatchAna.Model.AnaSchemeItem current_adjust_item = frequecePumps.FirstOrDefault();
-                var current_machine = (from x in this._allMachineList where x.MachineID == current_adjust_item.MachineID select x).FirstOrDefault();
-                if (current_machine == null)
-                    return;
-
-                var totalWrkQ_other = (from x in project.Items where x.WorkPointQ > 0 && x.MachineID != current_adjust_item.MachineID select x.WorkPointQ).Sum();
-                // var target_pump_flow = this._targetQ - totalWrkQ_other;
-
-                var max_fr = Math.Min(50, current_adjust_item.Frequence + ChangeFrequenceSpaece * 2);
-                var min_fr = current_adjust_item.Frequence - ChangeFrequenceSpaece * 2;
-
-                double flow_chajiu = Math.Abs(project.TotalWrkQ - this._targetQ);
-
-                for (double fre = max_fr; fre > min_fr; fre = fre - 0.1)
-                {
-                    IStation.Calculation.DispatchAna.Model.AnaCurveItem ana_item = new IStation.Calculation.DispatchAna.Model.AnaCurveItem();
-                    int ret = CalcAnaCurve(current_machine.MaxCurveInfoQH, current_machine.MaxCurveInfoQP,
-                        this._targetInletPress, this._targetOutletPress,
-                        this._defaultInletDia, this._defaultOutletDia,
-                        fre, ref ana_item);
-                    if (ret == -1)
-                        return;//-1 琛ㄧず鏈�澶ф壃绋嬮兘宸茬粡浣庝簬鐩爣鎵▼浜�, 娌″繀瑕佸啀杩唬浜�
-
-                    if (ret == 0)
-                        continue;
-                    var total_q = totalWrkQ_other + ana_item.WorkPointQ;
-                    if (total_q < this._targetQmin)
-                        break;//濡傛灉宸茬粡浣庝簬鏈�灏�,涓嶇敤鍐嶅彉棰戜簡
-                    if (Math.Abs(total_q - this._targetQ) < flow_chajiu)
-                    {
-                        flow_chajiu = Math.Abs(total_q - this._targetQ);
-                        current_adjust_item.Frequence = Math.Round(fre, 1);
-                        current_adjust_item.WorkPointQ = Math.Round(ana_item.WorkPointQ, 1);
-                        current_adjust_item.WorkPointP = Math.Round(ana_item.WorkPointP, 1);
-
-
-                        // 鍐嶆眹鎬讳竴涓�
-                        project.TotalWrkQ = (from x in project.Items where x.WorkPointQ > 0 select x.WorkPointQ).Sum();
-                        project.TotalWrkP = (from x in project.Items where x.WorkPointP > 0 select x.WorkPointP).Sum();
-
-                        project.UWP = Calcu_UWP(project.TotalWrkP, project.TotalWrkQ, this._targetInletPress, this._targetOutletPress);
-                        project.WP = Calcu_WP(project.TotalWrkP, project.TotalWrkQ);
-                    }
-
-                    if (total_q < this._targetQ)
-                    {
-                        break;
-                    }
-                }
-                #endregion
-
-            }
-            else if (frequecePumps.Count() == 2)
-            {
-                IStation.Calculation.DispatchAna.Model.AnaSchemeItem adjust_item_1 = frequecePumps.ElementAt(0);
-                IStation.Calculation.DispatchAna.Model.AnaSchemeItem adjust_item_2 = frequecePumps.ElementAt(1);
-                var adjust_machine_1 = (from x in this._allMachineList where x.MachineID == adjust_item_1.MachineID select x).FirstOrDefault();
-                if (adjust_machine_1 == null)
-                    return;
-                var adjust_machine_2 = (from x in this._allMachineList where x.MachineID == adjust_item_2.MachineID select x).FirstOrDefault();
-                if (adjust_machine_2 == null)
-                    return;
-                //闄や簡璋冭В娉电殑鍏朵粬娉垫祦閲�
-                var total_flow_other = (from x in project.Items where x.WorkPointQ > 0 && x.MachineID != adjust_machine_1.MachineID && x.MachineID != adjust_machine_2.MachineID select x.WorkPointQ).Sum();
-
-                var total_power_other = (from x in project.Items where x.WorkPointP > 0 && x.MachineID != adjust_machine_1.MachineID && x.MachineID != adjust_machine_2.MachineID select x.WorkPointP).Sum();
-
-                List<IStation.Calculation.DispatchAna.Model.AnaCurveItem> item_js_1 = new List<IStation.Calculation.DispatchAna.Model.AnaCurveItem>();
-                for (double fre = Math.Min(50, adjust_item_1.Frequence + ChangeFrequenceSpaece * 2);
-                    fre > adjust_item_1.Frequence - ChangeFrequenceSpaece * 2;
-                    fre = fre - 0.1)
-                {
-                    IStation.Calculation.DispatchAna.Model.AnaCurveItem ana_item = new IStation.Calculation.DispatchAna.Model.AnaCurveItem();
-                    int ret = CalcAnaCurve(adjust_machine_1.MaxCurveInfoQH, 
-                        adjust_machine_1.MaxCurveInfoQP, 
-                        this._targetInletPress, this._targetOutletPress,
-                        this._defaultInletDia,this._defaultOutletDia,
-                        fre, ref ana_item);
-                    if (ret == -1)
-                        break;
-                    item_js_1.Add(ana_item);
-                }
-
-                List<IStation.Calculation.DispatchAna.Model.AnaCurveItem> item_js_2 = new List<IStation.Calculation.DispatchAna.Model.AnaCurveItem>();
-                for (double fre = Math.Min(50, adjust_item_2.Frequence + ChangeFrequenceSpaece * 2);
-                    fre > adjust_item_2.Frequence - ChangeFrequenceSpaece * 2;
-                    fre = fre - 0.1)
-                {
-                    IStation.Calculation.DispatchAna.Model.AnaCurveItem ana_item = new IStation.Calculation.DispatchAna.Model.AnaCurveItem();
-                    int ret = CalcAnaCurve(adjust_machine_2.MaxCurveInfoQH, adjust_machine_2.MaxCurveInfoQP, 
-                        this._targetInletPress, this._targetOutletPress,
-                        this._defaultInletDia, this._defaultOutletDia, fre, ref ana_item);
-                    if (ret == -1)
-                        break;
-                    item_js_2.Add(ana_item);
-                }
-
-                double ump_chajiu = project.UWP;
-
-                foreach (var item1 in item_js_1)
-                {
-                    foreach (var item2 in item_js_2)
-                    {
-                        var total_flow = item1.WorkPointQ + item2.WorkPointQ + total_flow_other;
-                        if (Math.Abs(total_flow - this._targetQ) < this._targetQ * 0.01)
-                        {
-                            var total_power = item1.WorkPointP + item2.WorkPointP + total_power_other;
-                            var uwp = Calcu_UWP(total_power, total_flow, this._targetInletPress, this._targetOutletPress);
-
-                            if (uwp < ump_chajiu)
-                            {
-                                adjust_item_1.ResetItem(item1);
-                                adjust_item_2.ResetItem(item2);
-                                adjust_item_1.Frequence = Math.Round(item1.Frequence, 1);
-                                adjust_item_2.Frequence = Math.Round(item2.Frequence, 1);
-
-                                // 鍐嶆眹鎬讳竴涓�
-                                project.TotalWrkQ = (from x in project.Items where x.WorkPointQ > 0 select x.WorkPointQ).Sum();
-                                project.TotalWrkP = (from x in project.Items where x.WorkPointP > 0 select x.WorkPointP).Sum();
-
-                                project.UWP = Calcu_UWP(project.TotalWrkP, project.TotalWrkQ, this._targetInletPress, this._targetOutletPress);
-                                project.WP = Calcu_WP(project.TotalWrkP, project.TotalWrkQ);
-                            }
-
-                        }
-                    }
-                }
-
-
-
-            }
-            else
-            {
-                //鍝釜娉垫祦閲忓ぇ,灏辫皟鏁村摢涓车
-                IStation.Calculation.DispatchAna.Model.AnaSchemeItem aj_pump = frequecePumps.FirstOrDefault();
-                foreach (var p in project.Items)
-                {
-                    if (!p.IsFrequency)
-                        continue;
-                    if (p.WorkPointQ > aj_pump.WorkPointQ)
-                    {
-                        aj_pump = p;
-                    }
-                }
-                //闄や簡璋冭В娉电殑鍏朵粬娉垫祦閲�
-                var total_flow_other = (from x in project.Items where x.WorkPointQ > 0 && x.MachineID != aj_pump.MachineID select x.WorkPointQ).Sum();
-                //
-                double flow_chajiu = Math.Abs(project.TotalWrkQ - this._targetQ);
-                //
-                var pump_curve = (from x in this._allMachineList where x.MachineID == aj_pump.MachineID select x).FirstOrDefault();
-                if (pump_curve != null)
-                {
-                    var max_fr = Math.Min(50, aj_pump.Frequence + ChangeFrequenceSpaece * 2);
-                    var min_fr = aj_pump.Frequence - ChangeFrequenceSpaece * 2;
-                    for (double fre = max_fr; fre > min_fr; fre = fre - 0.1)
-                    {
-                        IStation.Calculation.DispatchAna.Model.AnaCurveItem curve = new IStation.Calculation.DispatchAna.Model.AnaCurveItem();
-                        int ret = CalcAnaCurve(pump_curve.MaxCurveInfoQH, pump_curve.MaxCurveInfoQP, 
-                            this._targetInletPress, this._targetOutletPress,
-                            this._defaultInletDia, this._defaultOutletDia, fre, ref curve);
-                        if (ret == -1)
-                            break;//-1 琛ㄧず鏈�澶ф壃绋嬮兘宸茬粡浣庝簬鐩爣鎵▼浜�, 娌″繀瑕佸啀杩唬浜�
-                        if (ret == 0)
-                            continue;
-                        var total_q = total_flow_other + curve.WorkPointQ;
-                        if (total_q < this._targetQmin)
-                            break;//濡傛灉宸茬粡浣庝簬鏈�灏�,涓嶇敤鍐嶅彉棰戜簡
-                        if (Math.Abs(total_q - this._targetQ) < flow_chajiu)
-                        {
-                            flow_chajiu = Math.Abs(total_q - this._targetQ);
-                            aj_pump.Frequence = Math.Round(fre, 1);
-                            aj_pump.WorkPointQ = Math.Round(curve.WorkPointQ, 1);
-                            aj_pump.WorkPointP = Math.Round(curve.WorkPointP, 1);
-
-                            //鍐嶆眹鎬讳竴涓�
-                            project.TotalWrkQ = (from x in project.Items where x.WorkPointQ > 0 select x.WorkPointQ).Sum();
-                            project.TotalWrkP = (from x in project.Items where x.WorkPointP > 0 select x.WorkPointP).Sum();
-
-                            project.UWP = Calcu_UWP(project.TotalWrkP, project.TotalWrkQ, this._targetInletPress, this._targetOutletPress);
-                            project.WP = Calcu_WP(project.TotalWrkP, project.TotalWrkQ);
-                        }
-
-                        if (total_q < this._targetQ)
-                        {
-                            break;
-                        }
-                    }
-                }
-            }
-
-
-        }
-        #endregion
-
-
-        #region 鏍规嵁棰戠巼鍊�,璁$畻鍙橀鏇茬嚎
-        /// <summary>
-        /// 鏍规嵁棰戠巼鍊�,璁$畻鍙橀鏇茬嚎(澶栭儴涔熶細璋冪敤)
-        /// </summary>
-        /// <param name="MaxCurveInfoQH"></param>
-        /// <param name="MaxCurveInfoQP"></param>
-        /// <param name="inletPress"></param>
-        /// <param name="outletPress"></param>
-        /// <param name="InletDia"></param>
-        /// <param name="OutletDia"></param>
-        /// <param name="freqCurrentFrequ"></param>
-        /// <param name="ana_data"></param>
-        /// <returns></returns>
-        public static  int CalcAnaCurve(
-            IStation.Model.CurveExpress MaxCurveInfoQH,
-            IStation.Model.CurveExpress MaxCurveInfoQP,
-            double inletPress, double outletPress,
-            double InletDia, double OutletDia,
-            double freqCurrentFrequ,//棰戠巼鍊�
-            ref IStation.Calculation.DispatchAna.Model.AnaCurveItem ana_data)
-        {
-            if (ana_data == null)
-                ana_data = new IStation.Calculation.DispatchAna.Model.AnaCurveItem();
-
-            if (Math.Abs(freqCurrentFrequ - 50) < 0.1)
-            {
-                ana_data.Frequence = freqCurrentFrequ;
-                ana_data.CurveInfoQH = MaxCurveInfoQH;
-                ana_data.CurveInfoQP = MaxCurveInfoQP;
-
-                double flow = 0;
-                if (!GetFolwByPress(ana_data.CurveInfoQH, inletPress, outletPress, InletDia, OutletDia, ref flow))
-                {
-                    ana_data.IsOverMaxH = true;
-                    ana_data.Note = "宸茶秴鍑烘渶澶у彲琛岀殑娴侀噺";
-                    return 0;
-                }
-                flow = Math.Round(flow, 1);
-
-                var head = IStation.Model.FitCurveHelper.GetFitPointY(ana_data.CurveInfoQH, Math.Round(flow, 1));
-                head = Math.Round(head, 1);
-                ana_data.WorkPointQ = flow;
-                ana_data.WorkPointH = head;
-                ana_data.WorkPointP = Math.Round(IStation.Model.FitCurveHelper.GetFitPointY(ana_data.CurveInfoQP, ana_data.WorkPointQ), 1);
-                ana_data.WorkPointE = Math.Round(IStation.Common.PumpParaHelper.CalculateE(ana_data.WorkPointQ, ana_data.WorkPointH, ana_data.WorkPointP), 1);
-
-                ana_data.IsExtendCurve = false;
-                if (flow > ana_data.CurveInfoQH.Max)
-                {//鍦ㄥ欢闀跨嚎涓�
-                    ana_data.IsExtendCurve = true;
-
-                    //寤堕暱鐜�
-                    double extRatioQ = Math.Round(flow * 100 / ana_data.CurveInfoQH.Max, 1);
-                    ana_data.Note = string.Format("鍦ㄥ欢闀挎洸绾块儴鍒�,鍙傛暟鍙兘涓嶅噯纭�,寤堕暱鐜囦负:{0:0.0}", extRatioQ);
-                }
-
-                return 1;
-            }
-            else
-            {
-                #region 鍙橀
-
-                ana_data.Frequence = Math.Round(freqCurrentFrequ, 1);
-
-
-                ana_data.CurveInfoQH = IStation.Common.SpeedSimuCalculer.GetSimuPointQH(MaxCurveInfoQH, 50, ana_data.Frequence);
-                ana_data.CurveInfoQP = IStation.Common.SpeedSimuCalculer.GetSimuPointQP(MaxCurveInfoQP, 50, ana_data.Frequence);
-
-                double flow = 0;
-                if (!GetFolwByPress(ana_data.CurveInfoQH, inletPress, outletPress, InletDia, OutletDia, ref flow))
-                {
-                    ana_data.IsOverMaxH = true;
-                    ana_data.Note = "宸茶秴鍑烘渶澶у彲琛岀殑娴侀噺";
-                    return 0;
-                }
-                flow = Math.Round(flow, 1);
-
-                var head = IStation.Model.FitCurveHelper.GetFitPointY(ana_data.CurveInfoQH, Math.Round(flow, 1));
-                head = Math.Round(head, 1);
-                ana_data.WorkPointQ = flow;
-                ana_data.WorkPointH = head;
-                ana_data.WorkPointP = Math.Round(IStation.Model.FitCurveHelper.GetFitPointY(ana_data.CurveInfoQP, ana_data.WorkPointQ), 1);
-                ana_data.WorkPointE = Math.Round(IStation.Common.PumpParaHelper.CalculateE(ana_data.WorkPointQ, ana_data.WorkPointH, ana_data.WorkPointP), 1);
-
-                ana_data.IsExtendCurve = false;
-                if (flow > ana_data.CurveInfoQH.Max)
-                {//鍦ㄥ欢闀跨嚎涓�
-                    ana_data.IsExtendCurve = true;
-
-                    //寤堕暱鐜�
-                    double extRatioQ = Math.Round(flow * 100 / ana_data.CurveInfoQH.Max, 1);
-                    ana_data.Note = string.Format("鍦ㄥ欢闀挎洸绾块儴鍒�,鍙傛暟鍙兘涓嶅噯纭�,寤堕暱鐜囦负:{0:0.0}", extRatioQ);
-                }
-
-
-
-                #endregion
-
-                return 1;
-            }
-
-        }
-
-        //鏍规嵁鍘嬪樊璁$畻娴侀噺
-        private static double OtherPressCoeff = 4 * 1000 / Math.PI / 3.6;
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="curveInfoQH"></param>
-        /// <param name="InletPress"></param>
-        /// <param name="OutletPress"></param>
-        /// <param name="InletDia"></param>
-        /// <param name="OutletDia"></param>
-        /// <param name="flow"></param>
-        /// <returns></returns>
-        public static bool GetFolwByPress(
-            IStation.Model.CurveExpress curveInfoQH,
-            double InletPress, double OutletPress,
-            double InletDia, double OutletDia,
-            ref double flow)
-        {
-            if(InletDia <1)
-              InletDia = 1000;
-            if (OutletDia < 1)
-                OutletDia = 800;
-
-            double g = 9.81;
-
-            double h4Press =  (OutletPress - InletPress) * 102;
-            //璁$畻娴侀噺
-            var points = IStation.Model.FitCurveHelper.GetFitPointsByExtend(curveInfoQH, ExtendMaxRatio, 50);
-            List<IStation.Model.CurvePoint> listQ = IStation.Model.FitCurveHelper.GetInterPointX(points, h4Press);
-            if (listQ == null || listQ.Count == 0)
-            {
-                return false;
-            }
-
-            flow = listQ.Last().X;
-
-            double initialQ = listQ.Last().X;
-            double calcQ = initialQ;//鐢ㄤ簬璁$畻鐨勬祦閲�
-            for (int calcNo = 1; calcNo <= 3; calcNo++)
-            {
-                double rPipeInV = OtherPressCoeff * calcQ / InletDia / InletDia;
-                double rPipeOutV = OtherPressCoeff * calcQ / OutletDia / OutletDia;
-
-                double rVDif = (rPipeOutV * rPipeOutV - rPipeInV * rPipeInV) / g / 2.0;
-                double dieDai1H = h4Press + rVDif;
-
-                if (GetFolwByHead(points, dieDai1H, ref flow))
-                {
-                    if (Math.Abs(calcQ - flow) / flow < 0.005)
-                    {
-                        return true;
-                    }
-                    //缁х画杩唬
-                    if (calcQ > flow)
-                    {
-                        calcQ = flow + Math.Abs(calcQ - flow) / 2;
-                    }
-                    else
-                    {
-                        calcQ = flow - Math.Abs(calcQ - flow) / 2;
-                    }
-                }
-                else
-                {
-                    return false;
-                }
-            }
-
-            return true;
-        }
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="curveInfoQH"></param>
-        /// <param name="h"></param>
-        /// <param name="q"></param>
-        /// <returns></returns>
-        public static bool GetFolwByHead(List<IStation.Model.CurvePoint> curveInfoQH, double h, ref double q)
-        {
-            List<IStation.Model.CurvePoint> listQ = IStation.Model.FitCurveHelper.GetInterPointX(curveInfoQH, h);
-            if (listQ == null || listQ.Count == 0)
-            {
-                return false;
-            }
-
-            q = listQ.Last().X;
-
-            return true;
-        }
-        /// <summary>
-        /// 鏍规嵁棰戠巼鍊�,璁$畻鍙橀鏇茬嚎
-        /// </summary>
-        /// <param name="MaxCurveInfoQH"></param>
-        /// <param name="targetH"></param>
-        /// <param name="freqCurrentFrequ"></param>
-        /// <param name="curve"></param>
-        /// <returns></returns>
-        public static int CalcAnaCurveDDD(
-            IStation.Model.CurveExpress MaxCurveInfoQH,
-            double targetH,
-            double freqCurrentFrequ,//棰戠巼鍊�
-            ref IStation.Calculation.DispatchAna.Model.AnaCurveItem curve)
-        {
-            if (curve == null)
-                curve = new IStation.Calculation.DispatchAna.Model.AnaCurveItem();
-            if (Math.Abs(freqCurrentFrequ - 50) < 0.1)
-            {
-                curve.Frequence = freqCurrentFrequ;
-                curve.CurveInfoQH = MaxCurveInfoQH;
-                double maxH;
-                double minH;
-                var points = IStation.Model.FitCurveHelper.GetFitPointsByExtend(curve.CurveInfoQH, ExtendMaxRatio, 50);
-                IStation.Model.FitCurveHelper.GetMinMaxPointY(points, out maxH, out minH);
-                if (maxH < targetH)
-                {
-                    curve.IsOverMaxH = true;
-                    curve.Note = "宸茶秴鍑烘渶澶ц繍琛屾壃绋�";
-                    return -1;//-1 琛ㄧず鏈�澶ф壃绋嬮兘宸茬粡浣庝簬鐩爣鎵▼浜�, 娌″繀瑕佸啀杩唬浜�
-                }
-
-                List<IStation.Model.CurvePoint> interPts = IStation.Model.FitCurveHelper.GetInterPointX(points, targetH);
-                if (interPts == null || interPts.Count == 0)
-                {
-                    curve.IsOverMaxH = true;
-                    curve.Note = "宸茶秴鍑烘渶澶у彲琛岀殑娴侀噺";
-                    return 0;
-                }
-                IStation.Model.CurvePoint pt = interPts.Last();
-                if (pt.X < MinFlowIngore)
-                {
-                    curve.IsOverMaxH = true;
-                    curve.Note = "宸茶秴鍑烘渶澶у彲琛岀殑娴侀噺";
-                    return -1;
-                }
-
-                curve.IsExtendCurve = false;
-                curve.WorkPointQ = Math.Round(pt.X, 1);
-                curve.WorkPointH = Math.Round(pt.Y, 1);
-
-                if (pt.X > curve.CurveInfoQH.Max)
-                {//鍦ㄥ欢闀跨嚎涓�
-                    curve.IsExtendCurve = true;
-
-                    //寤堕暱鐜�
-                    double extRatioQ = Math.Round(pt.X * 100 / curve.CurveInfoQH.Max, 1);
-                    curve.Note = string.Format("鍦ㄥ欢闀挎洸绾块儴鍒�,鍙傛暟鍙兘涓嶅噯纭�,寤堕暱鐜囦负:{0:0.0}", extRatioQ);
-
-                    //鏁堢巼寤堕暱涓嶇ǔ瀹�
-                    //if (anaData.CurveInfoQP != null)
-                    //{
-                    //    var exPointsQP = IStation.Model.FitCurveHelper.GetFitPointsByExtend(anaData.CurveInfoQP, ExtendMaxRatio, 50);//寤堕暱  
-                    //    anaData.WorkPointP = Math.Round(IStation.Model.FitCurveHelper.GetFitPointY(exPointsQP, anaData.WorkPointQ), 1);
-                    //    anaData.WorkPointE = IStation.Common.PumpParaHelper.CalculateE(anaData.WorkPointQ, anaData.WorkPointH, anaData.WorkPointP);
-                    //}
-                }
-                else
-                {
-                    curve.IsExtendCurve = false;
-                }
-                return 1;
-            }
-            else
-            {
-                #region 鍙橀
-
-                curve.Frequence = freqCurrentFrequ;
-
-
-                curve.CurveInfoQH = IStation.Common.SpeedSimuCalculer.GetSimuPointQH(MaxCurveInfoQH, 50, freqCurrentFrequ);
-
-                var points = IStation.Model.FitCurveHelper.GetFitPointsByExtend(curve.CurveInfoQH, ExtendMaxRatio, 50);//寤堕暱
-
-                //IStation.Model.FitCurveHelper.GetMinMaxPointY(points, out maxH, out minH); 
-                List<IStation.Model.CurvePoint> extPtsQH = IStation.Model.FitCurveHelper.GetInterPointX(points, targetH);
-                if (extPtsQH == null || extPtsQH.Count == 0)
-                {//鍦ㄥ欢闀跨嚎閮芥病鏈変氦鐐�,灏变笉瑕佸啀杩唬浜�.
-                    if (targetH > curve.CurveInfoQH.Index0)
-                        return -1;//-1 琛ㄧず鏈�澶ф壃绋嬮兘宸茬粡浣庝簬鐩爣鎵▼浜�, 娌″繀瑕佸啀杩唬浜�
-
-                    return 0;
-                }
-
-                IStation.Model.CurvePoint pt = extPtsQH.Last();
-                if (pt.X < MinFlowIngore)
-                {
-                    return -1;
-                }
-
-
-                curve.IsExtendCurve = false;
-                curve.WorkPointQ = Math.Round(pt.X, 1);
-                curve.WorkPointH = Math.Round(pt.Y, 1);
-
-                if (pt.X > curve.CurveInfoQH.Max)
-                {//鍦ㄥ欢闀跨嚎涓�
-                    curve.IsExtendCurve = true;
-                    //寤堕暱鐜�
-                    double extRatioQ = Math.Round(pt.X * 100 / curve.CurveInfoQH.Max, 1);
-                    curve.Note = string.Format("鍦ㄥ欢闀挎洸绾块儴鍒�,鍙傛暟鍙兘涓嶅噯纭�,寤堕暱鐜囦负:{0:0.0}", extRatioQ);
-                    //if (MaxCurveInfoQP != null)
-                    //{
-                    //    curve.CurveInfoQP = IStation.Common.SpeedSimuCalculer.GetSimuPointQP(MaxCurveInfoQP, 50, freqCurrentFrequ);
-                    //    var exPointsQP = IStation.Model.FitCurveHelper.GetFitPointsByExtend(curve.CurveInfoQP, ExtendMaxRatio, 50);//寤堕暱
-                    //    curve.WorkPointP = Math.Round(IStation.Model.FitCurveHelper.GetFitPointY(exPointsQP, curve.WorkPointQ), 1);
-                    //    curve.WorkPointE = IStation.Common.PumpParaHelper.CalculateE(curve.WorkPointQ, curve.WorkPointH, curve.WorkPointP);
-                    //} 
-                }
-                else
-                {
-                    curve.IsExtendCurve = false;
-                    //if (MaxCurveInfoQP != null)
-                    //{
-                    //    curve.CurveInfoQP = IStation.Common.SpeedSimuCalculer.GetSimuPointQP(MaxCurveInfoQP, 50, freqCurrentFrequ);
-                    //    curve.WorkPointP = Math.Round(IStation.Model.FitCurveHelper.GetFitPointY(curve.CurveInfoQP, curve.WorkPointQ), 1);
-                    //    curve.WorkPointE = IStation.Common.PumpParaHelper.CalculateE(curve.WorkPointQ, curve.WorkPointH, curve.WorkPointP);
-                    //}
-                }
-                #endregion
-
-                return 1;
-            }
-
-        }
-
-
-        #endregion
-
-
-        #region 娣诲姞椤圭洰 (鍙湁鐢ㄥ浐棰戞车)
-        private IStation.Calculation.DispatchAna.Model.AnaScheme AddOnlyFixPumpPrj(
-            IStation.Calculation.DispatchAna.Model.FixPumpAnaData[] fixPumpAnaDataList,
-            double totalQ)
-        {
-            //
-            var rowPrj = new IStation.Calculation.DispatchAna.Model.AnaScheme();
-
-            rowPrj.TotalWrkQ = totalQ;
-            rowPrj.TotalWrkH = Math.Round( this.CalcHeadByPress(this._targetInletPress,
-                this._targetOutletPress, this._defaultInletDia, this._defaultOutletDia, totalQ),3);
-            rowPrj.Items = new List<IStation.Calculation.DispatchAna.Model.AnaSchemeItem>();
-
-            foreach (var fixPump in fixPumpAnaDataList)
-            {
-                if (fixPump.AnaItem.WorkPointQ < 1)
-                    continue;
-
-                var itemRow = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(fixPump.MachineDetail, fixPump.AnaItem);
-
-                rowPrj.Items.Add(itemRow);
-            }
-            AddScheme(rowPrj, false);
-
-            return rowPrj;
-        }
-        #endregion
-
-
-        #region 娣诲姞椤圭洰 鍙湁鐢ㄥ彉棰戦娉靛嵆鍙�
-        private void AddOnlyFrePumpPrj(
-            IStation.Calculation.DispatchAna.Model.FrePumpAnaData[] freqPumpAnaList)
-        {
-            AddSingleFreqPumpPrj1(null, freqPumpAnaList);
-
-            //鏈�2鍙板彉棰戞车
-            if (freqPumpAnaList.Count() >= 2)
-            {
-                AddMultiFreqPumpPrj2(null, freqPumpAnaList);
-            }
-
-            //鏈�3鍙板彉棰戞车
-            if (freqPumpAnaList.Count() >= 3)
-            {
-                AddMultiFreqPumpPrj3(null, freqPumpAnaList);
-            }
-
-            //鏈�4鍙板彉棰戞车
-            if (freqPumpAnaList.Count() >= 4)
-            {
-                AddMultiFreqPumpPrj4(null, freqPumpAnaList, 0);
-            }
-
-            //鏈�5鍙板彉棰戞车
-            if (freqPumpAnaList.Count() >= 5)
-            {
-                AddMultiFreqPumpPrj5(null, freqPumpAnaList, 0);
-            }
-
-            //鏈�6鍙板彉棰戞车
-            //if (freqPumpAnaList.Count >= 6)
-            //{
-            //    AddMultiFreqPumpPrj6(null, freqPumpAnaList, 0);
-            //}
-        }
-        #endregion
-
-
-        #region 娣诲姞椤圭洰 鍙湁1鍙板彉棰戞车:AddOneFreqPumpPrj
-        private int AddSingleFreqPumpPrj1(
-            IStation.Calculation.DispatchAna.Model.FixPumpAnaData[] allFixPumpAnaList,
-            IStation.Calculation.DispatchAna.Model.FrePumpAnaData[] allFreqPumpAnaList)
-        {
-            if (allFreqPumpAnaList == null || allFreqPumpAnaList.Count() == 0)
-                return 0;
-
-            //鍒ゆ柇鏈�澶у紑鏈烘暟
-            if (_max_open_machine_number > 0)
-            {
-                int macine_number = 1;
-                if (allFixPumpAnaList != null)
-                {
-                    macine_number = macine_number + allFixPumpAnaList.Count();
-                }
-                if (macine_number > _max_open_machine_number)
-                    return 0;
-            }
-
-            double fix_pump_total_flow = 0;
-            if (allFixPumpAnaList != null)
-            {
-                fix_pump_total_flow = (from x in allFixPumpAnaList select x.AnaItem.WorkPointQ).Sum();
-            }
-            if (fix_pump_total_flow >= this._targetQ * 0.99)
-                return 0;
-
-            int addPrjNum = 0;
-            foreach (var freqPump in allFreqPumpAnaList)
-            {
-                #region 妫�鏌ユ槸鍚︾鍚堝紑鏈虹害鏉�
-                List<long> machine_ids = new List<long>();
-                machine_ids.Add(freqPump.MachineDetail.MachineID);
-                if (allFixPumpAnaList != null)
-                {
-                    foreach (var item in allFixPumpAnaList)
-                        machine_ids.Add(item.MachineDetail.MachineID);
-                }
-                if (!IsAccordMachineRunFilter(machine_ids))
-                {
-                    continue;
-                }
-                #endregion
-
-
-                double h = //this.CalcHeadByPress(this._targetInletPress, this._targetOutletPress);
-                    Math.Round(this.CalcHeadByPress(this._targetInletPress, this._targetOutletPress,
-                        this._defaultInletDia, this._defaultOutletDia, this._targetQ), 3);
-
-                var wrkSpeed = IStation.Common.SpeedSimuCalculer.GetSimuValue(
-                                 freqPump.MachineDetail.MaxCurveInfoQH,
-                                 new IStation.Model.CurvePoint(_targetQ - fix_pump_total_flow, h), 2900);
-
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem currentAna = new IStation.Calculation.DispatchAna.Model.AnaCurveItem();
-
-                double fre = Math.Round(50 * wrkSpeed / 2900, 1);
-                int ret = CalcAnaCurve(freqPump.MachineDetail.MaxCurveInfoQH, 
-                    freqPump.MachineDetail.MaxCurveInfoQP, this._targetInletPress, this._targetOutletPress,
-                    this._defaultInletDia, this._defaultOutletDia, fre, ref currentAna);
-                if (ret == -1)
-                    continue;
-                if (ret == 0)
-                    continue;
-                currentAna.Speed = freqPump.MachineDetail.CalcSpeedByFrequence(fre);
-
-
-                var rowPrj = new IStation.Calculation.DispatchAna.Model.AnaScheme();
-                rowPrj.Items = new List<IStation.Calculation.DispatchAna.Model.AnaSchemeItem>();
-
-                #region 鍔犲叆鍥洪娉靛紑鍚俊鎭�
-                if (allFixPumpAnaList != null)
-                {
-                    foreach (var fixPump in allFixPumpAnaList)
-                    {
-                        if (fixPump.AnaItem.WorkPointQ < 1)
-                            continue;
-                        var itemRow = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(fixPump.MachineDetail, fixPump.AnaItem);
-                        rowPrj.Items.Add(itemRow);
-                    }
-                }
-                #endregion
-
-
-                var itemRowF = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump.MachineDetail, currentAna);
-                rowPrj.Items.Add(itemRowF);
-
-                AddScheme(rowPrj, false);
-                addPrjNum++;
-            }
-
-            return addPrjNum;
-        }
-        #endregion
-
-
-        #region 娣诲姞椤圭洰 鍙湁2鍙板彉棰戞车:AddTwoFreqPumpPrj
-        private int AddMultiFreqPumpPrj2(
-            IStation.Calculation.DispatchAna.Model.FixPumpAnaData[] allFixPumpAnaList,
-            IStation.Calculation.DispatchAna.Model.FrePumpAnaData[] allFreqPumpAnaList)
-        {
-            int addPrjNum = 0;
-            int frePumpNum = 2;
-            if (allFreqPumpAnaList == null || allFreqPumpAnaList.Count() < frePumpNum)
-                return addPrjNum;
-
-            //鍒ゆ柇鏈�澶у紑鏈烘暟
-            if (_max_open_machine_number > 0)
-            {
-                int macine_number = 2;
-                if (allFixPumpAnaList != null)
-                {
-                    macine_number = macine_number + allFixPumpAnaList.Count();
-                }
-                if (macine_number > _max_open_machine_number)
-                    return 0;
-            }
-
-            double fix_pump_total_flow = 0;
-            if (allFixPumpAnaList != null)
-            {
-                fix_pump_total_flow = (from x in allFixPumpAnaList select x.AnaItem.WorkPointQ).Sum();
-            }
-
-            List<IStation.Calculation.DispatchAna.Model.FrePumpAnaData[]> freqPumpAnaCombineList = IStation.Model.PermutationAndCombination<IStation.Calculation.DispatchAna.Model.FrePumpAnaData>.GetCombination(
-                allFreqPumpAnaList, frePumpNum);
-            foreach (var freqPumpAnaCombine in freqPumpAnaCombineList)
-            {
-                var freqPump1 = freqPumpAnaCombine[0];
-                var freqPump2 = freqPumpAnaCombine[1];
-
-                #region 妫�鏌ユ槸鍚︾鍚堝紑鏈虹害鏉�
-                List<long> machine_ids = new List<long>();
-                machine_ids.Add(freqPump1.MachineDetail.MachineID);
-                machine_ids.Add(freqPump2.MachineDetail.MachineID);
-                if (allFixPumpAnaList != null)
-                {
-                    foreach (var item in allFixPumpAnaList)
-                        machine_ids.Add(item.MachineDetail.MachineID);
-                }
-                if (!IsAccordMachineRunFilter(machine_ids))
-                {
-                    continue;
-                }
-                #endregion
-
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData1 = null;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData2 = null;
-
-
-                var rowPrj = new IStation.Calculation.DispatchAna.Model.AnaScheme();
-                rowPrj.Items = new List<IStation.Calculation.DispatchAna.Model.AnaSchemeItem>();
-
-                #region 鍔犲叆鍥洪娉靛紑鍚俊鎭�
-                if (allFixPumpAnaList != null)
-                {
-                    foreach (var fixPump in allFixPumpAnaList)
-                    {
-                        if (fixPump.AnaItem.WorkPointQ < 1)
-                            continue;
-
-                        var itemRow = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(fixPump.MachineDetail, fixPump.AnaItem);
-                        rowPrj.Items.Add(itemRow);
-                    }
-                }
-                #endregion
-
-                bool isActCalc = true;
-                if (freqPump1.MachineDetail.PumpCode == freqPump2.MachineDetail.PumpCode)
-                {//鍚屽瀷鍙�
-                    #region 娴侀噺瀵瑰崐鍒�
-                    var fre_pump_total_flow = this._targetQ - fix_pump_total_flow;
-                    isActCalc = false;
-
-                    double h = //this.CalcHeadByPress(this._targetInletPress, this._targetOutletPress);  
-                        Math.Round(this.CalcHeadByPress(this._targetInletPress, this._targetOutletPress,
-                        this._defaultInletDia, this._defaultOutletDia, this._targetQ), 3);
-
-                    //娴侀噺瀵瑰崐鍒�
-                    var wrkSpeed1 = IStation.Common.SpeedSimuCalculer.GetSimuValue(freqPump1.MachineDetail.MaxCurveInfoQH,
-                        new IStation.Model.CurvePoint((_targetQ - fix_pump_total_flow) * 0.5, h), 2900);
-                    curveData1 = new IStation.Calculation.DispatchAna.Model.AnaCurveItem();
-                    double fre1 = Math.Round(50 * wrkSpeed1 / 2900, 1);
-                    int ret1 = CalcAnaCurve(freqPump1.MachineDetail.MaxCurveInfoQH,
-                        freqPump1.MachineDetail.MaxCurveInfoQP, this._targetInletPress, this._targetOutletPress,
-                        this._defaultInletDia, this._defaultOutletDia, fre1, ref curveData1);
-                    if (ret1 == -1)
-                        continue;
-                    if (ret1 == 0)
-                        continue;
-                    curveData1.Speed = freqPump1.MachineDetail.CalcSpeedByFrequence(fre1);
-
-
-
-                    var wrkSpeed2 = IStation.Common.SpeedSimuCalculer.GetSimuValue(freqPump2.MachineDetail.MaxCurveInfoQH,
-    new IStation.Model.CurvePoint((_targetQ - fix_pump_total_flow) * 0.5, h), 2900);
-                    curveData2 = new IStation.Calculation.DispatchAna.Model.AnaCurveItem();
-                    double fre2 = Math.Round(50 * wrkSpeed2 / 2900, 1);
-                    int ret2 = CalcAnaCurve(freqPump2.MachineDetail.MaxCurveInfoQH, 
-                        freqPump2.MachineDetail.MaxCurveInfoQP, 
-                        this._targetInletPress, this._targetOutletPress,
-                        this._defaultInletDia, this._defaultOutletDia, fre2, ref curveData2);
-                    if (ret2 == -1)
-                        continue;
-                    if (ret2 == 0)
-                        continue;
-                    curveData2.Speed = freqPump2.MachineDetail.CalcSpeedByFrequence(fre2);
-                    #endregion
-                }
-                else
-                {
-                    #region MyRegion
-                    isActCalc = true;
-
-                    double minSpanQ = _targetQ;
-
-
-                    //鎵惧埌绂籣targetQ鏈�鎺ヨ繎鐨勯鐜囩偣
-                    for (int index1 = 0; index1 < freqPump1.AnaItemList.Count; index1++)
-                    {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                        for (int index2 = 0; index2 < freqPump2.AnaItemList.Count; index2++)
-                        {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                            double freTotalQ = freqPump1.AnaItemList[index1].WorkPointQ +
-                                freqPump2.AnaItemList[index2].WorkPointQ;
-                            if (Math.Abs(fix_pump_total_flow + freTotalQ - _targetQ) < minSpanQ)
-                            {
-                                minSpanQ = Math.Abs(fix_pump_total_flow + freTotalQ - _targetQ);
-                                curveData1 = freqPump1.AnaItemList[index1];
-                                curveData2 = freqPump2.AnaItemList[index2];
-                            }
-                        }
-                    }
-                    #endregion
-                }
-
-
-
-
-                if (curveData1.WorkPointQ > 10)
-                {
-                    var itemRowF1 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump1.MachineDetail, curveData1);
-                    rowPrj.Items.Add(itemRowF1);
-                }
-
-
-                if (curveData2.WorkPointQ > 10)
-                {
-                    var itemRowF2 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump2.MachineDetail, curveData2);
-                    rowPrj.Items.Add(itemRowF2);
-                }
-
-                if (AddScheme(rowPrj, isActCalc))
-                    addPrjNum++;
-
-            }
-
-            return addPrjNum;
-        }
-        #endregion
-
-
-        #region 娣诲姞椤圭洰 鍙湁3鍙板彉棰戞车:AddThreeFreqPumpPrj
-        private int AddMultiFreqPumpPrj3(
-            IStation.Calculation.DispatchAna.Model.FixPumpAnaData[] allFixPumpAnaList,
-            IStation.Calculation.DispatchAna.Model.FrePumpAnaData[] allFreqPumpAnaList)
-        {
-            int addPrjNum = 0;
-            int frePumpNum = 3;
-            if (allFreqPumpAnaList == null || allFreqPumpAnaList.Count() < frePumpNum)
-                return addPrjNum;
-
-            //鍒ゆ柇鏈�澶у紑鏈烘暟
-            if (_max_open_machine_number > 0)
-            {
-                int macine_number = 3;
-                if (allFixPumpAnaList != null)
-                {
-                    macine_number = macine_number + allFixPumpAnaList.Count();
-                }
-                if (macine_number > _max_open_machine_number)
-                    return 0;
-            }
-
-            double fix_pump_total_flow = 0;
-            if (allFixPumpAnaList != null)
-            {
-                fix_pump_total_flow = (from x in allFixPumpAnaList select x.AnaItem.WorkPointQ).Sum();
-            }
-
-            List<IStation.Calculation.DispatchAna.Model.FrePumpAnaData[]> freqPumpAnaCombineList = IStation.Model.PermutationAndCombination<IStation.Calculation.DispatchAna.Model.FrePumpAnaData>.GetCombination(
-                allFreqPumpAnaList.ToArray(), frePumpNum);
-            foreach (var freqPumpAnaCombine in freqPumpAnaCombineList)
-            {
-                var freqPump1 = freqPumpAnaCombine[0];
-                var freqPump2 = freqPumpAnaCombine[1];
-                var freqPump3 = freqPumpAnaCombine[2];
-
-                #region 妫�鏌ユ槸鍚︾鍚堝紑鏈虹害鏉�
-                List<long> machine_ids = new List<long>();
-                machine_ids.Add(freqPump1.MachineDetail.MachineID);
-                machine_ids.Add(freqPump2.MachineDetail.MachineID);
-                machine_ids.Add(freqPump3.MachineDetail.MachineID);
-                if (allFixPumpAnaList != null)
-                {
-                    foreach (var item in allFixPumpAnaList)
-                        machine_ids.Add(item.MachineDetail.MachineID);
-                }
-                if (!IsAccordMachineRunFilter(machine_ids))
-                {
-                    continue;
-                }
-                #endregion
-
-                double freTotalQ = fix_pump_total_flow;
-                double minSpanQ = _targetQmax;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData1 = null;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData2 = null;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData3 = null;
-
-                //
-                var rowPrj = new IStation.Calculation.DispatchAna.Model.AnaScheme();
-
-                rowPrj.TotalWrkQ = freTotalQ;
-                rowPrj.TotalWrkH = //this.CalcHeadByPress(this._targetInletPress, this._targetOutletPress); 
-                    Math.Round(this.CalcHeadByPress(this._targetInletPress, this._targetOutletPress,
-                        this._defaultInletDia, this._defaultOutletDia, this._targetQ), 3);
-                rowPrj.Items = new List<IStation.Calculation.DispatchAna.Model.AnaSchemeItem>();
-
-                //鎵惧埌绂籣targetQ鏈�鎺ヨ繎鐨勯鐜囩偣
-                for (int index1 = 0; index1 < freqPump1.AnaItemList.Count; index1++)
-                {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                    for (int index2 = 0; index2 < freqPump2.AnaItemList.Count; index2++)
-                    {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                        for (int index3 = 0; index3 < freqPump3.AnaItemList.Count; index3++)
-                        {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                            double wrkQ = freqPump1.AnaItemList[index1].WorkPointQ +
-                                freqPump2.AnaItemList[index2].WorkPointQ +
-                                freqPump3.AnaItemList[index3].WorkPointQ;
-
-                            if (Math.Abs(fix_pump_total_flow + wrkQ - _targetQ) < minSpanQ)
-                            {
-                                freTotalQ = fix_pump_total_flow + wrkQ;
-                                rowPrj.TotalWrkQ = freTotalQ;
-                                minSpanQ = Math.Abs(freTotalQ - _targetQ);
-                                curveData1 = freqPump1.AnaItemList[index1];
-                                curveData2 = freqPump2.AnaItemList[index2];
-                                curveData3 = freqPump3.AnaItemList[index3];
-                            }
-                        }
-                    }
-                }
-
-                //
-                if (freTotalQ < _targetQmax && freTotalQ > _targetQmin && curveData1 != null)
-                {
-                    #region 鍔犲叆鍥洪娉靛紑鍚俊鎭�
-                    if (allFixPumpAnaList != null)
-                    {
-                        foreach (var fixPump in allFixPumpAnaList)
-                        {
-                            if (fixPump.AnaItem.WorkPointQ < 1)
-                                continue;
-                            var itemRow = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(fixPump.MachineDetail, fixPump.AnaItem);
-                            rowPrj.Items.Add(itemRow);
-                        }
-                    }
-                    #endregion
-
-
-                    if (curveData1.WorkPointQ > 10)
-                    {
-                        var itemRowF1 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump1.MachineDetail, curveData1);
-                        rowPrj.Items.Add(itemRowF1);
-                    }
-
-                    if (curveData2.WorkPointQ > 10)
-                    {
-                        var itemRowF2 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump2.MachineDetail, curveData2);
-                        rowPrj.Items.Add(itemRowF2);
-                    }
-
-                    if (curveData3.WorkPointQ > 10)
-                    {
-                        var itemRowF3 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump3.MachineDetail, curveData3);
-                        rowPrj.Items.Add(itemRowF3);
-                    }
-
-                    AddScheme(rowPrj, true);
-                    addPrjNum++;
-                }
-            }
-
-            return addPrjNum;
-        }
-        #endregion
-
-
-        #region 娣诲姞椤圭洰 鍙湁4鍙板彉棰戞车:AddFourFreqPumpPrj
-        private int AddMultiFreqPumpPrj4(
-            IStation.Calculation.DispatchAna.Model.FixPumpAnaData[] allFixPumpAnaList,
-            IStation.Calculation.DispatchAna.Model.FrePumpAnaData[] allFreqPumpAnaList,
-            double fix_pump_total_flow)
-        {
-            int addPrjNum = 0;
-            int frePumpNum = 4;
-            if (allFreqPumpAnaList == null || allFreqPumpAnaList.Count() < frePumpNum)
-                return addPrjNum;
-
-            //鍒ゆ柇鏈�澶у紑鏈烘暟
-            if (_max_open_machine_number > 0)
-            {
-                int macine_number = 4;
-                if (allFixPumpAnaList != null)
-                {
-                    macine_number = macine_number + allFixPumpAnaList.Count();
-                }
-                if (macine_number > _max_open_machine_number)
-                    return 0;
-            }
-
-            List<IStation.Calculation.DispatchAna.Model.FrePumpAnaData[]> freqPumpAnaCombineList = IStation.Model.PermutationAndCombination<IStation.Calculation.DispatchAna.Model.FrePumpAnaData>.GetCombination(
-                allFreqPumpAnaList, frePumpNum);
-            foreach (var freqPumpAnaCombine in freqPumpAnaCombineList)
-            {
-                var freqPump1 = freqPumpAnaCombine[0];
-                var freqPump2 = freqPumpAnaCombine[1];
-                var freqPump3 = freqPumpAnaCombine[2];
-                var freqPump4 = freqPumpAnaCombine[3];
-
-                #region 妫�鏌ユ槸鍚︾鍚堝紑鏈虹害鏉�
-                List<long> machine_ids = new List<long>();
-                machine_ids.Add(freqPump1.MachineDetail.MachineID);
-                machine_ids.Add(freqPump2.MachineDetail.MachineID);
-                machine_ids.Add(freqPump3.MachineDetail.MachineID);
-                machine_ids.Add(freqPump4.MachineDetail.MachineID);
-                if (allFixPumpAnaList != null)
-                {
-                    foreach (var item in allFixPumpAnaList)
-                        machine_ids.Add(item.MachineDetail.MachineID);
-                }
-                if (!IsAccordMachineRunFilter(machine_ids))
-                {
-                    continue;
-                }
-                #endregion
-
-                double freTotalQ = fix_pump_total_flow;
-                double minSpanQ = _targetQmax;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData1 = null;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData2 = null;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData3 = null;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData4 = null;
-
-                var rowPrj = new IStation.Calculation.DispatchAna.Model.AnaScheme();
-                rowPrj.TotalWrkQ = freTotalQ;
-                rowPrj.TotalWrkH = //this.CalcHeadByPress(this._targetInletPress, this._targetOutletPress);  
-                   Math.Round(  this.CalcHeadByPress(this._targetInletPress,
-                this._targetOutletPress, this._defaultInletDia, this._defaultOutletDia, this._targetQ),3);
-                rowPrj.Items = new List<IStation.Calculation.DispatchAna.Model.AnaSchemeItem>();
-
-
-
-                //鎵惧埌绂籣targetQ鏈�鎺ヨ繎鐨勯鐜囩偣
-                for (int index1 = 0; index1 < freqPump1.AnaItemList.Count; index1++)
-                {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                    for (int index2 = 0; index2 < freqPump2.AnaItemList.Count; index2++)
-                    {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                        for (int index3 = 0; index3 < freqPump3.AnaItemList.Count; index3++)
-                        {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                            for (int index4 = 0; index4 < freqPump4.AnaItemList.Count; index4++)
-                            {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                                double wrkQ = freqPump1.AnaItemList[index1].WorkPointQ +
-                                    freqPump2.AnaItemList[index2].WorkPointQ +
-                                    freqPump3.AnaItemList[index3].WorkPointQ +
-                                    freqPump4.AnaItemList[index4].WorkPointQ;
-                                if (Math.Abs(fix_pump_total_flow + wrkQ - _targetQ) < minSpanQ)
-                                {
-                                    freTotalQ = fix_pump_total_flow + wrkQ;
-                                    rowPrj.TotalWrkQ = freTotalQ;
-                                    minSpanQ = Math.Abs(freTotalQ - _targetQ);
-                                    curveData1 = freqPump1.AnaItemList[index1];
-                                    curveData2 = freqPump2.AnaItemList[index2];
-                                    curveData3 = freqPump3.AnaItemList[index3];
-                                    curveData4 = freqPump4.AnaItemList[index4];
-                                }
-                            }
-                        }
-                    }
-                }
-
-                //
-                if (freTotalQ < _targetQmax && freTotalQ > _targetQmin && curveData1 != null)
-                {
-                    #region 鍔犲叆鍥洪娉靛紑鍚俊鎭�
-                    if (allFixPumpAnaList != null)
-                    {
-                        foreach (var fixPump in allFixPumpAnaList)
-                        {
-                            if (fixPump.AnaItem.WorkPointQ < 1)
-                                continue;
-                            var itemRow = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(fixPump.MachineDetail, fixPump.AnaItem);
-                            rowPrj.Items.Add(itemRow);
-                        }
-                    }
-                    #endregion
-
-
-                    var itemRowF1 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump1.MachineDetail, curveData1);
-                    rowPrj.Items.Add(itemRowF1);
-
-                    var itemRowF2 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump2.MachineDetail, curveData2);
-                    rowPrj.Items.Add(itemRowF2);
-
-                    var itemRowF3 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump3.MachineDetail, curveData3);
-                    rowPrj.Items.Add(itemRowF3);
-
-                    var itemRowF4 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump4.MachineDetail, curveData4);
-                    rowPrj.Items.Add(itemRowF4);
-
-
-                    AddScheme(rowPrj, true);
-                    addPrjNum++;
-                }
-            }
-
-            return addPrjNum;
-        }
-        #endregion
-
-
-        #region 娣诲姞椤圭洰 鍙湁5鍙板彉棰戞车:AddMultiFreqPumpPrj5
-        private int AddMultiFreqPumpPrj5(
-            IStation.Calculation.DispatchAna.Model.FixPumpAnaData[] allFixPumpAnaList,
-            IStation.Calculation.DispatchAna.Model.FrePumpAnaData[] allFreqPumpAnaList,
-            double fix_pump_total_flow)
-        {
-            int addPrjNum = 0;
-            int frePumpNum = 5;
-            if (allFreqPumpAnaList == null || allFreqPumpAnaList.Count() < frePumpNum)
-                return addPrjNum;
-
-            //鍒ゆ柇鏈�澶у紑鏈烘暟
-            if (_max_open_machine_number > 0)
-            {
-                int macine_number = 5;
-                if (allFixPumpAnaList != null)
-                {
-                    macine_number = macine_number + allFixPumpAnaList.Count();
-                }
-                if (macine_number > _max_open_machine_number)
-                    return 0;
-            }
-
-            List<IStation.Calculation.DispatchAna.Model.FrePumpAnaData[]> freqPumpAnaCombineList = IStation.Model.PermutationAndCombination<IStation.Calculation.DispatchAna.Model.FrePumpAnaData>.GetCombination(
-                allFreqPumpAnaList, frePumpNum);
-            foreach (var freqPumpAnaCombine in freqPumpAnaCombineList)
-            {
-                var freqPump1 = freqPumpAnaCombine[0];
-                var freqPump2 = freqPumpAnaCombine[1];
-                var freqPump3 = freqPumpAnaCombine[2];
-                var freqPump4 = freqPumpAnaCombine[3];
-                var freqPump5 = freqPumpAnaCombine[4];
-
-                #region 妫�鏌ユ槸鍚︾鍚堝紑鏈虹害鏉�
-                List<long> machine_ids = new List<long>();
-                machine_ids.Add(freqPump1.MachineDetail.MachineID);
-                machine_ids.Add(freqPump2.MachineDetail.MachineID);
-                machine_ids.Add(freqPump3.MachineDetail.MachineID);
-                machine_ids.Add(freqPump4.MachineDetail.MachineID);
-                machine_ids.Add(freqPump5.MachineDetail.MachineID);
-                if (allFixPumpAnaList != null)
-                {
-                    foreach (var item in allFixPumpAnaList)
-                        machine_ids.Add(item.MachineDetail.MachineID);
-                }
-                if (!IsAccordMachineRunFilter(machine_ids))
-                {
-                    continue;
-                }
-                #endregion
-
-                double freTotalQ = fix_pump_total_flow;
-                double minSpanQ = _targetQmax;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData1 = null;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData2 = null;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData3 = null;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData4 = null;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData5 = null;
-
-                var rowPrj = new IStation.Calculation.DispatchAna.Model.AnaScheme();
-                rowPrj.TotalWrkQ = freTotalQ;
-                rowPrj.TotalWrkH = //this.CalcHeadByPress(this._targetInletPress, this._targetOutletPress);
-                Math.Round(this.CalcHeadByPress(this._targetInletPress, this._targetOutletPress,
-                        this._defaultInletDia, this._defaultOutletDia, this._targetQ), 3);
-                rowPrj.Items = new List<IStation.Calculation.DispatchAna.Model.AnaSchemeItem>();
-
-                //double TotalWrkP = 0;
-
-
-                //鎵惧埌绂籣targetQ鏈�鎺ヨ繎鐨勯鐜囩偣
-                for (int index1 = 0; index1 < freqPump1.AnaItemList.Count; index1++)
-                {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                    for (int index2 = 0; index2 < freqPump2.AnaItemList.Count; index2++)
-                    {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                        for (int index3 = 0; index3 < freqPump3.AnaItemList.Count; index3++)
-                        {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                            for (int index4 = 0; index4 < freqPump4.AnaItemList.Count; index4++)
-                            {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                                for (int index5 = 0; index5 < freqPump5.AnaItemList.Count; index5++)
-                                {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                                    double wrkQ =
-                                        freqPump1.AnaItemList[index1].WorkPointQ +
-                                        freqPump2.AnaItemList[index2].WorkPointQ +
-                                        freqPump3.AnaItemList[index3].WorkPointQ +
-                                        freqPump4.AnaItemList[index4].WorkPointQ +
-                                        freqPump5.AnaItemList[index5].WorkPointQ;
-                                    if (Math.Abs(fix_pump_total_flow + wrkQ - _targetQ) < minSpanQ)
-                                    {
-                                        freTotalQ = fix_pump_total_flow + wrkQ;
-                                        rowPrj.TotalWrkQ = freTotalQ;
-                                        minSpanQ = Math.Abs(freTotalQ - _targetQ);
-                                        curveData1 = freqPump1.AnaItemList[index1];
-                                        curveData2 = freqPump2.AnaItemList[index2];
-                                        curveData3 = freqPump3.AnaItemList[index3];
-                                        curveData4 = freqPump4.AnaItemList[index4];
-                                        curveData5 = freqPump5.AnaItemList[index5];
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-
-                //
-                if (freTotalQ < _targetQmax && freTotalQ > _targetQmin && curveData1 != null)
-                {
-                    #region 鍔犲叆鍥洪娉靛紑鍚俊鎭�
-                    if (allFixPumpAnaList != null)
-                    {
-                        foreach (var fixPump in allFixPumpAnaList)
-                        {
-                            if (fixPump.AnaItem.WorkPointQ < 1)
-                                continue;
-                            var itemRow = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(fixPump.MachineDetail, fixPump.AnaItem);
-                            rowPrj.Items.Add(itemRow);
-                        }
-                    }
-                    #endregion
-
-
-                    var itemRowF1 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump1.MachineDetail, curveData1);
-                    rowPrj.Items.Add(itemRowF1);
-
-                    var itemRowF2 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump2.MachineDetail, curveData2);
-                    rowPrj.Items.Add(itemRowF2);
-
-                    var itemRowF3 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump3.MachineDetail, curveData3);
-                    rowPrj.Items.Add(itemRowF3);
-
-                    var itemRowF4 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump4.MachineDetail, curveData4);
-                    rowPrj.Items.Add(itemRowF4);
-
-                    var itemRowF5 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump5.MachineDetail, curveData5);
-                    rowPrj.Items.Add(itemRowF5);
-
-
-                    AddScheme(rowPrj, true);
-                    addPrjNum++;
-                }
-            }
-
-            return addPrjNum;
-        }
-        #endregion
-
-
-        #region 娣诲姞椤圭洰 鍙湁6鍙板彉棰戞车:AddMultiFreqPumpPrj6
-        private int AddMultiFreqPumpPrj6(
-            IStation.Calculation.DispatchAna.Model.FixPumpAnaData[] allFixPumpAnaList,
-            IStation.Calculation.DispatchAna.Model.FrePumpAnaData[] allFreqPumpAnaList,
-            double fix_pump_total_flow)
-        {
-            int addPrjNum = 0;
-            int frePumpNum = 6;
-            if (allFreqPumpAnaList == null || allFreqPumpAnaList.Count() < frePumpNum)
-                return addPrjNum;
-
-            //鍒ゆ柇鏈�澶у紑鏈烘暟
-            if (_max_open_machine_number > 0)
-            {
-                int macine_number = 6;
-                if (allFixPumpAnaList != null)
-                {
-                    macine_number = macine_number + allFixPumpAnaList.Count();
-                }
-                if (macine_number > _max_open_machine_number)
-                    return 0;
-            }
-
-            List<IStation.Calculation.DispatchAna.Model.FrePumpAnaData[]> freqPumpAnaCombineList = IStation.Model.PermutationAndCombination<IStation.Calculation.DispatchAna.Model.FrePumpAnaData>.GetCombination(
-                allFreqPumpAnaList, frePumpNum);
-            foreach (var freqPumpAnaList in freqPumpAnaCombineList)
-            {
-                var freqPump1 = freqPumpAnaList[0];
-                var freqPump2 = freqPumpAnaList[1];
-                var freqPump3 = freqPumpAnaList[2];
-                var freqPump4 = freqPumpAnaList[3];
-                var freqPump5 = freqPumpAnaList[4];
-                var freqPump6 = freqPumpAnaList[5];
-
-                #region 妫�鏌ユ槸鍚︾鍚堝紑鏈虹害鏉�
-                List<long> machine_ids = new List<long>();
-                machine_ids.Add(freqPump1.MachineDetail.MachineID);
-                machine_ids.Add(freqPump2.MachineDetail.MachineID);
-                machine_ids.Add(freqPump3.MachineDetail.MachineID);
-                machine_ids.Add(freqPump4.MachineDetail.MachineID);
-                machine_ids.Add(freqPump5.MachineDetail.MachineID);
-                machine_ids.Add(freqPump6.MachineDetail.MachineID);
-                if (allFixPumpAnaList != null)
-                {
-                    foreach (var item in allFixPumpAnaList)
-                        machine_ids.Add(item.MachineDetail.MachineID);
-                }
-                if (!IsAccordMachineRunFilter(machine_ids))
-                {
-                    continue;
-                }
-                #endregion
-
-
-                double freTotalQ = fix_pump_total_flow;
-                double minSpanQ = _targetQmax;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData1 = null;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData2 = null;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData3 = null;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData4 = null;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData5 = null;
-                IStation.Calculation.DispatchAna.Model.AnaCurveItem curveData6 = null;
-
-                var rowPrj = new IStation.Calculation.DispatchAna.Model.AnaScheme();
-                rowPrj.TotalWrkQ = freTotalQ;
-                rowPrj.TotalWrkH = //this.CalcHeadByPress(this._targetInletPress, this._targetOutletPress);
-                    Math.Round(this.CalcHeadByPress(this._targetInletPress, this._targetOutletPress,
-                        this._defaultInletDia, this._defaultOutletDia, this._targetQ), 3);
-                rowPrj.Items = new List<IStation.Calculation.DispatchAna.Model.AnaSchemeItem>();
-
-
-                //鎵惧埌绂籣targetQ鏈�鎺ヨ繎鐨勯鐜囩偣
-                for (int index1 = 0; index1 < freqPump1.AnaItemList.Count; index1++)
-                {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                    for (int index2 = 0; index2 < freqPump2.AnaItemList.Count; index2++)
-                    {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                        for (int index3 = 0; index3 < freqPump3.AnaItemList.Count; index3++)
-                        {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                            for (int index4 = 0; index4 < freqPump4.AnaItemList.Count; index4++)
-                            {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                                for (int index5 = 0; index5 < freqPump5.AnaItemList.Count; index5++)
-                                {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                                    for (int index6 = 0; index6 < freqPump6.AnaItemList.Count; index6++)
-                                    {//棰戠巼瓒婃潵瓒婂皬,c.WorkPointQ涔熻秺鏉ヨ秺灏�
-                                        double wrkQ =
-                                            freqPump1.AnaItemList[index1].WorkPointQ +
-                                            freqPump2.AnaItemList[index2].WorkPointQ +
-                                            freqPump3.AnaItemList[index3].WorkPointQ +
-                                            freqPump4.AnaItemList[index4].WorkPointQ +
-                                            freqPump5.AnaItemList[index5].WorkPointQ +
-                                            freqPump6.AnaItemList[index6].WorkPointQ;
-                                        if (Math.Abs(fix_pump_total_flow + wrkQ - _targetQ) < minSpanQ)
-                                        {
-                                            freTotalQ = fix_pump_total_flow + wrkQ;
-                                            rowPrj.TotalWrkQ = freTotalQ;
-                                            minSpanQ = Math.Abs(freTotalQ - _targetQ);
-                                            curveData1 = freqPump1.AnaItemList[index1];
-                                            curveData2 = freqPump2.AnaItemList[index2];
-                                            curveData3 = freqPump3.AnaItemList[index3];
-                                            curveData4 = freqPump4.AnaItemList[index4];
-                                            curveData5 = freqPump5.AnaItemList[index5];
-                                            curveData6 = freqPump6.AnaItemList[index6];
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-
-                //
-                if (freTotalQ < _targetQmax && freTotalQ > _targetQmin && curveData1 != null)
-                {
-                    #region 鍔犲叆鍥洪娉靛紑鍚俊鎭�
-                    if (allFixPumpAnaList != null)
-                    {
-                        foreach (var fixPump in allFixPumpAnaList)
-                        {
-                            if (fixPump.AnaItem.WorkPointQ < 1)
-                                continue;
-                            var itemRow = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(fixPump.MachineDetail, fixPump.AnaItem);
-
-                            rowPrj.Items.Add(itemRow);
-                        }
-                    }
-                    #endregion
-
-
-                    var itemRowF1 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump1.MachineDetail, curveData1);
-                    rowPrj.Items.Add(itemRowF1);
-
-                    var itemRowF2 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump2.MachineDetail, curveData2);
-                    rowPrj.Items.Add(itemRowF2);
-
-                    var itemRowF3 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump3.MachineDetail, curveData3);
-                    rowPrj.Items.Add(itemRowF3);
-
-                    var itemRowF4 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump4.MachineDetail, curveData4);
-                    rowPrj.Items.Add(itemRowF4);
-
-                    var itemRowF5 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump5.MachineDetail, curveData5);
-                    rowPrj.Items.Add(itemRowF5);
-
-                    var itemRowF6 = new IStation.Calculation.DispatchAna.Model.AnaSchemeItem(freqPump6.MachineDetail, curveData6);
-                    rowPrj.Items.Add(itemRowF6);
-
-                    AddScheme(rowPrj, true);
-                    addPrjNum++;
-                }
-            }
-
-            return addPrjNum;
-        }
-        #endregion
-
-
-
-        private int _schemeID = 1;
-        private bool AddScheme(IStation.Calculation.DispatchAna.Model.AnaScheme project, bool IsAccurateCalc)
-        {
-            //
-            project.TotalWrkQ = (from x in project.Items where x.WorkPointQ > 0 select x.WorkPointQ).Sum();
-            project.TotalWrkH = Math.Round((from x in project.Items where x.WorkPointH > 0 select x.WorkPointH).Average(), 2);
-        
-            project.TotalWrkP = Math.Round((from x in project.Items where x.WorkPointP > 0 select x.WorkPointP).Sum(), 2);
-            project.TotalWrkE = IStation.Common.PumpParaHelper.CalculateE(project.TotalWrkQ, project.TotalWrkH, project.TotalWrkP);
-            project.UWP = Calcu_UWP(project.TotalWrkP, project.TotalWrkQ, this._targetInletPress, this._targetOutletPress);
-            project.WP = Calcu_WP(project.TotalWrkP, project.TotalWrkQ);
-
-            if (project.TotalWrkQ > _targetQmax || project.TotalWrkQ < _targetQmin)
-            {
-                return false;
-            }
-            //璁$畻娴侀噺
-            //rowPrj.TotalWrkQ = (from x in rowPrj.Items where x.WorkPointQ > 0 select x.WorkPointQ).Sum();
-            //if (rowPrj.TotalWrkQ <= _targetQmax && rowPrj.TotalWrkQ >= this._targetQmin)
-            //    ds_disp_project_list.Add(project);
-
-            if (_machine_flow_limit_max_dict != null)
-            {
-                foreach (var item in project.Items)
-                {
-                    if (_machine_flow_limit_max_dict.ContainsKey(item.MachineID))
-                    {//鎿嶄綔寮�鏈洪檺鍒�
-                        if (item.WorkPointQ > _machine_flow_limit_max_dict[item.MachineID])
-                            return false;
-                    }
-                }
-            }
-
-            if (_machine_flow_limit_min_dict != null)
-            {
-                foreach (var item in project.Items)
-                {
-                    if (_machine_flow_limit_min_dict.ContainsKey(item.MachineID))
-                    {//鎿嶄綔寮�鏈洪檺鍒�
-                        if (item.WorkPointQ < _machine_flow_limit_min_dict[item.MachineID])
-                            return false;
-                    }
-                }
-            }
-
-
-
-
-            if (_anaSchemeList == null)
-                _anaSchemeList = new List<IStation.Calculation.DispatchAna.Model.AnaScheme>();
-
-
-
-            //鍐嶇簿绠椾竴涓�
-            if (IsAccurateCalc)
-                CalcDetailAccurate(ref project);
-
-
-            project.ID = _schemeID;
-            _anaSchemeList.Add(project);
-            _schemeID++;
-
-            return true;
-        }
-       /// <summary>
-        /// 鍗曚綅姘磋�� 鍗冨惃姘�
-        /// </summary>
-        public static double Calcu_UWP(double P, double Q, double H)
-        { 
-            if (Q <= 0.001)
-                return 0;
-            if (H <= 0.00001)
-                return 0;
-            if (P <= 0.001)
-                return 0;
-            return P * 1000f / Q / H;
-        }
-        /// <summary>
-        /// 鍗曚綅姘磋�� 鍗冨惃姘�
-        /// </summary>
-        public static double Calcu_UWP(double P, double Q, double inletPress, double outletPress)
-        {
-            double H = (outletPress - inletPress) * 102;
-            if (Q <= 0.001)
-                return 0;
-            if (H <= 0.00001)
-                return 0;
-            if (P <= 0.001)
-                return 0;
-            return P * 1000f / Q / H;
-        }
-        /// <summary>
-        /// 鍗曚綅姘磋��
-        /// </summary>
-        public static double Calcu_WP(double P, double Q)
-        {
-            if (Q <= 0.001)
-                return 0;
-
-            if (P <= 0.001)
-                return 0;
-            return P * 1000f / Q;
-        }
-    }
-
-
-
-
-
-
-
-}
\ No newline at end of file
diff --git a/Calculation/IStation.Calculation.Dispatch/input/OutletPipePara.cs b/Calculation/IStation.Calculation.Dispatch/input/OutletPipePara.cs
index f2ec71e..388df7b 100644
--- a/Calculation/IStation.Calculation.Dispatch/input/OutletPipePara.cs
+++ b/Calculation/IStation.Calculation.Dispatch/input/OutletPipePara.cs
@@ -54,7 +54,7 @@
         public string TargetFlowRangeMax  { get; set; }
 
         /// <summary>
-        /// 鐩爣鍘嬪姏
+        /// 鐩爣鍘嬪姏(濡傛灉鏄壃绋嬪氨鏄洰鏍囨壃绋�)
         /// </summary>
         public double TargetPress { get; set; }
 
diff --git a/Calculation/IStation.Calculation.Dispatch/input/RequestParasComplex.cs b/Calculation/IStation.Calculation.Dispatch/input/RequestParasComplex.cs
index 53ecbc1..d622d07 100644
--- a/Calculation/IStation.Calculation.Dispatch/input/RequestParasComplex.cs
+++ b/Calculation/IStation.Calculation.Dispatch/input/RequestParasComplex.cs
@@ -36,9 +36,27 @@
         /// </summary>
         public IStation.Calculation.DispatchAna.Model.eAnaSchemeSortType SchemeSortType { get; set; }
 
- 
         /// <summary>
-        ///  鍑哄彛绠¤矾
+        /// 
+        /// </summary>
+        public enum ePressValueType
+        {
+            /// <summary>
+            /// 
+            /// </summary>
+             鍘嬪姏 =0,
+             /// <summary>
+             /// 
+             /// </summary>
+             鎵▼=1
+        }
+        /// <summary>
+        /// 鍘嬪姏鍊肩被鍨� 0:琛ㄧず鍘嬪姏 1:琛ㄧず鎵▼
+        /// </summary>
+        public ePressValueType PressValueType { get; set; } = ePressValueType.鍘嬪姏;
+
+        /// <summary>
+        /// 鍑哄彛绠¤矾
         /// </summary>
         public List<OutletPipePara> OutletPipePara { get; set; }
 
@@ -50,7 +68,7 @@
 
 
         /// <summary>
-        /// 姘翠綅鍙傛暟 
+        /// 姘翠綅鍙傛暟
         /// </summary>
         public List<WaterLevelPara> WaterLevelPara { get; set; }
 
diff --git a/Calculation/IStation.Calculation.Plan/IPlanAnaCalculator.cs b/Calculation/IStation.Calculation.Plan/IPlanAnaCalculator.cs
deleted file mode 100644
index 6775d04..0000000
--- a/Calculation/IStation.Calculation.Plan/IPlanAnaCalculator.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using IStation.Calculation.PlanAna;
-
-namespace IStation.Calculation
-{
-    /// <summary>
-    /// 璁″垝鍒嗘瀽璁$畻鍣ㄦ帴鍙�
-    /// </summary>
-    public interface IPlanAnaCalculator
-    {
-        /// <summary>
-        /// 
-        /// </summary>
-        List<MonthCalcuResult> Calculate(List<MonthSumRecord> monthRecordList);
-
-
-
-
-
-
-
-
-
-
-    }
-}
diff --git a/Calculation/IStation.Calculation.Plan/IStation.Calculation.Plan.csproj b/Calculation/IStation.Calculation.Plan/IStation.Calculation.Plan.csproj
index d786c64..291fd67 100644
--- a/Calculation/IStation.Calculation.Plan/IStation.Calculation.Plan.csproj
+++ b/Calculation/IStation.Calculation.Plan/IStation.Calculation.Plan.csproj
@@ -9,7 +9,24 @@
   </PropertyGroup>
 
   <ItemGroup>
+    <Compile Remove="calc\**" />
+    <Compile Remove="custom\shys\**" />
+    <Compile Remove="input\**" />
+    <EmbeddedResource Remove="calc\**" />
+    <EmbeddedResource Remove="custom\shys\**" />
+    <EmbeddedResource Remove="input\**" />
+    <None Remove="calc\**" />
+    <None Remove="custom\shys\**" />
+    <None Remove="input\**" />
+  </ItemGroup>
+
+  <ItemGroup>
     <ProjectReference Include="..\..\Core\IStation.Core\IStation.Core.csproj" />
+    <ProjectReference Include="..\IStation.Calculation.Dispatch\IStation.Calculation.Dispatch.csproj" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Folder Include="custom\" />
   </ItemGroup>
 
 </Project>
diff --git a/Calculation/IStation.Calculation.Plan/PlanAnaCalculatorFactory.cs b/Calculation/IStation.Calculation.Plan/PlanAnaCalculatorFactory.cs
deleted file mode 100644
index e5932c7..0000000
--- a/Calculation/IStation.Calculation.Plan/PlanAnaCalculatorFactory.cs
+++ /dev/null
@@ -1,45 +0,0 @@
-锘縰sing IStation.Calculation.PlanAna;
-
-namespace IStation.Calculation
-{
-    public class PlanAnaCalculatorFactory 
-    {
-        /// <summary>
-        /// 鍒涘缓璁$畻鍣�
-        /// </summary>
-        public static IPlanAnaCalculator CreateCalculator(long corpId, string objectType, long objectId)
-        {
-            IPlanAnaCalculator calculator = null;
-            switch (objectType)
-            {
-                case ObjectType.Station:
-                    {
-                        switch (corpId)
-                        {
-                            case 4: 
-                                {
-                                    switch (objectId)
-                                    {
-                                        case 2: //闀垮叴娉电珯
-                                            {
-                                                calculator = new Calculator4ShysCxbz();
-                                            }
-                                            break;
-                                        default:break;
-                                    }
-                                }
-                                break;
-                            default:break;
-                        }
-                    }
-                    break;
-                default:break;
-            }
-            return calculator;
-        }
-
-
-
-
-    }
-}
\ No newline at end of file
diff --git "a/Calculation/IStation.EtaCalculation4Custom/shys/station/EtaAnalyCalculator4\351\225\277\345\205\264\345\262\233\350\276\223\346\260\264\346\263\265\346\210\277.cs" "b/Calculation/IStation.EtaCalculation4Custom/shys/station/EtaAnalyCalculator4\351\225\277\345\205\264\345\262\233\350\276\223\346\260\264\346\263\265\346\210\277.cs"
index 2e22a3f..e78d9e4 100644
--- "a/Calculation/IStation.EtaCalculation4Custom/shys/station/EtaAnalyCalculator4\351\225\277\345\205\264\345\262\233\350\276\223\346\260\264\346\263\265\346\210\277.cs"
+++ "b/Calculation/IStation.EtaCalculation4Custom/shys/station/EtaAnalyCalculator4\351\225\277\345\205\264\345\262\233\350\276\223\346\260\264\346\263\265\346\210\277.cs"
@@ -10,16 +10,12 @@
     /// </summary>
     public class EtaAnalyCalculator4闀垮叴宀涜緭姘存车鎴� : EtaAnalyCalculatorBase4Station, IEtaStationAnalyCalculator
     {
-
-       IStation.Model.EtaMonitorPointAnalyContextitem   _monitor_flow_pipe1 = null;//涓�鍙风璺祦閲忚娴嬬偣
+        IStation.Model.EtaMonitorPointAnalyContextitem _monitor_flow_pipe1 = null;//涓�鍙风璺祦閲忚娴嬬偣
         IStation.Model.EtaMonitorPointAnalyContextitem _monitor_flow_pipe2 = null;//涓�鍙风璺祦閲忚娴嬬偣
 
         //
- 
         EtaMultiRealRecordPure result_pipe_1 = new EtaMultiRealRecordPure();//涓�鍙风 鍒嗘瀽缁撴灉
         EtaMultiRealRecordPure result_pipe_2 = new EtaMultiRealRecordPure();//浜屽彿绠� 鍒嗘瀽缁撴灉
-
-
 
 
         //娴嬬偣ID(娴嬬偣ID)
@@ -44,7 +40,7 @@
             if (context == null)
             {
                 error_info = "涓婁笅鏂囧弬鏁颁负绌�";
-                return false ;
+                return false;
             }
             this._stationID = context.ID;
 
@@ -53,7 +49,7 @@
             //鍒濆鍖栨満娉�
             if (!InitialPumpList(context, out error_info))
             {
-                return false ;
+                return false;
             }
 
             //鍒濆鍖栨祴鐐�
@@ -62,7 +58,7 @@
                 IStation.LogHelper.Error(error_info);
                 return false;
             }
-             
+
             //寮�鍋滄満鍒嗘瀽
             if (!AnaAllPumpRunStatus(out error_info))
             {
@@ -80,14 +76,14 @@
 
             _pipeAnaResultList = new List<EtaMultiRealRecordPure>();
             _pipeAnaResultList.Add(result_pipe_1);
-             _pipeAnaResultList.Add(result_pipe_2);
+            _pipeAnaResultList.Add(result_pipe_2);
 
 
 
 
 
 
-            return true ;
+            return true;
         }
 
 
@@ -99,7 +95,7 @@
         /// <param name="error_info"></param>
         /// <returns></returns>
         protected override bool InitialPumpList(Model.EtaStationAnalyContextItem context, out string error_info)
-        { 
+        {
             long[] monitor_id_pump_flow_array = new long[] { 0, 0, 0, 0 };//鍗曟车娴侀噺璁�
             long[] monitor_id_inlet_press_array = new long[] { 82, 92, 102, 112 };// 娉电殑杩涘彛鍘嬪姏璁�
             long[] monitor_id_outlet_press_array = new long[] { 83, 93, 103, 113 };//鍑哄彛鍘嬪姏
@@ -127,9 +123,9 @@
             if (_allMachineList == null)
             {
                 IStation.LogHelper.Error(error_info);
-                return false ;
+                return false;
             }
-            
+
 
             error_info = null;
             return true;
@@ -137,7 +133,7 @@
         #endregion
 
 
-
+ 
 
 
 
@@ -148,26 +144,26 @@
         private bool AnaPipeResultList()
         {
             //娉电珯
-            _stationAnaResult = new EtaMultiRealRecordPure(); 
-            _stationAnaResult.ObjectType = IStation.ObjectType.Station ;
+            _stationAnaResult = new EtaMultiRealRecordPure();
+            _stationAnaResult.ObjectType = IStation.ObjectType.Station;
             _stationAnaResult.ObjectID = _stationID;
-            _stationAnaResult.RunningCount = 0; 
+            _stationAnaResult.RunningCount = 0;
             _stationAnaResult.AnalyStatus = Model.Eta.eAnalyStatus.Unkonw;
             _stationAnaResult.InitialRunList(this._machineCount);
 
             //涓�鍙风璺�
-            result_pipe_1 = new EtaMultiRealRecordPure(); 
-            result_pipe_1.ObjectType = IStation.ObjectType.PipeLine ;
+            result_pipe_1 = new EtaMultiRealRecordPure();
+            result_pipe_1.ObjectType = IStation.ObjectType.PipeLine;
             result_pipe_1.ObjectID = _sub_pipe_id[0];
-            result_pipe_1.RunningCount = 0; 
+            result_pipe_1.RunningCount = 0;
             result_pipe_1.AnalyStatus = Model.Eta.eAnalyStatus.Unkonw;
             result_pipe_1.InitialRunList(this._machineCount);//鎸夋车鎬绘暟璧嬪��
 
             //浜屽彿绠¤矾
-            result_pipe_2 = new EtaMultiRealRecordPure(); 
+            result_pipe_2 = new EtaMultiRealRecordPure();
             result_pipe_2.ObjectType = IStation.ObjectType.PipeLine;
             result_pipe_2.ObjectID = _sub_pipe_id[1];
-            result_pipe_2.RunningCount = 0; 
+            result_pipe_2.RunningCount = 0;
             result_pipe_2.AnalyStatus = Model.Eta.eAnalyStatus.Unkonw;
             result_pipe_2.InitialRunList(this._machineCount);//鎸夋车鎬绘暟璧嬪��
 
@@ -286,28 +282,28 @@
                 if (this._allMachineList[0].IsRunIng && !this._allMachineList[1].IsRunIng)
                 {//鍙湁涓�鍙锋车寮�鐫�
                     Analy_鏈夊崟娉垫祦閲忚_杩愯鐘舵�佸凡鍒嗘瀽_鍙橀娉�(
-                        pipe_flow_1, 
+                        pipe_flow_1,
                         ref result_pump1);
 
                     result_pipe_1.CopyAnaPara(result_pump1.AnaResult);
-          
+
                     result_pipe_1.Qa = pipe_flow_1;
                     result_pipe_1.Ha = result_pump1.AnaResult.Ha;
                     result_pipe_1.Pa = result_pump1.AnaResult.Pa;
-                    result_pipe_1.RunningCount = 1; 
+                    result_pipe_1.RunningCount = 1;
                     result_pipe_1.SetPumpStatusByIndex(0, result_pump1.AnaResult.HZa, result_pump1.AnaResult.RSa);
-                    
-                    result_pipe_1.AnalyStatus = result_pump1.AnaResult.AnalyStatus; 
+
+                    result_pipe_1.AnalyStatus = result_pump1.AnaResult.AnalyStatus;
 
                     result_pump2.AnaResult.SetShutDownStatus();//1鍙锋车 娌″紑  
                 }
                 else if (!this._allMachineList[0].IsRunIng && this._allMachineList[1].IsRunIng)
                 {//鍙湁浜屽彿娉靛紑鐫�
                     Analy_鏈夊崟娉垫祦閲忚_杩愯鐘舵�佸凡鍒嗘瀽_鍙橀娉�(
-                         pipe_flow_1, 
+                         pipe_flow_1,
                          ref result_pump2);
 
-                    result_pipe_1.CopyAnaPara(result_pump2.AnaResult); 
+                    result_pipe_1.CopyAnaPara(result_pump2.AnaResult);
                     result_pipe_1.Qa = pipe_flow_1;
                     result_pipe_1.Ha = result_pump2.AnaResult.Ha;
                     result_pipe_1.Pa = result_pump2.AnaResult.Pa;
@@ -317,7 +313,7 @@
 
 
                     result_pipe_1.AnalyStatus = result_pump2.AnaResult.AnalyStatus;
-           
+
 
                     result_pump1.AnaResult.SetShutDownStatus();//1鍙锋车 娌″紑  
                 }
@@ -326,12 +322,12 @@
                     Analy_澶氭车骞惰仈杩愯_鍗曠鍑哄彛(pipe_flow_1, new List<IStation.Calculation.Eta.Model.PumpAnaResult>() { result_pump1, result_pump2 });
 
                     BuildConnectResult(pipe_flow_1, result_pipe_1, new List<IStation.Calculation.Eta.Model.PumpAnaResult>() { result_pump1, result_pump2 });
- 
+
                 }
- 
+
             }
             else
-            { 
+            {
                 result_pipe_1.SetEmptyPipe(this._machineCount);//绌虹璺�
             }
 
@@ -351,10 +347,10 @@
                 if (this._allMachineList[2].IsRunIng && !this._allMachineList[3].IsRunIng)
                 {//3鍙锋车寮�鐫�
                     Analy_鏈夊崟娉垫祦閲忚_杩愯鐘舵�佸凡鍒嗘瀽_鍙橀娉�(
-                        pipe_flow_2, 
+                        pipe_flow_2,
                         ref result_pump3);
 
-                    result_pipe_2.CopyAnaPara(result_pump3.AnaResult); 
+                    result_pipe_2.CopyAnaPara(result_pump3.AnaResult);
                     result_pipe_2.Qa = pipe_flow_2;
                     result_pipe_2.Ha = result_pump3.AnaResult.Ha;
                     result_pipe_2.RunningCount = 1;
@@ -362,25 +358,25 @@
                     result_pipe_2.AnalyStatus = result_pump3.AnaResult.AnalyStatus;
 
                     result_pipe_2.SetPumpStatusByIndex(2, result_pump3.AnaResult.HZa, result_pump3.AnaResult.RSa);
-        
+
 
                     result_pump4.AnaResult.SetShutDownStatus();//1鍙锋车 娌″紑  
                 }
                 else if (!this._allMachineList[2].IsRunIng && this._allMachineList[3].IsRunIng)
                 {//4鍙锋车寮�鐫�
                     Analy_鏈夊崟娉垫祦閲忚_杩愯鐘舵�佸凡鍒嗘瀽_鍙橀娉�(
-                         pipe_flow_2, 
+                         pipe_flow_2,
                         ref result_pump4);
 
-                    result_pipe_2.CopyAnaPara(result_pump4.AnaResult); 
+                    result_pipe_2.CopyAnaPara(result_pump4.AnaResult);
                     result_pipe_2.Qa = pipe_flow_2;
                     result_pipe_2.Ha = result_pump4.AnaResult.Ha;
-                    result_pipe_2.RunningCount = 1; 
+                    result_pipe_2.RunningCount = 1;
                     result_pipe_2.Pa = result_pump4.AnaResult.Pa;
                     result_pipe_2.AnalyStatus = result_pump4.AnaResult.AnalyStatus;
 
                     result_pipe_2.SetPumpStatusByIndex(3, result_pump4.AnaResult.HZa, result_pump4.AnaResult.RSa);
-              
+
 
                     result_pump3.AnaResult.SetShutDownStatus();//1鍙锋车 娌″紑  
                 }
@@ -389,12 +385,12 @@
                     Analy_澶氭车骞惰仈杩愯_鍗曠鍑哄彛(pipe_flow_2, new List<IStation.Calculation.Eta.Model.PumpAnaResult>() { result_pump3, result_pump4 });
 
                     BuildConnectResult(pipe_flow_2, result_pipe_2, new List<IStation.Calculation.Eta.Model.PumpAnaResult>() { result_pump3, result_pump4 });
-            
+
                 }
-    
+
             }
             else
-            { 
+            {
                 result_pipe_2.SetEmptyPipe(this._machineCount);//绌虹璺�
             }
 
@@ -440,15 +436,15 @@
             }
 
             if (result_pump == null)
-            { 
-                result_pipe_2.AnalyStatus = Model.Eta.eAnalyStatus.Abnormal; 
+            {
+                result_pipe_2.AnalyStatus = Model.Eta.eAnalyStatus.Abnormal;
                 result_pipe_1.AnalyStatus = Model.Eta.eAnalyStatus.Abnormal;
                 return;
             }
 
             if (isPipe1)
             {
-                result_pipe_1.CopyAnaPara(result_pump); 
+                result_pipe_1.CopyAnaPara(result_pump);
                 result_pipe_1.AnalyInfo = result_pump.AnalyInfo;
                 result_pipe_1.AnalyStatus = result_pump.AnalyStatus;
 
@@ -461,14 +457,14 @@
             }
             else
             {
-                result_pipe_2.CopyAnaPara(result_pump); 
+                result_pipe_2.CopyAnaPara(result_pump);
                 result_pipe_2.AnalyInfo = result_pump.AnalyInfo;
                 result_pipe_2.AnalyStatus = result_pump.AnalyStatus;
 
                 BuildConnectResult(total_flow, result_pipe_2);
 
                 result_pipe_2.RunningCount = 1;
- 
+
                 result_pipe_1.SetEmptyPipe(this._machineCount);//绌虹璺�
 
                 _stationAnaResult.CopyAnaPara(result_pipe_2);
@@ -500,9 +496,9 @@
             {
                 Analy_澶氭车骞惰仈杩愯_鍗曠鍑哄彛(total_flow, this._allMachineList);
 
-                BuildConnectResult(total_flow, result_pipe_1 );
+                BuildConnectResult(total_flow, result_pipe_1);
                 result_pipe_1.Qa = total_flow;
- 
+
                 result_pipe_2.SetEmptyPipe(this._machineCount);//绌虹璺�
 
                 _stationAnaResult.CopyAnaPara(result_pipe_1);
@@ -511,7 +507,7 @@
             {
                 Analy_澶氭车骞惰仈杩愯_鍗曠鍑哄彛(total_flow, this._allMachineList);
 
-                BuildConnectResult(total_flow, result_pipe_2 );
+                BuildConnectResult(total_flow, result_pipe_2);
                 result_pipe_2.Qa = total_flow;
 
                 result_pipe_1.SetEmptyPipe(this._machineCount);//绌虹璺�
@@ -535,7 +531,7 @@
             return pump_open_count;
         }
 
- 
+
 
 
 
diff --git a/Entry/IStation.WebApi.Entry/IStation.WebApi.Entry.csproj b/Entry/IStation.WebApi.Entry/IStation.WebApi.Entry.csproj
index 69b8f6a..31ffaea 100644
--- a/Entry/IStation.WebApi.Entry/IStation.WebApi.Entry.csproj
+++ b/Entry/IStation.WebApi.Entry/IStation.WebApi.Entry.csproj
@@ -12,25 +12,8 @@
 
   <ItemGroup>
     <ProjectReference Include="..\..\Application\IStation.Application.Basic\IStation.Application.Basic.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.Bimface\IStation.Application.Bimface.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.DataFile\IStation.Application.DataFile.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.Dma\IStation.Application.Dma.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.Epanet\IStation.Application.Epanet.csproj" />
     <ProjectReference Include="..\..\Application\IStation.Application.Eta\IStation.Application.Eta.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.File\IStation.Application.File.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.Inspect\IStation.Application.Inspect.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.Job\IStation.Application.Job.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.LargeScreen\IStation.Application.LargeScreen.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.Main\IStation.Application.Main.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.Map\IStation.Application.Map.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.Monitor\IStation.Application.Monitor.csproj" />
     <ProjectReference Include="..\..\Application\IStation.Application.OpenApi\IStation.Application.OpenApi.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.Organize\IStation.Application.Organize.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.Product\IStation.Application.Product.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.Repair\IStation.Application.Repair.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.Run\IStation.Application.Run.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.User\IStation.Application.User.csproj" />
-    <ProjectReference Include="..\..\Application\IStation.Application.Vibration\IStation.Application.Vibration.csproj" />
     <ProjectReference Include="..\..\Core\IStation.WebApi.Core\IStation.WebApi.Core.csproj" />
   </ItemGroup>
 
diff --git a/IStation.WebApi.Dispatch.sln b/IStation.WebApi.Dispatch.sln
index 83117ee..b80386e 100644
--- a/IStation.WebApi.Dispatch.sln
+++ b/IStation.WebApi.Dispatch.sln
@@ -87,8 +87,6 @@
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.Core", "Application\IStation.Application.Core\IStation.Application.Core.csproj", "{17472ED6-6993-4F35-B419-5DD70BACF8EE}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.Job", "Application\IStation.Application.Job\IStation.Application.Job.csproj", "{E333361E-5072-43DA-97D9-B94D0EF7A388}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Entity.Basic", "Entity\IStation.Entity.Basic\IStation.Entity.Basic.csproj", "{935F8017-8FF6-4D05-8B02-370B01C4395C}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Model.Basic", "Model\IStation.Model.Basic\IStation.Model.Basic.csproj", "{EABD7A65-2A38-4E1F-AB4E-0A477896D74B}"
@@ -107,8 +105,6 @@
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Service.Map", "Service\IStation.Service.Map\IStation.Service.Map.csproj", "{1F820E39-7D27-4438-9EA1-35250ED67504}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.Map", "Application\IStation.Application.Map\IStation.Application.Map.csproj", "{4AA289D4-59F2-4AB7-8E39-7CB9F7E8D054}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Entity.Epanet", "Entity\IStation.Entity.Epanet\IStation.Entity.Epanet.csproj", "{45C619EF-A0D6-4DCD-949E-35A49C65CF8C}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Model.Epanet", "Model\IStation.Model.Epanet\IStation.Model.Epanet.csproj", "{A98C78E2-6695-486B-BED3-C4B629762333}"
@@ -116,8 +112,6 @@
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.DAL.Epanet", "DAL\IStation.DAL.Epanet\IStation.DAL.Epanet.csproj", "{FD10F7E7-81F8-406F-B30C-AFD7ACABE0E6}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Service.Epanet", "Service\IStation.Service.Epanet\IStation.Service.Epanet.csproj", "{E09E35AC-0DDB-455A-8EE1-E83791AE3ACD}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.Epanet", "Application\IStation.Application.Epanet\IStation.Application.Epanet.csproj", "{3DEAD862-B78B-4588-997F-74CC425A8ABD}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Entity.User", "Entity\IStation.Entity.User\IStation.Entity.User.csproj", "{A9D90108-0B39-4604-9D56-F8A8AF8611EF}"
 EndProject
@@ -127,8 +121,6 @@
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Service.User", "Service\IStation.Service.User\IStation.Service.User.csproj", "{222C836C-1F72-466B-BA05-C0DB5F62561A}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.User", "Application\IStation.Application.User\IStation.Application.User.csproj", "{BB173A59-3109-404A-BC12-DB9172B258EE}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Entity.Organize", "Entity\IStation.Entity.Organize\IStation.Entity.Organize.csproj", "{19C35E9E-8E84-4BCA-A7D8-A21A7F8B68FB}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Model.Organize", "Model\IStation.Model.Organize\IStation.Model.Organize.csproj", "{4E3453FF-9541-4493-8633-9A1EF28FC831}"
@@ -136,8 +128,6 @@
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.DAL.Organize", "DAL\IStation.DAL.Organize\IStation.DAL.Organize.csproj", "{F2BCF22D-7002-44F4-9DD3-E094E6E80998}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Service.Organize", "Service\IStation.Service.Organize\IStation.Service.Organize.csproj", "{468702CC-EC28-4E92-B35D-BA51480D933F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.Organize", "Application\IStation.Application.Organize\IStation.Application.Organize.csproj", "{EB04B4AB-2E7B-4DFC-B3E6-FD4C768D3A95}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Entity.Bimface", "Entity\IStation.Entity.Bimface\IStation.Entity.Bimface.csproj", "{FEC84CC4-3118-41EA-AA71-8CC6AB175EFB}"
 EndProject
@@ -147,8 +137,6 @@
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Service.Bimface", "Service\IStation.Service.Bimface\IStation.Service.Bimface.csproj", "{91C78958-1A27-4090-A890-4C7B5495F36D}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.Bimface", "Application\IStation.Application.Bimface\IStation.Application.Bimface.csproj", "{662E6240-C1D4-4B6E-A792-21587C2F0569}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Entity.Dma", "Entity\IStation.Entity.Dma\IStation.Entity.Dma.csproj", "{C39A9B5A-A0BB-442F-913A-F4FC55C9DF59}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Model.Dma", "Model\IStation.Model.Dma\IStation.Model.Dma.csproj", "{D7393EFB-357D-4790-8820-A68937299777}"
@@ -156,8 +144,6 @@
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.DAL.Dma", "DAL\IStation.DAL.Dma\IStation.DAL.Dma.csproj", "{CC0577CF-B838-4D62-9F17-84263D78BC75}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Service.Dma", "Service\IStation.Service.Dma\IStation.Service.Dma.csproj", "{D887FBE4-4294-4153-A40D-5C2AE9FAEA6C}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.Dma", "Application\IStation.Application.Dma\IStation.Application.Dma.csproj", "{2B9A741E-F363-421B-90D0-096C035AFB74}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Entity.Product", "Entity\IStation.Entity.Product\IStation.Entity.Product.csproj", "{0B14D208-546A-4B98-9E5B-F4075ADC8B60}"
 EndProject
@@ -169,8 +155,6 @@
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Service.Product", "Service\IStation.Service.Product\IStation.Service.Product.csproj", "{9FF7BE27-C8A1-40A2-9830-F39D3F1B2723}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.Product", "Application\IStation.Application.Product\IStation.Application.Product.csproj", "{855C7C2F-7F87-4AAA-BF8C-DC308D0EB424}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Entity.Main", "Entity\IStation.Entity.Main\IStation.Entity.Main.csproj", "{F02C6E7D-E171-4F2F-95D5-522DB73DBEC9}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Model.Main", "Model\IStation.Model.Main\IStation.Model.Main.csproj", "{F0B75BDD-8E1B-4C44-88F4-9471300D2597}"
@@ -178,8 +162,6 @@
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.DAL.Main", "DAL\IStation.DAL.Main\IStation.DAL.Main.csproj", "{2E73CAB8-A477-43A2-B455-E19FB4F606D9}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Service.Main", "Service\IStation.Service.Main\IStation.Service.Main.csproj", "{64B6ED22-8656-44DC-B2FC-4C6BC271886F}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.Main", "Application\IStation.Application.Main\IStation.Application.Main.csproj", "{C6954B2D-B574-45EA-889D-B70A32787A43}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Entity.Monitor", "Entity\IStation.Entity.Monitor\IStation.Entity.Monitor.csproj", "{453A98C0-CFC8-4EBF-8981-B0EE6DD0312E}"
 EndProject
@@ -189,8 +171,6 @@
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Service.Monitor", "Service\IStation.Service.Monitor\IStation.Service.Monitor.csproj", "{53410317-717A-4A06-8D06-0A049A96834E}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.Monitor", "Application\IStation.Application.Monitor\IStation.Application.Monitor.csproj", "{7A77BD15-6F41-45EB-BD6C-2351B209CDD5}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Entity.Repair", "Entity\IStation.Entity.Repair\IStation.Entity.Repair.csproj", "{1A4EBA31-7554-4FC8-B4A7-735B940E0916}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Model.Repair", "Model\IStation.Model.Repair\IStation.Model.Repair.csproj", "{361C9FD1-F673-496B-BB4B-1E2665E91721}"
@@ -198,8 +178,6 @@
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.DAL.Repair", "DAL\IStation.DAL.Repair\IStation.DAL.Repair.csproj", "{1110F78E-0232-4A56-B678-CB2A6C2AEB9E}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Service.Repair", "Service\IStation.Service.Repair\IStation.Service.Repair.csproj", "{9BDA9171-483B-4F69-936E-01F546E25DC0}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.Repair", "Application\IStation.Application.Repair\IStation.Application.Repair.csproj", "{27B7C2A6-5C6E-4305-98EC-D6A3EE7B9C2E}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Entity.Run", "Entity\IStation.Entity.Run\IStation.Entity.Run.csproj", "{306CC209-52B5-470F-BF99-BD171B822DD5}"
 EndProject
@@ -210,8 +188,6 @@
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Service.Run", "Service\IStation.Service.Run\IStation.Service.Run.csproj", "{286D6CAF-5238-4B09-ACA8-19651C645EBA}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.RedisCache.Run", "RedisCache\IStation.RedisCache.Run\IStation.RedisCache.Run.csproj", "{EB9471A8-69D1-477A-A664-4E8B0EBE5F94}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.Run", "Application\IStation.Application.Run\IStation.Application.Run.csproj", "{762886ED-B832-4622-A40E-43D7EB32CE75}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Calculation.Analy", "Calculation\IStation.Calculation.Analy\IStation.Calculation.Analy.csproj", "{CEB46485-56CF-4EB8-980A-7C8C81A7C347}"
 EndProject
@@ -241,23 +217,11 @@
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Service.Inspect", "Service\IStation.Service.Inspect\IStation.Service.Inspect.csproj", "{07387995-A7CD-4C04-A05A-45F8DB0EDFBC}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.Inspect", "Application\IStation.Application.Inspect\IStation.Application.Inspect.csproj", "{46936FDF-D917-40AD-A67B-0177CCB8D659}"
-EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Model.Vibration", "Model\IStation.Model.Vibration\IStation.Model.Vibration.csproj", "{84C5D892-21E5-44E9-BF7E-18B9CB38FF08}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.Vibration", "Application\IStation.Application.Vibration\IStation.Application.Vibration.csproj", "{BA9ED0E3-5C49-42F0-85A5-94BE110C9B2B}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.RedisCache.Vibration", "RedisCache\IStation.RedisCache.Vibration\IStation.RedisCache.Vibration.csproj", "{3E9AC754-2820-484C-9792-71AC5396D7E0}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.OpenApi", "Application\IStation.Application.OpenApi\IStation.Application.OpenApi.csproj", "{1CDB8D9B-0DCF-4DB7-A193-96005E4E0554}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.File", "Application\IStation.Application.File\IStation.Application.File.csproj", "{6B1F2F73-E16C-4C85-9D3B-B1872E363653}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.DataFile", "Application\IStation.Application.DataFile\IStation.Application.DataFile.csproj", "{73065108-246A-4852-A248-1755B3804DF5}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Application.LargeScreen", "Application\IStation.Application.LargeScreen\IStation.Application.LargeScreen.csproj", "{902AABE5-E167-444E-B3C7-8077E1E9BBBB}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.Calculation.Plan", "Calculation\IStation.Calculation.Plan\IStation.Calculation.Plan.csproj", "{EE2FFC2D-6935-40EE-B5F9-085CF922ABD9}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -385,10 +349,6 @@
 		{17472ED6-6993-4F35-B419-5DD70BACF8EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{17472ED6-6993-4F35-B419-5DD70BACF8EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{17472ED6-6993-4F35-B419-5DD70BACF8EE}.Release|Any CPU.Build.0 = Release|Any CPU
-		{E333361E-5072-43DA-97D9-B94D0EF7A388}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{E333361E-5072-43DA-97D9-B94D0EF7A388}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{E333361E-5072-43DA-97D9-B94D0EF7A388}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{E333361E-5072-43DA-97D9-B94D0EF7A388}.Release|Any CPU.Build.0 = Release|Any CPU
 		{935F8017-8FF6-4D05-8B02-370B01C4395C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{935F8017-8FF6-4D05-8B02-370B01C4395C}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{935F8017-8FF6-4D05-8B02-370B01C4395C}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -425,10 +385,6 @@
 		{1F820E39-7D27-4438-9EA1-35250ED67504}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{1F820E39-7D27-4438-9EA1-35250ED67504}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{1F820E39-7D27-4438-9EA1-35250ED67504}.Release|Any CPU.Build.0 = Release|Any CPU
-		{4AA289D4-59F2-4AB7-8E39-7CB9F7E8D054}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{4AA289D4-59F2-4AB7-8E39-7CB9F7E8D054}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{4AA289D4-59F2-4AB7-8E39-7CB9F7E8D054}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{4AA289D4-59F2-4AB7-8E39-7CB9F7E8D054}.Release|Any CPU.Build.0 = Release|Any CPU
 		{45C619EF-A0D6-4DCD-949E-35A49C65CF8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{45C619EF-A0D6-4DCD-949E-35A49C65CF8C}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{45C619EF-A0D6-4DCD-949E-35A49C65CF8C}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -445,10 +401,6 @@
 		{E09E35AC-0DDB-455A-8EE1-E83791AE3ACD}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{E09E35AC-0DDB-455A-8EE1-E83791AE3ACD}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E09E35AC-0DDB-455A-8EE1-E83791AE3ACD}.Release|Any CPU.Build.0 = Release|Any CPU
-		{3DEAD862-B78B-4588-997F-74CC425A8ABD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{3DEAD862-B78B-4588-997F-74CC425A8ABD}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{3DEAD862-B78B-4588-997F-74CC425A8ABD}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{3DEAD862-B78B-4588-997F-74CC425A8ABD}.Release|Any CPU.Build.0 = Release|Any CPU
 		{A9D90108-0B39-4604-9D56-F8A8AF8611EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{A9D90108-0B39-4604-9D56-F8A8AF8611EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{A9D90108-0B39-4604-9D56-F8A8AF8611EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -465,10 +417,6 @@
 		{222C836C-1F72-466B-BA05-C0DB5F62561A}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{222C836C-1F72-466B-BA05-C0DB5F62561A}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{222C836C-1F72-466B-BA05-C0DB5F62561A}.Release|Any CPU.Build.0 = Release|Any CPU
-		{BB173A59-3109-404A-BC12-DB9172B258EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{BB173A59-3109-404A-BC12-DB9172B258EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{BB173A59-3109-404A-BC12-DB9172B258EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{BB173A59-3109-404A-BC12-DB9172B258EE}.Release|Any CPU.Build.0 = Release|Any CPU
 		{19C35E9E-8E84-4BCA-A7D8-A21A7F8B68FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{19C35E9E-8E84-4BCA-A7D8-A21A7F8B68FB}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{19C35E9E-8E84-4BCA-A7D8-A21A7F8B68FB}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -485,10 +433,6 @@
 		{468702CC-EC28-4E92-B35D-BA51480D933F}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{468702CC-EC28-4E92-B35D-BA51480D933F}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{468702CC-EC28-4E92-B35D-BA51480D933F}.Release|Any CPU.Build.0 = Release|Any CPU
-		{EB04B4AB-2E7B-4DFC-B3E6-FD4C768D3A95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{EB04B4AB-2E7B-4DFC-B3E6-FD4C768D3A95}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{EB04B4AB-2E7B-4DFC-B3E6-FD4C768D3A95}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{EB04B4AB-2E7B-4DFC-B3E6-FD4C768D3A95}.Release|Any CPU.Build.0 = Release|Any CPU
 		{FEC84CC4-3118-41EA-AA71-8CC6AB175EFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{FEC84CC4-3118-41EA-AA71-8CC6AB175EFB}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{FEC84CC4-3118-41EA-AA71-8CC6AB175EFB}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -505,10 +449,6 @@
 		{91C78958-1A27-4090-A890-4C7B5495F36D}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{91C78958-1A27-4090-A890-4C7B5495F36D}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{91C78958-1A27-4090-A890-4C7B5495F36D}.Release|Any CPU.Build.0 = Release|Any CPU
-		{662E6240-C1D4-4B6E-A792-21587C2F0569}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{662E6240-C1D4-4B6E-A792-21587C2F0569}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{662E6240-C1D4-4B6E-A792-21587C2F0569}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{662E6240-C1D4-4B6E-A792-21587C2F0569}.Release|Any CPU.Build.0 = Release|Any CPU
 		{C39A9B5A-A0BB-442F-913A-F4FC55C9DF59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{C39A9B5A-A0BB-442F-913A-F4FC55C9DF59}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{C39A9B5A-A0BB-442F-913A-F4FC55C9DF59}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -525,10 +465,6 @@
 		{D887FBE4-4294-4153-A40D-5C2AE9FAEA6C}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{D887FBE4-4294-4153-A40D-5C2AE9FAEA6C}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{D887FBE4-4294-4153-A40D-5C2AE9FAEA6C}.Release|Any CPU.Build.0 = Release|Any CPU
-		{2B9A741E-F363-421B-90D0-096C035AFB74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{2B9A741E-F363-421B-90D0-096C035AFB74}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{2B9A741E-F363-421B-90D0-096C035AFB74}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{2B9A741E-F363-421B-90D0-096C035AFB74}.Release|Any CPU.Build.0 = Release|Any CPU
 		{0B14D208-546A-4B98-9E5B-F4075ADC8B60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{0B14D208-546A-4B98-9E5B-F4075ADC8B60}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{0B14D208-546A-4B98-9E5B-F4075ADC8B60}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -549,10 +485,6 @@
 		{9FF7BE27-C8A1-40A2-9830-F39D3F1B2723}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{9FF7BE27-C8A1-40A2-9830-F39D3F1B2723}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{9FF7BE27-C8A1-40A2-9830-F39D3F1B2723}.Release|Any CPU.Build.0 = Release|Any CPU
-		{855C7C2F-7F87-4AAA-BF8C-DC308D0EB424}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{855C7C2F-7F87-4AAA-BF8C-DC308D0EB424}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{855C7C2F-7F87-4AAA-BF8C-DC308D0EB424}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{855C7C2F-7F87-4AAA-BF8C-DC308D0EB424}.Release|Any CPU.Build.0 = Release|Any CPU
 		{F02C6E7D-E171-4F2F-95D5-522DB73DBEC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{F02C6E7D-E171-4F2F-95D5-522DB73DBEC9}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{F02C6E7D-E171-4F2F-95D5-522DB73DBEC9}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -569,10 +501,6 @@
 		{64B6ED22-8656-44DC-B2FC-4C6BC271886F}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{64B6ED22-8656-44DC-B2FC-4C6BC271886F}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{64B6ED22-8656-44DC-B2FC-4C6BC271886F}.Release|Any CPU.Build.0 = Release|Any CPU
-		{C6954B2D-B574-45EA-889D-B70A32787A43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{C6954B2D-B574-45EA-889D-B70A32787A43}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{C6954B2D-B574-45EA-889D-B70A32787A43}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{C6954B2D-B574-45EA-889D-B70A32787A43}.Release|Any CPU.Build.0 = Release|Any CPU
 		{453A98C0-CFC8-4EBF-8981-B0EE6DD0312E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{453A98C0-CFC8-4EBF-8981-B0EE6DD0312E}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{453A98C0-CFC8-4EBF-8981-B0EE6DD0312E}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -589,10 +517,6 @@
 		{53410317-717A-4A06-8D06-0A049A96834E}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{53410317-717A-4A06-8D06-0A049A96834E}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{53410317-717A-4A06-8D06-0A049A96834E}.Release|Any CPU.Build.0 = Release|Any CPU
-		{7A77BD15-6F41-45EB-BD6C-2351B209CDD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{7A77BD15-6F41-45EB-BD6C-2351B209CDD5}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{7A77BD15-6F41-45EB-BD6C-2351B209CDD5}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{7A77BD15-6F41-45EB-BD6C-2351B209CDD5}.Release|Any CPU.Build.0 = Release|Any CPU
 		{1A4EBA31-7554-4FC8-B4A7-735B940E0916}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{1A4EBA31-7554-4FC8-B4A7-735B940E0916}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{1A4EBA31-7554-4FC8-B4A7-735B940E0916}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -609,10 +533,6 @@
 		{9BDA9171-483B-4F69-936E-01F546E25DC0}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{9BDA9171-483B-4F69-936E-01F546E25DC0}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{9BDA9171-483B-4F69-936E-01F546E25DC0}.Release|Any CPU.Build.0 = Release|Any CPU
-		{27B7C2A6-5C6E-4305-98EC-D6A3EE7B9C2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{27B7C2A6-5C6E-4305-98EC-D6A3EE7B9C2E}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{27B7C2A6-5C6E-4305-98EC-D6A3EE7B9C2E}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{27B7C2A6-5C6E-4305-98EC-D6A3EE7B9C2E}.Release|Any CPU.Build.0 = Release|Any CPU
 		{306CC209-52B5-470F-BF99-BD171B822DD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{306CC209-52B5-470F-BF99-BD171B822DD5}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{306CC209-52B5-470F-BF99-BD171B822DD5}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -633,10 +553,6 @@
 		{EB9471A8-69D1-477A-A664-4E8B0EBE5F94}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{EB9471A8-69D1-477A-A664-4E8B0EBE5F94}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{EB9471A8-69D1-477A-A664-4E8B0EBE5F94}.Release|Any CPU.Build.0 = Release|Any CPU
-		{762886ED-B832-4622-A40E-43D7EB32CE75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{762886ED-B832-4622-A40E-43D7EB32CE75}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{762886ED-B832-4622-A40E-43D7EB32CE75}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{762886ED-B832-4622-A40E-43D7EB32CE75}.Release|Any CPU.Build.0 = Release|Any CPU
 		{CEB46485-56CF-4EB8-980A-7C8C81A7C347}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{CEB46485-56CF-4EB8-980A-7C8C81A7C347}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{CEB46485-56CF-4EB8-980A-7C8C81A7C347}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -693,18 +609,10 @@
 		{07387995-A7CD-4C04-A05A-45F8DB0EDFBC}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{07387995-A7CD-4C04-A05A-45F8DB0EDFBC}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{07387995-A7CD-4C04-A05A-45F8DB0EDFBC}.Release|Any CPU.Build.0 = Release|Any CPU
-		{46936FDF-D917-40AD-A67B-0177CCB8D659}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{46936FDF-D917-40AD-A67B-0177CCB8D659}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{46936FDF-D917-40AD-A67B-0177CCB8D659}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{46936FDF-D917-40AD-A67B-0177CCB8D659}.Release|Any CPU.Build.0 = Release|Any CPU
 		{84C5D892-21E5-44E9-BF7E-18B9CB38FF08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{84C5D892-21E5-44E9-BF7E-18B9CB38FF08}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{84C5D892-21E5-44E9-BF7E-18B9CB38FF08}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{84C5D892-21E5-44E9-BF7E-18B9CB38FF08}.Release|Any CPU.Build.0 = Release|Any CPU
-		{BA9ED0E3-5C49-42F0-85A5-94BE110C9B2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{BA9ED0E3-5C49-42F0-85A5-94BE110C9B2B}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{BA9ED0E3-5C49-42F0-85A5-94BE110C9B2B}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{BA9ED0E3-5C49-42F0-85A5-94BE110C9B2B}.Release|Any CPU.Build.0 = Release|Any CPU
 		{3E9AC754-2820-484C-9792-71AC5396D7E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{3E9AC754-2820-484C-9792-71AC5396D7E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{3E9AC754-2820-484C-9792-71AC5396D7E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -713,22 +621,6 @@
 		{1CDB8D9B-0DCF-4DB7-A193-96005E4E0554}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{1CDB8D9B-0DCF-4DB7-A193-96005E4E0554}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{1CDB8D9B-0DCF-4DB7-A193-96005E4E0554}.Release|Any CPU.Build.0 = Release|Any CPU
-		{6B1F2F73-E16C-4C85-9D3B-B1872E363653}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{6B1F2F73-E16C-4C85-9D3B-B1872E363653}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{6B1F2F73-E16C-4C85-9D3B-B1872E363653}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{6B1F2F73-E16C-4C85-9D3B-B1872E363653}.Release|Any CPU.Build.0 = Release|Any CPU
-		{73065108-246A-4852-A248-1755B3804DF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{73065108-246A-4852-A248-1755B3804DF5}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{73065108-246A-4852-A248-1755B3804DF5}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{73065108-246A-4852-A248-1755B3804DF5}.Release|Any CPU.Build.0 = Release|Any CPU
-		{902AABE5-E167-444E-B3C7-8077E1E9BBBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{902AABE5-E167-444E-B3C7-8077E1E9BBBB}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{902AABE5-E167-444E-B3C7-8077E1E9BBBB}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{902AABE5-E167-444E-B3C7-8077E1E9BBBB}.Release|Any CPU.Build.0 = Release|Any CPU
-		{EE2FFC2D-6935-40EE-B5F9-085CF922ABD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{EE2FFC2D-6935-40EE-B5F9-085CF922ABD9}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{EE2FFC2D-6935-40EE-B5F9-085CF922ABD9}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{EE2FFC2D-6935-40EE-B5F9-085CF922ABD9}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -763,7 +655,6 @@
 		{A3B3FD1B-CE92-415C-919B-97960574E1C7} = {3BE2BA1A-B93F-4EDE-BC37-915663317C33}
 		{D3CB445E-D280-4340-B86F-6D6B2F0CC222} = {3BE2BA1A-B93F-4EDE-BC37-915663317C33}
 		{17472ED6-6993-4F35-B419-5DD70BACF8EE} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
-		{E333361E-5072-43DA-97D9-B94D0EF7A388} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
 		{935F8017-8FF6-4D05-8B02-370B01C4395C} = {A24F4CA7-C6A3-4663-9A07-017814E614E7}
 		{EABD7A65-2A38-4E1F-AB4E-0A477896D74B} = {61C58B21-80C9-4092-ACC5-141B424D15E8}
 		{4FD9F497-BF54-4DED-9747-61103339584C} = {49E7CA43-7FD9-48A3-B0DB-6D99FA93F393}
@@ -773,59 +664,48 @@
 		{81F213B6-BAF7-466E-ACE5-27EA6E74C32C} = {61C58B21-80C9-4092-ACC5-141B424D15E8}
 		{F64241F2-ABE2-44FF-A618-FDCB23D6F773} = {49E7CA43-7FD9-48A3-B0DB-6D99FA93F393}
 		{1F820E39-7D27-4438-9EA1-35250ED67504} = {3BE2BA1A-B93F-4EDE-BC37-915663317C33}
-		{4AA289D4-59F2-4AB7-8E39-7CB9F7E8D054} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
 		{45C619EF-A0D6-4DCD-949E-35A49C65CF8C} = {A24F4CA7-C6A3-4663-9A07-017814E614E7}
 		{A98C78E2-6695-486B-BED3-C4B629762333} = {61C58B21-80C9-4092-ACC5-141B424D15E8}
 		{FD10F7E7-81F8-406F-B30C-AFD7ACABE0E6} = {49E7CA43-7FD9-48A3-B0DB-6D99FA93F393}
 		{E09E35AC-0DDB-455A-8EE1-E83791AE3ACD} = {3BE2BA1A-B93F-4EDE-BC37-915663317C33}
-		{3DEAD862-B78B-4588-997F-74CC425A8ABD} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
 		{A9D90108-0B39-4604-9D56-F8A8AF8611EF} = {A24F4CA7-C6A3-4663-9A07-017814E614E7}
 		{BAD1818E-FE2B-4E14-B011-6105B311635B} = {61C58B21-80C9-4092-ACC5-141B424D15E8}
 		{D1156846-1AF1-453D-8682-2BBD954C463B} = {49E7CA43-7FD9-48A3-B0DB-6D99FA93F393}
 		{222C836C-1F72-466B-BA05-C0DB5F62561A} = {3BE2BA1A-B93F-4EDE-BC37-915663317C33}
-		{BB173A59-3109-404A-BC12-DB9172B258EE} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
 		{19C35E9E-8E84-4BCA-A7D8-A21A7F8B68FB} = {A24F4CA7-C6A3-4663-9A07-017814E614E7}
 		{4E3453FF-9541-4493-8633-9A1EF28FC831} = {61C58B21-80C9-4092-ACC5-141B424D15E8}
 		{F2BCF22D-7002-44F4-9DD3-E094E6E80998} = {49E7CA43-7FD9-48A3-B0DB-6D99FA93F393}
 		{468702CC-EC28-4E92-B35D-BA51480D933F} = {3BE2BA1A-B93F-4EDE-BC37-915663317C33}
-		{EB04B4AB-2E7B-4DFC-B3E6-FD4C768D3A95} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
 		{FEC84CC4-3118-41EA-AA71-8CC6AB175EFB} = {A24F4CA7-C6A3-4663-9A07-017814E614E7}
 		{B79635F1-A92E-491C-B881-F6B1F196FE2F} = {61C58B21-80C9-4092-ACC5-141B424D15E8}
 		{A4FA0340-3251-4ECD-8198-9ABAFE5DD724} = {49E7CA43-7FD9-48A3-B0DB-6D99FA93F393}
 		{91C78958-1A27-4090-A890-4C7B5495F36D} = {3BE2BA1A-B93F-4EDE-BC37-915663317C33}
-		{662E6240-C1D4-4B6E-A792-21587C2F0569} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
 		{C39A9B5A-A0BB-442F-913A-F4FC55C9DF59} = {A24F4CA7-C6A3-4663-9A07-017814E614E7}
 		{D7393EFB-357D-4790-8820-A68937299777} = {61C58B21-80C9-4092-ACC5-141B424D15E8}
 		{CC0577CF-B838-4D62-9F17-84263D78BC75} = {49E7CA43-7FD9-48A3-B0DB-6D99FA93F393}
 		{D887FBE4-4294-4153-A40D-5C2AE9FAEA6C} = {3BE2BA1A-B93F-4EDE-BC37-915663317C33}
-		{2B9A741E-F363-421B-90D0-096C035AFB74} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
 		{0B14D208-546A-4B98-9E5B-F4075ADC8B60} = {A24F4CA7-C6A3-4663-9A07-017814E614E7}
 		{29D1F9FB-BFDC-4929-A316-9344D8B878BD} = {61C58B21-80C9-4092-ACC5-141B424D15E8}
 		{D5FBE2E9-E46A-43DE-BB95-AE587FF757F8} = {61C58B21-80C9-4092-ACC5-141B424D15E8}
 		{78FCCC31-B40F-4675-9A50-AA9DA7DDC716} = {49E7CA43-7FD9-48A3-B0DB-6D99FA93F393}
 		{9FF7BE27-C8A1-40A2-9830-F39D3F1B2723} = {3BE2BA1A-B93F-4EDE-BC37-915663317C33}
-		{855C7C2F-7F87-4AAA-BF8C-DC308D0EB424} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
 		{F02C6E7D-E171-4F2F-95D5-522DB73DBEC9} = {A24F4CA7-C6A3-4663-9A07-017814E614E7}
 		{F0B75BDD-8E1B-4C44-88F4-9471300D2597} = {61C58B21-80C9-4092-ACC5-141B424D15E8}
 		{2E73CAB8-A477-43A2-B455-E19FB4F606D9} = {49E7CA43-7FD9-48A3-B0DB-6D99FA93F393}
 		{64B6ED22-8656-44DC-B2FC-4C6BC271886F} = {3BE2BA1A-B93F-4EDE-BC37-915663317C33}
-		{C6954B2D-B574-45EA-889D-B70A32787A43} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
 		{453A98C0-CFC8-4EBF-8981-B0EE6DD0312E} = {A24F4CA7-C6A3-4663-9A07-017814E614E7}
 		{8BB51C09-E462-4F5B-BEE6-10DF1DF0DEA8} = {61C58B21-80C9-4092-ACC5-141B424D15E8}
 		{6C5C5F6D-EDBC-4DDD-8600-8C8DCE6BEC6E} = {49E7CA43-7FD9-48A3-B0DB-6D99FA93F393}
 		{53410317-717A-4A06-8D06-0A049A96834E} = {3BE2BA1A-B93F-4EDE-BC37-915663317C33}
-		{7A77BD15-6F41-45EB-BD6C-2351B209CDD5} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
 		{1A4EBA31-7554-4FC8-B4A7-735B940E0916} = {A24F4CA7-C6A3-4663-9A07-017814E614E7}
 		{361C9FD1-F673-496B-BB4B-1E2665E91721} = {61C58B21-80C9-4092-ACC5-141B424D15E8}
 		{1110F78E-0232-4A56-B678-CB2A6C2AEB9E} = {49E7CA43-7FD9-48A3-B0DB-6D99FA93F393}
 		{9BDA9171-483B-4F69-936E-01F546E25DC0} = {3BE2BA1A-B93F-4EDE-BC37-915663317C33}
-		{27B7C2A6-5C6E-4305-98EC-D6A3EE7B9C2E} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
 		{306CC209-52B5-470F-BF99-BD171B822DD5} = {A24F4CA7-C6A3-4663-9A07-017814E614E7}
 		{D50F9E4D-55AA-4FB7-A2B2-4CBB07D3B2C0} = {61C58B21-80C9-4092-ACC5-141B424D15E8}
 		{4212F5F8-F5FC-40FD-8F05-0A2D8204E55E} = {49E7CA43-7FD9-48A3-B0DB-6D99FA93F393}
 		{286D6CAF-5238-4B09-ACA8-19651C645EBA} = {3BE2BA1A-B93F-4EDE-BC37-915663317C33}
 		{EB9471A8-69D1-477A-A664-4E8B0EBE5F94} = {318306D9-A6F4-456C-9019-8E7EDA4F2066}
-		{762886ED-B832-4622-A40E-43D7EB32CE75} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
 		{CEB46485-56CF-4EB8-980A-7C8C81A7C347} = {B1548C2C-C3C2-47C0-8F6E-B265D0603099}
 		{95B99C20-2073-4DE9-A0BE-0FF205128544} = {B1548C2C-C3C2-47C0-8F6E-B265D0603099}
 		{4E406844-6424-4F35-A2F5-E503FB9B39C4} = {A24F4CA7-C6A3-4663-9A07-017814E614E7}
@@ -840,15 +720,9 @@
 		{8F6EF573-0AD7-40C4-B839-15EA72764C30} = {61C58B21-80C9-4092-ACC5-141B424D15E8}
 		{BE8E32E4-862C-4AFF-97D0-300EB2896285} = {49E7CA43-7FD9-48A3-B0DB-6D99FA93F393}
 		{07387995-A7CD-4C04-A05A-45F8DB0EDFBC} = {3BE2BA1A-B93F-4EDE-BC37-915663317C33}
-		{46936FDF-D917-40AD-A67B-0177CCB8D659} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
 		{84C5D892-21E5-44E9-BF7E-18B9CB38FF08} = {61C58B21-80C9-4092-ACC5-141B424D15E8}
-		{BA9ED0E3-5C49-42F0-85A5-94BE110C9B2B} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
 		{3E9AC754-2820-484C-9792-71AC5396D7E0} = {318306D9-A6F4-456C-9019-8E7EDA4F2066}
 		{1CDB8D9B-0DCF-4DB7-A193-96005E4E0554} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
-		{6B1F2F73-E16C-4C85-9D3B-B1872E363653} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
-		{73065108-246A-4852-A248-1755B3804DF5} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
-		{902AABE5-E167-444E-B3C7-8077E1E9BBBB} = {C7614DA2-0679-407D-B9E3-66D448DD7488}
-		{EE2FFC2D-6935-40EE-B5F9-085CF922ABD9} = {B1548C2C-C3C2-47C0-8F6E-B265D0603099}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {18D1EA07-81E5-4443-8512-F303BC79DCF4}

--
Gitblit v1.9.3