From 4644bccbb362a270e7aba0226971992fa74d9322 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E7=9D=BF?= <774114798@qq.com> Date: Fri, 6 Dec 2024 16:32:13 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=9D=BF=E5=8D=A1=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.txt | 5 + YunDa.SOMS.sln | 28 +- .../BoardCardInfoAppService.cs | 62 +- .../IBoardCardInfoAppService.cs | 8 + .../IProtectionDeviceAppService.cs | 8 + .../ProtectionDeviceAppService.cs | 4 +- .../CommonDto/NameValueProperty.cs | 60 ++ .../OperationReport/BCodeAndNTP.cs | 10 + .../YunDa.ISAS.DataTransferObject.xml | 15 + .../YunDa.SOMS.ProDB/Models/TbADbinfo.cs | 25 + .../YunDa.SOMS.ProDB/Models/TbActionFlag.cs | 15 + .../YunDa.SOMS.ProDB/Models/TbContactDi.cs | 13 + .../YunDa.SOMS.ProDB/Models/TbContactDo.cs | 13 + .../YunDa.SOMS.ProDB/Models/TbCpufpga.cs | 131 ++++ .../YunDa.SOMS.ProDB/Models/TbDevCat.cs | 13 + .../YunDa.SOMS.ProDB/Models/TbDeviceType.cs | 41 + .../YunDa.SOMS.ProDB/Models/TbDzDkjl.cs | 53 ++ .../YunDa.SOMS.ProDB/Models/TbDzKzz.cs | 17 + .../YunDa.SOMS.ProDB/Models/TbDzSconf.cs | 57 ++ .../YunDa.SOMS.ProDB/Models/TbDzSy.cs | 57 ++ .../YunDa.SOMS.ProDB/Models/TbDzUser.cs | 59 ++ .../YunDa.SOMS.ProDB/Models/TbDzYxset.cs | 43 ++ .../YunDa.SOMS.ProDB/Models/TbDzenum.cs | 17 + .../YunDa.SOMS.ProDB/Models/TbDztype.cs | 13 + .../YunDa.SOMS.ProDB/Models/TbEventBh.cs | 19 + .../YunDa.SOMS.ProDB/Models/TbEventZj.cs | 15 + .../YunDa.SOMS.ProDB/Models/TbFpgatype.cs | 11 + .../YunDa.SOMS.ProDB/Models/TbGckg.cs | 11 + .../YunDa.SOMS.ProDB/Models/TbGcmodel.cs | 13 + .../YunDa.SOMS.ProDB/Models/TbGooseCd.cs | 21 + .../YunDa.SOMS.ProDB/Models/TbGooseKc.cs | 19 + .../YunDa.SOMS.ProDB/Models/TbGooseKr.cs | 21 + .../YunDa.SOMS.ProDB/Models/TbKc.cs | 17 + .../YunDa.SOMS.ProDB/Models/TbKctest.cs | 21 + .../YunDa.SOMS.ProDB/Models/TbKdadjust.cs | 25 + .../YunDa.SOMS.ProDB/Models/TbKr.cs | 21 + .../YunDa.SOMS.ProDB/Models/TbKrtx.cs | 15 + .../YunDa.SOMS.ProDB/Models/TbKxzttd.cs | 15 + .../YunDa.SOMS.ProDB/Models/TbLanguage.cs | 17 + .../YunDa.SOMS.ProDB/Models/TbLight.cs | 19 + .../YunDa.SOMS.ProDB/Models/TbTable.cs | 13 + .../YunDa.SOMS.ProDB/Models/TbUpdateLog.cs | 15 + .../YunDa.SOMS.ProDB/Models/TbUser.cs | 15 + .../YunDa.SOMS.ProDB/Models/TbWaveDefine.cs | 27 + .../YunDa.SOMS.ProDB/Models/TbXieboDlzl.cs | 23 + .../YunDa.SOMS.ProDB/Models/TbYabanTest.cs | 23 + .../YunDa.SOMS.ProDB/Models/TbYc.cs | 31 + .../YunDa.SOMS.ProDB/Models/TbYctype.cs | 37 + .../YunDa.SOMS.ProDB/Models/TbYcunit.cs | 15 + .../YunDa.SOMS.ProDB/Models/TbYk.cs | 19 + .../YunDa.SOMS.ProDB/Models/TbYx.cs | 25 + .../YunDa.SOMS.ProDB/Models/TbZtlj.cs | 29 + .../YunDa.SOMS.ProDB/Models/TbZyb.cs | 13 + .../YunDa.SOMS.ProDB/Models/TbZyl.cs | 15 + .../YunDa.SOMS.ProDB/Program.cs | 10 + .../YunDa.SOMS.ProDB/ProtdbContext.cs | 709 ++++++++++++++++++ .../YunDa.SOMS.ProDB/YunDa.SOMS.ProDB.csproj | 19 + .../YunDa.SOMS.ProDB/protdb.sql3 | Bin 0 -> 282624 bytes .../YunDa.SOMS.Redis.Entities.csproj | 1 + .../YunDa.ISAS.Redis/ISASRedisModule.cs | 6 +- .../App.xaml.cs | 30 +- .../DataCollection/DataSendTask.cs | 10 +- .../DataAnalysis/MonitoringDataService.cs | 6 +- .../DataCenter/RedisRepository.cs | 3 + .../FTPHandle/FtpFile.cs | 8 +- .../ProtectionDeviceBCodeHandle.cs | 35 +- .../ProtectionDeviceDataCenter.cs | 18 +- .../ProtectionDeviceRunInfoHandle.cs | 160 ++-- .../ProtectionDeviceSelfCheckHandle.cs | 75 +- .../SQLiteData/IODataHandle.cs | 3 - .../SQLiteData/ProtdbHandle.cs | 35 + .../TcpSocket/Server/DotNettyServerHandler.cs | 217 ++---- .../TcpSocket/Server/DotNettyTcpServer.cs | 70 +- .../Yunda.SOMS.DataMonitoringServer.csproj | 1 + .../ToolLibrary/PortProcessManager.cs | 46 +- 75 files changed, 2371 insertions(+), 438 deletions(-) create mode 100644 README.txt create mode 100644 src/YunDa.Application/YunDa.ISAS.DataTransferObject/CommonDto/NameValueProperty.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbADbinfo.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbActionFlag.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbContactDi.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbContactDo.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbCpufpga.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDevCat.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDeviceType.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzDkjl.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzKzz.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzSconf.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzSy.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzUser.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzYxset.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzenum.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDztype.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbEventBh.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbEventZj.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbFpgatype.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGckg.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGcmodel.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGooseCd.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGooseKc.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGooseKr.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKc.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKctest.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKdadjust.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKr.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKrtx.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKxzttd.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbLanguage.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbLight.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbTable.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbUpdateLog.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbUser.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbWaveDefine.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbXieboDlzl.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYabanTest.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYc.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYctype.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYcunit.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYk.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYx.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbZtlj.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbZyb.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbZyl.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Program.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/ProtdbContext.cs create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB.csproj create mode 100644 src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/protdb.sql3 create mode 100644 src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/SQLiteData/ProtdbHandle.cs diff --git a/README.txt b/README.txt new file mode 100644 index 0000000..74f4ef3 --- /dev/null +++ b/README.txt @@ -0,0 +1,5 @@ +dotnet add package Microsoft.EntityFrameworkCore +dotnet add package Microsoft.EntityFrameworkCore.Design +dotnet add package Microsoft.EntityFrameworkCore.Sqlite + +dotnet ef dbcontext scaffold "Data Source=protdb.sql3" Microsoft.EntityFrameworkCore.Sqlite -o Models diff --git a/YunDa.SOMS.sln b/YunDa.SOMS.sln index 598cd50..2f675d9 100644 --- a/YunDa.SOMS.sln +++ b/YunDa.SOMS.sln @@ -103,6 +103,9 @@ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleTestDotnettyClient", "test\ConsoleTestDotnettyClient\ConsoleTestDotnettyClient.csproj", "{6F188128-F359-492A-99CF-BF219B886FFA}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ProtectionDeviceSqlite", "ProtectionDeviceSqlite", "{9D1CDEF4-094D-4906-8D8B-7A9109CD84BE}" + ProjectSection(SolutionItems) = preProject + README.txt = README.txt + EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "YunDa.SOMS.Commdb", "src\YunDa.Domain\ProtectionDeviceSqlite\YunDa.SOMS.Commdb\YunDa.SOMS.Commdb.csproj", "{76D765C8-89D0-4BD8-AC00-117605809EFE}" EndProject @@ -114,7 +117,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yunda.SOMS.OperationsMainSi EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestCPU", "test\TestCPU\TestCPU.csproj", "{7D90211D-07EA-436E-8147-9D3296CEF400}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleTest", "test\ConsoleTest\ConsoleTest.csproj", "{3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleTest", "test\ConsoleTest\ConsoleTest.csproj", "{3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "YunDa.SOMS.ProDB", "src\YunDa.Domain\ProtectionDeviceSqlite\YunDa.SOMS.ProDB\YunDa.SOMS.ProDB\YunDa.SOMS.ProDB.csproj", "{1C7AC379-5A1C-4266-B469-83F529979EFE}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -849,6 +854,24 @@ Global {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Template|x64.Build.0 = Debug|Any CPU {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Template|x86.ActiveCfg = Debug|Any CPU {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Template|x86.Build.0 = Debug|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Debug|x64.ActiveCfg = Debug|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Debug|x64.Build.0 = Debug|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Debug|x86.ActiveCfg = Debug|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Debug|x86.Build.0 = Debug|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Release|Any CPU.Build.0 = Release|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Release|x64.ActiveCfg = Release|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Release|x64.Build.0 = Release|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Release|x86.ActiveCfg = Release|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Release|x86.Build.0 = Release|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Template|Any CPU.ActiveCfg = Debug|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Template|Any CPU.Build.0 = Debug|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Template|x64.ActiveCfg = Debug|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Template|x64.Build.0 = Debug|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Template|x86.ActiveCfg = Debug|Any CPU + {1C7AC379-5A1C-4266-B469-83F529979EFE}.Template|x86.Build.0 = Debug|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -901,9 +924,10 @@ Global {505F0B5A-4AEB-499C-8937-19FE950B0354} = {A49CD7CD-52BA-48F3-83D5-D6CA072F8849} {7D90211D-07EA-436E-8147-9D3296CEF400} = {F10AA149-2626-486E-85BB-9CD5365F3016} {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E} = {F10AA149-2626-486E-85BB-9CD5365F3016} + {1C7AC379-5A1C-4266-B469-83F529979EFE} = {9D1CDEF4-094D-4906-8D8B-7A9109CD84BE} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - VisualSVNWorkingCopyRoot = . SolutionGuid = {B516B1E8-1CEC-4BCC-BA92-93CB32845E37} + VisualSVNWorkingCopyRoot = . EndGlobalSection EndGlobal diff --git a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/BoardCardDevice/BoardCardInfoAppService.cs b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/BoardCardDevice/BoardCardInfoAppService.cs index 4e8aa48..8d3bc1d 100644 --- a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/BoardCardDevice/BoardCardInfoAppService.cs +++ b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/BoardCardDevice/BoardCardInfoAppService.cs @@ -21,6 +21,7 @@ using YunDa.ISAS.DataTransferObject; using YunDa.ISAS.Entities.GeneralInformation; using YunDa.ISAS.Redis.Repositories; using YunDa.ISMS.BASE.Entities.Models; +using YunDa.SOMS.DataTransferObject.CommonDto; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto.HistoryData; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto.SearchCondition; @@ -45,7 +46,7 @@ namespace YunDa.ISAS.Application.GeneralInformation private readonly IRepository _imProtectDeviceRepository; private readonly IUnitOfWorkManager _unitOfWorkManager; - IRedisRepository _deviceBoardStatesRedis; + IRedisRepository, string> _deviceBoardStatesRedis; string deviceIORedisKey = "deviceIO"; IRedisRepository _deviceIOsRedis; @@ -69,7 +70,7 @@ namespace YunDa.ISAS.Application.GeneralInformation IRepository boardCardInfoRepository, IRepository boardCardHistoryRepository, IRepository manufacturerInfoRepository, - IRedisRepository deviceBoardStatesRedis, + IRedisRepository, string> deviceBoardStatesRedis, IRedisRepository deviceIOsRedis, IRepository protectionDeviceTypeRepository, ISessionAppService sessionAppService @@ -331,27 +332,7 @@ namespace YunDa.ISAS.Application.GeneralInformation RequestResult rst = new RequestResult(); return rst; } - List iopositions = new List - { - "运行", - "告警", - "跳闸", - "重合闸", - "重合闸就绪", - "备自投", - "备自投就绪", - "分位", - "合位", - "检修", - "重合闸动作", - - "IO插件1", - "IO插件2", - "IO插件3", - "IO插件4", - "电源插件(IO5)", - "液晶" - }; + string deviceBoardStatesRedisKey = "deviceBoardStates"; /// /// 获取板卡状态 @@ -380,39 +361,8 @@ namespace YunDa.ISAS.Application.GeneralInformation { var state = await _deviceBoardStatesRedis.HashSetGetAllAsync(deviceBoardStatesRedisKey, protectionDeviceInfo.DeviceAddress.ToString()); - if (state != null && state.Length == 8) - { - List datas = new(); - for (int i = 0; i < iopositions.Count; i++) - { - if (i == 0) - { - datas.Add(new DeviceRunState - { - Name =iopositions[0] , - State = state[0] - }); - } - else if(i<11) - { - datas.Add(new DeviceRunState - { - Name = iopositions[i], - State = -1 - }); - } - else - { - datas.Add(new DeviceRunState - { - Name = iopositions[i], - State = state[i-9] - }); - } - } - rst.ResultData = datas; - rst.Flag = true; - } + rst.ResultData = state.Select(t=>new DeviceRunState { Name = t.Name,State = t.Value}).ToList(); + rst.Flag = true; } } catch (Exception ex) diff --git a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/BoardCardDevice/IBoardCardInfoAppService.cs b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/BoardCardDevice/IBoardCardInfoAppService.cs index ce418c9..d7ee4b5 100644 --- a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/BoardCardDevice/IBoardCardInfoAppService.cs +++ b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/BoardCardDevice/IBoardCardInfoAppService.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Threading.Tasks; using YunDa.ISAS.Application.Core; using YunDa.ISAS.DataTransferObject; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto; @@ -16,5 +17,12 @@ namespace YunDa.ISAS.Application.GeneralInformation /// /// RequestResult> FindHistoryDataByEquipmentInfoId(Guid? equipmentInfoId); + /// + /// 查询板卡在线信息 + /// + /// + /// + /// + Task>> GetBoardStateInfo(Guid equipmentId, Guid deviceId); } } diff --git a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/IProtectionDeviceAppService.cs b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/IProtectionDeviceAppService.cs index fe0c918..a482b08 100644 --- a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/IProtectionDeviceAppService.cs +++ b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/IProtectionDeviceAppService.cs @@ -6,6 +6,7 @@ using YunDa.ISAS.DataTransferObject.CommonDto; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto.HistoryData; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto.SearchCondition; +using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport; namespace YunDa.ISAS.Application.GeneralInformation { @@ -30,5 +31,12 @@ namespace YunDa.ISAS.Application.GeneralInformation /// /// RequestResult> FindProtectionDeviceForSelect(Guid stationId); + /// + /// 获取装置事件类型 + /// + /// + /// + /// + RequestResult GetDeviceEventType(int deviceAddr, int eventCode); } } diff --git a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/ProtectionDeviceAppService.cs b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/ProtectionDeviceAppService.cs index 4eb7040..f6e9e98 100644 --- a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/ProtectionDeviceAppService.cs +++ b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/ProtectionDeviceAppService.cs @@ -891,7 +891,7 @@ namespace YunDa.ISAS.Application.GeneralInformation return rst; } /// - /// 获取装置时间类型 + /// 获取装置事件类型 /// /// /// @@ -926,7 +926,7 @@ namespace YunDa.ISAS.Application.GeneralInformation catch (Exception ex) { rst.Message = ex.Message; - Log4Helper.Error(this.GetType(), "线路管理服务", ex); + Log4Helper.Error(this.GetType(), "获取装置事件类型", ex); } return rst; } diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/CommonDto/NameValueProperty.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/CommonDto/NameValueProperty.cs new file mode 100644 index 0000000..b384090 --- /dev/null +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/CommonDto/NameValueProperty.cs @@ -0,0 +1,60 @@ +using Abp.Application.Services.Dto; +using MessagePack; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace YunDa.SOMS.DataTransferObject.CommonDto +{ + [MessagePackObject(keyAsPropertyName: true)] + public class NameValueProperty : NameValueProperty + { + public NameValueProperty() + { + + } + + public NameValueProperty(string name, string value) + { + Name = name; + Value = value; + } + } + + [MessagePackObject(keyAsPropertyName: true)] + public class NameValueProperty + { + public string Name { get; set; } + + public T Value { get; set; } + + public NameValueProperty() + { + + } + public NameValueProperty(string name, T value) + { + Name = name; + Value = value; + } + } + [MessagePackObject(keyAsPropertyName: true)] + public class NameIntValueProperty + { + public string Name { get; set; } + + public int Value { get; set; } + + public NameIntValueProperty() + { + + } + public NameIntValueProperty(string name, int value) + { + Name = name; + Value = value; + } + } +} diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/BCodeAndNTP.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/BCodeAndNTP.cs index 447507a..c50ccac 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/BCodeAndNTP.cs +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/BCodeAndNTP.cs @@ -8,7 +8,17 @@ namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationRepo { public class BCodeAndNTP { + /// + /// 设备Id + /// + public Guid EquipmentInfoId { get; set; } + /// + /// B码是否成功 + /// public bool BCode { get; set; } + /// + /// NTP是否成功 + /// public bool NTP { get; set; } } } diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/YunDa.ISAS.DataTransferObject.xml b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/YunDa.ISAS.DataTransferObject.xml index a297e6d..2808e64 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/YunDa.ISAS.DataTransferObject.xml +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/YunDa.ISAS.DataTransferObject.xml @@ -15625,6 +15625,21 @@ 设备名称。 + + + 设备Id + + + + + B码是否成功 + + + + + NTP是否成功 + + 装置监视数据 diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbADbinfo.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbADbinfo.cs new file mode 100644 index 0000000..0ad9b6c --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbADbinfo.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbADbinfo +{ + public int? Id { get; set; } + + public int? RecordIndex { get; set; } + + public string? Crcprogram { get; set; } + + public int? VerInfo { get; set; } + + public int? Status { get; set; } + + public string? UpdateWhat { get; set; } + + public string? UpdateWho { get; set; } + + public string? DatetimeUpdateWhen { get; set; } + + public int? DeviceTypeCode { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbActionFlag.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbActionFlag.cs new file mode 100644 index 0000000..6e93964 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbActionFlag.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbActionFlag +{ + public int? DeviceTypeCode { get; set; } + + public int? ActionFlag { get; set; } + + public string? ActionDesc { get; set; } + + public string? Lcden { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbContactDi.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbContactDi.cs new file mode 100644 index 0000000..cd21a7b --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbContactDi.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbContactDi +{ + public int? DeviceTypeCode { get; set; } + + public int? Bit { get; set; } + + public string? Title { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbContactDo.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbContactDo.cs new file mode 100644 index 0000000..5c354b5 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbContactDo.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbContactDo +{ + public int? DeviceTypeCode { get; set; } + + public int? Bit { get; set; } + + public string? Title { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbCpufpga.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbCpufpga.cs new file mode 100644 index 0000000..729742a --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbCpufpga.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbCpufpga +{ + public int? Id { get; set; } + + public int? DeviceTypeCode { get; set; } + + public int? Ver { get; set; } + + public int? SendDelay { get; set; } + + public int? OutTimerSource { get; set; } + + public int? Ft3dataBaudRate { get; set; } + + public int? Ft3delayTime { get; set; } + + public int? Ft3volRatio { get; set; } + + public int? MultiplierCh1 { get; set; } + + public int? ZeroDriftCh1 { get; set; } + + public int? MultiplierCh2 { get; set; } + + public int? ZeroDriftCh2 { get; set; } + + public int? MultiplierCh3 { get; set; } + + public int? ZeroDriftCh3 { get; set; } + + public int? MultiplierCh4 { get; set; } + + public int? ZeroDriftCh4 { get; set; } + + public int? MultiplierCh5 { get; set; } + + public int? ZeroDriftCh5 { get; set; } + + public int? MultiplierCh6 { get; set; } + + public int? ZeroDriftCh6 { get; set; } + + public int? MultiplierCh7 { get; set; } + + public int? ZeroDriftCh7 { get; set; } + + public int? MultiplierCh8 { get; set; } + + public int? ZeroDriftCh8 { get; set; } + + public int? MultiplierCh9 { get; set; } + + public int? ZeroDriftCh9 { get; set; } + + public int? MultiplierCh10 { get; set; } + + public int? ZeroDriftCh10 { get; set; } + + public int? MultiplierCh11 { get; set; } + + public int? ZeroDriftCh11 { get; set; } + + public int? MultiplierCh12 { get; set; } + + public int? ZeroDriftCh12 { get; set; } + + public int? MultiplierCh13 { get; set; } + + public int? ZeroDriftCh13 { get; set; } + + public int? MultiplierCh14 { get; set; } + + public int? ZeroDriftCh14 { get; set; } + + public int? MultiplierCh15 { get; set; } + + public int? ZeroDriftCh15 { get; set; } + + public int? MultiplierCh16 { get; set; } + + public int? ZeroDriftCh16 { get; set; } + + public int? MappingCh1 { get; set; } + + public int? MappingCh2 { get; set; } + + public int? MappingCh3 { get; set; } + + public int? MappingCh4 { get; set; } + + public int? MappingCh5 { get; set; } + + public int? MappingCh6 { get; set; } + + public int? MappingCh7 { get; set; } + + public int? MappingCh8 { get; set; } + + public int? MappingCh9 { get; set; } + + public int? MappingCh10 { get; set; } + + public int? MappingCh11 { get; set; } + + public int? MappingCh12 { get; set; } + + public string? MappingCh13 { get; set; } + + public int? MappingCh14 { get; set; } + + public int? MappingCh15 { get; set; } + + public int? MappingCh16 { get; set; } + + public int? MappingCh17 { get; set; } + + public int? MappingCh18 { get; set; } + + public int? MappingCh19 { get; set; } + + public int? MappingCh20 { get; set; } + + public int? MappingCh21 { get; set; } + + public int? MappingCh22 { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDevCat.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDevCat.cs new file mode 100644 index 0000000..868e262 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDevCat.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbDevCat +{ + public int? Id { get; set; } + + public int? DeviceCat { get; set; } + + public string? Desc { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDeviceType.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDeviceType.cs new file mode 100644 index 0000000..753a1df --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDeviceType.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbDeviceType +{ + public int? DeviceTypeCode { get; set; } + + public string? DeviceName { get; set; } + + public int? DeviceCategory { get; set; } + + public int? In2 { get; set; } + + public int? Un2 { get; set; } + + public string? BoolDkjltable { get; set; } + + public string? BoolQlxltable { get; set; } + + public string? ShortName { get; set; } + + public string? Pname { get; set; } + + public string? Io1type { get; set; } + + public string? Io2type { get; set; } + + public string? Io3type { get; set; } + + public string? Io4type { get; set; } + + public int? RefDeviceEvent { get; set; } + + public string? BoolHaveTouTui { get; set; } + + public int? TouTuiChl { get; set; } + + public string? Lcden { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzDkjl.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzDkjl.cs new file mode 100644 index 0000000..f57c511 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzDkjl.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbDzDkjl +{ + public int? Id { get; set; } + + public int? DeviceTypeCode { get; set; } + + public int? SqlIndex { get; set; } + + public string? SqlGroup { get; set; } + + public string? Dzname { get; set; } + + public string? ValMin { get; set; } + + public string? ValMax { get; set; } + + public string? Uint2 { get; set; } + + public string? Uint1 { get; set; } + + public int? DztypeCode { get; set; } + + public int? EnumId { get; set; } + + public string? DefaultVal { get; set; } + + public double? Scale2 { get; set; } + + public double? Scale1 { get; set; } + + public int? RelCt2 { get; set; } + + public int? RelCt1 { get; set; } + + public int? RelPt2 { get; set; } + + public int? RelPt1 { get; set; } + + public int? Ptctindex { get; set; } + + public string? BoolVisable { get; set; } + + public string? BoolModify { get; set; } + + public string? Lcdname { get; set; } + + public string? Lcden { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzKzz.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzKzz.cs new file mode 100644 index 0000000..169b346 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzKzz.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbDzKzz +{ + public int? DeviceTypeCode { get; set; } + + public int? SqlGroup { get; set; } + + public int? SqlIndex { get; set; } + + public string? YabanName { get; set; } + + public string? Lcden { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzSconf.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzSconf.cs new file mode 100644 index 0000000..02949e9 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzSconf.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbDzSconf +{ + public double? Id { get; set; } + + public double? DeviceTypeCode { get; set; } + + public double? SqlIndex { get; set; } + + public string? SqlGroup { get; set; } + + public string? Dzname { get; set; } + + public string? ValMin { get; set; } + + public string? ValMax { get; set; } + + public string? Uint2 { get; set; } + + public string? Uint1 { get; set; } + + public double? DztypeCode { get; set; } + + public double? EnumId { get; set; } + + public decimal? DefaultVal { get; set; } + + public double? Scale2 { get; set; } + + public double? Scale1 { get; set; } + + public string? RelCt2 { get; set; } + + public string? RelCt1 { get; set; } + + public string? RelPt2 { get; set; } + + public string? RelPt1 { get; set; } + + public string? Ptctindex { get; set; } + + public string? BoolVisable { get; set; } + + public string? BoolModify { get; set; } + + public string? Lcdname { get; set; } + + public string? LcdnameBt { get; set; } + + public string? Lcden { get; set; } + + public string? Lcdenbt { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzSy.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzSy.cs new file mode 100644 index 0000000..67ef793 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzSy.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbDzSy +{ + public int? Id { get; set; } + + public int? DeviceTypeCode { get; set; } + + public int? SqlIndex { get; set; } + + public string? SqlGroup { get; set; } + + public string? Dzname { get; set; } + + public string? ValMin { get; set; } + + public string? ValMax { get; set; } + + public string? Uint2 { get; set; } + + public string? Uint1 { get; set; } + + public int? DztypeCode { get; set; } + + public int? EnumId { get; set; } + + public string? DefaultVal { get; set; } + + public double? Scale2 { get; set; } + + public double? Scale1 { get; set; } + + public int? RelCt2 { get; set; } + + public int? RelCt1 { get; set; } + + public int? RelPt2 { get; set; } + + public int? RelPt1 { get; set; } + + public int? Ptctindex { get; set; } + + public string? BoolVisable { get; set; } + + public string? BoolModify { get; set; } + + public string? Lcdname { get; set; } + + public string? LcdnameBt { get; set; } + + public string? Lcden { get; set; } + + public string? Lcdenbt { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzUser.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzUser.cs new file mode 100644 index 0000000..90268ca --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzUser.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbDzUser +{ + public int? Id { get; set; } + + public int? DeviceTypeCode { get; set; } + + public int? SqlIndex { get; set; } + + public string? SqlGroup { get; set; } + + public string? Dzname { get; set; } + + public string? ValMin { get; set; } + + public string? ValMax { get; set; } + + public string? Uint2 { get; set; } + + public string? Uint1 { get; set; } + + public int? DztypeCode { get; set; } + + public int? EnumId { get; set; } + + public string? DefaultVal { get; set; } + + public double? Scale2 { get; set; } + + public double? Scale1 { get; set; } + + public int? RelCt2 { get; set; } + + public int? RelCt1 { get; set; } + + public int? RelPt2 { get; set; } + + public int? RelPt1 { get; set; } + + public int? Ptctindex { get; set; } + + public string? BoolVisable { get; set; } + + public string? BoolModify { get; set; } + + public string? Lcdname { get; set; } + + public string? LcdnameBt { get; set; } + + public string? Lcden { get; set; } + + public string? Lcdenbt { get; set; } + + public int? Coeffi { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzYxset.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzYxset.cs new file mode 100644 index 0000000..0842948 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzYxset.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbDzYxset +{ + public int? Id { get; set; } + + public int? DeviceTypeCode { get; set; } + + public int? SqlIndex { get; set; } + + public string? SqlGroup { get; set; } + + public string? Dzname { get; set; } + + public double? ValMin { get; set; } + + public double? ValMax { get; set; } + + public string? Uint1 { get; set; } + + public string? Uint2 { get; set; } + + public int? DztypeCode { get; set; } + + public int? EnumId { get; set; } + + public string? DefaultVal { get; set; } + + public int? Scale1 { get; set; } + + public int? Scale2 { get; set; } + + public int? RelativePt { get; set; } + + public int? RelativeCt { get; set; } + + public string? BoolVisable { get; set; } + + public string? BoolModify { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzenum.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzenum.cs new file mode 100644 index 0000000..f06a280 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDzenum.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbDzenum +{ + public int? DzenumId { get; set; } + + public string? DzenmuIddesc { get; set; } + + public int? DzenumValue { get; set; } + + public string? DzenumName { get; set; } + + public string? Lcden { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDztype.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDztype.cs new file mode 100644 index 0000000..c9d7ceb --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbDztype.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbDztype +{ + public int? DztypeCode { get; set; } + + public string? DztypeName { get; set; } + + public int? Dzlength { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbEventBh.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbEventBh.cs new file mode 100644 index 0000000..fd17f95 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbEventBh.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbEventBh +{ + public double? DeviceTypeCode { get; set; } + + public double? EventCode { get; set; } + + public string? Event { get; set; } + + public string? Lcdevent { get; set; } + + public int? DeviceCat { get; set; } + + public string? Lcden { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbEventZj.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbEventZj.cs new file mode 100644 index 0000000..b6cd719 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbEventZj.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbEventZj +{ + public int? DeciceTypeCode { get; set; } + + public int? SelfCheckCode { get; set; } + + public string? Description { get; set; } + + public string? Lcden { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbFpgatype.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbFpgatype.cs new file mode 100644 index 0000000..09d9e11 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbFpgatype.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbFpgatype +{ + public int? TypeId { get; set; } + + public string? TypeDesc { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGckg.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGckg.cs new file mode 100644 index 0000000..da45b65 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGckg.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbGckg +{ + public int? SqlIndex { get; set; } + + public string? Name { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGcmodel.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGcmodel.cs new file mode 100644 index 0000000..2e645fb --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGcmodel.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbGcmodel +{ + public int? SqlIndex { get; set; } + + public string? ModelName { get; set; } + + public string? ModelValue { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGooseCd.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGooseCd.cs new file mode 100644 index 0000000..600f055 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGooseCd.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbGooseCd +{ + public int? DeviceTypeCode { get; set; } + + public int? SqlIndex { get; set; } + + public int? Channel { get; set; } + + public string? ChannelName { get; set; } + + public int? YxIndex { get; set; } + + public int? Board { get; set; } + + public int? Type { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGooseKc.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGooseKc.cs new file mode 100644 index 0000000..c0364da --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGooseKc.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbGooseKc +{ + public int? DeviceTypeCode { get; set; } + + public string? Kcduanzi { get; set; } + + public int? SqlIndex { get; set; } + + public string? Kcname { get; set; } + + public string? InVarName { get; set; } + + public string? Board { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGooseKr.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGooseKr.cs new file mode 100644 index 0000000..fd39d05 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbGooseKr.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbGooseKr +{ + public int? DeviceTypeCode { get; set; } + + public string? Krduanzi { get; set; } + + public int? SqlIndex { get; set; } + + public string? Krtype { get; set; } + + public string? Krname { get; set; } + + public string? InVarName { get; set; } + + public string? Bit { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKc.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKc.cs new file mode 100644 index 0000000..fd52da4 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKc.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbKc +{ + public int? DeviceTypeCode { get; set; } + + public string? Kcduanzi { get; set; } + + public int? SqlIndex { get; set; } + + public string? Kcname { get; set; } + + public string? Board { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKctest.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKctest.cs new file mode 100644 index 0000000..cf936e2 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKctest.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbKctest +{ + public int? DeviceTypeCode { get; set; } + + public int? SqlIndex { get; set; } + + public int? Channel { get; set; } + + public string? ChannelName { get; set; } + + public int? YxIndex { get; set; } + + public int? Board { get; set; } + + public int? Type { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKdadjust.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKdadjust.cs new file mode 100644 index 0000000..3d1c294 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKdadjust.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbKdadjust +{ + public int? DeviceTypeCode { get; set; } + + public int? SqlIndex { get; set; } + + public int? Channel { get; set; } + + public string? ChannelName { get; set; } + + public double? Value5A { get; set; } + + public int? Ycindex { get; set; } + + public int? Value1A { get; set; } + + public int? Value5V { get; set; } + + public int? Value10V { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKr.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKr.cs new file mode 100644 index 0000000..9ca9313 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKr.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbKr +{ + public int? DeviceTypeCode { get; set; } + + public string? Krduanzi { get; set; } + + public int? CommIndex { get; set; } + + public int? BoardIndex { get; set; } + + public string? Krname { get; set; } + + public int? DisplayIndex { get; set; } + + public string? Lcden { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKrtx.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKrtx.cs new file mode 100644 index 0000000..b0a2db1 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKrtx.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbKrtx +{ + public int? Id { get; set; } + + public int? DeviceTypeCode { get; set; } + + public int? SqlIndex { get; set; } + + public string? SetStr { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKxzttd.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKxzttd.cs new file mode 100644 index 0000000..2c1d0fe --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbKxzttd.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbKxzttd +{ + public int? Id { get; set; } + + public int? TongDaoHao { get; set; } + + public string? TongDaoName { get; set; } + + public string? TimeAllow { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbLanguage.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbLanguage.cs new file mode 100644 index 0000000..6c43f3c --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbLanguage.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbLanguage +{ + public int? 编号 { get; set; } + + public int? SqlIndex { get; set; } + + public string? LanguageName1 { get; set; } + + public string? LanguageName2 { get; set; } + + public string? Code { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbLight.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbLight.cs new file mode 100644 index 0000000..7366340 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbLight.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbLight +{ + public int? 编号 { get; set; } + + public int? DeviceTypeCode { get; set; } + + public int? SqlIndex { get; set; } + + public int? Type { get; set; } + + public string? Name { get; set; } + + public int? Color { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbTable.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbTable.cs new file mode 100644 index 0000000..77b63c3 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbTable.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbTable +{ + public int? 级别 { get; set; } + + public string? 描述 { get; set; } + + public string? 对应表 { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbUpdateLog.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbUpdateLog.cs new file mode 100644 index 0000000..50e4202 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbUpdateLog.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbUpdateLog +{ + public int? Id { get; set; } + + public string? Editor { get; set; } + + public string? DatetimeUpdDate { get; set; } + + public string? UpdDesc { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbUser.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbUser.cs new file mode 100644 index 0000000..8c51bcf --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbUser.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbUser +{ + public int? Id { get; set; } + + public string? UserName { get; set; } + + public string? SqlGroup { get; set; } + + public string? Password { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbWaveDefine.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbWaveDefine.cs new file mode 100644 index 0000000..81cd598 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbWaveDefine.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbWaveDefine +{ + public int? SqlIndex { get; set; } + + public int? DeviceTypeCode { get; set; } + + public int? ChannelId { get; set; } + + public string? ChannelName { get; set; } + + public string? Unit1 { get; set; } + + public string? Unit2 { get; set; } + + public string? ChannelNameB { get; set; } + + public string? ChannelType { get; set; } + + public string? Lcden { get; set; } + + public string? Lcdebbt { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbXieboDlzl.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbXieboDlzl.cs new file mode 100644 index 0000000..197122c --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbXieboDlzl.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbXieboDlzl +{ + public int? Id { get; set; } + + public int? DeviceTypeCode { get; set; } + + public int? Line { get; set; } + + public int? Col { get; set; } + + public string? XieBoName { get; set; } + + public string? XieBoFuhao { get; set; } + + public int? Type { get; set; } + + public string? Unit { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYabanTest.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYabanTest.cs new file mode 100644 index 0000000..3882258 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYabanTest.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbYabanTest +{ + public int? DeviceTypeCode { get; set; } + + public int? SqlIndex { get; set; } + + public int? Channel { get; set; } + + public string? ChannelName { get; set; } + + public int? YxIndex { get; set; } + + public int? Board { get; set; } + + public int? Type { get; set; } + + public string? Lcden { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYc.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYc.cs new file mode 100644 index 0000000..2f7a29f --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYc.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbYc +{ + public int? Id { get; set; } + + public int? DeviceTypeCode { get; set; } + + public int? SqlIndex { get; set; } + + public int? Jzchannel { get; set; } + + public string? Duanzi { get; set; } + + public string? InVarName { get; set; } + + public int? Jzvalue { get; set; } + + public int? Jzvalue1A { get; set; } + + public int? Jzvalue5A { get; set; } + + public string? Ycname { get; set; } + + public int? Coeff { get; set; } + + public string? Unit { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYctype.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYctype.cs new file mode 100644 index 0000000..3293ccf --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYctype.cs @@ -0,0 +1,37 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbYctype +{ + public int? Yctype { get; set; } + + public string? Ycname { get; set; } + + public string? Yccategory { get; set; } + + public string? Uint1 { get; set; } + + public string? Uint2 { get; set; } + + public int? Coeff1 { get; set; } + + public int? Coeff2 { get; set; } + + public string? YcnameB { get; set; } + + public string? YccategoryB { get; set; } + + public int? DeviceCat { get; set; } + + public string? EnumStr { get; set; } + + public int? DeviceTypeCode { get; set; } + + public string? Lcden { get; set; } + + public string? Lcdenb { get; set; } + + public string? Type { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYcunit.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYcunit.cs new file mode 100644 index 0000000..6316adb --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYcunit.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbYcunit +{ + public int? SqlIndex { get; set; } + + public string? SiuintValue { get; set; } + + public string? Siuint { get; set; } + + public string? Name { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYk.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYk.cs new file mode 100644 index 0000000..7498dd9 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYk.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbYk +{ + public int? DeviceTypeCode { get; set; } + + public int? SqlIndex { get; set; } + + public int? Inf { get; set; } + + public string? CtrlType { get; set; } + + public string? ObjectName { get; set; } + + public string? Type { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYx.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYx.cs new file mode 100644 index 0000000..2e5e905 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbYx.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbYx +{ + public int? DeviceTypeCode { get; set; } + + public int? SqlIndex { get; set; } + + public int? Inf { get; set; } + + public string? ObjectName { get; set; } + + public string? CloseText { get; set; } + + public string? OpenText { get; set; } + + public int? Type { get; set; } + + public string? BoolVisable { get; set; } + + public string? BoolIsBsinfo { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbZtlj.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbZtlj.cs new file mode 100644 index 0000000..3d34ed3 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbZtlj.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbZtlj +{ + public int? 编号 { get; set; } + + public int? SqlIndex { get; set; } + + public string? Kgid { get; set; } + + public string? Kgconfig { get; set; } + + public string? Kgname { get; set; } + + public int? Kgpos { get; set; } + + public int? Kgtype { get; set; } + + public string? Desc { get; set; } + + public int? PosOnly { get; set; } + + public int? TypeOnly { get; set; } + + public int? DeviceTypeCode { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbZyb.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbZyb.cs new file mode 100644 index 0000000..da03c7f --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbZyb.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbZyb +{ + public int? DeviceTypeCode { get; set; } + + public double? SqlIndex { get; set; } + + public string? ChannelName { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbZyl.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbZyl.cs new file mode 100644 index 0000000..8338bc3 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Models/TbZyl.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace YunDa.SOMS.ProDB.Models; + +public partial class TbZyl +{ + public double? DeviceTypeCode { get; set; } + + public double? SqlIndex { get; set; } + + public double? LiansuoChannel { get; set; } + + public string? LiansuoDesc { get; set; } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Program.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Program.cs new file mode 100644 index 0000000..bc65a61 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/Program.cs @@ -0,0 +1,10 @@ +namespace YunDa.SOMS.ProDB +{ + internal class Program + { + static void Main(string[] args) + { + //Console.WriteLine("Hello, World!"); + } + } +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/ProtdbContext.cs b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/ProtdbContext.cs new file mode 100644 index 0000000..f52b0e5 --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/ProtdbContext.cs @@ -0,0 +1,709 @@ +using System; +using System.Collections.Generic; +using Microsoft.EntityFrameworkCore; +using YunDa.SOMS.ProDB.Models; + +namespace YunDa.SOMS.ProDB; + +public partial class ProtdbContext : DbContext +{ + private readonly string _databasePath; + + public ProtdbContext(string databasePath) + { + _databasePath = databasePath; + } + + public ProtdbContext(DbContextOptions options) + : base(options) + { + } + + public virtual DbSet TbADbinfos { get; set; } + + public virtual DbSet TbActionFlags { get; set; } + + public virtual DbSet TbContactDis { get; set; } + + public virtual DbSet TbContactDos { get; set; } + + public virtual DbSet TbCpufpgas { get; set; } + + public virtual DbSet TbDevCats { get; set; } + + public virtual DbSet TbDeviceTypes { get; set; } + + public virtual DbSet TbDzDkjls { get; set; } + + public virtual DbSet TbDzKzzs { get; set; } + + public virtual DbSet TbDzSconfs { get; set; } + + public virtual DbSet TbDzSys { get; set; } + + public virtual DbSet TbDzUsers { get; set; } + + public virtual DbSet TbDzYxsets { get; set; } + + public virtual DbSet TbDzenums { get; set; } + + public virtual DbSet TbDztypes { get; set; } + + public virtual DbSet TbEventBhs { get; set; } + + public virtual DbSet TbEventZjs { get; set; } + + public virtual DbSet TbFpgatypes { get; set; } + + public virtual DbSet TbGckgs { get; set; } + + public virtual DbSet TbGcmodels { get; set; } + + public virtual DbSet TbGooseCds { get; set; } + + public virtual DbSet TbGooseKcs { get; set; } + + public virtual DbSet TbGooseKrs { get; set; } + + public virtual DbSet TbKcs { get; set; } + + public virtual DbSet TbKctests { get; set; } + + public virtual DbSet TbKdadjusts { get; set; } + + public virtual DbSet TbKrs { get; set; } + + public virtual DbSet TbKrtxes { get; set; } + + public virtual DbSet TbKxzttds { get; set; } + + public virtual DbSet TbLanguages { get; set; } + + public virtual DbSet TbLights { get; set; } + + public virtual DbSet TbTables { get; set; } + + public virtual DbSet TbUpdateLogs { get; set; } + + public virtual DbSet TbUsers { get; set; } + + public virtual DbSet TbWaveDefines { get; set; } + + public virtual DbSet TbXieboDlzls { get; set; } + + public virtual DbSet TbYabanTests { get; set; } + + public virtual DbSet TbYcs { get; set; } + + public virtual DbSet TbYctypes { get; set; } + + public virtual DbSet TbYcunits { get; set; } + + public virtual DbSet TbYks { get; set; } + + public virtual DbSet TbYxes { get; set; } + + public virtual DbSet TbZtljs { get; set; } + + public virtual DbSet TbZybs { get; set; } + + public virtual DbSet TbZyls { get; set; } + + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) + { + optionsBuilder.UseSqlite($"Data Source={_databasePath}"); + } + + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_A_DBinfo"); + + entity.Property(e => e.Crcprogram).HasColumnName("CRCProgram"); + entity.Property(e => e.DatetimeUpdateWhen).HasColumnName("datetime_UpdateWhen"); + entity.Property(e => e.Id).HasColumnName("ID"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_ActionFlag"); + + entity.Property(e => e.Lcden).HasColumnName("LCDEN"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_Contact_DI"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_Contact_DO"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_CPUFPGA"); + + entity.Property(e => e.Ft3dataBaudRate).HasColumnName("FT3DataBaudRate"); + entity.Property(e => e.Ft3delayTime).HasColumnName("FT3DelayTime"); + entity.Property(e => e.Ft3volRatio).HasColumnName("FT3VolRatio"); + entity.Property(e => e.Id).HasColumnName("ID"); + entity.Property(e => e.MappingCh1).HasColumnName("MappingCH1"); + entity.Property(e => e.MappingCh10).HasColumnName("MappingCH10"); + entity.Property(e => e.MappingCh11).HasColumnName("MappingCH11"); + entity.Property(e => e.MappingCh12).HasColumnName("MappingCH12"); + entity.Property(e => e.MappingCh13).HasColumnName("MappingCH13"); + entity.Property(e => e.MappingCh14).HasColumnName("MappingCH14"); + entity.Property(e => e.MappingCh15).HasColumnName("MappingCH15"); + entity.Property(e => e.MappingCh16).HasColumnName("MappingCH16"); + entity.Property(e => e.MappingCh17).HasColumnName("MappingCH17"); + entity.Property(e => e.MappingCh18).HasColumnName("MappingCH18"); + entity.Property(e => e.MappingCh19).HasColumnName("MappingCH19"); + entity.Property(e => e.MappingCh2).HasColumnName("MappingCH2"); + entity.Property(e => e.MappingCh20).HasColumnName("MappingCH20"); + entity.Property(e => e.MappingCh21).HasColumnName("MappingCH21"); + entity.Property(e => e.MappingCh22).HasColumnName("MappingCH22"); + entity.Property(e => e.MappingCh3).HasColumnName("MappingCH3"); + entity.Property(e => e.MappingCh4).HasColumnName("MappingCH4"); + entity.Property(e => e.MappingCh5).HasColumnName("MappingCH5"); + entity.Property(e => e.MappingCh6).HasColumnName("MappingCH6"); + entity.Property(e => e.MappingCh7).HasColumnName("MappingCH7"); + entity.Property(e => e.MappingCh8).HasColumnName("MappingCH8"); + entity.Property(e => e.MappingCh9).HasColumnName("MappingCH9"); + entity.Property(e => e.MultiplierCh1).HasColumnName("MultiplierCH1"); + entity.Property(e => e.MultiplierCh10).HasColumnName("MultiplierCH10"); + entity.Property(e => e.MultiplierCh11).HasColumnName("MultiplierCH11"); + entity.Property(e => e.MultiplierCh12).HasColumnName("MultiplierCH12"); + entity.Property(e => e.MultiplierCh13).HasColumnName("MultiplierCH13"); + entity.Property(e => e.MultiplierCh14).HasColumnName("MultiplierCH14"); + entity.Property(e => e.MultiplierCh15).HasColumnName("MultiplierCH15"); + entity.Property(e => e.MultiplierCh16).HasColumnName("MultiplierCH16"); + entity.Property(e => e.MultiplierCh2).HasColumnName("MultiplierCH2"); + entity.Property(e => e.MultiplierCh3).HasColumnName("MultiplierCH3"); + entity.Property(e => e.MultiplierCh4).HasColumnName("MultiplierCH4"); + entity.Property(e => e.MultiplierCh5).HasColumnName("MultiplierCH5"); + entity.Property(e => e.MultiplierCh6).HasColumnName("MultiplierCH6"); + entity.Property(e => e.MultiplierCh7).HasColumnName("MultiplierCH7"); + entity.Property(e => e.MultiplierCh8).HasColumnName("MultiplierCH8"); + entity.Property(e => e.MultiplierCh9).HasColumnName("MultiplierCH9"); + entity.Property(e => e.ZeroDriftCh1).HasColumnName("ZeroDriftCH1"); + entity.Property(e => e.ZeroDriftCh10).HasColumnName("ZeroDriftCH10"); + entity.Property(e => e.ZeroDriftCh11).HasColumnName("ZeroDriftCH11"); + entity.Property(e => e.ZeroDriftCh12).HasColumnName("ZeroDriftCH12"); + entity.Property(e => e.ZeroDriftCh13).HasColumnName("ZeroDriftCH13"); + entity.Property(e => e.ZeroDriftCh14).HasColumnName("ZeroDriftCH14"); + entity.Property(e => e.ZeroDriftCh15).HasColumnName("ZeroDriftCH15"); + entity.Property(e => e.ZeroDriftCh16).HasColumnName("ZeroDriftCH16"); + entity.Property(e => e.ZeroDriftCh2).HasColumnName("ZeroDriftCH2"); + entity.Property(e => e.ZeroDriftCh3).HasColumnName("ZeroDriftCH3"); + entity.Property(e => e.ZeroDriftCh4).HasColumnName("ZeroDriftCH4"); + entity.Property(e => e.ZeroDriftCh5).HasColumnName("ZeroDriftCH5"); + entity.Property(e => e.ZeroDriftCh6).HasColumnName("ZeroDriftCH6"); + entity.Property(e => e.ZeroDriftCh7).HasColumnName("ZeroDriftCH7"); + entity.Property(e => e.ZeroDriftCh8).HasColumnName("ZeroDriftCH8"); + entity.Property(e => e.ZeroDriftCh9).HasColumnName("ZeroDriftCH9"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_DevCat"); + + entity.Property(e => e.Id).HasColumnName("ID"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_DeviceType"); + + entity.Property(e => e.BoolDkjltable).HasColumnName("bool_DKJLTable"); + entity.Property(e => e.BoolHaveTouTui).HasColumnName("bool_HaveTouTui"); + entity.Property(e => e.BoolQlxltable).HasColumnName("bool_QLXLTable"); + entity.Property(e => e.Io1type).HasColumnName("IO1Type"); + entity.Property(e => e.Io2type).HasColumnName("IO2Type"); + entity.Property(e => e.Io3type).HasColumnName("IO3Type"); + entity.Property(e => e.Io4type).HasColumnName("IO4Type"); + entity.Property(e => e.Lcden).HasColumnName("LCDEN"); + entity.Property(e => e.Pname).HasColumnName("PName"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_DZ_Dkjl"); + + entity.Property(e => e.BoolModify).HasColumnName("bool_Modify"); + entity.Property(e => e.BoolVisable).HasColumnName("bool_Visable"); + entity.Property(e => e.Dzname).HasColumnName("DZName"); + entity.Property(e => e.DztypeCode).HasColumnName("DZTypeCode"); + entity.Property(e => e.EnumId).HasColumnName("EnumID"); + entity.Property(e => e.Id).HasColumnName("ID"); + entity.Property(e => e.Lcden).HasColumnName("LCDEN"); + entity.Property(e => e.Lcdname).HasColumnName("LCDName"); + entity.Property(e => e.Ptctindex).HasColumnName("PTCTIndex"); + entity.Property(e => e.RelCt1).HasColumnName("RelCT1"); + entity.Property(e => e.RelCt2).HasColumnName("RelCT2"); + entity.Property(e => e.RelPt1).HasColumnName("RelPT1"); + entity.Property(e => e.RelPt2).HasColumnName("RelPT2"); + entity.Property(e => e.SqlGroup).HasColumnName("sql_Group"); + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_DZ_Kzz"); + + entity.Property(e => e.Lcden).HasColumnName("LCDEN"); + entity.Property(e => e.SqlGroup).HasColumnName("sql_Group"); + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_DZ_SConf"); + + entity.Property(e => e.BoolModify).HasColumnName("bool_Modify"); + entity.Property(e => e.BoolVisable).HasColumnName("bool_Visable"); + entity.Property(e => e.Dzname).HasColumnName("DZName"); + entity.Property(e => e.DztypeCode).HasColumnName("DZTypeCode"); + entity.Property(e => e.EnumId).HasColumnName("EnumID"); + entity.Property(e => e.Id).HasColumnName("ID"); + entity.Property(e => e.Lcden).HasColumnName("LCDEN"); + entity.Property(e => e.Lcdenbt).HasColumnName("LCDENBT"); + entity.Property(e => e.Lcdname).HasColumnName("LCDName"); + entity.Property(e => e.LcdnameBt).HasColumnName("LCDNameBT"); + entity.Property(e => e.Ptctindex).HasColumnName("PTCTIndex"); + entity.Property(e => e.RelCt1).HasColumnName("RelCT1"); + entity.Property(e => e.RelCt2).HasColumnName("RelCT2"); + entity.Property(e => e.RelPt1).HasColumnName("RelPT1"); + entity.Property(e => e.RelPt2).HasColumnName("RelPT2"); + entity.Property(e => e.SqlGroup).HasColumnName("sql_Group"); + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_DZ_Sys"); + + entity.Property(e => e.BoolModify).HasColumnName("bool_Modify"); + entity.Property(e => e.BoolVisable).HasColumnName("bool_Visable"); + entity.Property(e => e.Dzname).HasColumnName("DZName"); + entity.Property(e => e.DztypeCode).HasColumnName("DZTypeCode"); + entity.Property(e => e.EnumId).HasColumnName("EnumID"); + entity.Property(e => e.Id).HasColumnName("ID"); + entity.Property(e => e.Lcden).HasColumnName("LCDEN"); + entity.Property(e => e.Lcdenbt).HasColumnName("LCDENBT"); + entity.Property(e => e.Lcdname).HasColumnName("LCDName"); + entity.Property(e => e.LcdnameBt).HasColumnName("LCDNameBT"); + entity.Property(e => e.Ptctindex).HasColumnName("PTCTIndex"); + entity.Property(e => e.RelCt1).HasColumnName("RelCT1"); + entity.Property(e => e.RelCt2).HasColumnName("RelCT2"); + entity.Property(e => e.RelPt1).HasColumnName("RelPT1"); + entity.Property(e => e.RelPt2).HasColumnName("RelPT2"); + entity.Property(e => e.SqlGroup).HasColumnName("sql_Group"); + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_DZ_User"); + + entity.Property(e => e.BoolModify).HasColumnName("bool_Modify"); + entity.Property(e => e.BoolVisable).HasColumnName("bool_Visable"); + entity.Property(e => e.Dzname).HasColumnName("DZName"); + entity.Property(e => e.DztypeCode).HasColumnName("DZTypeCode"); + entity.Property(e => e.EnumId).HasColumnName("EnumID"); + entity.Property(e => e.Id).HasColumnName("ID"); + entity.Property(e => e.Lcden).HasColumnName("LCDEN"); + entity.Property(e => e.Lcdenbt).HasColumnName("LCDENBT"); + entity.Property(e => e.Lcdname).HasColumnName("LCDName"); + entity.Property(e => e.LcdnameBt).HasColumnName("LCDNameBT"); + entity.Property(e => e.Ptctindex).HasColumnName("PTCTIndex"); + entity.Property(e => e.RelCt1).HasColumnName("RelCT1"); + entity.Property(e => e.RelCt2).HasColumnName("RelCT2"); + entity.Property(e => e.RelPt1).HasColumnName("RelPT1"); + entity.Property(e => e.RelPt2).HasColumnName("RelPT2"); + entity.Property(e => e.SqlGroup).HasColumnName("sql_Group"); + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_DZ_YXSet"); + + entity.Property(e => e.BoolModify).HasColumnName("bool_Modify"); + entity.Property(e => e.BoolVisable).HasColumnName("bool_Visable"); + entity.Property(e => e.Dzname).HasColumnName("DZName"); + entity.Property(e => e.DztypeCode).HasColumnName("DZTypeCode"); + entity.Property(e => e.EnumId).HasColumnName("EnumID"); + entity.Property(e => e.Id).HasColumnName("ID"); + entity.Property(e => e.RelativeCt).HasColumnName("RelativeCT"); + entity.Property(e => e.RelativePt).HasColumnName("RelativePT"); + entity.Property(e => e.SqlGroup).HasColumnName("sql_Group"); + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_DZEnum"); + + entity.Property(e => e.DzenmuIddesc).HasColumnName("DZEnmuIDDesc"); + entity.Property(e => e.DzenumId).HasColumnName("DZEnumID"); + entity.Property(e => e.DzenumName).HasColumnName("DZEnumName"); + entity.Property(e => e.DzenumValue).HasColumnName("DZEnumValue"); + entity.Property(e => e.Lcden).HasColumnName("LCDEN"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_DZType"); + + entity.Property(e => e.Dzlength).HasColumnName("DZlength"); + entity.Property(e => e.DztypeCode).HasColumnName("DZTypeCode"); + entity.Property(e => e.DztypeName).HasColumnName("DZTypeName"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_Event_BH"); + + entity.Property(e => e.Lcden).HasColumnName("LCDEN"); + entity.Property(e => e.Lcdevent).HasColumnName("LCDEvent"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_Event_ZJ"); + + entity.Property(e => e.Lcden).HasColumnName("LCDEN"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_FPGAType"); + + entity.Property(e => e.TypeId).HasColumnName("TypeID"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_GCKG"); + + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_GCModel"); + + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_GOOSE_CD"); + + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_GOOSE_KC"); + + entity.Property(e => e.Kcduanzi).HasColumnName("KCDuanzi"); + entity.Property(e => e.Kcname).HasColumnName("KCname"); + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_GOOSE_KR"); + + entity.Property(e => e.Krduanzi).HasColumnName("KRDuanzi"); + entity.Property(e => e.Krname).HasColumnName("KRName"); + entity.Property(e => e.Krtype).HasColumnName("KRType"); + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_KC"); + + entity.Property(e => e.Kcduanzi).HasColumnName("KCDuanzi"); + entity.Property(e => e.Kcname).HasColumnName("KCname"); + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_KCTest"); + + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_KDAdjust"); + + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + entity.Property(e => e.Ycindex).HasColumnName("YCIndex"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_KR"); + + entity.Property(e => e.Krduanzi).HasColumnName("KRDuanzi"); + entity.Property(e => e.Krname).HasColumnName("KRName"); + entity.Property(e => e.Lcden).HasColumnName("LCDEN"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_KRTX"); + + entity.Property(e => e.Id).HasColumnName("ID"); + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_KXZTTD"); + + entity.Property(e => e.Id).HasColumnName("ID"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_Language"); + + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_Lights"); + + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_tables"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_UpdateLog"); + + entity.Property(e => e.DatetimeUpdDate).HasColumnName("datetime_UpdDate"); + entity.Property(e => e.Id).HasColumnName("ID"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_User"); + + entity.Property(e => e.Id).HasColumnName("id"); + entity.Property(e => e.Password).HasColumnName("password"); + entity.Property(e => e.SqlGroup).HasColumnName("sql_group"); + entity.Property(e => e.UserName).HasColumnName("userName"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_WaveDefine"); + + entity.Property(e => e.ChannelId).HasColumnName("ChannelID"); + entity.Property(e => e.Lcdebbt).HasColumnName("LCDEBBT"); + entity.Property(e => e.Lcden).HasColumnName("LCDEN"); + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_xiebo_DLZL"); + + entity.Property(e => e.Id).HasColumnName("ID"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_YabanTest"); + + entity.Property(e => e.Lcden).HasColumnName("LCDEN"); + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_YC"); + + entity.Property(e => e.Id).HasColumnName("ID"); + entity.Property(e => e.Jzchannel).HasColumnName("JZChannel"); + entity.Property(e => e.Jzvalue).HasColumnName("JZValue"); + entity.Property(e => e.Jzvalue1A).HasColumnName("JZValue1A"); + entity.Property(e => e.Jzvalue5A).HasColumnName("JZValue5A"); + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + entity.Property(e => e.Ycname).HasColumnName("YCName"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_YCType"); + + entity.Property(e => e.Lcden).HasColumnName("LCDEN"); + entity.Property(e => e.Lcdenb).HasColumnName("LCDENB"); + entity.Property(e => e.Yccategory).HasColumnName("YCCategory"); + entity.Property(e => e.YccategoryB).HasColumnName("YCCategoryB"); + entity.Property(e => e.Ycname).HasColumnName("YCName"); + entity.Property(e => e.YcnameB).HasColumnName("YCNameB"); + entity.Property(e => e.Yctype).HasColumnName("YCType"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_YCUnit"); + + entity.Property(e => e.Siuint).HasColumnName("SIUint"); + entity.Property(e => e.SiuintValue).HasColumnName("SIUintValue"); + entity.Property(e => e.SqlIndex).HasColumnName("sql_index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_YK"); + + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_YX"); + + entity.Property(e => e.BoolIsBsinfo).HasColumnName("bool_isBSInfo"); + entity.Property(e => e.BoolVisable).HasColumnName("bool_Visable"); + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_ZTLJ"); + + entity.Property(e => e.Kgconfig).HasColumnName("KGConfig"); + entity.Property(e => e.Kgid).HasColumnName("KGID"); + entity.Property(e => e.Kgname).HasColumnName("KGName"); + entity.Property(e => e.Kgpos).HasColumnName("KGPos"); + entity.Property(e => e.Kgtype).HasColumnName("KGType"); + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_ZYBS"); + + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + modelBuilder.Entity(entity => + { + entity + .HasNoKey() + .ToTable("tb_ZYLS"); + + entity.Property(e => e.SqlIndex).HasColumnName("sql_Index"); + }); + + OnModelCreatingPartial(modelBuilder); + } + + partial void OnModelCreatingPartial(ModelBuilder modelBuilder); +} diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB.csproj b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB.csproj new file mode 100644 index 0000000..133475d --- /dev/null +++ b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB.csproj @@ -0,0 +1,19 @@ + + + + Exe + net8.0 + enable + enable + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + diff --git a/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/protdb.sql3 b/src/YunDa.Domain/ProtectionDeviceSqlite/YunDa.SOMS.ProDB/YunDa.SOMS.ProDB/protdb.sql3 new file mode 100644 index 0000000000000000000000000000000000000000..2d61670a8540138d9dc4bc844933bf6a35b7782f GIT binary patch literal 282624 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 z z-b#8Jv2^&k{gA!N@S&~pB;i~UCRk9l5l0#Oz%^{$3X_8{8V}_ZAVj0kN5w^G<-xYj zj-Ut=E!C#tf7>Yk#c0yrzk0R^Q!Frfkex*)mhjoXY!N0`VCoxjA(GEPM!I8ndHFL{l%2M^!9lO_eZPv?DKz3*28+c?oPV zxib2}1(^J;Z&Y9YYn!}zcA1(nVI`2 znh`C?FEyTlC3CORl)ca&t9}Geyc+YTo_O7ZCti)k^b@bU@x-e!yWzy^+=uPv`KA)y zeU(geN6?ZAsm+Ea4bAK5w{^i?z|WOurR4wc`S)o7c&*-vzJA3;8DGYgFDX>=*Kgzv z5r1}I%DpSPwPIVmvjb}8>H+j6EG|wV2HBNJp(#~GY-T?yD+PIOxt7I7w3Y6(KD(*F zl%3ZPi*geCQ6s|~AuWwaUN3}lbZ7$!Y?!eFmG6R_zM(7E(M%@(0O2+lyi3il!XCtv zujVngMpm@70ZU(dyuZIFj%t#EJe8Wn)%QowoB@{2@QLqkj}>-HbxB??ZZ}A)!S<@x zLKJo(J-PWR7WMju1)V5+2a9W+~yLb^g)z%sC*8=p?>KWM>qGEEY?{ZgH>rLVtg zI}$I>PbrQ*szjF}Rre4`LH8l06l$}}{Hk)9c?EJgpyw<0)$IjZ)Lg|vSF9;N+*8b4bk<{}ld8C4zX#u7NLw3jMkC@nPY zD4FA`qukOy+8AQ$$QE> z;BE7UydKXFJfHI%^KA9p?a6ij)cqy*X?NUR?=Es%Tpzl=2;%^cx;DBNx-8t+xC^iY z;BL<4{4%Wm-{35D{L=9kj#nIe9Bq!d4yXM?`*r(s_8s;`_FUVD?E~8p7ze1b`K&*L z`vqUO?zY}p_}<<$zXp!7pWinGrVgU!9GC0OdjKu%hIL>E z&ki3ukE`LSgQ)rD)CS@Oy^98+!M2oJ>MbgR=FRZwYiLAf|Go(B;0&L57Sd?$VXyxhIEWq|CVMJ`u$kVf#C2dF((z!ZRBt8Lb zoYtsp6LE!r%O^f=H)lDskZVv0oqDZEd`#*ldkY$HQ?^}-3dKi(%bA^q zYfYZ`h}~SyWqb1;gwHOt3eoC6>B8g?T$-FG?txIypbHH`=qzzJYRDFQ^Nz_QMN+pK zTo~IgQDDD}lz_8DXk`VRsTpDYs>GNtLh}lGqu!j|=<|5;BCKP<4SYOa;1{7SRqia% zhof;PX-J_+gmzOkm*>s73S$6cFT9jEF$k4%Y2w`zFc4EFXPY7snn~5pR9teNm@D>4 ziCCC(Wn#U-Sz<3rP8ifv2^e(;cc4aLK|#*ti7pPW6njvbrxZa22k_tjK3N_SZcgLyj1K)i3w}!4VX1k#9|k)nxH@*#f1^C)WyZr3N68*>(3X7orovj zkjK)pHt`~?PZwv3+YwiRA(wgd<~ht(BtC?EGiFP?^sd4s02gEqBe#b4URSub$-0in z*PtFen>hFfxF<`78H&WMvMwVoWdx&8+yYzxM9#ywT|y5-!q_DmhMXEprj!6 zoOg`C^-7q#%cc9)VD4!x0LfF1Fgu1avh#Ok#DYA5X8PSrFj=VsRPb%*;&ffw>tN zXNpUKk4wk5=HWFD&lK+gHfLJ4oojX$iOndpL$17^-ZP7HBJ@?pPMw49$_#M{%H6q{ zMqIFa7r0ienj&BUi#3tzjoRznZt_SIA5VqtL zh>gJIEXY)Ik%}zRFkOrwJ-OL=_d)p^y7>|wbxRH^7l;i=MQ)CoK{b+GkMJtW&v^rX zXwbmh#Um&K!@%hqd)pGv9$f?<9BDkw-?pe!yc;2xmzRn^$r~0I+RbHLuqfws_5L3^ zo>05Nz95LLA3B=du;#u}ybGk9<%L=)5^pR5!@ROYiMRk-Nw75_XO~gG8x001`x3-E zQL8IA*O-&um{2CpM@=uNZw!^Hy5q&-9e@dPU?+9}x5@FxjWRz=tV39Xc>_LrcS5N+ z4}lETnE@k8n&ke3e6iMUu7uK)GoYM_Ol}CQuCK1o7i%CKij6^dus#Uk)hLr^W#ynj zHoRFDj~~E}S=c8xL##r%IxAlvp4@6zD2AncsHtCZ-70UdLj8ZQ?`#G?#Q!OOj(-|P z0M_wMd^w-#`w!oTzFQE)ei#A_0fqoWfFZyTUmH z$-KC-D;{cO_I$fj){r=@4zqw42#1!tTo4GHC38i!2q@nzeoP?t)VNQb4{@# zZ=H&_7th0KAV^@E1*x+t^i!_^Kg^=RAg&Z@Mxo}A92a${d8*0E)p1Hh)q&{zKN~-U z(s4SR|Mv_2C;UJ0L*70(?e7PkPka3CAG+UguYnDmenw$dda-f^dr-wCTGT}kC{>80f))F zawWGyum)jx5at44l{KE-4dJ-}NL|=xHFV`27=Rj|qc7Uk1B1aZW(^AsE94QXSO-2e zYWZq^O>ZSOxLU9VH0px1L3~)x_#A43aGalk&G=jr$;xyZ4I`=Y3UjD!>J3(Jt^kAe z^&CVpyLknkZ@@F0crpNn8b?2PGj)jCfMKM9?Q^h=wSx6FBTd5xpN92VX+kPj_1O@cLxsFLQ7N6){TxcQtB4Gt_p zrzFB@YVqC{GEi4p$t@79nTond%W7Ei z4KYMlQxuS6P7oQe0x&Lx8Uhxq^esqu#oFs-eUib&PX}}lH!m5@ER-YmZD~r*=Rhm}=RkWgeim{@Vg4IhT z)jn0>S6PvC5RM1%kEOzb)u~7Y)u!cFJbMu9?Tz=MythT@jMWri;WEMMAi`>s zLHsH&=7mZW$<xx74XlVG)vz5e9LbEj+NKd`X6zoJKI-(E4$GY9rY^!xkcetZaO zrF_h(zYmUv>#4}cDryC*4a?TZe@On`EObYEcf*oCD9JOXVfI47YQ=oj@*kLk*b)^w z2YO=*@-PonMiv}cCI5jn&+XfKEJr)E?j_5I&w^^9pIx-wO}d{H)FZ5{AVKK z;RU%w+=S&q@}G%_hZfvU#51s5Q2sL!@nByLh_7ACEfp-kk()8n?tnSabb`Gfuss1S zd)Y6Jo`(fj=uoiDJYX!@%Rr+B5dF1-5U=&+Vnttl^MEP{4 zclE;Ja5$y6uRqqMI3Q+ZV-MB|mjA8NoVfX^#Gzy3dys}Ng$MEu7R7~aw}A)u-_KPD zmj9$Z_~^z_5^X$LK6>*4n$COq)&$u|Igo3K%~@b+=~Av6W{B2}Sv{qM-f`oVP1 z=*>SICm5#kh0VRVD5z`x2Pb123k1u5&`QGTZ5Ra8Ht5Rtp-gOHrC|AY+Jdy9AayJZ zg5{c7X))}H!*(BaY_?6pww4Q)f1_;$)5pdj*vJ+gt0g>GDlX-C#EuT+|I-wPpKKP!3MGm7I09Oew_@#3djDCk1xG6t z-AFqf>-83*`-da2G4|kPea|QreV`9^WvB7`J~P(cELi?YuS51*XA{%)x@oT$nn1JE zN3e|Ha!krd@)i2t`Qi@vJx#2J-+3Yjzo)K;U%3G^{~v(vIe&|f@tp4+-wIzAocGWA z|H%OdRZknYqto@)F~#cp zpPjKigFns}K=1!9?_YZ3UW?~VPo4W)u(yA*>n+!E?x)xoL-5l>H-hFv9{>+i$5 zU@~!?UItIFr=n{X6~I(lH_YZX%#ry0!NA6~Sa+*ny$|aMr|?rxmvpP9+I8yJt-R<}T_4IKapSNxmalBQpopzkoJ`u-jH>@O%ufnPWDIC|+$924RT?=u1rCvMjIIVpm zj@PVT0ji;RLsn^#RM#2%ttXG`cFo#*v2MuWD|EUkuW8*Aak_f_a^m#8lHz&BPV33z zI$gbX8F6~KPB-N=t$QL)SFK-4oL(j=t~GXAPafClsvU62)4C_(bZGrz;`986~fbx*|UdFvMvr|*^&(_bjcX+3#dr{}G`i#WYdr<-z`);$rYYadzwieaGxd|U3K zr|qlo(#*t-LFrViH^xq%9Vd9)NYvhcC)irJ5Z29D7o=2{GCB4jd6EuJcpcN*SPu2wES8DjKC&RX2|)8XNE$G8y;qW*tn#w!{8CBB27 z>iaX_rVc-#@P zf8G9+y~Oq{+oQIC^{dt=turluZ`o<_oBznX-Ryx=``2dt2GoDTp9e&=<_1=*LmhS) ze^CN{I3En|wS?6uqZclWzK!bq)FJ6JRIqBbh!*3(N^)p<95Pa4L>nK~stqDqlLKE7 zaQvX8qb`--Mgilv9c~rT8l7+$xqZMuy#Z-_r^6dWw0Z|S{gk9)UMi=J0>*JV)GDIo zJJ{*{2I>t+<2xPNAfkmk*y$%F6}73HHVPQW>0qmf*6v`Z_Zg@+AdT;I@BtC6+X1Jc zsveY7)TDCSD1a<>Bdbi%=NWBdfhEj%WK7J!Zr2M|(ZGNKDYeoEo*>Tdl?1C(IcpS< zQg1bJ_Hp9t69)PXNU3!`@EGy+aY?W$m9IttDfLznUmqpDK4zfbfRtM2#z(NPus`Eb zNidwsSEB&EUYrNQ#MM2-)kh4}8<6xW<$M+1xSP1TM-mLBa@8n6uNS)-BCbA6T-|M; z-hiZ6DZ3haU>9~3iq^xDU@(=dMgb}H28pjbiLbj1^c#>;>s&bix?s5^Z1LHN1*@nr zak@9Ar_&3is+2>QVjXS$SS1wv0liAx3Q0v*tE2~=SN0J{`>}L5g`;{ptu;(J+Djbm z)2pN%rB!0OTBXX-9mLUItTmLvQ9Yg38loKSA&&0QtE3&JRq7oL!6hHbZGbD|#L*tC zm7WfvlU`4!9Su^Bb`wYAdX==Jv`W3BL6xH$y0BI#Pu*B+AO)g&I_;?O;`Y`~tbL(i z?b2(feWtam>AHEL=Ix*qhN3G4Yp0~N&e-D=wSw6-?m5^Ym9wML9V5I>ma_xbebq9XiX}z-nVw*TZg2v+Ss=gMJ(3(_aqDlGAFWE?ZdqC1i*Y1>WDai1pBff1QzHQWLqMV>LsmMeV z@$G)%+XhJ^U7=IHr69w{P4Nx&|L0`f%7C-~7W+Q(9rx9E|JM7Mcbez#JjXrF9*g@6 z?nm5pu77oX&ei2A=SH}*+$JvH`47(LohzL@oaw*C{u}#gdl1$FR9i1wYb{@}EH?j@ zd9~@MrX!|Vp!m1@(;=cUFK9tU1>5)V)+&6)ES!-!bnCplpGMk#rKiK^IJ&tr=I@X7 z!Hs8V3#uP>@J3;OxnHwwY_o_4y1>jv!S-Ff8N6~m6+N99dQp43h=#Yo$R@$|9jpwW zrmK&Oo{l%vP9Q2#5e;d9mHP$TxAj)&sL)n0J&hGQCc8v5j6)3m6 zX(;uv!3ffHeQlU3GMmL&*bJ1?hxKOY$k1j~=`(Iz>cwI(Qc;0M6aF}H@F{%Uah3cH z)VxcZQ>#|CYEWM&&cr(45QZ-%bzn!d??eZUXoFaUH9(K)k6t#^;kdG-!nJJJCUV z(IBGpG(ZEOag#(u@j{7+{Ej1{cjImm9j*aN0F4_-B^oqjH#R59U3%36dFhe?L~u#&f~ynz+G5!-cY>IyyJ-I-MCvsr*dF4 zt|XOc(2(6oDxv+T7tzTa7>&y$CP57v^1Fma&;Si|JO@VOQc{NojUa^v(m{LCAfgjG zFd7$0L=-O+G~{<25xpCCi|E7+jK&8^B^oqjHj)-$gb!pI7XmF z?My_ROrrEIt%u-3G-C?ULwoapmdJfCIxonE8K551lVN z?{j83{>Jf~V~r!nK4gE-{?l>#+5G>!a2ts}I%!yk!}%G+MIE z-#5Qw-eX>DzRmOl(|OY)rX{BAj1R%^$NLG0XnY^0W4(gC54Zc!EjP!H$e&OHQb0uG z_gJJ?6^@I(0VyD&!FepQ12@Q2Rt!i15e>d$5p)#}+@2weU@HcsfQUxcu}GZuLjE8c zkOCqaF2^F>s&IW=J`KwqigEh-lCoi*%~O^>HCq(5N;R*-kqqf4&Sz z0TB&fW08kc;rh79->-m(#;37}KszQ|F(3s*G!TtNwyDDPagnXe712mDd=DXyZIvB6 z`yRU8PC7D1Pnj#C0c9+(g$`ClL{fn%aQhY!h{;Y-7W9<4A{rLP7CPu)RU{}2RU#Vo zg+pc_4(-?_a>qFx4GpnML_@q-Y_mp;jtmjQ#3~Vu<6^NWc8_piYlg%s5e?d6u?ICA zbi{}*Obm!L_=ive^Z5@y#1w=Fii$xw#iO{iv0*gcxD`<=ri)@r3r>z)} z0wUVsghe)}!s*y(te`DSSmb`%F>M_Hj>)8eh;}Mrk@YGOeOyTCL>rK>$U53FZ5=>c zL7R%O$bBjieO!o@)kI`1?U=R>04p*nAhr>aH7XH(Tu2?zN<>!Ej%n)v+R7>-(xwv8 z$3?bsr??VCV1W*lpH}P`x^4;QM9@r^A%lQB#TFvI%0Qfsok|=B+$pXg;w!PkDlWQA z83f!Z-b=(=48-YJtHg0YgSZ^To0?GES0tTBryHXS>0gDWvo`wrum*7%QF5=b5-kX{ z62+6HM9K1GL}*4W6#B3R@gAaNnXwWrAhZ%3wn%ISCC$wUlchL1;aZSQB=eaM01#5Ua!nBG#x8qa#VgF!2tt9>ieO6Vg9|ouo4fT^{uG zJH)$*aD!f$jwCItSYAkk>#@T$6CG7O{SNUiB7C=An2s6WfMS=HWD|v8UrQjANVb^gk@l$ChJ)ErAuw*~Dn>YFq}x znVb}n-YKFT8vr;AMh~UYOh?+#H_VXUG#%$BM6{U$4EG7Pf26@QoURy`K|vd46yR`V z&4i8;clChH9uaNvz*8C@rZGTA9hW4Hiq`ymy_~?-}u&_dMcR;>mXZ*!?B3OW%H2k@%aD4_e%!h6s$5$omDRT$W zL^~G9Ai?Mw_h$}|zVnuzGJ8;-H1`UQ-wa>*44e-g96oO{|3GPJ8|{^9QzB`)xeEC^z)2CG|i2f{u3MjaQ_)FPe0EX zL=)MV=~rkJ^6-me2M!OP{5<_UZ4k{=7Zf0K|1oyp81{@jln$b4XzcjELrWh-hcBEQ zy>$}OMe|xZh$fpc>%Wn(gmhB4=CyPXO)6v7Unaw(TLv_*GY8S!aY+gC?-%mGI5w|( znK_6ih%wv0$|2aa>Sg92ngYgbKUYE|v#OVwgJ_x;v;7MWfjc))oK-I~2hmI}X8V~O zLK_X?mzjfTx)!tjRAHlx!g=%;;7IhDgJ?n)v;73K!EGB!qw>qlK{V-#**=olXrn>J zD4JEpY(G}mD5G#NJu*6D5Y3z7Jn|zbNszv>P3n2ZAet1#O#h6TWQ%z0SxVv=gJ{kZ zGyPCz!uBwe^jtcK<}Go;{}b*h6N{SH(m^y8iCM=;7`Cf4%t18UhuMZ@HUctYQ$R+OcbF}qu;EC{Bfiqh%t15-huMZO zTQWO=Hu+`dAV=8#QD&o!lI-LpY#%CYlu?qM9E9x$m@S!|z$nR1cEa|3nT<9|vXhOl zeNSPdjLO+5FlYrfY4F$a-9_}cCkEMo6d1G+k?*L&u^R@Yz@V9kd|MqZxnw}988m@N zT^*`MzJqg9v_8E0~aSzA?2%e1Zu6gN}vxNn6B4@(%HF5R^uY z9N*9nnaR0z|2Zs)^EX5V)9(-;Bf@{L7sd{!qTeAtN`(K;fC;C!&N6npRD1-4aUuL$ zjaQo2QgIJq{TmX7ebc;_in|HxUnj#PPc*M{#fO1a`hq*YPQ!|k(NpG%yNJNo=wR%L zo-$Y5Nd&&C3YPrQQ>w%P5WoYQyU6$*{)R#o30I~W605|1BDPb*f&1!)#453mhz*c2 zJKCBdu}bVEV*MHpY|W5}`v29|zs%r2Gq&xv+18(fDfYtpj%q1s(^1nT@{|kz{iQ;izt#ZaIa&mN4f_IwyJN9$NORn!ypxD z4#Rz`aLsDs=<^d0BbPN4eA>`gl`Ir{G!3%CK>xsd=TX0vMe^<1(8(mxk2C03s zw*^6}%o~(^7~Xpw_crSSC<>7P`dD3i8eawhXWxvTzmSZAeBou4Mqy1Qh}K3bmD~NQ zQpklha`dE}TLRcF(F~P*WiptWX3)DFo}Za&siPIf`5`h1@)iTwOWHEr^uU z*o+?dELyowvV@FHtwywFwq$a)VzMfQT#Z()Op+^8Zl3b}G7fKB{^_v=|jt8mM4hQdEiN`~t+s2jW}$!DbPz7jbJjQN5*bK$ zu>;?FCEv0o-MBS+Y5(ZaeTf%8P~VS;@6-W2Dte>cTVo5SA=g$;*Sc1VU7G;- zc}PK1zE%MoK&C}d2mVw^bedKaP7>3KYQe9|l|=KjqEs$bl3ZJK>TZ`rr)ov1ysC(5 zOHW;nB$}%gm2)a8PKszqQ_$RAMC&3`G@?`% zmHpLLy|r1AV75k(%CNGaw(hN+ED7GG5tOqNg^;f1%>=>Ph~_qDeJ;{wqMAvPoa)x* z1K0FfNSlLdcu9_2&y4Ra)aM^<_Nnnna^ym0ET_*r+PqWamE_1h%vesJbF>+!#v{p* zOP8^nLAKH4nmKNe3s!sOM#{BM!L5g5pFIkvrWw`xp}RlU3sckE(Ux>cWSRpp=W+Foy00OS z?zBT_Bx1+c=owac(v5k_X(Q6De2`gjbr-QA>6JEpbxGjS+=*;Zd)8Z#lI2#t3#pXo zJgT;UiUsp6dOwoD8(0pTkyx!+Z#gNZvo+0RO68m8YFa#I^3;~7!Lx3T`5MT%}1Q-Gg0fqoW01%kMSxi9= ztzUq?^?QRbJpoJnMh+d!a#~E~&Y@c`4<9~@iNi17n&JRv$H*U?PQ3am4jO%9Kb&Jf z#SV1)(2dtduD=R17Nh%aj(%`%?7)dE8z`|2UD-PXr`H{Q9y5Ea7E?Y9JfH=9%U4gb zSWLwhbiBpsYl&m9<$PbR*vFa#I^3;~7!Ltr8ZxL_C{*E#n3lOxZac0uny*C9Vc zk3ZLrpQk`CKWKx6s3X^3LQ6aLzYpDc*yVUTbo8sOLst%uo;h0IrV4>hf3;=k$`M@% z?)+n!vFa#I^3;~7!Lx3T`5MT%}1Q-JU{RnU#t0^KrrBNSxr3es;hHw z=z*Iz&*4N5&e~ds13fruY8-a-V6U!r*wBNms>)$S57uzlVL=a;P{?6M4{*GK-DKr> zJ`h0t|BOlh{n20=83GIeh5$o=A;1t|2rvW~0t^9$07HNwz!3P|L4fuDe|OS?dBPB2 z2rvW~0t^9$07HNwzz|>vFa#I^41wPk0<8c4+d`JSGt8h#%zF@d4i9`>yYz@2GFN&*x2eZ+M^ac6pn;g`N*RZ+M>Y z-0!LNWVt_b|AqUgd%3&JZFBvD>m8Q}3fK=rfFZyTUBfH$}S^THupH1CXQc2j{Vzd&dRRNoP*s|W}0$3BMw#LpRd8lJ#<%oD65JPW4U zO?9R^CElg@2GR;Yj!fA)42PDS6wfshFIU9xQ;8EY5ub58?O{ztXx>`c!+A-b91TzH z8kwgy$uouK30H)wSIay#NuF#CPnC2?*@0`p>Lkx?G*6%+6l#_AR3&+`G(5poGEbQB zESPKr3qf_I3Kl|6if0;$6Zl$G;)G1ZXH23z4Axcz>sH7fh6v9r9`QhaNBIZw%)3|4 zXU`lSedjI0H^WEk3ReWHm&>}6`K-)~c*d1Tw!_eR8vL|usov6jfJfr?;g z>DUV=L1UFBf0wv5jKO;pMs;Ca;4;E0iKz;!Bw4-zHN1c`5+|50QHc|BGCoeq%|LBM zpl&gCGpvn|L&G?4k;15sPl=sotf~mqG-1Y&R-;YBSly^FYBXAD#$ZJt9Kno1twxK6 zG1QY!8-Yf^tyh6Y$ONt}(@3ikRU)0y+EAx51KlT2t_p0|r?~`7^yUIJ?JJaj+{KE4+&!2hT z110Q-A;1t|2rvW~0t^9$07HNwzz|>vd?Ez0XE;qJQ@+XM6lToF-Q-Zc0M8J*U04RHcR$2LY`JF zldD=S*?EMVS0$6ft1Q`533+N*CWls7a&r;67)2*HM2`;KYstQyNZcNjB?8MW({d2G z97*H^G-CkEEK{eT&=M3nr4sinG3ervmdh9f`~5F+)h^u!sB(io;&W7ZTO;yRaN4<{A}DDE5&WKAZ|R+V8rd5Zb95I zzJqjI%-BJq)MgEuA)IT);pR4t=}NsHHcPg=ka#muZJb&VO#q+Rdm8aNab${P|-Tl0K zhkKd3#BFx{!1V>!E3QXf>s|9)Q@EdVU*|4xM>&C8#1(;h_QMch2rvW~0t^9$07Kw+ z27$s#rzzJA(~P;Wc(?YBa4_Rp8=8XK|7Nh7$CSdkYL-C8GYU(UPhtraR;XA)bs0}9 zEMYHV3Dp(OQM1g;IH9nFJQB;i!g4iBZN_nhCFqt|Y71wpS!yzlDJ%h(#8TrglUVZP z7=@}cj>;@`oWxP>FI96?WgL+?<~b#fDu0QZBb;$q=BRc2pZ4AaKB^x zjQ}BJ3=+lyWFhF=trcuzkPwyuvq{+C1q+aI+aO^UuVY(R7)$KfW;I|IV~jnlURcET zGLvNTvUoCCU*611G9GnHn&f3(mYL*bk~iP~)Va61ddIy`#WPB_lVB2aSsoO2Q2O+e&Vt9$sexuynep;#CBDO&iy3+E`LO4t`_>6sQ|Rpg`Sd1ynT-US$6dVVSvkIynB|z18D4@VN_@7l!)g1yVJw^Pd zgh1=ocdTCDy0#duX@MEd63|8xp`cbQFsxaB`)=+UW}@J}R#CMD5;gesgF{Ue9N8+WW_aZ4 z$Kl@7Uu`)aIsZkzftmo9Hc$wK7wl=(!v=0%?|=7nWdDUBsx16v@NWxp+|*jt(D145 z{=H}VZl4J6zT#7`b!BjOtI*1Pv*Z&f*{eWn%i#T1p}`?osD`&49_-#0*?Y^QKx@Xr z87??wL23ctVE0buG|#9^DSYC9Ofbc#d0EQj+=mo%4Oltc;{s;X+3zu7!Xcfbl&V#i z!(py~{dIW^CdWT$x>ayhIb7%}xHi`W3(77PTv-mMx(cqzVK9XTfO5794wl2su7a!G zCRk9;Qo(_8INw!pm5ad?JOIj06|9YcOCI1NQ$Z^+N}+pJjx?k-2EKVUJ%}+1>A^xH z-4E|P((g0#2b?nAB68$x-_3UiZXb#4CoLXf${!wkaWZ&>mn+iVZbK9lMh(A!G%BQkX&%39VR{a_KV!^ayP4yKM=(Uf(Gm^IQxrS?oyWl z)54c_BU}O%3E$XlU}*hsz5nl*#vHL2u_Rzgz>_tU z|5qeH>;Lh&4L09j`fmG<`*hz5U%l^coc)h@zvVsS-RgbTJI6Z-C;$J(^KH)s&u&kL zXTE2O$Cvk`yl>}S$lH~-Hg9fTd0tNLVD4|_ew6!GZX1YMKb8b630M-aBw$Ivl7J-v zO9GYz{u4`}c)ZhYuPPY-%HZi9#N6W4Z)Dp(KF1yKYkt4KxKsd2Urq#Qbpmj=0Nnjj z5H*_Z@SDFDR+P`n`tASeK1 z1YpeiB!GYbj23{=&nE$B0&u4Q+_^3ZKuB`TC;);5qdF1+LXczb5b1ZcC#DNIjwur9 zMQan&g&4<-6zL<^B&G`~jwuxBh0i6X3n7jfA<{=Yo0u+SIHo|P7labig$TzC7wN;F zNlX_K95YO$4_lp>E(ADwDAH?uLx-`0xt1^6oY;T(b2xs>{G;=S=@seO&%hW zhvai|O?+;jNcIgeljCxGMY7k&$<^_>JtEm-#4}XGrHwl{qh;rb^7nkjEfSY$u5!XGU5?}@nvU=v&`hUdS{B{OeZI6@wqcZaz>_^9Gkn?f#hjEM}`^!pq4(y?sO9% znjS+yqxFB5Z>7!mL*F0xdVMGH7J!xiiHB;dYL)~n30M-aBw$Ivl7J-vO9GYzED2Z= zuq0qf;Qy8cM&l&}_R>-LSy_=ccZW~m9Vj11_IEdJ#9^7%_NL}Bc=dq26gxA{fwxZ# z?0K_)>mejB=vcpT)9Oua3z|pZjRW?gqWsLv$Y=YI(zw2@edRNai$>rD1N1y2BYf)$ zp3iPuzqYk~_N)_tU zmIVH@OJHbDwgVRs7TGiAhTQy407t%?pSd&Ugj{?iKi_3OdMK0)-#xAf7?mv^Rk$;n zLRoRw^;eF{G7}#RIpY$8qnu{q>`-Q0VqjFJnb;W0h)dLlW{5;^J1gYimjF2O9e9Sz z{_PnJA$|dXV~8D(T&^N_Mtx}D_MU+gJ3P75ZNqFWww#?gL*4JX{>jyn{ny#6vwq_I znX@*tE#qm&RQrFim)Tl;L%k=xV`QVxlb_-~xahmS@Sg0#!b1CI`^MH4YuYxhSiba8 z@oRehqFFPVXO%S1m^pV=iFh=zq@nGF(8{*vm)Et`cdTkFDQSARdDiS%izbz9cz(_D zruJ2BFDcKO+Miaw&0q0s+scg(x2{FD=2?$6Pb#Tj)3Kqgx$UKm=7ag`+S=9cRE|Pn zMMuY)<;Sr#V!CIrk^jY0m$vI@NDnzlNFQ z8YR{-np#r!(!}h-;$pi#U2;|5(jMAKoQV(jC2%JmPZYup#R+$DQ%k6QAjDOP1Di4P-+vt&b9(gyj0xjcuzt*1v2P zOI&H{mw@@DzN78wr;#K{i3doQ5195$GeeZPe8l>PGL>Aj+BdCTym7smE2WCgt#6q1 zu!$01Bw4N_wIP(}YvZ{?JQ9_akkhn88BHu{YEU>yS#+}A@zApRXIk6a+t#QAHnq0D z5;A#gYG2a2UX}Jk%Z&Dx5;LA?GZZ4mvnusjY^w>uD>+CDxlmMpL1}hjX{o(yrL2DI zidJ;X4MI`P&r=hGVW#|o9V$@>#uK&TOJ9l~TV{5&u3x28Ax=w`wnmj2?#?cpFu~q6 z+pN+{p|%wr%Nyn{n~Ro>eyNMER5a=5ZRxq#s#Vyk?@*if(NNpW4z*t5LF1-pT8*J= zQb}ArVp?Y7I8lww6U=Hn()vPML)+6R64i))sg18jG>ONOcwwg0TcasrlsrlE5SP(D zk1x?a&nixJmYvNY5bbl5N|ff}FEeL0n+n-+S9am3QFgt`taZzVw)Lnl{i%tsDLtH6 z5>ho|6CSBDr@pv)eaEJCW;a{cx?#hM9i&ah0N@xadVns~rDfeJjB;~3R#UO&XMaN3 zW=fo{%vu%N*dd1}qO>uzwv7li;IqjEeQn#Y(qv+F3C|Uy&034U8^8d6m=a$)Kb~09 z-wUV3*A*3v?A|?a`=VJ)_`uAzP!V4eKSoJ6 z_TwflrKFTj{YA-QYy0X=t*c4x=Nca;C9r8E zBw;ieKPDYwMC!8oFsjqS@?l+hZ8SF%JVb0f&3SZLb8`du;t%EVT=C;L4QcLZU)|8! z@gNNYa%eXms)A{T-pp9DrsGAk@m{`@`$n|*Ma^Wr&B3305{kydxPpJ77F*o5QBJdH zlqsXw#=1{deUT`+EV0})Q^K4@4KZ_GeaG6h@xzlC>*F8JS)@v)A+%xLn%0-&LCUyN zQf9L`{({tKbAjZzVaBRwH;IXDj`49~0{3RZFJ}81gPhWyNybevo6|fEOM5OEQ}O%@ zK+NRMS(Yet8RL&WLfcF&;yzt3Yg%ti;B&->2?@0nkJGeMvM%#;)$tdcy1{(LNTFDI zTaFhdG140 zXZ)#8C=d^S&e>qjY_fSs6(*I;nO)z}{&Z+{^t(Fp%$dEQV}sHi=gf|q*`o59R08Py z_BB{5$yyRP?ooPw(%0Z+p*s4|+FwpY-16 z9q;vde(3oQZUETj+2~p5nT#yfk0k+10+s|U30M-aBw$Ivl7J-vO9GYz{-a7@Y*D6L z8#kzbNUsC9aBbky34VDymVOP(;K9UR)!2~)p$i^9=!|Up5MEUYne{?j`^M$V9vWLn zkiOpSeb+B1h0J_#1cYJ-O<}J|5EaG6c-?KasOx6`>!8EO1SfeOa}{#U*1qM z9DuQSWkICpN+N)Estbo@y2}f2+CSWLIehK_=WpM%X3e;v$T}gs?M&azBa!3X0~g+s zv}df`80u(mT+_O`ARnw1LIy-Yyt*E>Upl8?2tDTaqR7W{78U!5-M$;gK{b5-{lQOm zL=(m4Pl4CW*WIfmjrAbkxNy&Pyvl)JL>Emow#J6%A!h+G^2K&eq&oO=GwnqM4u0RB zc#sqKV3a%4t`#`KH}^$8J2}|--k|<&H2YXrrv1JGM`YiY!S{}E<3x_%z-9PR$e8R* zdrg63@%&lI(@U~Izu18cXq?FV@AX~1#hHbcklV1tsUZ3$L+X`SWp}#_MzVGKv@$U10QVZzj;0m5nb}%VTZU2!duRU zw_Jj5NAwHP`a02DoxTY5*=pZUeLwO2t?#dWk-UuDtGO@d+{k&!{X6dYu0MBa*?*b6 zDmy=`(fJR~QI4k_!|b`XgSJOfcJ=9_oQ@)Gp6zht{R4eBjs^UI$_l?$p=l-lseby0 z=!x*P%MUfosK6B|3x0H?r*g9YM>n=|O~SqJK7U6R2}H`@1$?E_bi;wvfVw!^^E=WCY-PJAdc)o}}=4Ssav zaF??v%TcUtUT8Zsc&MkZ_wC5%pQ6}cg%$wsX0e)1f|XQ=s>Kp{2fHqCZGHYen&q4A|$Z*<~qDHvKgU;le= z@&HNgDF?H6cJv><8s73557MkP1Lsc-T+q2-Xb@U}6@lM&35@2~@H}Qv6-om-eZ9Mg z=_^MuqEd;XS3?!JkwxBG1tzS-K5KaMs);zeKDBpW;GW(Ie*CIW8f{OdVw1_tw%0(fq38T^WjrFHGdt`=j)CJ_Z}L!a6t-zds~zNe-$+Z zPhMzBWtyWbJ;w(Rol^TQ$&H6<(MAwdxVsnZ4&1!Jxi9LA{`NZ=~}>gPGoU zRUW`9D#qg<&)qyd%R+fDg-B4rhcV4yXh)j9WCST~*UPs3iqiUPE3}|g+N)OwK6=w^ z9M&5ArpCE)UW_}(&_N(hPGaTd!f7xP>V^-j&ZOz)l)%kF7&%{ee-1iw(2Eu!bQz*j z%jNgYLco!I7vuEe2c2CD3TSZdu2KU9<@fK?zgfGj;=$s2&_H zMD>JiuS&C~LaQ`I#hjxXp*O2ENu!0iG4STr@cEnI7Nr=qK5%*Pz~_Cvry@H~VuHjJ zHxaf=xc68I4M>_6sEz0+p@e1An7HwNTScu{>~TGY>qVuAHtM^&eelp8mKCb9a2N^a zdE2{cMXD?OHD*OHoBV`LX%{n!m6?>io7GdXGi3~Wo{JJ^ov~H8s5E)r;ULf zo5P1cr;fb$QlMsX6&GGrH9w!Kv)1;uTAiv2e_Xp5f;xOT+zZb>-iamNZoKazEJ)Hc z#hTLZ86ui`tZk1-*7p5@kJ!Wy9>N1|^$*9X{e!FSqShd4(NPZMJ4) z$JY8q_4VKsEJyZVWPZaJ-%=TiZ0(F3*$Pb^_~Hsw6FM5fg<4R`s~C=s@HmWz(4JSk zqQDupU9koFWr19!1Q%tv%0g;2d^K*jD`^i4e6ikHyRS3Agvv$hEPNM z{f3gkb~>!z<1t!hrz|``#!Dcsa43yAWU-pX^~bP&1tFwdExex$nu!~wsM12Asl%Rp zvwzj*2u3!}0VC;km(bZJ zTemdUL91GkB03X|J7VlMI1sZ=)BNCI=hne3JB^hg-kaIot4bD07`5g6SL3e=@}#HA zMbF3<3@o<2r8FZL@JnS-CyyDJ6=&jqJym1dvHo4%;ls!KKR=Gap?T?orBc=!D-3#u zVa$Y&oH6a0bE-)*h>m}$OLu1pE|%N2sA9kn9c>PCAt6+Q>@yyd)u954kjmEUyZ%A{ zah-&5@hyItAV*~zgP%wZ@7dM=(RKZPr%>!B+ncIHR9?&uELf=lE3De8@WBdC)7+nV z>{9!4-}MhM6r|x;wO7LL?1&qjN$1Vcfk!a(1;*$(nL?PYw#{kA5u)eFEeZ4y(XHTFuFkmqB2C9s4kW5pqX$W#(UiNpAcFpLTU+c@iB*81OC|6A*SF}7Oke{213 zt^e6-!z631|E=}EuuZM?zqS6S9S>{$Px~UY7Bcq*to6V2UR&#b#n)r4|E=}^dEP1e z|9bt87zAvbkl!!7<;>vbGseEv)n0M`|J}CVwfXM$e$%_wJIT}MS&+9a_j|dofukO?CI@h;ci?Y9+{aSWm)~{tvaGrL~&-|y%U72@ed^6+Kj6BD;9Fy&TY=6go z2MGQD_%nC9(_XBtyd%8l^T-!h5dVSDf;!=4N!%pi1Bbkssa5*1>%@0F&~BmFXs&tT z{wzCu2h)noEgq&7-N|Pmil`28aMU0cs0K0kPzF9fHn8&wZ}DN9O+Ml2feOUl|EZ7Q z*@62Bo&?$(_WRdvm~o#I z+SW(zB@%BGs+@y_lmd1_!FKcnFOF_vM_uwCxpEyFX&Sa0Yq9sFx`6Z%(}Yl7Er=zJ z7zT68T9BSo&m^@#HB$xCymQ7(!)c8TW!?e{@7dY^(M8(VGqTdDvbgMQWRTxohj-c7 z0W`7;QuR}*=@$;iZa8gf-`-}*4Y3zd&J5o-6UWv#$QmI$=MF^9f3dbM3q|2)VK9u#i**0(%rWw)+Zkc+K$F0nf+d(BQnC%AP6gOE%V0D?KqZPLy)H8Cj!& zS#ibj7ANV!?E@_}RQFB!iX(wk6B@*_rj#qN#&J((uPyjgkgU_j|v@0>n_&J)wKUu4& z^f$F52Seytg&307Zh*M-LQV9I7jqK?7G(nc3Vd)Nt4ifV)#a)9RUE6skA_=cPWiAQ(Fqr!>l0*Ce>M3RSJ!wuVc z1Jw@FAiQdd5O|?m6*%_yGJl^&xqA_g~{6Lm4y38o6LH@&24E zj(3zJM=g|N9wVM)lu^ec2nL$)?wx(TZyBw8?gNY|x~)RAQ&Vcof^h zC=}H+&bii?7==^?F(_zNmGrxoe$^Rshwz{TD}spp2;Y2%``x;7(Oy%WaqSgX;?jCB zE}N=^y~=#1S8X@=y5wlWdTK~VTy(%CK6j5Ou{1M%iDu&^Dc3lfO`?n)B>6rCW9SkW zBD9o=VI||=6ludU3PA-)!(rb0RwaxId`C6V%fda~2wNcALtNmX`zDIETJ88b2vhj6 z+J6j+!p+Q)i8RG2zH;K?>cb4YWq<76Djy5fvy^pWQKdNi;s=8r|uR}LD{xbYMdp) zWDx-%&5cUG28LviC3DGq^T=iR@;MwC1|@I?`p|=*vGZs! z^{Zr%qdiy$d5b~=6iUn_j7dqzbnpbimUghIp$07=;{E^~Bk7&{03C@#ob;u4ihlI6?MMRSnw(YDFddjy=vJ_sc#+X} z^;D9OBM}?J*IRC|2pZWV4-_3Y8 zBjET8M~m%s+XFV+y~}83s;^cBi4bMsP~Mc;a{N_Kh9 zELXcUdWd)i3i%T2QYL};=)_=IfM1l?S0MxUf-f(9`6+rrD=jjB;3-m)tA#4bwR!*6 zYmrVm_#zE8&SMT-lBQ%rjSVsB3p+d!%48)7(`h0`oj)15cqJ~1NCc|d%fO|N0u?7B z2%4uHhD4W>EE!n~;J&77YfA}_PCsz*t91%F*jjgVWX5}P_!C;%O_RhNdWC;N;|l4FUo13Fn-W{+=mZ6=5~q$dBm9gzFe~7KW-NY$p(jGZ#f*TF zASNVthAfSub7!EEdi5eIvuoO9X%Gr+_e*tvB8cOCw6n!B#Do)fg)62SUIv3A;UDF4 z!n-dFe58jjy^nEe66dXgMUT+EzN_2R!H18l(F7r)!p*L&m1r)M-QIY7=6;CrPGkKZ6v%e_I@!K!5ET z^)NNho6dXGIYy-yIerbsBKj!Kb76BFtLn(X=!UDVgxcYOYFPOn@6&Ku1r;3>=nob z2vkw*6R)QmAqTrrgc(&R7L=M1fX>#F=I_d!E5@8hCdLtz=M98zb3=h?8pQo#iSMrw zpT$bwUq_!cGOMAfQZ}qgo*a%FRcAmLPaN9Ib|!gaJGVx*e~eDUQQ8BywuHBR%&P*9 z*v7yP7)$A^Eytn8g9pwH?$zUvo*Xsy80D}vqBaxk?JrNuQDJ4rhA&Td%n_qd#e`TD z4oE35ylK8UcN7_4_tU#FKj}cJY8c; zxf^};_Hi^N?KqkmSce%{j&5{n=L=o6+-ZOlh82|dtG7?^ZojZ@s3b#+i3Zy+Xq+@O z)W+ZZ;Df|jcgEe4GZq&3qfODpvlgi(s7we1?U)#2oH)?ujr+#!n6r3H2LXtaQT2-2nz8f)X#p>Di$YR&-Q`841u z%;q|2HbW4`n#wr3ii{tLjLe&42>lM5=%y6_RIK-i(Yz6;fIcQtIMlv^X1zq7*;tfE z`8ea;*<$1$7u#*3hZ?vjWBiXF=Y-bsti@epb))EoqwiA5;W&(3^eW{1*a4vP#5|?O zHkavdy7t+?2_q&QR*@Ej;S085AiO?H6f|dSY(dek#|4=Y=CTD?{4}THywTNdxQ?C2 zQHEoL!lFsKP6)1ro#Y?rm!K zFh)U>SKiuboJo50#2A%9O*zBIr3yU?XgDLpXCtuVfZ37vTKH7p12c%u!qFxj_|hCI>WH%wr_zi&-)$k>)!i4|BO=rb$Od|wVXNbzjvQ@{f%q0D<}J0b|`B<-V1QTxj6Ih zG7n`wnK>z=H)Dz8Hyq0y!|ls$KLVM5ho8q@6UyvdY6^_zG00t-B&NzlyQ@0>8HYM? z8u;vqfs1<(1z@C#9q;z93F76C#u1nM4NTk^`VbeOoGs>|!DwOD=lP}eq?uJUOe;Y9ZM@aR(!t)` zs+Wbl3tQr}Haf*^Y`vzc8sl~EOQM+Pn$3<%I-~Nd>Wq4hO&vvf z5aa>G#P=o@H?bw62U4-M;zePOc@`&%P>#twm>b9R#FY@d={XDI2*k=Vja=A`S%x>r zsXK4E(s$Fi&}7{UqRvwm#fmmQK85K7{Z$Lpqr<9?Tsl8tZfgD|P=mk{)R1=0j~H4l z2AU=QO*9&63suv;7Td_CQW%rGc>l^dc ztOzQQ;*061foikc)3Gt`_H53pOJtrZmapgin}_4th9VZsniyKiM<`RZ4G*BSc~c#f z`hwmt_j&3*E9WKBm-{zASKG539$zP#IeTubAfk5=7#%rKZ5VuFCX_B{!=Mny>0qhw zJj|0YHMBmwLy&)Qj@ol@Za;1=R~JF5-J7caXi^~LOFsNQ)&lj-$jEa)_pyM)4BR{u zi_sUf6I)#!55?75N|5u)x}$HXEzPDd#$wg(WB|9?z(*fM-rs{<-0WmkLs93hbT|&WY~+(3F7z7R*6@mN5*yvEXd=wZF%Vm z>%xf45Ent26AqcSxatWP_3Yjj5PxaA@U#Bw$FOka+x|n(ih{>Bs^bbQBw4Vqj%l{% zksGH_&|cD;!#bcY$fc5FKnpSn-K^NMqT7SCBLVQBemlHnXXMJ2 z$Q6pOP|IVDQR5zHGf!-SYFOi9Wq{e3b|8fPN{?XH;?5lq=5DWUIIET{Eq#T*oJN0f zB$e$pcxmQ5L&~$dLG2AO=c7fZXGyTSk@6zcMg*RqKCGVnb;)WX_F8=$vADs{=vw|d zu9~_nF%zD{`s#{$^27Ghmxk(!2F4VQ-Io&AZYA@LNzdq z({QzWzi2?QdO&6*)2_mS&$N;E8(V9W z_|^$SyLQv#YT6L!n$bqJd~@N9xLQV6mCD_3w2N^YxBQ%9dko4T2fb(#?nc}F0VVMn z=G_;$cT8gAhW(sPO~&%Vj8K3r7ukLmK|oM)(wzO>Yy=v6Hn`71+-yc?ytm*Mxof34)?;Wu6Pn$uEA2-%H8y+EW!gGZ*I_oc=h`XsS)55x2xtDWR8PPUKL4 zwU3FmFRM}81@3gYjmzy~Hc55Ud}GJ!{O8Dx$Meh#%cXO*7m11 z-}~O5dRskz>)GSEH}9+5PjXvx{x#=PPKW!)?z8SD*M3)V_Kxg~tk1GWIe*Q$DD$a| zZ)fbx2s(b#@us87{x|l+Ao0ueqd%aJ5kt)USEL+q?GL=GQny$@7-jf^6c#Ao^aDEs z<{(;#JaXdZGww3jzrrOG)TL-5GeI;XC4k76r<@vtkV?yc}xW!fop zwM#NGbM;X~CiG$~XHjDoULtjnWh=ar_Dgqlh0kB6?kg5~Ji|@b?;vvXUyyxPa236C z5e97xxgA@LYo)}kK$w)D)r&;08MjF#feirJaSg-Tw9?@~XA-OhnBB}#nCwj0s)iuM z=)ks*Y0(~jL?21)zOhjiBFd7Z9@AtBa6ocZQ3UMRf!m0w-NDl?!>B)+SNKiW3xyyy z#8Qr0!m1Q7RYgZ2#4-z4tnSfA2uXz2t8JrR45ZTFhT*KC#q=sDTyhIGX>2&~xnX~Z z<1mP-gaJaa;B>Yjy!{rG%p8N*izobd@CPbcX{vA63y7i3<)XdF>2F{bsFEi(J@=jZds$kgW0hRws&3mBi;|m>IBo>$`#L0qKazU}qOy5-8jR zYyqJ%vJnjWf>>FSQa}uf#Bsk{LbI=U+h4|2`v$NksG}C9i8^ukA8=erM%j-ja(svD}>@MA>`vfCv zpHusa%7`qUMk(08hj5gSmKS6kVRd5M0)_Y1-mjTKBD@})gk@3Wau4h`5lm@#yIASS zPCj*s$YHqa?lqS2+vw`bjk;HGRP$_{XyoD?wQgK6dj_2?WNoESO%1R&c;}=}Mw4Q? zqT7d$-iCB)&0XIJ5^+ny$OW z4A-Vs0WMkD)41=(^fc+V6edHH?ji~+SE&@>d645>lmhj7v%ALi7nVb-o-O2%zcP-P z)Nb6>iy_|_ID~P<9wFXhj%<6IZdr%5VBUkq-CVWj8}%&FXe&|`k-X8kNY)ExwyRQi z61Q*Gv`P&ldsZ^LPM;wd!GtPc}yQ zF}q!KxK?qZ8B?BltTb^m&67jcG7E);pc*VZlY4R~WQeO44JuY_Wez=8{<0NgG04{;U14zxOt(L<<;UzsZf9 zwYpstQ1(P@0nr_Q(u!0v!32)?AKX4HsYeeg2=&2SuId7o`1%OlCJKD@akW64myru% zQJ~oB;Xz7Ww}5+<;3Q@Yi(YAt^VX^u^ptCPX`-Wd)Z(=SeYdt_z7}E-+c)AlnWiOg zkSD0i{aEZ`ozC(|-sJ4XI)Rylr8=*LhUg<_;f_=9bH~F(j~+7Bi`}~&4g7~(d>9PH zza8dqedKI3vl)2!)aycYzGZUofQG5;u{hMJgbfNJ1vCEBYuHi7%ryo3W+t>3Pq8>P zp3?e1(^G2m{y*vqBR_9k9v zXv9lw)yL^$MU4txm#cEr2rg2&naJBKytKp?m$?ha9H_ev*b_*4_oe!3mN)>%w9soX zz$x~v@fy9I*m*`6ObLSK-{X&19?#KBXoqF>Yf|jsP!)UpTP{quzQHB?)y)@ObPdsq zsnVM}UX|-eufl0mZV24AkJTJ7>C&+-!8Ejffyj*!B ziRi?pqS@*BR(Jq_tUmIN#bSQ7Z9mq4Mz zY4?>DIB*ENbD-xe$IZ}fLq&F{+gDzo@is;O`4ee~k?iPrx`c@Noq-|>Cqd(F4h zH_rPr@1J{bdEduP0L#4hdhhi7i|2cutDe1{XFU&iM&$in-f!i-pSKZNtRG7PmIN#b zSQ4-#U`fD|fF%J-0+s}RWhF4NDA!@PmwG&xuYIn~b%6Gy7Zj?hSsQ%0yY zf|AwG4HFAhWP7MkrXrwO{oF8dgo<1n8o@4izS&d#+;CR`A&WhpV&Zd6s9@mc_5OEH zNA_Qk9~veOSE)T08qWOl>z&lk4HJi{$Y(>t%(70v*{^z?F;oDeYnG>q}6>8nB>PSA`$4R_{IdXdLdMD$mN@{Cht;w)LiUAdHM%6Ua7mqO{q zi3ItfVN8x%LTe}oq;VFJIHW%fW87-`Qz17e5Qj()G>mbn>B~bdP9P4Et~C^AQ~Cst zC!aWcGL%iOd@dg86%`G4Wf7pl06Y=OA^^BV>R{(Fobm#u(n%Q2x$`1__GYDgLnPs62wPf{k!$gOQTpDs1=fAI8j>f~IG!Z#YXhzSZ9{%#2Q91OmIN#bSQ4-#U`fD|fF%J-0+s|U30M-aBw$J4 zS3&|D|9{)&`=RgluSA8dN?H=IBw$Ivl7J-vO9GYzED2Z=uq0qfz>tL4Q+UL{HoUVFPE$eZCE$l?zX$#MJ|`CAjB`<+=v%*()xc? z&Og|Ef9AX7+vKbDjq-lwz2@!oKH@FGdjP-bIqGTiO!qkR{zu-4yiIwvd3m{ioO>bn zrQAiicOaYfV@bf0fF%J-0+s|U30M-aBw$J4mtF#QkMbbw)}HTyEnMO9WaoxP{j8z_ zF~b~k8{}7^RNo;`#bqwHeXQM=ofEnvYo?LUM7aPXf9&f@MsYgkWOZ3xPywo+sy<1s+c0; z380{1u?1y>hM^#O!F*ytQ->1PRZN1Sf*hftq8z-Vwze{+ocR2X8RPS#w|0m?N{UH^AS8w^X7->;xJF^x9bx$nye+_w5>ZU5?3F@Ov>i-hT zv;6^4uc@fjVnh@r9su#&SmHko<*LL@RmzDa{?DNt+jod~RYkQHjFF7wTyrd$;Eoax zLN5P1O(mc&Xj;k=P=`@Yk#QIe6Gf=Qk3-I%ebu>l@Z{V5ySk@kibPW_v;HBJnL$(o zb$DZLjY`%@`meq$E@Q^j49e`5ng2e-dGV5{+8Awfl1|6w9q-`k5LXkx)!&62KQja- zfh68iJ8*8C{xEQV8xkH=3bU0F_hD=ys(f9p9Wv`wUaOe`?P6pm{{nj8T)87$u6Dcm}C}NfSymCV}Q*Ni#-G zT4Iz4G~-fDnp$Al=pl}2Mbs?QiqI@YXqNY48Z(BWmS%(5v=AZI=0ITCoe8uL#b=B% z*3xV+ofg8hwZQyQLmWY&0zp#+@Tw+y;TSIiq9Qisn<`aM3#{@N8;lU1RWeX#9r#7{G~qR_j!CH z)e>7o)|e-umcYcqA@(94HD{5LsgMotryqRf!B-p(<4fpiZSsgA_Tqe>&xPO2-UxXd zw`tal84l%JsA*Q9u3(6LY$4&t8Uinn16WXuuark_28bsi@jFmAJU;7i2@DVY!|m^JdJ* zO!5>A&(o%R;|X|)xflY?L?Fpi@H|he^nht0uu?-KJTaLmZ|s9m(>$#@k8%k$HFD*t zqisvQ(9_sQAq=|Ha;ar0pQ%r|+_LCvq)#nDkumNWwJk>1X*uzk=?J{h^9d4&%}hGg zf{~Pd2d25>Gt>Ea&P*EAqQz$BXCku}sCNyqPZ>sRPcfRw6{7+)T%z*|3ds_vX9w!D zJwiNr_Mbh-iV@tReOZLhus|!DmUG5?nA7anCSD1Zth}Ih`s>GXxO#EYzX} z8Z*IofvCMPiN|V_QTutsc}9$$nJHBNd0JyeJe>qI)iXIAkwPMvr%iL9CZaVa7_H%u z8p<+Y67dfqg?ZXk`w(|*W)%i0B<7`uki$H&{?GM!Y`(wp{deEDd>4HOeQ)_Xd`o=y z`>?n5a~iJ}%#wg50ZRgw1S|_tUmIN#b{6~^NK`t)P&o9jlJhyh> z%F+JQ*TXya;o7{BIZk_iL1|7+a7pX>XXqV$+m6vLOYi9sZlvUwx@!WDJVS5%GoKf_ z@O)UQtD16f21?u2U673gUukxA;E~9Yt$4!B==^bA(e+b_V@le#|fQ zV_pg}1%b>!-4fpD;m7$Ics#5qBM|)R&CPu6q>tVPkYD7e`^H6fBMhUr0QgF)W*{Rr z;W(pM;#>Fs{YTPLi&skmmIN#bSQ4-#U`fD|fF%J-0+s|U30M-aB=8GMz=<3V-;XKZ zOy5s^KlTmt_IbbXzJ>Gu6LAXQOV4r7dQXF=DDSWGZszUITb5Uv`&YT&%srgDA$Lyh zxSXHn{9(@5b2jHZmJ`g$b^pM9-TkinId{E#l;nBW&I$lH|y=JXR@Yejd1=?=dU{tJJ&m#oF$q6nE7SqhnZi?T%37Nraj}oWn9R3 zE8~fbO1vZCE5|j*9>;3O{f+|rU)#TFf6xBB{Xu)N?I*V1i>dI0$8&Jxp{S_HU04u$ zJaXg{?8)@?e$>DB*kEU8xVyKpb;ZrT~|zz{uquyzU}Oaj61a znhyA=0(>+b@DT-w-J)n^;)`CQ0GFf#wkW`sbiif>*qjcySOG3h2VA587o`I(RDcW9 z0T(F11?hnE72y1Iz=sv!!|8zY6yUscz_|)=ZaUx`1vn=i@F4~GP�f0&GeLd{6;C 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 UU`fD|fF%J-0+s~+Jtgq}03pOK5C8xG literal 0 HcmV?d00001 diff --git a/src/YunDa.Domain/YunDa.ISAS.Redis.Entities/YunDa.SOMS.Redis.Entities.csproj b/src/YunDa.Domain/YunDa.ISAS.Redis.Entities/YunDa.SOMS.Redis.Entities.csproj index 095c864..9828f43 100644 --- a/src/YunDa.Domain/YunDa.ISAS.Redis.Entities/YunDa.SOMS.Redis.Entities.csproj +++ b/src/YunDa.Domain/YunDa.ISAS.Redis.Entities/YunDa.SOMS.Redis.Entities.csproj @@ -13,6 +13,7 @@ + diff --git a/src/YunDa.Domain/YunDa.ISAS.Redis/ISASRedisModule.cs b/src/YunDa.Domain/YunDa.ISAS.Redis/ISASRedisModule.cs index f38cd55..db68448 100644 --- a/src/YunDa.Domain/YunDa.ISAS.Redis/ISASRedisModule.cs +++ b/src/YunDa.Domain/YunDa.ISAS.Redis/ISASRedisModule.cs @@ -18,6 +18,7 @@ using YunDa.ISAS.Redis.Entities.PatternRecongnition; using YunDa.ISAS.Redis.Entities.SortDefines; using YunDa.ISAS.Redis.Factory; using YunDa.ISAS.Redis.Repositories; +using YunDa.SOMS.DataTransferObject.CommonDto; using YunDa.SOMS.DataTransferObject.EquipmentLiveData; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionSettingDto; @@ -62,6 +63,7 @@ namespace YunDa.ISAS.Redis IocManager.Register, string>, RedisRepository, string>>(); IocManager.Register, string>, RedisRepository, string>>(); IocManager.Register, string>, RedisRepository, string>>(); + IocManager.Register, string>, RedisRepository, string>>(); IocManager.Register, RedisRepository>(); IocManager.Register, RedisRepository>(); @@ -98,8 +100,8 @@ namespace YunDa.ISAS.Redis IocManager.Register, RedisRepository>(); IocManager.Register, RedisRepository>(); IocManager.Register, RedisRepository>(); - - + IocManager.Register, string>, RedisRepository, string>>(); + IocManager.Register, string>, RedisRepository, string>>(); } } } diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/App.xaml.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/App.xaml.cs index d77f808..f372e1f 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/App.xaml.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/App.xaml.cs @@ -67,26 +67,18 @@ namespace Yunda.ISAS.DataMonitoringServer protected override void OnStartup(StartupEventArgs e) { - try - { - SplashScreen ss = new SplashScreen(@"./Images/splash_screen.png"); - ss.Show(true); - _bootstrapper.Initialize(); + SplashScreen ss = new SplashScreen(@"./Images/splash_screen.png"); + ss.Show(true); + _bootstrapper.Initialize(); - _bootstrapper.IocManager.Resolve(); - _bootstrapper.IocManager.Resolve(); - _dataWindow = _bootstrapper.IocManager.Resolve(); - //_webApiServer = _bootstrapper.IocManager.Resolve(); - //_webApiServer = _bootstrapper.IocManager.Resolve(); - _dataWindow.Show(); - ss.Close(new TimeSpan(0, 0, 0, 0)); - RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly; - base.OnStartup(e); - } - catch (Exception ex) - { - MessageBox.Show(ex.Message); - } + _bootstrapper.IocManager.Resolve(); + _bootstrapper.IocManager.Resolve(); + _dataWindow = _bootstrapper.IocManager.Resolve(); + _dataWindow.Show(); + ss.Close(new TimeSpan(0, 0, 0, 0)); + RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly; + base.OnStartup(e); + } protected override void OnExit(ExitEventArgs e) diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/DataCollection/DataSendTask.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/DataCollection/DataSendTask.cs index 5e6423a..8e10e62 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/DataCollection/DataSendTask.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/DataCollection/DataSendTask.cs @@ -114,11 +114,11 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection while (true) { await SendDeviceSlefCheckInfo(); - await Task.Delay(3000); + await Task.Delay(1000); await SendSecondaryCircuitDiagnosticsInfo(); - await Task.Delay(3000); + await Task.Delay(1000); await SendEquipmentInfoRemainingLifeAssessmentInfo(); - await Task.Delay(3000); + await Task.Delay(1000); } }); @@ -375,7 +375,6 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection } else { - Console.WriteLine("装置温度值超出范围, 设置为默认值 60°C"); data.SurfaceTemperature = 60; // 设置为默认温度 60°C } } @@ -392,7 +391,6 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection { Random random = new Random(); data.CPU5V1 = (float)(random.NextDouble() * (5.02 - 4.98) + 4.98); - Console.WriteLine($"CPU5V电压1值超出范围, 设置为随机值: {data.CPU5V1}"); } } // 校验 5V 电压2 @@ -408,7 +406,6 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection { Random random = new Random(); data.CPU5V2 = (float)(random.NextDouble() * (5.02 - 4.98) + 4.98); - Console.WriteLine($"CPU5V电压2值超出范围, 设置为随机值: {data.CPU5V2}"); } } // 校验 5V 电压3 @@ -426,7 +423,6 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection // 设置为随机电压值(假设随机值在 4.78 到 4.82 之间) Random random = new Random(); data.CPU5V3 = (float)(random.NextDouble() * (5.02 - 4.98) + 5.02); - Console.WriteLine($"CPU5V电压3值超出范围, 设置为随机值: {data.CPU5V3}"); } } diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/MonitoringDataService.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/MonitoringDataService.cs index e4360eb..a3c5f2c 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/MonitoringDataService.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/MonitoringDataService.cs @@ -110,7 +110,9 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis if (settingModel.DataSourceCategoryName =="综自") { MonitoringEventBus.LogHandler("启动装置定值接口", "装置定值"); + PortProcessManager.KillProcessByPort(7110); PortProcessManager.KillProcessByPort(2403); + await _protectionDeviceDataCenter.InitProtectionDeviceComms(); await InitSecondaryCircuitLogicExpressionDic(); _protectionDeviceDataCenter.InitDevices(); @@ -128,10 +130,12 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis public void DataServiceStop() { _dataCollectionTask.CollectionStop(); //数据采集停止 - _dotNettyTcpServer.StopSeverAsync(); + _dotNettyTcpServer.StopServerAsync(); if (_settingModel.DataSourceCategoryName == "综自") { _protectionDeviceDataCenter.StopAllProcesses(); + PortProcessManager.KillProcessByPort(7110); + PortProcessManager.KillProcessByPort(2403); } } diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RedisRepository.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RedisRepository.cs index 68effe9..1bdb174 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RedisRepository.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RedisRepository.cs @@ -8,6 +8,7 @@ using YunDa.ISAS.Redis.Entities.CameraAuthCategory; using YunDa.ISAS.Redis.Entities.DataMonitorCategory; using YunDa.ISAS.Redis.Entities.LinkageCategory; using YunDa.ISAS.Redis.Repositories; +using YunDa.SOMS.DataTransferObject.CommonDto; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto; using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport; @@ -20,6 +21,8 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter public IRedisRepository AlarmListRedis { get; } public IRedisRepository EnvironmentTempValueRedis { get; } public IRedisRepository EquipmentDataModelDicRedis { get; } + public IRedisRepository, string> _deviceBoardStatesRedis; + private readonly WPF.ViewModel.Content _settingModel; //public string TelemeteringModelInflectionInflectionListRediskey = "telemeteringModelInflectionList"; public string TelemeteringInflectionInflectionZZChannelRediskey = "telemeteringInflection_ZZ_Channel"; diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/FTPHandle/FtpFile.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/FTPHandle/FtpFile.cs index 6aa6a31..9cf93bc 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/FTPHandle/FtpFile.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/FTPHandle/FtpFile.cs @@ -73,7 +73,7 @@ namespace Yunda.SOMS.DataMonitoringServer.FTPHandle // 尝试下载文件到本地 if (client.DownloadFile(localFilePath, remoteFilePath) == FtpStatus.Success) { - MonitoringEventBus.LogHandler($"Successfully downloaded {fileName} from FTP.", "FTP信息"); + //MonitoringEventBus.LogHandler($"Successfully downloaded {fileName} from FTP.", "FTP信息"); // 下载成功,删除失败时间户记录 if (failedDownloadTimestamps.ContainsKey(key)) { @@ -137,7 +137,7 @@ namespace Yunda.SOMS.DataMonitoringServer.FTPHandle // 检查是否在上次失败之后的1小时内 if (failedDownloadTimestamps.ContainsKey(key) && DateTime.Now - failedDownloadTimestamps[key] < TimeSpan.FromHours(1)) { - MonitoringEventBus.LogHandler($"Download attempt skipped for {fileName} from {ftpHost} due to recent failure.", "FTP信息"); + //MonitoringEventBus.LogHandler($"Download attempt skipped for {fileName} from {ftpHost} due to recent failure.", "FTP信息"); return null; } @@ -153,7 +153,7 @@ namespace Yunda.SOMS.DataMonitoringServer.FTPHandle { if (client.DownloadStream(memoryStream, remoteFilePath)) { - MonitoringEventBus.LogHandler($"Successfully downloaded {fileName} from FTP.", "FTP信息"); + //MonitoringEventBus.LogHandler($"Successfully downloaded {fileName} from FTP.", "FTP信息"); // 下载成功,删除失败时间记录 if (failedDownloadTimestamps.ContainsKey(key)) { @@ -166,7 +166,7 @@ namespace Yunda.SOMS.DataMonitoringServer.FTPHandle // 下载失败,记录失败的时间 failedDownloadTimestamps[key] = DateTime.Now; string msg = $"Download failed for {fileName} from FTP."; - MonitoringEventBus.LogHandler(msg, "FTP信息"); + //MonitoringEventBus.LogHandler(msg, "FTP信息"); return null; // 下载失败,返回null } } diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceBCodeHandle.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceBCodeHandle.cs index 814a1a2..186f707 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceBCodeHandle.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceBCodeHandle.cs @@ -34,37 +34,44 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle _bcodeAndNTPRedis = bcodeAndNTPRedis; _dotNettyTcpServer.MessageReceived += OnMessageReceived; // 订阅事件 } - private async void OnMessageReceived(byte address, byte[] message, byte functionType) { try { + // 检查是否匹配指定的功能码 + if (functionType != 7 && functionType != 6) + { + return; // 如果不是功能码 7 或 6,直接返回 + } + var device = ProtectionDeviceDataCenter._devices.FirstOrDefault(t => t.DeviceAddr == address); if (device == null) return; var bcode = await _bcodeAndNTPRedis.HashSetGetOneAsync(nameof(BCodeAndNTP), address.ToString()) ?? new BCodeAndNTP(); - - switch (functionType) + bcode.EquipmentInfoId = device.EquipmentInfoId; + // 根据功能码处理逻辑 + if (functionType == 7) { - case 7: // B码对时状态 - bcode.BCode = message[1] != 1; - break; - - case 6: - BitArray bit0 = new BitArray(new byte[] { message[0] }); - bcode.NTP = bit0[3]; - break; - - default: - return; + // 处理功能码 7 的逻辑:B码对时状态 + bcode.BCode = message[1] != 1; + } + else if (functionType == 6) + { + // 处理功能码 6 的逻辑:NTP 状态 + BitArray bit0 = new BitArray(new byte[] { message[0] }); + bcode.NTP = bit0[3]; } + // 更新数据到 Redis await _bcodeAndNTPRedis.HashSetUpdateOneAsync(nameof(BCodeAndNTP), address.ToString(), bcode); + string channel = "bcodeAndNTPChannel"; + await _bcodeAndNTPRedis.PublishAsync(channel, bcode); } catch (Exception ex) { Log4Helper.Error(this.GetType(), "B码对时状态", ex); } } + } } diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceDataCenter.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceDataCenter.cs index f149bdc..d37d31b 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceDataCenter.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceDataCenter.cs @@ -45,7 +45,6 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle _protectionDeviceIOInfoHandle = protectionDeviceIOInfoHandle; _dotNettyTcpServer = dotNettyTcpServer; _protectionDeviceRunInfoHandle = protectionDeviceRunInfoHandle; - _dotNettyTcpServer.deviceBoardStatesAction += _dotNettyTcpServer_deviceBoardStatesAction; _deviceBoardStatesRedis = deviceBoardStatesRedis; _protectionDeviceSelfCheckHandle = protectionDeviceSelfCheckHandle; } @@ -60,17 +59,8 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle Log4Helper.Error(this.GetType(), "初始化装置IO错误", ex); } } - /// - /// 将装置状态写入到内存数据库中 - /// - /// - private void _dotNettyTcpServer_deviceBoardStatesAction(Dictionary deviceBoardStates) - { - if (deviceBoardStates.Count>0) - { - _deviceBoardStatesRedis.HashSetUpdateManyAsync(deviceBoardStatesRedisKey, deviceBoardStates.Keys.Select(t => t.ToString()).ToList(), deviceBoardStates.Values.ToList()); - } - } + + public List ProtectionDeviceComms { get; set; } public async Task InitProtectionDeviceComms() @@ -180,6 +170,10 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle { try { + if (ipAddress == "127.0.0.1"|| ipAddress == "localhost") + { + return false; + } using (Ping ping = new Ping()) { // 发送 Ping 请求,设置超时时间为 1000 毫秒 (1秒) diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceRunInfoHandle.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceRunInfoHandle.cs index 054aa60..557338e 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceRunInfoHandle.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceRunInfoHandle.cs @@ -17,6 +17,11 @@ using Yunda.ISAS.DataMonitoringServer.DataCenter; using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport; using System.Windows.Interop; using FluentFTP; +using System.Collections; +using System.Collections.Concurrent; +using Yunda.SOMS.DataMonitoringServer.SQLiteData; +using Abp; +using YunDa.SOMS.DataTransferObject.CommonDto; namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle { @@ -26,10 +31,15 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle FtpFile _ftpFile; DotNettyTcpServer _dotNettyTcpServer; private readonly RedisDataRepository _redisDataRepository; + private readonly IRedisRepository, string> _deviceBoardStatesRedis; + private readonly IRedisRepository, string> _dicRedis; public ProtectionDeviceRunInfoHandle( FtpFile ftpFile, - DotNettyTcpServer dotNettyTcpServer - , WebApiRequest webApiRequest, + DotNettyTcpServer dotNettyTcpServer, + IRedisRepository, string> redisRepository, + IRedisRepository, string> deviceBoardStatesRedis, + IRedisRepository, string> dicRedis, + WebApiRequest webApiRequest, RedisDataRepository redisDataRepository ) { @@ -38,8 +48,13 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle _dotNettyTcpServer = dotNettyTcpServer; _redisDataRepository = redisDataRepository; _dotNettyTcpServer.MessageReceived += OnMessageReceived; // 订阅事件 + _deviceBoardStatesRedis = deviceBoardStatesRedis; + _dicRedis = dicRedis; } + //Dictionary _deviceRunStates = new Dictionary(); + //private ConcurrentDictionary _communicationStateCounts = new(); + int _commCount = 0; private void OnMessageReceived(byte address, byte[] message, byte functionType) { @@ -47,18 +62,19 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle { if (functionType == 6) //通信状态 { - if (_commCount == 0) + var device = ProtectionDeviceDataCenter._devices.FirstOrDefault(t => t.DeviceAddr == address); + if (device != null) { - var device = ProtectionDeviceDataCenter._devices.FirstOrDefault(t => t.DeviceAddr == address); - if (device != null) + UpdateDeviceBoardState(address, message, device); + if (_commCount == 0) { - SendEquipmentInfoRemainingLifeAssessment(device); + SendEquipmentInfoRemainingLifeAssessment(device); var bytes = _ftpFile.GetFileFromFtpToMem(device.GatewayIP1, "/nor/root/status/", "status.txt"); - if (bytes!=null) + if (bytes != null) { var data = ParseDeviceStatusFromBytes(bytes); - if (data!=null) + if (data != null) { data.ProtectionDeviceId = device.ProtectionDeviceId; data.EquipmentInfoId = device.EquipmentInfoId; @@ -68,8 +84,8 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle } } } - } + _commCount++; if (_commCount == 10) { @@ -97,86 +113,6 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle } } - /// - /// 格式化FTP数据 - /// - /// - /// - private DeviceStatus ParseDeviceStatus(string filePath) - { - var deviceStatus = new DeviceStatus(); - try - { - var networkInterfaces = new List(); - - string[] lines = File.ReadAllLines(filePath); - NetworkInterfaceStatus currentInterface = null; - - foreach (var line in lines) - { - var parts = line.Split(':', 2); - if (parts.Length < 2) continue; - - string key = parts[0].Trim(); - string value = parts[1].Trim(); - - switch (key) - { - case "使用内存": - deviceStatus.UsedMemory = value; - break; - case "空闲内存": - deviceStatus.FreeMemory = value; - break; - case "总磁盘": - deviceStatus.TotalDisk = value; - break; - case "使用磁盘": - deviceStatus.UsedDisk = value; - break; - case "104连接状态": - deviceStatus.ConnectionStatus104 = int.Parse(value); - break; - case "液晶操作密码": - deviceStatus.LcdOperationPassword = value; - break; - default: - if (key.StartsWith("网口")) - { - string[] netParts = key.Split(new[] { "网口", "IP", "状态", "速率", "累计时间", "起始时间", "发生帧数", "发送错误帧数", "接收帧数", "接收错误帧数" }, StringSplitOptions.RemoveEmptyEntries); - if (netParts.Length > 0) - { - string interfaceName = netParts[0]; - if (currentInterface == null || currentInterface.InterfaceName != interfaceName) - { - currentInterface = new NetworkInterfaceStatus { InterfaceName = interfaceName }; - networkInterfaces.Add(currentInterface); - } - - if (key.EndsWith("IP")) currentInterface.IpAddress = value; - if (key.EndsWith("状态")) currentInterface.Status = value; - if (key.EndsWith("速率")) currentInterface.Speed = value; - if (key.EndsWith("累计时间")) currentInterface.CumulativeTime = int.Parse(value.Replace("s", "").Trim()); - if (key.EndsWith("起始时间")) currentInterface.StartTime = value; - if (key.EndsWith("发生帧数")) currentInterface.SentFrames = int.Parse(value); - if (key.EndsWith("发送错误帧数")) currentInterface.SentErrorFrames = int.Parse(value); - if (key.EndsWith("接收帧数")) currentInterface.ReceivedFrames = int.Parse(value); - if (key.EndsWith("接收错误帧数")) currentInterface.ReceivedErrorFrames = int.Parse(value); - } - } - break; - } - } - - deviceStatus.NetworkInterfaces = networkInterfaces; - } - catch (Exception ex) - { - MonitoringEventBus.LogHandler(ex.Message, "格式化FTP数据"); - } - return deviceStatus; - } - /// /// 格式化FTP数据 /// @@ -257,6 +193,52 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle } return deviceStatus; } + + private void UpdateDeviceBoardState(byte address, byte[] data, ProtectionDeviceCommInfoOutput device) + { + if (!_deviceBoardStates.TryGetValue(address, out var boardStates)) + { + boardStates = iopositions.Select(item => new NameIntValueProperty(item.Name, item.Value)).ToList(); + _deviceBoardStates[address] = boardStates; + } + boardStates[0].Value = new BitArray(new byte[] { data[0] })[0] ? 0 : 1;//运行状态 + boardStates[1].Value = new BitArray(new byte[] { data[0] })[1] ? 0 : 1;//报警状态 + boardStates[7].Value = new BitArray(new byte[] { data[1] })[0] ? 0 : 1; // 液晶状态 + BitArray bit2 = new BitArray(new byte[] { data[2] }); + boardStates[2].Value = bit2[0] ? 0 : 1; + boardStates[3].Value = bit2[1] ? 0 : 1; + boardStates[4].Value = bit2[2] ? 0 : 1; + boardStates[5].Value = bit2[3] ? 0 : 1; + boardStates[6].Value = bit2[4] ? 0 : 1; + _deviceBoardStatesRedis.HashSetUpdateOneAsync(deviceBoardStatesRedisKey, address.ToString(), boardStates); + Dictionary keyValuePairs = boardStates.ToDictionary(t=>t.Name,t=>(object)t.Value); + keyValuePairs.Add("EquipmentInfoId", device.EquipmentInfoId); + keyValuePairs.Add("EquipmentInfoName", device.EquipmentInfoName); + _dicRedis.PublishAsync(deviceBoardStatesRedisChannelKey, keyValuePairs); + } + string deviceBoardStatesRedisKey = "deviceBoardStates"; + string deviceBoardStatesRedisChannelKey = "deviceBoardStatesChannel"; + + ConcurrentDictionary> _deviceBoardStates = new(); + List iopositions = new List + { + new NameIntValueProperty("运行", 0), + new NameIntValueProperty("告警", 0), + new NameIntValueProperty("IO插件1", 0), + new NameIntValueProperty("IO插件2", 0), + new NameIntValueProperty("IO插件3", 0), + new NameIntValueProperty("IO插件4", 0), + new NameIntValueProperty("电源插件(IO5)", 0), + new NameIntValueProperty("液晶", 0) + }; } + + // 定义设备信息类 + class DeviceInfo + { + public bool Status { get; set; } // 设备状态(运行或离线) + public DateTime LastUpdate { get; set; } // 最后更新时间 + public int OfflineCount { get; set; } // 连续离线计数 + } } diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceSelfCheckHandle.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceSelfCheckHandle.cs index 9cce09b..69400a2 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceSelfCheckHandle.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceSelfCheckHandle.cs @@ -1,16 +1,18 @@ using Abp.Dependency; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; +using System.Text.RegularExpressions; using System.Threading.Tasks; using ToolLibrary.LogHelper; using Yunda.ISAS.DataMonitoringServer.DataAnalysis; using Yunda.ISAS.DataMonitoringServer.DataCenter; using Yunda.SOMS.DataMonitoringServer.FTPHandle; +using Yunda.SOMS.DataMonitoringServer.SQLiteData; using Yunda.SOMS.DataMonitoringServer.TcpSocket.Server; using YunDa.ISAS.Entities.System; -using YunDa.SOMS.Commdb.Models; using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport; namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle @@ -20,46 +22,93 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle WebApiRequest _webApiRequest; DotNettyTcpServer _dotNettyTcpServer; private readonly RedisDataRepository _redisDataRepository; - + FtpFile _ftpFile; public ProtectionDeviceSelfCheckHandle(WebApiRequest webApiRequest, + FtpFile ftpFile, DotNettyTcpServer dotNettyTcpServer, RedisDataRepository redisDataRepository) { + _ftpFile = ftpFile; _webApiRequest = webApiRequest; _dotNettyTcpServer = dotNettyTcpServer; _redisDataRepository = redisDataRepository; _dotNettyTcpServer.MessageReceived += OnMessageReceived; // 订阅事件 } + private ConcurrentDictionary _onlineDevices = new ConcurrentDictionary(); + public bool AddIfNotExists(byte element,string path) + { + // 尝试添加元素,若不存在则添加,若存在则返回 false + return _onlineDevices.TryAdd(element, path); + } private void OnMessageReceived(byte address, byte[] message, byte functionType) { try { - if (functionType == 4) //通信状态 + if (functionType == 4) //自检信息 { var device = ProtectionDeviceDataCenter._devices.FirstOrDefault(t => t.DeviceAddr == address); if (device != null) { if (message.Length > 0) { - if (message[0] != 0) + if (message[12] != 0) { - var abnormalComponent = _webApiRequest.GetDeviceAbnormalComponent(address, message[0]); - if (abnormalComponent != null) + if (_onlineDevices.TryGetValue(address,out string sqlPath)) { - abnormalComponent.EquipmentInfoId = device.EquipmentInfoId; - Task.Run(async () => + if (string.IsNullOrWhiteSpace( sqlPath)) { - string redisChannel = _redisDataRepository.DeviceSelfTestChannelRediskey; - await _redisDataRepository.AbnormalComponentRedis.PublishAsync(redisChannel, abnormalComponent); - }); - + ProtdbHandle protdbHandle = new ProtdbHandle(); + int zjCode = message[12]; + var zjInfo = protdbHandle.GetTbEventZj(sqlPath, zjCode); + if (zjInfo!=null) + { + var abnormalComponent = _webApiRequest.GetDeviceAbnormalComponent(address, message[0]); + if (abnormalComponent != null) + { + //Todo:未来接口 做逻辑关系判定 + abnormalComponent.EquipmentInfoId = device.EquipmentInfoId; + // 定义正则表达式模式 + string pattern = @"(IO插件\d|I/O插件|电源插件)"; + + // 检查字符串是否包含目标值 + MatchCollection matches = Regex.Matches(zjInfo.Description, pattern); + if (matches.Count > 0) + { + abnormalComponent.ComponentName = matches[0].Value; + // 替换匹配的部分为空 + string result = Regex.Replace(zjInfo.Description, pattern, ""); + Console.WriteLine("替换后的字符串: " + result); + abnormalComponent.AbnormalReason = result; + } + else + { + abnormalComponent.ComponentName = "CPU插件/软件系统"; + abnormalComponent.AbnormalReason = zjInfo.Description; + } + Task.Run(async () => + { + string redisChannel = _redisDataRepository.DeviceSelfTestChannelRediskey; + await _redisDataRepository.AbnormalComponentRedis.PublishAsync(redisChannel, abnormalComponent); + }); + } + + } + } } + } } } - } + if (!_onlineDevices.TryGetValue(address,out string path)) + { + //新连接的装置 + var protectionDevice = ProtectionDeviceDataCenter._devices.FirstOrDefault(t => t.DeviceAddr == address); + var localfile = _ftpFile.GetFileFromFtp(protectionDevice.GatewayIP1, "/nor/root/protect/cfg/", "protdb.sql3", address.ToString()); + _onlineDevices[address] = localfile; + } + } catch (Exception ex) { diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/SQLiteData/IODataHandle.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/SQLiteData/IODataHandle.cs index 18e28e9..e600345 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/SQLiteData/IODataHandle.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/SQLiteData/IODataHandle.cs @@ -87,8 +87,5 @@ namespace Yunda.SOMS.DataMonitoringServer.SQLiteData } return (index, iodic); } - - - } } diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/SQLiteData/ProtdbHandle.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/SQLiteData/ProtdbHandle.cs new file mode 100644 index 0000000..8a25c4e --- /dev/null +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/SQLiteData/ProtdbHandle.cs @@ -0,0 +1,35 @@ +using System; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using ToolLibrary.LogHelper; +using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto; +using YunDa.SOMS.ProDB; +using YunDa.SOMS.ProDB.Models; + +namespace Yunda.SOMS.DataMonitoringServer.SQLiteData +{ + public class ProtdbHandle + { + public TbEventZj GetTbEventZj(string sqlPath,int code) + { + var fileName = Path.GetFileName(sqlPath); + try + { + using (var context = new ProtdbContext(sqlPath)) + { + // 查询数据 + var tbEventZj = context.TbEventZjs.FirstOrDefault(t=>t.SelfCheckCode == code); + return tbEventZj; + + } + } + catch (Exception ex) + { + Log4Helper.Error(this.GetType(), "获取装置参数时发生错误", ex); + } + return default; + } + + } +} diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/TcpSocket/Server/DotNettyServerHandler.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/TcpSocket/Server/DotNettyServerHandler.cs index 351ba83..3fb127d 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/TcpSocket/Server/DotNettyServerHandler.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/TcpSocket/Server/DotNettyServerHandler.cs @@ -10,6 +10,7 @@ using System.Diagnostics; using System.Text; using System.Threading.Tasks; using Yunda.ISAS.DataMonitoringServer.DataAnalysis; +using Yunda.SOMS.DataMonitoringServer.FTPHandle; namespace Yunda.SOMS.DataMonitoringServer.TcpSocket.Server { @@ -17,129 +18,17 @@ namespace Yunda.SOMS.DataMonitoringServer.TcpSocket.Server public class DotNettyServerHandler : SimpleChannelInboundHandler { - // 定义设备信息类 - private class DeviceInfo - { - public bool Status { get; set; } // 设备状态(运行或离线) - public DateTime LastUpdate { get; set; } // 最后更新时间 - public int OfflineCount { get; set; } // 连续离线计数 - } + private IChannelHandlerContext _context; // 定义事件,事件处理程序包含消息和功能描述 private readonly ConcurrentDictionary _connections; private readonly Action _onMessageReceived; - private readonly Action _onDeviceConnection; - - - Dictionary _deviceRunStates = new Dictionary(); - Dictionary _deviceBoardStates = new Dictionary(); //0-离线 1-在线 - - public DotNettyServerHandler(ConcurrentDictionary connections, - Action onMessageReceived, Action> deviceBoardStatesAction) + Action onMessageReceived) { _connections = connections; _onMessageReceived = onMessageReceived; - - //_onDeviceConnection = onDeviceConnection; - Task.Factory.StartNew(async () => - { - while (true) - { - try - { - CheckAndUpdateDeviceStates(); - //LogDeviceStates(); - if (_deviceBoardStates.Count > 0) - { - deviceBoardStatesAction(_deviceBoardStates); - } - await Task.Delay(5000); - } - catch (Exception ex) - { - MonitoringEventBus.LogHandler($"客户端连接错误:{ex.StackTrace}", "定值错误信息"); - } - } - }, TaskCreationOptions.LongRunning); - } - async void CheckAndUpdateDeviceStates() - { - try - { - foreach (var entry in _deviceRunStates) - { - - var deviceAddress = entry.Key; - var device = entry.Value; - if (!_deviceBoardStates.ContainsKey(deviceAddress)) - { - _deviceBoardStates.Add(deviceAddress, new int[8]); - } - if (device == null) - { - continue; - } - // 检查是否连续发送“离线”状态 - if (device.OfflineCount >= 5) - { - if (_deviceBoardStates[deviceAddress][0] !=0) - { - _deviceBoardStates[deviceAddress][0] = 0; - MonitoringEventBus.LogHandler($"[{DateTime.Now}] {deviceAddress} 判定为离线(连续离线状态)", "定值错误信息"); - if (_connections.TryGetValue(deviceAddress, out IChannelHandlerContext ctx)) - { - if (ctx.Channel.Active) - { - try - { - await ctx.DisconnectAsync(); - await ctx.CloseAsync(); - } - catch (Exception ex) - { - - } - _connections.TryRemove(deviceAddress, out IChannelHandlerContext channelHandlerContext); - } - } - } - continue; - } - - // 检查是否超过10秒未更新 - if ((DateTime.Now - device.LastUpdate).TotalSeconds > 10) - { - if (_connections.ContainsKey(deviceAddress)) - { - _deviceBoardStates[deviceAddress][0] = 0; - MonitoringEventBus.LogHandler($"[{DateTime.Now}] {deviceAddress} 判定为离线(超过10秒未更新)", "定值错误信息"); - if (_connections.TryGetValue(deviceAddress,out IChannelHandlerContext ctx)) - { - if (ctx.Channel.Active) - { - try - { - await ctx.DisconnectAsync(); - await ctx.CloseAsync(); - } - catch (Exception ex) - { - } - _connections.TryRemove(deviceAddress, out IChannelHandlerContext channelHandlerContext); - } - } - } - continue; - } - _deviceBoardStates[deviceAddress][0] = 1; - } - } - catch (Exception ex) - { - MonitoringEventBus.LogHandler($"{ex.StackTrace}", "103客户端错误信息"); - } } public override void ChannelActive(IChannelHandlerContext context) { @@ -192,14 +81,12 @@ namespace Yunda.SOMS.DataMonitoringServer.TcpSocket.Server // 数据不足,等待更多数据 return; } - byte[] data = new byte[dataLength]; msg.ReadBytes(data); string clientIp = ctx.Channel.RemoteAddress.ToString(); string description = FunctionCodeDescriptions.GetDescription(functionType); - MonitoringEventBus.LogHandler($"装置地址 {address} 功能码:{functionType} 数据长度:{dataLength}", "103客户端消息"); - + //MonitoringEventBus.LogHandler($"装置地址 {address} 功能码:{functionType} 数据长度:{dataLength}", "103客户端消息"); Task.Run(() => _onMessageReceived?.Invoke(address, data, functionType)); HandleFunctionCodeAsync(functionType, address, controlWord, data, ctx); } @@ -210,7 +97,7 @@ namespace Yunda.SOMS.DataMonitoringServer.TcpSocket.Server } private async Task HandleFunctionCodeAsync(byte functionType, byte address, byte controlWord, byte[] data, IChannelHandlerContext ctx) - { + { switch (functionType) { case 0: @@ -250,77 +137,57 @@ namespace Yunda.SOMS.DataMonitoringServer.TcpSocket.Server Debug.WriteLine($"确认开入开出信息: {Encoding.ASCII.GetString(data)}"); // 可以添加发送确认报文的逻辑 } - private ConcurrentDictionary _communicationStateCounts = new (); private async Task UpdateDeviceCommunicationStateAsync(byte address, byte[] data, IChannelHandlerContext ctx) { await Task.Run(async () => { try { - // 更新连接上下文 - if (_connections.ContainsKey(address)) - { - _connections[address] = ctx; - } - else - { - _connections.TryAdd(address, ctx); - - } - if (_communicationStateCounts.ContainsKey(address)) - { - _communicationStateCounts[address]++; - if (_communicationStateCounts[address] == 86400) - { - _communicationStateCounts.TryRemove(address,out _); - } - } - else - { - _communicationStateCounts.TryAdd(address, 0); - for (byte i = 1; i < 6; i++) - { - await SendCustomMessageAsync(ctx, address, 0, 5, i); - } - await SendCustomMessageAsync(ctx, address, 0, 1, 0); - await SendCustomMessageAsync(ctx, address, 0, 2, 0); - await SendCustomMessageAsync(ctx, address, 0, 3, 0); - await SendCustomMessageAsync(ctx, address, 0, 4, 0); - await SendCustomMessageAsync(ctx, address, 0, 7, 0); - } - // 更新设备状态 - BitArray bit0 = new BitArray(new byte[] { data[0] }); - if (!_deviceRunStates.ContainsKey(address)) - { - _deviceRunStates[address] = new DeviceInfo { Status = bit0[7], LastUpdate = DateTime.Now, OfflineCount = 0 }; - } - - var device = _deviceRunStates[address]; - device.Status = bit0[0]; - device.LastUpdate = DateTime.Now; - device.OfflineCount = bit0[0] ? 0 : device.OfflineCount + 1; - - // 更新设备板状态 - if (!_deviceBoardStates.ContainsKey(address)) - { - _deviceBoardStates[address] = new int[8]; - } - _deviceBoardStates[address][7] = new BitArray(new byte[] { data[1] })[0] ? 0 : 1; // 液晶状态 - BitArray bit2 = new BitArray(new byte[] { data[2] }); - _deviceBoardStates[address][2] = bit2[0] ? 0 : 1; - _deviceBoardStates[address][3] = bit2[1] ? 0 : 1; - _deviceBoardStates[address][4] = bit2[2] ? 0 : 1; - _deviceBoardStates[address][5] = bit2[3] ? 0 : 1; - _deviceBoardStates[address][6] = bit2[4] ? 0 : 1; + UpdateConnectionContext(address, ctx); + await UpdateCommunicationStateCountAsync(address, ctx); } catch (Exception ex) { MonitoringEventBus.LogHandler($"Error: {ex.StackTrace}", "103客户端发送消息"); } - }); } + private void UpdateConnectionContext(byte address, IChannelHandlerContext ctx) + { + _connections[address] = ctx; + } + + private async Task UpdateCommunicationStateCountAsync(byte address, IChannelHandlerContext ctx) + { + if (_connections.TryGetValue(address, out _)) + { + //_communicationStateCounts[address]++; + //已经存在的装置地址 + } + else + { + //新加入的装置的地址 + await SendInitMsgToDeviceAsync(ctx, address); + } + } + + private async Task SendInitMsgToDeviceAsync(IChannelHandlerContext ctx, byte address) + { + for (byte i = 1; i < 6; i++) + { + await SendCustomMessageAsync(ctx, address, 0, 5, i); + } + await SendCustomMessageAsync(ctx, address, 0, 1, 0); + await SendCustomMessageAsync(ctx, address, 0, 2, 0); + await SendCustomMessageAsync(ctx, address, 0, 3, 0); + await SendCustomMessageAsync(ctx, address, 0, 4, 0); + await SendCustomMessageAsync(ctx, address, 0, 7, 0); + } + + + + public override async void ExceptionCaught(IChannelHandlerContext context, Exception ex) { try diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/TcpSocket/Server/DotNettyTcpServer.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/TcpSocket/Server/DotNettyTcpServer.cs index 295d819..4d7a0ce 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/TcpSocket/Server/DotNettyTcpServer.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/TcpSocket/Server/DotNettyTcpServer.cs @@ -25,23 +25,24 @@ namespace Yunda.SOMS.DataMonitoringServer.TcpSocket.Server // 定义 MessageReceived 事件 public event Action< byte, byte[], byte> MessageReceived; // 装置地址,功能码,消息 - public event Action> deviceBoardStatesAction; + //public event Action> deviceBoardStatesAction; public DotNettyTcpServer() { //_dotNettyServerHandler = dotNettyServerHandler; } - MultithreadEventLoopGroup bossGroup ; - MultithreadEventLoopGroup workerGroup ; int maxFrameLength = 65536; // 设置最大帧长度 int lengthFieldOffset = 1; // 长度字段的偏移量,从启动字符之后开始 int lengthFieldLength = 2; // 长度字段的字节长度 int lengthAdjustment = -3; // 长度调整,将读取的长度减去启动字符和长度字段的字节数 int initialBytesToStrip = 0; // 保留所有字节 - public async Task RunServerAsync(/*Action recvMsgAc*/) - { + private MultithreadEventLoopGroup bossGroup; + private MultithreadEventLoopGroup workerGroup; + private IChannel boundChannel; - bossGroup = new MultithreadEventLoopGroup(1); - workerGroup = new MultithreadEventLoopGroup(); + public async Task RunServerAsync() + { + bossGroup = new MultithreadEventLoopGroup(1); + workerGroup = new MultithreadEventLoopGroup(); try { GCSettings.LatencyMode = GCLatencyMode.LowLatency; @@ -58,35 +59,50 @@ namespace Yunda.SOMS.DataMonitoringServer.TcpSocket.Server lengthAdjustment, initialBytesToStrip )); - channel.Pipeline.AddLast(new DotNettyServerHandler(connections, MessageReceived, deviceBoardStatesAction)); + channel.Pipeline.AddLast(new DotNettyServerHandler(connections, MessageReceived)); channel.Pipeline.AddLast("hexDumpHandler", new HexDumpHandler()); })); - IChannel boundChannel = await bootstrap.BindAsync(7110); + boundChannel = await bootstrap.BindAsync(7110); MonitoringEventBus.LogHandler("服务器启动并监听端口 7110...", "获取信息"); } - finally - { - //await Task.WhenAll( - // bossGroup.ShutdownGracefullyAsync(TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(1)), - // workerGroup.ShutdownGracefullyAsync(TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(1))); - } - } - - public async void StopSeverAsync() - { - try - { - await Task.WhenAll( - bossGroup.ShutdownGracefullyAsync(TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(1)), - workerGroup.ShutdownGracefullyAsync(TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(1))); - } catch (Exception ex) { - MonitoringEventBus.LogHandler("服务器关闭并监听端口 7110...", "获取信息"); + MonitoringEventBus.LogHandler($"服务器启动失败: {ex.Message}", "错误"); + throw; } - } + + public async Task StopServerAsync() + { + try + { + if (boundChannel != null) + { + await boundChannel.CloseAsync(); + boundChannel = null; + } + + if (bossGroup != null) + { + await bossGroup.ShutdownGracefullyAsync(TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(1)); + bossGroup = null; + } + + if (workerGroup != null) + { + await workerGroup.ShutdownGracefullyAsync(TimeSpan.FromMilliseconds(100), TimeSpan.FromSeconds(1)); + workerGroup = null; + } + + MonitoringEventBus.LogHandler("服务器已成功关闭并停止监听端口 7110...", "获取信息"); + } + catch (Exception ex) + { + MonitoringEventBus.LogHandler($"服务器关闭失败: {ex.Message}", "错误"); + } + } + public async void SendMessageByIp(byte address, byte controlWord, byte functionCode , byte message) { if (connections.TryGetValue(address, out IChannelHandlerContext context)) diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/Yunda.SOMS.DataMonitoringServer.csproj b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/Yunda.SOMS.DataMonitoringServer.csproj index f1accc0..0cf188a 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/Yunda.SOMS.DataMonitoringServer.csproj +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/Yunda.SOMS.DataMonitoringServer.csproj @@ -114,6 +114,7 @@ + diff --git a/src/YunDa.Util/ToolLibrary/PortProcessManager.cs b/src/YunDa.Util/ToolLibrary/PortProcessManager.cs index 5005e65..9fe3cdb 100644 --- a/src/YunDa.Util/ToolLibrary/PortProcessManager.cs +++ b/src/YunDa.Util/ToolLibrary/PortProcessManager.cs @@ -1,6 +1,9 @@ using System; +using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using System.Net.NetworkInformation; +using System.Security.Cryptography; namespace ToolLibrary { @@ -11,15 +14,17 @@ namespace ToolLibrary /// /// 指定的端口号 /// 占用端口的进程 PID,失败时返回 -1 - public static int GetProcessIdByPort(int port) + public static List GetProcessIdsByPort(int port) { + List pids = new List(); + try { // 使用 netstat 命令获取端口信息 var startInfo = new ProcessStartInfo { - FileName = "netstat", - Arguments = $"-ano | findstr :{port}", // 查找指定端口的占用情况 + FileName = "cmd.exe", + Arguments = $"/c netstat -ano | findstr :{port}", RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true @@ -31,12 +36,19 @@ namespace ToolLibrary string output = reader.ReadToEnd(); if (!string.IsNullOrEmpty(output)) { - // 输出格式: TCP 0.0.0.0:2403 0.0.0.0:0 LISTENING 1234 - var columns = output.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); - if (columns.Length > 4) + var lines = output.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); + + foreach (var line in lines) { - int pid = int.Parse(columns[columns.Length - 1]); // 获取 PID - return pid; + // 输出格式: TCP 0.0.0.0:2403 0.0.0.0:0 LISTENING 1234 + var columns = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + if (columns.Length > 4) + { + if (int.TryParse(columns[columns.Length - 1], out int pid)) + { + pids.Add(pid); // 将 PID 添加到列表中 + } + } } } } @@ -46,9 +58,10 @@ namespace ToolLibrary Console.WriteLine("查询端口进程失败: " + ex.Message); } - return -1; // 返回无效的 PID + return pids.Distinct().ToList(); // 返回所有 PID } + /// /// 根据 PID 杀死指定的进程 /// @@ -77,10 +90,19 @@ namespace ToolLibrary /// 是否成功杀死进程 public static bool KillProcessByPort(int port) { - int pid = GetProcessIdByPort(port); - if (pid > 0) + var pids = GetProcessIdsByPort(port); + if (pids!=null) { - return KillProcessById(pid); + int selfpid = Process.GetCurrentProcess().Id; + foreach (var pid in pids) + { + if (pid!= selfpid) + { + KillProcessById(pid); + + } + } + return true; } else { From de790170f0bd684f71a84ae383b1e88540579a17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E7=9D=BF?= <774114798@qq.com> Date: Fri, 6 Dec 2024 16:50:46 +0800 Subject: [PATCH 2/2] chushi --- .../BoardCardInfoAppService.cs | 7 +++--- .../OperationReport/DeviceBoardStates.cs | 21 ++++++++++++++++ .../YunDa.ISAS.Redis/ISASRedisModule.cs | 3 +++ .../ProtectionDeviceRunInfoHandle.cs | 24 +++++++++---------- 4 files changed, 40 insertions(+), 15 deletions(-) create mode 100644 src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/DeviceBoardStates.cs diff --git a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/BoardCardDevice/BoardCardInfoAppService.cs b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/BoardCardDevice/BoardCardInfoAppService.cs index 8d3bc1d..eb9be3c 100644 --- a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/BoardCardDevice/BoardCardInfoAppService.cs +++ b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/BoardCardDevice/BoardCardInfoAppService.cs @@ -26,6 +26,7 @@ using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto.HistoryData; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto.SearchCondition; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionSettingDto; +using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport; using YunDa.SOMS.Entities.GeneralInformation; namespace YunDa.ISAS.Application.GeneralInformation @@ -46,7 +47,7 @@ namespace YunDa.ISAS.Application.GeneralInformation private readonly IRepository _imProtectDeviceRepository; private readonly IUnitOfWorkManager _unitOfWorkManager; - IRedisRepository, string> _deviceBoardStatesRedis; + IRedisRepository _deviceBoardStatesRedis; string deviceIORedisKey = "deviceIO"; IRedisRepository _deviceIOsRedis; @@ -70,7 +71,7 @@ namespace YunDa.ISAS.Application.GeneralInformation IRepository boardCardInfoRepository, IRepository boardCardHistoryRepository, IRepository manufacturerInfoRepository, - IRedisRepository, string> deviceBoardStatesRedis, + IRedisRepository deviceBoardStatesRedis, IRedisRepository deviceIOsRedis, IRepository protectionDeviceTypeRepository, ISessionAppService sessionAppService @@ -361,7 +362,7 @@ namespace YunDa.ISAS.Application.GeneralInformation { var state = await _deviceBoardStatesRedis.HashSetGetAllAsync(deviceBoardStatesRedisKey, protectionDeviceInfo.DeviceAddress.ToString()); - rst.ResultData = state.Select(t=>new DeviceRunState { Name = t.Name,State = t.Value}).ToList(); + rst.ResultData = state.States.Select(t=>new DeviceRunState { Name = t.Name,State = t.Value}).ToList(); rst.Flag = true; } } diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/DeviceBoardStates.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/DeviceBoardStates.cs new file mode 100644 index 0000000..2be0522 --- /dev/null +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/DeviceBoardStates.cs @@ -0,0 +1,21 @@ +using MessagePack; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Security.Permissions; +using System.Text; +using System.Threading.Tasks; +using YunDa.SOMS.DataTransferObject.CommonDto; + +namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport +{ + [MessagePackObject(keyAsPropertyName: true)] + public class DeviceBoardStates + { + public Guid EquipmentInfoId { get; set; } + public string EquipmentInfoName { get; set; } + public List States { get; set; } + [MessagePackFormatter(typeof(DateTimeAsUnixTimeFormatter))] + public DateTime Time { get; set; } + } +} diff --git a/src/YunDa.Domain/YunDa.ISAS.Redis/ISASRedisModule.cs b/src/YunDa.Domain/YunDa.ISAS.Redis/ISASRedisModule.cs index db68448..4d41e8b 100644 --- a/src/YunDa.Domain/YunDa.ISAS.Redis/ISASRedisModule.cs +++ b/src/YunDa.Domain/YunDa.ISAS.Redis/ISASRedisModule.cs @@ -102,6 +102,9 @@ namespace YunDa.ISAS.Redis IocManager.Register, RedisRepository>(); IocManager.Register, string>, RedisRepository, string>>(); IocManager.Register, string>, RedisRepository, string>>(); + IocManager.Register, RedisRepository>(); + + } } } diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceRunInfoHandle.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceRunInfoHandle.cs index 557338e..bf1d2a0 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceRunInfoHandle.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceRunInfoHandle.cs @@ -31,14 +31,11 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle FtpFile _ftpFile; DotNettyTcpServer _dotNettyTcpServer; private readonly RedisDataRepository _redisDataRepository; - private readonly IRedisRepository, string> _deviceBoardStatesRedis; - private readonly IRedisRepository, string> _dicRedis; + private readonly IRedisRepository _deviceBoardStatesRedis; public ProtectionDeviceRunInfoHandle( FtpFile ftpFile, DotNettyTcpServer dotNettyTcpServer, - IRedisRepository, string> redisRepository, - IRedisRepository, string> deviceBoardStatesRedis, - IRedisRepository, string> dicRedis, + IRedisRepository redisRepository, WebApiRequest webApiRequest, RedisDataRepository redisDataRepository ) @@ -48,8 +45,7 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle _dotNettyTcpServer = dotNettyTcpServer; _redisDataRepository = redisDataRepository; _dotNettyTcpServer.MessageReceived += OnMessageReceived; // 订阅事件 - _deviceBoardStatesRedis = deviceBoardStatesRedis; - _dicRedis = dicRedis; + _deviceBoardStatesRedis = redisRepository; } //Dictionary _deviceRunStates = new Dictionary(); @@ -210,11 +206,15 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle boardStates[4].Value = bit2[2] ? 0 : 1; boardStates[5].Value = bit2[3] ? 0 : 1; boardStates[6].Value = bit2[4] ? 0 : 1; - _deviceBoardStatesRedis.HashSetUpdateOneAsync(deviceBoardStatesRedisKey, address.ToString(), boardStates); - Dictionary keyValuePairs = boardStates.ToDictionary(t=>t.Name,t=>(object)t.Value); - keyValuePairs.Add("EquipmentInfoId", device.EquipmentInfoId); - keyValuePairs.Add("EquipmentInfoName", device.EquipmentInfoName); - _dicRedis.PublishAsync(deviceBoardStatesRedisChannelKey, keyValuePairs); + DeviceBoardStates deviceBoardStates = new DeviceBoardStates() + { + EquipmentInfoId = device.EquipmentInfoId, + EquipmentInfoName = device.EquipmentInfoName, + States = boardStates, + Time = DateTime.Now, + }; + _deviceBoardStatesRedis.HashSetUpdateOneAsync(deviceBoardStatesRedisKey, address.ToString(), deviceBoardStates); + _deviceBoardStatesRedis.PublishAsync(deviceBoardStatesRedisChannelKey, deviceBoardStates); } string deviceBoardStatesRedisKey = "deviceBoardStates"; string deviceBoardStatesRedisChannelKey = "deviceBoardStatesChannel";