Shuxia Ning
2024-07-10 7f37f008a60b4797cee17ed9b1c0189590baae8d
代码验证
已重命名11个文件
已修改11个文件
已添加6个文件
549 ■■■■ 文件已修改
IStation.Application/02-web/01-hydraulic-model/HydraulicModel_Controller.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Application/IStation.Application.csproj 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Cw.Test/IStation.Cw.Test.csproj 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Cw.Test/Program.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Dto/IStation.Dto.csproj 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Entry/Properties/PublishProfiles/FolderProfile.pubxml.user 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Schedule.sln 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Server.Validation/01-validation/HydraulicModelValidationHelperJob.cs 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Service/IStation.Service.csproj 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Test.One/HydraulicModelValidationHelperJob.cs 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Test.One/IStation.Test.One.csproj 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Test.One/Program.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/HydraulicModelValidationHelperJob.cs 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/IStation.Test.csproj 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/Program.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/bak/EpanetMethods.cs 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/bak/HydraulicModelValidationHelperJob.cs 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/bak/ModelVerification.cs 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/bak/Program - 复制(2).cs 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/bak/Program - 复制(3).cs 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/bak/Program - 复制.cs 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/bak/Program _mode.cs 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/bak/Program_bak.cs 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/bak/ScadaModelValidHelper - 复制.cs 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/bak/ScheduleModelValidHelper - 复制(2).cs 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/bak/ScheduleModelValidHelper - 复制(3).cs 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/bak/ScheduleModelValidHelper - 复制.cs 补丁 | 查看 | 原始文档 | blame | 历史
Test/IStation.Test/helper/TimeValue.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
IStation.Application/02-web/01-hydraulic-model/HydraulicModel_Controller.cs
@@ -14,14 +14,14 @@
        private readonly Service.HydraulicModelValidationConfig _service_hydraulic_model_validation_config = new IStation.Service.HydraulicModelValidationConfig();
        private static readonly Dictionary<string, double> _pump_nr_dict = new() {
            { "Pump11",524},
            { "Pump12",524},
            { "Pump13",524},
            { "Pump14",524},
            //{ "Pump15",545},
            //{ "Pump16",524},
            { "Pump17",524},
            { "Pump18",524},
            { "Pump11",590},
            { "Pump12",590},
            { "Pump13",590},
            { "Pump14",590},
            //{ "Pump15",590},
            //{ "Pump16",590},
            { "Pump17",590},
            { "Pump18",590},
            { "Pump21",740},
            { "Pump22",495},
IStation.Application/IStation.Application.csproj
@@ -51,7 +51,7 @@
    </ItemGroup>
    <ItemGroup>
        <PackageReference Include="Yw.Application.Core" Version="3.0.7" />
        <PackageReference Include="Yw.Application.Core" Version="3.1.0" />
        <PackageReference Include="Yw.Captcha.Core" Version="3.0.0" />
    </ItemGroup>
IStation.Cw.Test/IStation.Cw.Test.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>
</Project>
IStation.Cw.Test/Program.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2 @@
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World!");
IStation.Dto/IStation.Dto.csproj
@@ -9,8 +9,8 @@
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="Yw.Dto.Core" Version="3.0.7" />
        <PackageReference Include="Yw.Service.Auth.Core" Version="3.0.8" />
        <PackageReference Include="Yw.Dto.Core" Version="3.1.0" />
        <PackageReference Include="Yw.Service.Auth.Core" Version="3.1.0" />
    </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-26T08:20:21.3981649Z||;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||;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-07-09T01:51:25.7986637Z||;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||;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.Schedule.sln
@@ -25,6 +25,8 @@
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IStation.TopShelf.Validation", "IStation.TopShelf.Validation\IStation.TopShelf.Validation.csproj", "{D09D4DD5-9F4D-442E-A11D-547AEB3FF18C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IStation.Test.One", "IStation.Test.One\IStation.Test.One.csproj", "{9D3A6032-C476-470B-954D-B300546984A4}"
EndProject
Global
    GlobalSection(SolutionConfigurationPlatforms) = preSolution
        Debug|Any CPU = Debug|Any CPU
@@ -113,6 +115,14 @@
        {D09D4DD5-9F4D-442E-A11D-547AEB3FF18C}.Release|Any CPU.Build.0 = Release|Any CPU
        {D09D4DD5-9F4D-442E-A11D-547AEB3FF18C}.Release|x86.ActiveCfg = Release|Any CPU
        {D09D4DD5-9F4D-442E-A11D-547AEB3FF18C}.Release|x86.Build.0 = Release|Any CPU
        {9D3A6032-C476-470B-954D-B300546984A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
        {9D3A6032-C476-470B-954D-B300546984A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
        {9D3A6032-C476-470B-954D-B300546984A4}.Debug|x86.ActiveCfg = Debug|Any CPU
        {9D3A6032-C476-470B-954D-B300546984A4}.Debug|x86.Build.0 = Debug|Any CPU
        {9D3A6032-C476-470B-954D-B300546984A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
        {9D3A6032-C476-470B-954D-B300546984A4}.Release|Any CPU.Build.0 = Release|Any CPU
        {9D3A6032-C476-470B-954D-B300546984A4}.Release|x86.ActiveCfg = Release|Any CPU
        {9D3A6032-C476-470B-954D-B300546984A4}.Release|x86.Build.0 = Release|Any CPU
    EndGlobalSection
    GlobalSection(SolutionProperties) = preSolution
        HideSolutionNode = FALSE
@@ -120,6 +130,7 @@
    GlobalSection(NestedProjects) = preSolution
        {34BCD6D5-2061-42AE-AFB4-9A37B32321C5} = {C5DDDBED-5401-4F86-B4B6-97082CDEFC61}
        {35E6A93C-A115-43E7-AE6B-67CEE31C3B7C} = {C5DDDBED-5401-4F86-B4B6-97082CDEFC61}
        {9D3A6032-C476-470B-954D-B300546984A4} = {C5DDDBED-5401-4F86-B4B6-97082CDEFC61}
    EndGlobalSection
    GlobalSection(ExtensibilityGlobals) = postSolution
        SolutionGuid = {E02989A8-9B6F-43E5-AACA-790328215089}
IStation.Server.Validation/01-validation/HydraulicModelValidationHelperJob.cs
@@ -13,14 +13,14 @@
               Settings.ParasHelper.LocalFile.HydraulicModelFile);
        private static readonly Dictionary<string, double> _pump_nr_dict = new() {
            { "Pump11",524},
            { "Pump12",524},
            { "Pump13",524},
            { "Pump14",524},
            //{ "Pump15",545},
            //{ "Pump16",524},
            { "Pump17",524},
            { "Pump18",524},
            { "Pump11",590},
            { "Pump12",590},
            { "Pump13",590},
            { "Pump14",590},
            //{ "Pump15",590},
            //{ "Pump16",590},
            { "Pump17",590},
            { "Pump18",590},
            { "Pump21",740},
            { "Pump22",495},
IStation.Service/IStation.Service.csproj
@@ -26,11 +26,11 @@
    </ItemGroup>
    <ItemGroup>
        <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.DAL.PostgreSql.Core" Version="3.0.7" />
        <PackageReference Include="Yw.DAL.SQLite.Core" Version="3.0.7" />
        <PackageReference Include="Yw.DALFactory.Core" Version="3.0.2" />
        <PackageReference Include="Yw.MathNet.Core" Version="3.0.0" />
        <PackageReference Include="Yw.Service.Core" Version="3.0.2" />
        <PackageReference Include="Yw.Service.Core" Version="3.0.6" />
        <PackageReference Include="Yw.Yitter.Core" Version="3.0.1" />
    </ItemGroup>
IStation.Test.One/HydraulicModelValidationHelperJob.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,158 @@
namespace IStation
{
    /// <summary>
    /// æ¨¡åž‹éªŒè¯è¾…助类
    /// </summary>
    public class HydraulicModelValidationHelperJob
    {
        private static readonly string _hydraulic_model_file = Path.Combine(
               Settings.ParasHelper.LocalFile.DataFolderDirectory,
               Settings.ParasHelper.LocalFile.HydraulicModelFile);
        private static readonly Dictionary<string, double> _pump_nr_dict = new() {
            { "Pump11",590},
            { "Pump12",590},
            { "Pump13",590},
            { "Pump14",590},
            //{ "Pump15",590},
            //{ "Pump16",590},
            { "Pump17",590},
            { "Pump18",590},
            { "Pump21",740},
            { "Pump22",495},
            { "Pump23",495},
            { "Pump24",495},
            { "Pump25",495},
            { "Pump26",495},
            { "Pump27",740}
        };
        private static readonly List<string> _MPa = new();
        private static readonly List<string> _kPa = new();
        /// <summary>
        ///
        /// </summary>
        public static void Execute()
        {
            var verification_id = 1;
            var current_time = DateTime.Now;
            if (!File.Exists(_hydraulic_model_file))
            {
                // Log.Info(verification_id, $"模型验证计划任务中,水力模型文件不存在,自动跳过当前数据!");
               // return;
            }
            var hydraulic_model_validation_config = new IStation.Service.HydraulicModelValidationConfig().Get();
            if (hydraulic_model_validation_config == null)
            {
                // Log.Info(verification_id, "模型验证计划任务中,水力模型验证文件不存在,自动跳过当前数据!");
                //return;
            }
            if (!Settings.ParasHelper.ZyDocking.Enable)
            {
                //Log.Info(verification_id, "模型验证计划任务中,Scada对接接口未启用,自动跳过当前数据!");
               // return;
            }//
            var fileName = "D:\\ScadaDebug.json";
            var json = File.ReadAllText(fileName);
            var hydraulic_model_scada_list = Yw.JsonHelper.Json2Object<List<IStation.Model.HydraulicModelScada>>(json);
            if (!hydraulic_model_scada_list.Any())
            {
                //Log.Info(verification_id, "模型验证计划任务中,接收Scada数据为空,自动跳过当前数据!");
              //  return;
            }
            else
            {
                // var json = Yw.JsonHelper.Object2Json(hydraulic_model_scada_list);
                //Log.Debug(verification_id, json);
            }
            var flow_id_mapping_dict = hydraulic_model_validation_config.FlowIdMappingDict;
            var pressure_id_mapping_dict = hydraulic_model_validation_config.PressureIdMappingDict;
            var pattern_id_mapping_dict = hydraulic_model_validation_config.PatternIdMappingDict;
            var pressure_id_kPa_list = hydraulic_model_validation_config.PressureIdkPaList;
            var pattern_list = new List<IStation.Hydraulic.Pattern>();
            var time_value = new IStation.Hydraulic.TimeValue
            {
                Time = current_time,
                Value = new Dictionary<string, double>()
            };
            foreach (var hydraulic_model_scada in hydraulic_model_scada_list)
            {
                var tag = hydraulic_model_scada.Tag;
                var value = hydraulic_model_scada.Value;
                foreach (var item in flow_id_mapping_dict)
                {
                    if (item.Value != tag)
                        continue;
                    time_value.Value.Add(tag, value ?? 0);
                }
                foreach (var item in pressure_id_mapping_dict)
                {
                    if (item.Value != tag)
                        continue;
                    var pressure_value = value ?? 0;
                    if (pressure_id_kPa_list.Contains(tag))
                    {
                        pressure_value /= 1000;
                    }
                    pressure_value = IStation.Curve.PumpCalculateHelper.Mpa2M(pressure_value);
                    time_value.Value.Add(tag, pressure_value);
                }
                foreach (var item in pattern_id_mapping_dict)
                {
                    if (item.Value != tag)
                        continue;
                    var pattern_id = item.Key;
                    var factor = value;
                    if (_pump_nr_dict.ContainsKey(pattern_id))
                    {
                        factor /= _pump_nr_dict[pattern_id];
                        factor = factor < 0 ? 0 : factor;
                    }
                    var pattern = new IStation.Hydraulic.Pattern
                    {
                        Id = pattern_id,
                        FactorList = new List<float>()
                    };
                    if (factor.HasValue)
                        pattern.FactorList.Add((float)factor.Value);
                    pattern_list.Add(pattern);
                }
            }
            var pattern_dict = new Dictionary<string, double>();
            pattern_list = pattern_list.OrderBy(x => x.Id).ToList();
            foreach (var item in pattern_list)
            {
                pattern_dict[item.Id] = item.FactorList.FirstOrDefault();
            }
            var pattern_list_json = Yw.JsonHelper.Object2Json(pattern_dict);
            // 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())
            {
                // Log.Info(verification_id, "模型验证计划任务中,模型验证数据为空,自动跳过当前数据!");
              //  return;
            }
        }
    }
}
IStation.Test.One/IStation.Test.One.csproj
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
    <PlatformTarget>x86</PlatformTarget>
  </PropertyGroup>
  <ItemGroup>
    <ProjectReference Include="..\IStation.Dto\IStation.Dto.csproj" />
    <ProjectReference Include="..\IStation.Service\IStation.Service.csproj" />
  </ItemGroup>
</Project>
IStation.Test.One/Program.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2 @@

IStation.HydraulicModelValidationHelperJob.Execute();
Test/IStation.Test/HydraulicModelValidationHelperJob.cs
@@ -1,23 +1,23 @@
namespace IStation.Test
namespace IStation
{
    /// <summary>
    /// æ¨¡åž‹éªŒè¯è¾…助类
    /// </summary> 
    public class HydraulicModelValidationHelperJob
    public class HydraulicModelValidationHelperJob
    {
        private static readonly string _hydraulic_model_file = Path.Combine(
               Settings.ParasHelper.LocalFile.DataFolderDirectory,
               Settings.ParasHelper.LocalFile.HydraulicModelFile);
        private static readonly Dictionary<string, double> _pump_nr_dict = new() {
            { "Pump11",524},
            { "Pump12",524},
            { "Pump13",524},
            { "Pump14",524},
            //{ "Pump15",545},
            //{ "Pump16",524},
            { "Pump17",524},
            { "Pump18",524},
            { "Pump11",590},
            { "Pump12",590},
            { "Pump13",590},
            { "Pump14",590},
            //{ "Pump15",590},
            //{ "Pump16",590},
            { "Pump17",590},
            { "Pump18",590},
            { "Pump21",740},
            { "Pump22",495},
@@ -28,68 +28,55 @@
            { "Pump27",740}
        };
        private static readonly List<string> _MPa = new();
        private static readonly List<string> _kPa = new();
        /// <summary>
        /// 
        /// </summary>
        public static void Execute()
        public stat void Execute()
        {
            var verification_id = Yw.YitIdHelper.NextId();
            var verification_id = 1;
            var current_time = DateTime.Now;
            if (!File.Exists(_hydraulic_model_file))
            {
                //Log.Info(verification_id, $"模型验证计划任务中,水力模型文件不存在,自动跳过当前数据!");
                return;
                // Log.Info(verification_id, $"模型验证计划任务中,水力模型文件不存在,自动跳过当前数据!");
               // return;
            }
            var hydraulic_model_validation_config = new IStation.Service.HydraulicModelValidationConfig().Get();
            if (hydraulic_model_validation_config == null)
            {
                //Log.Info(verification_id, "模型验证计划任务中,水力模型验证文件不存在,自动跳过当前数据!");
                return;
                // Log.Info(verification_id, "模型验证计划任务中,水力模型验证文件不存在,自动跳过当前数据!");
                //return;
            }
            var hydraulic_model_scada_list = new List<Model.HydraulicModelScada>();
            var scada_debug_json_file = Path.Combine(Settings.ParasHelper.LocalFile.DataFolderDirectory, "scada_debug.txt");
            var scada_debug_json = File.ReadAllText(scada_debug_json_file);
            var zy_scada_output = Yw.JsonHelper.Json2Object<IStation.Dto.ScadaScheduleInput>(scada_debug_json);
            if (zy_scada_output.data != null && zy_scada_output.data.Any())
            if (!Settings.ParasHelper.ZyDocking.Enable)
            {
                var data_dict = zy_scada_output.data;
                foreach (var scada_dict in data_dict)
                {
                    var vals = scada_dict.Value.ElementAt(0).Value;
                    var time = scada_dict.Value.ElementAt(1).Value;
                    var key = scada_dict.Value.ElementAt(2).Value;
                    var hydraulic_model_scada = new Model.HydraulicModelScada();
                    hydraulic_model_scada.VerificationID = verification_id;
                    hydraulic_model_scada.Tag = key;
                    if (DateTime.TryParse(time, out DateTime t))
                        hydraulic_model_scada.Time = t;
                    if (double.TryParse(vals, out double v))
                        hydraulic_model_scada.Value = v;
                    hydraulic_model_scada_list.Add(hydraulic_model_scada);
                }
            }
                //Log.Info(verification_id, "模型验证计划任务中,Scada对接接口未启用,自动跳过当前数据!");
               // return;
            }//
            var fileName = "D:\\ScadaDebug.json";
            var json = File.ReadAllText(fileName);
            var hydraulic_model_scada_list = Yw.JsonHelper.Json2Object<List<IStation.Model.HydraulicModelScada>>(json);
            if (!hydraulic_model_scada_list.Any())
            {
                //Log.Info(verification_id, "模型验证计划任务中,接收Scada数据为空,自动跳过当前数据!");
                return;
              //  return;
            }
            else
            {
                var json = Yw.JsonHelper.Object2Json(hydraulic_model_scada_list);
                // Log.Debug(verification_id, json);
                // var json = Yw.JsonHelper.Object2Json(hydraulic_model_scada_list);
                //Log.Debug(verification_id, json);
            }
            var flow_id_mapping_dict = hydraulic_model_validation_config.FlowIdMappingDict;
            var pressure_id_mapping_dict = hydraulic_model_validation_config.PressureIdMappingDict;
            var pattern_id_mapping_dict = hydraulic_model_validation_config.PatternIdMappingDict;
            var pressure_id_kPa_list = hydraulic_model_validation_config.PressureIdkPaList;
            var pattern_list = new List<IStation.Hydraulic.Pattern>();
@@ -145,12 +132,12 @@
                }
            }
            // 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())
            {
                return;
                // Log.Info(verification_id, "模型验证计划任务中,模型验证数据为空,自动跳过当前数据!");
              //  return;
            }
            var hydraulic_model_validation = new Model.HydraulicModelValidation();
@@ -161,19 +148,26 @@
            var bol = new IStation.Service.HydraulicModelValidation().Insert(hydraulic_model_validation) > 0;
            if (!bol)
            {
                //Log.Info(verification_id, "模型验证计划任务中,水力模型验证,保存失败!");
            }
            bol = new IStation.Service.HydraulicModelScada().Inserts(hydraulic_model_scada_list);
            if (!bol)
            {
                // Log.Info(verification_id, "模型验证计划任务中,水力模型Scada,保存失败!");
            }
            bol = new IStation.Service.HydraulicModelRecord().Inserts(hydraulic_model_record_list);
            if (!bol)
            {
                // Log.Info(verification_id, "模型验证计划任务中,水力模型记录,保存失败!");
            }
            // Log.Info(verification_id, $"模型验证计划任务中,水力模型验证,[{current_time:G}]验证成功!");
        }
    }
}
Test/IStation.Test/IStation.Test.csproj
@@ -9,8 +9,19 @@
  </PropertyGroup>
  <ItemGroup>
    <Compile Remove="bak\EpanetMethods.cs" />
    <Compile Remove="bak\HydraulicModelValidationHelperJob.cs" />
    <Compile Remove="bak\ModelVerification.cs" />
    <Compile Remove="bak\Program - å¤åˆ¶%282%29.cs" />
    <Compile Remove="bak\Program - å¤åˆ¶%283%29.cs" />
    <Compile Remove="bak\Program - å¤åˆ¶.cs" />
    <Compile Remove="bak\Program _mode.cs" />
    <Compile Remove="bak\Program_bak.cs" />
    <Compile Remove="bak\ScadaModelValidHelper - å¤åˆ¶.cs" />
    <Compile Remove="bak\ScheduleModelValidHelper - å¤åˆ¶%282%29.cs" />
    <Compile Remove="bak\ScheduleModelValidHelper - å¤åˆ¶%283%29.cs" />
    <Compile Remove="bak\ScheduleModelValidHelper - å¤åˆ¶.cs" />
    <Compile Remove="EpanetMethods.cs" />
    <Compile Remove="HydraulicModelValidationHelperJob.cs" />
    <Compile Remove="ModelVerification.cs" />
    <Compile Remove="Program - å¤åˆ¶%282%29.cs" />
    <Compile Remove="Program - å¤åˆ¶%283%29.cs" />
@@ -28,4 +39,8 @@
    <ProjectReference Include="..\..\IStation.Service\IStation.Service.csproj" />
  </ItemGroup>
  <ItemGroup>
    <Folder Include="bak\" />
  </ItemGroup>
</Project>
Test/IStation.Test/Program.cs
@@ -1,4 +1,5 @@

using IStation;
using IStation.Epanet;
using IStation.Test;
@@ -9,10 +10,11 @@
//Console.WriteLine("结束");
//Console.ReadKey();
var file_path = $"{AppDomain.CurrentDomain.BaseDirectory}Data\\HydraulicModel.inp";
//var file_path = $"{AppDomain.CurrentDomain.BaseDirectory}Data\\HydraulicModel.inp";
NetworkHelper.Open(file_path,out IStation.Epanet.Network.Network network);
var a = network;
//NetworkHelper.Open(file_path,out IStation.Epanet.Network.Network network);
//var a = network;
var json = Yw.JsonHelper.Object2Json(a);
var b = json;
//var json = Yw.JsonHelper.Object2Json(a);
//var b = json;
HydraulicModelValidationHelperJob.Execute();
Test/IStation.Test/bak/EpanetMethods.cs
Test/IStation.Test/bak/HydraulicModelValidationHelperJob.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,179 @@
namespace IStation.Test
{
    /// <summary>
    /// æ¨¡åž‹éªŒè¯è¾…助类
    /// </summary>
    public class HydraulicModelValidationHelperJob
    {
        private static readonly string _hydraulic_model_file = Path.Combine(
               Settings.ParasHelper.LocalFile.DataFolderDirectory,
               Settings.ParasHelper.LocalFile.HydraulicModelFile);
        private static readonly Dictionary<string, double> _pump_nr_dict = new() {
            { "Pump11",524},
            { "Pump12",524},
            { "Pump13",524},
            { "Pump14",524},
            //{ "Pump15",545},
            //{ "Pump16",524},
            { "Pump17",524},
            { "Pump18",524},
            { "Pump21",740},
            { "Pump22",495},
            { "Pump23",495},
            { "Pump24",495},
            { "Pump25",495},
            { "Pump26",495},
            { "Pump27",740}
        };
        /// <summary>
        ///
        /// </summary>
        public static void Execute()
        {
            var verification_id = Yw.YitIdHelper.NextId();
            var current_time = DateTime.Now;
            if (!File.Exists(_hydraulic_model_file))
            {
                //Log.Info(verification_id, $"模型验证计划任务中,水力模型文件不存在,自动跳过当前数据!");
                return;
            }
            var hydraulic_model_validation_config = new IStation.Service.HydraulicModelValidationConfig().Get();
            if (hydraulic_model_validation_config == null)
            {
                //Log.Info(verification_id, "模型验证计划任务中,水力模型验证文件不存在,自动跳过当前数据!");
                return;
            }
            var hydraulic_model_scada_list = new List<Model.HydraulicModelScada>();
            var scada_debug_json_file = Path.Combine(Settings.ParasHelper.LocalFile.DataFolderDirectory, "scada_debug.txt");
            var scada_debug_json = File.ReadAllText(scada_debug_json_file);
            var zy_scada_output = Yw.JsonHelper.Json2Object<IStation.Dto.ScadaScheduleInput>(scada_debug_json);
            if (zy_scada_output.data != null && zy_scada_output.data.Any())
            {
                var data_dict = zy_scada_output.data;
                foreach (var scada_dict in data_dict)
                {
                    var vals = scada_dict.Value.ElementAt(0).Value;
                    var time = scada_dict.Value.ElementAt(1).Value;
                    var key = scada_dict.Value.ElementAt(2).Value;
                    var hydraulic_model_scada = new Model.HydraulicModelScada();
                    hydraulic_model_scada.VerificationID = verification_id;
                    hydraulic_model_scada.Tag = key;
                    if (DateTime.TryParse(time, out DateTime t))
                        hydraulic_model_scada.Time = t;
                    if (double.TryParse(vals, out double v))
                        hydraulic_model_scada.Value = v;
                    hydraulic_model_scada_list.Add(hydraulic_model_scada);
                }
            }
            if (!hydraulic_model_scada_list.Any())
            {
                //Log.Info(verification_id, "模型验证计划任务中,接收Scada数据为空,自动跳过当前数据!");
                return;
            }
            else
            {
                var json = Yw.JsonHelper.Object2Json(hydraulic_model_scada_list);
                // Log.Debug(verification_id, json);
            }
            var flow_id_mapping_dict = hydraulic_model_validation_config.FlowIdMappingDict;
            var pressure_id_mapping_dict = hydraulic_model_validation_config.PressureIdMappingDict;
            var pattern_id_mapping_dict = hydraulic_model_validation_config.PatternIdMappingDict;
            var pressure_id_kPa_list = hydraulic_model_validation_config.PressureIdkPaList;
            var pattern_list = new List<IStation.Hydraulic.Pattern>();
            var time_value = new IStation.Hydraulic.TimeValue
            {
                Time = current_time,
                Value = new Dictionary<string, double>()
            };
            foreach (var hydraulic_model_scada in hydraulic_model_scada_list)
            {
                var tag = hydraulic_model_scada.Tag;
                var value = hydraulic_model_scada.Value;
                foreach (var item in flow_id_mapping_dict)
                {
                    if (item.Value != tag)
                        continue;
                    time_value.Value.Add(tag, value ?? 0);
                }
                foreach (var item in pressure_id_mapping_dict)
                {
                    if (item.Value != tag)
                        continue;
                    var pressure_value = value ?? 0;
                    if (pressure_id_kPa_list.Contains(tag))
                    {
                        pressure_value /= 1000;
                    }
                    pressure_value = IStation.Curve.PumpCalculateHelper.Mpa2M(pressure_value);
                    time_value.Value.Add(tag, pressure_value);
                }
                foreach (var item in pattern_id_mapping_dict)
                {
                    if (item.Value != tag)
                        continue;
                    var pattern_id = item.Key;
                    var factor = value;
                    if (_pump_nr_dict.ContainsKey(pattern_id))
                    {
                        factor /= _pump_nr_dict[pattern_id];
                        factor = factor < 0 ? 0 : factor;
                    }
                    var pattern = new IStation.Hydraulic.Pattern
                    {
                        Id = pattern_id,
                        FactorList = new List<float>()
                    };
                    if (factor.HasValue)
                        pattern.FactorList.Add((float)factor.Value);
                    pattern_list.Add(pattern);
                }
            }
            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())
            {
                return;
            }
            var hydraulic_model_validation = new Model.HydraulicModelValidation();
            hydraulic_model_validation.ID = verification_id;
            hydraulic_model_validation.Time = current_time;
            //hydraulic_model_validation.Config = Yw.JsonHelper.Object2Json(hydraulic_model_validation_config);
            var bol = new IStation.Service.HydraulicModelValidation().Insert(hydraulic_model_validation) > 0;
            if (!bol)
            {
            }
            bol = new IStation.Service.HydraulicModelScada().Inserts(hydraulic_model_scada_list);
            if (!bol)
            {
            }
            bol = new IStation.Service.HydraulicModelRecord().Inserts(hydraulic_model_record_list);
            if (!bol)
            {
            }
        }
    }
}
Test/IStation.Test/bak/ModelVerification.cs
Test/IStation.Test/bak/Program - ¸´ÖÆ(2).cs
Test/IStation.Test/bak/Program - ¸´ÖÆ(3).cs
Test/IStation.Test/bak/Program - ¸´ÖÆ.cs
Test/IStation.Test/bak/Program _mode.cs
Test/IStation.Test/bak/Program_bak.cs
Test/IStation.Test/bak/ScadaModelValidHelper - ¸´ÖÆ.cs
Test/IStation.Test/bak/ScheduleModelValidHelper - ¸´ÖÆ(2).cs
Test/IStation.Test/bak/ScheduleModelValidHelper - ¸´ÖÆ(3).cs
Test/IStation.Test/bak/ScheduleModelValidHelper - ¸´ÖÆ.cs
Test/IStation.Test/helper/TimeValue.cs
@@ -6,6 +6,8 @@
        {
        }
        public TimeValue(TimeValue rhs)
        {
            this.Time = rhs.Time;