From 055084a369abc0d03a41b495c955d95a64852fb5 Mon Sep 17 00:00:00 2001
From: tangxu <76880903@qq.com>
Date: 星期日, 09 十月 2022 10:48:02 +0800
Subject: [PATCH] 水位计划调度分析

---
 Entry/IStation.WebApi.Entry.Dispatch/Program.cs                                           |    3 
 Application/IStation.Application.OpenApi/shys/plan/helper/PlanAnaCalculatorFactory.cs     |    9 
 Entry/IStation.WebApi.Entry.Dispatch/Properties/launchSettings.json                       |   31 +
 Calculation/IStation.Calculation.Dispatch/IOptAnaCalc.cs                                  |    3 
 Entry/IStation.WebApi.Entry.Dispatch/Properties/PublishProfiles/FolderProfile.pubxml      |   20 +
 Application/IStation.Application.OpenApi/shys/plan/shys/shys长兴泵站.cs                       |  189 ++++-----
 Entry/IStation.WebApi.Entry.Dispatch/Properties/PublishProfiles/FolderProfile.pubxml.user |   11 
 Settings/IStation.Settings/paras_settings.json                                            |   56 +-
 Entry/IStation.WebApi.Entry.Dispatch/.config/dotnet-tools.json                            |   12 
 /dev/null                                                                                 |   84 ----
 Settings/IStation.Settings/IStation.Settings.csproj                                       |    2 
 Application/IStation.Application.OpenApi/shys/plan/helper/PlanAnaBaseCalculator.cs        |  140 +++++++
 Entry/IStation.WebApi.Entry.Dispatch/appsettings.Development.json                         |    8 
 Entry/IStation.WebApi.Entry.Dispatch/appsettings.json                                     |   12 
 Calculation/IStation.Calculation.Plan/calc/PlanAnaCalculator.cs                           |   26 +
 Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaConstant.cs                 |   33 -
 Settings/IStation.Settings/paras_settings_debug.json                                      |  280 +++++++++++++++
 Calculation/IStation.Calculation.Dispatch/base/CalculatorOptAnaBase.cs                    |   70 +++
 Entry/IStation.WebApi.Entry.Dispatch/IStation.WebApi.Entry.Dispatch.csproj                |   28 +
 IStation.Server.Eta.v12.suo                                                               |    0 
 IStation.WebApi.Dispatch.sln                                                              |   12 
 21 files changed, 760 insertions(+), 269 deletions(-)

diff --git a/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaConstant.cs b/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaConstant.cs
index ea7a85f..42e1240 100644
--- a/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaConstant.cs
+++ b/Application/IStation.Application.OpenApi/shys/plan/dto/PlanAnaConstant.cs
@@ -36,38 +36,7 @@
         };
 
 
-
-        /// <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"}
-        //};
-
+ 
 
     }
 }
diff --git a/Application/IStation.Application.OpenApi/shys/plan/helper/IPlanAnaCalculator.cs b/Application/IStation.Application.OpenApi/shys/plan/helper/IPlanAnaCalculator.cs
deleted file mode 100644
index 3c5dd7c..0000000
--- a/Application/IStation.Application.OpenApi/shys/plan/helper/IPlanAnaCalculator.cs
+++ /dev/null
@@ -1,84 +0,0 @@
-锘縰sing System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using IStation.Application; 
-using IStation.Dto;
-
-namespace IStation.Calculation
-{
-    /// <summary>
-    /// 璁″垝鍒嗘瀽璁$畻鍣ㄦ帴鍙�
-    /// </summary>
-    public class  PlanAnaCalculator
-    {
-        /// <summary>
-        /// 
-        /// </summary>
-        protected IStation.Calculation.DispatchAna.IOptAnaCalc _dispatchAnaCalc = null;
-        /// <summary>
-        /// 
-        /// </summary>
-        public virtual List<Dto.MonthCalcuResult> Calc (
-            Model.Station station,int factoryId, 
-            List<Dto.MonthSumRecord> sumRecordList,
-            out string error_info)
-        {
-            if(_dispatchAnaCalc == null)
-            {
-                error_info = "鏈瀯寤篋ispatchAna.IOptAnaCalc";
-                return null;
-            }
-            int year = DateTime.Now.Year;
-
-            List<Dto.MonthCalcuResult> monthRecordList = new List<Dto.MonthCalcuResult>();
-
-
-            foreach (var monthRecord in sumRecordList)
-            {
-                //
-                List<IStation.Calculation.DispatchAna.Model.HourRequest> HourRequests = 
-                    BuildHourRequest(monthRecord.HourRecords,out error_info);
-                if(HourRequests == null || HourRequests.Count() == 0)
-                {
-                    error_info = "闈掕崏娌� 鏋勫缓DHourRequests 澶辫触,鍘熷洜:" + error_info;
-                    return null;
-                }
-
-                var dayNumber = DateTime.DaysInMonth(year, monthRecord.Month);
-
-                var daySum = this._dispatchAnaCalc.CalcSumData(HourRequests, out error_info);
-                if (daySum == null || daySum.Qt<=0)
-                {
-                    error_info = "闈掕崏娌�,璋冨害鍒嗘瀽澶辫触,鍘熷洜:" + error_info;
-                    return null;
-                }
-                Dto.MonthCalcuResult monthSum = new Dto.MonthCalcuResult();
-                monthSum.Month = monthRecord.Month;
-                monthSum.Qt = daySum.Qt * dayNumber;
-                monthSum.Dt = daySum.Dt * dayNumber;
-                monthSum.WP = daySum.WP;
-                monthRecordList.Add(monthSum);
-            }
-            error_info = null;
-            return monthRecordList;
-        }
-
-        /// <summary>
-        /// 
-        /// </summary>
-        /// <param name="HourSumRecords"></param>
-        /// <param name="error_info"></param>
-        /// <returns></returns>
-        protected virtual List<IStation.Calculation.DispatchAna.Model.HourRequest> BuildHourRequest(
-            List<IStation.Dto.HourSumRecord> HourSumRecords,
-            out string error_info)
-        {
-            error_info = "鏈疄渚嬪寲";
-            return null;
-        }
-
-
-    }
-}
diff --git a/Application/IStation.Application.OpenApi/shys/plan/helper/PlanAnaBaseCalculator.cs b/Application/IStation.Application.OpenApi/shys/plan/helper/PlanAnaBaseCalculator.cs
new file mode 100644
index 0000000..a02cac2
--- /dev/null
+++ b/Application/IStation.Application.OpenApi/shys/plan/helper/PlanAnaBaseCalculator.cs
@@ -0,0 +1,140 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using IStation.Application; 
+using IStation.Dto;
+
+namespace IStation.Calculation
+{
+    /// <summary>
+    /// 璁″垝鍒嗘瀽璁$畻鍣ㄦ帴鍙�
+    /// </summary>
+    public class  PlanAnaBaseCalculator
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        protected IStation.Calculation.DispatchAna.IOptAnaCalc _dispatchAnaCalc = null;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        protected long _corpID = 0;
+        /// <summary>
+        /// 
+        /// </summary>
+        protected long _stationID = 0;
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="corpID"></param>
+        /// <param name="stationID"></param>
+        public void SetStationID(long corpID,long stationID)
+        {
+            this._corpID = corpID;
+            this._stationID = stationID;
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public virtual List<Dto.MonthCalcuResult> Calc (
+            Model.Station station,int factoryId, 
+            List<Dto.MonthSumRecord> allMonthSumRecord,
+            out string error_info)
+        {
+            if(_dispatchAnaCalc == null)
+            {
+                //鐢辩户鎵跨被璁剧疆璋冨害杈呭姪绫�
+                error_info = "鏈瀯寤篋ispatchAna.IOptAnaCalc";
+                return null;
+            }
+            int year = DateTime.Now.Year;
+
+            List<Dto.MonthCalcuResult> monthRecordList = new List<Dto.MonthCalcuResult>();
+            foreach (var monthRecord in allMonthSumRecord)
+            { 
+                //鏋勫缓姣忓皬鏃剁殑鍙傛暟
+                List<IStation.Calculation.DispatchAna.Model.HourRequest> allHourRequests = 
+                    BuildHourRequest(monthRecord.HourRecords,out error_info);
+                if(allHourRequests == null || allHourRequests.Count() == 0)
+                {
+                    error_info = "鏋勫缓 HourRequests 澶辫触,鍘熷洜:" + error_info;
+                    return null;
+                }
+                if (!string.IsNullOrEmpty(error_info))
+                {
+                    error_info = "鏋勫缓 HourRequests 澶辫触,鍘熷洜:" + error_info;
+                    return null;
+                }
+                //涓�涓湀鐨勫ぉ鏁�
+                var dayNumber = DateTime.DaysInMonth(year, monthRecord.Month);
+                //姣忓ぉ鐨勬眹鎬�
+                var daySum = this._dispatchAnaCalc.CalcSumData(allHourRequests,true, out error_info);
+                if (daySum == null || daySum.Qt <= 0)
+                {
+                    error_info = "闈掕崏娌�,璋冨害鍒嗘瀽澶辫触,鍘熷洜:" + error_info;
+                    return null;
+                }
+                //璁$畻姣忔湀鐨勬眹鎬�
+                Dto.MonthCalcuResult monthSum = new Dto.MonthCalcuResult();
+                monthSum.Month = monthRecord.Month;
+                monthSum.Qt = Math.Round(daySum.Qt * dayNumber, 1);
+                monthSum.Dt = Math.Round(daySum.Dt * dayNumber, 2);
+                monthSum.WP = Math.Round(daySum.WP, 3);
+                monthRecordList.Add(monthSum);
+            }
+            error_info = null;
+            return monthRecordList;
+        }
+
+        /// <summary>
+        /// 鏋勫缓姣忓皬鏃剁殑鍙傛暟
+        /// </summary>
+        /// <param name="HourSumRecords"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        protected virtual List<IStation.Calculation.DispatchAna.Model.HourRequest> BuildHourRequest(
+            List<IStation.Dto.HourSumRecord> HourSumRecords,
+            out string error_info)
+        {
+            List<IStation.Calculation.DispatchAna.Model.HourRequest> allHourRequests = new List<DispatchAna.Model.HourRequest>();
+
+            for (int i = 0; i <= 23; i++)
+            {
+                var hourSumRecord = new IStation.Calculation.DispatchAna.Model.HourRequest();
+                hourSumRecord.Hour = i;
+
+                var allRecords_hour = HourSumRecords[i].Records;
+                hourSumRecord.Request = BuildDispatchAnaRequest(allRecords_hour,out error_info);
+
+                if(hourSumRecord.Request == null)
+                {
+                    return allHourRequests;
+                }
+
+                allHourRequests.Add(hourSumRecord);
+            }
+
+            error_info = null;
+            return allHourRequests;
+        }
+
+        /// <summary>
+        /// 鏍规嵁涓夐珮鎻愪緵鐨勫弬鏁�,鏋勫缓璋冨害鍒嗘瀽鎵�闇�鐨勫弬鏁�, 姣忎釜娉电珯, 杩欎釜鍦版柟閮戒笉涓�鏍�
+        /// </summary>
+        /// <param name="allRecords_hour"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        protected virtual DispatchAna.Model.RequestParasComplex BuildDispatchAnaRequest(
+            List<IStation.Dto.MonitorRecord4SG> allRecords_hour,
+            out string error_info)
+        { 
+            error_info = "鏈疄渚嬪寲BuildDispatchAnaRequest";
+            return null;
+        }
+
+    }
+}
diff --git a/Application/IStation.Application.OpenApi/shys/plan/helper/PlanAnaCalculatorFactory.cs b/Application/IStation.Application.OpenApi/shys/plan/helper/PlanAnaCalculatorFactory.cs
index 4535a6d..9cef9da 100644
--- a/Application/IStation.Application.OpenApi/shys/plan/helper/PlanAnaCalculatorFactory.cs
+++ b/Application/IStation.Application.OpenApi/shys/plan/helper/PlanAnaCalculatorFactory.cs
@@ -8,9 +8,9 @@
         /// <summary>
         /// 鍒涘缓璁$畻鍣�
         /// </summary>
-        public static  PlanAnaCalculator CreateCalculator(long corpId, string objectType, long objectId)
+        public static  PlanAnaBaseCalculator CreateCalculator(long corpId, string objectType, long objectId)
         {
-             PlanAnaCalculator calculator = null;
+             PlanAnaBaseCalculator calculator = null;
             if (objectType == ObjectType.Station)
             {
                 switch (objectId)
@@ -22,7 +22,10 @@
                     default: break;
                 }
             }
-
+            if(calculator != null)
+            {
+                calculator.SetStationID(corpId, objectId);
+            }
             return calculator;
         }
 
diff --git "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\225\277\345\205\264\346\263\265\347\253\231.cs" "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\225\277\345\205\264\346\263\265\347\253\231.cs"
index 2fef580..48a3720 100644
--- "a/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\225\277\345\205\264\346\263\265\347\253\231.cs"
+++ "b/Application/IStation.Application.OpenApi/shys/plan/shys/shys\351\225\277\345\205\264\346\263\265\347\253\231.cs"
@@ -6,119 +6,106 @@
 
 namespace IStation.Calculation
 {
-    internal class shys闀垮叴娉电珯: PlanAnaCalculator
+    internal class shys闀垮叴娉电珯: PlanAnaBaseCalculator
     { 
         public shys闀垮叴娉电珯( )
         {
             this._dispatchAnaCalc = new IStation.Calculation.DispatchAna.Calculator_OptAna_SHYS_闀垮叴宀�();
         }
 
-        protected override List<IStation.Calculation.DispatchAna.Model.HourRequest> BuildHourRequest(
-            List<IStation.Dto.HourSumRecord> HourSumRecords,
-            out string error_info)
-        {
-
-            List<IStation.Calculation.DispatchAna.Model.HourRequest> HourRequests = new List<DispatchAna.Model.HourRequest>();
-
-
-            for (int i = 0; i <= 23; i++)
-            {
-                var hourSumRecord = new IStation.Calculation.DispatchAna.Model.HourRequest();
-                hourSumRecord.Hour = i;
-                hourSumRecord.Request = new DispatchAna.Model.RequestParasComplex();
-                var Records = HourSumRecords[i].Records;
-                var water_level = Records.Find(x => x.MonitorTag == monitor娉电珯鍓嶆睜娑蹭綅.Item1);
-                if(water_level  == null)
-                {
-                    water_level = Records.Find(x => x.MonitorTag == monitor闈掕崏娌欐按搴撴恫浣�.Item1);
-                    if (water_level == null)
-                    {
-                        error_info = "闈掕崏娌欐按搴撴恫浣嶆祴鐐规湭鎵惧埌";
-                        return HourRequests;
-                    }
-                }
-                var pipe1_flow = Records.Find(x => x.MonitorTag == monitor姘寸閬�1娴侀噺.Item1);
-                if (pipe1_flow == null)
-                {
-                    error_info = "闈掕崏娌欐按绠¢亾1娴侀噺娴嬬偣鏈壘鍒�";
-                    return HourRequests;
-                }
-
-                var pipe1_press = Records.Find(x => x.MonitorTag == monitor姘寸閬�1鍘嬪姏.Item1);
-                if (pipe1_press == null)
-                {
-                    error_info = "闈掕崏娌欐按绠¢亾1鍘嬪姏娴嬬偣鏈壘鍒�";
-                    return HourRequests;
-                }
-
-
-                var pipe2_flow = Records.Find(x => x.MonitorTag == monitor姘寸閬�2娴侀噺.Item1);
-                if (pipe2_flow == null)
-                {
-                    error_info = "闈掕崏娌欐按绠¢亾2娴侀噺娴嬬偣鏈壘鍒�";
-                    return HourRequests;
-                }
-                var pipe2_press = Records.Find(x => x.MonitorTag == monitor姘寸閬�2鍘嬪姏.Item1);
-                if (pipe2_press == null)
-                {
-                    error_info = "闈掕崏娌欐按绠¢亾2鍘嬪姏娴嬬偣鏈壘鍒�";
-                    return HourRequests;
-                }
-                hourSumRecord.Request.CorpID = 4;
-                hourSumRecord.Request.StationID = 2;
-                hourSumRecord.Request.SchemeNumber = 1;
-                hourSumRecord.Request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
-                hourSumRecord.Request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
-                        {
-                            new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level.RecordValue}
-                        };
-                hourSumRecord.Request.OutletPipePara = new List<DispatchAna.Model.OutletPipePara>();
-                hourSumRecord.Request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
-                {
-                    Name = "涓�鍙风璺�",
-                    TargetFlow = pipe1_flow.RecordValue,
-                    TargetPress = pipe1_press.RecordValue,
-                });
-                hourSumRecord.Request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
-                {
-                    Name = "浜屽彿绠¤矾",
-                    TargetFlow = pipe2_flow.RecordValue,
-                    TargetPress = pipe2_press.RecordValue,
-                });
-
-                hourSumRecord.Request.ValvePara = new List<DispatchAna.Model.ValvePara>();
-                hourSumRecord.Request.ValvePara.Add(new DispatchAna.Model.ValvePara() { Name = "涓棿闃�闂�", OpenStatus = 0 });
-                //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);
-                //    }
-                HourRequests.Add(hourSumRecord);
-            }
-
-            error_info = null;
-            return HourRequests;
-        }
-
         /// <summary>
-        /// 娴嬬偣瀛楀吀
+        /// 娴嬬偣瀛楀吀(杩欎釜姣忎釜娉电珯閮戒笉涓�鏍�)
         /// </summary>
-        private Tuple<string, long> monitor闈掕崏娌欐按搴撴恫浣� = new Tuple<string, long>("_0402010403030103001", 69);
+        private Tuple<string, long> monitor姘村簱娑蹭綅 = new Tuple<string, long>("_0402010403030103001", 69);
         private Tuple<string, long> monitor娉电珯鍓嶆睜娑蹭綅 = new Tuple<string, long>("_0402010404030103001", 70);
         private Tuple<string, long> monitor姘寸閬�1娴侀噺 = new Tuple<string, long>("_0402010403030002001", 73);
         private Tuple<string, long> monitor姘寸閬�1鍘嬪姏 = new Tuple<string, long>("_0402010403030002005", 72);
         private Tuple<string, long> monitor姘寸閬�2娴侀噺 = new Tuple<string, long>("_0402010403030002002", 77);
         private Tuple<string, long> monitor姘寸閬�2鍘嬪姏 = new Tuple<string, long>("_0402010403030002006", 76);
-        //{"_0402010403030103001",69},//闈掕崏娌欐按搴撴恫浣�
-        //    {"_0402010404030103001",70},//闈掕崏娌欐按搴撳惛姘翠簳娑蹭綅-闀垮叴娉电珯鍓嶆睜娑蹭綅
-        //    {"_0402010403030002001",73},//闀垮叴娉电珯杈撴按娉靛嚭姘寸閬�1娴侀噺
-        //    {"_0402010403030002005",72},//闀垮叴娉电珯杈撴按绠¢亾1#鍘嬪姏
-        //    {"_0402010403030002002",77},//闀垮叴娉电珯杈撴按娉靛嚭姘寸閬�2娴侀噺
-        //    {"_0402010403030002006",76},//闀垮叴娉电珯杈撴按绠¢亾2#鍘嬪姏
-        //};
+
+        /// <summary>
+        /// 鏍规嵁涓夐珮鎻愪緵鐨勫弬鏁�,鏋勫缓璋冨害鍒嗘瀽鎵�闇�鐨勫弬鏁�, (杩欎釜姣忎釜娉电珯閮戒笉涓�鏍�)
+        /// </summary>
+        /// <param name="allRecords_hour"></param>
+        /// <param name="error_info"></param>
+        /// <returns></returns>
+        protected override DispatchAna.Model.RequestParasComplex BuildDispatchAnaRequest(
+            List<IStation.Dto.MonitorRecord4SG> allRecords_hour,
+            out string error_info)
+        {
+            if(allRecords_hour == null || allRecords_hour.Count == 0)
+            {
+                error_info = "闈掕崏娌欐祴鐐规暟鎹负绌�";
+                return null;
+            }
+            var complex_dispatch_request = new DispatchAna.Model.RequestParasComplex();
+            var water_level = allRecords_hour.Find(x => x.MonitorTag == monitor娉电珯鍓嶆睜娑蹭綅.Item1);
+            if (water_level == null)
+            {
+                water_level = allRecords_hour.Find(x => x.MonitorTag == monitor姘村簱娑蹭綅.Item1);
+                if (water_level == null)
+                {
+                    error_info = "闈掕崏娌欐按搴撴恫浣嶆祴鐐规湭鎵惧埌";
+                    return null;
+                }
+            }
+            var pipe1_flow = allRecords_hour.Find(x => x.MonitorTag == monitor姘寸閬�1娴侀噺.Item1);
+            if (pipe1_flow == null)
+            {
+                error_info = "闈掕崏娌欐按绠¢亾1娴侀噺娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+            var pipe1_press = allRecords_hour.Find(x => x.MonitorTag == monitor姘寸閬�1鍘嬪姏.Item1);
+            if (pipe1_press == null)
+            {
+                error_info = "闈掕崏娌欐按绠¢亾1鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
+
+
+            var pipe2_flow = allRecords_hour.Find(x => x.MonitorTag == monitor姘寸閬�2娴侀噺.Item1);
+            if (pipe2_flow == null)
+            {
+                error_info = "闈掕崏娌欐按绠¢亾2娴侀噺娴嬬偣鏈壘鍒�";
+                return null;
+            }
+            var pipe2_press = allRecords_hour.Find(x => x.MonitorTag == monitor姘寸閬�2鍘嬪姏.Item1);
+            if (pipe2_press == null)
+            {
+                error_info = "闈掕崏娌欐按绠¢亾2鍘嬪姏娴嬬偣鏈壘鍒�";
+                return null;
+            }
+            complex_dispatch_request.CorpID = this._corpID;
+            complex_dispatch_request.StationID = this._stationID;
+            complex_dispatch_request.SchemeNumber = 1;
+            complex_dispatch_request.PressValueType = DispatchAna.Model.RequestParasComplex.ePressValueType.鍘嬪姏;
+            complex_dispatch_request.WaterLevelPara = new List<DispatchAna.Model.WaterLevelPara>()
+                        {
+                            new DispatchAna.Model.WaterLevelPara(){ Name="姘存睜", Value = water_level.RecordValue}
+                        };
+            complex_dispatch_request.OutletPipePara = new List<DispatchAna.Model.OutletPipePara>();
+            complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
+            {
+                Name = "涓�鍙风璺�",
+                TargetFlow = pipe1_flow.RecordValue,
+                TargetPress = pipe1_press.RecordValue,
+            });
+            complex_dispatch_request.OutletPipePara.Add(new DispatchAna.Model.OutletPipePara()
+            {
+                Name = "浜屽彿绠¤矾",
+                TargetFlow = pipe2_flow.RecordValue,
+                TargetPress = pipe2_press.RecordValue,
+            });
+
+            complex_dispatch_request.ValvePara = new List<DispatchAna.Model.ValvePara>();
+            complex_dispatch_request.ValvePara.Add(new DispatchAna.Model.ValvePara() { Name = "涓棿闃�闂�", OpenStatus = 0 });
+
+
+            error_info = null;
+            return complex_dispatch_request;
+        }
+
+
     }
 }
diff --git a/Calculation/IStation.Calculation.Dispatch/IOptAnaCalc.cs b/Calculation/IStation.Calculation.Dispatch/IOptAnaCalc.cs
index 307d3a3..2e468b0 100644
--- a/Calculation/IStation.Calculation.Dispatch/IOptAnaCalc.cs
+++ b/Calculation/IStation.Calculation.Dispatch/IOptAnaCalc.cs
@@ -30,9 +30,10 @@
         /// 璁$畻鏃ユ眹鎬�
         /// </summary>
         /// <param name="HourRequests"></param>
+        /// <param name="isUseCache">鏄惁鐢ㄧ紦瀛�</param> 
         /// <param name="error_info"></param>
         /// <returns></returns>
         public IStation.Calculation.DispatchAna.Model.DaySumData CalcSumData(
-            List<HourRequest> HourRequests, out string error_info);
+            List<HourRequest> HourRequests, bool isUseCache, out string error_info);
     }
 }
diff --git a/Calculation/IStation.Calculation.Dispatch/base/CalculatorOptAnaBase.cs b/Calculation/IStation.Calculation.Dispatch/base/CalculatorOptAnaBase.cs
index 2ee6a11..50c3be7 100644
--- a/Calculation/IStation.Calculation.Dispatch/base/CalculatorOptAnaBase.cs
+++ b/Calculation/IStation.Calculation.Dispatch/base/CalculatorOptAnaBase.cs
@@ -1,5 +1,6 @@
 锘縰sing System;
 using System.Collections.Generic;
+using System.IO.Pipelines;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
@@ -12,7 +13,7 @@
     public class CalculatorOptAnaBase: CalculatorBase
     {
         /// <summary>
-        /// 
+        /// 璁$畻鏈�浼樻柟妗�
         /// </summary>
         /// <param name="complex_request_paras"></param>
         /// <param name="machine_run_status"></param>
@@ -27,15 +28,16 @@
             return null;
         }
 
-
+        Dictionary<string, IStation.Calculation.DispatchAna.Model.AnaScheme> _dict = new Dictionary<string, Model.AnaScheme>();
         /// <summary>
         /// 璁$畻姹囨�绘暟鎹�
         /// </summary>
         /// <param name="HourRequests"></param>
+        /// <param name="isUseCache">鏄惁鐢ㄧ紦瀛�</param>
         /// <param name="error_info"></param>
         /// <returns></returns>
-        public virtual  IStation.Calculation.DispatchAna.Model.DaySumData CalcSumData(
-             List<Model.HourRequest> HourRequests, out string error_info)
+        public virtual IStation.Calculation.DispatchAna.Model.DaySumData CalcSumData(
+             List<Model.HourRequest> HourRequests, bool isUseCache, out string error_info)
         {
             error_info = null;
             IStation.Calculation.DispatchAna.Model.DaySumData sum = new Model.DaySumData();
@@ -43,25 +45,67 @@
             foreach (var hourRequest in HourRequests)
             {
                 var complex_request_paras = hourRequest.Request;
+ 
+                #region 妫�鏌ユ暟鎹�
                 if (complex_request_paras.OutletPipePara == null || complex_request_paras.OutletPipePara.Count < 1)
                 {
                     error_info = string.Format("绗瑊0},鍒嗘瀽鍑洪敊,鍘熷洜鏄�:{1}",
                         hourRequest.Hour + 1, "鍑哄彛绠¤矾鍙傛暟鏈夎, 璇风‘璁ゆ槸鍚﹁祴鍊�, ERROR 35");
                     return null;
                 }
-                double target_flow = complex_request_paras.OutletPipePara[0].TargetFlow;
-                if (target_flow < 50)
+
+                StringBuilder cacheNameBuilder = new StringBuilder();
+
+                double target_flow = 0;
+                bool isHaveSetPress = false;
+                foreach (var pipe in complex_request_paras.OutletPipePara)
                 {
+                    target_flow += pipe.TargetFlow;
+                    if (pipe.TargetPress > 0.01)
+                    {
+                        isHaveSetPress = true;
+                    }
+                    cacheNameBuilder.AppendFormat("Q{0}H{1}", Math.Round(pipe.TargetFlow, 0), Math.Round(pipe.TargetPress, 3));
+                }
+                if (target_flow < 50)
+                {//妫�鏌ユ祦閲�
                     continue;
                 }
-
-                var result_anaSchemes = CalcSchemes鍘嬪姏(hourRequest.Request, null, out error_info);
-                if (result_anaSchemes == null || result_anaSchemes.Count == 0)
-                {
-                    error_info = string.Format("绗瑊0},鍒嗘瀽鍑洪敊,鍘熷洜鏄�:{1}", hourRequest.Hour + 1, error_info);
-                    return null;
+                if (!isHaveSetPress)
+                {//妫�鏌ュ帇鍔�
+                    continue;
                 }
-                var opt_anaScheme = result_anaSchemes.First();
+                if (complex_request_paras.WaterLevelPara != null)
+                {
+                    foreach (var wl in complex_request_paras.WaterLevelPara)
+                    {
+                        cacheNameBuilder.AppendFormat("V{0}", Math.Round(wl.Value, 0));
+                    }
+                } 
+                #endregion
+
+
+                //鐢变簬寰幆璋冨彇,鎵�浠ヤ互鍓嶅垎鏋愭暟鎹紦瀛樿捣鏉�
+                var cacheName = cacheNameBuilder.ToString();
+                IStation.Calculation.DispatchAna.Model.AnaScheme opt_anaScheme;
+                if (_dict.ContainsKey(cacheName))
+                {
+                    opt_anaScheme = _dict[cacheName];
+                }
+                else
+                {
+                    var result_anaSchemes = CalcSchemes鍘嬪姏(complex_request_paras, null, out error_info);
+                    if (result_anaSchemes == null || result_anaSchemes.Count == 0)
+                    {
+                        error_info = string.Format("绗瑊0},鍒嗘瀽鍑洪敊,鍘熷洜鏄�:{1}", hourRequest.Hour + 1, error_info);
+                        return null;
+                    }
+                    opt_anaScheme = result_anaSchemes.First();
+                    _dict[cacheName] = opt_anaScheme;
+                }
+
+
+                //姹囨��
                 sum.Qt = sum.Qt + opt_anaScheme.TotalWrkQ;
                 sum.Dt = sum.Dt + opt_anaScheme.TotalWrkP;
             }
diff --git a/Calculation/IStation.Calculation.Plan/calc/PlanAnaCalculator.cs b/Calculation/IStation.Calculation.Plan/calc/PlanAnaCalculator.cs
new file mode 100644
index 0000000..c40496a
--- /dev/null
+++ b/Calculation/IStation.Calculation.Plan/calc/PlanAnaCalculator.cs
@@ -0,0 +1,26 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace IStation.Calculation.PlanAna 
+{
+    internal class PlanAnaCalculator: IPlanAnaCalculator
+    {
+        IStation.Calculation.DispatchAna.IOptAnaCalc _dispatchAnaCalc = null;
+        public PlanAnaCalculator(IStation.Calculation.DispatchAna.IOptAnaCalc DispatchAnaCalc)
+        {
+          this._dispatchAnaCalc = DispatchAnaCalc;
+        }
+        public List<MonthCalcuResult> Calc(Model.Station station, List<MonthSumRecord> monthRecordList)
+        {
+            foreach(var monthRecord in monthRecordList)
+            {
+                //this._dispatchAnaCalc
+            }
+
+            return null;
+        }
+    }
+}
diff --git a/Entry/IStation.WebApi.Entry.Dispatch/.config/dotnet-tools.json b/Entry/IStation.WebApi.Entry.Dispatch/.config/dotnet-tools.json
new file mode 100644
index 0000000..98091c9
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.Dispatch/.config/dotnet-tools.json
@@ -0,0 +1,12 @@
+{
+  "version": 1,
+  "isRoot": true,
+  "tools": {
+    "dotnet-ef": {
+      "version": "6.0.8",
+      "commands": [
+        "dotnet-ef"
+      ]
+    }
+  }
+}
\ No newline at end of file
diff --git a/Entry/IStation.WebApi.Entry.Dispatch/IStation.WebApi.Entry.Dispatch.csproj b/Entry/IStation.WebApi.Entry.Dispatch/IStation.WebApi.Entry.Dispatch.csproj
new file mode 100644
index 0000000..54c0b58
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.Dispatch/IStation.WebApi.Entry.Dispatch.csproj
@@ -0,0 +1,28 @@
+锘�<Project Sdk="Microsoft.NET.Sdk.Web">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <Nullable>disable</Nullable>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <AssemblyName>IStation.WebApi.Entry</AssemblyName>
+    <RootNamespace>IStation.WebApi</RootNamespace>
+    <GenerateDocumentationFile>True</GenerateDocumentationFile>
+    <Version />
+  </PropertyGroup>
+
+  <ItemGroup>
+    <ProjectReference Include="..\..\Application\IStation.Application.Basic\IStation.Application.Basic.csproj" />
+    <ProjectReference Include="..\..\Application\IStation.Application.Eta\IStation.Application.Eta.csproj" />
+    <ProjectReference Include="..\..\Application\IStation.Application.OpenApi\IStation.Application.OpenApi.csproj" />
+    <ProjectReference Include="..\..\Core\IStation.WebApi.Core\IStation.WebApi.Core.csproj" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <Content Update="appsettings.json">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+  </ItemGroup>
+
+  <ProjectExtensions><VisualStudio><UserProperties appsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions>
+
+</Project>
diff --git a/Entry/IStation.WebApi.Entry.Dispatch/Program.cs b/Entry/IStation.WebApi.Entry.Dispatch/Program.cs
new file mode 100644
index 0000000..6010138
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.Dispatch/Program.cs
@@ -0,0 +1,3 @@
+var builder = WebApplication.CreateBuilder(args).Inject();
+var app = builder.Build();
+app.Run();
\ No newline at end of file
diff --git a/Entry/IStation.WebApi.Entry.Dispatch/Properties/PublishProfiles/FolderProfile.pubxml b/Entry/IStation.WebApi.Entry.Dispatch/Properties/PublishProfiles/FolderProfile.pubxml
new file mode 100644
index 0000000..500e9ad
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.Dispatch/Properties/PublishProfiles/FolderProfile.pubxml
@@ -0,0 +1,20 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+  <PropertyGroup>
+    <DeleteExistingFiles>false</DeleteExistingFiles>
+    <ExcludeApp_Data>false</ExcludeApp_Data>
+    <LaunchSiteAfterPublish>true</LaunchSiteAfterPublish>
+    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
+    <LastUsedPlatform>Any CPU</LastUsedPlatform>
+    <PublishProvider>FileSystem</PublishProvider>
+    <PublishUrl>bin\Release\net6.0\publish\</PublishUrl>
+    <WebPublishMethod>FileSystem</WebPublishMethod>
+    <SiteUrlToLaunchAfterPublish />
+    <TargetFramework>net6.0</TargetFramework>
+    <ProjectGuid>a709d273-838e-4aa9-9b6a-7266840262ba</ProjectGuid>
+    <SelfContained>false</SelfContained>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Entry/IStation.WebApi.Entry.Dispatch/Properties/PublishProfiles/FolderProfile.pubxml.user b/Entry/IStation.WebApi.Entry.Dispatch/Properties/PublishProfiles/FolderProfile.pubxml.user
new file mode 100644
index 0000000..6495620
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.Dispatch/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -0,0 +1,11 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+https://go.microsoft.com/fwlink/?LinkID=208121.
+-->
+<Project>
+  <PropertyGroup>
+    <_PublishTargetUrl>D:\WorkData\IStation\IStationV4.1\Core\Service.V4.1\Entry\IStation.WebApi.Entry\bin\Release\net6.0\publish\</_PublishTargetUrl>
+    <History>True|2022-10-08T01:23:21.6592006Z;True|2022-10-07T15:35:37.7532304+08:00;True|2022-10-07T15:04:51.9161653+08:00;False|2022-10-07T14:58:32.8816319+08:00;False|2022-10-07T14:54:55.4175944+08:00;False|2022-10-07T14:52:46.7215376+08:00;False|2022-10-07T14:51:14.0508027+08:00;False|2022-10-07T14:49:57.6007572+08:00;False|2022-10-07T14:48:56.6085134+08:00;False|2022-10-07T14:47:54.7931315+08:00;True|2022-09-22T13:35:52.6495568+08:00;True|2022-09-22T13:19:28.3609130+08:00;True|2022-09-22T09:45:29.7312648+08:00;True|2022-09-21T17:11:30.6881814+08:00;True|2022-09-15T16:32:44.8582766+08:00;True|2022-09-04T14:21:59.9156800+08:00;True|2022-09-03T18:27:37.0001278+08:00;True|2022-08-29T10:26:27.0532192+08:00;True|2022-08-24T13:40:25.0333335+08:00;True|2022-08-23T10:20:23.3347504+08:00;True|2022-08-19T15:24:53.5488496+08:00;False|2022-08-19T15:24:15.4430294+08:00;True|2022-08-19T11:51:17.0556654+08:00;True|2022-08-19T11:45:03.9834334+08:00;True|2022-08-19T10:56:27.1184994+08:00;True|2022-08-18T16:31:26.4673400+08:00;True|2022-08-18T10:37:50.8776926+08:00;True|2022-08-17T17:10:09.3527873+08:00;True|2022-08-17T16:04:30.4487827+08:00;True|2022-08-15T13:35:48.4976973+08:00;True|2022-08-15T13:35:34.4046702+08:00;True|2022-08-15T13:31:44.3380038+08:00;True|2022-08-15T13:07:03.2183172+08:00;True|2022-07-25T15:14:36.3659352+08:00;True|2022-07-25T15:10:01.3426246+08:00;True|2022-07-25T13:20:08.1574461+08:00;True|2022-07-19T10:26:17.1257582+08:00;True|2022-07-14T10:30:13.1942620+08:00;True|2022-07-13T14:35:30.0524912+08:00;True|2022-07-08T14:32:42.4327635+08:00;True|2022-07-05T11:08:07.0982998+08:00;True|2022-07-04T10:33:11.4756479+08:00;True|2022-07-01T22:05:04.4907981+08:00;True|2022-07-01T15:57:41.6399584+08:00;True|2022-06-29T10:33:01.2518877+08:00;True|2022-06-29T09:35:04.8176716+08:00;True|2022-06-22T10:29:08.8189250+08:00;True|2022-06-21T20:20:26.7306581+08:00;True|2022-06-21T09:54:59.2174617+08:00;True|2022-06-20T16:05:34.5414017+08:00;True|2022-06-16T13:17:09.9717924+08:00;True|2022-06-16T09:40:45.1175998+08:00;True|2022-06-15T18:01:54.0267150+08:00;False|2022-06-15T18:00:46.8407587+08:00;True|2022-06-15T15:22:18.3048191+08:00;True|2022-06-15T14:10:37.0479735+08:00;False|2022-06-15T14:08:52.7287625+08:00;True|2022-06-15T11:52:36.3090013+08:00;True|2022-06-15T10:29:17.8467709+08:00;True|2022-06-15T09:53:07.0983926+08:00;False|2022-06-15T09:51:02.1269263+08:00;True|2022-06-14T16:42:04.7964854+08:00;True|2022-06-14T14:08:49.4227432+08:00;True|2022-06-14T14:04:00.9153594+08:00;True|2022-06-13T14:57:09.1986107+08:00;True|2022-06-12T10:12:40.2143903+08:00;True|2022-06-12T09:59:01.3527438+08:00;True|2022-06-09T17:47:54.0302121+08:00;True|2022-06-09T17:30:21.7998171+08:00;True|2022-06-09T13:53:49.3251173+08:00;True|2022-06-09T11:06:42.0691794+08:00;True|2022-06-09T10:24:37.1232972+08:00;True|2022-06-09T10:00:30.4180885+08:00;True|2022-06-08T16:55:14.5816280+08:00;True|2022-06-08T16:02:29.3874857+08:00;True|2022-06-08T13:37:33.4098629+08:00;True|2022-06-08T11:05:09.3848401+08:00;True|2022-06-08T10:21:11.6630897+08:00;True|2022-06-08T09:38:48.6605705+08:00;True|2022-06-08T09:38:12.5509843+08:00;True|2022-06-08T09:37:38.2420697+08:00;True|2022-06-08T09:33:06.1943764+08:00;True|2022-06-07T17:26:45.0216506+08:00;True|2022-06-07T17:15:13.6540984+08:00;True|2022-06-07T13:30:54.6796254+08:00;True|2022-06-06T17:33:50.9010674+08:00;True|2022-06-06T17:32:21.9276179+08:00;True|2022-06-06T15:59:31.7116819+08:00;True|2022-06-06T15:29:18.4459191+08:00;True|2022-06-06T14:17:56.0946686+08:00;True|2022-06-02T09:13:02.9635258+08:00;True|2022-06-01T17:15:47.4170975+08:00;True|2022-06-01T14:06:29.6241464+08:00;True|2022-06-01T13:27:18.8319582+08:00;True|2022-06-01T13:14:07.7862232+08:00;True|2022-06-01T09:48:16.4577267+08:00;True|2022-05-30T09:57:00.6017913+08:00;True|2022-05-28T15:54:16.3134700+08:00;True|2022-05-28T11:46:55.8201686+08:00;True|2022-05-28T00:40:34.8169520+08:00;</History>
+    <LastFailureDetails />
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/Entry/IStation.WebApi.Entry.Dispatch/Properties/launchSettings.json b/Entry/IStation.WebApi.Entry.Dispatch/Properties/launchSettings.json
new file mode 100644
index 0000000..a3e94e9
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.Dispatch/Properties/launchSettings.json
@@ -0,0 +1,31 @@
+锘縶
+  "$schema": "https://json.schemastore.org/launchsettings.json",
+  "iisSettings": {
+    "windowsAuthentication": false,
+    "anonymousAuthentication": true,
+    "iisExpress": {
+      "applicationUrl": "http://localhost:31950",
+      "sslPort": 44347
+    }
+  },
+  "profiles": {
+    "IStation.Entry": {
+      "commandName": "Project",
+      "dotnetRunMessages": true,
+      "launchBrowser": true,
+      "launchUrl": "",
+      "applicationUrl": "https://localhost:7143;http://localhost:5143",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    },
+    "IIS Express": {
+      "commandName": "IISExpress",
+      "launchBrowser": true,
+      "launchUrl": "",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    }
+  }
+}
diff --git a/Entry/IStation.WebApi.Entry.Dispatch/appsettings.Development.json b/Entry/IStation.WebApi.Entry.Dispatch/appsettings.Development.json
new file mode 100644
index 0000000..0c208ae
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.Dispatch/appsettings.Development.json
@@ -0,0 +1,8 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft.AspNetCore": "Warning"
+    }
+  }
+}
diff --git a/Entry/IStation.WebApi.Entry.Dispatch/appsettings.json b/Entry/IStation.WebApi.Entry.Dispatch/appsettings.json
new file mode 100644
index 0000000..759a4dc
--- /dev/null
+++ b/Entry/IStation.WebApi.Entry.Dispatch/appsettings.json
@@ -0,0 +1,12 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft.AspNetCore": "Warning"
+    }
+  },
+  "AllowedHosts": "*",
+  "IgnoreConfigurationFiles": [
+    "paras_settings.json"
+  ]
+}
diff --git a/IStation.Server.Eta.v12.suo b/IStation.Server.Eta.v12.suo
new file mode 100644
index 0000000..f736c12
--- /dev/null
+++ b/IStation.Server.Eta.v12.suo
Binary files differ
diff --git a/IStation.WebApi.Dispatch.sln b/IStation.WebApi.Dispatch.sln
index b80386e..a23d931 100644
--- a/IStation.WebApi.Dispatch.sln
+++ b/IStation.WebApi.Dispatch.sln
@@ -53,8 +53,6 @@
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Calculation", "Calculation", "{B1548C2C-C3C2-47C0-8F6E-B265D0603099}"
 EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.WebApi.Entry", "Entry\IStation.WebApi.Entry\IStation.WebApi.Entry.csproj", "{A709D273-838E-4AA9-9B6A-7266840262BA}"
-EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Core", "Core", "{1210D17D-0A3C-4A99-8FF0-0D0BC8CF9501}"
 EndProject
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.WebApi.Core", "Core\IStation.WebApi.Core\IStation.WebApi.Core.csproj", "{7E6E6576-F2D2-40FB-A35B-068CF81BADB5}"
@@ -223,6 +221,8 @@
 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.WebApi.Entry.Dispatch", "Entry\IStation.WebApi.Entry.Dispatch\IStation.WebApi.Entry.Dispatch.csproj", "{A2A87128-A935-400E-B0BD-D5D5F7D1DAF8}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -289,10 +289,6 @@
 		{88D30DC4-B441-4D26-BAF6-C3C4026671CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{88D30DC4-B441-4D26-BAF6-C3C4026671CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{88D30DC4-B441-4D26-BAF6-C3C4026671CC}.Release|Any CPU.Build.0 = Release|Any CPU
-		{A709D273-838E-4AA9-9B6A-7266840262BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A709D273-838E-4AA9-9B6A-7266840262BA}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{A709D273-838E-4AA9-9B6A-7266840262BA}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{A709D273-838E-4AA9-9B6A-7266840262BA}.Release|Any CPU.Build.0 = Release|Any CPU
 		{7E6E6576-F2D2-40FB-A35B-068CF81BADB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{7E6E6576-F2D2-40FB-A35B-068CF81BADB5}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{7E6E6576-F2D2-40FB-A35B-068CF81BADB5}.Release|Any CPU.ActiveCfg = Release|Any CPU
@@ -621,6 +617,10 @@
 		{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
+		{A2A87128-A935-400E-B0BD-D5D5F7D1DAF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{A2A87128-A935-400E-B0BD-D5D5F7D1DAF8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A2A87128-A935-400E-B0BD-D5D5F7D1DAF8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{A2A87128-A935-400E-B0BD-D5D5F7D1DAF8}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/Settings/IStation.Settings/IStation.Settings.csproj b/Settings/IStation.Settings/IStation.Settings.csproj
index 661f441..cbbbba2 100644
--- a/Settings/IStation.Settings/IStation.Settings.csproj
+++ b/Settings/IStation.Settings/IStation.Settings.csproj
@@ -16,7 +16,7 @@
 
   <ItemGroup>
     <None Update="paras_settings.json">
-      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+      <CopyToOutputDirectory>Never</CopyToOutputDirectory>
     </None>
   </ItemGroup>
 
diff --git a/Settings/IStation.Settings/paras_settings.json b/Settings/IStation.Settings/paras_settings.json
index 7b07d8f..95589bb 100644
--- a/Settings/IStation.Settings/paras_settings.json
+++ b/Settings/IStation.Settings/paras_settings.json
@@ -7,13 +7,13 @@
   },
 
   "MemoryCache": {
-    "KeepTime": 30, //分钟
-    "RandomTime": 300, //秒
-    "Level1": 600, //秒
-    "Level2": 300, //秒
-    "Level3": 160, //秒
-    "Level4": 120, //秒
-    "Level5": 60 //秒
+    "KeepTime": 30, //锟斤拷锟斤拷
+    "RandomTime": 300, //锟斤拷
+    "Level1": 600, //锟斤拷
+    "Level2": 300, //锟斤拷
+    "Level3": 160, //锟斤拷
+    "Level4": 120, //锟斤拷
+    "Level5": 60 //锟斤拷
   },
 
   "RabbitMq": {
@@ -128,25 +128,25 @@
         "ResetFrequency": 60
       },
       "Sum": {
-        "HourCron": "0 20 00 * * ?", //每天 20分执行
-        "DayCron": "0 40 00 * * ?", // 每天上午 00:40 执行
-        "WeekCron": "0 40 1 ? * MON", //每周一上午 1点40 分执行
-        "MonthCron": "0 40 2 1 * ?", //每月1号上午 2:40 执行
-        "YearCron": "0 40 3 1 1 ?" //每年1月上午3:40执行
+        "HourCron": "0 20 00 * * ?", //每锟斤拷 20锟斤拷执锟斤拷
+        "DayCron": "0 40 00 * * ?", // 每锟斤拷锟斤拷锟斤拷 00锟斤拷40 执锟斤拷
+        "WeekCron": "0 40 1 ? * MON", //每锟斤拷一锟斤拷锟斤拷 1锟斤拷40 锟斤拷执锟斤拷
+        "MonthCron": "0 40 2 1 * ?", //每锟斤拷1锟斤拷锟斤拷锟斤拷 2锟斤拷40 执锟斤拷
+        "YearCron": "0 40 3 1 1 ?" //每锟斤拷1锟斤拷锟斤拷锟斤拷3锟斤拷40执锟斤拷
       },
       "Accord": {
-        "HourCron": "0 25 00 * * ?", //每天 25分执行
-        "DayCron": "0 45 00 * * ?", // 每天上午 00:45 执行
-        "WeekCron": "0 45 1 ? * MON", //每周一上午 1点45 分执行
-        "MonthCron": "0 45 2 1 * ?", //每月1号上午 2:45 执行
-        "YearCron": "0 45 3 1 1 ?" //每年1月上午3:45执行
+        "HourCron": "0 25 00 * * ?", //每锟斤拷 25锟斤拷执锟斤拷
+        "DayCron": "0 45 00 * * ?", // 每锟斤拷锟斤拷锟斤拷 00锟斤拷45 执锟斤拷
+        "WeekCron": "0 45 1 ? * MON", //每锟斤拷一锟斤拷锟斤拷 1锟斤拷45 锟斤拷执锟斤拷
+        "MonthCron": "0 45 2 1 * ?", //每锟斤拷1锟斤拷锟斤拷锟斤拷 2锟斤拷45 执锟斤拷
+        "YearCron": "0 45 3 1 1 ?" //每锟斤拷1锟斤拷锟斤拷锟斤拷3锟斤拷45执锟斤拷
       },
       "Standard": {
-        "HourCron": "0 30 00 * * ?", //每天 30分执行
-        "DayCron": "0 50 00 * * ?", // 每天上午 00:50 执行
-        "WeekCron": "0 50 1 ? * MON", //每周一上午 1点50 分执行
-        "MonthCron": "0 50 2 1 * ?", //每月1号上午 2:50 执行
-        "YearCron": "0 50 3 1 1 ?" //每年1月上午3:50执行
+        "HourCron": "0 30 00 * * ?", //每锟斤拷 30锟斤拷执锟斤拷
+        "DayCron": "0 50 00 * * ?", // 每锟斤拷锟斤拷锟斤拷 00锟斤拷50 执锟斤拷
+        "WeekCron": "0 50 1 ? * MON", //每锟斤拷一锟斤拷锟斤拷 1锟斤拷50 锟斤拷执锟斤拷
+        "MonthCron": "0 50 2 1 * ?", //每锟斤拷1锟斤拷锟斤拷锟斤拷 2锟斤拷50 执锟斤拷
+        "YearCron": "0 50 3 1 1 ?" //每锟斤拷1锟斤拷锟斤拷锟斤拷3锟斤拷50执锟斤拷
       }
     },
     "Analy": {
@@ -211,15 +211,15 @@
       "ContainsChildren": false
     },
     "Fluct": {
-      "Cron": "0 00 02 * * ?" //每日 02:00 执行
+      "Cron": "0 00 02 * * ?" //每锟斤拷 02锟斤拷00 执锟斤拷
     },
     "General": {
       "RealResetFrequency": 60,
-      "HourCron": "0 20 * * * ?", //每时 00:20 执行
-      "DayCron": "0 00 01 * * ?", //每日 01:00 执行
-      "WeekCron": "0 30 1 ? * MON", //每周一上午 1点30 分执行
-      "MonthCron": "0 00 2 1 * ?", //每月1号2点00执行
-      "YearCron": "0 0 6 1 1 ? *" //每年 1月1日 6:00执行
+      "HourCron": "0 20 * * * ?", //每时 00:20 执锟斤拷
+      "DayCron": "0 00 01 * * ?", //每锟斤拷 01锟斤拷00 执锟斤拷
+      "WeekCron": "0 30 1 ? * MON", //每锟斤拷一锟斤拷锟斤拷 1锟斤拷30 锟斤拷执锟斤拷
+      "MonthCron": "0 00 2 1 * ?", //每锟斤拷1锟斤拷2锟斤拷00执锟斤拷
+      "YearCron": "0 0 6 1 1 ? *" //每锟斤拷 1锟斤拷1锟斤拷 6锟斤拷00执锟斤拷
     },
     "Alarm": {
       "InterruptAnalyFrequency": 120
diff --git a/Settings/IStation.Settings/paras_settings_debug.json b/Settings/IStation.Settings/paras_settings_debug.json
new file mode 100644
index 0000000..95589bb
--- /dev/null
+++ b/Settings/IStation.Settings/paras_settings_debug.json
@@ -0,0 +1,280 @@
+{
+  "File": {
+    "IsEncryption": false,
+    "EncryptionKey": "123456",
+    "DataFolder": "Data",
+    "FileStorageFolder": "FileStorage"
+  },
+
+  "MemoryCache": {
+    "KeepTime": 30, //锟斤拷锟斤拷
+    "RandomTime": 300, //锟斤拷
+    "Level1": 600, //锟斤拷
+    "Level2": 300, //锟斤拷
+    "Level3": 160, //锟斤拷
+    "Level4": 120, //锟斤拷
+    "Level5": 60 //锟斤拷
+  },
+
+  "RabbitMq": {
+    "HostName": "47.116.64.138",
+    "UserName": "admin",
+    "Password": "admin"
+  },
+
+  "Redis": {
+    "Url": "47.116.97.43:6379"
+  },
+
+  "SqlSugar": {
+    "SnowFlakeWorkId": 1
+  },
+
+  "RedisCache": {
+    "RunKeyPrefix": "istation-run-core-test",
+    "EtaKeyPrefix": "istation-eta-core-test",
+    "VibrationKeyPrefix": "istation-vibration-core-test"
+  },
+
+  "Queue": {
+    "DataDockingQueueName": "data_docking_queue_test",
+    "StoreQueueName": "store_queue_test",
+    "RunExChangeName": "run_exchange_test"
+  },
+
+  "Basic": {
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_basic_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    }
+  },
+
+  "Bimface": {
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_bimface_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    },
+    "Account": {
+      "AppKey": "GPg7TMfOJxF10QHm2PirACyI21nv0qJX",
+      "AppSecret": "lakJejzxiKbsuBM7Pn0P0czfeYvXTnWW"
+    }
+  },
+
+  "Dma": {
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_dma_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    }
+  },
+
+  "Main": {
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_main_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    }
+  },
+
+  "Map": {
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_map_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    }
+  },
+
+  "Monitor": {
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_monitor_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    },
+    "Flag": "monitor"
+  },
+
+  "Organize": {
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_organize_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    }
+  },
+
+  "Product": {
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_product_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    }
+  },
+
+  "User": {
+    "DefaultLoginPwd": "123456",
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_user_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;",
+      "UserLoginConnectString": "PORT=5432;DATABASE=istation_user_login_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    }
+  },
+
+  "Run": {
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_run_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;",
+      "MonitorRecordConnectString": "PORT=5432;DATABASE=istation_monitor_record_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    }
+  },
+
+  "Eta": {
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_eta_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;",
+      "RecordConnectString": "PORT=5432;DATABASE=istation_eta_record_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    },
+    "Debug": {
+      "IsDebug": true,
+      "IsWriteLog": true
+    },
+    "Target": {
+      "CorpIds": [ 1 ],
+      "ContainsChildren": true
+    },
+    "Cron": {
+      "Real": {
+        "ResetFrequency": 60
+      },
+      "Sum": {
+        "HourCron": "0 20 00 * * ?", //每锟斤拷 20锟斤拷执锟斤拷
+        "DayCron": "0 40 00 * * ?", // 每锟斤拷锟斤拷锟斤拷 00锟斤拷40 执锟斤拷
+        "WeekCron": "0 40 1 ? * MON", //每锟斤拷一锟斤拷锟斤拷 1锟斤拷40 锟斤拷执锟斤拷
+        "MonthCron": "0 40 2 1 * ?", //每锟斤拷1锟斤拷锟斤拷锟斤拷 2锟斤拷40 执锟斤拷
+        "YearCron": "0 40 3 1 1 ?" //每锟斤拷1锟斤拷锟斤拷锟斤拷3锟斤拷40执锟斤拷
+      },
+      "Accord": {
+        "HourCron": "0 25 00 * * ?", //每锟斤拷 25锟斤拷执锟斤拷
+        "DayCron": "0 45 00 * * ?", // 每锟斤拷锟斤拷锟斤拷 00锟斤拷45 执锟斤拷
+        "WeekCron": "0 45 1 ? * MON", //每锟斤拷一锟斤拷锟斤拷 1锟斤拷45 锟斤拷执锟斤拷
+        "MonthCron": "0 45 2 1 * ?", //每锟斤拷1锟斤拷锟斤拷锟斤拷 2锟斤拷45 执锟斤拷
+        "YearCron": "0 45 3 1 1 ?" //每锟斤拷1锟斤拷锟斤拷锟斤拷3锟斤拷45执锟斤拷
+      },
+      "Standard": {
+        "HourCron": "0 30 00 * * ?", //每锟斤拷 30锟斤拷执锟斤拷
+        "DayCron": "0 50 00 * * ?", // 每锟斤拷锟斤拷锟斤拷 00锟斤拷50 执锟斤拷
+        "WeekCron": "0 50 1 ? * MON", //每锟斤拷一锟斤拷锟斤拷 1锟斤拷50 锟斤拷执锟斤拷
+        "MonthCron": "0 50 2 1 * ?", //每锟斤拷1锟斤拷锟斤拷锟斤拷 2锟斤拷50 执锟斤拷
+        "YearCron": "0 50 3 1 1 ?" //每锟斤拷1锟斤拷锟斤拷锟斤拷3锟斤拷50执锟斤拷
+      }
+    },
+    "Analy": {
+      "Method": 1
+    }
+  },
+
+  "Repair": {
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_repair_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    }
+  },
+
+  "Job": {
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_job_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    },
+    "Execution": {
+      "CustomRealResetThreshold": 60,
+      "CustomCronResetThreshold": 1440
+    }
+  },
+
+  "Epanet": {
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_epanet_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    }
+  },
+
+  "Inspect": {
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_inspect_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;",
+      "RecordConnectString": "PORT=5432;DATABASE=istation_inspect_record_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    }
+  },
+
+  "DataDocking": {
+    "Task": {
+      "ResetFrequency": 60
+    },
+    "Target": {
+      "CorpIds": [ 3 ],
+      "ContainsChildren": false
+    }
+  },
+
+  "Handle": {
+    "Debug": {
+      "IsWriteLog": true
+    }
+  },
+
+  "Store": {
+    "Debug": {
+      "IsWriteLog": true
+    }
+  },
+
+  "Analy": {
+    "Target": {
+      "CorpIds": [ 4 ],
+      "ContainsChildren": false
+    },
+    "Fluct": {
+      "Cron": "0 00 02 * * ?" //每锟斤拷 02锟斤拷00 执锟斤拷
+    },
+    "General": {
+      "RealResetFrequency": 60,
+      "HourCron": "0 20 * * * ?", //每时 00:20 执锟斤拷
+      "DayCron": "0 00 01 * * ?", //每锟斤拷 01锟斤拷00 执锟斤拷
+      "WeekCron": "0 30 1 ? * MON", //每锟斤拷一锟斤拷锟斤拷 1锟斤拷30 锟斤拷执锟斤拷
+      "MonthCron": "0 00 2 1 * ?", //每锟斤拷1锟斤拷2锟斤拷00执锟斤拷
+      "YearCron": "0 0 6 1 1 ? *" //每锟斤拷 1锟斤拷1锟斤拷 6锟斤拷00执锟斤拷
+    },
+    "Alarm": {
+      "InterruptAnalyFrequency": 120
+    }
+  },
+
+  "WebApi": {
+    "EnableJwt": false,
+    "OpenApi": {
+      "SanGaoDispatchUrl": "http://192.168.60.228:8821/Api/wsmp/v1/Chengtou/factoryCalc",
+      "SanGaoPlanUrl": "http://192.168.60.228:8821/Api/wsmp/v1/Chengtou/factoryCalc_New"
+    }
+
+  },
+
+  "Transfer": {
+    "Expert": {
+      "SDC800": {
+        "ServerPort": 9988,
+        "TransferUrl": "http://172.100.17.23:8081/smi/vibration/zept"
+      }
+    },
+    "HangTian801": {
+      "TransferUrl": "http://172.100.17.23:8081/smi/vibration/hangtian"
+    }
+  },
+
+  "Vibration": {
+    "Smi": {
+      "Expert": {
+        "IsWriteLog": true,
+        "CorpID": 5,
+        "ConfigureID": 1532223215940800512
+      },
+      "HangTian": {
+        "IsWriteLog": true,
+        "CorpID": 5,
+        "ConfigureID": 0
+      }
+    }
+  },
+
+  "LinuxTest": {
+    "DataBase": {
+      "ConnectString": "PORT=5432;DATABASE=istation_linux_test;HOST=101.133.223.111;PASSWORD=Eventech2010;USER ID=postgres;"
+    },
+    "Queue": {
+      "StoreQueueName": "linux_text_queue_name"
+    }
+
+  },
+
+   "DataFile": { 
+      "SaveFileUrl": "http://101.133.133.173:9019/",
+	  "PdfFolder":"Report" 
+   }
+
+}

--
Gitblit v1.9.3