ningshuxia
2024-06-19 7e673fdd828d857fe1937150fa5f903c17708304
修改
已重命名3个文件
已修改19个文件
已添加5个文件
1242 ■■■■■ 文件已修改
IStation.Dto/IStation.Dto.csproj 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Entry/Properties/PublishProfiles/FolderProfile.pubxml.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Server.Validation/01-validation/HydraulicModelValidationHelperJob.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Server.Validation/IStation.Server.Validation.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Service/05-service/03-hydraulic/HydraulicModelRecord.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Service/05-service/03-hydraulic/HydraulicModelScada.cs 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Service/08-hydraulic/ModeVerifyHelper.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Service/IStation.Service.csproj 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Service/paras_schedule_settings.json 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.TopShelf.Validation/IStation.TopShelf.Validation.csproj 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.TopShelf.Validation/IStation.TopShelf.Validation.csproj.user 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.TopShelf.Validation/Program.cs 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.TopShelf.Validation/Properties/PublishProfiles/FolderProfile.pubxml.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.TopShelf.Validation/Properties/launchSettings.json 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/IStation.Test.csproj 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/Program - 复制(2).cs 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/Program.cs 204 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/helper/DayValue.cs 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/helper/DayValueHelper.cs 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/helper/TimeValue.cs 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Win/App.config 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Win/IStation.Win.csproj 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Win/View/ScheduleValidView - 复制.Designer.cs 360 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Win/View/ScheduleValidView - 复制.cs 303 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Win/View/ScheduleValidView - 复制.resx 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Win/View/ScheduleValidView.Designer.cs 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Win/View/ScheduleValidView.resx 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Dto/IStation.Dto.csproj
@@ -10,7 +10,7 @@
    <ItemGroup>
        <PackageReference Include="Yw.Dto.Core" Version="3.0.7" />
        <PackageReference Include="Yw.Service.Auth.Core" Version="3.0.3" />
        <PackageReference Include="Yw.Service.Auth.Core" Version="3.0.8" />
    </ItemGroup>
    <ItemGroup>
IStation.Entry/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -5,7 +5,7 @@
<Project>
  <PropertyGroup>
    <_PublishTargetUrl>D:\WorkCode\IStation\Service.Ch.V1.1\IStation.Entry\bin\Release\net6.0\publish\</_PublishTargetUrl>
    <History>True|2024-06-17T07:22:17.6153518Z||;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||;True|2024-03-30T11:56:28.7775554+08:00||;True|2024-03-13T14:48:09.8998210+08:00||;True|2024-03-13T14:47:27.2433264+08:00||;True|2023-12-25T14:14:16.4083227+08:00||;True|2023-11-16T13:48:01.0622937+08:00||;True|2023-10-18T11:32:08.8356991+08:00||;False|2023-10-18T11:29:58.5783437+08:00||;True|2023-10-16T10:41:58.8456599+08:00||;False|2023-10-16T10:30:14.3272745+08:00||;True|2023-09-11T14:56:16.8635396+08:00||;True|2023-08-31T14:48:56.6882268+08:00||;True|2023-08-31T14:42:46.1818009+08:00||;True|2023-08-31T14:35:48.5604752+08:00||;True|2023-08-08T11:38:41.3309044+08:00||;True|2023-07-28T11:00:59.6697086+08:00||;True|2023-07-18T14:39:48.3496234+08:00||;True|2023-07-17T17:38:55.8911210+08:00||;True|2023-07-17T11:57:31.1164907+08:00||;True|2023-07-17T10:00:17.1961455+08:00||;True|2023-07-13T16:04:03.6854523+08:00||;True|2023-07-11T09:58:12.2295644+08:00||;True|2023-06-26T11:38:29.6648988+08:00||;True|2023-06-21T16:17:40.6226554+08:00||;True|2023-06-21T13:30:18.8163322+08:00||;True|2023-06-21T13:19:43.9290154+08:00||;True|2023-06-21T11:35:28.3376504+08:00||;</History>
    <History>True|2024-06-18T01:51:50.4178295Z||;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||;True|2024-03-30T11:56:28.7775554+08:00||;True|2024-03-13T14:48:09.8998210+08:00||;True|2024-03-13T14:47:27.2433264+08:00||;True|2023-12-25T14:14:16.4083227+08:00||;True|2023-11-16T13:48:01.0622937+08:00||;True|2023-10-18T11:32:08.8356991+08:00||;False|2023-10-18T11:29:58.5783437+08:00||;True|2023-10-16T10:41:58.8456599+08:00||;False|2023-10-16T10:30:14.3272745+08:00||;True|2023-09-11T14:56:16.8635396+08:00||;True|2023-08-31T14:48:56.6882268+08:00||;True|2023-08-31T14:42:46.1818009+08:00||;True|2023-08-31T14:35:48.5604752+08:00||;True|2023-08-08T11:38:41.3309044+08:00||;True|2023-07-28T11:00:59.6697086+08:00||;True|2023-07-18T14:39:48.3496234+08:00||;True|2023-07-17T17:38:55.8911210+08:00||;True|2023-07-17T11:57:31.1164907+08:00||;True|2023-07-17T10:00:17.1961455+08:00||;True|2023-07-13T16:04:03.6854523+08:00||;True|2023-07-11T09:58:12.2295644+08:00||;True|2023-06-26T11:38:29.6648988+08:00||;True|2023-06-21T16:17:40.6226554+08:00||;True|2023-06-21T13:30:18.8163322+08:00||;True|2023-06-21T13:19:43.9290154+08:00||;True|2023-06-21T11:35:28.3376504+08:00||;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>
IStation.Server.Validation/01-validation/HydraulicModelValidationHelperJob.cs
@@ -158,7 +158,7 @@
                        }
                    }
                   // Log.Info(verification_id,  _hydraulic_model_file);//text
                    var hydraulic_model_record_list = IStation.Hydraulic.ModeVerifyHelper.Verify(verification_id, _hydraulic_model_file, flow_id_mapping_dict, pressure_id_mapping_dict, pattern_list, time_value);
                    if (hydraulic_model_record_list == null || !hydraulic_model_record_list.Any())
                    {
IStation.Server.Validation/IStation.Server.Validation.csproj
@@ -5,6 +5,7 @@
        <TargetFramework>net6.0</TargetFramework>
        <ImplicitUsings>enable</ImplicitUsings>
        <Nullable>disable</Nullable>
        <PlatformTarget>x86</PlatformTarget>
    </PropertyGroup>
    <ItemGroup>
IStation.Service/05-service/03-hydraulic/HydraulicModelRecord.cs
@@ -48,6 +48,20 @@
            return bol;
        }
        /// <summary>
        /// å¤§æ‰¹é‡æ’å…¥
        /// </summary>
        /// <param name="list"></param>
        /// <returns></returns>
        public bool BulkInserts(List<Model.HydraulicModelRecord> list)
        {
            if (list == null || list.Count < 1)
                return default;
            var dal = DALCreateHelper.CreateDAL<IStation.DAL.IHydraulicModelRecord>();
            var entity_list = Model2Entities(list);
            var bol = dal.BulkInserts(entity_list);
            return bol;
        }
    }
IStation.Service/05-service/03-hydraulic/HydraulicModelScada.cs
@@ -49,6 +49,17 @@
        }
        /// <summary>
        /// æ‰¹é‡å¤šæ¡
        /// </summary>
        public bool BulkInserts(List<Model.HydraulicModelScada> list)
        {
            if (list == null || list.Count < 1)
                return default;
            var dal = DALCreateHelper.CreateDAL<IStation.DAL.IHydraulicModelScada>();
            var entity_list = Model2Entities(list);
            var bol = dal.BulkInserts(entity_list);
            return bol;
        }
    }
}
IStation.Service/08-hydraulic/ModeVerifyHelper.cs
@@ -232,9 +232,7 @@
                return default;
            }
            log_msg = "初始化成功";
            Log.Info(verify_id, log_title, log_msg);
            log_title = "验证";
            var model_id_build = new StringBuilder(31); 
            var pattern_init = true;
@@ -333,7 +331,7 @@
                    record.DifferenceValue = record.ScadaValue - record.ModeValue;
                    hydraulic_record_list.Add(record);
                }
            }
            }
            EpanetMethods.ENcloseH();
            return hydraulic_record_list;
IStation.Service/IStation.Service.csproj
@@ -26,12 +26,12 @@
    </ItemGroup>
    <ItemGroup>
        <PackageReference Include="Yw.DAL.PostgreSql.Core" Version="3.0.2" />
        <PackageReference Include="Yw.DAL.SQLite.Core" Version="3.0.2" />
        <PackageReference Include="Yw.DAL.PostgreSql.Core" Version="3.0.6" />
        <PackageReference Include="Yw.DAL.SQLite.Core" Version="3.0.6" />
        <PackageReference Include="Yw.DALFactory.Core" Version="3.0.0" />
        <PackageReference Include="Yw.MathNet.Core" Version="3.0.0" />
        <PackageReference Include="Yw.Service.Core" Version="3.0.2" />
        <PackageReference Include="Yw.Yitter.Core" Version="3.0.0" />
        <PackageReference Include="Yw.Yitter.Core" Version="3.0.1" />
    </ItemGroup>
    <ItemGroup>
IStation.Service/paras_schedule_settings.json
@@ -29,7 +29,7 @@
    }
  },
  "Task": {
    "MinuteCron": "4 * * * * ?"
    "MinuteCron": "0 0/5 * * * ?"
  },
  "CAL": {
    "CALType": "HttpClient", //HttpClient��LocalClient
IStation.TopShelf.Validation/IStation.TopShelf.Validation.csproj
@@ -8,6 +8,7 @@
    <AssemblyName>$(MSBuildProjectName)</AssemblyName>
    <RootNamespace>Yw.TopShelf</RootNamespace>
    <GenerateDocumentationFile>True</GenerateDocumentationFile>
    <PlatformTarget>x86</PlatformTarget>
  </PropertyGroup>
  <ItemGroup>
IStation.TopShelf.Validation/IStation.TopShelf.Validation.csproj.user
@@ -2,5 +2,9 @@
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <_LastSelectedProfileId>D:\WorkCode\IStation\Service.Ch.V1.1\IStation.TopShelf.Validation\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
    <ActiveDebugProfile>IStation.TopShelf.Validation</ActiveDebugProfile>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
    <DebuggerFlavor>ProjectDebugger</DebuggerFlavor>
  </PropertyGroup>
</Project>
IStation.TopShelf.Validation/Program.cs
@@ -10,7 +10,7 @@
    x.SetDescription("陈行场内模型在线验证(义维)");
    x.SetDisplayName("IStation.Server.Validation");
    x.SetServiceName("IStation.Server.Validation");
    // x.EnableServiceRecovery(r => r.RestartService(TimeSpan.FromSeconds(1)));
    x.EnableServiceRecovery(r => r.RestartService(TimeSpan.FromSeconds(1)));
    x.StartAutomatically();
});
 
IStation.TopShelf.Validation/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -4,7 +4,7 @@
-->
<Project>
  <PropertyGroup>
    <History>True|2024-06-17T09:03:32.7665489Z||;True|2024-06-17T16:06:13.3233722+08:00||;True|2024-06-17T15:58:50.8131001+08:00||;True|2024-06-17T15:20:11.0604790+08:00||;False|2024-06-17T15:19:53.9885120+08:00||;True|2024-06-01T14:06:22.1757171+08:00||;True|2024-05-09T17:23:22.4572642+08:00||;True|2024-05-08T10:32:27.3427464+08:00||;True|2024-04-22T15:24:28.3028779+08:00||;True|2024-04-22T15:21:12.4874723+08:00||;True|2024-04-04T09:48:58.0747264+08:00||;True|2024-03-12T17:45:01.4978239+08:00||;True|2024-02-27T10:39:21.3900360+08:00||;True|2024-02-27T10:38:50.1319032+08:00||;True|2024-02-27T10:33:20.5262028+08:00||;True|2024-02-27T10:33:10.6520911+08:00||;True|2024-02-22T16:40:54.4150532+08:00||;True|2024-02-22T13:07:07.3185089+08:00||;True|2024-01-22T11:57:54.5115348+08:00||;True|2024-01-19T10:08:43.2565541+08:00||;True|2024-01-08T10:08:58.6441363+08:00||;True|2023-12-26T10:23:02.1564519+08:00||;True|2023-12-11T15:38:15.8009325+08:00||;True|2023-12-11T15:38:04.3448592+08:00||;True|2023-12-11T15:23:00.5953875+08:00||;True|2023-11-23T15:52:15.8632850+08:00||;True|2023-11-22T14:20:00.0546024+08:00||;True|2023-11-16T10:20:12.5599155+08:00||;True|2023-11-16T10:20:00.1259223+08:00||;True|2023-10-31T16:49:04.0183144+08:00||;True|2023-09-26T14:02:41.2629423+08:00||;True|2023-09-25T14:49:13.2860387+08:00||;True|2023-09-25T14:15:15.3086369+08:00||;True|2023-09-25T13:11:53.5778345+08:00||;True|2023-09-25T13:10:32.2454704+08:00||;True|2023-08-09T15:54:23.4688622+08:00||;True|2023-04-14T11:28:54.3192620+08:00||;True|2022-09-22T10:31:25.8968031+08:00||;True|2022-09-03T18:29:36.9117498+08:00||;True|2022-07-01T20:34:32.8837385+08:00||;True|2022-07-01T14:13:00.3575225+08:00||;True|2022-06-06T13:46:50.1646055+08:00||;True|2022-06-02T09:45:18.0850685+08:00||;True|2022-05-23T20:24:38.0459928+08:00||;</History>
    <History>True|2024-06-18T02:23:26.0174078Z||;True|2024-06-18T10:18:21.1087297+08:00||;True|2024-06-18T10:13:31.2009924+08:00||;True|2024-06-18T10:12:29.7385856+08:00||;True|2024-06-18T10:05:19.4206426+08:00||;True|2024-06-18T09:52:09.8035681+08:00||;True|2024-06-17T17:03:32.7665489+08:00||;True|2024-06-17T16:06:13.3233722+08:00||;True|2024-06-17T15:58:50.8131001+08:00||;True|2024-06-17T15:20:11.0604790+08:00||;False|2024-06-17T15:19:53.9885120+08:00||;True|2024-06-01T14:06:22.1757171+08:00||;True|2024-05-09T17:23:22.4572642+08:00||;True|2024-05-08T10:32:27.3427464+08:00||;True|2024-04-22T15:24:28.3028779+08:00||;True|2024-04-22T15:21:12.4874723+08:00||;True|2024-04-04T09:48:58.0747264+08:00||;True|2024-03-12T17:45:01.4978239+08:00||;True|2024-02-27T10:39:21.3900360+08:00||;True|2024-02-27T10:38:50.1319032+08:00||;True|2024-02-27T10:33:20.5262028+08:00||;True|2024-02-27T10:33:10.6520911+08:00||;True|2024-02-22T16:40:54.4150532+08:00||;True|2024-02-22T13:07:07.3185089+08:00||;True|2024-01-22T11:57:54.5115348+08:00||;True|2024-01-19T10:08:43.2565541+08:00||;True|2024-01-08T10:08:58.6441363+08:00||;True|2023-12-26T10:23:02.1564519+08:00||;True|2023-12-11T15:38:15.8009325+08:00||;True|2023-12-11T15:38:04.3448592+08:00||;True|2023-12-11T15:23:00.5953875+08:00||;True|2023-11-23T15:52:15.8632850+08:00||;True|2023-11-22T14:20:00.0546024+08:00||;True|2023-11-16T10:20:12.5599155+08:00||;True|2023-11-16T10:20:00.1259223+08:00||;True|2023-10-31T16:49:04.0183144+08:00||;True|2023-09-26T14:02:41.2629423+08:00||;True|2023-09-25T14:49:13.2860387+08:00||;True|2023-09-25T14:15:15.3086369+08:00||;True|2023-09-25T13:11:53.5778345+08:00||;True|2023-09-25T13:10:32.2454704+08:00||;True|2023-08-09T15:54:23.4688622+08:00||;True|2023-04-14T11:28:54.3192620+08:00||;True|2022-09-22T10:31:25.8968031+08:00||;True|2022-09-03T18:29:36.9117498+08:00||;True|2022-07-01T20:34:32.8837385+08:00||;True|2022-07-01T14:13:00.3575225+08:00||;True|2022-06-06T13:46:50.1646055+08:00||;True|2022-06-02T09:45:18.0850685+08:00||;True|2022-05-23T20:24:38.0459928+08:00||;</History>
    <LastFailureDetails />
  </PropertyGroup>
</Project>
IStation.TopShelf.Validation/Properties/launchSettings.json
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
{
  "profiles": {
    "IStation.TopShelf.Validation": {
      "commandName": "Project"
    },
    "WSL": {
      "commandName": "WSL2",
      "distributionName": ""
    }
  }
}
Test/IStation.Test/IStation.Test.csproj
@@ -10,7 +10,9 @@
  <ItemGroup>
    <Compile Remove="EpanetMethods.cs" />
    <Compile Remove="HydraulicModelValidationHelperJob.cs" />
    <Compile Remove="ModelVerification.cs" />
    <Compile Remove="Program - å¤åˆ¶%282%29.cs" />
    <Compile Remove="Program - å¤åˆ¶.cs" />
    <Compile Remove="Program _mode.cs" />
    <Compile Remove="Program_bak.cs" />
Test/IStation.Test/Program - ¸´ÖÆ(2).cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
using IStation.Test;
IStation.ConfigHelper.InitHydraulicDB();
HydraulicModelValidationHelperJob.Execute();
//var service = new IStation.Service.HydraulicModelValidationConfig();
//var config = service.Get();
//config.PressureIdkPaList = new List<string>(){
//    "长江管网图.嘉定数据.1线压力",
//    "长江管网图.嘉定数据.2线压力",
//    "长江管网图.嘉定数据.3线压力",
//    "HF一输水11号变频控制画面.11号泵出口压力",
//    "HF一输水12号变频控制画面.12号泵出口压力",
//    "HF一输水13号变频控制画面.13号泵出口压力",
//    "HF一输水14号变频控制图.14号泵出口压力",
//    "HF一输水15号工频控制图.15号泵出口压力",
//    "HF一输水16号工频控制图.16号泵出口压力",
//    "HF一输水17号变频控制图.17号泵出口压力",
//    "HF一输水18号变频控制图.18号泵出口压力"
//    //"长江管网图.2400总管.出厂压力",
//    //"长江管网图.2600总管.出厂压力",
//    //"二输水21号水泵运行参数.出水压力",
//    //"二输水22号水泵运行参数.出水压力",
//    //"二输水23号水泵运行参数.出水压力",
//    //"二输水24号水泵运行参数.出水压力",
//    //"二输水25号水泵运行参数.出水压力",
//    //"二输水26号水泵运行参数.出水压力",
//    //"二输水27号水泵运行参数.出水压力"
//};
//service.Save(config);
Test/IStation.Test/Program.cs
@@ -1,32 +1,182 @@
using IStation.Test;

using Yw.Untity;
IStation.ConfigHelper.InitHydraulicDB();
HydraulicModelValidationHelperJob.Execute();
//var service = new IStation.Service.HydraulicModelValidationConfig();
//var config = service.Get();
//config.PressureIdkPaList = new List<string>(){
//    "长江管网图.嘉定数据.1线压力",
//    "长江管网图.嘉定数据.2线压力",
//    "长江管网图.嘉定数据.3线压力",
//    "HF一输水11号变频控制画面.11号泵出口压力",
//    "HF一输水12号变频控制画面.12号泵出口压力",
//    "HF一输水13号变频控制画面.13号泵出口压力",
//    "HF一输水14号变频控制图.14号泵出口压力",
//    "HF一输水15号工频控制图.15号泵出口压力",
//    "HF一输水16号工频控制图.16号泵出口压力",
//    "HF一输水17号变频控制图.17号泵出口压力",
//    "HF一输水18号变频控制图.18号泵出口压力"
//    //"长江管网图.2400总管.出厂压力",
//    //"长江管网图.2600总管.出厂压力",
//    //"二输水21号水泵运行参数.出水压力",
//    //"二输水22号水泵运行参数.出水压力",
//    //"二输水23号水泵运行参数.出水压力",
//    //"二输水24号水泵运行参数.出水压力",
//    //"二输水25号水泵运行参数.出水压力",
//    //"二输水26号水泵运行参数.出水压力",
//    //"二输水27号水泵运行参数.出水压力"
//};
var station1 = "Pump11,Pump12,Pump13,Pump14,Pump15,Pump16,Pump17,Pump18,R3,R2,R1,SFJD1,SFJD2,SFJD3";
var pattern_id_list1 = StringListHelper.ToList(station1);
//service.Save(config);
var station2 = "RPump21,SFPump21,Pump21,RPump22,SFPump22,Pump22,RPump23,SFPump23,Pump23,RPump24,SFPump24,Pump24,RPump25,SFPump25,Pump25,RPump26,SFPump26,Pump26,RPump27,SFPump27,Pump27,SFDN2400,SFDN2700";
var pattern_id_list2 = StringListHelper.ToList(station2);
var pattern_id_list = new List<string>();
pattern_id_list.AddRange(pattern_id_list1);
pattern_id_list.AddRange(pattern_id_list2);
var pressure_tag_list1 = new List<string>() { "SPJD1", "SPJD2", "SPJD3", "SPPump11", "SPPump12", "SPPump13", "SPPump14", "SPPump15", "SPPump16", "SPPump17", "SPPump18" };
var pressure_tag_list2 = new List<string>() { "SPDN2400", "SPDN2700", "SPPump21", "SPPump22", "SPPump23", "SPPump24", "SPPump25", "SPPump26", "SPPump27" };
var pressure_tag_list = new List<string>();
pressure_tag_list.AddRange(pressure_tag_list1);
pressure_tag_list.AddRange(pressure_tag_list2);
var flow_tag_list1 = new List<string>() { "SFJD1", "SFJD2", "SFJD3" };
var flow_tag_list2 = new List<string>() { "SFDN2400", "SFDN2700", "SFPump21", "SFPump22", "SFPump23", "SFPump24", "SFPump25", "SFPump26", "SFPump27" };
var flow_tag_list = new List<string>();
flow_tag_list.AddRange(flow_tag_list1);
flow_tag_list.AddRange(flow_tag_list2);
var pressure_id_mapping_dict1 = new Dictionary<string, string>()
{
    {"Jjd1","SPJD1"},
    {"Jjd2","SPJD2"},
    {"Jjd3","SPJD3"},
    {"Jpump11","SPPump11" },
    {"Jpump12","SPPump12" },
    {"Jpump13","SPPump13" },
    {"Jpump14","SPPump14" },
    {"Jpump15","SPPump15" },
    {"Jpump16","SPPump16" },
    {"Jpump17","SPPump17" },
    {"Jpump18","SPPump18" }
};
var pressure_id_mapping_dict2 = new Dictionary<string, string>()
{
    {"Jdn2400","SPDN2400"},
    {"Jdn2700","SPDN2700"},
    {"Jpump21","SPPump21"},
    {"Jpump22","SPPump22"},
    {"Jpump23","SPPump23"},
    {"Jpump24","SPPump24"},
    {"Jpump25","SPPump25"},
    {"Jpump26","SPPump26"},
    {"Jpump27","SPPump27"}
};
var flow_id_mapping_dict1 = new Dictionary<string, string>()
{
    {"Pjd1","SFJD1"},
    {"Pjd2","SFJD2"},
    {"Pjd3","SFJD3"}
};
var flow_id_mapping_dict2 = new Dictionary<string, string>()
{
    {"Pdn2400","SFDN2400"},
    {"Pdn2700","SFDN2700"},
    {"Ppump21","SFPump21"},
    {"Ppump22","SFPump22"},
    {"Ppump23","SFPump23"},
    {"Ppump24","SFPump24"},
    {"Ppump25","SFPump25"},
    {"Ppump26","SFPump26"},
    {"Ppump27","SFPump27"}
};
var pressure_id_mapping_dict = new Dictionary<string, string>();
foreach (var item in pressure_id_mapping_dict1)
{
    pressure_id_mapping_dict.Add(item.Key, item.Value);
}
foreach (var item in pressure_id_mapping_dict2)
{
    pressure_id_mapping_dict.Add(item.Key, item.Value);
}
var flow_id_mapping_dict = new Dictionary<string, string>();
foreach (var item in flow_id_mapping_dict1)
{
    flow_id_mapping_dict.Add(item.Key, item.Value);
}
foreach (var item in flow_id_mapping_dict2)
{
    flow_id_mapping_dict.Add(item.Key, item.Value);
}
//var config=new IStation.Model.HydraulicModelValidationConfig();
//config.FlowIdMappingDict = flow_id_mapping_dict;
//config.PressureIdMappingDict = pressure_id_mapping_dict;
//config.PatternIdMappingDict = new Dictionary<string, string>();
//foreach (var item in pattern_id_list)
//{
//    config.PatternIdMappingDict[item] = item;
//}
//var bol1 = new IStation.Service.HydraulicModelValidationConfig().Save(config);
//return;
var verify_id = Yw.YitIdHelper.NextId();
var file_path = $"{AppDomain.CurrentDomain.BaseDirectory}Data\\HydraulicModel.inp";
var hydraulic_model_scada_list = new List<IStation.Model.HydraulicModelScada>();
var dayValueList = IStation.Test.DayValueHelper.GetDayValues();
foreach (var dayValue in dayValueList)
{
    var patternList = new List<IStation.Hydraulic.Pattern>();
    foreach (var pattern_id in pattern_id_list)
    {
        var pattern = new IStation.Hydraulic.Pattern
        {
            Id = pattern_id,
            FactorList = new List<float>()
        };
        patternList.Add(pattern);
    }
    var timeValueList = dayValue.TimeValueList.OrderBy(x => x.Time).ToList();
    foreach (var timeValue in timeValueList)
    {
        var time = timeValue.Time;
        var value_dict = timeValue.Value;
        foreach (var item in value_dict)
        {
            var scada_id = item.Key;
            var scada_value = item.Value;
            var pattern = patternList.Find(x => x.Id == scada_id);
            if (pattern != null)
            {
                pattern.FactorList.Add((float)scada_value);
            }
            foreach (var flow_id_mapping in flow_id_mapping_dict)
            {
                if (flow_id_mapping.Value != scada_id)
                    continue;
                var hydraulic_model_scada = new IStation.Model.HydraulicModelScada();
                hydraulic_model_scada.VerificationID = verify_id;
                hydraulic_model_scada.Time =time;
                hydraulic_model_scada.Tag = scada_id;
                hydraulic_model_scada.Value = scada_value;
                hydraulic_model_scada_list.Add(hydraulic_model_scada);
            }
            foreach (var pressure_id_mapping in pressure_id_mapping_dict)
            {
                if (pressure_id_mapping.Value != scada_id)
                    continue;
                var hydraulic_model_scada = new IStation.Model.HydraulicModelScada();
                hydraulic_model_scada.VerificationID = verify_id;
                hydraulic_model_scada.Time = time;
                hydraulic_model_scada.Tag = scada_id;
                hydraulic_model_scada.Value = scada_value;
                hydraulic_model_scada_list.Add(hydraulic_model_scada);
            }
        }
    }
    dayValue.PatternList = patternList;
}
var bol = new IStation.Service.HydraulicModelScada().BulkInserts(hydraulic_model_scada_list);
var hydraulic_model_record_list = IStation.Hydraulic.ModeVerifyHelper.Verify(verify_id, file_path, flow_id_mapping_dict, pressure_id_mapping_dict, dayValueList);
bol = new IStation.Service.HydraulicModelRecord().BulkInserts(hydraulic_model_record_list);
Console.WriteLine($"插入完成,状态:{bol}");
Test/IStation.Test/helper/DayValue.cs
Test/IStation.Test/helper/DayValueHelper.cs
Test/IStation.Test/helper/TimeValue.cs
Test/IStation.Win/App.config
@@ -35,7 +35,7 @@
        <value></value>
      </setting>
      <setting name="DefaultAppFont" serializeAs="String">
        <value>Tahoma;10.5</value>
        <value></value>
      </setting>
      <setting name="DPIAwarenessMode" serializeAs="String">
        <value></value>
Test/IStation.Win/IStation.Win.csproj
@@ -11,10 +11,13 @@
  <ItemGroup>
    <Compile Remove="Form1.cs" />
    <Compile Remove="Form1.Designer.cs" />
    <Compile Remove="View\ScheduleValidView - å¤åˆ¶.cs" />
    <Compile Remove="View\ScheduleValidView - å¤åˆ¶.Designer.cs" />
  </ItemGroup>
  <ItemGroup>
    <EmbeddedResource Remove="Form1.resx" />
    <EmbeddedResource Remove="View\ScheduleValidView - å¤åˆ¶.resx" />
  </ItemGroup>
  <ItemGroup>
Test/IStation.Win/View/ScheduleValidView - ¸´ÖÆ.Designer.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,360 @@
namespace IStation.Win
{
    partial class ScheduleValidView
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            components = new System.ComponentModel.Container();
            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ScheduleValidView));
            gridControl1 = new DevExpress.XtraGrid.GridControl();
            scheduleValidViewModelBindingSource = new BindingSource(components);
            bandedGridView1 = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridView();
            gridBandSrc = new DevExpress.XtraGrid.Views.BandedGrid.GridBand();
            colTime = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            colTotalFlowSrc = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            colTotalHeadSrc = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            colTotalPowerSrc = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            colFlagRpmDict = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            colRunFlagsSrc = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            gridBandCalcFre = new DevExpress.XtraGrid.Views.BandedGrid.GridBand();
            colTotalFlowCalc = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            colTotalPowerCalc = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            colTotalFlowCalcSrcDiff = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            colTotalPowerCalcSrcDiff = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            gridBandSchedule = new DevExpress.XtraGrid.Views.BandedGrid.GridBand();
            colTotalFlowSchedule = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            colTotalHeadSchedule = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            colTotalPowerSchedule = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            colRunFlagsSchedule = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            colTotalFlowScheduleSrcDiff = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            colTotalPowerScheduleSrcDiff = new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn();
            ribbonControl1 = new DevExpress.XtraBars.Ribbon.RibbonControl();
            barBtnImport = new DevExpress.XtraBars.BarButtonItem();
            barBtnSchedule = new DevExpress.XtraBars.BarButtonItem();
            barEditSelStation = new DevExpress.XtraBars.BarEditItem();
            repRadioGroupSelStation = new DevExpress.XtraEditors.Repository.RepositoryItemRadioGroup();
            ribbonPageValid = new DevExpress.XtraBars.Ribbon.RibbonPage();
            ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
            ((System.ComponentModel.ISupportInitialize)gridControl1).BeginInit();
            ((System.ComponentModel.ISupportInitialize)scheduleValidViewModelBindingSource).BeginInit();
            ((System.ComponentModel.ISupportInitialize)bandedGridView1).BeginInit();
            ((System.ComponentModel.ISupportInitialize)ribbonControl1).BeginInit();
            ((System.ComponentModel.ISupportInitialize)repRadioGroupSelStation).BeginInit();
            SuspendLayout();
            //
            // gridControl1
            //
            gridControl1.DataSource = scheduleValidViewModelBindingSource;
            gridControl1.Dock = DockStyle.Fill;
            gridControl1.Location = new Point(0, 262);
            gridControl1.MainView = bandedGridView1;
            gridControl1.Name = "gridControl1";
            gridControl1.Size = new Size(1541, 809);
            gridControl1.TabIndex = 5;
            gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { bandedGridView1 });
            //
            // bandedGridView1
            //
            bandedGridView1.Appearance.Row.FontSizeDelta = 2;
            bandedGridView1.Appearance.Row.Options.UseFont = true;
            bandedGridView1.Bands.AddRange(new DevExpress.XtraGrid.Views.BandedGrid.GridBand[] { gridBandSrc, gridBandCalcFre, gridBandSchedule });
            bandedGridView1.Columns.AddRange(new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn[] { colTime, colTotalFlowSrc, colTotalHeadSrc, colTotalPowerSrc, colRunFlagsSrc, colFlagRpmDict, colTotalFlowCalc, colTotalPowerCalc, colTotalFlowSchedule, colTotalHeadSchedule, colTotalPowerSchedule, colRunFlagsSchedule, colTotalFlowScheduleSrcDiff, colTotalPowerScheduleSrcDiff, colTotalFlowCalcSrcDiff, colTotalPowerCalcSrcDiff });
            bandedGridView1.GridControl = gridControl1;
            bandedGridView1.Name = "bandedGridView1";
            //
            // gridBandSrc
            //
            gridBandSrc.Caption = "原始点";
            gridBandSrc.Columns.Add(colTime);
            gridBandSrc.Columns.Add(colTotalFlowSrc);
            gridBandSrc.Columns.Add(colTotalHeadSrc);
            gridBandSrc.Columns.Add(colTotalPowerSrc);
            gridBandSrc.Columns.Add(colFlagRpmDict);
            gridBandSrc.Columns.Add(colRunFlagsSrc);
            gridBandSrc.Name = "gridBandSrc";
            gridBandSrc.VisibleIndex = 0;
            gridBandSrc.Width = 560;
            //
            // colTime
            //
            colTime.FieldName = "Time";
            colTime.MinWidth = 30;
            colTime.Name = "colTime";
            colTime.Visible = true;
            colTime.Width = 112;
            //
            // colTotalFlowSrc
            //
            colTotalFlowSrc.FieldName = "TotalFlowSrc";
            colTotalFlowSrc.MinWidth = 30;
            colTotalFlowSrc.Name = "colTotalFlowSrc";
            colTotalFlowSrc.Visible = true;
            colTotalFlowSrc.Width = 112;
            //
            // colTotalHeadSrc
            //
            colTotalHeadSrc.FieldName = "TotalHeadSrc";
            colTotalHeadSrc.MinWidth = 30;
            colTotalHeadSrc.Name = "colTotalHeadSrc";
            colTotalHeadSrc.Visible = true;
            colTotalHeadSrc.Width = 112;
            //
            // colTotalPowerSrc
            //
            colTotalPowerSrc.FieldName = "TotalPowerSrc";
            colTotalPowerSrc.MinWidth = 30;
            colTotalPowerSrc.Name = "colTotalPowerSrc";
            colTotalPowerSrc.Visible = true;
            colTotalPowerSrc.Width = 112;
            //
            // colFlagRpmDict
            //
            colFlagRpmDict.FieldName = "FlagRpmDict";
            colFlagRpmDict.MinWidth = 30;
            colFlagRpmDict.Name = "colFlagRpmDict";
            colFlagRpmDict.Width = 112;
            //
            // colRunFlagsSrc
            //
            colRunFlagsSrc.FieldName = "RunFlagsSrc";
            colRunFlagsSrc.MinWidth = 30;
            colRunFlagsSrc.Name = "colRunFlagsSrc";
            colRunFlagsSrc.Visible = true;
            colRunFlagsSrc.Width = 112;
            //
            // gridBandCalcFre
            //
            gridBandCalcFre.Caption = "原频率计算点";
            gridBandCalcFre.Columns.Add(colTotalFlowCalc);
            gridBandCalcFre.Columns.Add(colTotalPowerCalc);
            gridBandCalcFre.Columns.Add(colTotalFlowCalcSrcDiff);
            gridBandCalcFre.Columns.Add(colTotalPowerCalcSrcDiff);
            gridBandCalcFre.Name = "gridBandCalcFre";
            gridBandCalcFre.VisibleIndex = 1;
            gridBandCalcFre.Width = 448;
            //
            // colTotalFlowCalc
            //
            colTotalFlowCalc.FieldName = "TotalFlowCalc";
            colTotalFlowCalc.MinWidth = 30;
            colTotalFlowCalc.Name = "colTotalFlowCalc";
            colTotalFlowCalc.Visible = true;
            colTotalFlowCalc.Width = 112;
            //
            // colTotalPowerCalc
            //
            colTotalPowerCalc.FieldName = "TotalPowerCalc";
            colTotalPowerCalc.MinWidth = 30;
            colTotalPowerCalc.Name = "colTotalPowerCalc";
            colTotalPowerCalc.Visible = true;
            colTotalPowerCalc.Width = 112;
            //
            // colTotalFlowCalcSrcDiff
            //
            colTotalFlowCalcSrcDiff.FieldName = "TotalFlowCalcSrcDiff";
            colTotalFlowCalcSrcDiff.MinWidth = 30;
            colTotalFlowCalcSrcDiff.Name = "colTotalFlowCalcSrcDiff";
            colTotalFlowCalcSrcDiff.Visible = true;
            colTotalFlowCalcSrcDiff.Width = 112;
            //
            // colTotalPowerCalcSrcDiff
            //
            colTotalPowerCalcSrcDiff.FieldName = "TotalPowerCalcSrcDiff";
            colTotalPowerCalcSrcDiff.MinWidth = 30;
            colTotalPowerCalcSrcDiff.Name = "colTotalPowerCalcSrcDiff";
            colTotalPowerCalcSrcDiff.Visible = true;
            colTotalPowerCalcSrcDiff.Width = 112;
            //
            // gridBandSchedule
            //
            gridBandSchedule.Caption = "调度计算点";
            gridBandSchedule.Columns.Add(colTotalFlowSchedule);
            gridBandSchedule.Columns.Add(colTotalHeadSchedule);
            gridBandSchedule.Columns.Add(colTotalPowerSchedule);
            gridBandSchedule.Columns.Add(colRunFlagsSchedule);
            gridBandSchedule.Columns.Add(colTotalFlowScheduleSrcDiff);
            gridBandSchedule.Columns.Add(colTotalPowerScheduleSrcDiff);
            gridBandSchedule.Name = "gridBandSchedule";
            gridBandSchedule.VisibleIndex = 2;
            gridBandSchedule.Width = 672;
            //
            // colTotalFlowSchedule
            //
            colTotalFlowSchedule.FieldName = "TotalFlowSchedule";
            colTotalFlowSchedule.MinWidth = 30;
            colTotalFlowSchedule.Name = "colTotalFlowSchedule";
            colTotalFlowSchedule.Visible = true;
            colTotalFlowSchedule.Width = 112;
            //
            // colTotalHeadSchedule
            //
            colTotalHeadSchedule.FieldName = "TotalHeadSchedule";
            colTotalHeadSchedule.MinWidth = 30;
            colTotalHeadSchedule.Name = "colTotalHeadSchedule";
            colTotalHeadSchedule.Visible = true;
            colTotalHeadSchedule.Width = 112;
            //
            // colTotalPowerSchedule
            //
            colTotalPowerSchedule.FieldName = "TotalPowerSchedule";
            colTotalPowerSchedule.MinWidth = 30;
            colTotalPowerSchedule.Name = "colTotalPowerSchedule";
            colTotalPowerSchedule.Visible = true;
            colTotalPowerSchedule.Width = 112;
            //
            // colRunFlagsSchedule
            //
            colRunFlagsSchedule.FieldName = "RunFlagsSchedule";
            colRunFlagsSchedule.MinWidth = 30;
            colRunFlagsSchedule.Name = "colRunFlagsSchedule";
            colRunFlagsSchedule.Visible = true;
            colRunFlagsSchedule.Width = 112;
            //
            // colTotalFlowScheduleSrcDiff
            //
            colTotalFlowScheduleSrcDiff.FieldName = "TotalFlowScheduleSrcDiff";
            colTotalFlowScheduleSrcDiff.MinWidth = 30;
            colTotalFlowScheduleSrcDiff.Name = "colTotalFlowScheduleSrcDiff";
            colTotalFlowScheduleSrcDiff.Visible = true;
            colTotalFlowScheduleSrcDiff.Width = 112;
            //
            // colTotalPowerScheduleSrcDiff
            //
            colTotalPowerScheduleSrcDiff.FieldName = "TotalPowerScheduleSrcDiff";
            colTotalPowerScheduleSrcDiff.MinWidth = 30;
            colTotalPowerScheduleSrcDiff.Name = "colTotalPowerScheduleSrcDiff";
            colTotalPowerScheduleSrcDiff.Visible = true;
            colTotalPowerScheduleSrcDiff.Width = 112;
            //
            // ribbonControl1
            //
            ribbonControl1.ExpandCollapseItem.Id = 0;
            ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, barBtnImport, barBtnSchedule, barEditSelStation });
            ribbonControl1.Location = new Point(0, 0);
            ribbonControl1.MaxItemId = 6;
            ribbonControl1.Name = "ribbonControl1";
            ribbonControl1.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { ribbonPageValid });
            ribbonControl1.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { repRadioGroupSelStation });
            ribbonControl1.Size = new Size(1541, 262);
            //
            // barBtnImport
            //
            barBtnImport.Caption = "导入文件";
            barBtnImport.Id = 2;
            barBtnImport.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnImport.ImageOptions.SvgImage");
            barBtnImport.Name = "barBtnImport";
            barBtnImport.ItemClick += barBtnImport_ItemClick;
            //
            // barBtnSchedule
            //
            barBtnSchedule.Caption = "调度";
            barBtnSchedule.CausesValidation = true;
            barBtnSchedule.Id = 3;
            barBtnSchedule.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnSchedule.ImageOptions.SvgImage");
            barBtnSchedule.Name = "barBtnSchedule";
            barBtnSchedule.ItemClick += barBtnSchedule_ItemClick;
            //
            // barEditSelStation
            //
            barEditSelStation.Caption = "泵站";
            barEditSelStation.Edit = repRadioGroupSelStation;
            barEditSelStation.Id = 5;
            barEditSelStation.Name = "barEditSelStation";
            barEditSelStation.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithoutText;
            barEditSelStation.EditValueChanged += barEditSelStation_EditValueChanged;
            //
            // repRadioGroupSelStation
            //
            repRadioGroupSelStation.Items.AddRange(new DevExpress.XtraEditors.Controls.RadioGroupItem[] { new DevExpress.XtraEditors.Controls.RadioGroupItem(1, "一输"), new DevExpress.XtraEditors.Controls.RadioGroupItem(2, "二输") });
            repRadioGroupSelStation.ItemsLayout = DevExpress.XtraEditors.RadioGroupItemsLayout.Flow;
            repRadioGroupSelStation.Name = "repRadioGroupSelStation";
            //
            // ribbonPageValid
            //
            ribbonPageValid.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { ribbonPageGroup1 });
            ribbonPageValid.Name = "ribbonPageValid";
            ribbonPageValid.Text = "验证";
            //
            // ribbonPageGroup1
            //
            ribbonPageGroup1.ItemLinks.Add(barBtnImport);
            ribbonPageGroup1.ItemLinks.Add(barEditSelStation, true);
            ribbonPageGroup1.ItemLinks.Add(barBtnSchedule);
            ribbonPageGroup1.Name = "ribbonPageGroup1";
            ribbonPageGroup1.Text = "功能";
            //
            // ScheduleValidView
            //
            AutoScaleDimensions = new SizeF(10F, 22F);
            AutoScaleMode = AutoScaleMode.Font;
            Controls.Add(gridControl1);
            Controls.Add(ribbonControl1);
            Name = "ScheduleValidView";
            Size = new Size(1541, 1071);
            ((System.ComponentModel.ISupportInitialize)gridControl1).EndInit();
            ((System.ComponentModel.ISupportInitialize)scheduleValidViewModelBindingSource).EndInit();
            ((System.ComponentModel.ISupportInitialize)bandedGridView1).EndInit();
            ((System.ComponentModel.ISupportInitialize)ribbonControl1).EndInit();
            ((System.ComponentModel.ISupportInitialize)repRadioGroupSelStation).EndInit();
            ResumeLayout(false);
            PerformLayout();
        }
        #endregion
        private DevExpress.XtraEditors.Repository.RepositoryItemRadioGroup repRadioGroupSelStation;
        private DevExpress.XtraGrid.Views.BandedGrid.GridBand gridBand1;
        private DevExpress.XtraBars.Navigation.NavigationPage navigationPage1;
        private DevExpress.XtraGrid.GridControl gridControl1;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridView bandedGridView1;
        private DevExpress.XtraGrid.Views.BandedGrid.GridBand gridBandSrc;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn colTime;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn colTotalFlowSrc;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn colTotalHeadSrc;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn colTotalPowerSrc;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn colFlagRpmDict;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn colRunFlagsSrc;
        private DevExpress.XtraGrid.Views.BandedGrid.GridBand gridBandCalcFre;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn colTotalFlowCalc;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn colTotalPowerCalc;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn colTotalFlowCalcSrcDiff;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn colTotalPowerCalcSrcDiff;
        private DevExpress.XtraGrid.Views.BandedGrid.GridBand gridBandSchedule;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn colTotalFlowSchedule;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn colTotalHeadSchedule;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn colTotalPowerSchedule;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn colRunFlagsSchedule;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn colTotalFlowScheduleSrcDiff;
        private DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn colTotalPowerScheduleSrcDiff;
        private DevExpress.XtraBars.Ribbon.RibbonControl ribbonControl1;
        private DevExpress.XtraBars.BarButtonItem barBtnImport;
        private DevExpress.XtraBars.BarButtonItem barBtnSchedule;
        private DevExpress.XtraBars.Ribbon.RibbonPage ribbonPageValid;
        private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup1;
        private DevExpress.XtraBars.BarEditItem barEditSelStation;
        private BindingSource scheduleValidViewModelBindingSource;
    }
}
Test/IStation.Win/View/ScheduleValidView - ¸´ÖÆ.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,303 @@
using DevExpress.XtraEditors;
using NPOI.HSSF.UserModel;
using System.IO;
using Yw;
namespace IStation.Win
{
    public partial class ScheduleValidView : XtraUserControl
    {
        public ScheduleValidView()
        {
            InitializeComponent();
            this.ribbonControl1.SetNormalView();
            this.bandedGridView1.SetNormalView();
            this.bandedGridView1.RegistCustomDrawRowIndicator();
            this.barEditSelStation.EditValue = _sel_index;
        }
        private List<ScheduleValidViewModel> _schedule_valid_vm_list = null;
        private int _sel_index = 2;
        //导入文件
        private void barBtnImport_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            var dlg = new OpenFileDialog();
            dlg.Filter = "EXCEL æ–‡ä»¶(*.xls)|*.xls";
            if (dlg.ShowDialog() != DialogResult.OK)
                return;
            var fileName = dlg.FileName;
            int line = 0;
            try
            {
                //初始化文件
                HSSFWorkbook theBook = null;
                using (FileStream file = new FileStream(fileName, FileMode.Open, FileAccess.Read))
                {
                    theBook = new HSSFWorkbook(file);
                }
                //检查表格是否符合
                NPOI.SS.UserModel.ISheet sheet1 = theBook.GetSheet("Sheet1");
                if (sheet1 == null)
                {
                    sheet1 = theBook.GetSheetAt(0);
                    if (sheet1 == null)
                    {
                        MessageBox.Show("请将数据放在Sheet1中");
                        return;
                    }
                }
                //标题行
                int title_line_index = 0;
                //时间
                int col_index_time = 0;
                //总流量
                int col_index_flow = 1;
                //总扬程
                int col_index_head = 2;
                //总功率
                int col_index_power = 3;
                //运行标志
                int col_index_flag_rpm_dict = 4;
                //运行标志
                int col_index_flag_flow_dict = 5;
                //运行标志
                int col_index_flag_head_dict = 6;
                //运行标志
                int col_index_flag_power_dict = 7;
                var row_title = sheet1.GetRow(title_line_index);
                if (row_title == null)
                {
                    MessageBox.Show("第一行第一列不能空,");
                    return;
                }
                //开始读取的行
                int start_line = title_line_index + 1;
                var cell_0 = row_title.GetCell(0);
                if (cell_0 == null)
                {
                    MessageBox.Show("无法读取表头文件");
                    return;
                }
                _schedule_valid_vm_list = new List<ScheduleValidViewModel>();
                DateTime time;
                Dictionary<int, double> flag_rpm_dict, flag_flow_dict, flag_head_dict, flag_power_dict;
                double flow, head, power;
                NPOI.SS.UserModel.IRow rowtemp = null;
                NPOI.SS.UserModel.ICell cell;
                for (line = start_line; line < 100; line++)
                {
                    flow = head = power = -1;
                    flag_rpm_dict = new Dictionary<int, double>();
                    flag_flow_dict = new Dictionary<int, double>();
                    flag_head_dict = new Dictionary<int, double>();
                    flag_power_dict = new Dictionary<int, double>();
                    rowtemp = sheet1.GetRow(line);
                    if (rowtemp == null)
                        break;
                    cell = rowtemp.GetCell(col_index_time);
                    if (cell == null)
                        break;
                    if (!DateTime.TryParse(cell.StringCellValue, out time))
                    {
                        continue;
                    }
                    cell = rowtemp.GetCell(col_index_flow);
                    if (cell == null)
                        break;
                    if (cell.CellType == NPOI.SS.UserModel.CellType.Numeric)
                        flow = cell.NumericCellValue;
                    else if (cell.CellType == NPOI.SS.UserModel.CellType.String)
                        flow = Convert.ToDouble(cell.StringCellValue);
                    else
                        continue;
                    if (flow < 0)
                        break;
                    cell = rowtemp.GetCell(col_index_head);
                    if (cell == null)
                        break;
                    if (cell.CellType == NPOI.SS.UserModel.CellType.Numeric)
                        head = cell.NumericCellValue;
                    else if (cell.CellType == NPOI.SS.UserModel.CellType.String)
                        head = Convert.ToDouble(cell.StringCellValue);
                    else if (cell.CellType == NPOI.SS.UserModel.CellType.Blank)
                        break;
                    if (head < 0)
                        break;
                    cell = rowtemp.GetCell(col_index_power);
                    if (cell == null)
                        break;
                    if (cell.CellType == NPOI.SS.UserModel.CellType.Numeric)
                        power = cell.NumericCellValue;
                    else if (cell.CellType == NPOI.SS.UserModel.CellType.String)
                        power = Convert.ToDouble(cell.StringCellValue);
                    else
                        power = -1;
                    cell = rowtemp.GetCell(col_index_flag_rpm_dict);
                    if (cell == null)
                        break;
                    else if (cell.CellType == NPOI.SS.UserModel.CellType.String)
                        flag_rpm_dict = JsonHelper.Json2Object<Dictionary<int, double>>(cell.StringCellValue);
                    cell = rowtemp.GetCell(col_index_flag_flow_dict);
                    if (cell == null)
                        break;
                    else if (cell.CellType == NPOI.SS.UserModel.CellType.String)
                        flag_flow_dict = JsonHelper.Json2Object<Dictionary<int, double>>(cell.StringCellValue);
                    cell = rowtemp.GetCell(col_index_flag_head_dict);
                    if (cell == null)
                        break;
                    else if (cell.CellType == NPOI.SS.UserModel.CellType.String)
                        flag_head_dict = JsonHelper.Json2Object<Dictionary<int, double>>(cell.StringCellValue);
                    cell = rowtemp.GetCell(col_index_flag_power_dict);
                    if (cell == null)
                        break;
                    else if (cell.CellType == NPOI.SS.UserModel.CellType.String)
                        flag_power_dict = JsonHelper.Json2Object<Dictionary<int, double>>(cell.StringCellValue);
                    var vm = new ScheduleValidViewModel();
                    vm.Time = time;
                    vm.TotalFlowSrc = flow;
                    vm.TotalHeadSrc = head;
                    vm.TotalPowerSrc = power;
                    vm.FlagRpmDict = flag_rpm_dict;
                    if (flag_rpm_dict != null && flag_rpm_dict.Any())
                    {
                        var flags = flag_rpm_dict.Select(x => x.Key).ToList();
                        vm.RunFlagsSrc = Yw.Untity.IntListHelper.ToString(flags);
                    }
                    vm.FlagFlowDict = flag_flow_dict;
                    vm.FlagHeadDict = flag_head_dict;
                    vm.FlagPowerDict = flag_power_dict;
                    _schedule_valid_vm_list.Add(vm);
                }
                this.scheduleValidViewModelBindingSource.DataSource = _schedule_valid_vm_list;
                this.scheduleValidViewModelBindingSource.ResetBindings(false);
                this.gridControl1.RefreshDataSource();
                this.bandedGridView1.BestFitColumns();
            }
            catch (System.Exception err)
            {
                MessageBox.Show(string.Format("读取Excel出错!错误原因:{0},行号: {1}", err.Message, line), "提示信息",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
        //调度
        private void barBtnSchedule_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (_schedule_valid_vm_list == null || !_schedule_valid_vm_list.Any())
            {
                XtraMessageBox.Show("无数据!");
                return;
            }
            try
            {
                WaitHelper.ShowWaitForm();
                var station = new Service.Station().Get();
                List<Model.Pump> pumps;
                List<int> flags_part1, flags_part2;
                if (_sel_index == 1)
                {
                    pumps = station.S1;
                    flags_part1 = station.S1FlagsPart1;
                    flags_part2 = station.S1FlagsPart2;
                }
                else
                {
                    pumps = station.S2;
                    flags_part1 = station.S2FlagsPart1;
                    flags_part2 = station.S2FlagsPart2;
                }
                var current_open_pump_list = new List<int>();
                var must_open_pump_list = new List<int>();
                var must_not_open_pump_list = new List<int>();
                var schedule_helper = new Algorithm.ScheduleHelper();
                foreach (var vm in _schedule_valid_vm_list)
                {
                    if (vm.FlagRpmDict == null || !vm.FlagRpmDict.Any())
                        continue;
                    current_open_pump_list = vm.FlagRpmDict.Select(x => x.Key).ToList();
                    if (current_open_pump_list == null || current_open_pump_list.Count < 1)
                        continue;
                    var target_flow = vm.TotalFlowSrc;
                    var target_head = vm.TotalHeadSrc;
                    var opt_schedule = schedule_helper.Calc(pumps, flags_part1, flags_part2, target_flow, target_head);
                    if (opt_schedule != null)
                    {
                        vm.TotalFlowSchedule = opt_schedule.Flow;
                        vm.TotalHeadSchedule = opt_schedule.Head;
                        vm.TotalPowerSchedule = opt_schedule.Power;
                        vm.RunFlagsSchedule = opt_schedule.Remark;
                        vm.TotalFlowScheduleSrcDiff = opt_schedule.Flow - target_flow;
                        vm.TotalPowerScheduleSrcDiff = opt_schedule.Power - vm.TotalPowerSrc;
                    }
                    var opt_src = schedule_helper.WorkingCalc(pumps, vm.FlagRpmDict, vm.FlagHeadDict, target_flow, target_head);
                    if (opt_src != null)
                    {
                        vm.TotalFlowCalc = opt_src.Flow;
                        vm.TotalPowerCalc = opt_src.Power;
                        vm.TotalFlowCalcSrcDiff = opt_src.Flow - target_flow;
                        vm.TotalPowerCalcSrcDiff = opt_src.Power - vm.TotalPowerSrc;
                    }
                    vm.Round();
                }
                this.scheduleValidViewModelBindingSource.DataSource = _schedule_valid_vm_list;
                this.scheduleValidViewModelBindingSource.ResetBindings(false);
                this.gridControl1.RefreshDataSource();
                this.bandedGridView1.BestFitColumns();
            }
            //catch (Exception ex)
            //{
            //    XtraMessageBox.Show(ex.Message);
            //}
            finally
            {
                WaitHelper.HideWaitForm();
            }
        }
        //选中泵站变换
        private void barEditSelStation_EditValueChanged(object sender, EventArgs e)
        {
            _sel_index = Convert.ToInt32(this.barEditSelStation.EditValue);
        }
    }
}
Test/IStation.Win/View/ScheduleValidView - ¸´ÖÆ.resx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,169 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Version 2.0
    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    associated with the data types.
    Example:
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
    There are any number of "resheader" rows that contain simple
    name/value pairs.
    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    mimetype set.
    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    extensible. For a given mimetype the value must be set accordingly:
    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    read any of the formats listed below.
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <metadata name="scheduleValidViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>17, 17</value>
  </metadata>
  <assembly alias="DevExpress.Data.v23.2" name="DevExpress.Data.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
  <data name="barBtnImport.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAAMDAAAC77u/
        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
        Y2U9InByZXNlcnZlIiBpZD0iT3BlbjIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMy
        IDMyIj4NCiAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5HcmVlbntmaWxsOiMwMzlDMjM7fQoJLlll
        bGxvd3tmaWxsOiNGRkIxMTU7fQoJLnN0MHtvcGFjaXR5OjAuNzU7fQo8L3N0eWxlPg0KICA8ZyBjbGFz
        cz0ic3QwIj4NCiAgICA8cGF0aCBkPSJNMTkuMiwxMEgxMlY3YzAtMC42LTAuNC0xLTEtMUgzQzIuNCw2
        LDIsNi41LDIsN3YxOGMwLDAuMiwwLDAuMywwLjEsMC40YzAsMCwwLjEtMC4xLDAuMS0wLjJsNS41LTEw
        ICAgQzgsMTQuNSw4LjcsMTQsOS41LDE0aDEzLjdMMTkuMiwxMHoiIGNsYXNzPSJZZWxsb3ciIC8+DQog
        IDwvZz4NCiAgPHBhdGggZD0iTTI5LjMsMTZIOS42TDQsMjZoMTkuOGMwLjUsMCwxLjEtMC4yLDEuMy0w
        LjZsNC45LTguOUMzMC4xLDE2LjIsMjkuOCwxNiwyOS4zLDE2eiIgY2xhc3M9IlllbGxvdyIgLz4NCiAg
        PHBhdGggZD0iTTI4LDhjMC0zLjMtMi43LTYtNi02cy02LDIuNy02LDZjMC0yLjIsMS44LTQsNC00czQs
        MS44LDQsNGgtNGw2LDZsNi02SDI4eiIgY2xhc3M9IkdyZWVuIiAvPg0KPC9zdmc+Cw==
</value>
  </data>
  <data name="barBtnSchedule.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAABoEAAAC77u/
        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z
        ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5SZWR7ZmlsbDojRDExQzFDO30KCS5HcmVlbntmaWxsOiMwMzlD
        MjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
        Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQoJLnN0MntkaXNwbGF5Om5vbmU7fQoJLnN0M3tk
        aXNwbGF5OmlubGluZTtmaWxsOiNGRkIxMTU7fQoJLnN0NHtkaXNwbGF5OmlubGluZTt9Cgkuc3Q1e2Rp
        c3BsYXk6aW5saW5lO29wYWNpdHk6MC43NTt9Cgkuc3Q2e2Rpc3BsYXk6aW5saW5lO29wYWNpdHk6MC41
        O30KCS5zdDd7ZGlzcGxheTppbmxpbmU7ZmlsbDojMDM5QzIzO30KCS5zdDh7ZGlzcGxheTppbmxpbmU7
        ZmlsbDojRDExQzFDO30KCS5zdDl7ZGlzcGxheTppbmxpbmU7ZmlsbDojMTE3N0Q3O30KCS5zdDEwe2Rp
        c3BsYXk6aW5saW5lO2ZpbGw6I0ZGRkZGRjt9Cjwvc3R5bGU+DQogIDxnIGlkPSJTY2hlZHVsZXIiPg0K
        ICAgIDxwb2x5Z29uIHBvaW50cz0iMTYsMTYgMTYsOCAxNCw4IDE0LDE4IDI0LDE4IDI0LDE2ICAiIGNs
        YXNzPSJCbGFjayIgLz4NCiAgICA8cGF0aCBkPSJNMTYsMkM4LjMsMiwyLDguMywyLDE2czYuMywxNCwx
        NCwxNHMxNC02LjMsMTQtMTRTMjMuNywyLDE2LDJ6IE0xNiwyNmMtNS41LDAtMTAtNC41LTEwLTEwICAg
        YzAtNS41LDQuNS0xMCwxMC0xMHMxMCw0LjUsMTAsMTBDMjYsMjEuNSwyMS41LDI2LDE2LDI2eiIgY2xh
        c3M9IlJlZCIgLz4NCiAgPC9nPg0KPC9zdmc+Cw==
</value>
  </data>
</root>
Test/IStation.Win/View/ScheduleValidView.Designer.cs
@@ -70,18 +70,12 @@
            // 
            gridControl1.DataSource = scheduleValidViewModelBindingSource;
            gridControl1.Dock = DockStyle.Fill;
            gridControl1.EmbeddedNavigator.Margin = new Padding(4, 3, 4, 3);
            gridControl1.Location = new Point(0, 272);
            gridControl1.Location = new Point(0, 262);
            gridControl1.MainView = bandedGridView1;
            gridControl1.Margin = new Padding(4, 3, 4, 3);
            gridControl1.Name = "gridControl1";
            gridControl1.Size = new Size(1849, 945);
            gridControl1.Size = new Size(1541, 809);
            gridControl1.TabIndex = 5;
            gridControl1.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] { bandedGridView1 });
            //
            // scheduleValidViewModelBindingSource
            //
            scheduleValidViewModelBindingSource.DataSource = typeof(ScheduleValidViewModel);
            // 
            // bandedGridView1
            // 
@@ -89,10 +83,8 @@
            bandedGridView1.Appearance.Row.Options.UseFont = true;
            bandedGridView1.Bands.AddRange(new DevExpress.XtraGrid.Views.BandedGrid.GridBand[] { gridBandSrc, gridBandCalcFre, gridBandSchedule });
            bandedGridView1.Columns.AddRange(new DevExpress.XtraGrid.Views.BandedGrid.BandedGridColumn[] { colTime, colTotalFlowSrc, colTotalHeadSrc, colTotalPowerSrc, colRunFlagsSrc, colFlagRpmDict, colTotalFlowCalc, colTotalPowerCalc, colTotalFlowSchedule, colTotalHeadSchedule, colTotalPowerSchedule, colRunFlagsSchedule, colTotalFlowScheduleSrcDiff, colTotalPowerScheduleSrcDiff, colTotalFlowCalcSrcDiff, colTotalPowerCalcSrcDiff });
            bandedGridView1.DetailHeight = 398;
            bandedGridView1.GridControl = gridControl1;
            bandedGridView1.Name = "bandedGridView1";
            bandedGridView1.OptionsEditForm.PopupEditFormWidth = 960;
            // 
            // gridBandSrc
            // 
@@ -103,57 +95,56 @@
            gridBandSrc.Columns.Add(colTotalPowerSrc);
            gridBandSrc.Columns.Add(colFlagRpmDict);
            gridBandSrc.Columns.Add(colRunFlagsSrc);
            gridBandSrc.MinWidth = 12;
            gridBandSrc.Name = "gridBandSrc";
            gridBandSrc.VisibleIndex = 0;
            gridBandSrc.Width = 670;
            gridBandSrc.Width = 560;
            // 
            // colTime
            // 
            colTime.FieldName = "Time";
            colTime.MinWidth = 36;
            colTime.MinWidth = 30;
            colTime.Name = "colTime";
            colTime.Visible = true;
            colTime.Width = 134;
            colTime.Width = 112;
            // 
            // colTotalFlowSrc
            // 
            colTotalFlowSrc.FieldName = "TotalFlowSrc";
            colTotalFlowSrc.MinWidth = 36;
            colTotalFlowSrc.MinWidth = 30;
            colTotalFlowSrc.Name = "colTotalFlowSrc";
            colTotalFlowSrc.Visible = true;
            colTotalFlowSrc.Width = 134;
            colTotalFlowSrc.Width = 112;
            // 
            // colTotalHeadSrc
            // 
            colTotalHeadSrc.FieldName = "TotalHeadSrc";
            colTotalHeadSrc.MinWidth = 36;
            colTotalHeadSrc.MinWidth = 30;
            colTotalHeadSrc.Name = "colTotalHeadSrc";
            colTotalHeadSrc.Visible = true;
            colTotalHeadSrc.Width = 134;
            colTotalHeadSrc.Width = 112;
            // 
            // colTotalPowerSrc
            // 
            colTotalPowerSrc.FieldName = "TotalPowerSrc";
            colTotalPowerSrc.MinWidth = 36;
            colTotalPowerSrc.MinWidth = 30;
            colTotalPowerSrc.Name = "colTotalPowerSrc";
            colTotalPowerSrc.Visible = true;
            colTotalPowerSrc.Width = 134;
            colTotalPowerSrc.Width = 112;
            // 
            // colFlagRpmDict
            // 
            colFlagRpmDict.FieldName = "FlagRpmDict";
            colFlagRpmDict.MinWidth = 36;
            colFlagRpmDict.MinWidth = 30;
            colFlagRpmDict.Name = "colFlagRpmDict";
            colFlagRpmDict.Width = 134;
            colFlagRpmDict.Width = 112;
            // 
            // colRunFlagsSrc
            // 
            colRunFlagsSrc.FieldName = "RunFlagsSrc";
            colRunFlagsSrc.MinWidth = 36;
            colRunFlagsSrc.MinWidth = 30;
            colRunFlagsSrc.Name = "colRunFlagsSrc";
            colRunFlagsSrc.Visible = true;
            colRunFlagsSrc.Width = 134;
            colRunFlagsSrc.Width = 112;
            // 
            // gridBandCalcFre
            // 
@@ -162,42 +153,41 @@
            gridBandCalcFre.Columns.Add(colTotalPowerCalc);
            gridBandCalcFre.Columns.Add(colTotalFlowCalcSrcDiff);
            gridBandCalcFre.Columns.Add(colTotalPowerCalcSrcDiff);
            gridBandCalcFre.MinWidth = 12;
            gridBandCalcFre.Name = "gridBandCalcFre";
            gridBandCalcFre.VisibleIndex = 1;
            gridBandCalcFre.Width = 536;
            gridBandCalcFre.Width = 448;
            // 
            // colTotalFlowCalc
            // 
            colTotalFlowCalc.FieldName = "TotalFlowCalc";
            colTotalFlowCalc.MinWidth = 36;
            colTotalFlowCalc.MinWidth = 30;
            colTotalFlowCalc.Name = "colTotalFlowCalc";
            colTotalFlowCalc.Visible = true;
            colTotalFlowCalc.Width = 134;
            colTotalFlowCalc.Width = 112;
            // 
            // colTotalPowerCalc
            // 
            colTotalPowerCalc.FieldName = "TotalPowerCalc";
            colTotalPowerCalc.MinWidth = 36;
            colTotalPowerCalc.MinWidth = 30;
            colTotalPowerCalc.Name = "colTotalPowerCalc";
            colTotalPowerCalc.Visible = true;
            colTotalPowerCalc.Width = 134;
            colTotalPowerCalc.Width = 112;
            // 
            // colTotalFlowCalcSrcDiff
            // 
            colTotalFlowCalcSrcDiff.FieldName = "TotalFlowCalcSrcDiff";
            colTotalFlowCalcSrcDiff.MinWidth = 36;
            colTotalFlowCalcSrcDiff.MinWidth = 30;
            colTotalFlowCalcSrcDiff.Name = "colTotalFlowCalcSrcDiff";
            colTotalFlowCalcSrcDiff.Visible = true;
            colTotalFlowCalcSrcDiff.Width = 134;
            colTotalFlowCalcSrcDiff.Width = 112;
            // 
            // colTotalPowerCalcSrcDiff
            // 
            colTotalPowerCalcSrcDiff.FieldName = "TotalPowerCalcSrcDiff";
            colTotalPowerCalcSrcDiff.MinWidth = 36;
            colTotalPowerCalcSrcDiff.MinWidth = 30;
            colTotalPowerCalcSrcDiff.Name = "colTotalPowerCalcSrcDiff";
            colTotalPowerCalcSrcDiff.Visible = true;
            colTotalPowerCalcSrcDiff.Width = 134;
            colTotalPowerCalcSrcDiff.Width = 112;
            // 
            // gridBandSchedule
            // 
@@ -208,72 +198,68 @@
            gridBandSchedule.Columns.Add(colRunFlagsSchedule);
            gridBandSchedule.Columns.Add(colTotalFlowScheduleSrcDiff);
            gridBandSchedule.Columns.Add(colTotalPowerScheduleSrcDiff);
            gridBandSchedule.MinWidth = 12;
            gridBandSchedule.Name = "gridBandSchedule";
            gridBandSchedule.VisibleIndex = 2;
            gridBandSchedule.Width = 804;
            gridBandSchedule.Width = 672;
            // 
            // colTotalFlowSchedule
            // 
            colTotalFlowSchedule.FieldName = "TotalFlowSchedule";
            colTotalFlowSchedule.MinWidth = 36;
            colTotalFlowSchedule.MinWidth = 30;
            colTotalFlowSchedule.Name = "colTotalFlowSchedule";
            colTotalFlowSchedule.Visible = true;
            colTotalFlowSchedule.Width = 134;
            colTotalFlowSchedule.Width = 112;
            // 
            // colTotalHeadSchedule
            // 
            colTotalHeadSchedule.FieldName = "TotalHeadSchedule";
            colTotalHeadSchedule.MinWidth = 36;
            colTotalHeadSchedule.MinWidth = 30;
            colTotalHeadSchedule.Name = "colTotalHeadSchedule";
            colTotalHeadSchedule.Visible = true;
            colTotalHeadSchedule.Width = 134;
            colTotalHeadSchedule.Width = 112;
            // 
            // colTotalPowerSchedule
            // 
            colTotalPowerSchedule.FieldName = "TotalPowerSchedule";
            colTotalPowerSchedule.MinWidth = 36;
            colTotalPowerSchedule.MinWidth = 30;
            colTotalPowerSchedule.Name = "colTotalPowerSchedule";
            colTotalPowerSchedule.Visible = true;
            colTotalPowerSchedule.Width = 134;
            colTotalPowerSchedule.Width = 112;
            // 
            // colRunFlagsSchedule
            // 
            colRunFlagsSchedule.FieldName = "RunFlagsSchedule";
            colRunFlagsSchedule.MinWidth = 36;
            colRunFlagsSchedule.MinWidth = 30;
            colRunFlagsSchedule.Name = "colRunFlagsSchedule";
            colRunFlagsSchedule.Visible = true;
            colRunFlagsSchedule.Width = 134;
            colRunFlagsSchedule.Width = 112;
            // 
            // colTotalFlowScheduleSrcDiff
            // 
            colTotalFlowScheduleSrcDiff.FieldName = "TotalFlowScheduleSrcDiff";
            colTotalFlowScheduleSrcDiff.MinWidth = 36;
            colTotalFlowScheduleSrcDiff.MinWidth = 30;
            colTotalFlowScheduleSrcDiff.Name = "colTotalFlowScheduleSrcDiff";
            colTotalFlowScheduleSrcDiff.Visible = true;
            colTotalFlowScheduleSrcDiff.Width = 134;
            colTotalFlowScheduleSrcDiff.Width = 112;
            // 
            // colTotalPowerScheduleSrcDiff
            // 
            colTotalPowerScheduleSrcDiff.FieldName = "TotalPowerScheduleSrcDiff";
            colTotalPowerScheduleSrcDiff.MinWidth = 36;
            colTotalPowerScheduleSrcDiff.MinWidth = 30;
            colTotalPowerScheduleSrcDiff.Name = "colTotalPowerScheduleSrcDiff";
            colTotalPowerScheduleSrcDiff.Visible = true;
            colTotalPowerScheduleSrcDiff.Width = 134;
            colTotalPowerScheduleSrcDiff.Width = 112;
            // 
            // ribbonControl1
            // 
            ribbonControl1.EmptyAreaImageOptions.ImagePadding = new Padding(36, 34, 36, 34);
            ribbonControl1.ExpandCollapseItem.Id = 0;
            ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, barBtnImport, barBtnSchedule, barEditSelStation });
            ribbonControl1.Location = new Point(0, 0);
            ribbonControl1.Margin = new Padding(4, 3, 4, 3);
            ribbonControl1.MaxItemId = 6;
            ribbonControl1.Name = "ribbonControl1";
            ribbonControl1.OptionsMenuMinWidth = 396;
            ribbonControl1.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { ribbonPageValid });
            ribbonControl1.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { repRadioGroupSelStation });
            ribbonControl1.Size = new Size(1849, 272);
            ribbonControl1.Size = new Size(1541, 262);
            // 
            // barBtnImport
            // 
@@ -323,13 +309,12 @@
            // 
            // ScheduleValidView
            // 
            AutoScaleDimensions = new SizeF(12F, 25F);
            AutoScaleDimensions = new SizeF(10F, 22F);
            AutoScaleMode = AutoScaleMode.Font;
            Controls.Add(gridControl1);
            Controls.Add(ribbonControl1);
            Margin = new Padding(4, 3, 4, 3);
            Name = "ScheduleValidView";
            Size = new Size(1849, 1217);
            Size = new Size(1541, 1071);
            ((System.ComponentModel.ISupportInitialize)gridControl1).EndInit();
            ((System.ComponentModel.ISupportInitialize)scheduleValidViewModelBindingSource).EndInit();
            ((System.ComponentModel.ISupportInitialize)bandedGridView1).EndInit();
Test/IStation.Win/View/ScheduleValidView.resx
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Microsoft ResX Schema
    Version 2.0
@@ -48,7 +48,7 @@
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter