From 350b58fa3a21c4199a3685d89889cf2b96d7fb6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E7=9D=BF?= <774114798@qq.com> Date: Fri, 29 Nov 2024 09:03:54 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=90=E7=BB=B4=E6=B5=8B=E8=AF=95=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- OperationsMainSiteGatewayServer/Program.cs | 60 +- .../PublishProfiles/FolderProfile.pubxml | 19 + .../TcpSocket/Server/DotNettyServerHandler.cs | 333 +- .../TcpSocket/Server/DotNettyTcpServer.cs | 106 +- .../TcpSocket/TestData/SimulateData.cs | 169 + ...OMS.OperationsMainSiteGatewayServer.csproj | 6 + YunDa.SOMS.sln | 25 +- .../ISASAppServiceBase.cs | 33 +- .../YunDa.ISAS.Application.Core.xml | 6 + .../EquipmentInfoExAppService.cs | 7 +- .../ProtecttionDeviceRedisAppService.cs | 174 + .../SecondaryCircuitAppService.cs | 27 +- ...condaryCircuitLogicExpressionAppService.cs | 109 +- .../YunDa.ISAS.Application.xml | 26 +- .../CommonDto/TimeValue.cs | 14 + .../ProtectionSettingDto/ImDeviceDzOutput.cs | 2 +- .../EditSecondaryCircuitInput.cs | 7 +- .../SecondaryCircuitLogicExpressionOutput.cs | 3 +- .../SecondaryCircuitOutput.cs | 2 +- .../DeviceProductionInfo.cs | 55 +- .../DeviceParameterInfo.cs | 2 +- .../DeviceOperationWarning/RunningInfo.cs | 2 +- .../SettingSolidificationInfo.cs | 2 +- .../DeviceOperationWarning/VersionInfo.cs | 2 +- .../DeviceParameterChange/CircuitWarning.cs | 2 +- .../DeviceParameterChange/LifeSpanWarning.cs | 2 +- .../DeviceParameterChange/SelfCheckWarning.cs | 2 +- .../OperationReport/AbnormalComponent.cs | 72 + .../OperationReport/NetworkStatus.cs | 138 + .../OperationReport/RunningStatus.cs | 2 +- .../UploadMainstationBaseDetailInfo.cs | 9 +- .../UploadMainstationBaseInfo.cs | 22 +- .../YunDa.ISAS.DataTransferObject.xml | 49 +- .../YunDa.SOMS.DataTransferObject.csproj | 5 + .../ProtectionDeviceYCResultAppService.cs | 81 + .../YunDa.ISAS.MongoDB.Application.xml | 6 + .../GeneralInformation/SecondaryCircuit.cs | 6 +- .../SecondaryCircuitLogicExpression.cs | 4 +- ...0241127075013_update_table_v91.Designer.cs | 5395 +++++++++++++++++ .../20241127075013_update_table_v91.cs | 28 + .../Migrations/ISASDbContextModelSnapshot.cs | 5 +- .../YunDa.SOMS.EntityFrameworkCore.csproj | 4 + .../YunDa.ISAS.Redis/ISASRedisModule.cs | 10 +- .../DataCollection/DataSendTask.cs | 93 +- .../DataAnalysis/Model/ConstantModel.cs | 6 +- .../DataAnalysis/MonitoringDataService.cs | 87 +- .../DataAnalysis/WebApiRequest.cs | 46 +- .../DataCenter/RedisRepository.cs | 40 +- .../DataCenter/RunningDataCache.cs | 8 + .../ProtectionDeviceDZDataHandle.cs | 25 +- .../ProtectionDeviceDataCenter.cs | 16 +- .../appsettings.development.json | 2 +- test/ConsoleTest/ConsoleTest.csproj | 10 + test/ConsoleTest/Program.cs | 10 + test/RedisSubscriberConsole/Program.cs | 15 +- 55 files changed, 7088 insertions(+), 303 deletions(-) create mode 100644 OperationsMainSiteGatewayServer/Properties/PublishProfiles/FolderProfile.pubxml create mode 100644 src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/ProtecttionDeviceRedisAppService.cs create mode 100644 src/YunDa.Application/YunDa.ISAS.DataTransferObject/CommonDto/TimeValue.cs create mode 100644 src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/AbnormalComponent.cs create mode 100644 src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/NetworkStatus.cs create mode 100644 src/YunDa.Application/YunDa.ISAS.MongoDB.Application/DataMonitoring/TelemeteringResult/ProtectionDeviceYCResultAppService.cs create mode 100644 src/YunDa.Domain/YunDa.ISAS.EntityFrameworkCore/Migrations/20241127075013_update_table_v91.Designer.cs create mode 100644 src/YunDa.Domain/YunDa.ISAS.EntityFrameworkCore/Migrations/20241127075013_update_table_v91.cs create mode 100644 test/ConsoleTest/ConsoleTest.csproj create mode 100644 test/ConsoleTest/Program.cs diff --git a/OperationsMainSiteGatewayServer/Program.cs b/OperationsMainSiteGatewayServer/Program.cs index f759122..8b07a53 100644 --- a/OperationsMainSiteGatewayServer/Program.cs +++ b/OperationsMainSiteGatewayServer/Program.cs @@ -1,15 +1,22 @@ using System; using Abp; +using Castle.Core; using Microsoft.Extensions.Configuration; +using Newtonsoft.Json; using Serilog; using Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server; +using Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.TestData; +using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo; +using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.DeviceHistoryChange; +using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.DeviceTcpData; +using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport; namespace Yunda.SOMS.OperationsMainSiteGatewayServer { public class Program { private static AbpBootstrapper _bootstrapper; - + private static DotNettyTcpServer _dotNettyTcpServer; public static async Task Main(string[] args) { @@ -36,6 +43,53 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer try { + // 创建一个任务来监听用户输入 + var inputTask = Task.Run(() => + { + while (!cts.Token.IsCancellationRequested) + { + Console.WriteLine("请输入数字选择操作:"); + Console.WriteLine("1: 执行装置履历测试"); + Console.WriteLine("2: 执行设备参数报文测试"); + Console.WriteLine("3: 执行运行诊断报文测试"); + Console.WriteLine("4: 执行运行状态报文测试"); + Console.WriteLine("按 'q' 退出程序"); + string input = Console.ReadLine(); + + if (input == "1") + { + + SimulateData.Test1(_dotNettyTcpServer); + // 在这里执行操作1的逻辑 + } + else if (input == "2") + { + + SimulateData.Test2(_dotNettyTcpServer); + // 在这里执行操作2的逻辑 + } + else if (input == "3") + { + SimulateData.Test3(_dotNettyTcpServer); + // 在这里执行操作3的逻辑 + } + else if (input == "4") + { + SimulateData.Test4(_dotNettyTcpServer); + // 在这里执行操作3的逻辑 + } + else if (input?.ToLower() == "q") + { + Log.Information("退出程序..."); + cts.Cancel(); // 用户选择退出时触发取消 + break; + } + else + { + Log.Information("无效的输入,请重新选择..."); + } + } + }); await Task.Delay(Timeout.Infinite, cts.Token); // 无限等待,直到取消 } catch (TaskCanceledException) @@ -85,8 +139,8 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer /// private static async Task RunApplication(byte addr) { - var service = _bootstrapper.IocManager.Resolve(); - await service.RunServerAsync(addr); + _dotNettyTcpServer = _bootstrapper.IocManager.Resolve(); + await _dotNettyTcpServer.RunServerAsync(addr); } /// diff --git a/OperationsMainSiteGatewayServer/Properties/PublishProfiles/FolderProfile.pubxml b/OperationsMainSiteGatewayServer/Properties/PublishProfiles/FolderProfile.pubxml new file mode 100644 index 0000000..49c6566 --- /dev/null +++ b/OperationsMainSiteGatewayServer/Properties/PublishProfiles/FolderProfile.pubxml @@ -0,0 +1,19 @@ + + + + + Release + Any CPU + bin\Release\net8.0\publish\win-x64\ + FileSystem + <_TargetId>Folder + net8.0 + win-x64 + true + true + false + false + + \ No newline at end of file diff --git a/OperationsMainSiteGatewayServer/TcpSocket/Server/DotNettyServerHandler.cs b/OperationsMainSiteGatewayServer/TcpSocket/Server/DotNettyServerHandler.cs index e8d3a8e..f1cd1f3 100644 --- a/OperationsMainSiteGatewayServer/TcpSocket/Server/DotNettyServerHandler.cs +++ b/OperationsMainSiteGatewayServer/TcpSocket/Server/DotNettyServerHandler.cs @@ -2,12 +2,16 @@ using DotNetty.Transport.Channels; using Newtonsoft.Json.Linq; using Serilog; +using System; using System.Collections; using System.Diagnostics; using System.Net; using System.Text; +using System.Threading.Channels; using Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Models; using Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.TestData; +using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto; +using static System.Runtime.InteropServices.JavaScript.JSType; namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server { @@ -20,35 +24,25 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server public DateTime LastUpdate { get; set; } // 最后更新时间 public int OfflineCount { get; set; } // 连续离线计数 } - private IChannelHandlerContext _context; + public IChannelHandlerContext _context; // 定义事件,事件处理程序包含消息和功能描述 - private readonly Dictionary _connections; private readonly Action _onMessageReceived; - private readonly Action _onDeviceConnection; - Dictionary _deviceRunStates = new Dictionary(); + private readonly Action _channelInactiveCallback; + private DateTime _deviceRunStateTime = DateTime.Now; byte _serverAddr; - public DotNettyServerHandler(Dictionary connections, - Action onMessageReceived, Action> deviceBoardStatesAction, byte addr) + public DotNettyServerHandler( + Action messageReceived, Action channelInactiveCallback , byte addr) { _serverAddr = addr; - _connections = connections; - _onMessageReceived = onMessageReceived; - //_onDeviceConnection = onDeviceConnection; + _onMessageReceived = messageReceived; + _channelInactiveCallback = channelInactiveCallback; Task.Factory.StartNew(async () => { while (true) { - try - { - CheckAndUpdateDeviceStates(); - SendTestData(); - await Task.Delay(1000); - } - catch (Exception ex) - { - //MonitoringEventBus.LogHandler($"客户端连接错误:{ex.StackTrace}", "定值错误信息"); - } + CheckAndUpdateDeviceStates(); + await Task.Delay(1000); } }, TaskCreationOptions.LongRunning); @@ -59,28 +53,22 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server { try { + if (_context == null || !_context.Channel.Open || !_context.Channel.Active) + { + return; + } if (heartbeatDelayCount ==0) { await HandleHeartbeat(_context, _serverAddr, heartbeatCount); - - foreach (var entry in _deviceRunStates) + if ((DateTime.Now - _deviceRunStateTime).TotalSeconds > 65) { - var deviceAddress = entry.Key; - var date = entry.Value; - // 检查是否超过10秒未更新 - if ((DateTime.Now - date).TotalSeconds > 65) - { - Log.Warning($"[{DateTime.Now}] {deviceAddress} 判定为离线(超过65秒未更新)"); - await _context.CloseAsync(); - _connections.Remove(deviceAddress); - } - + Log.Warning($" {_context.Channel.RemoteAddress.ToString()} 判定为离线(超过65秒未更新)"); + await _context.CloseAsync(); } + } - else - { - heartbeatDelayCount++; - } + + heartbeatDelayCount++; if (heartbeatDelayCount == 30) { heartbeatDelayCount = 0; @@ -92,37 +80,38 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server Log.Error(ex,$"状态检测"); } } - int sequence = 31; - void SendTestData() - { - var data = SimulateData.SendProductionInformation(); - // 创建一个应用控制字实例 - ApplicationControlWord controlWord = new ApplicationControlWord(fir: true, fin: true, con: true, sequence: sequence); - // 将控制字转换为字节 - byte controlByte = controlWord.ToByte(); - Log.Information($"Control Byte: 0x{controlByte:X2}"); // 输出控制字的十六进制表示 - SendCustomMessageAsync(_context, _serverAddr, controlByte, 1,data); - sequence--; - if (sequence == 15) - { - sequence = 31; - } - } + bool IsConfirm = false; + //int sequence = 15; + + //void SendTestData() + //{ + // var data = SimulateData.SendProductionInformation(); + // // 创建一个应用控制字实例 + // ApplicationControlWord controlWord = new ApplicationControlWord(fir: true, fin: true, con: true, sequence: sequence); + // // 将控制字转换为字节 + // byte controlByte = controlWord.ToByte(); + // Log.Information($"Control Byte: 0x{controlByte:X2}"); // 输出控制字的十六进制表示 + // SendCustomMessageAsync(_serverAddr, controlByte, 1, data); + // sequence++; + // if (sequence == 15) + // { + // sequence = 31; + // } + //} + - public async override void ChannelActive(IChannelHandlerContext context) { try { string clientIp = context.Channel.RemoteAddress.ToString(); - Log.Information($"客户端连接:{clientIp}", "103客户端发送消息"); - await HandleHeartbeat(context, _serverAddr, heartbeatCount); + Log.Information($"客户端主动连接:{clientIp}"); + //await HandleHeartbeat(context, _serverAddr, heartbeatCount); base.ChannelActive(context); } catch (Exception ex) { - - Log.Information($"{ex.StackTrace}", "103客户端错误信息"); + Log.Information($"{ex.StackTrace}"); } } @@ -132,20 +121,30 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server try { string clientIp = context.Channel.RemoteAddress.ToString(); - Log.Information($"客户端断开连接:{clientIp}", "103客户端发送消息"); + Log.Information($"客户端主动断开连接:{clientIp}"); + _channelInactiveCallback(clientIp); base.ChannelInactive(context); } catch (Exception ex) { - Log.Information($"{ex.StackTrace}", "103客户端错误信息"); + Log.Error(ex,$"客户端主动断开连接错误"); } - } protected async override void ChannelRead0(IChannelHandlerContext ctx, IByteBuffer msg) { _context = ctx; try { + // 将 IByteBuffer 转换为字节数组 + byte[] dataSrc = new byte[msg.ReadableBytes]; + msg.GetBytes(msg.ReaderIndex, dataSrc); + + // 转换为十六进制字符串 + string hexString = BitConverter.ToString(dataSrc).Replace("-", " "); + Log.Information($"收到 Hex Data: {hexString}"); + + //// 确保释放 ByteBuf(Netty 的缓冲区需要手动释放) + //msg.Release(); byte startByte = msg.ReadByte(); ushort length = msg.ReadUnsignedShort(); byte address = msg.ReadByte(); @@ -156,7 +155,7 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server } byte controlWord = msg.ReadByte(); byte functionType = msg.ReadByte(); - + // 计算数据长度 int dataLength = length - 6; if (msg.ReadableBytes < dataLength) @@ -164,21 +163,32 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server // 数据不足,等待更多数据 return; } - + HanleRecvConfirmInfo(ctx, controlWord); byte[] data = new byte[dataLength]; msg.ReadBytes(data); - - string clientIp = ctx.Channel.RemoteAddress.ToString(); - Log.Information($"客户端ip地址:{clientIp}"); - string description = FunctionCodeDescriptions.GetDescription(functionType); - Log.Information($"地址 {address} 功能码:{functionType} 数据长度:{dataLength}", "103客户端消息"); - Log.Information($"地址 {address} 功能码:{functionType} 数据长度:{dataLength}", "103客户端消息"); + + + Log.Information($"主站地址: {address} 功能码:{functionType} 数据长度:{dataLength} 数据:{BitConverter.ToString(data).Replace("-", "")}"); Task.Run(() => _onMessageReceived?.Invoke(address, data, functionType)); HandleFunctionCodeAsync(functionType, address, controlWord, data, ctx); } catch (Exception ex) { - Log.Information($"Error in ChannelRead0: {ex.StackTrace}", "103客户端发送消息"); + Log.Error(ex,$"Error in ChannelRead0: {ex.StackTrace}"); + } + } + private async void HanleRecvConfirmInfo(IChannelHandlerContext ctx,byte controlWord) + { + int bit5 = (controlWord >> 5) & 1; + if (bit5 == 1) + { + // 提取低四位 + byte lower4Bits = (byte)(controlWord & 0x1F); // 使用掩码 0x0F(00001111)保留低四位 + // 创建一个应用控制字实例 + ApplicationControlWord controlWordObj = new ApplicationControlWord(fir: true, fin: true, con: false, sequence: lower4Bits); + // 将控制字转换为字节 + byte controlByte = controlWordObj.ToByte(); + await SendCustomByteMessageAsync( _serverAddr, controlByte, 0, 0); } } private void HandleHeatbeatInfo(IByteBuffer msg, byte address, IChannelHandlerContext ctx) @@ -187,58 +197,26 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server byte handleHeardata = msg.ReadByte(); if (handleHearfunctionType == 7) { - if (_connections.ContainsKey(address)) - { - _connections[address] = ctx; - } - else - { - _connections.Add(address, ctx); - } + string clientIp = ctx.Channel.RemoteAddress.ToString(); Log.Information($"接受到心跳信息:地址:{address} 序列号:{handleHeardata}"); - if (_deviceRunStates.ContainsKey(address)) - { - _deviceRunStates[address] = DateTime.Now; - } - else - { - _deviceRunStates.Add(address, DateTime.Now); - } - - //await HandleHeartbeat(ctx, _serverAddr, handleHeardata); + _deviceRunStateTime = DateTime.Now; + } } private async Task HandleFunctionCodeAsync(byte functionType, byte address, byte controlWord, byte[] data, IChannelHandlerContext ctx) { switch (functionType) { - case 0: + case 0: //确认报文 + IsConfirm = true; + Log.Information("确认报文"); + // break; - case 1: //装置生产信息报文 - Log.Information($"收到装置生产信息报文: {BitConverter.ToString(data)}"); - break; - case 2: - // 装置版本信息报文 - break; - case 3: //装置运行信息报文 - Log.Information($"版本信息: {Encoding.ASCII.GetString(data)}", "103客户端信息"); - break; - case 4: - // 板件状态自诊断信息报文 - - break; - case 5: - //装置运行状态自诊断信息报文 - //MonitoringEventBus.LogHandler($"开入开出信息: {Encoding.ASCII.GetString(data)}", "103客户端信息"); - break; - case 6: - //二次回路智能诊断信息报文 - //await UpdateDeviceCommunicationStateAsync(address, data, ctx); - break; - case 10: // 信息召唤 Log.Information("信息召唤"); + //SendTestData(); + break; default: //MonitoringEventBus.LogHandler("未知的功能码", "103客户端信息"); @@ -254,11 +232,10 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server /// private async Task HandleHeartbeat(IChannelHandlerContext context, byte address, byte data) { - if (context == null) + if (context == null|| !context.Channel.Open|| !context.Channel.Active) { return; } - try { // 构建数据帧 @@ -279,9 +256,14 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server await context.WriteAndFlushAsync(wrappedBuffer); Log.Information($"发送心跳信息:序号:{data} 地址:{address}"); } + catch (ClosedChannelException ex) + { + await context.CloseAsync(); + Log.Error(ex, "心跳信息ClosedChannelException"); + } catch (Exception ex) { - Log.Error(ex, "心跳信息"); + Log.Error(ex, "心跳信息Exception"); } heartbeatCount++; // 防止溢出 @@ -294,27 +276,28 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server public override async void ExceptionCaught(IChannelHandlerContext context, Exception ex) { - try + if (ex is ClosedChannelException) { - //MonitoringEventBus.LogHandler(ex.Message, "103客户端错误消息"); - Log.Information(ex, "错误消息"); - await context.CloseAsync(); + // 处理 Channel 被关闭的异常,关闭客户端连接 + Log.Error(ex, "ClosedChannelException异常 连接已关闭,正在关闭客户端..."); + await context.CloseAsync(); } - catch (Exception ex1) + else { - //MonitoringEventBus.LogHandler($"Error: {ex1.StackTrace}", "关闭tcp客户端"); - + // 处理其他异常 + Log.Error(ex, $"发生异常: {ex.Message}"); + await context.CloseAsync(); } } - + // 发送自定义消息 - public async Task SendCustomByteMessageAsync(IChannelHandlerContext context, byte address, byte controlWord, byte functionType, byte data) + private async Task SendCustomByteMessageAsync( byte address, byte controlWord, byte functionType, byte data) { try { - await SendCustomMessageAsync(context, address, controlWord, functionType, new byte[] { data }); + await SendCustomMessageAsync(address, controlWord, functionType, new byte[] { data }); } catch (Exception ex) { @@ -323,14 +306,16 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server } // 发送自定义消息 - public async Task SendCustomMessageAsync(IChannelHandlerContext context, byte address, byte controlWord, byte functionType, byte[] data) + private async Task SendCustomMessageAsync(byte address, byte controlWord, byte functionType, byte[] data) { try { - if (context==null|| data == null|| data.Length==0) + + if (_context==null || !_context.Channel.Open || !_context.Channel.Active || data == null|| data.Length==0) { return; } + IsConfirm = false; ushort dataLength = (ushort)(6 + data.Length); // 构建数据帧 byte[] buffer = new byte[dataLength]; @@ -338,8 +323,8 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server buffer[0] = 0x68; // 填入长度(假设数据部分为50字节,2字节长度字段+1字节地址+1字节标志位) byte[] bytes = BitConverter.GetBytes(dataLength); - buffer[1] = bytes[0]; // 长度低字节 - buffer[2] = bytes[1]; // 长度高字节 + buffer[1] = bytes[1]; // 长度低字节 + buffer[2] = bytes[0]; // 长度高字节 // 填入地址、应用控制字、功能类型 buffer[3] = address; // 示例地址 buffer[4] = controlWord; // 示例应用控制字 @@ -348,17 +333,103 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server { buffer[i] = data[i-6]; } + string hexString = BitConverter.ToString(buffer).Replace("-", " "); + Log.Information($"发送数据: 地址:{address} 功能码:{functionType} 控制字:{Convert.ToString(controlWord, 2).PadLeft(8, '0')} 数据:{hexString}"); // 填入数据部分 IByteBuffer wrappedBuffer = Unpooled.WrappedBuffer(buffer); // 发送数据 - await context.WriteAndFlushAsync(wrappedBuffer); - string hexString = BitConverter.ToString(buffer).Replace("-", " "); - Log.Information($"地址:{address} 功能码:{functionType} 数据:{hexString}"); - await Task.Delay(100); + await _context.WriteAndFlushAsync(wrappedBuffer); + } + catch (ClosedChannelException ex) + { + await _context.CloseAsync(); } catch (Exception ex) { - Log.Information($"Error: {ex.StackTrace}"); + Log.Error($"Error: {ex.StackTrace}"); + } + + } + private byte _controlWord = 15; + // 发送自定义消息 + public async Task SendCustomMessageAsync(byte address, byte functionType, byte[] data) + { + try + { + + if (_context == null || !_context.Channel.Open || !_context.Channel.Active || data == null || data.Length == 0) + { + return; + } + // 创建一个应用控制字实例 + ApplicationControlWord controlWordObj = new ApplicationControlWord(fir: true, fin: true, con: true, sequence: _controlWord); + // 将控制字转换为字节 + byte controlByte = controlWordObj.ToByte(); + _controlWord++; + if (_controlWord == 31) + { + _controlWord = 15; + } + IsConfirm = false; + ushort dataLength = (ushort)(6 + data.Length); + // 构建数据帧 + byte[] buffer = new byte[dataLength]; + // 填入启动字符 + buffer[0] = 0x68; + // 填入长度(假设数据部分为50字节,2字节长度字段+1字节地址+1字节标志位) + byte[] bytes = BitConverter.GetBytes(dataLength); + buffer[1] = bytes[1]; // 长度低字节 + buffer[2] = bytes[0]; // 长度高字节 + // 填入地址、应用控制字、功能类型 + buffer[3] = address; // 示例地址 + buffer[4] = controlByte; // 示例应用控制字 + buffer[5] = functionType; // 示例功能类型 + for (ushort i = 6; i < dataLength; i++) + { + buffer[i] = data[i - 6]; + } + string hexString = BitConverter.ToString(buffer).Replace("-", " "); + Log.Information($"发送数据: 地址:{address} 功能码:{functionType} 控制字:{Convert.ToString(controlByte, 2).PadLeft(8, '0')} 数据:{hexString}"); + + // 填入数据部分 + IByteBuffer wrappedBuffer = Unpooled.WrappedBuffer(buffer); + // 发送数据 + await _context.WriteAndFlushAsync(wrappedBuffer) + .ContinueWith(async task => + { + await Task.Delay(300); + bool isSendSuccess = false; + for (ushort i = 0; i < 3; i++) + { + + if (!IsConfirm) + { + await _context.WriteAndFlushAsync(wrappedBuffer); + } + else + { + isSendSuccess = true; + Log.Information($"成功确认"); + break; + } + await Task.Delay(3000); + } + if (!isSendSuccess) + { + Log.Information($"超过三次未收到确认,断开连接"); + await _context.CloseAsync(); + } + }); + + + } + catch (ClosedChannelException ex) + { + await _context.CloseAsync(); + } + catch (Exception ex) + { + Log.Error($"Error: {ex.StackTrace}"); } } diff --git a/OperationsMainSiteGatewayServer/TcpSocket/Server/DotNettyTcpServer.cs b/OperationsMainSiteGatewayServer/TcpSocket/Server/DotNettyTcpServer.cs index e67545d..1706fb2 100644 --- a/OperationsMainSiteGatewayServer/TcpSocket/Server/DotNettyTcpServer.cs +++ b/OperationsMainSiteGatewayServer/TcpSocket/Server/DotNettyTcpServer.cs @@ -7,20 +7,40 @@ using DotNetty.Transport.Channels.Sockets; using Serilog; using System.Diagnostics; using System.Runtime; +using Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.TestData; namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server { public class DotNettyTcpServer : ISingletonDependency { - private readonly Dictionary connections = new Dictionary(); // 定义 MessageReceived 事件 public event Action< byte, byte[], byte> MessageReceived; // 装置地址,功能码,消息 - - public event Action> deviceBoardStatesAction; + public Dictionary dotNettyServerHandlers = new (); public DotNettyTcpServer() { //_dotNettyServerHandler = dotNettyServerHandler; + MessageReceived += DotNettyTcpServer_MessageReceived; + } + + private async void DotNettyTcpServer_MessageReceived(byte addr, byte[] data, byte functype) + { + if (functype == 10) //总召 + { + SimulateData.Test1(this); + await Task.Delay(1000); + + SimulateData.Test2(this); + await Task.Delay(1000); + + SimulateData.Test3(this); + await Task.Delay(1000); + + SimulateData.Test4(this); + await Task.Delay(1000); + } + } + MultithreadEventLoopGroup bossGroup ; MultithreadEventLoopGroup workerGroup ; int maxFrameLength = 65536; // 设置最大帧长度 @@ -42,6 +62,7 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server .Option(ChannelOption.SoBacklog, 100) .ChildHandler(new ActionChannelInitializer(channel => { + var serverHandler = new DotNettyServerHandler(MessageReceived, OnChannelInactive, addr); channel.Pipeline.AddLast(new LengthFieldBasedFrameDecoder( maxFrameLength, lengthFieldOffset, @@ -49,8 +70,18 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server lengthAdjustment, initialBytesToStrip )); - channel.Pipeline.AddLast(new DotNettyServerHandler(connections, MessageReceived, deviceBoardStatesAction,addr)); + channel.Pipeline.AddLast(serverHandler); channel.Pipeline.AddLast("hexDumpHandler", new HexDumpHandler()); + string ip = channel.RemoteAddress.ToString(); + + if (!dotNettyServerHandlers.ContainsKey(ip)) + { + dotNettyServerHandlers.Add(ip, serverHandler); + } + else + { + dotNettyServerHandlers[ip] = serverHandler; + } })); IChannel boundChannel = await bootstrap.BindAsync(3000); @@ -60,8 +91,14 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server { } - } + } + // 客户端断开连接时的回调 + private void OnChannelInactive(string channelIp) + { + Console.WriteLine($"客户端断开连接: {channelIp}"); + dotNettyServerHandlers.Remove(channelIp); + } public async Task StopSeverAsync() { try @@ -76,65 +113,24 @@ namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.Server } } - public async void SendMessageByIp(byte address, byte controlWord, byte functionCode , byte message) + public async void SendMessage(byte address, byte functionType, string data) { - if (connections.TryGetValue(address, out IChannelHandlerContext context)) + try { - try + foreach (var item in dotNettyServerHandlers.Values) { - //var buffer = Unpooled.WrappedBuffer(System.Text.Encoding.UTF8.GetBytes(message)); - //context.WriteAndFlushAsync(buffer); - // 构建数据帧 - byte[] buffer = new byte[7]; - - // 填入启动字符 - buffer[0] = 0x16; - - // 填入长度(假设数据部分为50字节,2字节长度字段+1字节地址+1字节标志位) - byte dataLength = 7; - buffer[1] = 0; // 长度低字节 - buffer[2] = dataLength; // 长度高字节 - - // 填入地址、应用控制字、功能类型 - buffer[3] = address; // 示例地址 - buffer[4] = controlWord; // 示例应用控制字 - buffer[5] = functionCode; // 示例功能类型 - buffer[6] = message; - // 填入数据部分 - IByteBuffer wrappedBuffer = Unpooled.WrappedBuffer(buffer); - // 发送数据 - await context.WriteAndFlushAsync(wrappedBuffer); - //Debug.WriteLine($"发送消息到 装置:{address}: {message}"); - string hexString = BitConverter.ToString(buffer); - //MonitoringEventBus.LogHandler($"地址:{address} 功能码:{functionCode} 数据:{hexString}", "103客户端发送消息"); + //byte addr = byte(new Random().Next(1,99)); + byte[] utf8Bytes = System.Text.Encoding.UTF8.GetBytes(data); + await item.SendCustomMessageAsync(address, functionType, utf8Bytes); } - catch (Exception ex) - { - Debug.WriteLine(ex.ToString() ); - } - } - else + catch (Exception ex) { - Debug.WriteLine($"未找到 装置 为 {address} 的连接"); - } - } - // 断开指定 IP 地址的连接 - public void DisconnectByIp(byte addr) - { - if (connections.TryGetValue(addr, out IChannelHandlerContext context)) - { - context.CloseAsync(); // 关闭连接 - connections.Remove(addr); // 从字典中移除该连接 - Debug.WriteLine($"断开 地址 为 {addr} 的连接"); - } - else - { - Debug.WriteLine($"未找到 地址 为 {addr} 的连接"); + Log.Error(ex,""); } + } - } } diff --git a/OperationsMainSiteGatewayServer/TcpSocket/TestData/SimulateData.cs b/OperationsMainSiteGatewayServer/TcpSocket/TestData/SimulateData.cs index c06a8f8..2336417 100644 --- a/OperationsMainSiteGatewayServer/TcpSocket/TestData/SimulateData.cs +++ b/OperationsMainSiteGatewayServer/TcpSocket/TestData/SimulateData.cs @@ -3,16 +3,185 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport; +using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo; +using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.DeviceTcpData; +using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.DeviceHistoryChange; +using Serilog; +using Newtonsoft.Json; namespace Yunda.SOMS.OperationsMainSiteGatewayServer.TcpSocket.TestData { public class SimulateData { + private static int _sendNo = 1; + public static byte[] SendProductionInformation() { string msg = "{\r\n \"station\":\"Bengbu_South_Station\",\r\n \"device\":\"KX211\",\r\n\"timestamp\":\"2024-10-09 12:12:12\",\r\n\"reason\":1,\r\n\"param\":{\r\n \"type\":\" Production_Information\",\r\n\"paras\":\r\n {\r\n \"number\":\"202400xxxxxx\",\r\n \"date\":\"2024-10-09\",\r\n}\r\n}\r\n}\r\n"; byte[] utf8Bytes = System.Text.Encoding.UTF8.GetBytes(msg); return utf8Bytes; } + + public static void Test1(Server.DotNettyTcpServer _dotNettyTcpServer) + { + Log.Information("执行装置履历测试..."); + UploadMainstationBaseInfo uploadMainstationBaseInfo = new UploadMainstationBaseInfo() + { + Station = "德州变电所", + Device = "JDA-211 馈线保护测控装置", + EventType = "设备履历", + Subtype = "装置信息", + EventTime = "2024-15-16", + DATANO = _sendNo, + Info = "周期上送", + Detail = new DeviceProductionInfo + { + DeviceId = "240531914", + ManufacturerModel = "JDA-201", + InternalName = "201主变保护装置", + ManufacturerName = "交大运达电气", + DeviceSpecification = "DC110V/1A", + DeviceVersion = "4.0", + ManufacturingDate = "20240131", + B01PluginId = "1933CA00300001", + B02PluginId = "1933JA04100001", + B03PluginId = "2233IA220V400001", + B04PluginId = "2233IA220V400002", + B05PluginId = "2233OA0000400001", + B06PluginId = "2233OC220V400001", + B07PluginId = "1933DA00100001", + LCDBoardCardId = "1933YA01200001", + RepairRecords = "无维修" // 维修记录为空 + } + }; + var json = JsonConvert.SerializeObject(uploadMainstationBaseInfo, Formatting.Indented); + _dotNettyTcpServer.SendMessage(20, 1, json); + _sendNo++; + } + public static void Test2(Server.DotNettyTcpServer _dotNettyTcpServer) + { + Log.Information("执行设备参数报文测试..."); + UploadMainstationBaseInfo uploadMainstationBaseInfo = new UploadMainstationBaseInfo() + { + Station = "德州变电所", + Device = "JDA-211 馈线保护测控装置", + EventType = "运行诊断", + Subtype = "装置自检", + EventTime = "2024-15-16", + DATANO = _sendNo, + Info = "周期上送", + Detail = new CommunicationParameters + { + IpPort1 = "192.168.1.110", + MaskPort1 = "255.255.255.0", + IpPort2 = "192.168.2.110", + MaskPort2 = "255.255.255.0", + IpPort3 = "192.168.3.110", + MaskPort3 = "255.255.255.0", + Gateway = "192.168.1.1", + SntpServer1Ip = "192.168.4.11", + SntpServer2Ip = "192.168.4.12" + } + }; + + var json = JsonConvert.SerializeObject(uploadMainstationBaseInfo, Formatting.Indented); + _dotNettyTcpServer.SendMessage(20, 2, json); + _sendNo++; + } + public static void Test3(Server.DotNettyTcpServer _dotNettyTcpServer) + { + Log.Information("执行运行诊断操作..."); + UploadMainstationBaseInfo uploadMainstationBaseInfo = new UploadMainstationBaseInfo() + { + Station = "德州变电所", + Device = "JDA-211 馈线保护测控装置", + EventType = "运行诊断", + Subtype = "装置自检", + EventTime = "2024-15-16", + DATANO = _sendNo, + Info = "周期上送", + Detail = new AbnormalComponent + { + ComponentName = "机箱温度", + AbnormalReason = "当前值63°,超过门限60°", + HandlingMeasures = "XXXXX" + } + }; + + var json = JsonConvert.SerializeObject(uploadMainstationBaseInfo, Formatting.Indented); + _dotNettyTcpServer.SendMessage(20, 3, json); + _sendNo++; + } + public static void Test4(Server.DotNettyTcpServer _dotNettyTcpServer) + { + Log.Information("执行运行状态操作..."); + UploadMainstationBaseInfo uploadMainstationBaseInfo = new UploadMainstationBaseInfo() + { + Station = "德州变电所", + Device = "JDA-211 馈线保护测控装置", + EventType = "运行状态", + Subtype = "通信状态", + EventTime = "2024-15-16", + DATANO = _sendNo, + Info = "周期上送", + Detail = new NetworkStatus + { + // 网口1信息 + Port1IpAddress = "192.168.1.11", + Port1Status = "up", + Port1SpeedType = "100M/s", + Port1StartTime = "2024-10-15 11:00:00", + Port1TotalTime = "12000s", + Port1SentFrames = 100, + Port1SentErrorFrames = 0, + Port1ReceivedFrames = 100, + Port1ReceivedErrorFrames = 0, + + // 网口2信息 + Port2IpAddress = "192.168.2.11", + Port2Status = "up", + Port2SpeedType = "100M/s", + + Port2StartTime = "2024-10-15 11:00:00", + Port2TotalTime = "12000s", + Port2SentFrames = 100, + Port2SentErrorFrames = 0, + Port2ReceivedFrames = 100, + Port2ReceivedErrorFrames = 0, + + // 网口3信息 + Port3IpAddress = "192.168.3.11", + Port3Status = "up", + Port3SpeedType = "100M/s", + Port3StartTime = "2024-10-15 11:00:00", + Port3TotalTime = "12000s", + Port3SentFrames = 100, + Port3SentErrorFrames = 0, + Port3ReceivedFrames = 100, + Port3ReceivedErrorFrames = 0, + + // 插件通信状态 + Plugin1Status = "正常", + Plugin3Status = "正常", + Plugin4Status = "正常", + Plugin5Status = "异常", + Plugin7Status = "正常", + + // 网络通信连接状态 + NetworkConnection1Status = "连接", + NetworkConnection2Status = "断开", + NetworkConnection3Status = "连接", + NetworkConnection4Status = "连接", + NetworkConnection5Status = "断开", + NetworkConnection6Status = "连接", + NetworkConnection7Status = "断开", + NetworkConnection8Status = "连接" + } + }; + var json = JsonConvert.SerializeObject(uploadMainstationBaseInfo, Formatting.Indented); + _dotNettyTcpServer.SendMessage(20, 4, json); + _sendNo++; + } } } diff --git a/OperationsMainSiteGatewayServer/Yunda.SOMS.OperationsMainSiteGatewayServer.csproj b/OperationsMainSiteGatewayServer/Yunda.SOMS.OperationsMainSiteGatewayServer.csproj index 328c4cd..cce2467 100644 --- a/OperationsMainSiteGatewayServer/Yunda.SOMS.OperationsMainSiteGatewayServer.csproj +++ b/OperationsMainSiteGatewayServer/Yunda.SOMS.OperationsMainSiteGatewayServer.csproj @@ -29,4 +29,10 @@ + + + + + + diff --git a/YunDa.SOMS.sln b/YunDa.SOMS.sln index 02e4f2c..598cd50 100644 --- a/YunDa.SOMS.sln +++ b/YunDa.SOMS.sln @@ -112,7 +112,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RedisSubscriberConsole", "t EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Yunda.SOMS.OperationsMainSiteGatewayServer", "OperationsMainSiteGatewayServer\Yunda.SOMS.OperationsMainSiteGatewayServer.csproj", "{505F0B5A-4AEB-499C-8937-19FE950B0354}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestCPU", "test\TestCPU\TestCPU.csproj", "{7D90211D-07EA-436E-8147-9D3296CEF400}" +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}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -829,6 +831,24 @@ Global {7D90211D-07EA-436E-8147-9D3296CEF400}.Template|x64.Build.0 = Debug|Any CPU {7D90211D-07EA-436E-8147-9D3296CEF400}.Template|x86.ActiveCfg = Debug|Any CPU {7D90211D-07EA-436E-8147-9D3296CEF400}.Template|x86.Build.0 = Debug|Any CPU + {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Debug|x64.ActiveCfg = Debug|Any CPU + {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Debug|x64.Build.0 = Debug|Any CPU + {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Debug|x86.ActiveCfg = Debug|Any CPU + {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Debug|x86.Build.0 = Debug|Any CPU + {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Release|Any CPU.Build.0 = Release|Any CPU + {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Release|x64.ActiveCfg = Release|Any CPU + {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Release|x64.Build.0 = Release|Any CPU + {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Release|x86.ActiveCfg = Release|Any CPU + {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Release|x86.Build.0 = Release|Any CPU + {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Template|Any CPU.ActiveCfg = Debug|Any CPU + {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Template|Any CPU.Build.0 = Debug|Any CPU + {3BE9DBEE-1FE7-44C7-93DA-7F213D43C44E}.Template|x64.ActiveCfg = Debug|Any CPU + {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 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -880,9 +900,10 @@ Global {C63CFC48-EA3A-4EFA-83D9-693CF00C4424} = {F10AA149-2626-486E-85BB-9CD5365F3016} {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} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {B516B1E8-1CEC-4BCC-BA92-93CB32845E37} VisualSVNWorkingCopyRoot = . + SolutionGuid = {B516B1E8-1CEC-4BCC-BA92-93CB32845E37} EndGlobalSection EndGlobal diff --git a/src/YunDa.Application/YunDa.ISAS.Application.Core/ISASAppServiceBase.cs b/src/YunDa.Application/YunDa.ISAS.Application.Core/ISASAppServiceBase.cs index 4bb4d35..5e5ba7b 100644 --- a/src/YunDa.Application/YunDa.ISAS.Application.Core/ISASAppServiceBase.cs +++ b/src/YunDa.Application/YunDa.ISAS.Application.Core/ISASAppServiceBase.cs @@ -158,6 +158,14 @@ namespace YunDa.ISAS.Application.Core string basePath = ""; return SetAttachmentFolder(ref basePath, ISASConsts.RobotAliasPathFolder); } + /// + /// 获取机器人FTP文件保存路径,使用带有appServiceConfiguration参数的构造器 + /// + /// + protected string GetAttachmentDirectory() + { + return _appServiceConfiguration?.SysAttachmentFolder; + } ///// ///// 获取 ///// @@ -219,7 +227,30 @@ namespace YunDa.ISAS.Application.Core } } - + protected string GetImageBase64(string imagePath) + { + if (!File.Exists(imagePath)) + { + return ""; + } + // 读取图片文件为字节数组 + byte[] imageBytes = File.ReadAllBytes(imagePath); + // 转换为 Base64 编码字符串 + return Convert.ToBase64String(imageBytes); + } + protected void Base64ToImage(string base64String, string outputPath) + { + // 确保目录存在 + string directory = Path.GetDirectoryName(outputPath); + if (!Directory.Exists(directory)) + { + Directory.CreateDirectory(directory); + } + // 将 Base64 字符串转换为字节数组 + byte[] imageBytes = Convert.FromBase64String(base64String); + // 将字节数组写入文件 + File.WriteAllBytes(outputPath, imageBytes); + } /// /// 根据开始时间和结束时间生成yyyyMM字符串数组 /// diff --git a/src/YunDa.Application/YunDa.ISAS.Application.Core/YunDa.ISAS.Application.Core.xml b/src/YunDa.Application/YunDa.ISAS.Application.Core/YunDa.ISAS.Application.Core.xml index 1a03a48..9ed0b63 100644 --- a/src/YunDa.Application/YunDa.ISAS.Application.Core/YunDa.ISAS.Application.Core.xml +++ b/src/YunDa.Application/YunDa.ISAS.Application.Core/YunDa.ISAS.Application.Core.xml @@ -1215,6 +1215,12 @@ + + + 获取机器人FTP文件保存路径,使用带有appServiceConfiguration参数的构造器 + + + 根据开始时间和结束时间生成yyyyMM字符串数组 diff --git a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/EquipmentInfo/EquipmentInfoExAppService.cs b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/EquipmentInfo/EquipmentInfoExAppService.cs index 80f6018..6fc6bc5 100644 --- a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/EquipmentInfo/EquipmentInfoExAppService.cs +++ b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/EquipmentInfo/EquipmentInfoExAppService.cs @@ -486,7 +486,7 @@ namespace YunDa.ISAS.Application.GeneralInformation return rst; } /// - /// 初始化遥信队列 + /// 初始化遥测队列 /// [HttpGet, AbpAllowAnonymous] [ShowApi] @@ -522,13 +522,11 @@ namespace YunDa.ISAS.Application.GeneralInformation .GroupBy(t => $"{t.DeviceAddress}_{t.CPUSector}_{t.DispatcherAddress}_{(int)t.DataSourceCategory}") .Select(g => g.First()) // 只保留每组的第一个 .ToList(); - // 输出去重后的数据 telemeterings = uniqueTelemeterings; List telemeteringsRedis = await _telemeteringModelListRedis.HashSetGetAllAsync(rediskey); if (telemeteringsRedis != null && telemeteringsRedis.Count > 0) { - //// 假设 TelesignalisationModel 有一个 Id 属性作为比较依据 var difference = telemeterings .Where(localItem => !telemeteringsRedis.Any(redisItem => redisItem.Id == localItem.Id)) @@ -543,14 +541,11 @@ namespace YunDa.ISAS.Application.GeneralInformation var entities = ObjectMapper.Map>(telemeterings); _telemeteringModelListRedis.HashSetUpdateManyAsync(rediskey, ids, entities); } - - } catch (Exception ex) { Log4Helper.Error(this.GetType(), "初始化遥测", ex); } - } /// /// 初始化遥信队列 diff --git a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/ProtecttionDeviceRedisAppService.cs b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/ProtecttionDeviceRedisAppService.cs new file mode 100644 index 0000000..b1b76de --- /dev/null +++ b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/ProtecttionDeviceRedisAppService.cs @@ -0,0 +1,174 @@ +using Abp.Application.Services; +using Abp.Authorization; +using Abp.Collections.Extensions; +using Abp.Domain.Repositories; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using YunDa.ISAS.Application.Core; +using YunDa.ISAS.Application.Core.Session; +using YunDa.ISAS.Application.Core.SwaggerHelper; +using YunDa.ISAS.DataTransferObject; +using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport; +using YunDa.SOMS.Entities.GeneralInformation; + +namespace YunDa.ISAS.Application.GeneralInformation.ProtectionDevice +{ + public class ProtecttionDeviceRedisAppService : ISASAppServiceBase, IApplicationService + { + private readonly IRepository _protectionDeviceInfoRepository; + private readonly IRepository _secondaryCircuitRepository; + + private readonly IRepository _secondaryCircuitProtectionDeviceRepository; + + + public ProtecttionDeviceRedisAppService(ISessionAppService sessionAppService, + IRepository secondaryCircuitRepository, + IRepository protectionDeviceInfoRepository, + IRepository secondaryCircuitProtectionDeviceRepository + ) : base(sessionAppService) + { + _protectionDeviceInfoRepository = protectionDeviceInfoRepository; + _secondaryCircuitRepository = secondaryCircuitRepository; + _secondaryCircuitProtectionDeviceRepository = secondaryCircuitProtectionDeviceRepository; + } + /// + /// 获取装置自检信息 + /// + /// + [AbpAllowAnonymous] + [ShowApi] + [HttpGet] + public RequestResult> GetEquipmentInfoAbnormalComponents(Guid stationId, Guid equipmentInfoId) + { + RequestResult> rst = new RequestResult>(); + + try + { + // 从仓库中获取所有保护设备信息 + var devices = _protectionDeviceInfoRepository.GetAll() + .WhereIf(equipmentInfoId!=default,t=>t.EquipmentInfoId == equipmentInfoId) + .ToList(); + // 定义可能的异常列表 + var possibleAbnormalities = new List<(string ComponentName, string AbnormalReason, string HandlingMeasures)> + { + ("DC5V电压1", "电压超出正常范围", "检查电源线路"), + ("DC5V电压2", "电压过低", "更换电源模块"), + ("DC5V电压3", "电压过高", "调节电源输出"), + ("版本", "版本不匹配", "更新软件版本"), + ("插件1通信", "通信中断", "检查插件连接"), + ("插件3通信", "通信中断", "检查插件连接"), + ("插件4通信", "通信中断", "检查插件连接"), + ("插件5通信", "通信中断", "检查插件连接"), + ("插件7通信", "通信中断", "检查插件连接"), + ("机箱温度", "温度异常", "检查散热系统"), + ("CPU温度", "温度异常", "检查CPU运行状态") + }; + Random random = new Random(); + var data = new List(); + + foreach (var device in devices) + { + foreach (var abnormality in possibleAbnormalities) + { + // 随机生成正常或异常状态 + bool isNormal = random.NextDouble() > 0.5; // 50% 概率 + + data.Add(new EquipmentInfoAbnormalComponent + { + EquipmentInfoId = device.EquipmentInfoId, + ComponentName = isNormal ? $"{abnormality.ComponentName}正常" : $"{abnormality.ComponentName}异常", + AbnormalReason = isNormal ? "无" : abnormality.AbnormalReason, + HandlingMeasures = isNormal ? "无需处理" : abnormality.HandlingMeasures + }); + } + } + + rst.ResultData = data; + rst.Flag = true; + + } + catch (Exception ex) + { + + throw; + } + return rst; + } + + /// + /// 获取二次回路诊断信息 + /// + /// + [AbpAllowAnonymous] + [ShowApi] + [HttpGet] + public RequestResult> GetSecondaryCircuitComponents(Guid stationId, Guid equipmentInfoId) + { + RequestResult> rst = new RequestResult>(); + + try + { + var secondaryCircuitProtectionDevice = _secondaryCircuitProtectionDeviceRepository + .GetAllIncluding(t => t.ProtectionDevice,t=>t.SecondaryCircuit) + .WhereIf(equipmentInfoId!=default,t=>t.ProtectionDevice.EquipmentInfoId == equipmentInfoId) + .ToList(); + var data = secondaryCircuitProtectionDevice.Select(t => new SecondaryCircuitComponent + { + SecondaryCircuitName = t.SecondaryCircuit.Name, + ComponentName = "回路正常", + AbnormalReason = "表达式(900A)值,在范围1000A内", + SecondaryCircuitId = t.SecondaryCircuitId, + EquipmentInfoId = t.ProtectionDevice.EquipmentInfoId + }); + rst.ResultData = data.ToList(); + rst.Flag = true; + + } + catch (Exception ex) + { + + throw; + } + return rst; + } + + /// + /// 获取装置寿命预测信息 + /// + /// + [AbpAllowAnonymous] + [ShowApi] + [HttpGet] + public RequestResult> GetEquipmentInfoRemainingLifeAssessments(Guid stationId, Guid equipmentInfoId) + { + RequestResult> rst = new RequestResult>(); + + try + { + var decices = _protectionDeviceInfoRepository + .GetAllIncluding() + .WhereIf(equipmentInfoId != default, t => t.EquipmentInfoId == equipmentInfoId) + .ToList(); + var data = decices.Select(t => new EquipmentInfoRemainingLifeAssessment + { + + EquipmentInfoId = t.EquipmentInfoId, + RemainingLifeInYears ="5.8年" + }); + rst.ResultData = data.ToList(); + rst.Flag = true; + + } + catch (Exception ex) + { + + throw; + } + return rst; + } + } +} diff --git a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/SecondaryCircuitInfo/SecondaryCircuitAppService.cs b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/SecondaryCircuitInfo/SecondaryCircuitAppService.cs index 943dbd8..834b72c 100644 --- a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/SecondaryCircuitInfo/SecondaryCircuitAppService.cs +++ b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/SecondaryCircuitInfo/SecondaryCircuitAppService.cs @@ -3,10 +3,12 @@ using Abp.Authorization; using Abp.Domain.Repositories; using Abp.Domain.Uow; using Abp.EntityFrameworkCore.Repositories; +//using Google.Protobuf.WellKnownTypes; using Microsoft.AspNetCore.Components.Server.Circuits; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -66,6 +68,8 @@ namespace YunDa.ISAS.Application.GeneralInformation.SecondaryCircuitInfo return result; } ObjectMapper.Map(input, entity); + entity.PicturePath = Path.Combine(base.GetAttachmentDirectory(), "images","circuit", $"{input.Name}.jpg"); + base.Base64ToImage(input.PictureBase64, entity.PicturePath); entity.LastModificationTime = DateTime.Now; entity.LastModifierUserId = base.GetCurrentUser().Id; } @@ -75,9 +79,10 @@ namespace YunDa.ISAS.Application.GeneralInformation.SecondaryCircuitInfo entity = ObjectMapper.Map(input); entity.CreationTime = DateTime.Now; entity.CreatorUserId = base.GetCurrentUser().Id; + entity.PicturePath = Path.Combine(base.GetAttachmentDirectory(), "images","circuit", $"{input.Name}.jpg"); + base.Base64ToImage(input.PictureBase64, entity.PicturePath); await _secondaryCircuitRepository.InsertAsync(entity); } - result.ResultData = ObjectMapper.Map(entity); result.Flag = true; } @@ -178,7 +183,8 @@ namespace YunDa.ISAS.Application.GeneralInformation.SecondaryCircuitInfo { query = query.Where(x => x.IsActive == searchCondition.SearchCondition.IsOnlyActive.Value); } - if (searchCondition.SearchCondition.CircuitType.HasValue) + + if (searchCondition.SearchCondition.CircuitType.HasValue&& Enum.IsDefined(typeof(CircuitTypeEnum), searchCondition.SearchCondition.CircuitType.Value)) { query = query.Where(x => x.CircuitType == searchCondition.SearchCondition.CircuitType.Value); } @@ -315,7 +321,10 @@ namespace YunDa.ISAS.Application.GeneralInformation.SecondaryCircuitInfo } #if DEBUG - // 生成测试数据方法 + /// + /// 生成10个测试回路信息 + /// + /// [HttpGet] [ShowApi] [DisableAuditing] @@ -324,10 +333,9 @@ namespace YunDa.ISAS.Application.GeneralInformation.SecondaryCircuitInfo { Guid transstationId = new Guid("08d87a1b-f61d-4673-8532-680d307e5d12"); var currentUserId = base.GetCurrentUser().Id; - // 测试数据列表 var testData = new List(); - + string base64png = GetImageBase64(Path.Combine(base.GetAttachmentDirectory(), "images","circuit", "断路器控制回路.png")); // 生成交流回路 20 条数据 for (int i = 1; i <= 20; i++) { @@ -336,7 +344,8 @@ namespace YunDa.ISAS.Application.GeneralInformation.SecondaryCircuitInfo SeqNo = i, Name = $"交流回路_{i}", CircuitType = CircuitTypeEnum.ACCircuit, - PicturePath = $"/images/accircuit_{i}.png", + PicturePath = $"/images/circuit/断路器控制回路.png", + PictureBase64 = base64png, Code = $"ACC{i:D3}", TransformerSubstationId = transstationId, // 生成一个随机的变电站ID,可根据实际情况调整 Description = $"交流回路描述_{i}", @@ -356,7 +365,8 @@ namespace YunDa.ISAS.Application.GeneralInformation.SecondaryCircuitInfo SeqNo = i + 20, Name = $"控制回路_{i}", CircuitType = CircuitTypeEnum.ControlCircuit, - PicturePath = $"/images/controlcircuit_{i}.png", + PicturePath = $"/images/circuit/断路器控制回路.png", + PictureBase64 = base64png, Code = $"CTRL{i:D3}", TransformerSubstationId = transstationId, // 生成一个随机的变电站ID,可根据实际情况调整 Description = $"控制回路描述_{i}", @@ -376,7 +386,8 @@ namespace YunDa.ISAS.Application.GeneralInformation.SecondaryCircuitInfo SeqNo = i + 40, Name = $"光纤回路_{i}", CircuitType = CircuitTypeEnum.OpticalFiberCircuit, - PicturePath = $"/images/opticalfibercircuit_{i}.png", + PicturePath = $"/images/circuit/断路器控制回路.png", + PictureBase64 = base64png, Code = $"OFC{i:D3}", TransformerSubstationId = transstationId, // 生成一个随机的变电站ID,可根据实际情况调整 Description = $"光纤回路描述_{i}", diff --git a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/SecondaryCircuitInfo/SecondaryCircuitLogicExpressionAppService.cs b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/SecondaryCircuitInfo/SecondaryCircuitLogicExpressionAppService.cs index 8131f91..3ad9fe3 100644 --- a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/SecondaryCircuitInfo/SecondaryCircuitLogicExpressionAppService.cs +++ b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/SecondaryCircuitInfo/SecondaryCircuitLogicExpressionAppService.cs @@ -1,4 +1,5 @@ using Abp.Authorization; +using Abp.Domain.Entities; using Abp.Domain.Repositories; using Microsoft.AspNetCore.Mvc; using System; @@ -12,9 +13,12 @@ using YunDa.ISAS.Application.Core.Configuration; using YunDa.ISAS.Application.Core.Session; using YunDa.ISAS.Application.Core.SwaggerHelper; using YunDa.ISAS.DataTransferObject; +using YunDa.ISAS.Entities.DataMonitoring; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto.SearchCondition; using YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto; using YunDa.SOMS.Entities.GeneralInformation; +using static iText.StyledXmlParser.Jsoup.Select.Evaluator; +using static NetMQ.NetMQSelector; namespace YunDa.ISAS.Application.GeneralInformation.SecondaryCircuitInfo { @@ -25,15 +29,25 @@ namespace YunDa.ISAS.Application.GeneralInformation.SecondaryCircuitInfo { private readonly IRepository _secondaryCircuitRepository; private readonly IRepository _secondaryCircuitLogicExpressionRepository; + private readonly IRepository _secondaryCircuitProtectionDeviceRepository; + private readonly IRepository _telemeteringConfigurationRepository; + private readonly IRepository _telesignalisationConfigurationRepository; + public SecondaryCircuitLogicExpressionAppService(ISessionAppService sessionAppService, IRepository secondaryCircuitLogicExpressionRepository, IRepository secondaryCircuitRepository, - IAppServiceConfiguration appServiceConfiguration) : base(sessionAppService, appServiceConfiguration) + IRepository secondaryCircuitProtectionDeviceRepository, + IRepository telemeteringConfigurationRepository, + IRepository telesignalisationConfigurationRepository, + IAppServiceConfiguration appServiceConfiguration) : base(sessionAppService, appServiceConfiguration) { _secondaryCircuitLogicExpressionRepository = secondaryCircuitLogicExpressionRepository; _secondaryCircuitRepository = secondaryCircuitRepository; + _secondaryCircuitProtectionDeviceRepository = secondaryCircuitProtectionDeviceRepository; + _telemeteringConfigurationRepository = telemeteringConfigurationRepository; + _telesignalisationConfigurationRepository = telesignalisationConfigurationRepository; } /// /// 添加或者修改二次回路的逻辑表达式 @@ -67,9 +81,26 @@ namespace YunDa.ISAS.Application.GeneralInformation.SecondaryCircuitInfo // 新建逻辑 entity = ObjectMapper.Map(input); entity.CreationTime = DateTime.Now; + var secondaryCircuitProtectionDevice = _secondaryCircuitProtectionDeviceRepository.GetAllIncluding(t => t.ProtectionDevice, t => t.ProtectionDevice.EquipmentInfo) + .Where(t => t.SecondaryCircuitId == input.SecondaryCircuitId).FirstOrDefault(); + if (secondaryCircuitProtectionDevice != null) + { + var dispatchaddr = _telemeteringConfigurationRepository.GetAll().Where(t => t.DataSourceCategory == DataSourceCategoryEnum.None).Select(t => t.DispatcherAddress).Max() + 1; + var telemetering = InsertTelemetering(secondaryCircuitProtectionDevice, entity.Name, dispatchaddr); + var telemeteringId = await _telemeteringConfigurationRepository.InsertAndGetIdAsync(telemetering); + if (telemeteringId!=default) + { + entity.TelemeteringConfigurationId = telemeteringId; + } + var telesignal = InsertTelesignal(secondaryCircuitProtectionDevice, entity.Name); + var telesignalId = await _telesignalisationConfigurationRepository.InsertAndGetIdAsync(telesignal); + if (telesignalId!= default) + { + entity.TelesignalisationConfigurationId = telesignalId; + } + } await _secondaryCircuitLogicExpressionRepository.InsertAsync(entity); } - result.ResultData = null;// ObjectMapper.Map(entity); result.Flag = true; } @@ -81,7 +112,67 @@ namespace YunDa.ISAS.Application.GeneralInformation.SecondaryCircuitInfo } return result; } - + private TelemeteringConfiguration InsertTelemetering(SecondaryCircuitProtectionDevice secondaryCircuitProtectionDevice, string secondaryCircuitName, int dispatchaddr) + { + if (secondaryCircuitProtectionDevice!=null) + { + // 新增的记录 + var entity = new TelemeteringConfiguration(); + entity.DispatcherAddress = 0; + entity.CPUSector = 0; + entity.DeviceAddress = 0; + entity.InfoAddress = 0; + entity.InfoCPUSector = 0; + entity.InfoDeviceAddress = dispatchaddr; + entity.IsVirtualDevice = true; + entity.IsSelfCheckingValue = false; + entity.Name = $"{secondaryCircuitName}_判定遥测"; + entity.SeqNo = 100000; + entity.IsActive = true; + entity.IsSave = false; + entity.IsSendDispatcher = false; + entity.IsVisible = true; + entity.UpperLimit = 10; + entity.LowerLimit = 0; + entity.DecimalDigits = 2; + entity.Coefficient = 1; + entity.Unit = ""; + entity.TransformerSubstationId = secondaryCircuitProtectionDevice.ProtectionDevice.TransformerSubstationId; + entity.DataSourceCategory = DataSourceCategoryEnum.None; + entity.EquipmentInfoId = secondaryCircuitProtectionDevice.ProtectionDevice.EquipmentInfoId; + entity.EquipmentTypeId = secondaryCircuitProtectionDevice.ProtectionDevice.EquipmentInfo.EquipmentTypeId; + return entity; + } + return null; + } + private TelesignalisationConfiguration InsertTelesignal(SecondaryCircuitProtectionDevice secondaryCircuitProtectionDevice, string secondaryCircuitName) + { + // 新增的记录 + var entity = new TelesignalisationConfiguration + { + Name = $"{secondaryCircuitName}_判定虚遥信", + DispatcherAddress = 0, + CPUSector = 0, + DeviceAddress = 0, + InfoAddress = 0, + InfoCPUSector = 0, + InfoDeviceAddress = 0, + IsVirtualDevice = true, + IsSelfCheckingValue = false, + SeqNo = 100000, + IsActive = true, + IsSave = false, + IsSendDispatcher = true, + IsVisible = true, + RemoteType = RemoteTypeEnum.DoublePoint, + YesContent = "故障", + NoContent = "消失", + UnsurenessContent = "不定", + IsCommStatus = false, + TransformerSubstationId = secondaryCircuitProtectionDevice.ProtectionDevice.TransformerSubstationId, + }; + return entity; + } [HttpGet] [ShowApi] [AbpAllowAnonymous] @@ -90,6 +181,12 @@ namespace YunDa.ISAS.Application.GeneralInformation.SecondaryCircuitInfo RequestEasyResult result = new RequestEasyResult(); try { + var entity = await _secondaryCircuitLogicExpressionRepository.FirstOrDefaultAsync(id); + if (entity != null) + { + await _telesignalisationConfigurationRepository.DeleteAsync(entity.TelesignalisationConfigurationId.Value); + await _telemeteringConfigurationRepository.DeleteAsync(entity.TelemeteringConfigurationId.Value); + } await _secondaryCircuitLogicExpressionRepository.DeleteAsync(id); result.Flag = true; } @@ -116,6 +213,12 @@ namespace YunDa.ISAS.Application.GeneralInformation.SecondaryCircuitInfo { foreach (var id in ids) { + var entity = await _secondaryCircuitLogicExpressionRepository.FirstOrDefaultAsync(id); + if (entity != null) + { + await _telesignalisationConfigurationRepository.DeleteAsync(entity.TelesignalisationConfigurationId.Value); + await _telemeteringConfigurationRepository.DeleteAsync(entity.TelemeteringConfigurationId.Value); + } await _secondaryCircuitLogicExpressionRepository.DeleteAsync(id); } result.Flag = true; diff --git a/src/YunDa.Application/YunDa.ISAS.Application/YunDa.ISAS.Application.xml b/src/YunDa.Application/YunDa.ISAS.Application/YunDa.ISAS.Application.xml index d97fdd6..c2d50b3 100644 --- a/src/YunDa.Application/YunDa.ISAS.Application/YunDa.ISAS.Application.xml +++ b/src/YunDa.Application/YunDa.ISAS.Application/YunDa.ISAS.Application.xml @@ -2709,7 +2709,7 @@ - 初始化遥信队列 + 初始化遥测队列 @@ -3592,6 +3592,24 @@ 写装置履历xml文件 + + + 获取装置自检信息 + + + + + + 获取二次回路诊断信息 + + + + + + 获取装置寿命预测信息 + + + 查询定值信息 @@ -3637,6 +3655,12 @@ + + + 生成10个测试回路信息 + + + 二次回路逻辑表达式类 diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/CommonDto/TimeValue.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/CommonDto/TimeValue.cs new file mode 100644 index 0000000..bddf28d --- /dev/null +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/CommonDto/TimeValue.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace YunDa.SOMS.DataTransferObject.CommonDto +{ + public struct TimeValue + { + public DateTime Time { get; set; } + public double Value { get; set; } + } +} diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/GeneralInformation/ProtectionSettingDto/ImDeviceDzOutput.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/GeneralInformation/ProtectionSettingDto/ImDeviceDzOutput.cs index 3428cca..c2f24c6 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/GeneralInformation/ProtectionSettingDto/ImDeviceDzOutput.cs +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/GeneralInformation/ProtectionSettingDto/ImDeviceDzOutput.cs @@ -39,7 +39,7 @@ namespace YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionSettingDto /// /// 数值(统一使用字符串表示) /// - public string Value { get; set; } = ""; + public string Value { get; set; } =( new Random().Next(0,10)).ToString(); } } diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/GeneralInformation/SecondaryCircuitDto/EditSecondaryCircuitInput.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/GeneralInformation/SecondaryCircuitDto/EditSecondaryCircuitInput.cs index 58e0e75..ebff1eb 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/GeneralInformation/SecondaryCircuitDto/EditSecondaryCircuitInput.cs +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/GeneralInformation/SecondaryCircuitDto/EditSecondaryCircuitInput.cs @@ -32,11 +32,6 @@ namespace YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoD /// public virtual CircuitTypeEnum CircuitType { get; set; } - /// - /// 关联显示图片路径 - /// - public virtual string PicturePath { get; set; } - /// /// 编码 /// @@ -45,7 +40,7 @@ namespace YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoD /// 所属变电站 /// public virtual Guid TransformerSubstationId { get; set; } - + public virtual string PictureBase64 { get; set; } /// /// 描述 /// diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/GeneralInformation/SecondaryCircuitDto/SecondaryCircuitLogicExpressionOutput.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/GeneralInformation/SecondaryCircuitDto/SecondaryCircuitLogicExpressionOutput.cs index be0b62b..61f0ad8 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/GeneralInformation/SecondaryCircuitDto/SecondaryCircuitLogicExpressionOutput.cs +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/GeneralInformation/SecondaryCircuitDto/SecondaryCircuitLogicExpressionOutput.cs @@ -11,6 +11,7 @@ using YunDa.SOMS.Entities.GeneralInformation; using Abp.AutoMapper; using YunDa.ISAS.DataTransferObject.DataMonitoring.TelemeteringConfigurationDto; using Abp.Application.Services.Dto; +using YunDa.ISAS.DataTransferObject.DataMonitoring.TelesignalisationConfigurationDto; namespace YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto { @@ -48,7 +49,7 @@ namespace YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto /// public virtual Guid? TelesignalisationConfigurationId { get; set; } - public virtual TelemeteringConfigurationProperty TelesignalisationConfiguration { get; set; } + public virtual TelesignalisationConfigurationProperty TelesignalisationConfiguration { get; set; } /// /// 备注 diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/GeneralInformation/SecondaryCircuitDto/SecondaryCircuitOutput.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/GeneralInformation/SecondaryCircuitDto/SecondaryCircuitOutput.cs index c3fd3fd..8ffae11 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/GeneralInformation/SecondaryCircuitDto/SecondaryCircuitOutput.cs +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/GeneralInformation/SecondaryCircuitDto/SecondaryCircuitOutput.cs @@ -49,8 +49,8 @@ namespace YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoD /// 所属变电站 /// public virtual Guid TransformerSubstationId { get; set; } + public virtual string PictureBase64 { get; set; } - public virtual TransformerSubstation TransformerSubstation { get; set; } /// /// 描述 /// diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceHistoryChange/DeviceProductionInfo.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceHistoryChange/DeviceProductionInfo.cs index f97c69d..e5b2ae8 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceHistoryChange/DeviceProductionInfo.cs +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceHistoryChange/DeviceProductionInfo.cs @@ -7,34 +7,55 @@ using System.Threading.Tasks; namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.DeviceHistoryChange { - public class DeviceProductionInfo: UploadMainstationBaseDetailInfo + public class DeviceProductionInfo { - [JsonProperty("装置名称")] - public string DeviceName { get; set; } + [JsonProperty("装置编号")] + public string DeviceId { get; set; } - [JsonProperty("装置型号")] - public string DeviceModel { get; set; } + [JsonProperty("厂家型号")] + public string ManufacturerModel { get; set; } + + [JsonProperty("厂家内部名称")] + public string InternalName { get; set; } + + [JsonProperty("厂家名称")] + public string ManufacturerName { get; set; } [JsonProperty("装置规格")] public string DeviceSpecification { get; set; } - [JsonProperty("装置出厂编号")] - public string DeviceSerialNumber { get; set; } + [JsonProperty("装置版本")] + public string DeviceVersion { get; set; } - [JsonProperty("装置生产日期")] - public DateTime ProductionDate { get; set; } + [JsonProperty("出厂日期")] + public string ManufacturingDate { get; set; } - [JsonProperty("装置检验日期")] - public DateTime InspectionDate { get; set; } + [JsonProperty("B01插件编号")] + public string B01PluginId { get; set; } - [JsonProperty("装置检验人员")] - public string Inspector { get; set; } + [JsonProperty("B02插件编号")] + public string B02PluginId { get; set; } - [JsonProperty("装置检验结果")] - public string InspectionResult { get; set; } + [JsonProperty("B03插件编号")] + public string B03PluginId { get; set; } - [JsonProperty("板卡信息")] - public List BoardInfoList { get; set; } + [JsonProperty("B04插件编号")] + public string B04PluginId { get; set; } + + [JsonProperty("B05插件编号")] + public string B05PluginId { get; set; } + + [JsonProperty("B06插件编号")] + public string B06PluginId { get; set; } + + [JsonProperty("B07插件编号")] + public string B07PluginId { get; set; } + + [JsonProperty("液晶板卡编号")] + public string LCDBoardCardId { get; set; } + + [JsonProperty("维修记录")] + public string RepairRecords { get; set; } } public class BoardProductionInfo diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceOperationWarning/DeviceParameterInfo.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceOperationWarning/DeviceParameterInfo.cs index d299cf1..f24f40d 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceOperationWarning/DeviceParameterInfo.cs +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceOperationWarning/DeviceParameterInfo.cs @@ -10,7 +10,7 @@ namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.DeviceOperati /// /// 设备参数信息 /// - public class DeviceParameterInfo: UploadMainstationBaseDetailInfo + public class DeviceParameterInfo { [JsonProperty("通道参数")] public List ChannelParameters { get; set; } diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceOperationWarning/RunningInfo.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceOperationWarning/RunningInfo.cs index 8907e27..df5e9ce 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceOperationWarning/RunningInfo.cs +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceOperationWarning/RunningInfo.cs @@ -10,7 +10,7 @@ namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.DeviceOperati /// /// 运行信息 /// - public class RunningInfo: UploadMainstationBaseDetailInfo + public class RunningInfo { [JsonProperty("对时信息")] public string TimeSyncInfo { get; set; } diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceOperationWarning/SettingSolidificationInfo.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceOperationWarning/SettingSolidificationInfo.cs index 384f2c4..eb5b10d 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceOperationWarning/SettingSolidificationInfo.cs +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceOperationWarning/SettingSolidificationInfo.cs @@ -10,7 +10,7 @@ namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.DeviceOperati /// /// 定值信息 /// - public class SettingSolidificationInfo: UploadMainstationBaseDetailInfo + public class SettingSolidificationInfo { [JsonProperty("定值固化信息")] public SettingSolidification SettingSolidification { get; set; } diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceOperationWarning/VersionInfo.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceOperationWarning/VersionInfo.cs index 34f9b77..66d7681 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceOperationWarning/VersionInfo.cs +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceOperationWarning/VersionInfo.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.DeviceOperationWarning { - public class VersionInfo: UploadMainstationBaseDetailInfo + public class VersionInfo { [JsonProperty("基线板本")] public string BaselineBoard { get; set; } diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceParameterChange/CircuitWarning.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceParameterChange/CircuitWarning.cs index 684ae05..03b2b40 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceParameterChange/CircuitWarning.cs +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceParameterChange/CircuitWarning.cs @@ -10,7 +10,7 @@ namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.DeviceParamet /// /// 回路诊断 /// - public class CircuitWarning: UploadMainstationBaseDetailInfo + public class CircuitWarning { [JsonProperty("回路名称")] public string CircuitName { get; set; } diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceParameterChange/LifeSpanWarning.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceParameterChange/LifeSpanWarning.cs index 99d5484..b4c8295 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceParameterChange/LifeSpanWarning.cs +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceParameterChange/LifeSpanWarning.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.DeviceParameterChange { - public class LifeSpanWarning: UploadMainstationBaseDetailInfo + public class LifeSpanWarning { [JsonProperty("状态")] public string Status { get; set; } diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceParameterChange/SelfCheckWarning.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceParameterChange/SelfCheckWarning.cs index 0b0d958..2387428 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceParameterChange/SelfCheckWarning.cs +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/DeviceParameterChange/SelfCheckWarning.cs @@ -10,7 +10,7 @@ namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.DeviceParamet /// /// 自检信息 /// - public class SelfCheckWarning : UploadMainstationBaseDetailInfo + public class SelfCheckWarning { [JsonProperty("插件板件信息")] public List PluginBoardInfo { get; set; } diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/AbnormalComponent.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/AbnormalComponent.cs new file mode 100644 index 0000000..d999e36 --- /dev/null +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/AbnormalComponent.cs @@ -0,0 +1,72 @@ +using MessagePack; +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport +{ + /// + /// 装置自检 + /// + [MessagePackObject(keyAsPropertyName: true)] + public class AbnormalComponent + { + /// + /// 异常元件的名称 + /// + [JsonProperty("异常元件")] + public string ComponentName { get; set; } + + /// + /// 异常原因描述 + /// + [JsonProperty("异常原因")] + public string AbnormalReason { get; set; } + + /// + /// 建议的处理措施 + /// + [JsonProperty("处理措施")] + public string HandlingMeasures { get; set; } + } + /// + /// 装置自检信息 + /// + [MessagePackObject(keyAsPropertyName: true)] + public class EquipmentInfoAbnormalComponent: AbnormalComponent + { + public Guid EquipmentInfoId { get; set; } + } + [MessagePackObject(keyAsPropertyName: true)] + public class SecondaryCircuitComponent : AbnormalComponent + { + public Guid EquipmentInfoId { get; set; } + public string SecondaryCircuitName { get; set; } + + + public Guid SecondaryCircuitId { get; set; } + } + /// + /// 寿命诊断 + /// + [MessagePackObject(keyAsPropertyName: true)] + public class RemainingLifeAssessment + { + /// + /// 剩余寿命(单位:年)。 + /// + [JsonProperty("剩余寿命评估")] + public string RemainingLifeInYears { get; set; } + } + [MessagePackObject(keyAsPropertyName: true)] + public class EquipmentInfoRemainingLifeAssessment: RemainingLifeAssessment + { + /// + /// 设备名称。 + /// + public Guid EquipmentInfoId { get; set; } + } +} diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/NetworkStatus.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/NetworkStatus.cs new file mode 100644 index 0000000..79c09da --- /dev/null +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/NetworkStatus.cs @@ -0,0 +1,138 @@ +using Newtonsoft.Json; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport +{ + public class NetworkStatus + { + // 网口1信息 + [JsonProperty("网口1IP地址")] + public string Port1IpAddress { get; set; } + + [JsonProperty("网口1状态")] + public string Port1Status { get; set; } + + [JsonProperty("网口1速率类型")] + public string Port1SpeedType { get; set; } + + [JsonProperty("网口1起始时间")] + public string Port1StartTime { get; set; } + + [JsonProperty("网口1累计时间")] + public string Port1TotalTime { get; set; } + + [JsonProperty("网口1发送帧数")] + public long Port1SentFrames { get; set; } + + [JsonProperty("网口1发送错误帧数")] + public long Port1SentErrorFrames { get; set; } + + [JsonProperty("网口1接收帧数")] + public long Port1ReceivedFrames { get; set; } + + [JsonProperty("网口1接收错误帧数")] + public long Port1ReceivedErrorFrames { get; set; } + + // 网口2信息 + [JsonProperty("网口2IP地址")] + public string Port2IpAddress { get; set; } + + [JsonProperty("网口2状态")] + public string Port2Status { get; set; } + + [JsonProperty("网口2速率类型")] + public string Port2SpeedType { get; set; } + + [JsonProperty("网口2起始时间")] + public string Port2StartTime { get; set; } + + [JsonProperty("网口2累计时间")] + public string Port2TotalTime { get; set; } + + [JsonProperty("网口2发送帧数")] + public long Port2SentFrames { get; set; } + + [JsonProperty("网口2发送错误帧数")] + public long Port2SentErrorFrames { get; set; } + + [JsonProperty("网口2接收帧数")] + public long Port2ReceivedFrames { get; set; } + + [JsonProperty("网口2接收错误帧数")] + public long Port2ReceivedErrorFrames { get; set; } + + // 网口3信息 + [JsonProperty("网口3IP地址")] + public string Port3IpAddress { get; set; } + + [JsonProperty("网口3状态")] + public string Port3Status { get; set; } + + [JsonProperty("网口3速率类型")] + public string Port3SpeedType { get; set; } + + [JsonProperty("网口3起始时间")] + public string Port3StartTime { get; set; } + + [JsonProperty("网口3累计时间")] + public string Port3TotalTime { get; set; } + + [JsonProperty("网口3发送帧数")] + public long Port3SentFrames { get; set; } + + [JsonProperty("网口3发送错误帧数")] + public long Port3SentErrorFrames { get; set; } + + [JsonProperty("网口3接收帧数")] + public long Port3ReceivedFrames { get; set; } + + [JsonProperty("网口3接收错误帧数")] + public long Port3ReceivedErrorFrames { get; set; } + + // 插件通信状态 + [JsonProperty("插件1通信状态")] + public string Plugin1Status { get; set; } + + [JsonProperty("插件3通信状态")] + public string Plugin3Status { get; set; } + + [JsonProperty("插件4通信状态")] + public string Plugin4Status { get; set; } + + [JsonProperty("插件5通信状态")] + public string Plugin5Status { get; set; } + + [JsonProperty("插件7通信状态")] + public string Plugin7Status { get; set; } + + // 网络通信连接状态 + [JsonProperty("网络通信连接1状态")] + public string NetworkConnection1Status { get; set; } + + [JsonProperty("网络通信连接2状态")] + public string NetworkConnection2Status { get; set; } + + [JsonProperty("网络通信连接3状态")] + public string NetworkConnection3Status { get; set; } + + [JsonProperty("网络通信连接4状态")] + public string NetworkConnection4Status { get; set; } + + [JsonProperty("网络通信连接5状态")] + public string NetworkConnection5Status { get; set; } + + [JsonProperty("网络通信连接6状态")] + public string NetworkConnection6Status { get; set; } + + [JsonProperty("网络通信连接7状态")] + public string NetworkConnection7Status { get; set; } + + [JsonProperty("网络通信连接8状态")] + public string NetworkConnection8Status { get; set; } + } + +} diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/RunningStatus.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/RunningStatus.cs index e62070f..b683d53 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/RunningStatus.cs +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/RunningStatus.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport { - public class RunningStatus: UploadMainstationBaseDetailInfo + public class RunningStatus { [JsonProperty("MMS连接状态")] public List MMSConnectionStatus { get; set; } diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/UploadMainstationBaseDetailInfo.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/UploadMainstationBaseDetailInfo.cs index d6a79ad..83256e7 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/UploadMainstationBaseDetailInfo.cs +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/UploadMainstationBaseDetailInfo.cs @@ -7,12 +7,5 @@ using System.Threading.Tasks; namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo { - public abstract class UploadMainstationBaseDetailInfo - { - /// - /// 序号 - /// - [JsonProperty(nameof(DATANO))] - public virtual int DATANO { get; set; } - } + } diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/UploadMainstationBaseInfo.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/UploadMainstationBaseInfo.cs index 954fd9b..2b55f2e 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/UploadMainstationBaseInfo.cs +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/UploadMainstationBaseInfo.cs @@ -1,4 +1,5 @@ -using System; +using Newtonsoft.Json; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -11,36 +12,41 @@ namespace YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo /// /// 获取或设置厂站名称。 /// - public string Station { get; set; } + [JsonProperty("所亭")]public string Station { get; set; } /// /// 获取或设置设备名称。 /// - public string Device { get; set; } + [JsonProperty("装置名称")] public string Device { get; set; } /// /// 获取或设置事件类型。 /// - public string EventType { get; set; } + [JsonProperty("信息大类")] public string EventType { get; set; } /// /// 获取或设置事件子类型。 /// - public string Subtype { get; set; } + [JsonProperty("信息子类")] public string Subtype { get; set; } /// /// 获取或设置事件发生时间。 /// - public DateTime EventTime { get; set; } + [JsonProperty("信息更新时间")] public string EventTime { get; set; } + /// + /// 序号 + /// + [JsonProperty("信息更新序号")] + public virtual int DATANO { get; set; } /// /// 获取或设置事件的简要信息。 /// - public string Info { get; set; } + [JsonProperty("上送原因")] public string Info { get; set; } /// /// 获取或设置事件的详细信息。 /// - public T Detail { get; set; } + [JsonProperty("详细信息")] public T Detail { 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 299a801..11ab200 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/YunDa.ISAS.DataTransferObject.xml +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/YunDa.ISAS.DataTransferObject.xml @@ -15295,11 +15295,6 @@ 回路类型 - - - 关联显示图片路径 - - 编码 @@ -15585,9 +15580,44 @@ 板卡信息 - + - 序号 + 装置自检 + + + + + 异常元件的名称 + + + + + 异常原因描述 + + + + + 建议的处理措施 + + + + + 装置自检信息 + + + + + 寿命诊断 + + + + + 剩余寿命(单位:年)。 + + + + + 设备名称。 @@ -15615,6 +15645,11 @@ 获取或设置事件发生时间。 + + + 序号 + + 获取或设置事件的简要信息。 diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/YunDa.SOMS.DataTransferObject.csproj b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/YunDa.SOMS.DataTransferObject.csproj index 2fa3cbd..5872830 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/YunDa.SOMS.DataTransferObject.csproj +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/YunDa.SOMS.DataTransferObject.csproj @@ -17,9 +17,14 @@ AnyCPU + + + + + diff --git a/src/YunDa.Application/YunDa.ISAS.MongoDB.Application/DataMonitoring/TelemeteringResult/ProtectionDeviceYCResultAppService.cs b/src/YunDa.Application/YunDa.ISAS.MongoDB.Application/DataMonitoring/TelemeteringResult/ProtectionDeviceYCResultAppService.cs new file mode 100644 index 0000000..845f658 --- /dev/null +++ b/src/YunDa.Application/YunDa.ISAS.MongoDB.Application/DataMonitoring/TelemeteringResult/ProtectionDeviceYCResultAppService.cs @@ -0,0 +1,81 @@ +using Abp.Application.Services; +using Abp.Authorization; +using Abp.Domain.Repositories; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using YunDa.ISAS.Application.Core; +using YunDa.ISAS.Application.Core.Session; +using YunDa.ISAS.Application.Core.SwaggerHelper; +using YunDa.ISAS.DataTransferObject; +using YunDa.SOMS.DataTransferObject.CommonDto; +using YunDa.SOMS.Entities.GeneralInformation; + +namespace YunDa.ISAS.MongoDB.Application.DataMonitoring +{ + public class ProtectionDeviceYCResultAppService : ISASAppServiceBase, IApplicationService + { + private readonly IRepository _protectionDeviceInfoRepository; + + public ProtectionDeviceYCResultAppService(ISessionAppService sessionAppService, + IRepository protectionDeviceInfoRepository + ) : base(sessionAppService) + { + _protectionDeviceInfoRepository = protectionDeviceInfoRepository; + } + /// + /// 获取装置5V电压曲线图 + /// + /// + [AbpAllowAnonymous] + [ShowApi] + [HttpGet] + public RequestResult> Get5VTimeSeries(Guid equipmentInfoId,int index,DateTime startTime,DateTime endTime) + { + RequestResult> rst = new RequestResult>(); + try + { + // 验证时间范围 + if (startTime >= endTime) + { + throw new ArgumentException("Start time must be earlier than end time."); + } + + // 初始化数据结果集 + List timeSeries = new List(); + + Random random = new Random(); + DateTime currentTime = startTime; + + // 按随机间隔生成数据 + while (currentTime <= endTime) + { + // 生成随机电压值 (假设范围为 4.8V 到 5.2V) + double voltage = 4.8 + random.NextDouble() * 0.4; + + // 添加时间点和电压值 + timeSeries.Add(new TimeValue + { + Time = currentTime, + Value = voltage + }); + + // 随机增加 1-3 秒 + int randomSeconds = random.Next(1, 4); // [1, 3] + currentTime = currentTime.AddSeconds(randomSeconds); + } + rst.ResultData = timeSeries; + + } + catch (Exception ex) + { + + throw; + } + return rst; + } + } +} diff --git a/src/YunDa.Application/YunDa.ISAS.MongoDB.Application/YunDa.ISAS.MongoDB.Application.xml b/src/YunDa.Application/YunDa.ISAS.MongoDB.Application/YunDa.ISAS.MongoDB.Application.xml index e91b096..b30b9fd 100644 --- a/src/YunDa.Application/YunDa.ISAS.MongoDB.Application/YunDa.ISAS.MongoDB.Application.xml +++ b/src/YunDa.Application/YunDa.ISAS.MongoDB.Application/YunDa.ISAS.MongoDB.Application.xml @@ -476,6 +476,12 @@ + + + 获取装置5V电压曲线图 + + + 遥测结果管理服务 diff --git a/src/YunDa.Domain/YunDa.ISAS.Entities/GeneralInformation/SecondaryCircuit.cs b/src/YunDa.Domain/YunDa.ISAS.Entities/GeneralInformation/SecondaryCircuit.cs index 64e7460..6b27fb0 100644 --- a/src/YunDa.Domain/YunDa.ISAS.Entities/GeneralInformation/SecondaryCircuit.cs +++ b/src/YunDa.Domain/YunDa.ISAS.Entities/GeneralInformation/SecondaryCircuit.cs @@ -40,7 +40,11 @@ namespace YunDa.SOMS.Entities.GeneralInformation /// [StringLength(MaxDescriptionLength)] public virtual string PicturePath { get; set; } - + /// + /// 关联显示图片路径 + /// + [Column(TypeName = "nvarchar(max)")] + public virtual string PictureBase64 { get; set; } /// /// 编码 /// diff --git a/src/YunDa.Domain/YunDa.ISAS.Entities/GeneralInformation/SecondaryCircuitLogicExpression.cs b/src/YunDa.Domain/YunDa.ISAS.Entities/GeneralInformation/SecondaryCircuitLogicExpression.cs index 18c6821..982d8ce 100644 --- a/src/YunDa.Domain/YunDa.ISAS.Entities/GeneralInformation/SecondaryCircuitLogicExpression.cs +++ b/src/YunDa.Domain/YunDa.ISAS.Entities/GeneralInformation/SecondaryCircuitLogicExpression.cs @@ -52,11 +52,13 @@ namespace YunDa.SOMS.Entities.GeneralInformation [ForeignKey(nameof(TelesignalisationConfigurationId))] public virtual TelesignalisationConfiguration TelesignalisationConfiguration { get; set; } - + /// /// 备注 /// public virtual string Remark { get; set; } + + /// /// 是否在用 /// diff --git a/src/YunDa.Domain/YunDa.ISAS.EntityFrameworkCore/Migrations/20241127075013_update_table_v91.Designer.cs b/src/YunDa.Domain/YunDa.ISAS.EntityFrameworkCore/Migrations/20241127075013_update_table_v91.Designer.cs new file mode 100644 index 0000000..4d17e3c --- /dev/null +++ b/src/YunDa.Domain/YunDa.ISAS.EntityFrameworkCore/Migrations/20241127075013_update_table_v91.Designer.cs @@ -0,0 +1,5395 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using YunDa.ISAS.EntityFrameworkCore.EntityFrameworkCore; + +#nullable disable + +namespace YunDa.ISAS.Migrations +{ + [DbContext(typeof(ISASDbContext))] + [Migration("20241127075013_update_table_v91")] + partial class update_table_v91 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("YunDa.ISAS.Entities.ClientConfiguration.ThreeDimension.CCThreeDimension", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("EquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("ModelId") + .HasColumnType("int"); + + b.Property("ModelName") + .HasColumnType("longtext"); + + b.Property("TelecommandConfigurationId") + .HasColumnType("char(36)"); + + b.Property("TelemeteringConfigurationId") + .HasColumnType("char(36)"); + + b.Property("TelesignalisationConfigurationId") + .HasColumnType("char(36)"); + + b.Property("ThreeDimensionDataCategory") + .HasColumnType("int"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.Property("VideoDevId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("EquipmentInfoId"); + + b.HasIndex("TelecommandConfigurationId"); + + b.HasIndex("TelemeteringConfigurationId"); + + b.HasIndex("TelesignalisationConfigurationId"); + + b.HasIndex("TransformerSubstationId"); + + b.HasIndex("VideoDevId"); + + b.ToTable("cc_three_dimension"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.MultidimensionalCheck", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("EquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("PatternRecognitionConfigutrationId1") + .HasColumnType("char(36)"); + + b.Property("PatternRecognitionConfigutrationId2") + .HasColumnType("char(36)"); + + b.Property("PresetPointId1") + .HasColumnType("char(36)"); + + b.Property("PresetPointId2") + .HasColumnType("char(36)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TelesignalisationConfigurationId") + .HasColumnType("char(36)"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("EquipmentInfoId"); + + b.HasIndex("PatternRecognitionConfigutrationId1"); + + b.HasIndex("PatternRecognitionConfigutrationId2"); + + b.HasIndex("PresetPointId1"); + + b.HasIndex("PresetPointId2"); + + b.HasIndex("TelesignalisationConfigurationId"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("dm_multidimensional_check"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.MultidimensionalCheckSchedule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("EndTime") + .HasColumnType("longtext"); + + b.Property("IntervalMinute") + .HasColumnType("int"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("StartTime") + .HasColumnType("longtext"); + + b.Property("Week") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("dm_multidimensional_check_schedule"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.SelfCheckingConfiguration", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DataType") + .HasColumnType("int"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("JudgmentMode") + .HasColumnType("int"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("LowerLimit") + .HasColumnType("float"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("RepetitiveDisplacementTimes") + .HasColumnType("int"); + + b.Property("RepetitiveSendTimes") + .HasColumnType("int"); + + b.Property("SendTelemeteringValue") + .HasColumnType("float"); + + b.Property("SendTelesignalisationValue") + .HasColumnType("int"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TimeOfJudgment") + .HasColumnType("int"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.Property("UpperLimit") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("dm_self_checking_configuration"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TeleCommandPlanSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("Remark") + .HasColumnType("longtext"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("dm_telecommand_plan_setting"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TeleCommandPlanTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ByDays") + .HasColumnType("longtext"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("Freq") + .HasColumnType("int"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Remark") + .HasColumnType("longtext"); + + b.Property("SendTelecommandTime") + .HasColumnType("datetime(6)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("StartTime") + .HasColumnType("datetime(6)"); + + b.Property("TeleCommandPlanSettingId") + .HasColumnType("char(36)"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TeleCommandPlanSettingId"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("dm_telecommand_plan_time"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TeleCommandSettingItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .HasColumnType("longtext"); + + b.Property("Remark") + .HasColumnType("longtext"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TeleCommandPlanSettingId") + .HasColumnType("char(36)"); + + b.Property("TeleCommandValue") + .HasColumnType("int"); + + b.Property("TelecommandConfigurationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TeleCommandPlanSettingId"); + + b.HasIndex("TelecommandConfigurationId"); + + b.ToTable("dm_telecommand_setting_item"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TelecommandConfiguration", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CPUSector") + .HasColumnType("int"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DataSourceCategory") + .HasColumnType("int"); + + b.Property("DeviceAddress") + .HasColumnType("int"); + + b.Property("DispatcherAddress") + .HasColumnType("int"); + + b.Property("EquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("EquipmentTypeId") + .HasColumnType("char(36)"); + + b.Property("InfoAddress") + .HasColumnType("int"); + + b.Property("InfoCPUSector") + .HasColumnType("int"); + + b.Property("InfoDeviceAddress") + .HasColumnType("int"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsSave") + .HasColumnType("tinyint(1)"); + + b.Property("IsSendDispatcher") + .HasColumnType("tinyint(1)"); + + b.Property("IsVirtualDevice") + .HasColumnType("tinyint(1)"); + + b.Property("IsVisible") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("NoContent") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("RelatedTelesignalisationId") + .HasColumnType("char(36)"); + + b.Property("RemoteType") + .HasColumnType("int"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.Property("UnsurenessContent") + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("YesContent") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.HasKey("Id"); + + b.HasIndex("EquipmentInfoId"); + + b.HasIndex("EquipmentTypeId"); + + b.HasIndex("RelatedTelesignalisationId"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("dm_telecommand_configuration"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TelecommandTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("EquipmentTypeId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsSave") + .HasColumnType("tinyint(1)"); + + b.Property("IsSendDispatcher") + .HasColumnType("tinyint(1)"); + + b.Property("IsVisible") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("NoContent") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("RelatedTelesignalisationId") + .HasColumnType("char(36)"); + + b.Property("RemoteType") + .HasColumnType("int"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("UnsurenessContent") + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("YesContent") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.HasKey("Id"); + + b.HasIndex("EquipmentTypeId"); + + b.ToTable("dm_telecommand_template"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TelemeteringAlarmTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DMAlarmCategoryId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("MaxValue") + .HasColumnType("float"); + + b.Property("MinValue") + .HasColumnType("float"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TelemeteringTemplateId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("DMAlarmCategoryId"); + + b.HasIndex("TelemeteringTemplateId"); + + b.ToTable("dm_telemetering_alarm_template"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TelemeteringConfiguration", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CPUSector") + .HasColumnType("int"); + + b.Property("Coefficient") + .HasColumnType("float"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DataSourceCategory") + .HasColumnType("int"); + + b.Property("DecimalDigits") + .HasColumnType("int"); + + b.Property("DeviceAddress") + .HasColumnType("int"); + + b.Property("DispatcherAddress") + .HasColumnType("int"); + + b.Property("EquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("EquipmentTypeId") + .HasColumnType("char(36)"); + + b.Property("InfoAddress") + .HasColumnType("int"); + + b.Property("InfoCPUSector") + .HasColumnType("int"); + + b.Property("InfoDeviceAddress") + .HasColumnType("int"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsEnvironmentTemp") + .HasColumnType("tinyint(1)"); + + b.Property("IsSave") + .HasColumnType("tinyint(1)"); + + b.Property("IsSelfCheckingValue") + .HasColumnType("tinyint(1)"); + + b.Property("IsSendDispatcher") + .HasColumnType("tinyint(1)"); + + b.Property("IsVirtualDevice") + .HasColumnType("tinyint(1)"); + + b.Property("IsVisible") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("LowerLimit") + .HasColumnType("float"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("SelfCheckingConfigurationId") + .HasColumnType("char(36)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.Property("Unit") + .HasColumnType("longtext"); + + b.Property("UpperLimit") + .HasColumnType("float"); + + b.Property("ismsbaseYCId") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("EquipmentInfoId"); + + b.HasIndex("EquipmentTypeId"); + + b.HasIndex("SelfCheckingConfigurationId"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("dm_telemetering_Configuration"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TelemeteringTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Coefficient") + .HasColumnType("float"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DecimalDigits") + .HasColumnType("int"); + + b.Property("EquipmentTypeId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsSave") + .HasColumnType("tinyint(1)"); + + b.Property("IsSendDispatcher") + .HasColumnType("tinyint(1)"); + + b.Property("IsVisible") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("Unit") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("EquipmentTypeId"); + + b.ToTable("dm_telemetering_template"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TelesignalisationConfiguration", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CPUSector") + .HasColumnType("int"); + + b.Property("CommValue") + .HasColumnType("int"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DMAlarmCategoryId") + .HasColumnType("char(36)"); + + b.Property("DataSourceCategory") + .HasColumnType("int"); + + b.Property("DeviceAddress") + .HasColumnType("int"); + + b.Property("DispatcherAddress") + .HasColumnType("int"); + + b.Property("EquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("EquipmentTypeId") + .HasColumnType("char(36)"); + + b.Property("InfoAddress") + .HasColumnType("int"); + + b.Property("InfoCPUSector") + .HasColumnType("int"); + + b.Property("InfoDeviceAddress") + .HasColumnType("int"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsCommStatus") + .HasColumnType("tinyint(1)"); + + b.Property("IsSave") + .HasColumnType("tinyint(1)"); + + b.Property("IsSelfCheckingValue") + .HasColumnType("tinyint(1)"); + + b.Property("IsSendDispatcher") + .HasColumnType("tinyint(1)"); + + b.Property("IsVirtualDevice") + .HasColumnType("tinyint(1)"); + + b.Property("IsVisible") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("NoContent") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("RemoteType") + .HasColumnType("int"); + + b.Property("SelfCheckingConfigurationId") + .HasColumnType("char(36)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.Property("UnsurenessContent") + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("YesContent") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("ismsbaseYXId") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("DMAlarmCategoryId"); + + b.HasIndex("EquipmentInfoId"); + + b.HasIndex("EquipmentTypeId"); + + b.HasIndex("SelfCheckingConfigurationId"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("dm_telesignalisation_configuration"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TelesignalisationTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CommValue") + .HasColumnType("int"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DMAlarmCategoryId") + .HasColumnType("char(36)"); + + b.Property("EquipmentTypeId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsCommStatus") + .HasColumnType("tinyint(1)"); + + b.Property("IsSave") + .HasColumnType("tinyint(1)"); + + b.Property("IsSendDispatcher") + .HasColumnType("tinyint(1)"); + + b.Property("IsVisible") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("NoContent") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("RemoteType") + .HasColumnType("int"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("UnsurenessContent") + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("YesContent") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.HasKey("Id"); + + b.HasIndex("DMAlarmCategoryId"); + + b.HasIndex("EquipmentTypeId"); + + b.ToTable("dm_telesignalisation_template"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.Foundation.NameDateText", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Content") + .HasMaxLength(65535) + .HasColumnType("longtext"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .HasColumnType("longtext"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("fd_name_date_text"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.EquipmentDataCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DataSourceCategory") + .HasColumnType("int"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("EquipmentTypeId") + .HasColumnType("char(36)"); + + b.Property("Icon") + .HasColumnType("longtext"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("EquipmentTypeId"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("gi_equipment_data_category"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.EquipmentDataCategoryExactly", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("EquipmentDataCategoryId") + .HasColumnType("char(36)"); + + b.Property("EquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("EquipmentTypeId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("Remark") + .HasColumnType("longtext"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("EquipmentDataCategoryId"); + + b.HasIndex("EquipmentInfoId"); + + b.HasIndex("EquipmentTypeId"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("gi_equipment_data_category_exactly"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("BelongEquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("Code") + .HasColumnType("longtext"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("EquipmentTypeId") + .HasColumnType("char(36)"); + + b.Property("FactorySerialNumber") + .HasColumnType("longtext"); + + b.Property("InstallationArea") + .HasMaxLength(40) + .HasColumnType("varchar(40)"); + + b.Property("InstallationDate") + .HasColumnType("datetime(6)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsRemoteControl") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("ManufacturerInfoId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("PostionDescription") + .HasMaxLength(40) + .HasColumnType("varchar(40)"); + + b.Property("ProductionDate") + .HasColumnType("datetime(6)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("RunNumber") + .HasMaxLength(40) + .HasColumnType("varchar(40)"); + + b.Property("SafetyPlanStateType") + .HasColumnType("int"); + + b.Property("SafetyPlanTime") + .HasColumnType("datetime(6)"); + + b.Property("SafetyStateType") + .HasColumnType("int"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.Property("VerificationDate") + .HasColumnType("longtext"); + + b.Property("VerificationPerson") + .HasColumnType("longtext"); + + b.Property("VerificationRecords") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("BelongEquipmentInfoId"); + + b.HasIndex("EquipmentTypeId"); + + b.HasIndex("ManufacturerInfoId"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("gi_equipment_info"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.EquipmentLinkTeledata", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DataEquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("EquipmentDataCategoryExactlyId") + .HasColumnType("char(36)"); + + b.Property("EquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsVisable") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("TeleDataProperty") + .HasColumnType("int"); + + b.Property("TelemeteringConfigurationId") + .HasColumnType("char(36)"); + + b.Property("TelesignalisationConfigurationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("DataEquipmentInfoId"); + + b.HasIndex("EquipmentDataCategoryExactlyId"); + + b.HasIndex("EquipmentInfoId"); + + b.HasIndex("TelemeteringConfigurationId"); + + b.HasIndex("TelesignalisationConfigurationId"); + + b.ToTable("gi_equipment_link_Teledata"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.EquipmentLocation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("gi_equipment_location"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.EquipmentType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("EquipmentTypeId") + .HasColumnType("char(36)"); + + b.Property("EquipmentTypeLevel") + .HasColumnType("int"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("gi_equipment_type"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.EquipmentTypeViewPoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("EquipmentTypeId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("EquipmentTypeId"); + + b.ToTable("gi_equipment_type_view_point"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.EquipmentViewPoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("EquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("EquipmentTypeViewPointId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("EquipmentInfoId"); + + b.HasIndex("EquipmentTypeViewPointId"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("gi_equipment_view_point"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.ManufacturerInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DeleterUserId") + .HasColumnType("char(36)"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)"); + + b.Property("EmailAddress") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsDeleted") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("ManufacturerAddress") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("ManufacturerCode") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("ManufacturerName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("PhoneNumber") + .HasMaxLength(29) + .HasColumnType("varchar(29)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("Id"); + + b.ToTable("gi_manufacturer_info"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.MasterStation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("MasterStationAddress") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("MasterStationIp") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("MasterStationLevel") + .HasColumnType("int"); + + b.Property("MasterStationPort") + .HasColumnType("int"); + + b.Property("MasterStationType") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("gi_master_station"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.PowerSupplyLine", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("LineName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("Id"); + + b.ToTable("gi_power_supply_line"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.SubMasterStationRelation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("MasterStationId") + .HasColumnType("char(36)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("MasterStationId"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("gi_submasterstation_relation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CommMgrIP") + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DataMonitoringAddress") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("ExternalCommAddress") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("Iec104ServerUrl") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("InspectionServiceBaseUrl") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Latitude") + .HasColumnType("double"); + + b.Property("Longitude") + .HasColumnType("double"); + + b.Property("MasterStationAddress") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("MasterStationType") + .HasColumnType("int"); + + b.Property("PowerSupplyLineId") + .HasColumnType("char(36)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("RobotServerAddress") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("RobotServiceBaseUrl") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("SubstationName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.HasKey("Id"); + + b.HasIndex("PowerSupplyLineId"); + + b.ToTable("gi_transformer_substation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MobileSurveillance.RobotDeviceInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("AppearanceType") + .HasMaxLength(10) + .HasColumnType("varchar(10)"); + + b.Property("BayId") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("BayName") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DeviceId") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("DeviceLevel") + .HasColumnType("int"); + + b.Property("DeviceName") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("DeviceType") + .HasMaxLength(10) + .HasColumnType("varchar(10)"); + + b.Property("FeverType") + .HasMaxLength(10) + .HasColumnType("varchar(10)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("MainDeviceId") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("MainDeviceName") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("MeterType") + .HasMaxLength(10) + .HasColumnType("varchar(10)"); + + b.Property("Phase") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("PresetPointId") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("PresetPointName") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("RecognitionTypeList") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("RobotInfoId") + .HasColumnType("char(36)"); + + b.Property("RobotTaskId") + .HasColumnType("char(36)"); + + b.Property("SaveTypeList") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("VoltageLevel") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.HasKey("Id"); + + b.HasIndex("RobotInfoId"); + + b.HasIndex("RobotTaskId"); + + b.ToTable("ms_robot_device_info"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MobileSurveillance.RobotInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("GeneralCameraId") + .HasColumnType("char(36)"); + + b.Property("IP") + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("InfraredCameraId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("ManufacturerInfoId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("Port") + .HasColumnType("int"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("RobotType") + .HasColumnType("int"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.Property("Url") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("GeneralCameraId"); + + b.HasIndex("InfraredCameraId"); + + b.HasIndex("ManufacturerInfoId"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("ms_robot_info"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MobileSurveillance.RobotTask", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Code") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("CycleExecuteTime") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("CycleWeek") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("DeviceLevel") + .HasColumnType("int"); + + b.Property("DeviceList") + .HasColumnType("longtext"); + + b.Property("FixedStartTime") + .HasColumnType("datetime(6)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsIssue") + .HasColumnType("tinyint(1)"); + + b.Property("IsTemp") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("MasterStationId") + .HasColumnType("char(36)"); + + b.Property("Name") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("Priority") + .HasColumnType("int"); + + b.Property("RobotAction") + .HasColumnType("int"); + + b.Property("RobotInfoId") + .HasColumnType("char(36)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TaskId") + .HasColumnType("longtext"); + + b.Property("TempId") + .HasColumnType("longtext"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("MasterStationId"); + + b.HasIndex("RobotInfoId"); + + b.ToTable("ms_robot_task"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MobileSurveillance.RobotTaskItemLink", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("RobotDeviceInfoId") + .HasColumnType("char(36)"); + + b.Property("RobotTaskId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("RobotDeviceInfoId"); + + b.HasIndex("RobotTaskId"); + + b.ToTable("ms_robot_task_item_link"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MySQL.DataMonitoring.DMAlarmCategory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Color") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("Ico") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Level") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("Id"); + + b.ToTable("dm_alarm_category"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MySQL.DataMonitoring.LinkageCondition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CameraAuthenticationId") + .HasColumnType("char(36)"); + + b.Property("CompareType") + .HasColumnType("int"); + + b.Property("ComparisonValue") + .HasColumnType("float"); + + b.Property("ConditionType") + .HasColumnType("int"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DeterminationTime") + .HasColumnType("datetime(6)"); + + b.Property("EquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("EquipmentTypeId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("LinkageStrategyId") + .HasColumnType("char(36)"); + + b.Property("LogicalOperator") + .HasColumnType("longtext"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TelemeteringConfigurationId") + .HasColumnType("char(36)"); + + b.Property("TelesignalisationConfigurationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("CameraAuthenticationId"); + + b.HasIndex("EquipmentInfoId"); + + b.HasIndex("EquipmentTypeId"); + + b.HasIndex("LinkageStrategyId"); + + b.HasIndex("TelemeteringConfigurationId"); + + b.HasIndex("TelesignalisationConfigurationId"); + + b.ToTable("dm_linkage_condition"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MySQL.DataMonitoring.LinkageExecuteActivity", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ActivityType") + .HasColumnType("int"); + + b.Property("CameraAuthenticationId") + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("EquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("EquipmentTypeId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsCapturePicture") + .HasColumnType("tinyint(1)"); + + b.Property("IsRecordVideo") + .HasColumnType("tinyint(1)"); + + b.Property("KeepTime") + .HasColumnType("int"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("LinkageStrategyId") + .HasColumnType("char(36)"); + + b.Property("PresetPointId") + .HasColumnType("char(36)"); + + b.Property("RecordDuration") + .HasColumnType("int"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TelecommandConfigurationId") + .HasColumnType("char(36)"); + + b.Property("TelecommandValue") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("CameraAuthenticationId"); + + b.HasIndex("EquipmentInfoId"); + + b.HasIndex("EquipmentTypeId"); + + b.HasIndex("LinkageStrategyId"); + + b.HasIndex("PresetPointId"); + + b.HasIndex("TelecommandConfigurationId"); + + b.ToTable("dm_linkage_execute_activity"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MySQL.DataMonitoring.LinkageStrategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConditionIds") + .HasColumnType("longtext"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DMAlarmCategoryId") + .HasColumnType("char(36)"); + + b.Property("ForceLinkageSeconds") + .HasColumnType("int"); + + b.Property("ForceLinkageTimes") + .HasColumnType("int"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsPatternRecognize") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("RepeatLinkageInterval") + .HasColumnType("int"); + + b.Property("Rule") + .HasColumnType("longtext"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TimeOfWithRelationship") + .HasColumnType("int"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("DMAlarmCategoryId"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("dm_linkage_strategy"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MySQL.DataMonitoring.TelemeteringAlarmStrategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DMAlarmCategoryId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("MaxValue") + .HasColumnType("float"); + + b.Property("MinValue") + .HasColumnType("float"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TelemeteringConfigurationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("DMAlarmCategoryId"); + + b.HasIndex("TelemeteringConfigurationId"); + + b.ToTable("dm_telemetering_alarm_strategy"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.System.SysConfiguration", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Code") + .HasColumnType("longtext"); + + b.Property("Content") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("SysConfigurationType") + .HasColumnType("int"); + + b.Property("TransformerSubstationId") + .HasMaxLength(36) + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("sys_configuration"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.System.SysFunction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("Icon") + .HasMaxLength(40) + .HasColumnType("varchar(40)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsOperatorPage") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("LoadUrl") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("SysFunctionId") + .HasColumnType("char(36)"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("sys_function"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.System.SysRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.HasKey("Id"); + + b.ToTable("sys_role"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.System.SysRoleFunction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsEdit") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("SysFunctionId") + .HasColumnType("char(36)"); + + b.Property("SysRoleId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("SysFunctionId"); + + b.HasIndex("SysRoleId"); + + b.ToTable("sys_role_function"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.System.SysRoleUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("SysRoleId") + .HasColumnType("char(36)"); + + b.Property("SysUserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("SysRoleId"); + + b.HasIndex("SysUserId"); + + b.ToTable("sys_role_user"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.System.SysUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("EmailAddress") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("ErrorTimes") + .HasColumnType("int"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsOnline") + .HasColumnType("tinyint(1)"); + + b.Property("LastLoginErrorDate") + .HasColumnType("datetime(6)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("OrganizationalUnit") + .HasColumnType("longtext"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("PhoneNumber") + .HasMaxLength(29) + .HasColumnType("varchar(29)"); + + b.Property("RealName") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("UserPriority") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("sys_user"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.CameraAuthentication", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Code") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("Illustration") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Level") + .HasColumnType("int"); + + b.Property("Name") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("Source") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("StationLevel") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("vs_camera_authentication"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.InspectionCard", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CardName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("CenterType") + .HasColumnType("int"); + + b.Property("Code") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsIssue") + .HasColumnType("tinyint(1)"); + + b.Property("IsTemporary") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("MasterStationId") + .HasColumnType("char(36)"); + + b.Property("OpenWiper") + .HasColumnType("tinyint(1)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("ResidenceTime") + .HasColumnType("int"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("MasterStationId"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("vs_inspection_card"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.InspectionItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("InspectionCardId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsImageRecognition") + .HasColumnType("tinyint(1)"); + + b.Property("IsRecordVideo") + .HasColumnType("tinyint(1)"); + + b.Property("ItemName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("PicturesInterval") + .HasColumnType("int"); + + b.Property("PicturesNumber") + .HasColumnType("int"); + + b.Property("PresetPointId") + .HasColumnType("char(36)"); + + b.Property("ProcessAction") + .HasColumnType("int"); + + b.Property("ProcessDuration") + .HasColumnType("int"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("VideoDevId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("InspectionCardId"); + + b.HasIndex("PresetPointId"); + + b.HasIndex("VideoDevId"); + + b.ToTable("vs_inspection_Item"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.InspectionPlanTask", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("ExecutionDate") + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("ExecutionTime") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("ExecutionWeek") + .HasColumnType("int"); + + b.Property("InspectionCardId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("PlanTaskName") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("InspectionCardId"); + + b.ToTable("vs_inspection_plan_task"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.LightingControl", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CloseTime") + .HasColumnType("datetime(6)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("LightingOpenRule") + .HasColumnType("int"); + + b.Property("LightingPreheatSeconds") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("OpenTime") + .HasColumnType("datetime(6)"); + + b.Property("PresetPointId") + .HasColumnType("char(36)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TelecommandConfigurationId") + .HasColumnType("char(36)"); + + b.Property("TelemeteringConfigurationId") + .HasColumnType("char(36)"); + + b.Property("TelesignalisationConfigurationId") + .HasColumnType("char(36)"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("PresetPointId"); + + b.HasIndex("TelecommandConfigurationId"); + + b.HasIndex("TelemeteringConfigurationId"); + + b.HasIndex("TelesignalisationConfigurationId"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("vs_lighting_control"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.MeasureTemperaturePoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CoordinateJsonStr") + .HasColumnType("longtext"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("Distance") + .HasColumnType("float"); + + b.Property("Emissivity") + .HasColumnType("float"); + + b.Property("EquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("EquipmentTypeId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("MeasureTemperatureType") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("Number") + .HasColumnType("int"); + + b.Property("PresetPointId") + .HasColumnType("char(36)"); + + b.Property("ReflectedTemperature") + .HasColumnType("float"); + + b.Property("TelemeteringConfigurationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("EquipmentInfoId"); + + b.HasIndex("EquipmentTypeId"); + + b.HasIndex("PresetPointId"); + + b.HasIndex("TelemeteringConfigurationId"); + + b.ToTable("vs_measures_temperature_point"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.PatternRecognitionConfigutration", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Arg") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Box") + .HasMaxLength(500) + .HasColumnType("varchar(500)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("Decimal") + .HasColumnType("int"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsNewAlgorithnm") + .HasColumnType("tinyint(1)"); + + b.Property("ItemName") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("PresetPointId") + .HasColumnType("char(36)"); + + b.Property("Rect") + .HasMaxLength(500) + .HasColumnType("varchar(500)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("ResultsMapping") + .HasMaxLength(500) + .HasColumnType("varchar(500)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TelemeteringConfigurationId") + .HasColumnType("char(36)"); + + b.Property("TelesignalisationConfigurationId") + .HasColumnType("char(36)"); + + b.Property("Type") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("Unit") + .HasColumnType("longtext"); + + b.Property("VideoDevId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("PresetPointId"); + + b.HasIndex("TelemeteringConfigurationId"); + + b.HasIndex("TelesignalisationConfigurationId"); + + b.HasIndex("VideoDevId"); + + b.ToTable("vs_pattern_recognition_configutration"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.PresetPoint", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("EquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("EquipmentTypeId") + .HasColumnType("char(36)"); + + b.Property("EquipmentViewPointId") + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsImageRecognition") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("Number") + .HasColumnType("int"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("VideoDevId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("EquipmentInfoId"); + + b.HasIndex("EquipmentTypeId"); + + b.HasIndex("EquipmentViewPointId"); + + b.HasIndex("VideoDevId"); + + b.ToTable("vs_preset_point"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.VideoDev", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ChannelNo") + .HasColumnType("int"); + + b.Property("CodeStreamType") + .HasColumnType("int"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("CtrAuPos") + .HasColumnType("int"); + + b.Property("DevCode") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("DevName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("DevNo") + .HasColumnType("int"); + + b.Property("DevPassword") + .HasMaxLength(30) + .HasColumnType("varchar(30)"); + + b.Property("DevType") + .HasColumnType("int"); + + b.Property("DevUserName") + .HasMaxLength(30) + .HasColumnType("varchar(30)"); + + b.Property("ExternalCommIP") + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("IP") + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("InstallationArea") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)"); + + b.Property("InstallationDate") + .HasColumnType("datetime(6)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsPTZ") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("LinkVideoDevId") + .HasColumnType("char(36)"); + + b.Property("ManufacturerInfoId") + .HasColumnType("char(36)"); + + b.Property("MasterStationId") + .HasColumnType("char(36)"); + + b.Property("Port") + .HasColumnType("int"); + + b.Property("PostionDescription") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)"); + + b.Property("ProductionDate") + .HasColumnType("datetime(6)"); + + b.Property("Remark") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("SafetyPlanStateType") + .HasColumnType("int"); + + b.Property("SafetyPlanTime") + .HasColumnType("datetime(6)"); + + b.Property("SafetyStateType") + .HasColumnType("int"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.Property("VideoDevId") + .HasColumnType("char(36)"); + + b.Property("VoiceType") + .HasColumnType("int"); + + b.Property("X") + .HasColumnType("float"); + + b.Property("Y") + .HasColumnType("float"); + + b.Property("Z") + .HasColumnType("float"); + + b.HasKey("Id"); + + b.HasIndex("LinkVideoDevId"); + + b.HasIndex("ManufacturerInfoId"); + + b.HasIndex("MasterStationId"); + + b.HasIndex("TransformerSubstationId"); + + b.HasIndex("VideoDevId"); + + b.ToTable("vs_video_dev"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.BoardCardHistory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("BoardCardInfoId") + .HasColumnType("char(36)"); + + b.Property("BoardId") + .HasColumnType("longtext"); + + b.Property("ContentJson") + .HasColumnType("longtext"); + + b.Property("ContentNewJson") + .HasColumnType("longtext"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DeleterUserId") + .HasColumnType("char(36)"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)"); + + b.Property("IsDeleted") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .HasColumnType("longtext"); + + b.Property("ProtectionDeviceInfoId") + .HasColumnType("char(36)"); + + b.Property("RecodeDate") + .HasColumnType("datetime(6)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("gi_board_card_history"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.BoardCardInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("BoardId") + .HasColumnType("longtext"); + + b.Property("BoardType") + .HasColumnType("longtext"); + + b.Property("BoardTypeId") + .HasColumnType("longtext"); + + b.Property("BootVersion") + .HasColumnType("longtext"); + + b.Property("CcdChecksum") + .HasColumnType("longtext"); + + b.Property("CidChecksum") + .HasColumnType("longtext"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DeleterUserId") + .HasColumnType("char(36)"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)"); + + b.Property("FpgaVersion") + .HasColumnType("longtext"); + + b.Property("HardwareVersion") + .HasColumnType("longtext"); + + b.Property("IOCrc") + .HasColumnType("longtext"); + + b.Property("IOVersion") + .HasColumnType("longtext"); + + b.Property("Iec61850Version") + .HasColumnType("longtext"); + + b.Property("InstallationDate") + .HasColumnType("datetime(6)"); + + b.Property("InterfaceChecksum") + .HasColumnType("longtext"); + + b.Property("InterfaceDatabaseVersion") + .HasColumnType("longtext"); + + b.Property("InterfaceVersion") + .HasColumnType("longtext"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsDeleted") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("ManufacturerInfoId") + .HasColumnType("char(36)"); + + b.Property("ProductionDate") + .HasColumnType("datetime(6)"); + + b.Property("ProtectionChecksum") + .HasColumnType("longtext"); + + b.Property("ProtectionDatabaseVersion") + .HasColumnType("longtext"); + + b.Property("ProtectionDeviceInfoId") + .HasColumnType("char(36)"); + + b.Property("ProtectionVersion") + .HasColumnType("longtext"); + + b.Property("Remark") + .HasColumnType("longtext"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("SerialNumber") + .HasColumnType("longtext"); + + b.Property("SystemVersion") + .HasColumnType("longtext"); + + b.Property("VerificationDate") + .HasColumnType("longtext"); + + b.Property("VerificationPerson") + .HasColumnType("longtext"); + + b.Property("VerificationRecords") + .HasColumnType("longtext"); + + b.Property("YjCrc") + .HasColumnType("longtext"); + + b.Property("YjVersion") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("ManufacturerInfoId"); + + b.HasIndex("ProtectionDeviceInfoId"); + + b.ToTable("gi_board_card_info"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.IntervalEquipmentInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("EquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("ProtectionDeviceInfoId") + .HasColumnType("char(36)"); + + b.Property("SubstationIntervalId") + .HasColumnType("char(36)"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("EquipmentInfoId"); + + b.HasIndex("ProtectionDeviceInfoId"); + + b.HasIndex("SubstationIntervalId"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("gi_interval_equipmentInfo"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.ProtectionDeviceGateway", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("GatewayIP1") + .HasColumnType("longtext"); + + b.Property("GatewayIP2") + .HasColumnType("longtext"); + + b.Property("GatewayPort1") + .HasColumnType("int"); + + b.Property("GatewayPort2") + .HasColumnType("int"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .HasColumnType("longtext"); + + b.Property("PhysicalAddress") + .HasColumnType("int"); + + b.Property("ProtectionDeviceInfoId") + .HasColumnType("char(36)"); + + b.Property("Protocol") + .HasColumnType("longtext"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("ProtectionDeviceInfoId"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("gi_protection_device_gateway"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.ProtectionDeviceHistory", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ContentJson") + .HasColumnType("longtext"); + + b.Property("ContentNewJson") + .HasColumnType("longtext"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DeleterUserId") + .HasColumnType("char(36)"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)"); + + b.Property("IsDeleted") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .HasColumnType("longtext"); + + b.Property("ProtectionDeviceInfoId") + .HasColumnType("char(36)"); + + b.Property("RecodeDate") + .HasColumnType("datetime(6)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ProtectionDeviceInfoId"); + + b.ToTable("gi_protection_device_history"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.ProtectionDeviceInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("BaselineBoardVersion") + .HasColumnType("longtext"); + + b.Property("BayName") + .HasColumnType("longtext"); + + b.Property("CanSwitchDZZone") + .HasColumnType("tinyint(1)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DeviceAddress") + .HasColumnType("int"); + + b.Property("DeviceState") + .HasColumnType("int"); + + b.Property("EndOfDKJL") + .HasColumnType("int"); + + b.Property("EquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("HardwareVersion") + .HasColumnType("longtext"); + + b.Property("ISMS_DeviceId") + .HasColumnType("longtext"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("varchar(255)"); + + b.Property("ProtectionDeviceGatewayId") + .HasColumnType("char(36)"); + + b.Property("ProtectionDeviceTypeId") + .HasColumnType("char(36)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("Specification") + .HasColumnType("longtext"); + + b.Property("StartOfDKJL") + .HasColumnType("int"); + + b.Property("SupportDKJL") + .HasColumnType("tinyint(1)"); + + b.Property("SupportVersion") + .HasColumnType("int"); + + b.Property("SupportsDualCurrent") + .HasColumnType("int"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("EquipmentInfoId"); + + b.HasIndex("ProtectionDeviceGatewayId"); + + b.HasIndex("ProtectionDeviceTypeId"); + + b.HasIndex("TransformerSubstationId"); + + b.HasIndex(new[] { "Name" }, "Index_Name"); + + b.ToTable("gi_protection_device_info"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.ProtectionDeviceType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("AnalogParseMode") + .HasColumnType("longtext"); + + b.Property("CanSwitchDZZone") + .HasColumnType("tinyint(1)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DZReadOnly") + .HasColumnType("tinyint(1)"); + + b.Property("DZZoneCount") + .HasColumnType("int"); + + b.Property("EndOfDKJL") + .HasColumnType("int"); + + b.Property("EventParseMode") + .HasColumnType("longtext"); + + b.Property("Generation") + .HasColumnType("longtext"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsCRCC") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("ManufacturerInfoId") + .HasColumnType("char(36)"); + + b.Property("Model") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("Name") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("PUCtgyCode") + .HasColumnType("int"); + + b.Property("Specification") + .HasColumnType("longtext"); + + b.Property("StartOfDKJL") + .HasColumnType("int"); + + b.Property("Support12YC") + .HasColumnType("tinyint(1)"); + + b.Property("SupportDKJL") + .HasColumnType("tinyint(1)"); + + b.Property("SupportDZ") + .HasColumnType("tinyint(1)"); + + b.Property("SupportEventReport") + .HasColumnType("tinyint(1)"); + + b.Property("SupportFaultReport") + .HasColumnType("tinyint(1)"); + + b.Property("SupportLoadRecording") + .HasColumnType("tinyint(1)"); + + b.Property("SupportRecordingFiles") + .HasColumnType("tinyint(1)"); + + b.Property("SupportSelfTestReport") + .HasColumnType("tinyint(1)"); + + b.Property("SupportVersion") + .HasColumnType("tinyint(1)"); + + b.HasKey("Id"); + + b.HasIndex("ManufacturerInfoId"); + + b.ToTable("gi_protection_device_type"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.ProtectionSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CpuIndex") + .HasColumnType("int"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("CtrlWordTypeId") + .HasColumnType("int"); + + b.Property("EnumTypeId") + .HasColumnType("int"); + + b.Property("EquipmentInfoId") + .HasColumnType("char(36)"); + + b.Property("ISMS_DeviceDZId") + .HasColumnType("longtext"); + + b.Property("ISMS_DeviceId") + .HasColumnType("longtext"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsHidden") + .HasColumnType("tinyint(1)"); + + b.Property("IsReadOnly") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Max") + .HasColumnType("float"); + + b.Property("Min") + .HasColumnType("float"); + + b.Property("Name") + .HasColumnType("longtext"); + + b.Property("ProtectionDeviceInfoId") + .HasColumnType("char(36)"); + + b.Property("ProtectionSettingTypeId") + .HasColumnType("char(36)"); + + b.Property("RelatedCtId") + .HasColumnType("longtext"); + + b.Property("RelatedPtId") + .HasColumnType("longtext"); + + b.Property("SettingCoeff") + .HasColumnType("double"); + + b.Property("SettingCoeff1") + .HasColumnType("double"); + + b.Property("SettingComment") + .HasColumnType("longtext"); + + b.Property("SettingIndex") + .HasColumnType("int"); + + b.Property("SettingPrecision") + .HasColumnType("int"); + + b.Property("SettingPrecision1") + .HasColumnType("int"); + + b.Property("SettingRange") + .HasColumnType("longtext"); + + b.Property("SettingUnit") + .HasColumnType("longtext"); + + b.Property("SettingUnit1") + .HasColumnType("longtext"); + + b.Property("UnitConversionCoeff") + .HasColumnType("double"); + + b.HasKey("Id"); + + b.HasIndex("EquipmentInfoId"); + + b.HasIndex("ProtectionDeviceInfoId"); + + b.HasIndex("ProtectionSettingTypeId"); + + b.ToTable("gi_protection_setting"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.ProtectionSettingType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .HasColumnType("longtext"); + + b.Property("Remark") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.ToTable("gi_protection_setting_type"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.SecondaryCircuit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CircuitType") + .HasColumnType("int"); + + b.Property("Code") + .HasColumnType("longtext"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DeleterUserId") + .HasColumnType("char(36)"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)"); + + b.Property("Description") + .HasMaxLength(500) + .HasColumnType("varchar(500)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsDeleted") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("PictureBase64") + .HasColumnType("nvarchar(max)"); + + b.Property("PicturePath") + .HasMaxLength(500) + .HasColumnType("varchar(500)"); + + b.Property("Remark") + .HasMaxLength(500) + .HasColumnType("varchar(500)"); + + b.Property("SeqNo") + .HasColumnType("int"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("gi_secondary_circuit"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.SecondaryCircuitLogicExpression", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("DeleterUserId") + .HasColumnType("char(36)"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsDeleted") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("LogicalExpression") + .HasColumnType("longtext"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("PicturePath") + .HasColumnType("longtext"); + + b.Property("Remark") + .HasColumnType("longtext"); + + b.Property("SecondaryCircuitId") + .HasColumnType("char(36)"); + + b.Property("TelemeteringConfigurationId") + .HasColumnType("char(36)"); + + b.Property("TelesignalisationConfigurationId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("SecondaryCircuitId"); + + b.HasIndex("TelemeteringConfigurationId"); + + b.HasIndex("TelesignalisationConfigurationId"); + + b.ToTable("gi_secondary_circuit_logic_expression"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.SecondaryCircuitProtectionDevice", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("ProtectionDeviceId") + .HasColumnType("char(36)"); + + b.Property("Remark") + .HasColumnType("longtext"); + + b.Property("SecondaryCircuitId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("ProtectionDeviceId"); + + b.HasIndex("SecondaryCircuitId"); + + b.ToTable("gi_secondary_circuit_protection_device"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.SubstationInterval", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("CreatorUserId") + .HasColumnType("char(36)"); + + b.Property("CurrentCapacity") + .HasColumnType("int"); + + b.Property("DeleterUserId") + .HasColumnType("char(36)"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)"); + + b.Property("IntervalType") + .HasColumnType("int"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsDeleted") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)"); + + b.Property("LastModifierUserId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("ProtectionType") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("TransformerSubstationId") + .HasColumnType("char(36)"); + + b.Property("VoltageLevel") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.HasKey("Id"); + + b.HasIndex("TransformerSubstationId"); + + b.ToTable("gi_substation_interval"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.ClientConfiguration.ThreeDimension.CCThreeDimension", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "EquipmentInfo") + .WithMany() + .HasForeignKey("EquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelecommandConfiguration", "TelecommandConfiguration") + .WithMany() + .HasForeignKey("TelecommandConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelemeteringConfiguration", "TelemeteringConfiguration") + .WithMany() + .HasForeignKey("TelemeteringConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelesignalisationConfiguration", "TelesignalisationConfiguration") + .WithMany() + .HasForeignKey("TelesignalisationConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.VideoDev", "VideoInfo") + .WithMany() + .HasForeignKey("VideoDevId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("EquipmentInfo"); + + b.Navigation("TelecommandConfiguration"); + + b.Navigation("TelemeteringConfiguration"); + + b.Navigation("TelesignalisationConfiguration"); + + b.Navigation("TransformerSubstation"); + + b.Navigation("VideoInfo"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.MultidimensionalCheck", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "EquipmentInfo") + .WithMany() + .HasForeignKey("EquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.PatternRecognitionConfigutration", "PatternRecognitionConfigutration1") + .WithMany() + .HasForeignKey("PatternRecognitionConfigutrationId1") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.PatternRecognitionConfigutration", "PatternRecognitionConfigutration2") + .WithMany() + .HasForeignKey("PatternRecognitionConfigutrationId2") + .OnDelete(DeleteBehavior.Cascade) + .HasConstraintName("FK_dm_multidimensional_check_vs_pattern_recognition_configutra~1"); + + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.PresetPoint", "PresetPoint1") + .WithMany() + .HasForeignKey("PresetPointId1") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.PresetPoint", "PresetPoint2") + .WithMany() + .HasForeignKey("PresetPointId2") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelesignalisationConfiguration", "TelesignalisationConfiguration") + .WithMany() + .HasForeignKey("TelesignalisationConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("EquipmentInfo"); + + b.Navigation("PatternRecognitionConfigutration1"); + + b.Navigation("PatternRecognitionConfigutration2"); + + b.Navigation("PresetPoint1"); + + b.Navigation("PresetPoint2"); + + b.Navigation("TelesignalisationConfiguration"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.SelfCheckingConfiguration", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TeleCommandPlanSetting", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TeleCommandPlanTime", b => + { + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TeleCommandPlanSetting", "TeleCommandPlanSetting") + .WithMany() + .HasForeignKey("TeleCommandPlanSettingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("TeleCommandPlanSetting"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TeleCommandSettingItem", b => + { + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TeleCommandPlanSetting", "TeleCommandPlanSetting") + .WithMany("TeleCommandSettingItems") + .HasForeignKey("TeleCommandPlanSettingId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelecommandConfiguration", "TelecommandConfiguration") + .WithMany() + .HasForeignKey("TelecommandConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("TeleCommandPlanSetting"); + + b.Navigation("TelecommandConfiguration"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TelecommandConfiguration", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "EquipmentInfo") + .WithMany() + .HasForeignKey("EquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentType", "EquipmentType") + .WithMany() + .HasForeignKey("EquipmentTypeId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelesignalisationConfiguration", "RelatedTelesignalisation") + .WithMany() + .HasForeignKey("RelatedTelesignalisationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("EquipmentInfo"); + + b.Navigation("EquipmentType"); + + b.Navigation("RelatedTelesignalisation"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TelecommandTemplate", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentType", "EquipmentType") + .WithMany("TelecommandTemplates") + .HasForeignKey("EquipmentTypeId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("EquipmentType"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TelemeteringAlarmTemplate", b => + { + b.HasOne("YunDa.ISAS.Entities.MySQL.DataMonitoring.DMAlarmCategory", "DMAlarmCategory") + .WithMany() + .HasForeignKey("DMAlarmCategoryId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelemeteringTemplate", "TelemeteringTemplate") + .WithMany("TelemeteringAlarmTemplates") + .HasForeignKey("TelemeteringTemplateId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("DMAlarmCategory"); + + b.Navigation("TelemeteringTemplate"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TelemeteringConfiguration", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "EquipmentInfo") + .WithMany() + .HasForeignKey("EquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentType", "EquipmentType") + .WithMany() + .HasForeignKey("EquipmentTypeId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.SelfCheckingConfiguration", "SelfCheckingConfiguration") + .WithMany() + .HasForeignKey("SelfCheckingConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("EquipmentInfo"); + + b.Navigation("EquipmentType"); + + b.Navigation("SelfCheckingConfiguration"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TelemeteringTemplate", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentType", "EquipmentType") + .WithMany("TelemeteringTemplates") + .HasForeignKey("EquipmentTypeId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("EquipmentType"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TelesignalisationConfiguration", b => + { + b.HasOne("YunDa.ISAS.Entities.MySQL.DataMonitoring.DMAlarmCategory", "DMAlarmCategory") + .WithMany() + .HasForeignKey("DMAlarmCategoryId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "EquipmentInfo") + .WithMany() + .HasForeignKey("EquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentType", "EquipmentType") + .WithMany() + .HasForeignKey("EquipmentTypeId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.SelfCheckingConfiguration", "SelfCheckingConfiguration") + .WithMany() + .HasForeignKey("SelfCheckingConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("DMAlarmCategory"); + + b.Navigation("EquipmentInfo"); + + b.Navigation("EquipmentType"); + + b.Navigation("SelfCheckingConfiguration"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TelesignalisationTemplate", b => + { + b.HasOne("YunDa.ISAS.Entities.MySQL.DataMonitoring.DMAlarmCategory", "DMAlarmCategory") + .WithMany() + .HasForeignKey("DMAlarmCategoryId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentType", "EquipmentType") + .WithMany("TelesignalisationTemplates") + .HasForeignKey("EquipmentTypeId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("DMAlarmCategory"); + + b.Navigation("EquipmentType"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.Foundation.NameDateText", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.EquipmentDataCategory", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentType", "EquipmentType") + .WithMany() + .HasForeignKey("EquipmentTypeId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("EquipmentType"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.EquipmentDataCategoryExactly", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentDataCategory", "EquipmentDataCategory") + .WithMany() + .HasForeignKey("EquipmentDataCategoryId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "EquipmentInfo") + .WithMany() + .HasForeignKey("EquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentType", "EquipmentType") + .WithMany() + .HasForeignKey("EquipmentTypeId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("EquipmentDataCategory"); + + b.Navigation("EquipmentInfo"); + + b.Navigation("EquipmentType"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "BelongEquipmentInfo") + .WithMany() + .HasForeignKey("BelongEquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentType", "EquipmentType") + .WithMany("EquipmentInfos") + .HasForeignKey("EquipmentTypeId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.ManufacturerInfo", "ManufacturerInfo") + .WithMany() + .HasForeignKey("ManufacturerInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("BelongEquipmentInfo"); + + b.Navigation("EquipmentType"); + + b.Navigation("ManufacturerInfo"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.EquipmentLinkTeledata", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "DataEquipmentInfo") + .WithMany() + .HasForeignKey("DataEquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentDataCategoryExactly", "EquipmentDataCategoryExactly") + .WithMany() + .HasForeignKey("EquipmentDataCategoryExactlyId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "EquipmentInfo") + .WithMany() + .HasForeignKey("EquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelemeteringConfiguration", "TelemeteringConfiguration") + .WithMany() + .HasForeignKey("TelemeteringConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelesignalisationConfiguration", "TelesignalisationConfiguration") + .WithMany() + .HasForeignKey("TelesignalisationConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("DataEquipmentInfo"); + + b.Navigation("EquipmentDataCategoryExactly"); + + b.Navigation("EquipmentInfo"); + + b.Navigation("TelemeteringConfiguration"); + + b.Navigation("TelesignalisationConfiguration"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.EquipmentTypeViewPoint", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentType", "EquipmentType") + .WithMany() + .HasForeignKey("EquipmentTypeId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("EquipmentType"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.EquipmentViewPoint", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "EquipmentInfo") + .WithMany() + .HasForeignKey("EquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentTypeViewPoint", "EquipmentTypeViewPoint") + .WithMany() + .HasForeignKey("EquipmentTypeViewPointId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("EquipmentInfo"); + + b.Navigation("EquipmentTypeViewPoint"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.SubMasterStationRelation", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "MasterStation") + .WithMany() + .HasForeignKey("MasterStationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MasterStation"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.PowerSupplyLine", "PowerSupplyLine") + .WithMany("TransformerSubstations") + .HasForeignKey("PowerSupplyLineId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("PowerSupplyLine"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MobileSurveillance.RobotDeviceInfo", b => + { + b.HasOne("YunDa.ISAS.Entities.MobileSurveillance.RobotInfo", "RobotInfo") + .WithMany() + .HasForeignKey("RobotInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("YunDa.ISAS.Entities.MobileSurveillance.RobotTask", null) + .WithMany("RobotDeviceInfos") + .HasForeignKey("RobotTaskId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("RobotInfo"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MobileSurveillance.RobotInfo", b => + { + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.VideoDev", "GeneralCamera") + .WithMany() + .HasForeignKey("GeneralCameraId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.VideoDev", "InfraredCamera") + .WithMany() + .HasForeignKey("InfraredCameraId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.ManufacturerInfo", "ManufacturerInfo") + .WithMany() + .HasForeignKey("ManufacturerInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("GeneralCamera"); + + b.Navigation("InfraredCamera"); + + b.Navigation("ManufacturerInfo"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MobileSurveillance.RobotTask", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.MasterStation", "MasterStation") + .WithMany() + .HasForeignKey("MasterStationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.MobileSurveillance.RobotInfo", "RobotInfo") + .WithMany() + .HasForeignKey("RobotInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("MasterStation"); + + b.Navigation("RobotInfo"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MobileSurveillance.RobotTaskItemLink", b => + { + b.HasOne("YunDa.ISAS.Entities.MobileSurveillance.RobotDeviceInfo", "RobotDeviceInfo") + .WithMany() + .HasForeignKey("RobotDeviceInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("YunDa.ISAS.Entities.MobileSurveillance.RobotTask", "RobotTask") + .WithMany() + .HasForeignKey("RobotTaskId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("RobotDeviceInfo"); + + b.Navigation("RobotTask"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MySQL.DataMonitoring.LinkageCondition", b => + { + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.CameraAuthentication", "CameraAuthentication") + .WithMany() + .HasForeignKey("CameraAuthenticationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "EquipmentInfo") + .WithMany() + .HasForeignKey("EquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentType", "EquipmentType") + .WithMany() + .HasForeignKey("EquipmentTypeId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.MySQL.DataMonitoring.LinkageStrategy", "LinkageStrategy") + .WithMany("LinkageConditions") + .HasForeignKey("LinkageStrategyId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelemeteringConfiguration", "TelemeteringConfiguration") + .WithMany() + .HasForeignKey("TelemeteringConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelesignalisationConfiguration", "TelesignalisationConfiguration") + .WithMany() + .HasForeignKey("TelesignalisationConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("CameraAuthentication"); + + b.Navigation("EquipmentInfo"); + + b.Navigation("EquipmentType"); + + b.Navigation("LinkageStrategy"); + + b.Navigation("TelemeteringConfiguration"); + + b.Navigation("TelesignalisationConfiguration"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MySQL.DataMonitoring.LinkageExecuteActivity", b => + { + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.CameraAuthentication", "CameraAuthentication") + .WithMany() + .HasForeignKey("CameraAuthenticationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "EquipmentInfo") + .WithMany() + .HasForeignKey("EquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentType", "EquipmentType") + .WithMany() + .HasForeignKey("EquipmentTypeId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.MySQL.DataMonitoring.LinkageStrategy", "LinkageStrategy") + .WithMany("LinkageExecuteActivities") + .HasForeignKey("LinkageStrategyId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.PresetPoint", "PresetPoint") + .WithMany() + .HasForeignKey("PresetPointId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelecommandConfiguration", "TelecommandConfiguration") + .WithMany() + .HasForeignKey("TelecommandConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("CameraAuthentication"); + + b.Navigation("EquipmentInfo"); + + b.Navigation("EquipmentType"); + + b.Navigation("LinkageStrategy"); + + b.Navigation("PresetPoint"); + + b.Navigation("TelecommandConfiguration"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MySQL.DataMonitoring.LinkageStrategy", b => + { + b.HasOne("YunDa.ISAS.Entities.MySQL.DataMonitoring.DMAlarmCategory", "DMAlarmCategory") + .WithMany() + .HasForeignKey("DMAlarmCategoryId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("DMAlarmCategory"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MySQL.DataMonitoring.TelemeteringAlarmStrategy", b => + { + b.HasOne("YunDa.ISAS.Entities.MySQL.DataMonitoring.DMAlarmCategory", "DMAlarmCategory") + .WithMany() + .HasForeignKey("DMAlarmCategoryId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelemeteringConfiguration", "TelemeteringConfiguration") + .WithMany("TelemeteringAlarmStrategys") + .HasForeignKey("TelemeteringConfigurationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("DMAlarmCategory"); + + b.Navigation("TelemeteringConfiguration"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.System.SysConfiguration", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.System.SysRoleFunction", b => + { + b.HasOne("YunDa.ISAS.Entities.System.SysFunction", "SysFunction") + .WithMany() + .HasForeignKey("SysFunctionId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.System.SysRole", "SysRole") + .WithMany() + .HasForeignKey("SysRoleId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("SysFunction"); + + b.Navigation("SysRole"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.System.SysRoleUser", b => + { + b.HasOne("YunDa.ISAS.Entities.System.SysRole", "SysRole") + .WithMany() + .HasForeignKey("SysRoleId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.System.SysUser", "SysUser") + .WithMany() + .HasForeignKey("SysUserId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("SysRole"); + + b.Navigation("SysUser"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.InspectionCard", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.MasterStation", "MasterStation") + .WithMany() + .HasForeignKey("MasterStationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany("InspectionCards") + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("MasterStation"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.InspectionItem", b => + { + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.InspectionCard", "InspectionCard") + .WithMany("InspectionItems") + .HasForeignKey("InspectionCardId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.PresetPoint", "PresetPoint") + .WithMany("InspectionItems") + .HasForeignKey("PresetPointId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.VideoDev", "VideoDev") + .WithMany("InspectionItems") + .HasForeignKey("VideoDevId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("InspectionCard"); + + b.Navigation("PresetPoint"); + + b.Navigation("VideoDev"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.InspectionPlanTask", b => + { + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.InspectionCard", "InspectionCard") + .WithMany("InspectionPlanTasks") + .HasForeignKey("InspectionCardId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("InspectionCard"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.LightingControl", b => + { + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.PresetPoint", "PresetPoint") + .WithMany() + .HasForeignKey("PresetPointId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelecommandConfiguration", "TelecommandConfiguration") + .WithMany() + .HasForeignKey("TelecommandConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelemeteringConfiguration", "TelemeteringConfiguration") + .WithMany() + .HasForeignKey("TelemeteringConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelesignalisationConfiguration", "TelesignalisationConfiguration") + .WithMany() + .HasForeignKey("TelesignalisationConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("PresetPoint"); + + b.Navigation("TelecommandConfiguration"); + + b.Navigation("TelemeteringConfiguration"); + + b.Navigation("TelesignalisationConfiguration"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.MeasureTemperaturePoint", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "EquipmentInfo") + .WithMany() + .HasForeignKey("EquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentType", "EquipmentType") + .WithMany() + .HasForeignKey("EquipmentTypeId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.PresetPoint", "PresetPoint") + .WithMany("MeasureTemperaturePoints") + .HasForeignKey("PresetPointId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelemeteringConfiguration", "TelemeteringConfiguration") + .WithMany() + .HasForeignKey("TelemeteringConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("EquipmentInfo"); + + b.Navigation("EquipmentType"); + + b.Navigation("PresetPoint"); + + b.Navigation("TelemeteringConfiguration"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.PatternRecognitionConfigutration", b => + { + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.PresetPoint", "PresetPoint") + .WithMany() + .HasForeignKey("PresetPointId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelemeteringConfiguration", "Telemetering") + .WithMany() + .HasForeignKey("TelemeteringConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelesignalisationConfiguration", "Telesignalisation") + .WithMany() + .HasForeignKey("TelesignalisationConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.VideoDev", "VideoDev") + .WithMany() + .HasForeignKey("VideoDevId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("PresetPoint"); + + b.Navigation("Telemetering"); + + b.Navigation("Telesignalisation"); + + b.Navigation("VideoDev"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.PresetPoint", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "EquipmentInfo") + .WithMany() + .HasForeignKey("EquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentType", "EquipmentType") + .WithMany() + .HasForeignKey("EquipmentTypeId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentViewPoint", "EquipmentViewPoint") + .WithMany() + .HasForeignKey("EquipmentViewPointId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.VideoDev", "VideoDev") + .WithMany("PresetPoints") + .HasForeignKey("VideoDevId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("EquipmentInfo"); + + b.Navigation("EquipmentType"); + + b.Navigation("EquipmentViewPoint"); + + b.Navigation("VideoDev"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.VideoDev", b => + { + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.VideoDev", "LinkVideoDev") + .WithMany() + .HasForeignKey("LinkVideoDevId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.ManufacturerInfo", "ManufacturerInfo") + .WithMany() + .HasForeignKey("ManufacturerInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.MasterStation", "MasterStation") + .WithMany() + .HasForeignKey("MasterStationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany("VideoDevs") + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.VideoSurveillance.VideoDev", "Parent") + .WithMany() + .HasForeignKey("VideoDevId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("LinkVideoDev"); + + b.Navigation("ManufacturerInfo"); + + b.Navigation("MasterStation"); + + b.Navigation("Parent"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.BoardCardInfo", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.ManufacturerInfo", "ManufacturerInfo") + .WithMany() + .HasForeignKey("ManufacturerInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.SOMS.Entities.GeneralInformation.ProtectionDeviceInfo", "ProtectionDeviceInfo") + .WithMany() + .HasForeignKey("ProtectionDeviceInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("ManufacturerInfo"); + + b.Navigation("ProtectionDeviceInfo"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.IntervalEquipmentInfo", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "EquipmentInfo") + .WithMany() + .HasForeignKey("EquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("YunDa.SOMS.Entities.GeneralInformation.ProtectionDeviceInfo", "ProtectionDeviceInfo") + .WithMany() + .HasForeignKey("ProtectionDeviceInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("YunDa.SOMS.Entities.GeneralInformation.SubstationInterval", "SubstationInterval") + .WithMany() + .HasForeignKey("SubstationIntervalId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EquipmentInfo"); + + b.Navigation("ProtectionDeviceInfo"); + + b.Navigation("SubstationInterval"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.ProtectionDeviceGateway", b => + { + b.HasOne("YunDa.SOMS.Entities.GeneralInformation.ProtectionDeviceInfo", "ProtectionDeviceInfo") + .WithMany() + .HasForeignKey("ProtectionDeviceInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ProtectionDeviceInfo"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.ProtectionDeviceHistory", b => + { + b.HasOne("YunDa.SOMS.Entities.GeneralInformation.ProtectionDeviceInfo", "ProtectionDeviceInfo") + .WithMany() + .HasForeignKey("ProtectionDeviceInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("ProtectionDeviceInfo"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.ProtectionDeviceInfo", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "EquipmentInfo") + .WithMany() + .HasForeignKey("EquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("YunDa.SOMS.Entities.GeneralInformation.ProtectionDeviceGateway", "ProtectionDeviceGateway") + .WithMany() + .HasForeignKey("ProtectionDeviceGatewayId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.SOMS.Entities.GeneralInformation.ProtectionDeviceType", "ProtectionDeviceType") + .WithMany() + .HasForeignKey("ProtectionDeviceTypeId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EquipmentInfo"); + + b.Navigation("ProtectionDeviceGateway"); + + b.Navigation("ProtectionDeviceType"); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.ProtectionDeviceType", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.ManufacturerInfo", "ManufacturerInfo") + .WithMany() + .HasForeignKey("ManufacturerInfoId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("ManufacturerInfo"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.ProtectionSetting", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.EquipmentInfo", "EquipmentInfo") + .WithMany() + .HasForeignKey("EquipmentInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("YunDa.SOMS.Entities.GeneralInformation.ProtectionDeviceInfo", "ProtectionDeviceInfo") + .WithMany() + .HasForeignKey("ProtectionDeviceInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("YunDa.SOMS.Entities.GeneralInformation.ProtectionSettingType", "ProtectionSettingType") + .WithMany() + .HasForeignKey("ProtectionSettingTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EquipmentInfo"); + + b.Navigation("ProtectionDeviceInfo"); + + b.Navigation("ProtectionSettingType"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.SecondaryCircuit", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.SecondaryCircuitLogicExpression", b => + { + b.HasOne("YunDa.SOMS.Entities.GeneralInformation.SecondaryCircuit", "SecondaryCircuit") + .WithMany() + .HasForeignKey("SecondaryCircuitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelemeteringConfiguration", "TelemeteringConfiguration") + .WithMany() + .HasForeignKey("TelemeteringConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.HasOne("YunDa.ISAS.Entities.DataMonitoring.TelesignalisationConfiguration", "TelesignalisationConfiguration") + .WithMany() + .HasForeignKey("TelesignalisationConfigurationId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("SecondaryCircuit"); + + b.Navigation("TelemeteringConfiguration"); + + b.Navigation("TelesignalisationConfiguration"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.SecondaryCircuitProtectionDevice", b => + { + b.HasOne("YunDa.SOMS.Entities.GeneralInformation.ProtectionDeviceInfo", "ProtectionDevice") + .WithMany() + .HasForeignKey("ProtectionDeviceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("YunDa.SOMS.Entities.GeneralInformation.SecondaryCircuit", "SecondaryCircuit") + .WithMany() + .HasForeignKey("SecondaryCircuitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ProtectionDevice"); + + b.Navigation("SecondaryCircuit"); + }); + + modelBuilder.Entity("YunDa.SOMS.Entities.GeneralInformation.SubstationInterval", b => + { + b.HasOne("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", "TransformerSubstation") + .WithMany() + .HasForeignKey("TransformerSubstationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TransformerSubstation"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TeleCommandPlanSetting", b => + { + b.Navigation("TeleCommandSettingItems"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TelemeteringConfiguration", b => + { + b.Navigation("TelemeteringAlarmStrategys"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.DataMonitoring.TelemeteringTemplate", b => + { + b.Navigation("TelemeteringAlarmTemplates"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.EquipmentType", b => + { + b.Navigation("EquipmentInfos"); + + b.Navigation("TelecommandTemplates"); + + b.Navigation("TelemeteringTemplates"); + + b.Navigation("TelesignalisationTemplates"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.PowerSupplyLine", b => + { + b.Navigation("TransformerSubstations"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.GeneralInformation.TransformerSubstation", b => + { + b.Navigation("InspectionCards"); + + b.Navigation("VideoDevs"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MobileSurveillance.RobotTask", b => + { + b.Navigation("RobotDeviceInfos"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.MySQL.DataMonitoring.LinkageStrategy", b => + { + b.Navigation("LinkageConditions"); + + b.Navigation("LinkageExecuteActivities"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.InspectionCard", b => + { + b.Navigation("InspectionItems"); + + b.Navigation("InspectionPlanTasks"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.PresetPoint", b => + { + b.Navigation("InspectionItems"); + + b.Navigation("MeasureTemperaturePoints"); + }); + + modelBuilder.Entity("YunDa.ISAS.Entities.VideoSurveillance.VideoDev", b => + { + b.Navigation("InspectionItems"); + + b.Navigation("PresetPoints"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/YunDa.Domain/YunDa.ISAS.EntityFrameworkCore/Migrations/20241127075013_update_table_v91.cs b/src/YunDa.Domain/YunDa.ISAS.EntityFrameworkCore/Migrations/20241127075013_update_table_v91.cs new file mode 100644 index 0000000..18b7de7 --- /dev/null +++ b/src/YunDa.Domain/YunDa.ISAS.EntityFrameworkCore/Migrations/20241127075013_update_table_v91.cs @@ -0,0 +1,28 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace YunDa.ISAS.Migrations +{ + /// + public partial class update_table_v91 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "PictureBase64", + table: "gi_secondary_circuit", + type: "MEDIUMTEXT", + nullable: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "PictureBase64", + table: "gi_secondary_circuit"); + } + } +} diff --git a/src/YunDa.Domain/YunDa.ISAS.EntityFrameworkCore/Migrations/ISASDbContextModelSnapshot.cs b/src/YunDa.Domain/YunDa.ISAS.EntityFrameworkCore/Migrations/ISASDbContextModelSnapshot.cs index 59b0313..751f473 100644 --- a/src/YunDa.Domain/YunDa.ISAS.EntityFrameworkCore/Migrations/ISASDbContextModelSnapshot.cs +++ b/src/YunDa.Domain/YunDa.ISAS.EntityFrameworkCore/Migrations/ISASDbContextModelSnapshot.cs @@ -17,7 +17,7 @@ namespace YunDa.ISAS.Migrations { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "8.0.8") + .HasAnnotation("ProductVersion", "8.0.11") .HasAnnotation("Relational:MaxIdentifierLength", 64); MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); @@ -3951,6 +3951,9 @@ namespace YunDa.ISAS.Migrations .HasMaxLength(200) .HasColumnType("varchar(200)"); + b.Property("PictureBase64") + .HasColumnType("nvarchar(max)"); + b.Property("PicturePath") .HasMaxLength(500) .HasColumnType("varchar(500)"); diff --git a/src/YunDa.Domain/YunDa.ISAS.EntityFrameworkCore/YunDa.SOMS.EntityFrameworkCore.csproj b/src/YunDa.Domain/YunDa.ISAS.EntityFrameworkCore/YunDa.SOMS.EntityFrameworkCore.csproj index b2abd07..72b968d 100644 --- a/src/YunDa.Domain/YunDa.ISAS.EntityFrameworkCore/YunDa.SOMS.EntityFrameworkCore.csproj +++ b/src/YunDa.Domain/YunDa.ISAS.EntityFrameworkCore/YunDa.SOMS.EntityFrameworkCore.csproj @@ -25,6 +25,10 @@ + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/src/YunDa.Domain/YunDa.ISAS.Redis/ISASRedisModule.cs b/src/YunDa.Domain/YunDa.ISAS.Redis/ISASRedisModule.cs index cd06178..215ef85 100644 --- a/src/YunDa.Domain/YunDa.ISAS.Redis/ISASRedisModule.cs +++ b/src/YunDa.Domain/YunDa.ISAS.Redis/ISASRedisModule.cs @@ -21,6 +21,7 @@ using YunDa.ISAS.Redis.Repositories; using YunDa.SOMS.DataTransferObject.EquipmentLiveData; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionSettingDto; +using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport; namespace YunDa.ISAS.Redis { @@ -90,12 +91,13 @@ namespace YunDa.ISAS.Redis IocManager.Register, RedisRepository>(); IocManager.Register, RedisRepository>(); IocManager.Register, RedisRepository>(); - IocManager.Register, RedisRepository>(); + /*运维相关*/ + IocManager.Register, RedisRepository>(); + IocManager.Register, RedisRepository>(); + IocManager.Register, RedisRepository>(); - - - + } } } 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 743dc1c..1c35dfd 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/DataCollection/DataSendTask.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/DataCollection/DataSendTask.cs @@ -5,6 +5,7 @@ using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; +using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Threading.Tasks.Dataflow; using ToolLibrary.LogHelper; @@ -22,6 +23,7 @@ using YunDa.ISAS.DataTransferObject.EquipmentLiveData; using YunDa.ISAS.Entities.DataMonitoring; using YunDa.ISAS.Redis.Entities.DataMonitorCategory; using YunDa.ISAS.Redis.Repositories; +using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport; namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection { @@ -97,6 +99,19 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection } }, new ExecutionDataflowBlockOptions() { MaxDegreeOfParallelism = 1 }); + //测试代码 +#warning 正式版本需要删除 + Task.Run(async () => { + while (true) + { + await SendDeviceSlefCheckInfo(); + await Task.Delay(3000); + await SendSecondaryCircuitDiagnosticsInfo(); + await Task.Delay(3000); + await SendEquipmentInfoRemainingLifeAssessmentInfo(); + await Task.Delay(3000); + } + }); } public ActionBlock RECORDYXBURSTActionBlock = default; @@ -150,6 +165,32 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection // 并行处理多个任务以提高性能 var tasks = new List(); + if (_runningDataCache.SecondaryCircuitLogicExpressionDic.ContainsKey(hashKey)) + { + var listLogics = _runningDataCache.SecondaryCircuitLogicExpressionDic[hashKey]; + foreach (var listLogic in listLogics) + { + // 示例字符串 + + // 正则表达式匹配花括号中的内容 + string pattern = @"\{([^}]*)\}"; + Regex regex = new Regex(pattern); + + // 提取匹配内容 + MatchCollection matches = regex.Matches(listLogic); + List extractedStrings = new List(); + foreach (Match match in matches) + { + var logichasKey = match.Groups[1].Value; + var ycLiveData = _redisDataRepository.TelemeteringModelListRedis.HashSetGetOne(redisKey, logichasKey); + if (ycLiveData!=null) + { + listLogic.Replace(logichasKey, ycLiveData.ResultValue.ToString()); + } + } + } + } + // 更新到内存数据库中 tasks.Add(_redisDataRepository.TelemeteringModelListRedis.HashSetUpdateOneAsync(redisKey, hashKey, ycData)); //Log4Helper.Info(this.GetType(), $"更新数据成功: 地址:{yc.inf} 类型:{categoriyValue}"); @@ -196,8 +237,8 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection try { var categoriyValue = _settingModel.GetDatacatgoryValue(_settingModel.DataSourceCategoryName); - string redisKey = _redisDataRepository.TelesignalisationModelListRediskey + "_" + _settingModel.GetDatacatgoryName(_settingModel.DataSourceCategoryName); ; - string redisChannel = _redisDataRepository.TelesignalisationInflectionInflectionZZChannelRediskey + "_" + _settingModel.GetDatacatgoryName(_settingModel.DataSourceCategoryName); ; + string redisKey = _redisDataRepository.TelesignalisationModelListRediskey + "_" + _settingModel.GetDatacatgoryName(_settingModel.DataSourceCategoryName); + string redisChannel = _redisDataRepository.TelesignalisationInflectionInflectionZZChannelRediskey + "_" + _settingModel.GetDatacatgoryName(_settingModel.DataSourceCategoryName); string haskey = $"{yx.dev_addr}_{yx.dev_sector}_{yx.dev_inf}_{categoriyValue}"; // 从 Redis 中批量获取遥信数据 var yxData = _redisDataRepository.TelesignalisationModelListRedis.HashSetGetOne(redisKey, haskey); @@ -244,8 +285,54 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection } private Dictionary TelesignaleAlarmTempBuffDic = new Dictionary(); + /// + /// 发送装置自检信息 + /// + /// + public async Task SendDeviceSlefCheckInfo() + { + string redisChannel = "deviceSelfTestChannel"; + await _redisDataRepository.AbnormalComponentRedis.PublishAsync(redisChannel, new EquipmentInfoAbnormalComponent + { + EquipmentInfoId = Guid.Parse("08dd0eb5-f8b7-48a4-81da-2f531d0f614a"), + AbnormalReason = "当前值63°,超过门限60°", + ComponentName = "机箱温度", + HandlingMeasures= "注意关注温度状态", + }); - + } + + /// + /// 发送回路诊断信息 + /// + /// + public async Task SendSecondaryCircuitDiagnosticsInfo() + { + string redisChannel = "secondaryCircuitDiagnosticsChannel"; + await _redisDataRepository.SecondaryCircuitComponentRedis.PublishAsync(redisChannel, new SecondaryCircuitComponent + { + EquipmentInfoId = Guid.Parse("08dd0eb5-f8b7-48a4-81da-2f531d0f614a"), + SecondaryCircuitId = Guid.Parse("08dd0eba-d37b-4920-811c-40b7c29f69fe"), + AbnormalReason = "表达式(1200A)值,超范围1000A", + ComponentName = "交流回路_1", + HandlingMeasures = "", + }); + + } + /// + /// 发送寿命预估 + /// + /// + public async Task SendEquipmentInfoRemainingLifeAssessmentInfo() + { + string redisChannel = "equipmentInfoRemainingLifeAssessmentChannel"; + await _redisDataRepository.EquipmentInfoRemainingLifeAssessmentRedis.PublishAsync(redisChannel, new EquipmentInfoRemainingLifeAssessment + { + EquipmentInfoId = Guid.Parse("08dd0eb5-f8b7-48a4-81da-2f531d0f614a"), + RemainingLifeInYears = "5.8年", + }); + + } /// /// 发送遥测数据到主界面日志显示 /// diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/Model/ConstantModel.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/Model/ConstantModel.cs index 1706398..cccdf54 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/Model/ConstantModel.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/Model/ConstantModel.cs @@ -198,8 +198,8 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.Model public static string RequestPatternRecogbnizeUri => $"http://127.0.0.1:35689/api/recognize"; //public static string RequestPatternRecogbnizeUri => $"http://127.0.0.1:35689/api/recognize"; - public static string RequestInitYXRedisListUri => $"{WebAddr}/api/services/isas/EquipmentInfoEx/InitYCList"; - public static string RequestInitYCRedisListUri => $"{WebAddr}/api/services/isas/EquipmentInfoEx/InitYXList"; + public static string RequestInitYXRedisListUri => $"{WebAddr}/api/services/isas/EquipmentInfoEx/InitYXList"; + public static string RequestInitYCRedisListUri => $"{WebAddr}/api/services/isas/EquipmentInfoEx/InitYCList"; public static string RequestEquipmentSimDatasUri => $"{WebAddr}/api/services/isas/EquipmentInfo/FindSimDatas"; public static string RequestEquipmentTypeSimDatasUri => $"{WebAddr}/api/services/isas/EquipmentType/FindSimDatas"; @@ -213,5 +213,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.Model /// 修改板卡版本信息 /// public static string RequestModifyBoardInfoList => $"{WebAddr}/api/services/isas/BoardCardInfo/ModifyBoardInfoList"; + + public static string RequestSecondaryCircuitLogicExpressionList => $"{WebAddr}/api/services/isas/SecondaryCircuitLogicExpression/FindDatas"; } } \ No newline at end of file diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/MonitoringDataService.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/MonitoringDataService.cs index d0724da..d543619 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/MonitoringDataService.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/MonitoringDataService.cs @@ -1,6 +1,11 @@ using Abp.Dependency; using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text.RegularExpressions; using System.Threading.Tasks; +using System.Windows.Controls; using System.Windows.Forms; using ToolLibrary.LogHelper; using Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection; @@ -32,6 +37,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis private readonly DotNettyTcpServer _dotNettyTcpServer; private readonly ProtectionDeviceDataCenter _protectionDeviceDataCenter; private readonly ProtectionDeviceDZDataHandle _protectionDeviceDZDataHandle; + private readonly RedisDataRepository _redisDataRepository; WPF.ViewModel.Content _settingModel; public MonitoringDataService(WebApiRequest webApiRequest, RunningDataCache runningDataCache, @@ -42,7 +48,8 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis TelecomDataCenter telecomDataCenter, DotNettyTcpServer dotNettyTcpServer, ProtectionDeviceDZDataHandle protectionDeviceDZDataHandle, - ProtectionDeviceDataCenter protectionDeviceDataCenter + ProtectionDeviceDataCenter protectionDeviceDataCenter, + RedisDataRepository redisDataRepository //WebApiServer webApiServer ) { @@ -58,6 +65,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis //var webapiPort = _configurationHepler.GetAppsettingsValue("ConnectionStrings", "WebApi", "Port"); _protectionDeviceDZDataHandle = protectionDeviceDZDataHandle; _protectionDeviceDataCenter = protectionDeviceDataCenter; + _redisDataRepository = redisDataRepository; //_webApiServer.RunServerAsync(int.Parse(webapiPort)); } private bool IsOpenWebSocket = false; @@ -97,6 +105,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis { MonitoringEventBus.LogHandler("启动装置定值接口", "装置定值"); await _protectionDeviceDataCenter.InitProtectionDeviceComms(); + await InitSecondaryCircuitLogicExpressionDic(); } _dataCollectionTask.CollectionStart(settingModel, startWebsocket);//开启数据采集 } @@ -104,6 +113,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis { _dataCollectionTask.CallAllData(); } + /// /// 停止服务 /// @@ -145,5 +155,80 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis MonitoringEventBus.LogHandler(ex.Message, "异常信息"); } } + private async Task InitSecondaryCircuitLogicExpressionDic() + { + try + { + _runningDataCache.SecondaryCircuitLogicExpressionDic.Clear(); + var yxlist =await _redisDataRepository.GetTelesignalisationModels(); + var yclist =await _redisDataRepository.GetTelemeteringModels(); + var ycCheckList =( await _redisDataRepository.GetCheckTelemeteringModels()).ToDictionary(t => t.Id); + var yxDic = yxlist.ToDictionary(t => t.Id); + var ycDic = yclist.ToDictionary(t => t.Id); + var list = _webApiRequest.GetSecondaryCircuitLogicExpressionList(); + foreach (var item in list) + { + if (!ycCheckList.ContainsKey(item.TelemeteringConfigurationId.Value)) + { + Debug.WriteLine("错误,没有找到遥测"); + continue; + } + var checktelemeteringConfiguration = ycCheckList[item.TelemeteringConfigurationId.Value]; + + float? upperLimit = checktelemeteringConfiguration.UpperLimit; + float? lowerLimit = checktelemeteringConfiguration.LowerLimit; + // 正则表达式匹配花括号中的内容,包括 GUID + string pattern = @"\{([^}]*:([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}))\}"; + Regex regex = new Regex(pattern); + + item.LogicalExpression = regex.Replace(item.LogicalExpression, match => + { + // 提取 GUID + var guidStr = match.Groups[2].Value; + var guid = Guid.Parse(guidStr); + + // 查找对应的 key + if (yxDic.TryGetValue(guid, out var yx)) + { + return $"{{{yx.DeviceAddress}_{yx.CPUSector}_{yx.DispatcherAddress}_{(int)yx.DataSourceCategory}}}"; + + } + else if (ycDic.TryGetValue(guid, out var yc)) + { + // 构造 key 替换 + return $"{{{yc.DeviceAddress}_{yc.CPUSector}_{yc.DispatcherAddress}_{(int)yc.DataSourceCategory}}}"; + } + // 如果未找到,保留原内容 + return match.Value; + }); + // 输出替换后的 LogicalExpression + Debug.WriteLine($"替换后的 LogicalExpression: {item.LogicalExpression}"); + // 正则表达式匹配花括号中的内容 + string pattern1 = @"\{([^}]*)\}"; + Regex regex1 = new Regex(pattern1); + // 提取匹配结果 + MatchCollection matches = regex.Matches(item.LogicalExpression); + List extractedValues = new List(); + var logicalExpression = $"({item.LogicalExpression})>={lowerLimit}&&({item.LogicalExpression})<={upperLimit}"; + foreach (Match match in matches) + { + string key = match.Groups[1].Value; + if (_runningDataCache.SecondaryCircuitLogicExpressionDic.ContainsKey(key)) + { + _runningDataCache.SecondaryCircuitLogicExpressionDic[key].Add(logicalExpression); + } + else + { + _runningDataCache.SecondaryCircuitLogicExpressionDic.Add(key, new List { logicalExpression }); + } + } + } + } + catch (Exception ex) + { + MonitoringEventBus.LogHandler(ex.Message, "异常信息"); + + } + } } } \ No newline at end of file diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/WebApiRequest.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/WebApiRequest.cs index d3269e1..3bb5c09 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/WebApiRequest.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/WebApiRequest.cs @@ -1,4 +1,5 @@ using Abp.Dependency; +using Amazon.SecurityToken.Model.Internal.MarshallTransformations; using MongoDB.Driver.Linq; using MySqlX.XDevAPI.Relational; using Newtonsoft.Json; @@ -37,6 +38,7 @@ using YunDa.ISAS.ExternalInteraction.DataTransferObject.InspectionEquipment; using YunDa.ISAS.ExternalInteraction.DataTransferObject.InspectionEquipment.RequestInput; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionSettingDto; +using YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto; using ConstantModel = Yunda.ISAS.DataMonitoringServer.DataAnalysis.Model.ConstantModel; namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis @@ -528,16 +530,23 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis .HttpHelper .HttpGetRequest (ConstantModel - .RequestInitYXRedisListUri+ "?dataSourceCategory="+ dataSourceCategory + .RequestInitYXRedisListUri+ "?dataSourceCategory="+ (int)dataSourceCategory ); var resObj1 = ToolLibrary .HttpHelper .HttpGetRequest (ConstantModel - .RequestInitYCRedisListUri + "?dataSourceCategory=" + dataSourceCategory + .RequestInitYCRedisListUri + "?dataSourceCategory=" + (int)dataSourceCategory ); - + + var resObj2 = ToolLibrary + .HttpHelper + .HttpGetRequest + (ConstantModel + .RequestInitYCRedisListUri + "?dataSourceCategory=" + (int)DataSourceCategoryEnum.None + ); + } catch (Exception ex) { @@ -1041,6 +1050,35 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis } return false; } - + + + public List GetSecondaryCircuitLogicExpressionList() + { + try + { + JObject rstDataJObject = ToolLibrary + .HttpHelper + .HttpPostRequest + (ConstantModel + .RequestSecondaryCircuitLogicExpressionList, new + { + searchCondition = new + { + isOnlyActive = true + } + } + ); + var rst = rstDataJObject?["result"]?["resultData"];//获取结果集 + + var res = rst.ToObject>(); + return res; + } + catch (Exception ex) + { + MonitoringEventBus.LogHandler(ex.Message, "获取遥测报警配置缓存"); + } + return null; + } + } } diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RedisRepository.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RedisRepository.cs index 2cfa182..c61036b 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RedisRepository.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RedisRepository.cs @@ -1,6 +1,7 @@ using Abp.Dependency; using System; using System.Collections.Generic; +using System.Threading.Tasks; using YunDa.ISAS.DataTransferObject.EquipmentLiveData; using YunDa.ISAS.Redis.Entities.AlarmCategory; using YunDa.ISAS.Redis.Entities.CameraAuthCategory; @@ -8,6 +9,7 @@ using YunDa.ISAS.Redis.Entities.DataMonitorCategory; using YunDa.ISAS.Redis.Entities.LinkageCategory; using YunDa.ISAS.Redis.Repositories; using YunDa.SOMS.DataTransferObject.GeneralInformation.ProtectionDeviceInfoDto; +using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport; namespace Yunda.ISAS.DataMonitoringServer.DataCenter { @@ -18,7 +20,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter public IRedisRepository AlarmListRedis { get; } public IRedisRepository EnvironmentTempValueRedis { get; } public IRedisRepository EquipmentDataModelDicRedis { get; } - + private readonly WPF.ViewModel.Content _settingModel; //public string TelemeteringModelInflectionInflectionListRediskey = "telemeteringModelInflectionList"; public string TelemeteringInflectionInflectionZZChannelRediskey = "telemeteringInflection_ZZ_Channel"; public string TelemeteringInflectionInflectionZZDeviceStatusChannelRediskey = "telemeteringInflection_ZZ_Device_Status_Channel"; @@ -40,7 +42,11 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter /// 遥信数据变位库 /// public IRedisRepository TelesignalisationModelInflectionListRedis { get; } + public IRedisRepository AbnormalComponentRedis { get; } + public IRedisRepository SecondaryCircuitComponentRedis { get; } + public IRedisRepository EquipmentInfoRemainingLifeAssessmentRedis { get; } + public string TelemeteringModelListRediskey = "telemeteringModelList"; /// /// 遥测数据实时库 @@ -65,7 +71,11 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter IRedisRepository telesignalisationModelInflectionListRedis, IRedisRepository telemeteringModelListRedis, IRedisRepository telesignalisationModelListRedis, - RedisRepository deviceStatusRedis + RedisRepository deviceStatusRedis, + IRedisRepository abnormalComponentRedis, + IRedisRepository secondaryCircuitComponentRedis, + IRedisRepository equipmentInfoRemainingLifeAssessmentRedis, + WPF.ViewModel.Content settingModel ) { CameraAuthTimeRepository = cameraAuthTimeRepository; @@ -80,6 +90,32 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter TelesignalisationModelInflectionListRedis = telesignalisationModelInflectionListRedis; TelemeteringModelListRedis = telemeteringModelListRedis; TelesignalisationModelListRedis = telesignalisationModelListRedis; + AbnormalComponentRedis = abnormalComponentRedis; + SecondaryCircuitComponentRedis = secondaryCircuitComponentRedis; + EquipmentInfoRemainingLifeAssessmentRedis = equipmentInfoRemainingLifeAssessmentRedis; + _settingModel = settingModel; + } + public async Task> GetTelesignalisationModels() + { + string redisKey = TelesignalisationModelListRediskey + "_" + _settingModel.GetDatacatgoryName(_settingModel.DataSourceCategoryName); + // 从 Redis 中批量获取所有数据 + var yxDatas = await TelesignalisationModelListRedis.HashSetGetAllAsync(redisKey); + + return yxDatas; + } + public async Task> GetTelemeteringModels() + { + string redisKey = TelemeteringModelListRediskey + "_" + _settingModel.GetDatacatgoryName(_settingModel.DataSourceCategoryName); ; + // 从 Redis 中批量获取所有遥测数据 + var ycDatas = await TelemeteringModelListRedis.HashSetGetAllAsync(redisKey); + return ycDatas; + } + public async Task> GetCheckTelemeteringModels() + { + string redisKey = TelemeteringModelListRediskey + "_" + _settingModel.GetDatacatgoryName("无"); ; + // 从 Redis 中批量获取所有遥测数据 + var ycDatas = await TelemeteringModelListRedis.HashSetGetAllAsync(redisKey); + return ycDatas; } } } diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RunningDataCache.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RunningDataCache.cs index 5385f76..4591a8e 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RunningDataCache.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RunningDataCache.cs @@ -17,6 +17,7 @@ using YunDa.ISAS.DataTransferObject.GeneralInformation.TransformerSubstationDto; using YunDa.ISAS.Redis.Repositories; using ConstantModel = YunDa.ISAS.DataTransferObject.EquipmentLiveData.ConstantModel; +using YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto; namespace Yunda.ISAS.DataMonitoringServer.DataCenter { public class RunningDataCache : ISingletonDependency @@ -129,6 +130,13 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter public ConcurrentBag LinkageExecuteActivities { get; set; } = new ConcurrentBag(); + /// + /// 逻辑表达式策略缓存 + /// + public Dictionary> SecondaryCircuitLogicExpressionDic { get; set; } = new (); + + + /// /// 摄像头数据缓存 /// diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceDZDataHandle.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceDZDataHandle.cs index 0d94340..d3fd48d 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceDZDataHandle.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceDZDataHandle.cs @@ -42,17 +42,28 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle } public void Init(List divices) { - foreach (var item in divices) + try { - //系统定值 - var tempSystemDZs = _webApiRequest.GetDzByDeviceAddr(item.DeviceAddr, 9); - systemDzs.Add((byte)item.DeviceAddr, tempSystemDZs); + systemDzs.Clear(); + userDzs.Clear(); + foreach (var item in divices) + { + //系统定值 + var tempSystemDZs = _webApiRequest.GetDzByDeviceAddr(item.DeviceAddr, 9); - //用户定值 - var tempUserDZs = _webApiRequest.GetDzByDeviceAddr(item.DeviceAddr, 1); - userDzs.Add((byte)item.DeviceAddr, tempUserDZs); + systemDzs.Add((byte)item.DeviceAddr, tempSystemDZs); + //用户定值 + var tempUserDZs = _webApiRequest.GetDzByDeviceAddr(item.DeviceAddr, 1); + userDzs.Add((byte)item.DeviceAddr, tempUserDZs); + + } } + catch (Exception ex) + { + MonitoringEventBus.LogHandler(ex.Message, "定值错误信息"); + } + } private object locker = new object(); private void OnMessageReceived(byte address, byte[] message, byte functionType) diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceDataCenter.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceDataCenter.cs index 56ed7f0..d74d061 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceDataCenter.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceDataCenter.cs @@ -60,18 +60,20 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle MonitoringEventBus.LogHandler("开始启动103客户端", "装置定值"); await Task.Run(async () => { - List devices = _webApiRequest.GetProtectionDeviceCommInfos("神池南"); if (devices == null) { - MonitoringEventBus.LogHandler("没有获取到装置数据","获取信息"); + MonitoringEventBus.LogHandler("没有获取到装置数据", "获取信息"); return; } - _protectionDeviceDZDataHandle.Init(devices); - MonitoringEventBus.LogHandler($"共获取{devices.Count}条装置数据", "装置定值"); - string currentDirectory = AppDomain.CurrentDomain.BaseDirectory; - string sourceDirectory = Path.Combine(currentDirectory, "DeviceComm"); - string destDirectoryBase = Path.Combine(currentDirectory, "DeviceComms", "DeviceComm"); + + + _protectionDeviceDZDataHandle.Init(devices); + MonitoringEventBus.LogHandler($"共获取{devices.Count}条装置数据", "装置定值"); + string currentDirectory = AppDomain.CurrentDomain.BaseDirectory; + string sourceDirectory = Path.Combine(currentDirectory, "DeviceComm"); + string destDirectoryBase = Path.Combine(currentDirectory, "DeviceComms", "DeviceComm"); + // 定义一个并行处理每个设备的过程 Parallel.ForEach(devices, device => diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/appsettings.development.json b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/appsettings.development.json index 9cbcf9a..87467bf 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/appsettings.development.json +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/appsettings.development.json @@ -31,7 +31,7 @@ "FunctionName": "综自(配电)" }, "SysBaseConfig": { - "WebAddrUrl": "http://192.168.81.22:38090", + "WebAddrUrl": "http://192.168.81.229:38091", "WebExternBaseUrl": "https://127.0.0.1:4431", "OpenVideoLog": false, "LinkAgingSecond": 60 //联动防抖时间,例如设置60,表示60秒内只联动一次 diff --git a/test/ConsoleTest/ConsoleTest.csproj b/test/ConsoleTest/ConsoleTest.csproj new file mode 100644 index 0000000..2150e37 --- /dev/null +++ b/test/ConsoleTest/ConsoleTest.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + diff --git a/test/ConsoleTest/Program.cs b/test/ConsoleTest/Program.cs new file mode 100644 index 0000000..6bcc66b --- /dev/null +++ b/test/ConsoleTest/Program.cs @@ -0,0 +1,10 @@ +namespace ConsoleTest +{ + internal class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello, World!"); + } + } +} diff --git a/test/RedisSubscriberConsole/Program.cs b/test/RedisSubscriberConsole/Program.cs index 81faea5..bc1da0d 100644 --- a/test/RedisSubscriberConsole/Program.cs +++ b/test/RedisSubscriberConsole/Program.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Text.Json; using System.Threading.Channels; using MessagePack; @@ -10,7 +11,13 @@ class Subscriber static void Main(string[] args) { Console.WriteLine("请输入redis的ip地址:"); + Console.WriteLine("直接回车默认使用127.0.0.1"); + string ip = Console.ReadLine(); + if (string.IsNullOrWhiteSpace(ip)) + { + ip = "127.0.0.1"; + } var connectStr = $"{ip}:36379,defaultDatabase=0,password=yunda123"; var configurationOptions = new ConfigurationOptions { @@ -37,11 +44,15 @@ class Subscriber receivedCount++; // 解析 JSON 消息 - dynamic entity = MessagePackSerializer.Deserialize(message, MessagePack.Resolvers.ContractlessStandardResolver.Options); + var entity = MessagePackSerializer.Deserialize>(message, MessagePack.Resolvers.ContractlessStandardResolver.Options); try { - Console.WriteLine("收到消息"); + Console.WriteLine("解析到的键值对:"); + foreach (var kvp in entity) + { + Console.WriteLine($"{kvp.Key}: {kvp.Value}"); + } } catch (Exception ex) {