From 1519533649b43337d214523f7cd075edf237b3f7 Mon Sep 17 00:00:00 2001
From: ningshuxia <ningshuxia0927@outlook.com>
Date: 星期二, 22 四月 2025 13:57:42 +0800
Subject: [PATCH] 代码修改

---
 01-api/_Expand/IStation.Test/Program - 调度验证.cs                                                        |   16 
 01-api/IStation.Schedule.Ch.sln                                                                       |    1 
 01-api/_Expand/IStation.Test/Properties/PublishProfiles/FolderProfile.pubxml.user                     |    2 
 02-desktop/Desktop/IStation.Test/schedule/PumpScheduleModel.cs                                        |  113 ++
 02-desktop/Desktop/IStation.Test/Program.cs                                                           |  128 +-
 01-api/Application/IStation.Application/01-open-api/01-schedule/Schedule_Controller.cs                |   54 
 01-api/_Expand/IStation.Test/Program - 定时数据.cs                                                        |    2 
 02-desktop/WinFrmUI/IStation.WinFrmUI.Monitor/03-WorkingConditionAnalysis/00-helper/AnalysisHelper.cs |    4 
 01-api/_Expand/IStation.Win.Schedule/Program.cs                                                       |    4 
 01-api/_Expand/IStation.Test/Program - 历史数据.cs                                                        |  234 ++++
 01-api/_Expand/IStation.Test/Program - 复制.cs                                                          |  197 +++
 01-api/Entry/IStation.Entry/Properties/PublishProfiles/FolderProfile.pubxml.user                      |    2 
 01-api/Service/IStation.Service/07-helper/02-schedule/ScheduleHelper.cs                               |   62 
 01-api/_Expand/IStation.Test/IStation.Test.csproj                                                     |    1 
 01-api/_Expand/IStation.Win.Schedule/bjMain.cs                                                        |  133 +-
 01-api/Service/IStation.Service/00-core/01-helper/GlobalHelper.cs                                     |  805 ++++++++++++++++
 02-desktop/Desktop/IStation.Test/schedule/CorrectedStationScheduleModelHelper.cs                      |  605 ++++++++++++
 /dev/null                                                                                             |   27 
 02-desktop/Component/IStation.Newtonsoft/JsonHelper.cs                                                |   84 +
 02-desktop/Desktop/IStation.Test/schedule/PumpRecordModel.cs                                          |   78 +
 01-api/_Expand/IStation.Test/IStation.Test.csproj.user                                                |    2 
 02-desktop/Desktop/IStation.Test/schedule/StationRunRecord.cs                                         |   49 +
 02-desktop/Desktop/IStation.Test/helper/DynamicThresholdProcessorHelper.cs                            |   41 
 02-desktop/Desktop/IStation.Test/IStation.Test.csproj                                                 |    2 
 01-api/Service/IStation.Service/02-model/00-basic/02-config/ScheduleConfig.cs                         |    7 
 02-desktop/Desktop/IStation.Test/StationTotalFlowPressureHelper.cs                                    |   75 +
 02-desktop/Desktop/IStation.Test/StationCombineHelper.cs                                              |  120 +
 27 files changed, 2,525 insertions(+), 323 deletions(-)

diff --git a/01-api/Application/IStation.Application/01-open-api/01-schedule/Schedule_Controller.cs b/01-api/Application/IStation.Application/01-open-api/01-schedule/Schedule_Controller.cs
index e81e700..3e61863 100644
--- a/01-api/Application/IStation.Application/01-open-api/01-schedule/Schedule_Controller.cs
+++ b/01-api/Application/IStation.Application/01-open-api/01-schedule/Schedule_Controller.cs
@@ -1,4 +1,8 @@
-锘縩amespace IStation.Application
+锘縰sing IStation.Curve;
+using IStation.Model;
+using SqlSugar;
+
+namespace IStation.Application
 {
     /// <summary>
     /// 杈撴按璋冨害
@@ -78,19 +82,23 @@
             var analysis_deviation_list = _service_analysis_deviation.GetList();
 
             GlobalHelper.GetStationOpenFlagList(monitor_record_list, out List<int> station1_open_flag_list, out List<int> station2_open_flag_list);
-            GlobalHelper.GetStationFlagStateList(monitor_record_list, out List<int> station1_flag_maintenance_list, out List<int> station2_maintenance_flag_list, out List<int> station1_priority_flag_list, out List<int> station2_priority_flag_list);
+            GlobalHelper.GetStationFlagStateList(monitor_record_list, out List<int> station1_maintenance_flag_list, out List<int> station2_maintenance_flag_list, out List<int> station1_priority_flag_list, out List<int> station2_priority_flag_list);
             GlobalHelper.GetFlagInletWaterLevelDict(monitor_record_list, out Dictionary<int, double> station1_flag_inlet_water_level_dict, out Dictionary<int, double> station2_flag_inlet_water_level_dict);
 
+            station1_schedule_config.MaintenanceFlagList = new List<int>();
+            station2_schedule_config.MaintenanceFlagList = new List<int>();
+            station1_schedule_config.PriorityOpenFlagList = new List<int>();
+            station2_schedule_config.PriorityOpenFlagList = new List<int>();
             log_title = "鏈烘车妫�淇�";
-            if (station1_flag_maintenance_list != null && station1_flag_maintenance_list.Any())
+            if (station1_maintenance_flag_list != null && station1_maintenance_flag_list.Any())
             {
-                ScheduleLog.Info(request_id, log_title, $"1杈撴按:{Yw.Untity.IntListHelper.ToString(station1_flag_maintenance_list)}");
-                station1_schedule_config.MustCloseFlagList.AddRange(station1_flag_maintenance_list);
+                ScheduleLog.Info(request_id, log_title, $"1杈撴按:{Yw.Untity.IntListHelper.ToString(station1_maintenance_flag_list)}");
+                station1_schedule_config.MaintenanceFlagList.AddRange(station1_maintenance_flag_list);
             }
             if (station2_maintenance_flag_list != null && station2_maintenance_flag_list.Any())
             {
                 ScheduleLog.Info(request_id, log_title, $"2杈撴按:{Yw.Untity.IntListHelper.ToString(station2_maintenance_flag_list)}");
-                station2_schedule_config.MustCloseFlagList.AddRange(station2_maintenance_flag_list);
+                station2_schedule_config.MaintenanceFlagList.AddRange(station2_maintenance_flag_list);
             }
 
             log_title = "鏈烘车浼樺厛";
@@ -105,9 +113,20 @@
                 station2_schedule_config.PriorityOpenFlagList.AddRange(station2_priority_flag_list);
             }
 
+            log_title = "渚涙按闄愬埗";
+            var limit_info= VerifyWaterSupplyLimit(station1_schedule_config.WaterSupplyLimitList,station1_open_flag_list, target_flow1);
+            if (!string.IsNullOrEmpty(limit_info))
+            {
+                ScheduleLog.Info(request_id, log_title, $"1杈撴按:{limit_info}");
+            }
 
-            log_title = "娴侀噺琛ュ樊";
+            limit_info = VerifyWaterSupplyLimit(station2_schedule_config.WaterSupplyLimitList, station2_open_flag_list, target_flow2);
+            if (!string.IsNullOrEmpty(limit_info))
+            {
+                ScheduleLog.Info(request_id, log_title, $"2杈撴按:{limit_info}");
+            }
 
+            log_title = "娴侀噺琛ュ樊"; 
             var helper = new Service.ScheduleHelper(); 
             helper.Initial(station1_open_flag_list, station1_schedule_config, analysis_deviation_list);
             var optimal_combine1 = helper.GetOptAnaCombine(station1, station1_flag_inlet_water_level_dict, target_flow1, target_pressure1);
@@ -487,6 +506,27 @@
 
         }
 
+        private static string VerifyWaterSupplyLimit(List<WaterSupplyLimit> waterSupplyLimits, List<int> station_open_flag_list, double targetFlow)
+        {
+            if (waterSupplyLimits != null && waterSupplyLimits.Any())
+            {
+                if (station_open_flag_list != null && station_open_flag_list.Any())
+                {
+                    var pumpCount = station_open_flag_list.Count;
+                    var exist_limit = waterSupplyLimits.Find(x => x.PumpCount == pumpCount);
+                    if (exist_limit != null)
+                    {
+                        if (targetFlow < exist_limit.Min || targetFlow > exist_limit.Max)
+                        {
+                            var flags = Yw.Untity.IntListHelper.ToString(station_open_flag_list);
+                            return $"[{flags}]:鐩爣娴侀噺:{targetFlow},渚涙按闄愬埗:{exist_limit.Min}-{exist_limit.Max}";
+                        }
+                    }
+                } 
+            }
+            return "";
+        }
+
 
 
     }
diff --git a/01-api/Entry/IStation.Entry/Properties/PublishProfiles/FolderProfile.pubxml.user b/01-api/Entry/IStation.Entry/Properties/PublishProfiles/FolderProfile.pubxml.user
index fcf8b7f..6db891d 100644
--- a/01-api/Entry/IStation.Entry/Properties/PublishProfiles/FolderProfile.pubxml.user
+++ b/01-api/Entry/IStation.Entry/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -5,7 +5,7 @@
 <Project>
   <PropertyGroup>
     <_PublishTargetUrl>D:\WorkCode\Project\ChDt1\Schedule.Ch.V1.0\01-api\Entry\IStation.Entry\bin\Release\net6.0\publish\</_PublishTargetUrl>
-    <History>True|2025-03-06T04:22:24.3024074Z||;True|2025-02-19T13:26:43.5272277+08:00||;True|2025-02-19T13:25:05.8482250+08:00||;True|2025-02-11T12:56:06.0150407+08:00||;True|2025-02-11T12:53:25.2984928+08:00||;True|2025-02-11T12:53:07.8461804+08:00||;True|2025-02-11T12:25:40.4739526+08:00||;True|2025-02-11T12:15:43.0779684+08:00||;True|2025-02-11T11:24:38.9435901+08:00||;True|2025-02-11T10:07:09.9907346+08:00||;True|2025-02-11T10:06:24.2854311+08:00||;True|2024-12-05T13:41:38.8531031+08:00||;True|2024-11-09T09:37:13.3682027+08:00||;True|2024-11-06T17:38:55.4076801+08:00||;True|2024-11-06T17:09:19.3816798+08:00||;True|2024-11-05T13:14:01.6952365+08:00||;True|2024-10-29T17:47:24.1461492+08:00||;True|2024-10-29T17:44:54.7943890+08:00||;True|2024-10-29T14:23:21.2176559+08:00||;True|2024-10-28T13:23:34.4772009+08:00||;True|2024-10-28T09:52:02.6105686+08:00||;True|2024-10-21T13:45:41.4184337+08:00||;False|2024-10-21T13:45:28.6526687+08:00||;True|2024-10-21T13:44:32.5042437+08:00||;True|2024-10-21T13:43:41.9121028+08:00||;True|2024-10-21T12:21:54.3858141+08:00||;True|2024-10-21T12:21:49.0790357+08:00||;True|2024-10-21T12:21:38.3606377+08:00||;True|2024-10-21T10:41:49.7087919+08:00||;True|2024-10-21T10:22:56.7510287+08:00||;True|2024-10-21T10:20:14.9765083+08:00||;True|2024-09-04T12:23:06.8396065+08:00||;True|2024-09-04T12:21:53.1509115+08:00||;True|2024-09-04T12:03:26.9628398+08:00||;True|2024-09-04T11:57:24.6077432+08:00||;True|2024-09-04T10:44:08.5232129+08:00||;True|2024-09-04T10:31:08.0493769+08:00||;True|2024-08-27T10:39:49.3050134+08:00||;True|2024-08-15T10:51:00.0736675+08:00||;True|2024-08-07T10:34:56.6363692+08:00||;True|2024-08-07T10:23:23.5959249+08:00||;True|2024-08-07T10:18:55.3553323+08:00||;True|2024-08-05T10:03:03.1020499+08:00||;True|2024-08-05T10:00:42.1282571+08:00||;True|2024-08-01T17:23:11.3983389+08:00||;True|2024-08-01T17:22:31.0342192+08:00||;True|2024-08-01T17:20:38.4331763+08:00||;True|2024-07-25T13:35:25.1478492+08:00||;True|2024-07-16T17:39:33.3835168+08:00||;True|2024-07-16T17:14:00.9398568+08:00||;False|2024-07-16T17:13:27.9996953+08:00||;True|2024-07-16T13:09:16.9500768+08:00||;True|2024-07-15T12:48:47.2966278+08:00||;False|2024-07-15T12:48:32.1828646+08:00||;True|2024-07-12T16:40:50.3694799+08:00||;True|2024-07-12T10:40:34.0007726+08:00||;True|2024-07-12T10:36:32.4601011+08:00||;True|2024-07-12T10:33:14.3243625+08:00||;True|2024-07-11T14:10:11.4665289+08:00||;True|2024-07-11T14:08:13.0064903+08:00||;True|2024-07-11T14:06:32.4662645+08:00||;True|2024-07-09T09:51:25.7986637+08:00||;False|2024-07-09T09:50:56.5778877+08:00||;False|2024-07-09T09:50:23.0123211+08:00||;True|2024-06-26T16:20:21.3981649+08:00||;False|2024-06-26T16:19:59.2162840+08:00||;True|2024-06-26T15:20:17.9242271+08:00||;True|2024-06-19T15:01:43.3271769+08:00||;True|2024-06-18T09:51:50.4178295+08:00||;True|2024-06-18T09:41:19.5989782+08:00||;True|2024-06-18T09:41:10.7867036+08:00||;True|2024-06-18T09:38:57.0128861+08:00||;True|2024-06-17T15:22:17.6153518+08:00||;False|2024-06-17T15:22:01.3404718+08:00||;True|2024-06-13T11:15:55.4873247+08:00||;True|2024-06-13T11:14:52.9075916+08:00||;True|2024-06-13T10:09:13.5966875+08:00||;True|2024-06-13T09:58:26.1880685+08:00||;True|2024-06-13T09:49:29.6928004+08:00||;True|2024-06-13T09:46:16.2707476+08:00||;True|2024-05-30T14:57:39.3412922+08:00||;True|2024-05-30T11:59:44.7664433+08:00||;True|2024-05-30T11:53:59.9799057+08:00||;True|2024-05-30T11:21:35.4761141+08:00||;True|2024-05-30T11:16:55.6157765+08:00||;True|2024-05-30T11:07:45.8336241+08:00||;True|2024-05-30T10:59:58.8877118+08:00||;True|2024-05-30T10:36:09.0290592+08:00||;True|2024-05-30T10:35:17.5448779+08:00||;True|2024-05-27T17:06:29.6833574+08:00||;False|2024-05-27T17:06:07.6398727+08:00||;False|2024-05-27T17:05:20.1523960+08:00||;False|2024-05-27T17:05:04.1140399+08:00||;False|2024-05-27T17:04:44.5872009+08:00||;True|2024-05-11T15:21:00.4779174+08:00||;True|2024-04-23T10:14:25.7074885+08:00||;True|2024-04-22T16:37:12.5852855+08:00||;True|2024-04-22T16:34:52.0894541+08:00||;True|2024-04-19T10:53:01.1630050+08:00||;True|2024-04-19T10:52:02.7021209+08:00||;</History>
+    <History>True|2025-04-17T02:17:40.2265253Z||;True|2025-03-06T12:22:24.3024074+08:00||;True|2025-02-19T13:26:43.5272277+08:00||;True|2025-02-19T13:25:05.8482250+08:00||;True|2025-02-11T12:56:06.0150407+08:00||;True|2025-02-11T12:53:25.2984928+08:00||;True|2025-02-11T12:53:07.8461804+08:00||;True|2025-02-11T12:25:40.4739526+08:00||;True|2025-02-11T12:15:43.0779684+08:00||;True|2025-02-11T11:24:38.9435901+08:00||;True|2025-02-11T10:07:09.9907346+08:00||;True|2025-02-11T10:06:24.2854311+08:00||;True|2024-12-05T13:41:38.8531031+08:00||;True|2024-11-09T09:37:13.3682027+08:00||;True|2024-11-06T17:38:55.4076801+08:00||;True|2024-11-06T17:09:19.3816798+08:00||;True|2024-11-05T13:14:01.6952365+08:00||;True|2024-10-29T17:47:24.1461492+08:00||;True|2024-10-29T17:44:54.7943890+08:00||;True|2024-10-29T14:23:21.2176559+08:00||;True|2024-10-28T13:23:34.4772009+08:00||;True|2024-10-28T09:52:02.6105686+08:00||;True|2024-10-21T13:45:41.4184337+08:00||;False|2024-10-21T13:45:28.6526687+08:00||;True|2024-10-21T13:44:32.5042437+08:00||;True|2024-10-21T13:43:41.9121028+08:00||;True|2024-10-21T12:21:54.3858141+08:00||;True|2024-10-21T12:21:49.0790357+08:00||;True|2024-10-21T12:21:38.3606377+08:00||;True|2024-10-21T10:41:49.7087919+08:00||;True|2024-10-21T10:22:56.7510287+08:00||;True|2024-10-21T10:20:14.9765083+08:00||;True|2024-09-04T12:23:06.8396065+08:00||;True|2024-09-04T12:21:53.1509115+08:00||;True|2024-09-04T12:03:26.9628398+08:00||;True|2024-09-04T11:57:24.6077432+08:00||;True|2024-09-04T10:44:08.5232129+08:00||;True|2024-09-04T10:31:08.0493769+08:00||;True|2024-08-27T10:39:49.3050134+08:00||;True|2024-08-15T10:51:00.0736675+08:00||;True|2024-08-07T10:34:56.6363692+08:00||;True|2024-08-07T10:23:23.5959249+08:00||;True|2024-08-07T10:18:55.3553323+08:00||;True|2024-08-05T10:03:03.1020499+08:00||;True|2024-08-05T10:00:42.1282571+08:00||;True|2024-08-01T17:23:11.3983389+08:00||;True|2024-08-01T17:22:31.0342192+08:00||;True|2024-08-01T17:20:38.4331763+08:00||;True|2024-07-25T13:35:25.1478492+08:00||;True|2024-07-16T17:39:33.3835168+08:00||;True|2024-07-16T17:14:00.9398568+08:00||;False|2024-07-16T17:13:27.9996953+08:00||;True|2024-07-16T13:09:16.9500768+08:00||;True|2024-07-15T12:48:47.2966278+08:00||;False|2024-07-15T12:48:32.1828646+08:00||;True|2024-07-12T16:40:50.3694799+08:00||;True|2024-07-12T10:40:34.0007726+08:00||;True|2024-07-12T10:36:32.4601011+08:00||;True|2024-07-12T10:33:14.3243625+08:00||;True|2024-07-11T14:10:11.4665289+08:00||;True|2024-07-11T14:08:13.0064903+08:00||;True|2024-07-11T14:06:32.4662645+08:00||;True|2024-07-09T09:51:25.7986637+08:00||;False|2024-07-09T09:50:56.5778877+08:00||;False|2024-07-09T09:50:23.0123211+08:00||;True|2024-06-26T16:20:21.3981649+08:00||;False|2024-06-26T16:19:59.2162840+08:00||;True|2024-06-26T15:20:17.9242271+08:00||;True|2024-06-19T15:01:43.3271769+08:00||;True|2024-06-18T09:51:50.4178295+08:00||;True|2024-06-18T09:41:19.5989782+08:00||;True|2024-06-18T09:41:10.7867036+08:00||;True|2024-06-18T09:38:57.0128861+08:00||;True|2024-06-17T15:22:17.6153518+08:00||;False|2024-06-17T15:22:01.3404718+08:00||;True|2024-06-13T11:15:55.4873247+08:00||;True|2024-06-13T11:14:52.9075916+08:00||;True|2024-06-13T10:09:13.5966875+08:00||;True|2024-06-13T09:58:26.1880685+08:00||;True|2024-06-13T09:49:29.6928004+08:00||;True|2024-06-13T09:46:16.2707476+08:00||;True|2024-05-30T14:57:39.3412922+08:00||;True|2024-05-30T11:59:44.7664433+08:00||;True|2024-05-30T11:53:59.9799057+08:00||;True|2024-05-30T11:21:35.4761141+08:00||;True|2024-05-30T11:16:55.6157765+08:00||;True|2024-05-30T11:07:45.8336241+08:00||;True|2024-05-30T10:59:58.8877118+08:00||;True|2024-05-30T10:36:09.0290592+08:00||;True|2024-05-30T10:35:17.5448779+08:00||;True|2024-05-27T17:06:29.6833574+08:00||;False|2024-05-27T17:06:07.6398727+08:00||;False|2024-05-27T17:05:20.1523960+08:00||;False|2024-05-27T17:05:04.1140399+08:00||;False|2024-05-27T17:04:44.5872009+08:00||;True|2024-05-11T15:21:00.4779174+08:00||;True|2024-04-23T10:14:25.7074885+08:00||;True|2024-04-22T16:37:12.5852855+08:00||;True|2024-04-22T16:34:52.0894541+08:00||;True|2024-04-19T10:53:01.1630050+08:00||;</History>
     <LastFailureDetails />
   </PropertyGroup>
 </Project>
\ No newline at end of file
diff --git a/01-api/IStation.Schedule.Ch.sln b/01-api/IStation.Schedule.Ch.sln
index be938c8..06970e6 100644
--- a/01-api/IStation.Schedule.Ch.sln
+++ b/01-api/IStation.Schedule.Ch.sln
@@ -144,7 +144,6 @@
 		HideSolutionNode = FALSE
 	EndGlobalSection
 	GlobalSection(NestedProjects) = preSolution
-		{DE85C7A6-BCE1-46D1-B8CE-7F3F4B0F1E22} = {717DE2F8-71FB-4406-BEF7-CC5716721AEF}
 		{31D62A4A-F697-416E-A4F1-C5A42AA92010} = {F4397911-D951-4187-8DC4-EED004E38B3F}
 		{09AAD314-5A3E-4BEC-B012-60423D3B3E3C} = {FC81BD0A-513E-4164-8444-C5AD17D31DF8}
 		{AF3961EA-957B-40BB-82CF-A972DE0DACF6} = {DE85C7A6-BCE1-46D1-B8CE-7F3F4B0F1E22}
diff --git a/01-api/Service/IStation.Service/00-core/01-helper/GlobalHelper.cs b/01-api/Service/IStation.Service/00-core/01-helper/GlobalHelper.cs
index 33e0729..fcbe3ca 100644
--- a/01-api/Service/IStation.Service/00-core/01-helper/GlobalHelper.cs
+++ b/01-api/Service/IStation.Service/00-core/01-helper/GlobalHelper.cs
@@ -817,6 +817,810 @@
 
         #endregion
 
+        #region 鍘嗗彶鏁版嵁鏍囩
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public static List<string> HistoryTagAllList = new ()
+        {
+            "闀挎睙绠$綉鍥�.XTB_QCYW",
+            "浜屽彇姘�1鍙蜂富姘存车.鍑哄彛鍘嬪姏",
+            "浜屽彇姘�1鍙蜂富姘存车.鐬椂娴侀噺",
+            "浜屽彇姘�1鍙蜂富姘存车.绱娴侀噺",
+            "浜屽彇姘�1鍙蜂富姘存车.姘存车杩愯鐘舵��",
+            "浜屽彇姘撮珮鍘�1鍙蜂富姘存车.鏈夊姛鍔熺巼",
+            "浜屽彇姘撮珮鍘�1鍙蜂富姘存车.鏈夊姛鐢佃兘",
+            "浜屽彇姘�2鍙蜂富姘存车.鍑哄彛鍘嬪姏",
+            "浜屽彇姘�2鍙蜂富姘存车.鐬椂娴侀噺",
+            "浜屽彇姘�2鍙蜂富姘存车.绱娴侀噺",
+            "浜屽彇姘�2鍙蜂富姘存车.姘存车杩愯鐘舵��",
+            "浜屽彇姘撮珮鍘�2鍙蜂富姘存车.鏈夊姛鍔熺巼",
+            "浜屽彇姘撮珮鍘�2鍙蜂富姘存车.鏈夊姛鐢佃兘",
+            "浜屽彇姘�3鍙蜂富姘存车.鍑哄彛鍘嬪姏",
+            "浜屽彇姘�3鍙蜂富姘存车.鐬椂娴侀噺",
+            "浜屽彇姘�3鍙蜂富姘存车.绱娴侀噺",
+            "浜屽彇姘�3鍙蜂富姘存车.姘存车杩愯鐘舵��",
+            "浜屽彇姘撮珮鍘�3鍙蜂富姘存车.鏈夊姛鍔熺巼",
+            "浜屽彇姘撮珮鍘�3鍙蜂富姘存车.鏈夊姛鐢佃兘",
+            "浜屽彇姘�4鍙蜂富姘存车.鍑哄彛鍘嬪姏",
+            "浜屽彇姘�4鍙蜂富姘存车.鐬椂娴侀噺",
+            "浜屽彇姘�4鍙蜂富姘存车.绱娴侀噺",
+            "浜屽彇姘�4鍙蜂富姘存车.姘存车杩愯鐘舵��",
+            "浜屽彇姘撮珮鍘�4鍙蜂富姘存车.鏈夊姛鍔熺巼",
+            "浜屽彇姘撮珮鍘�4鍙蜂富姘存车.鏈夊姛鐢佃兘",
+            "浜屽彇姘�5鍙蜂富姘存车.鍑哄彛鍘嬪姏",
+            "浜屽彇姘�5鍙蜂富姘存车.鐬椂娴侀噺",
+            "浜屽彇姘�5鍙蜂富姘存车.绱娴侀噺",
+            "浜屽彇姘�5鍙蜂富姘存车.姘存车杩愯鐘舵��",
+            "浜屽彇姘撮珮鍘�5鍙蜂富姘存车.鏈夊姛鍔熺巼",
+            "浜屽彇姘撮珮鍘�5鍙蜂富姘存车.鏈夊姛鐢佃兘",
+            "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",
+            "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",
+            "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",
+            "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",
+            "浜岃緭姘�21鍙锋按娉佃鍥�.娉佃繍琛�",
+            "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.鐢垫満杞��",
+            "21鍙风數鍔ㄦ満.鏈夊姛鍔熺巼",
+            "21鍙风數鍔ㄦ満.鏈夊姛鐢佃兘",
+            "2400鎬荤.鍑哄巶鍘嬪姏",
+            "2400鎬荤.鐬椂娴侀噺",
+            "2400鎬荤.瀹為檯绱娴侀噺",
+            "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",
+            "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",
+            "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",
+            "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",
+            "浜岃緭姘�22鍙锋按娉佃鍥�.娉佃繍琛�",
+            "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.鐢垫満杞��",
+            "22鍙风數鍔ㄦ満鍙傛暟.瀹為檯棰戠巼",
+            "22鍙风數鍔ㄦ満鍙傛暟.鏈夊姛鍔熺巼",
+            "22鍙风數鍔ㄦ満.鏈夊姛鐢佃兘",
+            "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",
+            "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",
+            "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",
+            "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",
+            "浜岃緭姘�23鍙锋按娉佃蒋鍚姩.杩愯",
+            "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.鐢垫満杞��",
+            "23鍙风數鍔ㄦ満鍙傛暟.瀹為檯棰戠巼",
+            "23鍙风數鍔ㄦ満鍙傛暟.鏈夊姛鍔熺巼",
+            "23鍙风數鍔ㄦ満.鏈夊姛鐢佃兘",
+            "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",
+            "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",
+            "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",
+            "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",
+            "浜岃緭姘�24鍙锋按娉佃鍥�.娉佃繍琛�",
+            "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.鐢垫満杞��",
+            "24鍙风數鍔ㄦ満鍙傛暟.瀹為檯棰戠巼",
+            "24鍙风數鍔ㄦ満鍙傛暟.鏈夊姛鍔熺巼",
+            "24鍙风數鍔ㄦ満.鏈夊姛鐢佃兘", 
+            "2600鎬荤.鐬椂娴侀噺",
+            "2600鎬荤.鐬椂娴侀噺",
+            "2600鎬荤.瀹為檯绱娴侀噺", //杩欎釜鏈夐棶棰�
+            "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",
+            "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",
+            "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",
+            "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",
+            "浜岃緭姘�25鍙锋按娉佃鍥�.娉佃繍琛�",
+            "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.鐢垫満杞��",
+            "25鍙风數鍔ㄦ満鍙傛暟.瀹為檯棰戠巼",
+            "25鍙风數鍔ㄦ満鍙傛暟.鏈夊姛鍔熺巼",
+            "25鍙风數鍔ㄦ満.鏈夊姛鐢佃兘",
+            "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",
+            "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",
+            "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",
+            "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",
+            "浜岃緭姘�26鍙锋按娉佃鍥�.娉佃繍琛�",
+            "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.鐢垫満杞��",
+            "26鍙风數鍔ㄦ満鍙傛暟.瀹為檯棰戠巼",
+            "26鍙风數鍔ㄦ満鍙傛暟.鐢垫満瑙嗗湪鍔熺巼",
+            "26鍙风數鍔ㄦ満.鏈夊姛鐢佃兘",
+            "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",
+            "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",
+            "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",
+            "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",
+            "浜岃緭姘�27鍙锋按娉靛彉棰戝櫒.杩愯鐘舵��",
+            "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.鐢垫満杞��",
+            "浜岃緭姘�27鍙锋按娉靛彉棰戝櫒.杈撳嚭棰戠巼",
+            "浜岃緭姘�27鍙锋按娉靛彉棰戝櫒.杈撳嚭鍔熺巼",
+            "27鍙风數鍔ㄦ満.鏈夊姛鐢佃兘",
+            "HF涓�杈撴按11鍙峰彉棰戞帶鍒剁敾闈�.11鍙锋车鍑哄彛鍘嬪姏",
+            "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�",
+            "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�",
+            "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.姘存车杞��",
+            "11鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�",
+            "11鍙�6KV閰嶇數鍙傛暟.鏈夊姛鐢靛害",
+            "鍢夊畾鏁版嵁.1绾垮帇鍔�",
+            "鍢夊畾鏁版嵁.1绾跨灛鏃舵祦閲�",
+            "鍢夊畾鏁版嵁.1绾胯〃澶寸疮璁�",
+            "HF涓�杈撴按娉垫埧鎬诲浘.涓�杈撴按鑰佸墠姹犲崡渚ф恫浣�",
+            "HF涓�杈撴按12鍙峰彉棰戞帶鍒剁敾闈�.12鍙锋车鍑哄彛鍘嬪姏",
+            "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.鍙橀鍣ㄨ繍琛�",
+            "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.鍙橀鍣ㄩ鐜�",
+            "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.姘存车杞��",
+            "12鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�",
+            "12鍙�6KV閰嶇數鍙傛暟.鏈夊姛鐢靛害",
+            "HF涓�杈撴按13鍙峰彉棰戞帶鍒剁敾闈�.13鍙锋车鍑哄彛鍘嬪姏",
+            "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�",
+            "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�",
+            "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.姘存车杞��",
+            "13鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�",
+            "13鍙�6KV閰嶇數鍙傛暟.鏈夊姛鐢靛害",
+            "HF涓�杈撴按14鍙峰彉棰戞帶鍒跺浘.14鍙锋车鍑哄彛鍘嬪姏",
+            "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�",
+            "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�",
+            "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.姘存车杞��",
+            "14鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�",
+            "14鍙�6KV閰嶇數鍙傛暟.鏈夊姛鐢靛害",
+            "鍢夊畾鏁版嵁.2绾垮帇鍔�",
+            "鍢夊畾鏁版嵁.2绾跨灛鏃舵祦閲�",
+            "鍢夊畾鏁版嵁.2绾胯〃澶寸疮璁�",
+            "HF闀挎睙鍘熸按鍘侫BPLC.6KV閰嶇數涓�杈撴按.0402010201011501003涓�杈撴按15鍙锋车杩愯",
+            "15鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�",
+            "15鍙�6KV閰嶇數鍙傛暟.鏈夊姛鐢靛害",
+            "HF涓�杈撴按16鍙峰伐棰戞帶鍒跺浘.16鍙锋车鍑哄彛鍘嬪姏",
+            "HF涓�杈撴按16鍙峰伐棰戞帶鍒跺浘.16#姘存车杩愯",
+            "涓�杈撴按6KV_閰嶇數鏌淿M112.鎬绘湁鍔熷姛鐜�",
+            "涓�杈撴按6KV_閰嶇數鏌淿M112.鏈夊姛鐢靛害",
+            "鍢夊畾鏁版嵁.3绾垮帇鍔�",
+            "鍢夊畾鏁版嵁.3绾跨灛鏃舵祦閲�",
+            "鍢夊畾鏁版嵁.3绾胯〃澶寸疮璁�",
+            "HF涓�杈撴按17鍙峰彉棰戞帶鍒跺浘.17鍙锋车鍑哄彛鍘嬪姏",
+            "涓�杈撴按娉�17鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�",
+            "涓�杈撴按娉�17鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�",
+            "涓�杈撴按娉�17鍙峰彉棰戝崟娉�.姘存车杞��",
+            "涓�杈撴按6KV_閰嶇數鏌淿M108.鎬绘湁鍔熷姛鐜�",
+            "涓�杈撴按6KV_閰嶇數鏌淿M108.鏈夊姛鐢靛害",
+            "HF涓�杈撴按18鍙峰彉棰戞帶鍒跺浘.18鍙锋车鍑哄彛鍘嬪姏",
+            "涓�杈撴按娉�18鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�",
+            "涓�杈撴按娉�18鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�",
+            "涓�杈撴按娉�18鍙峰彉棰戝崟娉�.姘存车杞��",
+            "涓�杈撴按6KV_閰嶇數鏌淿M111.鎬绘湁鍔熷姛鐜�",
+            "涓�杈撴按6KV_閰嶇數鏌淿M111.鏈夊姛鐢靛害",
+            "HF涓�杈撴按娉垫埧鎬诲浘.涓�杈撴按鏂板墠姹犳恫浣�"
+        };
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public static List<string> HistoryShuShuiTagList = new()
+        {
+            //"闀挎睙绠$綉鍥�.XTB_QCYW",
+            //"浜屽彇姘�1鍙蜂富姘存车.鍑哄彛鍘嬪姏",
+            //"浜屽彇姘�1鍙蜂富姘存车.鐬椂娴侀噺",
+            //"浜屽彇姘�1鍙蜂富姘存车.绱娴侀噺",
+            //"浜屽彇姘�1鍙蜂富姘存车.姘存车杩愯鐘舵��",
+            //"浜屽彇姘撮珮鍘�1鍙蜂富姘存车.鏈夊姛鍔熺巼",
+            //"浜屽彇姘撮珮鍘�1鍙蜂富姘存车.鏈夊姛鐢佃兘",
+            //"浜屽彇姘�2鍙蜂富姘存车.鍑哄彛鍘嬪姏",
+            //"浜屽彇姘�2鍙蜂富姘存车.鐬椂娴侀噺",
+            //"浜屽彇姘�2鍙蜂富姘存车.绱娴侀噺",
+            //"浜屽彇姘�2鍙蜂富姘存车.姘存车杩愯鐘舵��",
+            //"浜屽彇姘撮珮鍘�2鍙蜂富姘存车.鏈夊姛鍔熺巼",
+            //"浜屽彇姘撮珮鍘�2鍙蜂富姘存车.鏈夊姛鐢佃兘",
+            //"浜屽彇姘�3鍙蜂富姘存车.鍑哄彛鍘嬪姏",
+            //"浜屽彇姘�3鍙蜂富姘存车.鐬椂娴侀噺",
+            //"浜屽彇姘�3鍙蜂富姘存车.绱娴侀噺",
+            //"浜屽彇姘�3鍙蜂富姘存车.姘存车杩愯鐘舵��",
+            //"浜屽彇姘撮珮鍘�3鍙蜂富姘存车.鏈夊姛鍔熺巼",
+            //"浜屽彇姘撮珮鍘�3鍙蜂富姘存车.鏈夊姛鐢佃兘",
+            //"浜屽彇姘�4鍙蜂富姘存车.鍑哄彛鍘嬪姏",
+            //"浜屽彇姘�4鍙蜂富姘存车.鐬椂娴侀噺",
+            //"浜屽彇姘�4鍙蜂富姘存车.绱娴侀噺",
+            //"浜屽彇姘�4鍙蜂富姘存车.姘存车杩愯鐘舵��",
+            //"浜屽彇姘撮珮鍘�4鍙蜂富姘存车.鏈夊姛鍔熺巼",
+            //"浜屽彇姘撮珮鍘�4鍙蜂富姘存车.鏈夊姛鐢佃兘",
+            //"浜屽彇姘�5鍙蜂富姘存车.鍑哄彛鍘嬪姏",
+            //"浜屽彇姘�5鍙蜂富姘存车.鐬椂娴侀噺",
+            //"浜屽彇姘�5鍙蜂富姘存车.绱娴侀噺",
+            //"浜屽彇姘�5鍙蜂富姘存车.姘存车杩愯鐘舵��",
+            //"浜屽彇姘撮珮鍘�5鍙蜂富姘存车.鏈夊姛鍔熺巼",
+            //"浜屽彇姘撮珮鍘�5鍙蜂富姘存车.鏈夊姛鐢佃兘",
+            "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",
+            "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",
+            "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",
+            //"浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",
+            "浜岃緭姘�21鍙锋按娉佃鍥�.娉佃繍琛�",
+            "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.鐢垫満杞��",
+            "21鍙风數鍔ㄦ満.鏈夊姛鍔熺巼",
+            //"21鍙风數鍔ㄦ満.鏈夊姛鐢佃兘",
+            "2400鎬荤.鍑哄巶鍘嬪姏",
+            "2400鎬荤.鐬椂娴侀噺",
+            //"2400鎬荤.瀹為檯绱娴侀噺",
+            "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",
+            "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",
+            "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",
+            //"浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",
+            "浜岃緭姘�22鍙锋按娉佃鍥�.娉佃繍琛�",
+            "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.鐢垫満杞��",
+            "22鍙风數鍔ㄦ満鍙傛暟.瀹為檯棰戠巼",
+            "22鍙风數鍔ㄦ満鍙傛暟.鏈夊姛鍔熺巼",
+            //"22鍙风數鍔ㄦ満.鏈夊姛鐢佃兘",
+            "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",
+            "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",
+            "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",
+            //"浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",
+            "浜岃緭姘�23鍙锋按娉佃蒋鍚姩.杩愯",
+            "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.鐢垫満杞��",
+            "23鍙风數鍔ㄦ満鍙傛暟.瀹為檯棰戠巼",
+            "23鍙风數鍔ㄦ満鍙傛暟.鏈夊姛鍔熺巼",
+            //"23鍙风數鍔ㄦ満.鏈夊姛鐢佃兘",
+            "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",
+            "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",
+            "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",
+            //"浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",
+            "浜岃緭姘�24鍙锋按娉佃鍥�.娉佃繍琛�",
+            "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.鐢垫満杞��",
+            "24鍙风數鍔ㄦ満鍙傛暟.瀹為檯棰戠巼",
+            "24鍙风數鍔ㄦ満鍙傛暟.鏈夊姛鍔熺巼",
+            //"24鍙风數鍔ㄦ満.鏈夊姛鐢佃兘",
+            "2600鎬荤.鐬椂娴侀噺",
+            "2600鎬荤.鐬椂娴侀噺",
+            //"2600鎬荤.瀹為檯绱娴侀噺", //杩欎釜鏈夐棶棰�
+            "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",
+            "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",
+            "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",
+            //"浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",
+            "浜岃緭姘�25鍙锋按娉佃鍥�.娉佃繍琛�",
+            "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.鐢垫満杞��",
+            "25鍙风數鍔ㄦ満鍙傛暟.瀹為檯棰戠巼",
+            "25鍙风數鍔ㄦ満鍙傛暟.鏈夊姛鍔熺巼",
+            //"25鍙风數鍔ㄦ満.鏈夊姛鐢佃兘",
+            "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",
+            "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",
+            "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",
+            //"浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",
+            "浜岃緭姘�26鍙锋按娉佃鍥�.娉佃繍琛�",
+            "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.鐢垫満杞��",
+            "26鍙风數鍔ㄦ満鍙傛暟.瀹為檯棰戠巼",
+            "26鍙风數鍔ㄦ満鍙傛暟.鐢垫満瑙嗗湪鍔熺巼",
+            //"26鍙风數鍔ㄦ満.鏈夊姛鐢佃兘",
+            "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",
+            "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",
+            "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",
+            //"浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",
+            "浜岃緭姘�27鍙锋按娉靛彉棰戝櫒.杩愯鐘舵��",
+            "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.鐢垫満杞��",
+            "浜岃緭姘�27鍙锋按娉靛彉棰戝櫒.杈撳嚭棰戠巼",
+            "浜岃緭姘�27鍙锋按娉靛彉棰戝櫒.杈撳嚭鍔熺巼",
+            //"27鍙风數鍔ㄦ満.鏈夊姛鐢佃兘",
+            "HF涓�杈撴按11鍙峰彉棰戞帶鍒剁敾闈�.11鍙锋车鍑哄彛鍘嬪姏",
+            "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�",
+            "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�",
+            "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.姘存车杞��",
+            "11鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�",
+            //"11鍙�6KV閰嶇數鍙傛暟.鏈夊姛鐢靛害",
+            "鍢夊畾鏁版嵁.1绾垮帇鍔�",
+            "鍢夊畾鏁版嵁.1绾跨灛鏃舵祦閲�",
+            "鍢夊畾鏁版嵁.1绾胯〃澶寸疮璁�",
+            "HF涓�杈撴按娉垫埧鎬诲浘.涓�杈撴按鑰佸墠姹犲崡渚ф恫浣�",
+            "HF涓�杈撴按12鍙峰彉棰戞帶鍒剁敾闈�.12鍙锋车鍑哄彛鍘嬪姏",
+            "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.鍙橀鍣ㄨ繍琛�",
+            "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.鍙橀鍣ㄩ鐜�",
+            "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.姘存车杞��",
+            "12鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�",
+            //"12鍙�6KV閰嶇數鍙傛暟.鏈夊姛鐢靛害",
+            "HF涓�杈撴按13鍙峰彉棰戞帶鍒剁敾闈�.13鍙锋车鍑哄彛鍘嬪姏",
+            "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�",
+            "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�",
+            "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.姘存车杞��",
+            "13鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�",
+            //"13鍙�6KV閰嶇數鍙傛暟.鏈夊姛鐢靛害",
+            "HF涓�杈撴按14鍙峰彉棰戞帶鍒跺浘.14鍙锋车鍑哄彛鍘嬪姏",
+            "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�",
+            "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�",
+            "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.姘存车杞��",
+            "14鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�",
+            //"14鍙�6KV閰嶇數鍙傛暟.鏈夊姛鐢靛害",
+            "鍢夊畾鏁版嵁.2绾垮帇鍔�",
+            "鍢夊畾鏁版嵁.2绾跨灛鏃舵祦閲�",
+            "鍢夊畾鏁版嵁.2绾胯〃澶寸疮璁�",
+            "HF闀挎睙鍘熸按鍘侫BPLC.6KV閰嶇數涓�杈撴按.0402010201011501003涓�杈撴按15鍙锋车杩愯",
+            "15鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�",
+            //"15鍙�6KV閰嶇數鍙傛暟.鏈夊姛鐢靛害",
+            "HF涓�杈撴按16鍙峰伐棰戞帶鍒跺浘.16鍙锋车鍑哄彛鍘嬪姏",
+            "HF涓�杈撴按16鍙峰伐棰戞帶鍒跺浘.16#姘存车杩愯",
+            "涓�杈撴按6KV_閰嶇數鏌淿M112.鎬绘湁鍔熷姛鐜�",
+            //"涓�杈撴按6KV_閰嶇數鏌淿M112.鏈夊姛鐢靛害",
+            "鍢夊畾鏁版嵁.3绾垮帇鍔�",
+            "鍢夊畾鏁版嵁.3绾跨灛鏃舵祦閲�",
+            "鍢夊畾鏁版嵁.3绾胯〃澶寸疮璁�",
+            "HF涓�杈撴按17鍙峰彉棰戞帶鍒跺浘.17鍙锋车鍑哄彛鍘嬪姏",
+            "涓�杈撴按娉�17鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�",
+            "涓�杈撴按娉�17鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�",
+            "涓�杈撴按娉�17鍙峰彉棰戝崟娉�.姘存车杞��",
+            "涓�杈撴按6KV_閰嶇數鏌淿M108.鎬绘湁鍔熷姛鐜�",
+            //"涓�杈撴按6KV_閰嶇數鏌淿M108.鏈夊姛鐢靛害",
+            "HF涓�杈撴按18鍙峰彉棰戞帶鍒跺浘.18鍙锋车鍑哄彛鍘嬪姏",
+            "涓�杈撴按娉�18鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�",
+            "涓�杈撴按娉�18鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�",
+            "涓�杈撴按娉�18鍙峰彉棰戝崟娉�.姘存车杞��",
+            "涓�杈撴按6KV_閰嶇數鏌淿M111.鎬绘湁鍔熷姛鐜�",
+            //"涓�杈撴按6KV_閰嶇數鏌淿M111.鏈夊姛鐢靛害",
+            "HF涓�杈撴按娉垫埧鎬诲浘.涓�杈撴按鏂板墠姹犳恫浣�"
+        };
+
+        /// <summary>
+        /// HistoryShuShuiTagCodeMapping
+        /// </summary>
+        public static readonly Dictionary<string, string> HistoryShuShuiCodeTagMappingDict = new Dictionary<string, string>() {
+            // 浜屽彇鐩稿叧
+            { 闀挎睙姘翠綅, "闀挎睙绠$綉鍥�.XTB_QCYW" },
+            { 浜屽彇鍓嶆睜娑蹭綅, "浜屽彇姘�1鍙蜂富姘存车.鍓嶆睜娑蹭綅" },
+            { 闄堣姘村簱姘翠綅, "闄堣姘村簱娑蹭綅" },
+            { 浜屽彇1娉礯鏈夊姛鍔熺巼, "浜屽彇姘撮珮鍘�1鍙蜂富姘存车.鏈夊姛鍔熺巼" },
+            { 浜屽彇2娉礯鏈夊姛鍔熺巼, "浜屽彇姘撮珮鍘�2鍙蜂富姘存车.鏈夊姛鍔熺巼" },
+            { 浜屽彇3娉礯鏈夊姛鍔熺巼, "浜屽彇姘撮珮鍘�3鍙蜂富姘存车.鏈夊姛鍔熺巼" },
+            { 浜屽彇4娉礯鏈夊姛鍔熺巼, "浜屽彇姘撮珮鍘�4鍙蜂富姘存车.鏈夊姛鍔熺巼" },
+            { 浜屽彇5娉礯鏈夊姛鍔熺巼, "浜屽彇姘撮珮鍘�5鍙蜂富姘存车.鏈夊姛鍔熺巼" },
+            { 浜屽彇1娉礯鍑哄彛鍘嬪姏, "浜屽彇姘�1鍙蜂富姘存车.鍑哄彛鍘嬪姏" },
+            { 浜屽彇2娉礯鍑哄彛鍘嬪姏, "浜屽彇姘�2鍙蜂富姘存车.鍑哄彛鍘嬪姏" },
+            { 浜屽彇3娉礯鍑哄彛鍘嬪姏, "浜屽彇姘�3鍙蜂富姘存车.鍑哄彛鍘嬪姏" },
+            { 浜屽彇4娉礯鍑哄彛鍘嬪姏, "浜屽彇姘�4鍙蜂富姘存车.鍑哄彛鍘嬪姏" },
+            { 浜屽彇5娉礯鍑哄彛鍘嬪姏, "浜屽彇姘�5鍙蜂富姘存车.鍑哄彛鍘嬪姏" },
+            { 浜屽彇1娉礯姘存车_杩愯鐘舵��, "浜屽彇姘�1鍙蜂富姘存车.姘存车杩愯鐘舵��" },
+            { 浜屽彇2娉礯姘存车_杩愯鐘舵��, "浜屽彇姘�2鍙蜂富姘存车.姘存车杩愯鐘舵��" },
+            { 浜屽彇3娉礯姘存车_杩愯鐘舵��, "浜屽彇姘�3鍙蜂富姘存车.姘存车杩愯鐘舵��" },
+            { 浜屽彇4娉礯姘存车_杩愯鐘舵��, "浜屽彇姘�4鍙蜂富姘存车.姘存车杩愯鐘舵��" },
+            { 浜屽彇5娉礯姘存车_杩愯鐘舵��, "浜屽彇姘�5鍙蜂富姘存车.姘存车杩愯鐘舵��" },
+            { 浜屽彇1娉礯鏈夊姛鐢佃兘, "浜屽彇姘撮珮鍘�1鍙蜂富姘存车.鏈夊姛鐢佃兘" },
+            { 浜屽彇2娉礯鏈夊姛鐢佃兘, "浜屽彇姘撮珮鍘�2鍙蜂富姘存车.鏈夊姛鐢佃兘" },
+            { 浜屽彇3娉礯鏈夊姛鐢佃兘, "浜屽彇姘撮珮鍘�3鍙蜂富姘存车.鏈夊姛鐢佃兘" },
+            { 浜屽彇4娉礯鏈夊姛鐢佃兘, "浜屽彇姘撮珮鍘�4鍙蜂富姘存车.鏈夊姛鐢佃兘" },
+            { 浜屽彇5娉礯鏈夊姛鐢佃兘, "浜屽彇姘撮珮鍘�5鍙蜂富姘存车.鏈夊姛鐢佃兘" },
+            { 浜屽彇1娉礯绱娴侀噺, "浜屽彇姘�1鍙蜂富姘存车.绱娴侀噺" },
+            { 浜屽彇2娉礯绱娴侀噺, "浜屽彇姘�2鍙蜂富姘存车.绱娴侀噺" },
+            { 浜屽彇3娉礯绱娴侀噺, "浜屽彇姘�3鍙蜂富姘存车.绱娴侀噺" },
+            { 浜屽彇4娉礯绱娴侀噺, "浜屽彇姘�4鍙蜂富姘存车.绱娴侀噺" },
+            { 浜屽彇5娉礯绱娴侀噺, "浜屽彇姘�5鍙蜂富姘存车.绱娴侀噺" },
+            { 浜屽彇1娉礯鐬椂娴侀噺, "浜屽彇姘�1鍙蜂富姘存车.鐬椂娴侀噺" },
+            { 浜屽彇2娉礯鐬椂娴侀噺, "浜屽彇姘�2鍙蜂富姘存车.鐬椂娴侀噺" },
+            { 浜屽彇3娉礯鐬椂娴侀噺, "浜屽彇姘�3鍙蜂富姘存车.鐬椂娴侀噺" },
+            { 浜屽彇4娉礯鐬椂娴侀噺, "浜屽彇姘�4鍙蜂富姘存车.鐬椂娴侀噺" },
+            { 浜屽彇5娉礯鐬椂娴侀噺, "浜屽彇姘�5鍙蜂富姘存车.鐬椂娴侀噺" },
+            //{ 浜屽彇1娉礯绱杩愯鏃堕棿, "浜屽彇姘�1鍙蜂富姘存车.绱杩愯鏃堕棿" },
+            //{ 浜屽彇2娉礯绱杩愯鏃堕棿, "浜屽彇姘�2鍙蜂富姘存车.绱杩愯鏃堕棿" },
+            //{ 浜屽彇3娉礯绱杩愯鏃堕棿, "浜屽彇姘�3鍙蜂富姘存车.绱杩愯鏃堕棿" },
+            //{ 浜屽彇4娉礯绱杩愯鏃堕棿, "浜屽彇姘�4鍙蜂富姘存车.绱杩愯鏃堕棿" },
+            //{ 浜屽彇5娉礯绱杩愯鏃堕棿, "浜屽彇姘�5鍙蜂富姘存车.绱杩愯鏃堕棿" },
+            { 浜屽彇1娉礯妫�淇姸鎬�, "浜屽彇姘�1鍙蜂富姘存车.妫�淇姸鎬�" },
+            { 浜屽彇2娉礯妫�淇姸鎬�, "浜屽彇姘�2鍙蜂富姘存车.妫�淇姸鎬�" },
+            { 浜屽彇3娉礯妫�淇姸鎬�, "浜屽彇姘�3鍙蜂富姘存车.妫�淇姸鎬�" },
+            { 浜屽彇4娉礯妫�淇姸鎬�, "浜屽彇姘�4鍙蜂富姘存车.妫�淇姸鎬�" },
+            { 浜屽彇5娉礯妫�淇姸鎬�, "浜屽彇姘�5鍙蜂富姘存车.妫�淇姸鎬�" },
+            { 浜屽彇1娉礯绱杩愯鏃堕棿_鍘嗗彶, "浜屽彇姘�1鍙蜂富姘存车.绱杩愯鏃堕棿" },
+            { 浜屽彇2娉礯绱杩愯鏃堕棿_鍘嗗彶, "浜屽彇姘�2鍙蜂富姘存车.绱杩愯鏃堕棿" },
+            { 浜屽彇3娉礯绱杩愯鏃堕棿_鍘嗗彶, "浜屽彇姘�3鍙蜂富姘存车.绱杩愯鏃堕棿" },
+            { 浜屽彇4娉礯绱杩愯鏃堕棿_鍘嗗彶, "浜屽彇姘�4鍙蜂富姘存车.绱杩愯鏃堕棿" },
+            { 浜屽彇5娉礯绱杩愯鏃堕棿_鍘嗗彶, "浜屽彇姘�5鍙蜂富姘存车.绱杩愯鏃堕棿" },
+
+            // 涓�杈撶浉鍏�
+            { 鍢夊畾1绾縚鐬椂娴侀噺, "鍢夊畾鏁版嵁.1绾跨灛鏃舵祦閲�" },
+            { 鍢夊畾2绾縚鐬椂娴侀噺, "鍢夊畾鏁版嵁.2绾跨灛鏃舵祦閲�" },
+            { 鍢夊畾3绾縚鐬椂娴侀噺, "鍢夊畾鏁版嵁.3绾跨灛鏃舵祦閲�" },
+            { 鍢夊畾1绾縚鐬椂娴侀噺_闀挎睙绠$綉鍥�, "鍢夊畾鏁版嵁.1绾跨灛鏃舵祦閲�" },
+            { 鍢夊畾2绾縚鐬椂娴侀噺_闀挎睙绠$綉鍥�, "鍢夊畾鏁版嵁.2绾跨灛鏃舵祦閲�" },
+            { 鍢夊畾3绾縚鐬椂娴侀噺_闀挎睙绠$綉鍥�, "鍢夊畾鏁版嵁.3绾跨灛鏃舵祦閲�" },
+            { 鍢夊畾1绾縚琛ㄥご绱, "鍢夊畾鏁版嵁.1绾胯〃澶寸疮璁�" },
+            { 鍢夊畾2绾縚琛ㄥご绱, "鍢夊畾鏁版嵁.2绾胯〃澶寸疮璁�" },
+            { 鍢夊畾3绾縚琛ㄥご绱, "鍢夊畾鏁版嵁.3绾胯〃澶寸疮璁�" },
+            { 鍢夊畾1绾縚绱娴侀噺_闀挎睙绠$綉鍥�, "鍢夊畾鏁版嵁.1绾胯〃澶寸疮璁�" },
+            { 鍢夊畾2绾縚绱娴侀噺_闀挎睙绠$綉鍥�, "鍢夊畾鏁版嵁.2绾胯〃澶寸疮璁�" },
+            { 鍢夊畾3绾縚绱娴侀噺_闀挎睙绠$綉鍥�, "鍢夊畾鏁版嵁.3绾胯〃澶寸疮璁�" },
+            { 鍢夊畾1绾縚鍘嬪姏, "鍢夊畾鏁版嵁.1绾垮帇鍔�" },
+            { 鍢夊畾2绾縚鍘嬪姏, "鍢夊畾鏁版嵁.2绾垮帇鍔�" },
+            { 鍢夊畾3绾縚鍘嬪姏, "鍢夊畾鏁版嵁.3绾垮帇鍔�" },
+            { 鍢夊畾1绾縚鍘嬪姏_闀挎睙绠$綉鍥�, "鍢夊畾鏁版嵁.1绾垮帇鍔�" },
+            { 鍢夊畾2绾縚鍘嬪姏_闀挎睙绠$綉鍥�, "鍢夊畾鏁版嵁.2绾垮帇鍔�" },
+            { 鍢夊畾3绾縚鍘嬪姏_闀挎睙绠$綉鍥�, "鍢夊畾鏁版嵁.3绾垮帇鍔�" },
+            { 涓�杈揰鑰佸墠姹犲崡渚ф恫浣�, "HF涓�杈撴按娉垫埧鎬诲浘.涓�杈撴按鑰佸墠姹犲崡渚ф恫浣�" },
+            { 涓�杈揰鑰佸墠姹犲寳渚ф恫浣�, "涓�杈撴按14鍙峰彉棰戝崟娉�.鍓嶆睜娑蹭綅" },
+            { 涓�杈揰鏂板墠姹犳恫浣�, "HF涓�杈撴按娉垫埧鎬诲浘.涓�杈撴按鏂板墠姹犳恫浣�" },
+            { 涓�杈�11娉礯鍑哄彛鍘嬪姏, "HF涓�杈撴按11鍙峰彉棰戞帶鍒剁敾闈�.11鍙锋车鍑哄彛鍘嬪姏" },
+            { 涓�杈�12娉礯鍑哄彛鍘嬪姏, "HF涓�杈撴按12鍙峰彉棰戞帶鍒剁敾闈�.12鍙锋车鍑哄彛鍘嬪姏" },
+            { 涓�杈�13娉礯鍑哄彛鍘嬪姏, "HF涓�杈撴按13鍙峰彉棰戞帶鍒剁敾闈�.13鍙锋车鍑哄彛鍘嬪姏" },
+            { 涓�杈�14娉礯鍑哄彛鍘嬪姏, "HF涓�杈撴按14鍙峰彉棰戞帶鍒跺浘.14鍙锋车鍑哄彛鍘嬪姏" },
+            { 涓�杈�15娉礯鍑哄彛鍘嬪姏, "HF涓�杈撴按15鍙峰伐棰戞帶鍒跺浘.15鍙锋车鍑哄彛鍘嬪姏" },
+            { 涓�杈�16娉礯鍑哄彛鍘嬪姏, "HF涓�杈撴按16鍙峰伐棰戞帶鍒跺浘.16鍙锋车鍑哄彛鍘嬪姏" },
+            { 涓�杈�17娉礯鍑哄彛鍘嬪姏, "HF涓�杈撴按17鍙峰彉棰戞帶鍒跺浘.17鍙锋车鍑哄彛鍘嬪姏" },
+            { 涓�杈�18娉礯鍑哄彛鍘嬪姏, "HF涓�杈撴按18鍙峰彉棰戞帶鍒跺浘.18鍙锋车鍑哄彛鍘嬪姏" },
+            { 涓�杈�11娉礯杞��, "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.姘存车杞��" },
+            { 涓�杈�12娉礯杞��, "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.姘存车杞��" },
+            { 涓�杈�13娉礯杞��, "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.姘存车杞��" },
+            { 涓�杈�14娉礯杞��, "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.姘存车杞��" },
+            { 涓�杈�17娉礯杞��, "涓�杈撴按娉�17鍙峰彉棰戝崟娉�.姘存车杞��" },
+            { 涓�杈�18娉礯杞��, "涓�杈撴按娉�18鍙峰彉棰戝崟娉�.姘存车杞��" },
+            { 涓�杈�11娉礯棰戠巼, "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�" },
+            { 涓�杈�12娉礯棰戠巼, "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.鍙橀鍣ㄩ鐜�" },
+            { 涓�杈�13娉礯棰戠巼, "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�" },
+            { 涓�杈�14娉礯棰戠巼, "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�" },
+            { 涓�杈�17娉礯棰戠巼, "涓�杈撴按娉�17鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�" },
+            { 涓�杈�18娉礯棰戠巼, "涓�杈撴按娉�18鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�" },
+            { 涓�杈�11娉礯杩愯鐘舵��, "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�" },
+            { 涓�杈�12娉礯杩愯鐘舵��, "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.鍙橀鍣ㄨ繍琛�" },
+            { 涓�杈�13娉礯杩愯鐘舵��, "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�" },
+            { 涓�杈�14娉礯杩愯鐘舵��, "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�" },
+            { 涓�杈�15娉礯杩愯鐘舵��, "HF涓�杈撴按15鍙峰伐棰戞帶鍒跺浘.15#姘存车杩愯" },
+            { 涓�杈�16娉礯杩愯鐘舵��, "HF涓�杈撴按16鍙峰伐棰戞帶鍒跺浘.16#姘存车杩愯" },
+            { 涓�杈�17娉礯杩愯鐘舵��, "涓�杈撴按娉�17鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�" },
+            { 涓�杈�18娉礯杩愯鐘舵��, "涓�杈撴按娉�18鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�" },
+            { 涓�杈�11娉礯杩愯鏃堕棿, "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.杩愯鏃堕棿" },
+            { 涓�杈�12娉礯杩愯鏃堕棿, "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.杩愯鏃堕棿" },
+            { 涓�杈�13娉礯杩愯鏃堕棿, "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.杩愯鏃堕棿" },
+            { 涓�杈�14娉礯杩愯鏃堕棿, "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.杩愯鏃堕棿" },
+            { 涓�杈�11娉礯绱杩愯鏃堕棿, "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿" },
+            { 涓�杈�12娉礯绱杩愯鏃堕棿, "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.姘存车杩愯鏃堕棿" },
+            { 涓�杈�13娉礯绱杩愯鏃堕棿, "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿" },
+            { 涓�杈�14娉礯绱杩愯鏃堕棿, "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿" },
+            { 涓�杈�15娉礯绱杩愯鏃堕棿, "HF涓�杈撴按15鍙峰伐棰戞帶鍒跺浘.姘存车绱杩愯鏃堕棿" },
+            { 涓�杈�16娉礯绱杩愯鏃堕棿, "HF涓�杈撴按16鍙峰伐棰戞帶鍒跺浘.姘存车绱杩愯鏃堕棿" },
+            { 涓�杈�17娉礯绱杩愯鏃堕棿, "涓�杈撴按娉�17鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿" },
+            { 涓�杈�18娉礯绱杩愯鏃堕棿, "涓�杈撴按娉�18鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿" },
+            { 涓�杈�11娉礯鏈夊姛鍔熺巼, "11鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�" },
+            { 涓�杈�12娉礯鏈夊姛鍔熺巼, "12鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�" },
+            { 涓�杈�13娉礯鏈夊姛鍔熺巼, "13鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�" },
+            { 涓�杈�14娉礯鏈夊姛鍔熺巼, "14鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�" },
+            { 涓�杈�15娉礯鏈夊姛鍔熺巼, "15鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�" },
+            { 涓�杈�16娉礯鏈夊姛鍔熺巼, "涓�杈撴按6KV_閰嶇數鏌淿M112.鎬绘湁鍔熷姛鐜�" },
+            { 涓�杈�17娉礯鏈夊姛鍔熺巼, "涓�杈撴按6KV_閰嶇數鏌淿M108.鎬绘湁鍔熷姛鐜�" },
+            { 涓�杈�18娉礯鏈夊姛鍔熺巼, "涓�杈撴按6KV_閰嶇數鏌淿M111.鎬绘湁鍔熷姛鐜�" },
+            { 涓�杈�11娉礯绱杩愯鏃堕棿_鍘嗗彶, "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿" },
+            { 涓�杈�12娉礯绱杩愯鏃堕棿_鍘嗗彶, "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.姘存车杩愯鏃堕棿" },
+            { 涓�杈�13娉礯绱杩愯鏃堕棿_鍘嗗彶, "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿" },
+            { 涓�杈�14娉礯绱杩愯鏃堕棿_鍘嗗彶, "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿" },
+            { 涓�杈�15娉礯绱杩愯鏃堕棿_鍘嗗彶, "HF涓�杈撴按15鍙峰伐棰戞帶鍒跺浘.姘存车绱杩愯鏃堕棿" },
+            { 涓�杈�16娉礯绱杩愯鏃堕棿_鍘嗗彶, "HF涓�杈撴按16鍙峰伐棰戞帶鍒跺浘.姘存车绱杩愯鏃堕棿" },
+            { 涓�杈�17娉礯绱杩愯鏃堕棿_鍘嗗彶, "涓�杈撴按娉�17鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿" },
+            { 涓�杈�18娉礯绱杩愯鏃堕棿_鍘嗗彶, "涓�杈撴按娉�18鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿" },
+            { 涓�杈�11娉礯鐘舵��, "涓�杈撴按11鍙疯緟鍔╄澶�.涓夋。浣嶅垏鎹�" },
+            { 涓�杈�12娉礯鐘舵��, "涓�杈撴按12鍙疯緟鍔╄澶�.涓夋。浣嶅垏鎹�" },
+            { 涓�杈�13娉礯鐘舵��, "涓�杈撴按13鍙疯緟鍔╄澶�.涓夋。浣嶅垏鎹�" },
+            { 涓�杈�14娉礯鐘舵��, "涓�杈撴按14鍙疯緟鍔╄澶�.涓夋。浣嶅垏鎹�" },
+            { 涓�杈�15娉礯鐘舵��, "涓�杈撴按15鍙疯緟鍔╄澶囧浘.涓夋。浣嶅垏鎹�" },
+            { 涓�杈�16娉礯鐘舵��, "涓�杈撴按16鍙疯緟鍔╄澶囧浘.涓夋。浣嶅垏鎹�" },
+            { 涓�杈�17娉礯鐘舵��, "涓�杈撴按17鍙疯緟鍔╄澶�.涓夋。浣嶅垏鎹�" },
+            { 涓�杈�18娉礯鐘舵��, "涓�杈撴按18鍙疯緟鍔╄澶�.涓夋。浣嶅垏鎹�" },
+
+            // 浜岃緭鐩稿叧
+            { DN2400_鍑哄巶鍘嬪姏, "2400鎬荤.鍑哄巶鍘嬪姏" },
+            { DN2700_鍑哄巶鍘嬪姏, "2700鎬荤.鍑哄巶鍘嬪姏" },
+            { DN2400_鍑哄巶鍘嬪姏_闀挎睙绠$綉鍥�, "2400鎬荤.鍑哄巶鍘嬪姏" },
+            { DN2700_鍑哄巶鍘嬪姏_闀挎睙绠$綉鍥�, "2700鎬荤.鍑哄巶鍘嬪姏" },
+            { DN2400鎬荤_鐬椂娴侀噺, "2400鎬荤.鐬椂娴侀噺" },
+            { DN2700鎬荤_鐬椂娴侀噺, "2700鎬荤.鐬椂娴侀噺" },
+            { DN2400鎬荤_鐬椂娴侀噺_闀挎睙绠$綉鍥�, "2400鎬荤.鐬椂娴侀噺" },
+            { DN2700鎬荤_鐬椂娴侀噺_闀挎睙绠$綉鍥�, "2700鎬荤.鐬椂娴侀噺" },
+            { DN2400鎬荤_瀹為檯绱娴侀噺, "2400鎬荤.瀹為檯绱娴侀噺" },
+            { DN2700鎬荤_瀹為檯绱娴侀噺, "2700鎬荤.瀹為檯绱娴侀噺" },
+            { DN2400鎬荤_绱娴侀噺_闀挎睙绠$綉鍥�, "2400鎬荤.瀹為檯绱娴侀噺" },
+            { DN2700鎬荤_绱娴侀噺_闀挎睙绠$綉鍥�, "2700鎬荤.瀹為檯绱娴侀噺" },
+            { 浜岃緭21娉礯娉典簳娑蹭綅, "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅" },
+            { 浜岃緭22娉礯娉典簳娑蹭綅, "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅" },
+            { 浜岃緭23娉礯娉典簳娑蹭綅, "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅" },
+            { 浜岃緭24娉礯娉典簳娑蹭綅, "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅" },
+            { 浜岃緭25娉礯娉典簳娑蹭綅, "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅" },
+            { 浜岃緭26娉礯娉典簳娑蹭綅, "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅" },
+            { 浜岃緭27娉礯娉典簳娑蹭綅, "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅" },
+            { 浜岃緭21娉礯鍑烘按鍘嬪姏, "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏" },
+            { 浜岃緭22娉礯鍑烘按鍘嬪姏, "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏" },
+            { 浜岃緭23娉礯鍑烘按鍘嬪姏, "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏" },
+            { 浜岃緭24娉礯鍑烘按鍘嬪姏, "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏" },
+            { 浜岃緭25娉礯鍑烘按鍘嬪姏, "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏" },
+            { 浜岃緭26娉礯鍑烘按鍘嬪姏, "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏" },
+            { 浜岃緭27娉礯鍑烘按鍘嬪姏, "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏" },
+            { 浜岃緭21娉礯鐬椂娴侀噺, "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺" },
+            { 浜岃緭22娉礯鐬椂娴侀噺, "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺" },
+            { 浜岃緭23娉礯鐬椂娴侀噺, "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺" },
+            { 浜岃緭24娉礯鐬椂娴侀噺, "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺" },
+            { 浜岃緭25娉礯鐬椂娴侀噺, "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺" },
+            { 浜岃緭26娉礯鐬椂娴侀噺, "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺" },
+            { 浜岃緭27娉礯鐬椂娴侀噺, "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺" },
+            { 浜岃緭21娉礯绱娴侀噺, "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺" },
+            { 浜岃緭22娉礯绱娴侀噺, "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺" },
+            { 浜岃緭23娉礯绱娴侀噺, "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺" },
+            { 浜岃緭24娉礯绱娴侀噺, "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺" },
+            { 浜岃緭25娉礯绱娴侀噺, "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺" },
+            { 浜岃緭26娉礯绱娴侀噺, "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺" },
+            { 浜岃緭27娉礯绱娴侀噺, "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺" },
+            { 浜岃緭21娉礯鏈夊姛鐢佃兘, "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鐢佃兘" },
+            { 浜岃緭22娉礯鏈夊姛鐢佃兘, "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鐢佃兘" },
+            { 浜岃緭23娉礯鏈夊姛鐢佃兘, "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鐢佃兘" },
+            { 浜岃緭24娉礯鏈夊姛鐢佃兘, "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鐢佃兘" },
+            { 浜岃緭25娉礯鏈夊姛鐢佃兘, "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鐢佃兘" },
+            { 浜岃緭26娉礯鏈夊姛鐢佃兘, "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鐢佃兘" },
+            { 浜岃緭27娉礯鏈夊姛鐢佃兘, "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鐢佃兘" },
+            { 浜岃緭22娉礯棰戠巼, "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.棰戠巼" },
+            { 浜岃緭23娉礯棰戠巼, "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.棰戠巼" },
+            { 浜岃緭24娉礯棰戠巼, "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.棰戠巼" },
+            { 浜岃緭25娉礯棰戠巼, "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.棰戠巼" },
+            { 浜岃緭26娉礯棰戠巼, "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.棰戠巼" },
+            { 浜岃緭27娉礯棰戠巼, "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.棰戠巼" },
+            { 浜岃緭21娉礯杞��, "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.杞��" },
+            { 浜岃緭22娉礯杞��, "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.杞��" },
+            { 浜岃緭23娉礯杞��, "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.杞��" },
+            { 浜岃緭24娉礯杞��, "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.杞��" },
+            { 浜岃緭25娉礯杞��, "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.杞��" },
+            { 浜岃緭26娉礯杞��, "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.杞��" },
+            { 浜岃緭27娉礯杞��, "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.杞��" },
+            { 浜岃緭21娉礯鏈夊姛鍔熺巼, "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鍔熺巼" },
+            { 浜岃緭22娉礯鏈夊姛鍔熺巼, "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鍔熺巼" },
+            { 浜岃緭23娉礯鏈夊姛鍔熺巼, "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鍔熺巼" },
+            { 浜岃緭24娉礯鏈夊姛鍔熺巼, "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鍔熺巼" },
+            { 浜岃緭25娉礯鏈夊姛鍔熺巼, "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鍔熺巼" },
+            { 浜岃緭26娉礯鏈夊姛鍔熺巼, "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鍔熺巼" },
+            { 浜岃緭27娉礯鏈夊姛鍔熺巼, "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鍔熺巼" },
+            { 浜岃緭21娉礯杩愯鐘舵��, "浜岃緭姘�21鍙锋按娉佃鍥�.娉佃繍琛�" },
+            { 浜岃緭22娉礯杩愯鐘舵��, "浜岃緭姘�22鍙锋按娉佃鍥�.娉佃繍琛�" },
+            { 浜岃緭23娉礯杩愯鐘舵��, "浜岃緭姘�23鍙锋按娉佃蒋鍚姩.杩愯" },
+            { 浜岃緭24娉礯杩愯鐘舵��, "浜岃緭姘�24鍙锋按娉佃鍥�.娉佃繍琛�" },
+            { 浜岃緭25娉礯杩愯鐘舵��, "浜岃緭姘�25鍙锋按娉佃鍥�.娉佃繍琛�" },
+            { 浜岃緭26娉礯杩愯鐘舵��, "浜岃緭姘�26鍙锋按娉佃鍥�.娉佃繍琛�" },
+            { 浜岃緭27娉礯杩愯鐘舵��, "浜岃緭姘�27鍙锋按娉靛彉棰戝櫒.杩愯鐘舵��" },
+            { 浜岃緭21娉礯杩愯鏃堕棿, "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿" },
+            { 浜岃緭22娉礯杩愯鏃堕棿, "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿" },
+            { 浜岃緭23娉礯杩愯鏃堕棿, "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿" },
+            { 浜岃緭24娉礯杩愯鏃堕棿, "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿" },
+            { 浜岃緭25娉礯杩愯鏃堕棿, "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿" },
+            { 浜岃緭26娉礯杩愯鏃堕棿, "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿" },
+            { 浜岃緭27娉礯杩愯鏃堕棿, "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿" },
+            { 浜岃緭21娉礯鐘舵��, "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.鐘舵��" },
+            { 浜岃緭22娉礯鐘舵��, "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.鐘舵��" },
+            { 浜岃緭23娉礯鐘舵��, "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.鐘舵��" },
+            { 浜岃緭24娉礯鐘舵��, "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.鐘舵��" },
+            { 浜岃緭25娉礯鐘舵��, "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.鐘舵��" },
+            { 浜岃緭26娉礯鐘舵��, "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.鐘舵��" },
+            { 浜岃緭27娉礯鐘舵��, "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.鐘舵��" },
+            { 浜岃緭21娉礯绱杩愯鏃堕棿_鍘嗗彶, "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿" },
+            { 浜岃緭22娉礯绱杩愯鏃堕棿_鍘嗗彶, "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿" },
+            { 浜岃緭23娉礯绱杩愯鏃堕棿_鍘嗗彶, "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿" },
+            { 浜岃緭24娉礯绱杩愯鏃堕棿_鍘嗗彶, "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿" },
+            { 浜岃緭25娉礯绱杩愯鏃堕棿_鍘嗗彶, "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿" },
+            { 浜岃緭26娉礯绱杩愯鏃堕棿_鍘嗗彶, "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿" },
+            { 浜岃緭27娉礯绱杩愯鏃堕棿_鍘嗗彶, "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿" }
+        }.GroupBy(kvp => kvp.Key)              // 鎸塊ey鍒嗙粍
+    .ToDictionary(g => g.Key, g => g.Last().Value); // 鍙栨渶鍚庝竴涓猇alue;;
+
+        /// <summary>
+        /// HistoryShuShuiTagCodeMapping
+        /// </summary>
+        public static readonly Dictionary<string, string> HistoryShuShuiTagCodeMappingDict = new Dictionary<string, string>()
+        {
+            // 浜屽彇鐩稿叧
+            { "闀挎睙绠$綉鍥�.XTB_QCYW",闀挎睙姘翠綅 },
+            { "浜屽彇姘�1鍙蜂富姘存车.鍓嶆睜娑蹭綅",浜屽彇鍓嶆睜娑蹭綅 },
+            { "闄堣姘村簱娑蹭綅",闄堣姘村簱姘翠綅 },
+            { "浜屽彇姘撮珮鍘�1鍙蜂富姘存车.鏈夊姛鍔熺巼",浜屽彇1娉礯鏈夊姛鍔熺巼 },
+            { "浜屽彇姘撮珮鍘�2鍙蜂富姘存车.鏈夊姛鍔熺巼",浜屽彇2娉礯鏈夊姛鍔熺巼 },
+            { "浜屽彇姘撮珮鍘�3鍙蜂富姘存车.鏈夊姛鍔熺巼",浜屽彇3娉礯鏈夊姛鍔熺巼 },
+            { "浜屽彇姘撮珮鍘�4鍙蜂富姘存车.鏈夊姛鍔熺巼",浜屽彇4娉礯鏈夊姛鍔熺巼 },
+            { "浜屽彇姘撮珮鍘�5鍙蜂富姘存车.鏈夊姛鍔熺巼",浜屽彇5娉礯鏈夊姛鍔熺巼 },
+            { "浜屽彇姘�1鍙蜂富姘存车.鍑哄彛鍘嬪姏",浜屽彇1娉礯鍑哄彛鍘嬪姏 },
+            { "浜屽彇姘�2鍙蜂富姘存车.鍑哄彛鍘嬪姏",浜屽彇2娉礯鍑哄彛鍘嬪姏 },
+            { "浜屽彇姘�3鍙蜂富姘存车.鍑哄彛鍘嬪姏",浜屽彇3娉礯鍑哄彛鍘嬪姏 },
+            { "浜屽彇姘�4鍙蜂富姘存车.鍑哄彛鍘嬪姏",浜屽彇4娉礯鍑哄彛鍘嬪姏 },
+            { "浜屽彇姘�5鍙蜂富姘存车.鍑哄彛鍘嬪姏",浜屽彇5娉礯鍑哄彛鍘嬪姏 },
+            { "浜屽彇姘�1鍙蜂富姘存车.姘存车杩愯鐘舵��",浜屽彇1娉礯姘存车_杩愯鐘舵�� },
+            { "浜屽彇姘�2鍙蜂富姘存车.姘存车杩愯鐘舵��",浜屽彇2娉礯姘存车_杩愯鐘舵�� },
+            { "浜屽彇姘�3鍙蜂富姘存车.姘存车杩愯鐘舵��",浜屽彇3娉礯姘存车_杩愯鐘舵�� },
+            { "浜屽彇姘�4鍙蜂富姘存车.姘存车杩愯鐘舵��",浜屽彇4娉礯姘存车_杩愯鐘舵�� },
+            { "浜屽彇姘�5鍙蜂富姘存车.姘存车杩愯鐘舵��",浜屽彇5娉礯姘存车_杩愯鐘舵�� },
+            { "浜屽彇姘撮珮鍘�1鍙蜂富姘存车.鏈夊姛鐢佃兘",浜屽彇1娉礯鏈夊姛鐢佃兘 },
+            { "浜屽彇姘撮珮鍘�2鍙蜂富姘存车.鏈夊姛鐢佃兘",浜屽彇2娉礯鏈夊姛鐢佃兘 },
+            { "浜屽彇姘撮珮鍘�3鍙蜂富姘存车.鏈夊姛鐢佃兘",浜屽彇3娉礯鏈夊姛鐢佃兘 },
+            { "浜屽彇姘撮珮鍘�4鍙蜂富姘存车.鏈夊姛鐢佃兘",浜屽彇4娉礯鏈夊姛鐢佃兘 },
+            { "浜屽彇姘撮珮鍘�5鍙蜂富姘存车.鏈夊姛鐢佃兘",浜屽彇5娉礯鏈夊姛鐢佃兘 },
+            { "浜屽彇姘�1鍙蜂富姘存车.绱娴侀噺",浜屽彇1娉礯绱娴侀噺 },
+            { "浜屽彇姘�2鍙蜂富姘存车.绱娴侀噺",浜屽彇2娉礯绱娴侀噺 },
+            { "浜屽彇姘�3鍙蜂富姘存车.绱娴侀噺",浜屽彇3娉礯绱娴侀噺 },
+            { "浜屽彇姘�4鍙蜂富姘存车.绱娴侀噺",浜屽彇4娉礯绱娴侀噺 },
+            { "浜屽彇姘�5鍙蜂富姘存车.绱娴侀噺",浜屽彇5娉礯绱娴侀噺 },
+            { "浜屽彇姘�1鍙蜂富姘存车.鐬椂娴侀噺",浜屽彇1娉礯鐬椂娴侀噺 },
+            { "浜屽彇姘�2鍙蜂富姘存车.鐬椂娴侀噺",浜屽彇2娉礯鐬椂娴侀噺 },
+            { "浜屽彇姘�3鍙蜂富姘存车.鐬椂娴侀噺",浜屽彇3娉礯鐬椂娴侀噺 },
+            { "浜屽彇姘�4鍙蜂富姘存车.鐬椂娴侀噺",浜屽彇4娉礯鐬椂娴侀噺 },
+            { "浜屽彇姘�5鍙蜂富姘存车.鐬椂娴侀噺",浜屽彇5娉礯鐬椂娴侀噺 },
+            //{ "浜屽彇姘�1鍙蜂富姘存车.绱杩愯鏃堕棿",浜屽彇1娉礯绱杩愯鏃堕棿 },
+            //{ "浜屽彇姘�2鍙蜂富姘存车.绱杩愯鏃堕棿",浜屽彇2娉礯绱杩愯鏃堕棿 },
+            //{ "浜屽彇姘�3鍙蜂富姘存车.绱杩愯鏃堕棿",浜屽彇3娉礯绱杩愯鏃堕棿 },
+            //{ "浜屽彇姘�4鍙蜂富姘存车.绱杩愯鏃堕棿",浜屽彇4娉礯绱杩愯鏃堕棿 },
+            //{ "浜屽彇姘�5鍙蜂富姘存车.绱杩愯鏃堕棿",浜屽彇5娉礯绱杩愯鏃堕棿 },
+            { "浜屽彇姘�1鍙蜂富姘存车.妫�淇姸鎬�",浜屽彇1娉礯妫�淇姸鎬� },
+            { "浜屽彇姘�2鍙蜂富姘存车.妫�淇姸鎬�",浜屽彇2娉礯妫�淇姸鎬� },
+            { "浜屽彇姘�3鍙蜂富姘存车.妫�淇姸鎬�",浜屽彇3娉礯妫�淇姸鎬� },
+            { "浜屽彇姘�4鍙蜂富姘存车.妫�淇姸鎬�",浜屽彇4娉礯妫�淇姸鎬� },
+            { "浜屽彇姘�5鍙蜂富姘存车.妫�淇姸鎬�",浜屽彇5娉礯妫�淇姸鎬� },
+            { "浜屽彇姘�1鍙蜂富姘存车.绱杩愯鏃堕棿",浜屽彇1娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "浜屽彇姘�2鍙蜂富姘存车.绱杩愯鏃堕棿",浜屽彇2娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "浜屽彇姘�3鍙蜂富姘存车.绱杩愯鏃堕棿",浜屽彇3娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "浜屽彇姘�4鍙蜂富姘存车.绱杩愯鏃堕棿",浜屽彇4娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "浜屽彇姘�5鍙蜂富姘存车.绱杩愯鏃堕棿",浜屽彇5娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+
+            // 涓�杈撶浉鍏�
+            //{ "鍢夊畾鏁版嵁.1绾跨灛鏃舵祦閲�",鍢夊畾1绾縚鐬椂娴侀噺 },
+            //{ "鍢夊畾鏁版嵁.2绾跨灛鏃舵祦閲�",鍢夊畾2绾縚鐬椂娴侀噺 },
+            //{ "鍢夊畾鏁版嵁.3绾跨灛鏃舵祦閲�",鍢夊畾3绾縚鐬椂娴侀噺 },
+            { "鍢夊畾鏁版嵁.1绾跨灛鏃舵祦閲�",鍢夊畾1绾縚鐬椂娴侀噺_闀挎睙绠$綉鍥� },
+            { "鍢夊畾鏁版嵁.2绾跨灛鏃舵祦閲�",鍢夊畾2绾縚鐬椂娴侀噺_闀挎睙绠$綉鍥� },
+            { "鍢夊畾鏁版嵁.3绾跨灛鏃舵祦閲�",鍢夊畾3绾縚鐬椂娴侀噺_闀挎睙绠$綉鍥� },
+            //{ "鍢夊畾鏁版嵁.1绾胯〃澶寸疮璁�",鍢夊畾1绾縚琛ㄥご绱 },
+            //{ "鍢夊畾鏁版嵁.2绾胯〃澶寸疮璁�",鍢夊畾2绾縚琛ㄥご绱 },
+            //{ "鍢夊畾鏁版嵁.3绾胯〃澶寸疮璁�",鍢夊畾3绾縚琛ㄥご绱 },
+            { "鍢夊畾鏁版嵁.1绾胯〃澶寸疮璁�",鍢夊畾1绾縚绱娴侀噺_闀挎睙绠$綉鍥� },
+            { "鍢夊畾鏁版嵁.2绾胯〃澶寸疮璁�",鍢夊畾2绾縚绱娴侀噺_闀挎睙绠$綉鍥� },
+            { "鍢夊畾鏁版嵁.3绾胯〃澶寸疮璁�",鍢夊畾3绾縚绱娴侀噺_闀挎睙绠$綉鍥� },
+            //{ "鍢夊畾鏁版嵁.1绾垮帇鍔�",鍢夊畾1绾縚鍘嬪姏 },
+            //{ "鍢夊畾鏁版嵁.2绾垮帇鍔�",鍢夊畾2绾縚鍘嬪姏 },
+            //{ "鍢夊畾鏁版嵁.3绾垮帇鍔�",鍢夊畾3绾縚鍘嬪姏 },
+            { "鍢夊畾鏁版嵁.1绾垮帇鍔�",鍢夊畾1绾縚鍘嬪姏_闀挎睙绠$綉鍥� },
+            { "鍢夊畾鏁版嵁.2绾垮帇鍔�",鍢夊畾2绾縚鍘嬪姏_闀挎睙绠$綉鍥� },
+            { "鍢夊畾鏁版嵁.3绾垮帇鍔�",鍢夊畾3绾縚鍘嬪姏_闀挎睙绠$綉鍥� },
+            { "HF涓�杈撴按娉垫埧鎬诲浘.涓�杈撴按鑰佸墠姹犲崡渚ф恫浣�",涓�杈揰鑰佸墠姹犲崡渚ф恫浣� },
+            { "涓�杈撴按14鍙峰彉棰戝崟娉�.鍓嶆睜娑蹭綅",涓�杈揰鑰佸墠姹犲寳渚ф恫浣� },
+            { "HF涓�杈撴按娉垫埧鎬诲浘.涓�杈撴按鏂板墠姹犳恫浣�",涓�杈揰鏂板墠姹犳恫浣� },
+            { "HF涓�杈撴按11鍙峰彉棰戞帶鍒剁敾闈�.11鍙锋车鍑哄彛鍘嬪姏",涓�杈�11娉礯鍑哄彛鍘嬪姏 },
+            { "HF涓�杈撴按12鍙峰彉棰戞帶鍒剁敾闈�.12鍙锋车鍑哄彛鍘嬪姏",涓�杈�12娉礯鍑哄彛鍘嬪姏 },
+            { "HF涓�杈撴按13鍙峰彉棰戞帶鍒剁敾闈�.13鍙锋车鍑哄彛鍘嬪姏",涓�杈�13娉礯鍑哄彛鍘嬪姏 },
+            { "HF涓�杈撴按14鍙峰彉棰戞帶鍒跺浘.14鍙锋车鍑哄彛鍘嬪姏",涓�杈�14娉礯鍑哄彛鍘嬪姏 },
+            { "HF涓�杈撴按15鍙峰伐棰戞帶鍒跺浘.15鍙锋车鍑哄彛鍘嬪姏",涓�杈�15娉礯鍑哄彛鍘嬪姏 },
+            { "HF涓�杈撴按16鍙峰伐棰戞帶鍒跺浘.16鍙锋车鍑哄彛鍘嬪姏",涓�杈�16娉礯鍑哄彛鍘嬪姏 },
+            { "HF涓�杈撴按17鍙峰彉棰戞帶鍒跺浘.17鍙锋车鍑哄彛鍘嬪姏",涓�杈�17娉礯鍑哄彛鍘嬪姏 },
+            { "HF涓�杈撴按18鍙峰彉棰戞帶鍒跺浘.18鍙锋车鍑哄彛鍘嬪姏",涓�杈�18娉礯鍑哄彛鍘嬪姏 },
+            { "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.姘存车杞��",涓�杈�11娉礯杞�� },
+            { "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.姘存车杞��",涓�杈�12娉礯杞�� },
+            { "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.姘存车杞��",涓�杈�13娉礯杞�� },
+            { "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.姘存车杞��",涓�杈�14娉礯杞�� },
+            { "涓�杈撴按娉�17鍙峰彉棰戝崟娉�.姘存车杞��",涓�杈�17娉礯杞�� },
+            { "涓�杈撴按娉�18鍙峰彉棰戝崟娉�.姘存车杞��",涓�杈�18娉礯杞�� },
+            { "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�",涓�杈�11娉礯棰戠巼 },
+            { "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.鍙橀鍣ㄩ鐜�",涓�杈�12娉礯棰戠巼 },
+            { "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�",涓�杈�13娉礯棰戠巼 },
+            { "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�",涓�杈�14娉礯棰戠巼 },
+            { "涓�杈撴按娉�17鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�",涓�杈�17娉礯棰戠巼 },
+            { "涓�杈撴按娉�18鍙峰彉棰戝崟娉�.鍙橀鍣ㄩ鐜�",涓�杈�18娉礯棰戠巼 },
+            { "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�",涓�杈�11娉礯杩愯鐘舵�� },
+            { "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.鍙橀鍣ㄨ繍琛�",涓�杈�12娉礯杩愯鐘舵�� },
+            { "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�",涓�杈�13娉礯杩愯鐘舵�� },
+            { "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�",涓�杈�14娉礯杩愯鐘舵�� },
+            { "HF涓�杈撴按15鍙峰伐棰戞帶鍒跺浘.15#姘存车杩愯",涓�杈�15娉礯杩愯鐘舵�� },
+            { "HF涓�杈撴按16鍙峰伐棰戞帶鍒跺浘.16#姘存车杩愯",涓�杈�16娉礯杩愯鐘舵�� },
+            { "涓�杈撴按娉�17鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�",涓�杈�17娉礯杩愯鐘舵�� },
+            { "涓�杈撴按娉�18鍙峰彉棰戝崟娉�.鍙橀鍣ㄨ繍琛�",涓�杈�18娉礯杩愯鐘舵�� },
+            { "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.杩愯鏃堕棿",涓�杈�11娉礯杩愯鏃堕棿 },
+            { "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.杩愯鏃堕棿",涓�杈�12娉礯杩愯鏃堕棿 },
+            { "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.杩愯鏃堕棿",涓�杈�13娉礯杩愯鏃堕棿 },
+            { "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.杩愯鏃堕棿",涓�杈�14娉礯杩愯鏃堕棿 },
+            //{ "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿",涓�杈�11娉礯绱杩愯鏃堕棿 },
+            //{ "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.姘存车杩愯鏃堕棿",涓�杈�12娉礯绱杩愯鏃堕棿 },
+            //{ "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿",涓�杈�13娉礯绱杩愯鏃堕棿 },
+            //{ "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿",涓�杈�14娉礯绱杩愯鏃堕棿 },
+            //{ "HF涓�杈撴按15鍙峰伐棰戞帶鍒跺浘.姘存车绱杩愯鏃堕棿",涓�杈�15娉礯绱杩愯鏃堕棿 },
+            //{ "HF涓�杈撴按16鍙峰伐棰戞帶鍒跺浘.姘存车绱杩愯鏃堕棿",涓�杈�16娉礯绱杩愯鏃堕棿 },
+            //{ "涓�杈撴按娉�17鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿",涓�杈�17娉礯绱杩愯鏃堕棿 },
+            //{ "涓�杈撴按娉�18鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿",涓�杈�18娉礯绱杩愯鏃堕棿 },
+            { "11鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�",涓�杈�11娉礯鏈夊姛鍔熺巼 },
+            { "12鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�",涓�杈�12娉礯鏈夊姛鍔熺巼 },
+            { "13鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�",涓�杈�13娉礯鏈夊姛鍔熺巼 },
+            { "14鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�",涓�杈�14娉礯鏈夊姛鍔熺巼 },
+            { "15鍙�6KV閰嶇數鍙傛暟.鎬绘湁鍔熷姛鐜�",涓�杈�15娉礯鏈夊姛鍔熺巼 },
+            { "涓�杈撴按6KV_閰嶇數鏌淿M112.鎬绘湁鍔熷姛鐜�",涓�杈�16娉礯鏈夊姛鍔熺巼 },
+            { "涓�杈撴按6KV_閰嶇數鏌淿M108.鎬绘湁鍔熷姛鐜�",涓�杈�17娉礯鏈夊姛鍔熺巼 },
+            { "涓�杈撴按6KV_閰嶇數鏌淿M111.鎬绘湁鍔熷姛鐜�",涓�杈�18娉礯鏈夊姛鍔熺巼 },
+            { "涓�杈撴按娉�11鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿",涓�杈�11娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "涓�杈撴按娉�12鍙峰彉棰戝崟娉�1.姘存车杩愯鏃堕棿",涓�杈�12娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "涓�杈撴按娉�13鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿",涓�杈�13娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "涓�杈撴按娉�14鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿",涓�杈�14娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "HF涓�杈撴按15鍙峰伐棰戞帶鍒跺浘.姘存车绱杩愯鏃堕棿",涓�杈�15娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "HF涓�杈撴按16鍙峰伐棰戞帶鍒跺浘.姘存车绱杩愯鏃堕棿",涓�杈�16娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "涓�杈撴按娉�17鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿",涓�杈�17娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "涓�杈撴按娉�18鍙峰彉棰戝崟娉�.姘存车绱杩愯鏃堕棿",涓�杈�18娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "涓�杈撴按11鍙疯緟鍔╄澶�.涓夋。浣嶅垏鎹�",涓�杈�11娉礯鐘舵�� },
+            { "涓�杈撴按12鍙疯緟鍔╄澶�.涓夋。浣嶅垏鎹�",涓�杈�12娉礯鐘舵�� },
+            { "涓�杈撴按13鍙疯緟鍔╄澶�.涓夋。浣嶅垏鎹�",涓�杈�13娉礯鐘舵�� },
+            { "涓�杈撴按14鍙疯緟鍔╄澶�.涓夋。浣嶅垏鎹�",涓�杈�14娉礯鐘舵�� },
+            { "涓�杈撴按15鍙疯緟鍔╄澶囧浘.涓夋。浣嶅垏鎹�",涓�杈�15娉礯鐘舵�� },
+            { "涓�杈撴按16鍙疯緟鍔╄澶囧浘.涓夋。浣嶅垏鎹�",涓�杈�16娉礯鐘舵�� },
+            { "涓�杈撴按17鍙疯緟鍔╄澶�.涓夋。浣嶅垏鎹�",涓�杈�17娉礯鐘舵�� },
+            { "涓�杈撴按18鍙疯緟鍔╄澶�.涓夋。浣嶅垏鎹�",涓�杈�18娉礯鐘舵�� },
+
+            // 浜岃緭鐩稿叧
+            //{ "2400鎬荤.鍑哄巶鍘嬪姏",DN2400_鍑哄巶鍘嬪姏 },
+            //{ "2700鎬荤.鍑哄巶鍘嬪姏",DN2700_鍑哄巶鍘嬪姏 },
+            { "2400鎬荤.鍑哄巶鍘嬪姏",DN2400_鍑哄巶鍘嬪姏_闀挎睙绠$綉鍥� },
+            { "2700鎬荤.鍑哄巶鍘嬪姏",DN2700_鍑哄巶鍘嬪姏_闀挎睙绠$綉鍥� },
+            //{ "2400鎬荤.鐬椂娴侀噺",DN2400鎬荤_鐬椂娴侀噺 },
+            //{ "2700鎬荤.鐬椂娴侀噺",DN2700鎬荤_鐬椂娴侀噺 },
+            { "2400鎬荤.鐬椂娴侀噺",DN2400鎬荤_鐬椂娴侀噺_闀挎睙绠$綉鍥� },
+            { "2700鎬荤.鐬椂娴侀噺",DN2700鎬荤_鐬椂娴侀噺_闀挎睙绠$綉鍥� },
+            //{ "2400鎬荤.瀹為檯绱娴侀噺",DN2400鎬荤_瀹為檯绱娴侀噺 },
+            //{ "2700鎬荤.瀹為檯绱娴侀噺",DN2700鎬荤_瀹為檯绱娴侀噺 },
+            { "2400鎬荤.瀹為檯绱娴侀噺",DN2400鎬荤_绱娴侀噺_闀挎睙绠$綉鍥� },
+            { "2700鎬荤.瀹為檯绱娴侀噺",DN2700鎬荤_绱娴侀噺_闀挎睙绠$綉鍥� },
+            { "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",浜岃緭21娉礯娉典簳娑蹭綅 },
+            { "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",浜岃緭22娉礯娉典簳娑蹭綅 },
+            { "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",浜岃緭23娉礯娉典簳娑蹭綅 },
+            { "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",浜岃緭24娉礯娉典簳娑蹭綅 },
+            { "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",浜岃緭25娉礯娉典簳娑蹭綅 },
+            { "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",浜岃緭26娉礯娉典簳娑蹭綅 },
+            { "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.娉典簳娑蹭綅",浜岃緭27娉礯娉典簳娑蹭綅 },
+            { "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",浜岃緭21娉礯鍑烘按鍘嬪姏 },
+            { "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",浜岃緭22娉礯鍑烘按鍘嬪姏 },
+            { "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",浜岃緭23娉礯鍑烘按鍘嬪姏 },
+            { "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",浜岃緭24娉礯鍑烘按鍘嬪姏 },
+            { "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",浜岃緭25娉礯鍑烘按鍘嬪姏 },
+            { "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",浜岃緭26娉礯鍑烘按鍘嬪姏 },
+            { "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.鍑烘按鍘嬪姏",浜岃緭27娉礯鍑烘按鍘嬪姏 },
+            { "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",浜岃緭21娉礯鐬椂娴侀噺 },
+            { "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",浜岃緭22娉礯鐬椂娴侀噺 },
+            { "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",浜岃緭23娉礯鐬椂娴侀噺 },
+            { "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",浜岃緭24娉礯鐬椂娴侀噺 },
+            { "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",浜岃緭25娉礯鐬椂娴侀噺 },
+            { "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",浜岃緭26娉礯鐬椂娴侀噺 },
+            { "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.鐬椂娴侀噺",浜岃緭27娉礯鐬椂娴侀噺 },
+            { "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",浜岃緭21娉礯绱娴侀噺 },
+            { "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",浜岃緭22娉礯绱娴侀噺 },
+            { "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",浜岃緭23娉礯绱娴侀噺 },
+            { "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",浜岃緭24娉礯绱娴侀噺 },
+            { "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",浜岃緭25娉礯绱娴侀噺 },
+            { "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",浜岃緭26娉礯绱娴侀噺 },
+            { "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.绱娴侀噺",浜岃緭27娉礯绱娴侀噺 },
+            { "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鐢佃兘",浜岃緭21娉礯鏈夊姛鐢佃兘 },
+            { "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鐢佃兘",浜岃緭22娉礯鏈夊姛鐢佃兘 },
+            { "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鐢佃兘",浜岃緭23娉礯鏈夊姛鐢佃兘 },
+            { "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鐢佃兘",浜岃緭24娉礯鏈夊姛鐢佃兘 },
+            { "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鐢佃兘",浜岃緭25娉礯鏈夊姛鐢佃兘 },
+            { "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鐢佃兘",浜岃緭26娉礯鏈夊姛鐢佃兘 },
+            { "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鐢佃兘",浜岃緭27娉礯鏈夊姛鐢佃兘 },
+            { "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.棰戠巼",浜岃緭22娉礯棰戠巼 },
+            { "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.棰戠巼",浜岃緭23娉礯棰戠巼 },
+            { "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.棰戠巼",浜岃緭24娉礯棰戠巼 },
+            { "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.棰戠巼",浜岃緭25娉礯棰戠巼 },
+            { "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.棰戠巼",浜岃緭26娉礯棰戠巼 },
+            { "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.棰戠巼",浜岃緭27娉礯棰戠巼 },
+            { "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.杞��",浜岃緭21娉礯杞�� },
+            { "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.杞��",浜岃緭22娉礯杞�� },
+            { "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.杞��",浜岃緭23娉礯杞�� },
+            { "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.杞��",浜岃緭24娉礯杞�� },
+            { "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.杞��",浜岃緭25娉礯杞�� },
+            { "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.杞��",浜岃緭26娉礯杞�� },
+            { "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.杞��",浜岃緭27娉礯杞�� },
+            { "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鍔熺巼",浜岃緭21娉礯鏈夊姛鍔熺巼 },
+            { "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鍔熺巼",浜岃緭22娉礯鏈夊姛鍔熺巼 },
+            { "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鍔熺巼",浜岃緭23娉礯鏈夊姛鍔熺巼 },
+            { "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鍔熺巼",浜岃緭24娉礯鏈夊姛鍔熺巼 },
+            { "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鍔熺巼",浜岃緭25娉礯鏈夊姛鍔熺巼 },
+            { "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鍔熺巼",浜岃緭26娉礯鏈夊姛鍔熺巼 },
+            { "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.鏈夊姛鍔熺巼",浜岃緭27娉礯鏈夊姛鍔熺巼 },
+            { "浜岃緭姘�21鍙锋按娉佃鍥�.娉佃繍琛�",浜岃緭21娉礯杩愯鐘舵�� },
+            { "浜岃緭姘�22鍙锋按娉佃鍥�.娉佃繍琛�",浜岃緭22娉礯杩愯鐘舵�� },
+            { "浜岃緭姘�23鍙锋按娉佃蒋鍚姩.杩愯",浜岃緭23娉礯杩愯鐘舵�� },
+            { "浜岃緭姘�24鍙锋按娉佃鍥�.娉佃繍琛�",浜岃緭24娉礯杩愯鐘舵�� },
+            { "浜岃緭姘�25鍙锋按娉佃鍥�.娉佃繍琛�",浜岃緭25娉礯杩愯鐘舵�� },
+            { "浜岃緭姘�26鍙锋按娉佃鍥�.娉佃繍琛�",浜岃緭26娉礯杩愯鐘舵�� },
+            { "浜岃緭姘�27鍙锋按娉靛彉棰戝櫒.杩愯鐘舵��",浜岃緭27娉礯杩愯鐘舵�� },
+            //{ "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿",浜岃緭21娉礯杩愯鏃堕棿 },
+            //{ "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿",浜岃緭22娉礯杩愯鏃堕棿 },
+            //{ "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿",浜岃緭23娉礯杩愯鏃堕棿 },
+            //{ "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿",浜岃緭24娉礯杩愯鏃堕棿 },
+            //{ "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿",浜岃緭25娉礯杩愯鏃堕棿 },
+            //{ "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿",浜岃緭26娉礯杩愯鏃堕棿 },
+            //{ "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿",浜岃緭27娉礯杩愯鏃堕棿 },
+            { "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.鐘舵��",浜岃緭21娉礯鐘舵�� },
+            { "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.鐘舵��",浜岃緭22娉礯鐘舵�� },
+            { "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.鐘舵��",浜岃緭23娉礯鐘舵�� },
+            { "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.鐘舵��",浜岃緭24娉礯鐘舵�� },
+            { "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.鐘舵��",浜岃緭25娉礯鐘舵�� },
+            { "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.鐘舵��",浜岃緭26娉礯鐘舵�� },
+            { "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.鐘舵��",浜岃緭27娉礯鐘舵�� },
+            { "浜岃緭姘�21鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿",浜岃緭21娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "浜岃緭姘�22鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿",浜岃緭22娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "浜岃緭姘�23鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿",浜岃緭23娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "浜岃緭姘�24鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿",浜岃緭24娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "浜岃緭姘�25鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿",浜岃緭25娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "浜岃緭姘�26鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿",浜岃緭26娉礯绱杩愯鏃堕棿_鍘嗗彶 },
+            { "浜岃緭姘�27鍙锋按娉佃繍琛屽弬鏁�.杩愯鏃堕棿",浜岃緭27娉礯绱杩愯鏃堕棿_鍘嗗彶 }
+        }.GroupBy(kvp => kvp.Key)              // 鎸塊ey鍒嗙粍
+    .ToDictionary(g => g.Key, g => g.Last().Value); // 鍙栨渶鍚庝竴涓猇alue;
+
+        #endregion
         #region 鑾峰彇 閰嶇疆瀛楀吀
 
         /// <summary>
@@ -1158,6 +1962,7 @@
             return log_str_builder.ToString();
         }
 
+ 
         #endregion
 
         #region 鑾峰彇璋冨害绠楁硶鍏ュ弬
diff --git a/01-api/Service/IStation.Service/02-model/00-basic/02-config/ScheduleConfig.cs b/01-api/Service/IStation.Service/02-model/00-basic/02-config/ScheduleConfig.cs
index 8fded96..d4799fb 100644
--- a/01-api/Service/IStation.Service/02-model/00-basic/02-config/ScheduleConfig.cs
+++ b/01-api/Service/IStation.Service/02-model/00-basic/02-config/ScheduleConfig.cs
@@ -29,6 +29,7 @@
             this.FrequencyLimitList = rhs.FrequencyLimitList?.ToList();
             this.FlagCumulativeRuntimeDict = new Dictionary<int, double>();
             this.PriorityOpenFlagList = rhs.PriorityOpenFlagList?.ToList();
+            this.MaintenanceFlagList=rhs.MaintenanceFlagList?.ToList();
         }
 
         /// <summary>
@@ -48,6 +49,7 @@
             this.FrequencyLimitList = rhs.FrequencyLimitList?.ToList();
             this.FlagCumulativeRuntimeDict = new Dictionary<int, double>();
             this.PriorityOpenFlagList = rhs.PriorityOpenFlagList?.ToList();
+            this.MaintenanceFlagList=rhs.MaintenanceFlagList?.ToList();
         }
 
 
@@ -107,6 +109,11 @@
         public List<int> PriorityOpenFlagList { get; set; }
 
         /// <summary>
+        /// 妫�淇垪琛�
+        /// </summary>
+        public List<int> MaintenanceFlagList { get; set; }
+
+        /// <summary>
         /// 
         /// </summary>
         /// <returns></returns>
diff --git a/01-api/Service/IStation.Service/07-helper/02-schedule/ScheduleHelper.cs b/01-api/Service/IStation.Service/07-helper/02-schedule/ScheduleHelper.cs
index 5f6c9cc..4f59fc4 100644
--- a/01-api/Service/IStation.Service/07-helper/02-schedule/ScheduleHelper.cs
+++ b/01-api/Service/IStation.Service/07-helper/02-schedule/ScheduleHelper.cs
@@ -32,10 +32,10 @@
         private double _station_target_flow_diff = 0; // 绔欑偣鐩爣娴侀噺宸��
 
 
-        private readonly double _sel_opt_flow_deviation_ratio = 0.05;//鍙�夋柟妗堢殑娴侀噺鍋忓樊姣�
+        private readonly double _sel_opt_flow_deviation_ratio = 0.08;//鍙�夋柟妗堢殑娴侀噺鍋忓樊姣�
         private readonly double _sel_opt_reasonable_flow_deviation_ratio = 0.005;//鍚堢悊鐨勬柟妗堢殑娴侀噺鍋忓樊姣�
 
-        private readonly Service.AnalysisParameter _service_analysis_parameter = new(); 
+        private readonly Service.AnalysisParameter _service_analysis_parameter = new();
 
         private int _min_open_count;//鏈�灏忓紑娉垫暟閲�
         private int _max_open_count;//鏈�澶у紑娉垫暟閲�
@@ -49,6 +49,7 @@
         private List<Model.FrequencyLimit> _frequency_limit_list = null; // 棰戠巼闄愬埗鍒楄〃
         private Dictionary<int, double> _flag_cumulative_runtime_dict = null; // 娉电疮璁¤繍琛屾椂闀垮瓧鍏�
         private List<int> _priority_open_flag_list = null; // 浼樺厛寮�娉靛垪琛�
+        private List<int> _maintenance_flag_list = null; // 妫�淇垪琛�
 
 
         private List<Model.AnalysisDeviation> _analysis_deviation_list = null;//鍒嗘瀽鍋忓樊
@@ -74,6 +75,7 @@
             _frequency_limit_list = null;
             _flag_cumulative_runtime_dict = null;
             _priority_open_flag_list = null;
+            _maintenance_flag_list = null;
             _station_target_flow_diff = 0;
             if (schedule_config != null)
             {
@@ -88,6 +90,7 @@
                 _frequency_limit_list = schedule_config.FrequencyLimitList;
                 _flag_cumulative_runtime_dict = schedule_config.FlagCumulativeRuntimeDict;
                 _priority_open_flag_list = schedule_config.PriorityOpenFlagList;
+                _maintenance_flag_list = schedule_config.MaintenanceFlagList; 
             }
 
             _analysis_deviation_list = analysis_deviation_list;
@@ -113,8 +116,8 @@
             double target_pressure
             )
         {
-
-            target_flow+=_station_target_flow_diff;
+            //鑾峰彇鏂规鏃剁敤琛ュ樊鐨勬祦閲忥紝渚涙按闄愬埗鐢ㄧ洰鏍囨祦閲忓垽鏂�
+            var target_flow_compensation = target_flow + _station_target_flow_diff; 
             #region 鍒濆鍖栧弬鏁� 
             if (pump_list == null || !pump_list.Any())
             {
@@ -133,6 +136,7 @@
             var frequency_limit_list = _frequency_limit_list;
             var flag_cumulative_runtime_dict = _flag_cumulative_runtime_dict;
             var priority_open_flag_list = _priority_open_flag_list;
+            var maintenance_flag_list = _maintenance_flag_list;
 
             var pump_bp_dict = pump_list.ToDictionary(x => x.Flag, x => x.IsBp);
             var pump_nr_dict = pump_list.ToDictionary(x => x.Flag, x => x.Nr);
@@ -141,6 +145,7 @@
             var combine_merit_ratio = 1d;//缁勫悎鎷╀紭鐜� 
 
             target_flow = Math.Round(target_flow, 1);
+            target_flow_compensation = Math.Round(target_flow_compensation,1);
             target_pressure = Math.Round(target_pressure, 1);
 
             #endregion
@@ -240,6 +245,12 @@
 
             #endregion
 
+            #region 瀛樺湪-妫�淇垪琛�
+
+            var exist_maintenance_flag_list = maintenance_flag_list != null && maintenance_flag_list.Count > 0;
+             
+            #endregion
+
             #region 瀛樺湪-褰撳墠寮�娉靛垪琛� (鏄惁鍒囨车)
 
             var exist_current_open_flag_list = current_open_flag_list != null && current_open_flag_list.Count > 0;
@@ -254,7 +265,7 @@
                     {
                         if (target_flow < limit.Min || target_flow > limit.Max)
                         {
-                            exist_limit = true;
+                            exist_limit = true; 
                         }
                     }
                 }
@@ -269,7 +280,7 @@
                        pump_bp_dict,
                        exist_frequency_limit_list,
                        frequency_limit_flag_dict,
-                       target_flow,
+                       target_flow_compensation,
                        target_pressure
                        );
                     if (opt_ana_combine != null)
@@ -338,7 +349,6 @@
                         if (exist_intersected)
                             continue;
                     }
-
 
                     //绂佺敤缁勫悎
                     if (exist_forbidden_flag_combine_list)
@@ -427,19 +437,20 @@
                     //浼樺厛寮�娉靛垪琛�
                     if (exist_priority_open_flag_list)
                     {
-                        //foreach (var flag in priority_open_flag_list)
-                        //{
-                        //    if (combine.Contains(flag))
-                        //    {
-                        //        combine_merit_ratio *= 1.05;
-                        //    } 
-                        //}
-
                         //鐩墠閫昏緫 浼樺厛寮�娉�==蹇呭紑鏂规
                         var combine_remark = IntListHelper.ToString(combine.OrderBy(x => x));
                         if (!combine_remark.Contains(priority_open_flag_list_remark))
                             continue;
                     }
+
+                    //妫�淇垪琛� 
+                    if (exist_maintenance_flag_list)
+                    {
+                        var exist_intersected = combine.Intersect(maintenance_flag_list).Count() > 0;
+                        if (exist_intersected)
+                            continue;
+                    }
+
 
                     #endregion
 
@@ -455,7 +466,7 @@
                         pump_bp_dict,
                         exist_frequency_limit_list,
                         frequency_limit_flag_dict,
-                        target_flow,
+                        target_flow_compensation,
                         target_pressure
                         );
                     if (opt_ana_combine == null)
@@ -463,11 +474,12 @@
                     opt_ana_combine_list.Add(opt_ana_combine);
                 }
 
+                // 20250422 娉ㄩ噴鍘熷洜锛氫緵姘磋寖鍥翠細鏈夐噸鍙狅紝鑰冭檻鍒囨车鎿嶄綔
                 //濡傛灉褰撳墠寰幆宸茬粡婊¤冻锛屼笉闇�瑕佸啀鍔犳车
-                if (opt_ana_combine_list.Any())
-                {
-                    break;
-                }
+                //if (opt_ana_combine_list.Any())
+                //{
+                //    break;
+                //}
             }
 
             if (opt_ana_combine_list.Count < 1)
@@ -527,7 +539,7 @@
                 //缁勫悎鍋忓樊绯绘暟
                 var combine_deviation_factor = combine_deviation_factor_dict[flag];
                 var current_pressure_diff = target_pressure - inlet_water_level - combine_deviation_factor + _sel_opt_pump_pressure_excess;
- 
+
                 current_pressure_diff = Math.Round(current_pressure_diff, 1);
 
                 //棰戠巼闄愬埗
@@ -556,7 +568,7 @@
                         else
                         {
                             var list = _service_analysis_parameter.GetList(run_flag);
-                            conclusion_list = _service_analysis_parameter.GetList(run_flag, current_pressure_diff);  
+                            conclusion_list = _service_analysis_parameter.GetList(run_flag, current_pressure_diff);
                         }
                     }
                 }
@@ -722,7 +734,7 @@
             }
             if (!ana_combine_list.Any())
                 return default;
-            var opt_ana_combine = ana_combine_list.OrderBy(x=>x.TotalFlow).OrderBy(x => x.TotalPower).First();
+            var opt_ana_combine = ana_combine_list.OrderBy(x => x.TotalFlow).OrderBy(x => x.TotalPower).First();
             return opt_ana_combine;
         }
 
@@ -1067,8 +1079,8 @@
 
             return ana_fre_pump_list;
         }
-         
-        #endregion  
+
+        #endregion
 
     }
 }
diff --git a/01-api/_Expand/IStation.Test/IStation.Test.csproj b/01-api/_Expand/IStation.Test/IStation.Test.csproj
index 3f42877..ab774ed 100644
--- a/01-api/_Expand/IStation.Test/IStation.Test.csproj
+++ b/01-api/_Expand/IStation.Test/IStation.Test.csproj
@@ -13,6 +13,7 @@
     <Compile Remove="Program - 澶嶅埗%283%29.cs" />
     <Compile Remove="Program - 澶嶅埗.cs" />
     <Compile Remove="Program - 瀹氭椂鏁版嵁.cs" />
+    <Compile Remove="Program - 璋冨害楠岃瘉.cs" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/01-api/_Expand/IStation.Test/IStation.Test.csproj.user b/01-api/_Expand/IStation.Test/IStation.Test.csproj.user
index 06e09a8..0f5ea79 100644
--- a/01-api/_Expand/IStation.Test/IStation.Test.csproj.user
+++ b/01-api/_Expand/IStation.Test/IStation.Test.csproj.user
@@ -1,6 +1,6 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup>
-    <_LastSelectedProfileId>D:\WorkCode\IStation\Schedule.Ch.V1.0\01-api\_Expand\IStation.Test\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
+    <_LastSelectedProfileId>D:\WorkCode\Project\ChDt1\Schedule.Ch.V1.0\01-api\_Expand\IStation.Test\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
   </PropertyGroup>
 </Project>
\ No newline at end of file
diff --git "a/01-api/_Expand/IStation.Test/Program - \345\216\206\345\217\262\346\225\260\346\215\256.cs" "b/01-api/_Expand/IStation.Test/Program - \345\216\206\345\217\262\346\225\260\346\215\256.cs"
new file mode 100644
index 0000000..97dc7f6
--- /dev/null
+++ "b/01-api/_Expand/IStation.Test/Program - \345\216\206\345\217\262\346\225\260\346\215\256.cs"
@@ -0,0 +1,234 @@
+锘縰sing IStation;
+using Newtonsoft.Json;
+using SixLabors.Fonts.Tables.AdvancedTypographic;
+
+public class InfluxDBHistoryDataFetcher
+{
+    private readonly HttpClient _httpClient;
+    private readonly string _baseUri;
+
+    public InfluxDBHistoryDataFetcher(string baseUri)
+    {
+        _baseUri = baseUri;
+        _httpClient = new HttpClient();
+    }
+
+    public async Task<List<ResponseData>> FetchDataAsync(
+        List<string> measurements,
+        DateTime startTime,
+        DateTime endTime,
+        string frequency,
+        string type = "first")
+    {
+        // 姣忔鏈�澶氫紶閫� 5 涓� measurements
+        const int batchSize = 1;
+        var allData = new List<ResponseData>();
+
+        // 鍒嗗壊 measurements 涓哄涓壒娆�
+        for (int i = 0; i < measurements.Count; i += batchSize)
+        {
+            var batchMeasurements = measurements.Skip(i).Take(batchSize).ToList();
+            var batchData = await FetchBatchAsync(batchMeasurements, startTime, endTime, frequency, type);
+            allData.AddRange(batchData);
+        }
+
+        return allData;
+    }
+
+    private async Task<List<ResponseData>> FetchBatchAsync(
+        List<string> measurements,
+        DateTime startTime,
+        DateTime endTime,
+        string frequency,
+        string type)
+    {
+        // 鏋勯�� URL 鍙傛暟
+        var queryParams = new Dictionary<string, string>
+        {
+            { "startTime", startTime.ToString("yyyy-MM-dd") },
+            { "endTime", endTime.ToString("yyyy-MM-dd") },
+            { "type", type },
+            { "frequency", frequency },
+            { "measurements", string.Join(",", measurements) }
+        };
+
+        // 鏋勯�犲畬鏁寸殑 URL
+        var url = ConstructUrl(queryParams);
+
+        try
+        {
+            // 鍙戣捣 HTTP GET 璇锋眰
+            var response = await _httpClient.GetAsync(url);
+            response.EnsureSuccessStatusCode(); // 妫�鏌� HTTP 閿欒
+
+            // 瑙f瀽杩斿洖鐨� JSON 鏁版嵁
+            var content = await response.Content.ReadAsStringAsync();
+            var result = JsonConvert.DeserializeObject<ApiResponse>(content);
+
+            if (result != null && result.Status == "200")
+            {
+                return result.Data;
+            }
+            else
+            {
+                Console.WriteLine($"Error fetching data: {result?.Msg} tag:{string.Join(",", measurements)}");
+                return new List<ResponseData>();
+            }
+        }
+        catch (Exception ex)
+        {
+            Console.WriteLine($"Request failed: {ex.Message}");
+            return new List<ResponseData>();
+        }
+    }
+
+    private string ConstructUrl(Dictionary<string, string> queryParams)
+    {
+        var queryStrings = queryParams
+            .Select(kv => $"{kv.Key}={Uri.EscapeDataString(kv.Value)}")
+            .ToList();
+
+        return $"{_baseUri}?{string.Join("&", queryStrings)}";
+    }
+
+    public List<ResponseData> GetDataByMeasurement(List<ResponseData> allData, string measurementName)
+    {
+        return allData.Where(data => data.TagName == measurementName).ToList();
+    }
+}
+
+// 鎺ュ彛杩斿洖鐨勬暟鎹ā鍨�
+public class ApiResponse
+{
+    public string Msg { get; set; }
+    public List<ResponseData> Data { get; set; }
+    public string Status { get; set; }
+}
+
+public class ResponseData
+{
+    public string DataMsg { get; set; }
+    public List<List<string>> Vals { get; set; }
+    public string TagName { get; set; } 
+}
+
+// 浣跨敤绀轰緥
+public class Program
+{
+    public static async Task Main(string[] args)
+    {
+        try
+        { 
+            // 鍒濆鍖栬緟鍔╃被
+            var fetcher = new InfluxDBHistoryDataFetcher(
+            "http://192.168.201.235:8009/dataController/getCommHistoryDataOfInfluxDB");
+
+            // 绀轰緥 measurements
+            var measurements = GlobalHelper.HistoryShuShuiTagList;
+    
+            // 鑾峰彇鏁版嵁
+            var startTime = new DateTime(2024, 3, 1);
+            var endTime = new DateTime(2024, 5, 1);
+            var frequency = "10m";//"12h";
+            var type = "first";
+
+            var allData = await fetcher.FetchDataAsync(
+                measurements: measurements,
+                startTime: startTime,
+                endTime: endTime,
+                frequency: frequency,
+                type: type);
+
+            Console.WriteLine("Insert");
+            Insert(allData);
+
+            //// 鎵撳嵃缁撴灉
+            //Console.WriteLine("鎵�鏈夋暟鎹�:");
+            //foreach (var data in allData)
+            //{
+            //    Console.WriteLine($"TagName: {data.TagName}");
+            //    foreach (var val in data.Vals)
+            //    {
+            //        Console.WriteLine($"  {val[0]}: {val[1]}");
+            //    }
+            //}
+
+            //// 鎻愬彇鐗瑰畾 measurement 鐨勬暟鎹�
+            //var specificData = fetcher.GetDataByMeasurement(allData, "浜屽彇姘撮珮鍘�1鍙蜂富姘存车.鏈夊姛鍔熺巼");
+            //Console.WriteLine("\n鐗瑰畾娴嬮噺椤规暟鎹�:");
+            //foreach (var data in specificData)
+            //{
+            //    Console.WriteLine($"TagName: {data.TagName}");
+            //    foreach (var val in data.Vals)
+            //    {
+            //        Console.WriteLine($"  {val[0]}: {val[1]}");
+            //    }
+            //}
+
+        }
+        catch (Exception ex)
+        {
+
+            Console.WriteLine(ex.Message);
+        }
+        Console.WriteLine("缁撴潫");
+        Console.ReadKey();
+    }
+
+
+    private static void Insert(List<ResponseData> list)
+    {
+        var db_full_path = IStation.Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\monitor.db";
+        if (File.Exists(db_full_path))
+        {
+            File.Delete(db_full_path);
+        }
+        IStation.Service.MonitorRecord _service_monitor_record = new();
+        IStation.Settings.ParasHelper.DataBase.SQLite.MonitorConnectString = "DataSource=" + db_full_path;
+        IStation.Settings.ParasHelper.Save();
+        IStation.InitialHelper.InitMonitorDB();
+
+        var monitor_record_list = new List<IStation.Model.MonitorRecord>();
+        var travel_time_format = new System.Globalization.DateTimeFormatInfo()
+        {
+            ShortDatePattern = "yyyy-MM-dd'T'HH:mm:ss.SSS Z"
+        };
+
+     
+            var receiptTime = DateTime.Now;
+            var mapping_dict = IStation.GlobalHelper.HistoryShuShuiTagCodeMappingDict;
+            foreach (var item in list)
+            {
+                var vals = item.Vals;
+                foreach (var vlu in vals)
+                {
+                    var time_str = vlu[0];
+                    var value_str = vlu[1];
+                    if (!double.TryParse(value_str, out double value))
+                        continue;
+                    var time = Convert.ToDateTime(time_str, travel_time_format).AddHours(-8);
+                    var monitor_record = new IStation.Model.MonitorRecord();
+                    monitor_record.DataTime = time;
+                    monitor_record.DataCode = mapping_dict[item.TagName];
+                    monitor_record.DataValue = value;
+                    monitor_record.ReceiptTime = receiptTime;
+                    monitor_record_list.Add(monitor_record);
+                }
+            }
+
+
+            var bol = _service_monitor_record.Inserts(monitor_record_list);
+            if (bol)
+            {
+                Console.WriteLine($"淇濆瓨鎴愬姛锛亄monitor_record_list.Count}鏉�");
+            }
+            else
+            {
+                Console.WriteLine($"淇濆瓨澶辫触锛亄monitor_record_list.Count}鏉�");
+            }
+      
+
+    }
+
+
+}
\ No newline at end of file
diff --git "a/01-api/_Expand/IStation.Test/Program - \345\244\215\345\210\266\0502\051.cs" "b/01-api/_Expand/IStation.Test/Program - \345\244\215\345\210\266\0502\051.cs"
deleted file mode 100644
index 64048a2..0000000
--- "a/01-api/_Expand/IStation.Test/Program - \345\244\215\345\210\266\0502\051.cs"
+++ /dev/null
@@ -1,89 +0,0 @@
-锘�// See https://aka.ms/new-console-template for more information
-
-
-using IStation;
-using NPOI.HSSF.UserModel;
-using NPOI.SS.Formula.Functions;
-using NPOI.SS.UserModel;
-
-//var dt_now = DateTime.Now;
-//var dt_next = new DateTime(dt_now.Year, dt_now.Month, dt_now.Day, dt_now.Hour, dt_now.Minute + 1, 0);
-//var dt_space = dt_next - dt_now;
-//Console.WriteLine($"鍒濆鍖�({dt_space.TotalSeconds})...");
-//Thread.Sleep(dt_space);
-//IStation.Service.MonitorRecord _service_monitor_record = new();
-//IStation.Settings.ParasHelper.DataBase.SQLite.AnalysisConnectString = "DataSource=" + IStation.Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\analysis.db";
-IStation.Settings.ParasHelper.DataBase.SQLite.ScheduleConnectString = "DataSource=" + IStation.Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\schedule.db";
-//IStation.Settings.ParasHelper.DataBase.SQLite.HydraulicConnectString = "DataSource=" + IStation.Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\hydraulic.db";
-//IStation.Settings.ParasHelper.DataBase.SQLite.MonitorConnectString = "DataSource=" + IStation.Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\monitor.db";
-IStation.Settings.ParasHelper.Save();
-
-//Console.WriteLine("鍚姩瀹炴椂鏁版嵁閲囬泦...");
-//var timer = new System.Timers.Timer();
-//timer.Interval = 10 * 1000;
-//timer.Elapsed += (s, e) =>
-//{
-//    dt_now = DateTime.Now;
-//    var dt_now_str = dt_now.ToString("G");
-//    var get_msg = GlobalHelper.GetMonitorRecordList(dt_now, out List<IStation.Model.MonitorRecord> monitor_record_list, false);
-//    if (!string.IsNullOrEmpty(get_msg))
-//    {
-//        Console.WriteLine($"{dt_now_str}:{get_msg}");
-//    }
-//    else
-//    {
-//        var bol = _service_monitor_record.Inserts(monitor_record_list);
-//        if (bol)
-//        {
-//            Console.WriteLine($"{dt_now_str}:閲囬泦鎴愬姛!");
-//        }
-//        else
-//        {
-//            Console.WriteLine($"{dt_now_str}:閲囬泦澶辫触!");
-//        }
-//    }
-//};
-//timer.AutoReset = true;
-//timer.Start();
-
-var list = new IStation.Service.ScheduleRequest().GetAll();
-
-Export2Excel(list);
-bool Export2Excel(List<IStation.Model.ScheduleRequest> list)
-{
-
-    HSSFWorkbook theBook = new HSSFWorkbook();
-    var theSheet1 = theBook.CreateSheet("Sheet1");
-
-    IRow rowTile = theSheet1.CreateRow(0);
-
-    rowTile.CreateCell(0).SetCellValue("鏃堕棿");
-    rowTile.CreateCell(1).SetCellValue("鐩爣娴侀噺");
-    rowTile.CreateCell(2).SetCellValue("鐩爣鍘嬪姏");
-
-
-    var count = list.Count();
-    for (int i = 1; i < count; i++)
-    {
-        var x = list[i];
-        var row = theSheet1.CreateRow(i);
-        row.CreateCell(0).SetCellValue(x.ReceptionTime.ToString("G"));
-        row.CreateCell(1).SetCellValue(x.TargetFlow2);
-        row.CreateCell(2).SetCellValue(x.TargetPressure2);
-    }
-
-    var root_folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "闂鎺掓煡");
-    if (!Directory.Exists(root_folder))
-    {
-        Directory.CreateDirectory(root_folder);
-    }
-    var file_name = root_folder + "\\" + $"璋冨害鏁版嵁.xls";
-    theSheet1.ForceFormulaRecalculation = true;
-    using (FileStream fs = File.OpenWrite(file_name))
-    {
-        theBook.Write(fs);
-    }
-
-    return true;
-}
-Console.ReadKey(); 
\ No newline at end of file
diff --git "a/01-api/_Expand/IStation.Test/Program - \345\244\215\345\210\266\0503\051.cs" "b/01-api/_Expand/IStation.Test/Program - \345\244\215\345\210\266\0503\051.cs"
deleted file mode 100644
index aa8cba7..0000000
--- "a/01-api/_Expand/IStation.Test/Program - \345\244\215\345\210\266\0503\051.cs"
+++ /dev/null
@@ -1,27 +0,0 @@
-锘�// See https://aka.ms/new-console-template for more information
-
-
-using IStation;
-using IStation.Epanet;
-using Microsoft.IdentityModel.Logging;
-using System.Text;
-using Yw;
-
- var model_file = Path.Combine(
-              AppDomain.CurrentDomain.BaseDirectory, "easy.inp");
-
-var temp_id_build = new StringBuilder(31);
-var err = EpanetMethods.ENopen(model_file, "", "");
-if ((int)err > 6)
-{
-    throw new Exception($"ENopen锛歿err}");
-}
-
-err = EpanetMethods.ENopenH();
-if ((int)err > 6)
-{
-    throw new Exception($"ENopenH锛歿err}");
-}
-
-
-Console.ReadKey();
\ No newline at end of file
diff --git "a/01-api/_Expand/IStation.Test/Program - \345\244\215\345\210\266.cs" "b/01-api/_Expand/IStation.Test/Program - \345\244\215\345\210\266.cs"
index 9d14657..56be8a2 100644
--- "a/01-api/_Expand/IStation.Test/Program - \345\244\215\345\210\266.cs"
+++ "b/01-api/_Expand/IStation.Test/Program - \345\244\215\345\210\266.cs"
@@ -1,51 +1,164 @@
-锘�// See https://aka.ms/new-console-template for more information
+锘縰sing IStation;
+using Newtonsoft.Json;
 
+public class InfluxDBHistoryDataFetcher
+{
+    private readonly HttpClient _httpClient;
+    private readonly string _baseUri;
 
-using IStation;
+    public InfluxDBHistoryDataFetcher(string baseUri)
+    {
+        _baseUri = baseUri;
+        _httpClient = new HttpClient();
+    }
 
-//var dt_now = DateTime.Now;
-//var dt_next = new DateTime(dt_now.Year, dt_now.Month, dt_now.Day, dt_now.Hour, dt_now.Minute + 1, 0);
-//var dt_space = dt_next - dt_now;
-//Console.WriteLine($"鍒濆鍖�({dt_space.TotalSeconds})...");
-//Thread.Sleep(dt_space);
-//IStation.Service.MonitorRecord _service_monitor_record = new();
-//IStation.Settings.ParasHelper.DataBase.SQLite.AnalysisConnectString = "DataSource=" + IStation.Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\analysis.db";
-//IStation.Settings.ParasHelper.DataBase.SQLite.ScheduleConnectString = "DataSource=" + IStation.Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\schedule.db";
-//IStation.Settings.ParasHelper.DataBase.SQLite.HydraulicConnectString = "DataSource=" + IStation.Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\hydraulic.db";
-//IStation.Settings.ParasHelper.DataBase.SQLite.MonitorConnectString = "DataSource=" + IStation.Settings.ParasHelper.LocalFile.DataFolderDirectory + "\\monitor.db";
-//IStation.Settings.ParasHelper.Save();
+    public async Task<List<ResponseData>> FetchDataAsync(
+        List<string> measurements,
+        DateTime startTime,
+        DateTime endTime,
+        string frequency,
+        string type = "first")
+    {
+        // 姣忔鏈�澶氫紶閫� 5 涓� measurements
+        const int batchSize = 5;
+        var allData = new List<ResponseData>();
 
-//Console.WriteLine("鍚姩瀹炴椂鏁版嵁閲囬泦...");
-//var timer = new System.Timers.Timer();
-//timer.Interval = 10 * 1000;
-//timer.Elapsed += (s, e) =>
-//{
-//    dt_now = DateTime.Now;
-//    var dt_now_str = dt_now.ToString("G");
-//    var get_msg = GlobalHelper.GetMonitorRecordList(dt_now, out List<IStation.Model.MonitorRecord> monitor_record_list, false);
-//    if (!string.IsNullOrEmpty(get_msg))
-//    {
-//        Console.WriteLine($"{dt_now_str}:{get_msg}");
-//    }
-//    else
-//    {
-//        var bol = _service_monitor_record.Inserts(monitor_record_list);
-//        if (bol)
-//        {
-//            Console.WriteLine($"{dt_now_str}:閲囬泦鎴愬姛!");
-//        }
-//        else
-//        {
-//            Console.WriteLine($"{dt_now_str}:閲囬泦澶辫触!");
-//        }
-//    }
-//};
-//timer.AutoReset = true;
-//timer.Start();
+        // 鍒嗗壊 measurements 涓哄涓壒娆�
+        for (int i = 0; i < measurements.Count; i += batchSize)
+        {
+            var batchMeasurements = measurements.Skip(i).Take(batchSize).ToList();
+            var batchData = await FetchBatchAsync(batchMeasurements, startTime, endTime, frequency, type);
+            allData.AddRange(batchData);
+        }
 
+        return allData;
+    }
 
+    private async Task<List<ResponseData>> FetchBatchAsync(
+        List<string> measurements,
+        DateTime startTime,
+        DateTime endTime,
+        string frequency,
+        string type)
+    {
+        // 鏋勯�� URL 鍙傛暟
+        var queryParams = new Dictionary<string, string>
+        {
+            { "startTime", startTime.ToString("yyyy-MM-dd") },
+            { "endTime", endTime.ToString("yyyy-MM-dd") },
+            { "type", type },
+            { "frequency", frequency },
+            { "measurements", string.Join(",", measurements) }
+        };
 
-var request_list=  
+        // 鏋勯�犲畬鏁寸殑 URL
+        var url = ConstructUrl(queryParams);
 
+        try
+        {
+            // 鍙戣捣 HTTP GET 璇锋眰
+            var response = await _httpClient.GetAsync(url);
+            response.EnsureSuccessStatusCode(); // 妫�鏌� HTTP 閿欒
 
-Console.ReadKey(); 
\ No newline at end of file
+            // 瑙f瀽杩斿洖鐨� JSON 鏁版嵁
+            var content = await response.Content.ReadAsStringAsync();
+            var result = JsonConvert.DeserializeObject<ApiResponse>(content);
+
+            if (result != null && result.Status == "200")
+            {
+                return result.Data;
+            }
+            else
+            {
+                Console.WriteLine($"Error fetching data: {result?.Msg}");
+                return new List<ResponseData>();
+            }
+        }
+        catch (Exception ex)
+        {
+            Console.WriteLine($"Request failed: {ex.Message}");
+            return new List<ResponseData>();
+        }
+    }
+
+    private string ConstructUrl(Dictionary<string, string> queryParams)
+    {
+        var queryStrings = queryParams
+            .Select(kv => $"{kv.Key}={Uri.EscapeDataString(kv.Value)}")
+            .ToList();
+
+        return $"{_baseUri}?{string.Join("&", queryStrings)}";
+    }
+
+    public List<ResponseData> GetDataByMeasurement(List<ResponseData> allData, string measurementName)
+    {
+        return allData.Where(data => data.TagName == measurementName).ToList();
+    }
+}
+
+// 鎺ュ彛杩斿洖鐨勬暟鎹ā鍨�
+public class ApiResponse
+{
+    public string Msg { get; set; }
+    public List<ResponseData> Data { get; set; }
+    public string Status { get; set; }
+}
+
+public class ResponseData
+{
+    public string DataMsg { get; set; }
+    public List<List<string>> Vals { get; set; }
+    public string TagName { get; set; }
+}
+
+// 浣跨敤绀轰緥
+public class Program
+{
+    public static async Task Main(string[] args)
+    {
+        // 鍒濆鍖栬緟鍔╃被
+        var fetcher = new InfluxDBHistoryDataFetcher(
+            "http://192.168.201.235:8009/dataController/getCommHistoryDataOfInfluxDB");
+
+        // 绀轰緥 measurements
+        var measurements = GlobalHelper.HistoryTagList;
+
+        // 鑾峰彇鏁版嵁
+        var startTime = new DateTime(2024, 5, 12);
+        var endTime = new DateTime(2024, 5, 13);
+        var frequency = "12h";
+        var type = "first";
+
+        var allData = await fetcher.FetchDataAsync(
+            measurements: measurements,
+            startTime: startTime,
+            endTime: endTime,
+            frequency: frequency,
+            type: type);
+
+        // 鎵撳嵃缁撴灉
+        Console.WriteLine("鎵�鏈夋暟鎹�:");
+        foreach (var data in allData)
+        {
+            Console.WriteLine($"TagName: {data.TagName}");
+            foreach (var val in data.Vals)
+            {
+                Console.WriteLine($"  {val[0]}: {val[1]}");
+            }
+        }
+
+        // 鎻愬彇鐗瑰畾 measurement 鐨勬暟鎹�
+        var specificData = fetcher.GetDataByMeasurement(allData, "浜屽彇姘撮珮鍘�1鍙蜂富姘存车.鏈夊姛鍔熺巼");
+        Console.WriteLine("\n鐗瑰畾娴嬮噺椤规暟鎹�:");
+        foreach (var data in specificData)
+        {
+            Console.WriteLine($"TagName: {data.TagName}");
+            foreach (var val in data.Vals)
+            {
+                Console.WriteLine($"  {val[0]}: {val[1]}");
+            }
+        }
+        Console.WriteLine("缁撴潫");
+        Console.ReadKey();
+    }
+}
\ No newline at end of file
diff --git "a/01-api/_Expand/IStation.Test/Program - \345\256\232\346\227\266\346\225\260\346\215\256.cs" "b/01-api/_Expand/IStation.Test/Program - \345\256\232\346\227\266\346\225\260\346\215\256.cs"
index 4c366a4..1750fbb 100644
--- "a/01-api/_Expand/IStation.Test/Program - \345\256\232\346\227\266\346\225\260\346\215\256.cs"
+++ "b/01-api/_Expand/IStation.Test/Program - \345\256\232\346\227\266\346\225\260\346\215\256.cs"
@@ -20,7 +20,7 @@
 
 Console.WriteLine("鍚姩瀹炴椂鏁版嵁閲囬泦...");
 var timer = new System.Timers.Timer();
-timer.Interval = 50 * 1000;
+timer.Interval = 60 * 1000;
 timer.Elapsed += (s, e) =>
 {
     dt_now = DateTime.Now;
diff --git a/01-api/_Expand/IStation.Test/Program.cs "b/01-api/_Expand/IStation.Test/Program - \350\260\203\345\272\246\351\252\214\350\257\201.cs"
similarity index 89%
rename from 01-api/_Expand/IStation.Test/Program.cs
rename to "01-api/_Expand/IStation.Test/Program - \350\260\203\345\272\246\351\252\214\350\257\201.cs"
index c58348a..bee492f 100644
--- a/01-api/_Expand/IStation.Test/Program.cs
+++ "b/01-api/_Expand/IStation.Test/Program - \350\260\203\345\272\246\351\252\214\350\257\201.cs"
@@ -64,16 +64,18 @@
 log_title = "璋冨害杩斿洖";
 var helper = new IStation.Service.ScheduleHelper();
 
-var target_flow1 = 21459.379000000004;
-var target_mpa_pressure1 = 0.2615;
-var target_flow2 = 31602.6;
-var target_mpa_pressure2 = 0.174;
-
-//helper.Initial(station1_open_flag_list, station1_schedule_config, analysis_deviation_list);
-//var optimal_combine1 = helper.GetOptAnaCombine(station1, station1_flag_inlet_water_level_dict, target_flow1, target_pressure1);
+var target_flow1 = 20722.197;
+var target_mpa_pressure1 = 0.2556;
+var target_flow2 = 34628.6;
+var target_mpa_pressure2 = 0.1595;
 var target_pressure1 = IStation.Curve.PumpCalculateHelper.Mpa2M(target_mpa_pressure1);
 var target_pressure2 = IStation.Curve.PumpCalculateHelper.Mpa2M(target_mpa_pressure2);
 
+
+helper.Initial(station1_open_flag_list, station1_schedule_config, analysis_deviation_list);
+var optimal_combine1 = helper.GetOptAnaCombine(station1, station1_flag_inlet_water_level_dict, target_flow1, target_pressure1);
+
+
 helper.Initial(station2_open_flag_list, station2_schedule_config, analysis_deviation_list);
 var optimal_combine2 = helper.GetOptAnaCombine(station2, station2_flag_inlet_water_level_dict, target_flow2, target_pressure2);
 
diff --git a/01-api/_Expand/IStation.Test/Properties/PublishProfiles/FolderProfile.pubxml.user b/01-api/_Expand/IStation.Test/Properties/PublishProfiles/FolderProfile.pubxml.user
index 898c9ca..1022ba7 100644
--- a/01-api/_Expand/IStation.Test/Properties/PublishProfiles/FolderProfile.pubxml.user
+++ b/01-api/_Expand/IStation.Test/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -4,7 +4,7 @@
 -->
 <Project>
   <PropertyGroup>
-    <History>True|2024-09-24T11:31:12.5290103Z||;True|2024-09-24T19:29:31.9699321+08:00||;True|2024-09-24T19:28:08.2990298+08:00||;True|2024-09-24T19:27:30.4502121+08:00||;True|2024-09-24T19:22:54.9042937+08:00||;True|2024-09-24T19:19:56.7479278+08:00||;True|2024-09-24T19:19:09.7539146+08:00||;True|2024-09-24T19:13:14.7061740+08:00||;False|2024-09-24T19:12:56.0055786+08:00||;False|2024-09-24T19:12:53.2614604+08:00||;False|2024-09-24T19:12:48.7493833+08:00||;False|2024-09-24T19:12:44.3720182+08:00||;True|2024-09-24T19:07:58.3465782+08:00||;True|2024-09-24T19:05:30.9998266+08:00||;True|2024-09-24T18:54:38.2183342+08:00||;True|2024-09-24T18:48:06.9234761+08:00||;</History>
+    <History>True|2025-04-17T05:28:40.3924081Z||;True|2025-04-17T13:20:49.2038819+08:00||;True|2025-04-17T13:15:26.4172317+08:00||;True|2025-04-17T12:51:35.9533762+08:00||;True|2025-04-17T12:50:30.6355723+08:00||;True|2025-04-17T12:49:19.3429590+08:00||;True|2025-04-17T12:12:38.2829789+08:00||;True|2025-04-17T12:08:19.7557855+08:00||;True|2025-04-17T12:07:18.2474142+08:00||;True|2025-04-17T12:04:57.6742146+08:00||;True|2025-04-17T11:56:53.1884453+08:00||;True|2025-04-17T11:52:34.7185498+08:00||;True|2025-04-17T11:48:31.4924507+08:00||;False|2025-04-17T11:48:13.1663227+08:00||;True|2025-04-17T10:50:07.6019230+08:00||;True|2025-04-17T10:36:34.9745430+08:00||;True|2024-09-24T19:31:12.5290103+08:00||;True|2024-09-24T19:29:31.9699321+08:00||;True|2024-09-24T19:28:08.2990298+08:00||;True|2024-09-24T19:27:30.4502121+08:00||;True|2024-09-24T19:22:54.9042937+08:00||;True|2024-09-24T19:19:56.7479278+08:00||;True|2024-09-24T19:19:09.7539146+08:00||;True|2024-09-24T19:13:14.7061740+08:00||;False|2024-09-24T19:12:56.0055786+08:00||;False|2024-09-24T19:12:53.2614604+08:00||;False|2024-09-24T19:12:48.7493833+08:00||;False|2024-09-24T19:12:44.3720182+08:00||;True|2024-09-24T19:07:58.3465782+08:00||;True|2024-09-24T19:05:30.9998266+08:00||;True|2024-09-24T18:54:38.2183342+08:00||;True|2024-09-24T18:48:06.9234761+08:00||;</History>
     <LastFailureDetails />
   </PropertyGroup>
 </Project>
\ No newline at end of file
diff --git a/01-api/_Expand/IStation.Win.Schedule/Program.cs b/01-api/_Expand/IStation.Win.Schedule/Program.cs
index 1b295c8..ff72aa5 100644
--- a/01-api/_Expand/IStation.Win.Schedule/Program.cs
+++ b/01-api/_Expand/IStation.Win.Schedule/Program.cs
@@ -12,7 +12,7 @@
         [STAThread]
         static void Main()
         {
-            //处理未捕获的异常   
+            //处理未捕获的异常
             System.Windows.Forms.Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
 
             //处理UI线程异常
@@ -58,7 +58,7 @@
                 if ((DiagramControlStringId)e.StringID == DiagramControlStringId.PrintPreview_BestFit) e.Value = "适应页面";
             };
 
-            ////zh-Hans界面翻译
+            ////zh-Hans 界面翻译
             //System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-Hans");
             //System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("zh-Hans");
 
diff --git a/01-api/_Expand/IStation.Win.Schedule/bjMain.cs b/01-api/_Expand/IStation.Win.Schedule/bjMain.cs
index 3fda114..9c170ba 100644
--- a/01-api/_Expand/IStation.Win.Schedule/bjMain.cs
+++ b/01-api/_Expand/IStation.Win.Schedule/bjMain.cs
@@ -1,9 +1,12 @@
-锘縰sing IStation.Curve;
+锘縰sing IStation.Application;
+using IStation.Curve;
+using IStation.Model;
 using MathNet.Numerics.LinearAlgebra;
 using MathNet.Numerics.LinearAlgebra.Double;
 using System.IO;
 using System.Text;
 using Yw.Untity;
+using static IStation.Service.ScheduleHelper;
 
 namespace IStation.Win.Schedule
 {
@@ -40,6 +43,7 @@
 
         private static readonly IStation.Service.MonitorRecord _service_monitor_record = new();
         private static readonly Service.AnalysisDeviation _service_analysis_deviation = new();
+        private static readonly Service.FlowDeviation _service_flow_deviation = new();
 
         private long _last_request_id = 0;
         private bool _use_debug_scada = true;
@@ -83,14 +87,14 @@
             {
                 return;
             }
-            var deline = new DateTime(2025,2,12);
-            var deline2 = new DateTime(2025,5,1);
-            var time_list = _schedule_request_list.Where(x=>x.ReceptionTime>=deline&&x.ReceptionTime<= deline2).Select(x => x.ReceptionTime).OrderBy(x => x).ToList();
-  
+            var deline = new DateTime(2025, 4, 18);
+            var deline2 = new DateTime(2025, 5, 1);
+            var time_list = _schedule_request_list.Where(x => x.ReceptionTime >= deline && x.ReceptionTime <= deline2).Select(x => x.ReceptionTime).OrderBy(x => x).ToList();
+
             foreach (var item in time_list)
             {
                 this.repImgDate.Items.Add(item.ToString("G"), item, -1);
-            } 
+            }
             var monitor_record_list = _service_monitor_record.GetByReceiptTimeRange(deline, deline2);
             if (monitor_record_list == null || !monitor_record_list.Any())
             {
@@ -145,15 +149,15 @@
                     if (_monitor_record_dict != null && _monitor_record_dict.ContainsKey(time))
                     {
                         var valid_record_list = _monitor_record_dict[time];
-                        var station_scada_dict = GetStationScadaDict(monitor_record_list); 
+                        var station_scada_dict = GetStationScadaDict(monitor_record_list);
 
-                        var validRealTimePressure = station_scada_dict[IStation.eDockingStation.Ch1s][0].Item2 ;
+                        var validRealTimePressure = station_scada_dict[IStation.eDockingStation.Ch1s][0].Item2;
                         if (validRealTimePressure.HasValue)
                         {
                             var validRealTimePressureDiff = validRealTimePressure.Value - target_pressure1;
                             target_pressure1 += validRealTimePressureDiff;
                             AlertTool.ShowInfo(this, "濉ˉ鍘嬪姏缂哄け", $"{validRealTimePressureDiff:N3}");
-                        } 
+                        }
                     }
                 }
 
@@ -162,56 +166,6 @@
                 {
                     station2_target_flow_diff = new Service.FlowDeviation().GetFlowDiff(target_pressure2);
                     AlertTool.ShowInfo(this, "棰勬祴娴侀噺缂哄け", $"{station2_target_flow_diff:N1}");
-                    //var ptList = new List<CurvePoint>();
-                    //try
-                    //{
-                    //    var filePath = @"D:\WorkCode\Project\ChDt1\Schedule.Ch.V1.0\02-desktop\Desktop\IStation.Test\bin\Debug\net6.0-windows\stationcsv\characteristic_curve.csv";
-                    //    using (StreamReader reader = new StreamReader(filePath))
-                    //    {
-                    //        reader.ReadLine();
-                    //        string line;
-                    //        while ((line = reader.ReadLine()) != null)
-                    //        {
-                    //            // 鎸夐�楀彿鍒嗛殧姣忎竴琛�
-                    //            string[] values = line.Split(',');
-                    //            var xStr = values[0];
-                    //            var yStr = values[1];
-
-                    //            var pX = double.Parse(xStr);
-                    //            var pY = double.Parse(yStr);
-
-                    //            pY = Math.Abs(pY);
-                    //            ptList.Add(new CurvePoint(pX, pY));
-
-                    //        }
-                    //    }
-                    //}
-                    //catch (Exception ex)
-                    //{
-                    //    Console.WriteLine("璇诲彇鏂囦欢鏃跺嚭閿�: " + ex.Message);
-                    //}
-
-                    //var x = ptList.Select(x => x.X).ToArray();
-                    //var y = ptList.Select(x => x.Y).ToArray();
-
-                    //// 澶氶」寮忓洖褰掔殑闃舵暟锛堜緥濡傦紝浜屾澶氶」寮忥級
-                    //int degree = 3;
-
-                    //// 鎷熷悎澶氶」寮忓洖褰掓ā鍨�
-                    //double[] coefficients = NonlinearRegressionHelper.FitPolynomial(x, y, degree);
-
-                    //// 浣跨敤妯″瀷杩涜棰勬祴
-                    //double xNew = target_pressure2;
-                    //double yPredicted = NonlinearRegressionHelper.PredictPolynomial(xNew, coefficients);
-
-                    //station2_target_flow_diff = yPredicted;
-                    //AlertTool.ShowInfo(this, "棰勬祴娴侀噺缂哄け", $"{yPredicted:N1}");
-
-
-                    //// 璁$畻 R虏 鍜� MSE
-                    //double rSquared = NonlinearRegressionHelper.CalculateRSquared(x, y, coefficients);
-                    //double mse = NonlinearRegressionHelper.CalculateMSE(x, y, coefficients);
-
                 }
 
 
@@ -220,9 +174,47 @@
                 GlobalHelper.GetStationFlagStateList(monitor_record_list, out List<int> station1_maintenance_flag_list, out List<int> station2_maintenance_flag_list, out List<int> station1_priority_flag_list, out List<int> station2_priority_flag_list);
                 GlobalHelper.GetFlagInletWaterLevelDict(monitor_record_list, out Dictionary<int, double> station1_flag_inlet_water_level_dict, out Dictionary<int, double> station2_flag_inlet_water_level_dict);
 
+                station1_schedule_config.MaintenanceFlagList = new List<int>();
+                station2_schedule_config.MaintenanceFlagList = new List<int>();
+                station1_schedule_config.PriorityOpenFlagList = new List<int>();
+                station2_schedule_config.PriorityOpenFlagList = new List<int>();
+                 if (station1_maintenance_flag_list != null && station1_maintenance_flag_list.Any())
+                {
+                     station1_schedule_config.MaintenanceFlagList.AddRange(station1_maintenance_flag_list);
+                }
+                if (station2_maintenance_flag_list != null && station2_maintenance_flag_list.Any())
+                {
+                     station2_schedule_config.MaintenanceFlagList.AddRange(station2_maintenance_flag_list);
+                }
+
+                 if (station1_priority_flag_list != null && station1_priority_flag_list.Any())
+                {
+                     station1_schedule_config.PriorityOpenFlagList.AddRange(station1_priority_flag_list);
+                }
+                if (station2_priority_flag_list != null && station2_priority_flag_list.Any())
+                {
+                     station2_schedule_config.PriorityOpenFlagList.AddRange(station2_priority_flag_list);
+                }
+                 
+
+
                 var helper = new Service.ScheduleHelper();
                 helper.Initial(station1_open_flag_list, station1_schedule_config, analysis_deviation_list);
-                var optimal_combine1 = helper.GetOptAnaCombine(station1, station1_flag_inlet_water_level_dict, target_flow1, target_pressure1);
+                //var optimal_combine1 = helper.GetOptAnaCombine(station1, station1_flag_inlet_water_level_dict, target_flow1, target_pressure1);
+              AnaCombine optimal_combine1 = null;
+
+
+                var limit_info = VerifyWaterSupplyLimit(station1_schedule_config.WaterSupplyLimitList, station1_open_flag_list, target_flow1);
+                if (!string.IsNullOrEmpty(limit_info))
+                {
+                    AlertTool.ShowInfo(this,"渚涙按闄愬埗",limit_info);
+                }
+
+                limit_info = VerifyWaterSupplyLimit(station2_schedule_config.WaterSupplyLimitList, station2_open_flag_list, target_flow2);
+                if (!string.IsNullOrEmpty(limit_info))
+                {
+                    AlertTool.ShowInfo(this, "渚涙按闄愬埗", limit_info);
+                }
 
                 helper.Initial(station2_open_flag_list, station2_schedule_config, analysis_deviation_list, station2_target_flow_diff);
                 var optimal_combine2 = helper.GetOptAnaCombine(station2, station2_flag_inlet_water_level_dict, target_flow2, target_pressure2);
@@ -631,6 +623,27 @@
             this.pumpScheduleVmBindingSource1.ResetBindings(false);
         }
 
+        private string VerifyWaterSupplyLimit(List<WaterSupplyLimit> waterSupplyLimits, List<int> station_open_flag_list, double targetFlow)
+        {
+            if (waterSupplyLimits != null && waterSupplyLimits.Any())
+            {
+                if (station_open_flag_list != null && station_open_flag_list.Any())
+                {
+                    var pumpCount = station_open_flag_list.Count;
+                    var exist_limit = waterSupplyLimits.Find(x => x.PumpCount == pumpCount);
+                    if (exist_limit != null)
+                    {
+                        if (targetFlow < exist_limit.Min || targetFlow > exist_limit.Max)
+                        {
+                            var flags = Yw.Untity.IntListHelper.ToString(station_open_flag_list);
+                            return $"[{flags}]:鐩爣娴侀噺:{targetFlow},渚涙按闄愬埗:{exist_limit.Min}-{exist_limit.Max}";
+                        }
+                    }
+                }
+            }
+            return "";
+        }
+
 
         private void Reset()
         {
diff --git a/02-desktop/Component/IStation.Newtonsoft/JsonHelper.cs b/02-desktop/Component/IStation.Newtonsoft/JsonHelper.cs
index 9314434..8b08327 100644
--- a/02-desktop/Component/IStation.Newtonsoft/JsonHelper.cs
+++ b/02-desktop/Component/IStation.Newtonsoft/JsonHelper.cs
@@ -3,6 +3,54 @@
 
 namespace IStation
 {
+    ///// <summary>
+    ///// json杈呭姪绫�
+    ///// </summary>
+    //public class JsonHelper
+    //{
+    //    /// <summary>
+    //    /// 瀵硅薄杞负json
+    //    /// </summary>
+    //    public static string Object2Json<T>(T t)
+    //    {
+    //        if (t == null)
+    //            return default;
+    //        return JsonConvert.SerializeObject(t);
+    //    }
+
+    //    /// <summary>
+    //    /// 瀵硅薄杞负鏍煎紡 json
+    //    /// </summary>
+    //    public static string Object2FormatJson<T>(T t)
+    //    {
+    //        if (t == null)
+    //            return default;
+    //        return JsonConvert.SerializeObject(t, Formatting.Indented);
+    //    }
+
+    //    /// <summary>
+    //    /// json杞负瀵硅薄
+    //    /// </summary>
+    //    public static T Json2Object<T>(string json)
+    //    {
+    //        if (string.IsNullOrEmpty(json))
+    //            return default;
+    //        try
+    //        {
+    //            return JsonConvert.DeserializeObject<T>(json);
+    //        }
+    //        catch (Exception ex)
+    //        {
+    //            var a = ex.Message;
+    //            return default;
+    //        }
+
+    //    }
+
+
+    //}
+
+
     /// <summary>
     /// json杈呭姪绫�
     /// </summary>
@@ -15,7 +63,10 @@
         {
             if (t == null)
                 return default;
-            return JsonConvert.SerializeObject(t);
+            return JsonConvert.SerializeObject(t, new JsonSerializerSettings
+            {
+                Converters = new[] { new CustomFloatConverter() }
+            });
         }
 
         /// <summary>
@@ -25,7 +76,10 @@
         {
             if (t == null)
                 return default;
-            return JsonConvert.SerializeObject(t, Formatting.Indented);
+            return JsonConvert.SerializeObject(t, Formatting.Indented, new JsonSerializerSettings
+            {
+                Converters = new[] { new CustomFloatConverter() }
+            });
         }
 
         /// <summary>
@@ -44,9 +98,35 @@
                 var a = ex.Message;
                 return default;
             }
+        }
+    }
 
+    public class CustomFloatConverter : JsonConverter
+    {
+        public override bool CanConvert(Type objectType)
+        {
+            return objectType == typeof(double) || objectType == typeof(float);
         }
 
+        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+        {
+            if (reader.TokenType == JsonToken.String)
+            {
+                return Convert.ToDouble(reader.Value.ToString());
+            }
+            return reader.Value;
+        }
 
+        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+        {
+            if (value is double)
+            {
+                writer.WriteValue($"{value:N5}"); // 淇濈暀4浣嶅皬鏁�
+            }
+            else if (value is float)
+            {
+                writer.WriteValue($"{value:N5}"); // 淇濈暀4浣嶅皬鏁�
+            }
+        }
     }
 }
diff --git a/02-desktop/Desktop/IStation.Test/IStation.Test.csproj b/02-desktop/Desktop/IStation.Test/IStation.Test.csproj
index d04eb47..8786b77 100644
--- a/02-desktop/Desktop/IStation.Test/IStation.Test.csproj
+++ b/02-desktop/Desktop/IStation.Test/IStation.Test.csproj
@@ -41,6 +41,7 @@
     <Compile Remove="Program -DataFusionCorrector.cs" />
     <Compile Remove="Program -deepseek - 澶嶅埗.cs" />
     <Compile Remove="Program -doubao.cs" />
+    <Compile Remove="schedule\CorrectedStationScheduleModelHelper.cs" />
     <Compile Remove="Station1CombineHelper - 澶嶅埗.cs" />
     <Compile Remove="Station2Helper - 澶嶅埗.cs" />
     <Compile Remove="TotalFlowDiffHelper - 澶嶅埗.cs" />
@@ -53,6 +54,7 @@
     <PackageReference Include="Dbscan" Version="3.0.0" />
     <PackageReference Include="Dbscan.RBush" Version="3.0.0" />
     <PackageReference Include="NumSharp" Version="0.30.0" />
+    <PackageReference Include="Yw.Epanet.Calcu.Core" Version="1.0.8" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/02-desktop/Desktop/IStation.Test/Program.cs b/02-desktop/Desktop/IStation.Test/Program.cs
index f707e4e..fa0a2cc 100644
--- a/02-desktop/Desktop/IStation.Test/Program.cs
+++ b/02-desktop/Desktop/IStation.Test/Program.cs
@@ -12,6 +12,7 @@
         // 淇缁勫悎鍋忓樊
         static void Main(string[] args)
         {
+            Console.WriteLine("start");
             //Station1Helper.Start();  //1 鏁版嵁淇
             //Station2Helper.Start();  //2 妯″瀷淇
             // 3  python淇 ,鐩墠鏈変簺鏁版嵁闂杩橀渶瑕佽В鍐�
@@ -20,16 +21,70 @@
             //StationCombineHelper.Start(1);// 5 缁勫悎鍋忓樊淇
             //StationCombineHelper.Start(2);// 5 缁勫悎鍋忓樊淇
 
-            // 6 鍒嗘瀽娉甸璋辩郴鏁�
-            // 7 
-           // Station2TotalFlowDiffHelper.Start();// 8 琛ュ叏娴侀噺鍋忓樊 + python
+            // AnalysisDeviation(); // 6 鍒嗘瀽娉甸璋辩郴鏁�
 
+            // 7 
+            // Station2TotalFlowDiffHelper.Start();// 8 C# 瀵煎嚭鏁版嵁 琛ュ叏娴侀噺鍋忓樊 + python
+
+
+            //test
+
+            StationTotalFlowPressureHelper.Start();
             Console.WriteLine();
             Console.WriteLine("ok");
             Console.ReadKey();
 
         }
 
+        public static void AnalysisDeviation()
+        {
+            var fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pumpcombine");
+            var fileNameList = Directory.GetFiles(fullPath).Select(x => x).ToList();
+            if (fileNameList == null || fileNameList.Count < 1)
+                return;
+
+            var stationDict = new Dictionary<int, long>
+            {
+                { 1, 462958406303813 },
+                { 2, 462958422204485 }
+            };
+  
+            var bllEquipment = new IStation.BLL.Equipment();
+            var bllCurve = new IStation.BLL.PumpCurve();
+            var combineList = new List<ModelCombineViewModel>();
+
+            var minFlow = 0;
+            var maxFlow = 100000;
+            var spaceFlow = 100;
+            foreach (var fileName in fileNameList)
+            {
+                Console.WriteLine(Path.GetFileNameWithoutExtension(fileName) + ":Start");
+                var indexStr = Path.GetFileNameWithoutExtension(fileName).Substring(0, 1);
+                var index = int.Parse(indexStr);
+                var stationId = stationDict[index];
+                var pumpList = bllEquipment.GetPumpModelListByBelongTypeAndBelongID(IStation.ObjectType.Station, stationId);
+                var flagList = pumpList.Select(x => x.SortCode).OrderBy(x => x).ToList();
+                var flagPumpDict = pumpList.ToDictionary(x => x.SortCode, x => x.RatedParas);
+
+
+                var json = File.ReadAllText(fileName);
+                var templist = JsonHelper.Json2Object<List<ModelCombineViewModel>>(json);
+                var run_flags_flow_pressure_diff_dict = templist
+                                                      .Select(x => (x.RunFlags, x.ScadaTotalFlow, x.ModelDeviation))
+                                                      .ToList();
+                var ana_dev_list = StationCombineHelper.GetAnalysisDeviationDtoList(flagPumpDict, run_flags_flow_pressure_diff_dict, minFlow, maxFlow, spaceFlow);
+                ana_dev_list.ForEach(x => x.Station = index);
+                var root_folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pumpcombineana");
+                if (!Directory.Exists(root_folder))
+                {
+                    Directory.CreateDirectory(root_folder);
+                }
+                var fileNameDev = Path.Combine(root_folder, $"AnalysisDeviation{spaceFlow}.json");
+                StationCombineHelper.SaveAnalysisDeviationDtoList(index, ana_dev_list, fileNameDev);
+                Console.WriteLine(Path.GetFileNameWithoutExtension(fileName) + ":Save");
+            }  
+         
+        }
 
         public static void Completion()
         {
@@ -137,72 +192,9 @@
             }
 
         }
+         
 
-
-        //static void Main(string[] args)
-        //{
-        //    var splineList = new List<CurvePoint>();
-        //    var measuredList = new List<CurvePoint>();
-
-        //    var path = AppDomain.CurrentDomain.BaseDirectory;
-        //    var lienPaht = path + @"\pumpcsv\23_44_old_curve.csv";
-        //    var measuredPath = path + @"\pumpcsv\23_44.csv";
-
-        //    using (var fs = new FileStream(lienPaht, FileMode.Open, FileAccess.Read))
-        //    using (var sr = new StreamReader(fs, Encoding.UTF8))
-        //    {
-        //        var strLine = string.Empty;
-        //        sr.ReadLine();
-        //        while (!string.IsNullOrEmpty(strLine = sr.ReadLine()))
-        //        {
-        //            var strList = strLine.Split(',');
-        //            var x = double.Parse(strList[0]);
-        //            var y = double.Parse(strList[1]);
-        //            splineList.Add(new CurvePoint(x, y));
-        //        }
-        //    }
-
-        //    using (var fs = new FileStream(measuredPath, FileMode.Open, FileAccess.Read))
-        //    using (var sr = new StreamReader(fs, Encoding.UTF8))
-        //    {
-        //        var strLine = string.Empty;
-        //        sr.ReadLine();
-        //        while (!string.IsNullOrEmpty(strLine = sr.ReadLine()))
-        //        {
-        //            var strList = strLine.Split(',');
-        //            var x = double.Parse(strList[4]);
-        //            var y = double.Parse(strList[5]);
-        //            measuredList.Add(new CurvePoint(x, y));
-        //        }
-        //    }
-
-
-        //    // 鏍锋潯鏇茬嚎澶勭悊
-        //    double[] splineX = splineList.Select(x => x.X).ToArray();
-        //    double[] splineY = splineList.Select(x => x.Y).ToArray();
-
-        //    // 瀹炴祴鏁版嵁澶勭悊
-        //    double[] measuredXAll = measuredList.Select(x => x.X).ToArray();
-        //    double[] measuredYAll = measuredList.Select(x => x.Y).ToArray();
-
-
-
-        //    var helper = new PumpCurveDataFusionCorrectorHelper();
-        //    (double[] mergedX, double[] mergedY, double[] optimizedX, double[] optimizedY) = helper.Corrent(splineX, splineY, measuredXAll, measuredYAll);
-
-        //    var pt_list = new List<CurvePoint>();
-        //    for (int i = 0; i < optimizedX.Length; i++)
-        //    {
-        //        var x = optimizedX[i];
-        //        var y = optimizedY[i];
-        //        pt_list.Add(new CurvePoint(x, y));
-        //    }
-        //    var fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pumpcsv");
-        //    CsvHelper.ExportToCsv(pt_list, Path.Combine(fullPath, $"23_44_update_curve.csv"));
-
-        //    Console.WriteLine("ok");
-        //    Console.ReadKey();
-        //}
+ 
 
         private static Dictionary<int, IStation.Model.CurveExpress> GetFlagCurveDict()
         {
diff --git a/02-desktop/Desktop/IStation.Test/StationCombineHelper.cs b/02-desktop/Desktop/IStation.Test/StationCombineHelper.cs
index b486f55..8443856 100644
--- a/02-desktop/Desktop/IStation.Test/StationCombineHelper.cs
+++ b/02-desktop/Desktop/IStation.Test/StationCombineHelper.cs
@@ -106,15 +106,24 @@
             Directory.CreateDirectory(folder);
         }
 
-        CsvHelper.ExportToCsv(vm_combine_list, Path.Combine(folder, $"{stationIndex}_combine.csv"));
+        vm_combine_list.ForEach(x => x.Round());
+        var file_path = Path.Combine(folder, $"{stationIndex}_combine.json"); 
+        var json= JsonHelper.Object2Json(vm_combine_list);
+        File.WriteAllText(file_path, json);
 
         var run_flags_flow_pressure_diff_dict = vm_combine_list
            .Select(x => (x.RunFlags, x.ScadaTotalFlow, x.ModelDeviation))
            .ToList();
 
         var ana_dev_list = GetAnalysisDeviationDtoList(flagPumpDict, run_flags_flow_pressure_diff_dict, _min_flow, _max_flow, _space_flow);
-        ana_dev_list.ForEach(x => x.Station = stationIndex);
-        SaveAnalysisDeviationDtoList(stationIndex, ana_dev_list);
+        ana_dev_list.ForEach(x => x.Station = stationIndex); 
+        var root_folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pumpcombineana");
+        if (!Directory.Exists(root_folder))
+        {
+            Directory.CreateDirectory(root_folder);
+        }
+        var fileName = Path.Combine(root_folder, "AnalysisDeviation.json");
+        SaveAnalysisDeviationDtoList(stationIndex, ana_dev_list, fileName);
     }
 
     private static void InitializePumpModelMapping(List<IStation.WinFrmUI.AnalysisHelper.PumpMapping> pump_model_mapping_list,
@@ -349,7 +358,7 @@
             {
                 Time = time,
                 RunFlags = IStation.Untity.IntListHelper.ToString(flags),
-                ModelDeviation = new List<(int, double, double)>()
+                ModelDeviation = new ()
             };
             vm_combine_list.Add(vm_combine);
 
@@ -530,7 +539,7 @@
 
             vm_combine.ScadaTotalFlow += flow < 1 ? model_flow : flow;
             vm_combine.ModelTotalFlow += model_flow;
-            vm_combine.ModelDeviation.Add((flag, calc_flow, pressure_diff_dev));
+            vm_combine.ModelDeviation.Add(new (flag, calc_flow, pressure_diff_dev));
         }
     }
 
@@ -610,7 +619,7 @@
         }
     }
 
-    public static List<AnalysisHelper.AnalysisDeviationDto> GetAnalysisDeviationDtoList(Dictionary<int, IStation.Model.PumpModel> flag_pump_dict, List<(string, double, List<(int, double, double)>)> run_flags_flow_pressure_diff_dict, double minQ = 0, double maxQ = 100000, double spaceQ = 1000)
+    public static List<AnalysisHelper.AnalysisDeviationDto> GetAnalysisDeviationDtoList(Dictionary<int, IStation.Model.PumpModel> flag_pump_dict, List<(string, double, List<ModelCombineDiff>)> run_flags_flow_pressure_diff_dict, double minQ = 0, double maxQ = 100000, double spaceQ = 1000)
     {
         if (flag_pump_dict == null || !flag_pump_dict.Any() || run_flags_flow_pressure_diff_dict == null || !run_flags_flow_pressure_diff_dict.Any())
         {
@@ -653,12 +662,13 @@
         return resultList;
     }
 
-    private static AnalysisHelper.AnalysisDeviationDto CreateAnalysisDeviationDto(IGrouping<string, (string, double, List<(int, double, double)>)> runFlagsGroup, double currentMinQ, double currentMaxQ)
+    private static AnalysisHelper.AnalysisDeviationDto CreateAnalysisDeviationDto(IGrouping<string, (string, double, List<ModelCombineDiff>)> runFlagsGroup, double currentMinQ, double currentMaxQ)
     {
 
+        var meanDict = new Dictionary<int, double>();
         var devDict = new Dictionary<int, double>();
         var allTuples = runFlagsGroup.SelectMany(x => x.Item3).ToList();
-        var groupedByFlag = allTuples.GroupBy(x => x.Item1);
+        var groupedByFlag = allTuples.GroupBy(x => x.Flag);
 
         var isError = false;
 
@@ -666,15 +676,16 @@
         {
             // 杩囨护寮傚父鍊�
             var list = flagGroup.ToList();
-            var filterList = DynamicThresholdProcessorHelper.Filter(list);
+            var filterList = Filter(list);
             if (filterList.Count < 1)
             {
                 isError = true;
                 break;
             }
             // 璁$畻鏍囧噯宸�
-            var (mean, stdDev) = DynamicThresholdProcessorHelper.CalculateStats(filterList.Select(x => x.Item3).ToList());
-            devDict.Add(flagGroup.Key, Math.Round(mean, 3));
+            var (mean, stdDev) = DynamicThresholdProcessorHelper.CalculateStats(filterList.Select(x => x.PressureDiff).ToList());
+            meanDict.Add(flagGroup.Key, Math.Round(mean, 3 ));
+            devDict.Add(flagGroup.Key, Math.Round(stdDev, 4 ));
         }
 
         if (isError)
@@ -687,12 +698,31 @@
             MinFlow = currentMinQ,
             MaxFlow = currentMaxQ,
             Count = runFlagsGroup.Count(),
-            PressureDiff = devDict,
+            PressureDiff = meanDict,
+            StdDev= devDict
         };
         vm.Count = runFlagsGroup.Count();
-        vm.PressureDiff = devDict;
+        vm.PressureDiff = meanDict;
 
         return vm;
+    }
+
+    public static List<ModelCombineDiff> Filter(List<ModelCombineDiff> ptList)
+    {
+        var pressures = ptList.Select(p => p.PressureDiff).ToList();
+
+        // 璁$畻缁熻閲�
+        var (mean, stdDev) = DynamicThresholdProcessorHelper.CalculateStats(pressures);
+        double skewness = DynamicThresholdProcessorHelper.CalculateSkewness(pressures);
+        // 鍔ㄦ�佽皟鏁聪冨�嶆暟
+        //double sigmaMultiplier = DynamicThresholdProcessorHelper.CalculateSigmaMultiplier(skewness);
+        var sigmaMultiplier = 3;//鐩墠榛樿 鏍囧噯宸�
+
+        // 璁$畻杈圭晫
+        double lower = mean - sigmaMultiplier * stdDev;
+        double upper = mean + sigmaMultiplier * stdDev;
+
+        return ptList.Where(p => p.PressureDiff >= lower && p.PressureDiff <= upper).ToList();
     }
 
     private static bool IsValidDeviation(Dictionary<int, double> devDict)
@@ -707,16 +737,10 @@
         return true;
     }
 
-    public static bool SaveAnalysisDeviationDtoList(int stationIndex, List<AnalysisHelper.AnalysisDeviationDto> all_list)
+    public static bool SaveAnalysisDeviationDtoList(int stationIndex, List<AnalysisHelper.AnalysisDeviationDto> all_list,string fileName)
     {
-        var root_folder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pumpcombineana");
-        if (!Directory.Exists(root_folder))
-        {
-            Directory.CreateDirectory(root_folder);
-        }
-
-        List<AnalysisHelper.AnalysisDeviationDto>? exist_list = null;
-        var fileName = Path.Combine(root_folder, "AnalysisDeviation.json");
+       
+        List<AnalysisHelper.AnalysisDeviationDto>? exist_list = null; 
         if (File.Exists(fileName))
         {
             var exist_json = File.ReadAllText(fileName);
@@ -735,7 +759,6 @@
         File.WriteAllText(fileName, json);
         return true;
     }
-
 
     private static Dictionary<int, IStation.Model.CurveExpress> GetFlagCurveDict()
     {
@@ -849,7 +872,7 @@
     }
 
     public static (float[] NewX, float[] newY) Create(List<double> x, List<double> y)
-    { 
+    {
         // 浣跨敤PCHIP鎻掑�硷紙淇濆舰鍒嗘涓夋鎻掑�硷級
         IInterpolation interpolator = CubicSpline.InterpolatePchipSorted(
             x.ToArray(),
@@ -857,18 +880,15 @@
         );
 
         // 鐢熸垚鎻掑�肩偣锛堜緥濡傚湪0鍒�5涔嬮棿鐢熸垚100涓偣锛�
-        List<double> xNew = new List<double>();
-        List<double> yNew = new List<double>();
-        for (double xi = x[0]; xi <= x[x.Count - 1]; xi += 1)
+        List<double> xNew = new();
+        List<double> yNew = new();
+        for (double xi = x[0]; xi <= x[^1]; xi += 1)
         {
             xNew.Add(xi);
             yNew.Add(interpolator.Interpolate(xi));
         }
 
-
-
-        return (xNew.Select(x=>((float)x)).ToArray(), yNew.Select(x => ((float)x)).ToArray());
-
+        return (xNew.Select(x => ((float)x)).ToArray(), yNew.Select(x => ((float)x)).ToArray());
 
     }
 
@@ -876,12 +896,7 @@
 
     /// <summary>
     /// 璁$畻鐩镐技娴侀噺鎵▼鏇茬嚎
-    /// </summary>
-    /// <param name="express">琛ㄨ揪寮�</param>
-    /// <param name="originHz">鍘熷棰戠巼</param>
-    /// <param name="changeHz">鎹㈢畻棰戠巼</param>
-    /// <param name="pointNumber">鎷熷悎鐐规暟閲�</param>
-    /// <returns></returns>
+    /// </summary>   
     public static List<CurvePoint> CalculateSimilarQH(List<CurvePoint> ptList, double originHz, double changeHz, int pointNumber = 12)
     {
         if (ptList == null || !ptList.Any())
@@ -909,5 +924,34 @@
     public string RunFlags { get; set; }
     public double ScadaTotalFlow { get; set; }
     public double ModelTotalFlow { get; set; }
-    public List<(int, double, double)> ModelDeviation { get; set; }
+    public List<ModelCombineDiff> ModelDeviation { get; set; }
+
+    public void Round()
+    {
+        this.ScadaTotalFlow = Math.Round(ScadaTotalFlow, 1);
+        this.ModelTotalFlow = Math.Round(ModelTotalFlow, 1);
+        this.ModelDeviation?.ForEach(x => x.Round());
+    }
+}
+
+public class ModelCombineDiff
+{
+    public ModelCombineDiff() { }
+    public ModelCombineDiff(int flag, double calcFlow, double pressureDiff)
+    {
+        Flag = flag;
+        CalcFlow = calcFlow;
+        PressureDiff = pressureDiff;
+    }
+
+    public int Flag { get; set; }
+    public double CalcFlow { get; set; }
+    public double PressureDiff { get; set; }
+
+    public void Round()
+    {
+        this.CalcFlow = Math.Round(CalcFlow, 1);
+        this.PressureDiff = Math.Round(PressureDiff, 4);
+    }
+
 }
\ No newline at end of file
diff --git a/02-desktop/Desktop/IStation.Test/StationTotalFlowPressureHelper.cs b/02-desktop/Desktop/IStation.Test/StationTotalFlowPressureHelper.cs
new file mode 100644
index 0000000..c3e1475
--- /dev/null
+++ b/02-desktop/Desktop/IStation.Test/StationTotalFlowPressureHelper.cs
@@ -0,0 +1,75 @@
+锘縰sing IStation.Model;
+
+namespace IStation.Test
+{
+    public class StationTotalFlowPressureHelper
+    {
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public static void Start(int stationIndex = 1)
+        {
+
+            var projectId = 661070185922629;
+            IStation.SettingsD.Project.ID = projectId;
+            var monitorDataSourcesId = 663976941449285; // 2024 - 202504
+            var stationId = 462958406303813; 
+
+            if (stationIndex > 1)
+            {
+                stationIndex = 2;
+                stationId = 462958422204485;
+            }
+            var bll = new BLL.StationSignalRecordPacket();  
+            var ptFilterList = new List<CurvePtViewModel>();
+
+            var packets = bll.Get(monitorDataSourcesId, stationId);
+            var ptList = new List<CurvePtViewModel>();
+
+            var records = packets.SelectMany(x => x.StationSignalRecords).ToList();
+            foreach (var x in records)
+            {
+                if (x.TotalPressure > 0 && x.TotalFlow > 0)
+                {
+                    ptList.Add(new CurvePtViewModel(x.TotalFlow, x.TotalPressure));
+                }
+            }
+            ptFilterList = Filter(ptList);
+            var fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "stationcsv");
+            if (!Directory.Exists(fullPath))
+            {
+                Directory.CreateDirectory(fullPath);
+            }
+             
+            string filePath = Path.Combine(fullPath, $"{stationIndex}_flow_pressure.csv"); 
+            CsvHelper.ExportToCsv(ptFilterList, filePath);
+
+            Console.WriteLine("ok");
+            Console.ReadKey();
+
+        }
+         
+
+        public static List<CurvePtViewModel> Filter(List<CurvePtViewModel> ptList)
+        {
+            var pressures = ptList.Select(p => p.Y).ToList();
+
+            // 璁$畻缁熻閲�
+            var (mean, stdDev) = DynamicThresholdProcessorHelper.CalculateStats(pressures);
+            double skewness = DynamicThresholdProcessorHelper.CalculateSkewness(pressures);
+            // 鍔ㄦ�佽皟鏁聪冨�嶆暟
+            double sigmaMultiplier = DynamicThresholdProcessorHelper.CalculateSigmaMultiplier(skewness);
+            sigmaMultiplier = 3;//鐩墠榛樿 鏍囧噯宸�
+
+            // 璁$畻杈圭晫
+            double lower = mean - sigmaMultiplier * stdDev;
+            double upper = mean + sigmaMultiplier * stdDev;
+
+            return ptList.Where(p => p.Y >= lower && p.Y <= upper).ToList();
+        }
+
+         
+
+    }
+}
+
diff --git a/02-desktop/Desktop/IStation.Test/helper/DynamicThresholdProcessorHelper.cs b/02-desktop/Desktop/IStation.Test/helper/DynamicThresholdProcessorHelper.cs
index b0082fd..f145c76 100644
--- a/02-desktop/Desktop/IStation.Test/helper/DynamicThresholdProcessorHelper.cs
+++ b/02-desktop/Desktop/IStation.Test/helper/DynamicThresholdProcessorHelper.cs
@@ -4,44 +4,7 @@
     public class DynamicThresholdProcessorHelper
     {
 
-        public static List<(int, double, double)> Filter(List<(int, double, double)> ptList)
-        {
-            var pressures = ptList.Select(p => p.Item3).ToList();
-
-            // 璁$畻缁熻閲�
-            var (mean, stdDev) = CalculateStats(pressures);
-            double skewness = CalculateSkewness(pressures);
-            // 鍔ㄦ�佽皟鏁聪冨�嶆暟
-            double sigmaMultiplier = CalculateSigmaMultiplier(skewness);
-            sigmaMultiplier = 3;//鐩墠榛樿 鏍囧噯宸�
-
-            // 璁$畻杈圭晫
-            double lower = mean - sigmaMultiplier * stdDev;
-            double upper = mean + sigmaMultiplier * stdDev;
-
-            return ptList.Where(p => p.Item3 >= lower && p.Item3 <= upper).ToList();
-        }
-
-       
-
-
-        public static List<PointViewModel> Filter(List<PointViewModel> ptList)
-        {
-            var pressures = ptList.Select(p => p.Y).ToList();
-
-            // 璁$畻缁熻閲�
-            var (mean, stdDev) = CalculateStats(pressures);
-            double skewness = CalculateSkewness(pressures);
-            // 鍔ㄦ�佽皟鏁聪冨�嶆暟
-            double sigmaMultiplier = CalculateSigmaMultiplier(skewness);
-            sigmaMultiplier = 3;//鐩墠榛樿 鏍囧噯宸�
-             
-            // 璁$畻杈圭晫
-            double lower = mean - sigmaMultiplier * stdDev;
-            double upper = mean + sigmaMultiplier * stdDev;
-
-            return ptList.Where(p => p.Y >= lower && p.Y <= upper).ToList();
-        }
+   
 
         public static List<PumpViewModel> Filter(List<PumpViewModel> ptList)
         {
@@ -119,7 +82,7 @@
         }
 
         // 鍔ㄦ�佅冨�嶆暟璁$畻瑙勫垯
-        private static double CalculateSigmaMultiplier(double skewness)
+        public static double CalculateSigmaMultiplier(double skewness)
         {
 
             return skewness switch
diff --git a/02-desktop/Desktop/IStation.Test/schedule/CorrectedStationScheduleModelHelper.cs b/02-desktop/Desktop/IStation.Test/schedule/CorrectedStationScheduleModelHelper.cs
new file mode 100644
index 0000000..d889463
--- /dev/null
+++ b/02-desktop/Desktop/IStation.Test/schedule/CorrectedStationScheduleModelHelper.cs
@@ -0,0 +1,605 @@
+锘縰sing DevExpress.XtraRichEdit.Model;
+using IStation.Epanet.Enums;
+using IStation.Epanet;
+using IStation.Model;
+using IStation.WinFrmUI;
+using System.Runtime;
+using System.Text;
+using IStation.Untity;
+
+namespace IStation.Test
+{
+    public class CorrectedStationScheduleModelHelper
+    {
+        private static int _ratedFrequency = 50;
+
+        /// <summary>
+        /// 鏁版嵁棰勫鐞�
+        /// </summary>
+        public static void StationDataPreproc(
+            Dictionary<int, PumpScheduleModel> pumpScheduleDict,
+            List<StationRunRecord> allStationRunRecordList,
+            List<StationModelMapping> stationModelMappingList,
+            List<PumpModelMapping> pumpModelMappingList,
+            string modelFile
+            )
+        {
+            // 鍏堣繃婊や竴娉㈡暟鎹啀浼犺繘鏉�
+            if (VerifyNull(pumpScheduleDict))
+            {
+                return;
+            }
+            if (VerifyNull(allStationRunRecordList))
+            {
+                return;
+            }
+
+
+            var temp_id_build = new StringBuilder(31);
+            var code = EpanetMethods.ENopen(modelFile, "", "");
+            CheckCode(code);
+
+            code = EpanetMethods.ENopenH();
+            if ((int)code > 6)
+            {
+                throw new Exception($"ENopenH锛歿code}");
+            }
+
+            var curvePointCount = 100;
+            foreach (var mapping in pumpModelMappingList)
+            { 
+                var flag = mapping.Flag;
+                var pumpSchedule = pumpScheduleDict[flag];
+                code = EpanetMethods.ENgetlinkindex(mapping.PumpId, out int pumpIndex);
+                CheckCode(code);
+
+                if (!string.IsNullOrEmpty(mapping.FlowId))
+                {
+                    code = EpanetMethods.ENgetlinkindex(mapping.FlowId, out int flowIndex);
+                    CheckCode(code);
+                    mapping.FlowIndex = flowIndex;
+                }
+                code = EpanetMethods.ENgetnodeindex(mapping.PressureId, out int pressureIndex);
+                CheckCode(code);
+
+                code = EpanetMethods.ENgetcurveindex(mapping.CurveId, out int curveIndex);
+                CheckCode(code);
+
+                mapping.PumpIndex = pumpIndex;
+                mapping.PressureIndex = pressureIndex;
+                mapping.CurveIndex = curveIndex;
+
+
+                var curveQH = pumpSchedule.CurveQH;
+                var fitPtList = curveQH.GetFitPoints(curvePointCount);
+                var xList = fitPtList.Select(x => (float)x.X).ToArray();
+                var yList = fitPtList.Select(x => (float)x.Y).ToArray();
+
+                if (!CheckFitPointList(xList, yList))
+                {
+                    throw new Exception($"CheckFitPointList: false");
+                }
+                code = EpanetMethods.ENsetcurve(mapping.CurveIndex, xList, yList, xList.Length);
+                CheckCode(code);
+            }
+
+            foreach (var mapping in stationModelMappingList)
+            {
+                code = EpanetMethods.ENgetlinkindex(mapping.FlowId, out int flowIndex);
+                CheckCode(code); 
+                code = EpanetMethods.ENgetnodeindex(mapping.PressureId, out int pressureIndex);
+                CheckCode(code);
+
+                mapping.PressureIndex = pressureIndex;
+                mapping.FlowIndex = flowIndex; 
+            }
+
+            var pumpModelMappingDict = pumpModelMappingList.ToDictionary(x => x.Flag, y => y);
+            var pattern_id_list = AnalysisHelper.GetPatternIdList();
+            var pattern_id_dict = new Dictionary<string, int>();
+            foreach (var id in pattern_id_list)
+            {
+                if (EpanetMethods.ENgetpatternindex(id, out int index) != ErrorCode.Ok)
+                    continue;
+                pattern_id_dict.Add(id, index);
+            }
+
+            var vm_list = new List<PumpViewModel>();
+            var vm_diff_list = new List<ModelDiffViewModel>();
+            foreach (var station_record in allStationRecordList)
+            {
+                var model_record_dict = station_record.ModelRecordDict;
+                var pipe_flow_err = true;
+                var pipe_pressure_err = true;
+                foreach (var id in pipeFlowIdList)
+                {
+                    if (model_record_dict[id] < 1)
+                    {
+                        pipe_flow_err = false;
+                        break;
+                    }
+                }
+                foreach (var id in pipePressureIdList)
+                {
+                    var value = model_record_dict[id];
+                    if (value < 1 || value > 40)
+                    {
+                        pipe_pressure_err = false;
+                        break;
+                    }
+                }
+                if (!pipe_flow_err || !pipe_pressure_err)
+                {
+                    continue;
+                }
+                var time = station_record.Time.ToString("G");
+                var pump_allStationRecordList = station_record.PumpSignalRecords;
+                var total_flow = station_record.TotalFlow;
+                var total_pressure = station_record.TotalPressure;
+                var pump_total_flow = pump_allStationRecordList.Sum(x => x.FlowRate);
+                var diff_flow = station_record.DiffFlow;
+                if (total_pressure < 0)
+                {
+                    continue;
+                }
+                if (total_flow <= 0 && pump_total_flow <= 0)
+                {
+                    continue;
+                }
+                if (pump_total_flow > 0 && Math.Abs(diff_flow) > 2000)
+                {
+                    continue;
+                }
+                if (pump_allStationRecordList.Exists(x => x.Flag != 15 && x.Flag != 16 && x.Rpm < 1))
+                {
+                    continue;
+                }
+                if (pump_allStationRecordList.Exists(x => x.OutletPressure > 50))
+                {
+                    continue;
+                }
+
+                foreach (var pattern in pattern_id_dict)
+                {
+                    var pattern_id = pattern.Key;
+                    var pattern_index = pattern.Value;
+                    var pattern_value = 0f;
+                    if (model_record_dict.ContainsKey(pattern_id))
+                    {
+                        pattern_value = (float)model_record_dict[pattern_id];
+                    }
+                    code = EpanetMethods.ENsetpattern(pattern_index, new float[] { pattern_value }, 1);
+                    if ((int)code > 6)
+                    {
+                        throw new Exception($"ENsetpattern锛歿code}");
+                    }
+                }
+
+                code = EpanetMethods.ENinitH(0);
+                if ((int)code > 6)
+                {
+                    throw new Exception($"ENinitH锛歿code}");
+                }
+
+                code = EpanetMethods.ENrunH(out _);
+                if ((int)code > 6)
+                {
+                    throw new Exception($"ENrunH锛歿code}");
+                }
+
+
+                foreach (var pump_record in pump_allStationRecordList)
+                {
+                    var flag = pump_record.Flag;
+                    var pump = flagPumpDict[flag];
+                    var qh = flagQhCurveDict[flag];
+                    var mapping = pumpModelMappingDict[flag];
+                    var rpm = pump_record.Rpm;
+                    if (!pump.IsBp)
+                        rpm = pump.Nr;
+                    if (rpm == 0)
+                        break;
+
+
+                    var hz = Math.Round(rpm / pump.Nr * 50, 2);
+                    var hz0 = Math.Round(hz, 0);
+                    var wl = pump_record.WaterLevel;
+                    var inlet_pressure = Model.CurveCalcuHelper.Mpa2M(pump_record.InletPressure);
+                    var outlet_pressure = Model.CurveCalcuHelper.Mpa2M(pump_record.OutletPressure);
+                    var pressure_diff = outlet_pressure - inlet_pressure;
+                    var flow = pump_record.FlowRate;
+                    var curve_head = pump_record.Head;
+
+
+                    code = EpanetMethods.ENgetlinkvalue(mapping.PumpIndex, LinkValue.Flow, out float model_flow);
+                    if ((int)code > 6)
+                    {
+                        throw new Exception($"ENgetnodevalue锛歿code}");
+                    }
+                    if (Math.Abs(model_flow) < 1)
+                    {
+                        break;
+                    }
+
+                    code = EpanetMethods.ENgetnodevalue(mapping.PressureIndex, NodeValue.Pressure, out float model_outlet_pressure);
+                    if ((int)code > 6)
+                    {
+                        throw new Exception($"ENgetnodevalue锛歿code}");
+                    }
+
+                    if (Math.Abs(model_outlet_pressure) > 45)
+                    {
+                        break;
+                    }
+
+                    model_flow = Math.Abs(model_flow);
+                    model_outlet_pressure = Math.Abs(model_outlet_pressure);
+                    var model_pressure_diff = model_outlet_pressure - inlet_pressure;
+
+                    var flow_diff = flow - model_flow;
+
+                    var vm = new PumpViewModel();
+                    vm.Time = time;
+                    vm.Rpm = rpm;
+                    vm.Flag = flag;
+                    vm.Hz = hz;
+                    vm.Hz0 = hz0;
+                    vm.WaterLevel = wl;
+                    vm.InletPressure = Math.Round(inlet_pressure, 2);
+                    vm.OutletPressure = Math.Round(outlet_pressure, 2);
+                    vm.PressureDiff = Math.Round(pressure_diff, 2);
+
+                    vm.Flow = Math.Round(flow, 1);
+                    vm.ModelFlow = Math.Round(model_flow, 1);
+                    vm.ModelOutletPressure = Math.Round(model_outlet_pressure, 2);
+                    vm.CurvePressureDiff = Math.Round(model_pressure_diff, 2);
+                    vm.PressureDiffDev = Math.Round(pressure_diff - model_pressure_diff, 3);
+                    vm.FlowDiff = Math.Round(flow_diff, 1);
+
+                    var other_press = 0d;
+                    if (pump.IsBp)
+                    {
+                        other_press = Model.CurveCalcuHelper.CalculateOtherPress(model_flow, pump.Ic, pump.Oc, null, null);
+                    }
+
+                    var other_outlet = other_press + pressure_diff;
+                    var mdoel_other_outlet = other_press + model_pressure_diff;
+                    var diff = pressure_diff - model_pressure_diff;
+
+                    if (diff > 0.1)
+                    {
+
+                    }
+                    var calcHead = other_outlet + vm.PressureDiffDev;
+                    vm.CalcHead = Math.Round(mdoel_other_outlet, 2);
+
+                    vm_list.Add(vm);
+
+                }
+
+                foreach (var mapping in model_mapping_list)
+                {
+                    if (!model_record_dict.ContainsKey(mapping.ScadaPressureId))
+                    {
+                        continue;
+                    }
+                    if (!model_record_dict.ContainsKey(mapping.ScadaFlowId))
+                    {
+                        continue;
+                    }
+                    var flow = model_record_dict[mapping.ScadaFlowId];
+                    var outlet_pressure = model_record_dict[mapping.ScadaPressureId];
+
+                    code = EpanetMethods.ENgetlinkvalue(mapping.FlowIndex, LinkValue.Flow, out float model_flow);
+                    if ((int)code > 6)
+                    {
+                        throw new Exception($"ENgetnodevalue锛歿code}");
+                    }
+
+                    code = EpanetMethods.ENgetnodevalue(mapping.PressureIndex, NodeValue.Pressure, out float model_outlet_pressure);
+                    if ((int)code > 6)
+                    {
+                        throw new Exception($"ENgetnodevalue锛歿code}");
+                    }
+
+                    var flow_diff = flow - model_flow;
+                    var pressure_diff = outlet_pressure - model_outlet_pressure;
+
+                    var vm = new ModelDiffViewModel();
+                    vm.Date = station_record.Time;
+                    vm.Time = time;
+                    vm.Name = mapping.Name;
+                    vm.ScadaFlow = Math.Round(flow, 1);
+                    vm.ScadaPressure = Math.Round(outlet_pressure, 3);
+                    vm.MonitorFlow = Math.Round(model_flow, 1);
+                    vm.MonitorPressure = Math.Round(model_outlet_pressure, 3);
+                    vm.FlowDiff = Math.Round(flow_diff, 1);
+                    vm.PressureDiff = Math.Round(pressure_diff, 3);
+                    vm_diff_list.Add(vm);
+                }
+            }
+
+            code = EpanetMethods.ENcloseH();
+            if ((int)code > 6)
+            {
+                throw new Exception($"ENcloseH锛歿code}");
+            }
+            code = EpanetMethods.ENclose();
+            if ((int)code > 6)
+            {
+                throw new Exception($"ENclose锛歿code}");
+            }
+
+            if (!vm_list.Any())
+            {
+                return;
+            }
+            var fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pumpcsv");
+            var allPumpRecordList2 = vm_list.Where(x =>
+            {
+                if (x.Rpm == IStation.Error.Default)
+                {
+                    return false;
+                }
+
+                return true;
+            }).ToList();
+            var pumpFlagRecordGroup = allPumpRecordList2.OrderBy(x => x.Flag).GroupBy(x => x.Flag);
+            var pumpFlagHzRecordGroup = new Dictionary<(int Flag, int Hz), List<PumpViewModel>>();
+            foreach (var pumpFlag in pumpFlagRecordGroup)
+            {
+                var flag = pumpFlag.Key;
+                var pump = flagPumpDict[flag];
+                var pumpQh = flagQhCurveDict[flag];
+                if (!pump.IsBp)
+                {
+                    var allFlagHzRecordList = pumpFlag.ToList();
+                    if (allFlagHzRecordList.Count < 30)
+                    {
+                        Console.WriteLine($"{flag}娉�-{50}hz 鎬绘暟:{allFlagHzRecordList.Count},<5 璺宠繃");
+                    }
+                    var flagHzRecordList = DynamicThresholdProcessorHelper.Filter(allFlagHzRecordList);
+                    Console.WriteLine($"{flag}娉�-{50}hz 鎬绘暟:{allFlagHzRecordList.Count},杩囨护:{allFlagHzRecordList.Count - flagHzRecordList.Count}");
+                    pumpFlagHzRecordGroup.Add((flag, 50), flagHzRecordList);
+                    if (flagHzRecordList.Any())
+                    {
+                        var curvePtList = pumpQh.GetFitPoints(200).Select(x => new CurvePtViewModel(x)).ToList();
+                        CsvHelper.ExportToCsv(curvePtList, Path.Combine(fullPath, $"{flag}_{50}_old_curve.csv"));
+                        CsvHelper.ExportToCsv(flagHzRecordList.Select(x => new CurvePtViewModel(x.ModelFlow, x.CalcHead)).ToList(), Path.Combine(fullPath, $"{flag}_{50}.csv"));
+                    }
+                }
+                else
+                {
+                    var hzGroup = pumpFlag.OrderBy(x => x.Rpm).GroupBy(x =>
+                    {
+                        var hz = Math.Round(x.Rpm / pump.Nr * 50, 0);
+                        return hz;
+                    });
+                    hzGroup = hzGroup.Where(x => x.Key > 10).ToList();
+                    foreach (var pumpFlagHz in hzGroup)
+                    {
+                        var hz = pumpFlagHz.Key;
+                        if (hz > 50)
+                        {
+                            continue;
+                        }
+                        var allFlagHzRecordList = pumpFlagHz.ToList();
+                        if (allFlagHzRecordList.Count < 30)
+                        {
+                            Console.WriteLine($"{flag}娉�-{hz}hz 鎬绘暟:{allFlagHzRecordList.Count},<5 璺宠繃");
+                        }
+                        var flagHzRecordList = DynamicThresholdProcessorHelper.Filter(allFlagHzRecordList);
+                        if (allFlagHzRecordList.Count < 30)
+                        {
+                            Console.WriteLine($"{flag}娉�-{hz}hz 杩囨护鍚庢�绘暟:{allFlagHzRecordList.Count},<5 璺宠繃");
+                        }
+                        Console.WriteLine($"{flag}娉�-{hz}hz 鎬绘暟:{allFlagHzRecordList.Count},杩囨护:{allFlagHzRecordList.Count - flagHzRecordList.Count}");
+                        pumpFlagHzRecordGroup.Add((flag, (int)hz), flagHzRecordList);
+                        if (flagHzRecordList.Any())
+                        {
+                            var curvePtList = SimilarCalculateHelper.CalculateQH(pumpQh, 50, hz).GetFitPoints(100);
+                            CsvHelper.ExportToCsv(curvePtList.Select(x => new CurvePtViewModel(x)).ToList(), Path.Combine(fullPath, $"{flag}_{hz}_old_curve.csv"));
+                            CsvHelper.ExportToCsv(flagHzRecordList.Select(x => new CurvePtViewModel(x.ModelFlow, x.CalcHead)).ToList(), Path.Combine(fullPath, $"{flag}_{hz}.csv"));
+                        }
+                    }
+
+                }
+
+            }
+
+
+
+
+            GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
+            GC.Collect(2, GCCollectionMode.Forced);
+            GC.WaitForFullGCComplete();
+
+        }
+
+        /// <summary>
+        /// 鏁版嵁棰勫鐞�
+        /// </summary>
+        public static void PumpDataPreproc(
+            Dictionary<int, PumpScheduleModel> pumpScheduleDict,
+            List<PumpRunRecord> allPumpRunRecordList
+            )
+        {
+            // 鍏堣繃婊や竴娉㈡暟鎹啀浼犺繘鏉�
+            if (VerifyNull(pumpScheduleDict))
+            {
+                return;
+            }
+            if (VerifyNull(allPumpRunRecordList))
+            {
+                return;
+            }
+
+            var pumpRunRecordGroupByFlag = allPumpRunRecordList.GroupBy(x => x.Flag);
+            foreach (var flagGroup in pumpRunRecordGroupByFlag)
+            {
+                var flag = flagGroup.Key;
+                var pump = pumpScheduleDict[flag];
+                var pumpRunRecordGroupByHz = new Dictionary<int, List<PumpRunRecord>>();
+
+                var tempPumpRunRecordList = flagGroup.ToList();
+                if (pump.IsVariableFrequency)
+                {
+                    var validList = FilterHead(tempPumpRunRecordList);
+                    pumpRunRecordGroupByHz.Add(50, validList);
+                }
+                else
+                {
+                    var tempHzGroup = tempPumpRunRecordList.OrderBy(x => x.Rpm).GroupBy(x =>
+                    {
+                        return (int)Math.Round(x.Rpm / pump.RatedSpeed * _ratedFrequency, 0);
+                    });
+
+                    foreach (var hzGroup in tempHzGroup)
+                    {
+                        var hz = hzGroup.Key;
+                        var tempFilterList = FilterHead(hzGroup);
+                        pumpRunRecordGroupByHz.Add(hz, tempFilterList);
+                    }
+                }
+
+                foreach (var hzGroup in pumpRunRecordGroupByHz)
+                {
+                    var hz = hzGroup.Key;
+                    var similarCurveQH = SimilarCalculateHelper.CalculateQH(pump.CurveQH, _ratedFrequency, hz);
+                    var curveQHPtList = similarCurveQH.GetFitPoints(100);
+
+                    //CsvHelper.ExportToCsv(curvePtList.Select(x => new CurvePtViewModel(x)).ToList(), Path.Combine(fullPath, $"{flag}_{hz}_old_curve.csv"));
+                    //CsvHelper.ExportToCsv(flagHzRecordList.Select(x => new CurvePtViewModel(x.FlowRate, x.Head)), Path.Combine(fullPath, $"{flag}_{hz}.csv"));
+
+                }
+
+            }
+
+
+             
+        }
+
+        public static List<PumpRunRecord> FilterHead(IEnumerable<PumpRunRecord> list)
+        {
+            var pressures = list.Select(p => p.Head).ToList();
+
+            // 璁$畻缁熻閲�
+            var (mean, stdDev) = DynamicThresholdProcessorHelper.CalculateStats(pressures);
+            double skewness = DynamicThresholdProcessorHelper.CalculateSkewness(pressures);
+            // 鍔ㄦ�佽皟鏁聪冨�嶆暟
+            double sigmaMultiplier = DynamicThresholdProcessorHelper.CalculateSigmaMultiplier(skewness);
+            // var sigmaMultiplier = 3;//鐩墠榛樿 鏍囧噯宸�
+
+            // 璁$畻杈圭晫
+            double lower = mean - sigmaMultiplier * stdDev;
+            double upper = mean + sigmaMultiplier * stdDev;
+
+            return list.Where(p => p.Head >= lower && p.Head <= upper).ToList();
+        }
+
+        static bool CheckFitPointList(float[] x, float[] y)
+        {
+
+            bool is_x_increasing = CheckIncreasing(x);
+            bool is_y_decreasing = CheckDecreasing(y);
+            if (!is_x_increasing)
+            {
+                Console.WriteLine("x涓嶆弧瓒抽�掑瓒嬪娍");
+                return false;
+            }
+            if (!is_y_decreasing)
+            {
+                Console.WriteLine("y涓嶆弧瓒抽�掑噺瓒嬪娍");
+                return false;
+            }
+
+            return true;
+        }
+        銆�
+
+        static bool CheckIncreasing(float[] values)
+        {
+            for (int i = 1; i < values.Length; i++)
+            {
+                if (values[i] < values[i - 1])
+                {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        static bool CheckDecreasing(float[] values)
+        {
+            for (int i = 1; i < values.Length; i++)
+            {
+                if (values[i] > values[i - 1])
+                {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+
+        private static bool VerifyNull(IEnumerable<object> objs)
+        {
+            if (objs == null || !objs.Any())
+            {
+                return true;
+            }
+
+            return false;
+
+        }
+
+        private static bool VerifyNull<TKey, TValue>(Dictionary<TKey, TValue> objs)
+        {
+            if (objs == null || !objs.Any())
+            {
+                return true;
+            }
+
+            return false;
+        }
+
+        private static void CheckCode(ErrorCode code)
+        {
+            if (code != ErrorCode.Ok)
+            {
+                if ((int)code > 100)
+                {
+                    var msg = code.GetDisplayText(); 
+                    throw new Exception(msg);
+                }
+
+            }
+        }
+
+        public class PumpModelMapping
+        {
+            public int Flag { get; set; }
+            public string PumpId { get; set; }
+            public string FlowId { get; set; }
+            public string PressureId { get; set; }
+            public string CurveId { get; set; }
+            public int PumpIndex { get; set; }
+            public int FlowIndex { get; set; }
+            public int PressureIndex { get; set; }
+            public int CurveIndex { get; set; }
+
+        }
+
+        public class StationModelMapping
+        { 
+            public string ScadaFlowId { get; set; }
+            public string ScadaPressureId { get; set; }
+            public string FlowId { get; set; }
+            public string PressureId { get; set; }
+
+            public int FlowIndex { get; set; }
+            public int PressureIndex { get; set; }
+
+        }
+    }
+}
diff --git a/02-desktop/Desktop/IStation.Test/schedule/PumpRecordModel.cs b/02-desktop/Desktop/IStation.Test/schedule/PumpRecordModel.cs
new file mode 100644
index 0000000..27e817f
--- /dev/null
+++ b/02-desktop/Desktop/IStation.Test/schedule/PumpRecordModel.cs
@@ -0,0 +1,78 @@
+锘縩amespace IStation.Test
+{
+    public class PumpRunRecord
+    {
+
+        public PumpRunRecord() { }
+        public PumpRunRecord(Model.PumpSignalRecord rhs)
+        {
+            this.Flag = rhs.Flag;
+            this.Rpm = rhs.Rpm;
+            this.InletWaterLevel = rhs.WaterLevel;
+            this.Frequency = rhs.Frequency;
+            this.Flow = rhs.FlowRate;
+            this.InletPressure = rhs.InletPressure;
+            this.OutletPressure = rhs.OutletPressure;
+            this.Head = rhs.Head;
+            this.Power = rhs.InstantaneousPower;
+        }
+
+        public void Round()
+        {
+            this.Rpm = Math.Round(Rpm);
+            this.InletWaterLevel = Math.Round(InletWaterLevel, 3);
+            this.Frequency = Math.Round(Frequency, 2);
+            this.Flow = Math.Round(Flow, 2);
+            this.InletPressure = Math.Round(InletPressure, 5);
+            this.OutletPressure = Math.Round(OutletPressure, 5);
+            this.Head = Math.Round(Head, 2);
+            this.Power = Math.Round(Power, 2);
+        }
+
+        /// <summary>
+        /// 鏈烘车鏍囪瘑
+        /// </summary> 
+        public int Flag { get; set; }
+
+        /// <summary>
+        /// 姘翠綅
+        /// </summary> 
+        public double InletWaterLevel { get; set; }
+
+        /// <summary>
+        /// 杩涘彛鍘嬪姏
+        /// </summary> 
+        public double InletPressure { get; set; }
+
+        /// <summary>
+        /// 鍑哄彛鍘嬪姏
+        /// </summary> 
+        public double OutletPressure { get; set; }
+
+        /// <summary>
+        /// 鐬椂娴侀噺
+        /// </summary> 
+        public double Flow { get; set; }
+
+        /// <summary>
+        /// 鎵▼
+        /// </summary> 
+        public double Head { get; set; }
+
+        /// <summary>
+        /// 鐬椂鍔熺巼
+        /// </summary>   
+        public double Power { get; set; }
+
+        /// <summary>
+        /// 杞��
+        /// </summary> 
+        public double Rpm { get; set; }
+
+        /// <summary>
+        /// 棰戠巼
+        /// </summary> 
+        public double Frequency { get; set; }
+
+    }
+}
diff --git a/02-desktop/Desktop/IStation.Test/schedule/PumpScheduleModel.cs b/02-desktop/Desktop/IStation.Test/schedule/PumpScheduleModel.cs
new file mode 100644
index 0000000..53f2d7c
--- /dev/null
+++ b/02-desktop/Desktop/IStation.Test/schedule/PumpScheduleModel.cs
@@ -0,0 +1,113 @@
+锘縰sing IStation.Model;
+
+namespace IStation.Test
+{
+    public class PumpScheduleModel
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public PumpScheduleModel() { }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public PumpScheduleModel(PumpModel rhs)
+        {
+            this.Flag = rhs.Flag;
+            this.RatedFlow = rhs.Qr;
+            this.RatedHead = rhs.Hr;
+            this.RatedSpeed = rhs.Nr;
+            this.RatedPower = rhs.Pr;
+            this.RatedEfficiency = rhs.Er;
+            this.Erosion = rhs.NPSHr;
+            this.InletDiameter = rhs.Ic;
+            this.OutletDiameter = rhs.Oc;
+            this.InletElevation = rhs.Ie;
+            this.OutletElevation = rhs.Oe;
+            this.IsVariableFrequency = rhs.IsBp;
+            this.IsDoubleSuction = rhs.IsSxp;
+        }
+
+
+        /// <summary>
+        /// 杩愯鏍囧織
+        /// </summary>
+        public int Flag { get; set; }
+
+        /// <summary>
+        /// 娴侀噺(m鲁/h)
+        /// </summary>	
+        public double RatedFlow { get; set; }
+
+        /// <summary>
+        /// 鎵▼(m)
+        /// </summary>	
+        public double RatedHead { get; set; }
+
+        /// <summary>
+        /// 杞��(r/min)
+        /// </summary>	
+        public double RatedSpeed { get; set; }
+
+        /// <summary>
+        /// 鍔熺巼(kw)
+        /// </summary>	
+        public double RatedPower { get; set; }
+
+        /// <summary>
+        /// 鏁堢巼(%)
+        /// </summary>	
+        public double RatedEfficiency { get; set; }
+
+        /// <summary>
+        /// 姹借殌(m)
+        /// </summary>	
+        public double Erosion { get; set; }
+
+        /// <summary>
+        /// 杩涘彛鍙e緞(mm)
+        /// </summary>
+        public double? InletDiameter { get; set; }
+
+        /// <summary>
+        /// 鍑哄彛鍙e緞(mm)
+        /// </summary>
+        public double? OutletDiameter { get; set; }
+
+        /// <summary>
+        /// 杩涘彛鏍囬珮(m)
+        /// </summary>
+        public double? InletElevation { get; set; }
+
+        /// <summary>
+        /// 鍑哄彛鏍囬珮(m)
+        /// </summary>
+        public double? OutletElevation { get; set; }
+
+        /// <summary>
+        /// 鏄彉棰戞车
+        /// </summary>
+        public bool IsVariableFrequency { get; set; }
+
+        /// <summary>
+        /// 鏄弻鍚告车
+        /// </summary>	 
+        public bool IsDoubleSuction { get; set; }
+
+        /// <summary>
+        /// 娴侀噺-鎵▼鏇茬嚎
+        /// </summary>
+        public CurveExpress CurveQH { get; set; }
+         
+        /// <summary>
+        /// 娴侀噺-鍔熺巼鏇茬嚎
+        /// </summary>
+        public CurveExpress CurveQP { get; set; }
+
+    }
+
+}
+
+ 
+ 
\ No newline at end of file
diff --git a/02-desktop/Desktop/IStation.Test/schedule/StationRunRecord.cs b/02-desktop/Desktop/IStation.Test/schedule/StationRunRecord.cs
new file mode 100644
index 0000000..30464f8
--- /dev/null
+++ b/02-desktop/Desktop/IStation.Test/schedule/StationRunRecord.cs
@@ -0,0 +1,49 @@
+锘縩amespace IStation.Test
+{
+    public class StationRunRecord
+    {
+        public StationRunRecord() { }
+        public StationRunRecord(Model.StationSignalRecord rhs)
+        {
+            Time = rhs.Time;
+            PumpRunCount = rhs.PumpRunCount;
+            PumpRunRecords = rhs.PumpSignalRecords?.Select(x => new PumpRunRecord(x)).ToList();
+        }
+
+
+        /// <summary>
+        /// 鏃堕棿
+        /// </summary>
+        public DateTime Time { get; set; }
+
+        /// <summary>
+        /// 鎬绘祦閲�
+        /// </summary>
+        public double TotalFlow { get; set; }
+
+        /// <summary>
+        /// 鎬诲帇鍔�
+        /// </summary>
+        public double TotalPressure { get; set; }
+
+        /// <summary>
+        /// 鎬荤鍋忓樊娴侀噺
+        /// </summary>
+        public double PipeDiffFlow { get; set; }
+
+        /// <summary>
+        /// 娉佃繍琛屾暟閲�
+        /// </summary>
+        public int PumpRunCount { get; set; }
+
+        /// <summary>
+        /// 娉电珯淇″彿瀛楀吀
+        /// </summary>
+        public Dictionary<string, double> ModelRecordDict { get; set; }
+
+        /// <summary>
+        /// 娉典俊鍙疯褰曞垪琛�
+        /// </summary>
+        public List<PumpRunRecord> PumpRunRecords { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/02-desktop/WinFrmUI/IStation.WinFrmUI.Monitor/03-WorkingConditionAnalysis/00-helper/AnalysisHelper.cs b/02-desktop/WinFrmUI/IStation.WinFrmUI.Monitor/03-WorkingConditionAnalysis/00-helper/AnalysisHelper.cs
index d313daa..a817889 100644
--- a/02-desktop/WinFrmUI/IStation.WinFrmUI.Monitor/03-WorkingConditionAnalysis/00-helper/AnalysisHelper.cs
+++ b/02-desktop/WinFrmUI/IStation.WinFrmUI.Monitor/03-WorkingConditionAnalysis/00-helper/AnalysisHelper.cs
@@ -96,7 +96,9 @@
             public double MaxFlow { get; set; }
 
             public Dictionary<int, double> PressureDiff { get; set; }
-             
+
+            public Dictionary<int,double > StdDev { get; set; } 
+
             public int Count { get; set; }
         }
 

--
Gitblit v1.9.3