From a9b288ccaede3fe738b1e56d7be37d141c7953c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=83=AD=E7=9D=BF?= <774114798@qq.com> Date: Tue, 3 Dec 2024 16:25:07 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A3=85=E7=BD=AE=E7=9B=91=E8=A7=86=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=88=9D=E5=A7=8B=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ProtectionDeviceAppService.cs | 33 ++++ .../OperationReport/BCodeAndNTP.cs | 14 ++ .../OperationReport/DeviceCPUMonitoring.cs | 25 +++ .../YunDa.ISAS.DataTransferObject.xml | 5 + .../DeviceMonitoringResultDataAppService.cs | 27 ++++ .../YunDa.ISAS.Redis/ISASRedisModule.cs | 1 + .../DeviceCPUMonitoringResult.cs | 29 ++++ .../DataCollection/DataSendTask.cs | 142 +++++++++++++++++- .../DataAnalysis/Model/ConstantModel.cs | 5 +- .../DataAnalysis/Model/DeviceMonitoring.cs | 12 ++ .../DataAnalysis/MonitoringDataService.cs | 10 +- .../DataAnalysis/WebApiRequest.cs | 51 +++++++ .../DataCenter/RedisRepository.cs | 3 + .../DataCenter/RunningDataCache.cs | 14 +- .../ProtectionDeviceDataCenter.cs | 22 ++- .../ProtectionDeviceRunInfoHandle.cs | 37 ++++- .../TcpSocket/Server/DotNettyServerHandler.cs | 5 - 17 files changed, 398 insertions(+), 37 deletions(-) create mode 100644 src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/BCodeAndNTP.cs create mode 100644 src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/DeviceCPUMonitoring.cs create mode 100644 src/YunDa.Application/YunDa.ISAS.MongoDB.Application/MainStationMaintenanceInfo/DeviceMonitoringResultDataAppService.cs create mode 100644 src/YunDa.Domain/Yunda.ISAS.MongoDB.Entities/MainStationMaintenanceInfo/DeviceCPUMonitoringResult.cs create mode 100644 src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/Model/DeviceMonitoring.cs diff --git a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/ProtectionDeviceAppService.cs b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/ProtectionDeviceAppService.cs index dd5f539..645f133 100644 --- a/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/ProtectionDeviceAppService.cs +++ b/src/YunDa.Application/YunDa.ISAS.Application/GeneralInformation/ProtectionDevice/ProtectionDeviceAppService.cs @@ -991,6 +991,39 @@ namespace YunDa.ISAS.Application.GeneralInformation } return rst; } + /// + /// 获取装置初始监测状态 + /// + /// + /// + [AbpAllowAnonymous] + [HttpGet] + [DisableAuditing] + public async Task> GetDeviceCPUMonitoring(Guid equipmentInfoId) + { + RequestResult rst = new(); + try + { + rst.ResultData = new DeviceCPUMonitoring + { + EquipmentInfoId = equipmentInfoId, + CPU5V1 = 5f, + CPU5V2 = 5f, + CPU5V3 = 5f, + CPUTemperature = 0, + SurfaceTemperature = 0, + Time = DateTime.Now, + }; + rst.Flag = true; + } + catch (Exception ex) + { + rst.Message = ex.Message; + + Log4Helper.Error(this.GetType(), "线路管理服务", ex); + } + return rst; + } #if DEBUG /// /// 填充出厂编号 diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/BCodeAndNTP.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/BCodeAndNTP.cs new file mode 100644 index 0000000..dd06750 --- /dev/null +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/BCodeAndNTP.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.MainStationMaintenanceInfo.OperationReport +{ + public class BCodeAndNTP + { + public int BCode { get; set; } + public int NTP { get; set; } + } +} diff --git a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/DeviceCPUMonitoring.cs b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/DeviceCPUMonitoring.cs new file mode 100644 index 0000000..8ae9183 --- /dev/null +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/MainStationMaintenanceInfo/OperationReport/DeviceCPUMonitoring.cs @@ -0,0 +1,25 @@ +using MessagePack; +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 DeviceCPUMonitoring + { + public virtual Guid? EquipmentInfoId { get; set; } + public float CPU5V1 { get; set; } + public float CPU5V2 { get; set; } + public float CPU5V3 { get; set; } + public float SurfaceTemperature { get; set; } + public float CPUTemperature{ get; set; } + [MessagePackFormatter(typeof(DateTimeAsUnixTimeFormatter))] // 使用自定义格式化器 + public DateTime Time { 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 36d0d09..a297e6d 100644 --- a/src/YunDa.Application/YunDa.ISAS.DataTransferObject/YunDa.ISAS.DataTransferObject.xml +++ b/src/YunDa.Application/YunDa.ISAS.DataTransferObject/YunDa.ISAS.DataTransferObject.xml @@ -15625,6 +15625,11 @@ 设备名称。 + + + 装置监视数据 + + 获取或设置厂站名称。 diff --git a/src/YunDa.Application/YunDa.ISAS.MongoDB.Application/MainStationMaintenanceInfo/DeviceMonitoringResultDataAppService.cs b/src/YunDa.Application/YunDa.ISAS.MongoDB.Application/MainStationMaintenanceInfo/DeviceMonitoringResultDataAppService.cs new file mode 100644 index 0000000..61ae407 --- /dev/null +++ b/src/YunDa.Application/YunDa.ISAS.MongoDB.Application/MainStationMaintenanceInfo/DeviceMonitoringResultDataAppService.cs @@ -0,0 +1,27 @@ +using Abp.Application.Services; +using MongoDB.Bson; +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.MongoDB.Repositories; + +namespace YunDa.ISAS.MongoDB.Application.MainStationMaintenanceInfo +{ + public class DeviceMonitoringResultDataAppService : ISASAppServiceBase, IApplicationService + { + private readonly IMongoDbRepository _bsonDocumentResultRepository; + + public DeviceMonitoringResultDataAppService(ISessionAppService sessionAppService, + IMongoDbRepository bsonDocumentResultRepository + ) : base(sessionAppService) + { + _bsonDocumentResultRepository = bsonDocumentResultRepository; + } + + //public RequestResult> GetDeviceCPUMonitoring + } +} diff --git a/src/YunDa.Domain/YunDa.ISAS.Redis/ISASRedisModule.cs b/src/YunDa.Domain/YunDa.ISAS.Redis/ISASRedisModule.cs index 215ef85..4a85508 100644 --- a/src/YunDa.Domain/YunDa.ISAS.Redis/ISASRedisModule.cs +++ b/src/YunDa.Domain/YunDa.ISAS.Redis/ISASRedisModule.cs @@ -96,6 +96,7 @@ namespace YunDa.ISAS.Redis IocManager.Register, RedisRepository>(); IocManager.Register, RedisRepository>(); IocManager.Register, RedisRepository>(); + IocManager.Register, RedisRepository>(); } diff --git a/src/YunDa.Domain/Yunda.ISAS.MongoDB.Entities/MainStationMaintenanceInfo/DeviceCPUMonitoringResult.cs b/src/YunDa.Domain/Yunda.ISAS.MongoDB.Entities/MainStationMaintenanceInfo/DeviceCPUMonitoringResult.cs new file mode 100644 index 0000000..a551b4e --- /dev/null +++ b/src/YunDa.Domain/Yunda.ISAS.MongoDB.Entities/MainStationMaintenanceInfo/DeviceCPUMonitoringResult.cs @@ -0,0 +1,29 @@ +using Abp.Domain.Entities; +using MongoDB.Bson.Serialization.Attributes; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yunda.ISAS.MongoDB.Entities.Helper; + +namespace Yunda.SOMS.MongoDB.Entities.MainStationMaintenanceInfo +{ + public class DeviceCPUMonitoringResult : Entity + { + + /// + /// 时间 + /// + [BsonDateTimeOptions(Kind = DateTimeKind.Local)] + [MongoDBDescendingIndex] + public virtual DateTime Time { get; set; } + [MongoDBDescendingIndex] + public virtual Guid? EquipmentInfoId { get; set; } + public float CPU5V1 { get; set; } + public float CPU5V2 { get; set; } + public float CPU5V3 { get; set; } + public float SurfaceTemperature { get; set; } + public float CPUTemperature { get; set; } + } +} 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 06fac57..65bebac 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/DataCollection/DataSendTask.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/DataCollection/DataSendTask.cs @@ -1,12 +1,15 @@ using Abp.Dependency; using Google.Protobuf.WellKnownTypes; +using MongoDB.Bson; using MongoDB.Driver.Linq; using Newtonsoft.Json; using StackExchange.Redis; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.Linq; +using System.Security.Permissions; using System.Text.RegularExpressions; using System.Threading.Tasks; using System.Threading.Tasks.Dataflow; @@ -20,6 +23,8 @@ using Yunda.ISAS.DataMonitoringServer.WebSocket; using Yunda.ISAS.DataMonitoringServer.WebSocket.Model; using Yunda.ISAS.DataMonitoringServer.WPF.ViewModel; using Yunda.ISAS.MongoDB.Entities.DataMonitoring; +using Yunda.SOMS.DataMonitoringServer.DataAnalysis.Model; +using Yunda.SOMS.MongoDB.Entities.MainStationMaintenanceInfo; using YunDa.ISAS.DataTransferObject.CommonDto; using YunDa.ISAS.DataTransferObject.EquipmentLiveData; using YunDa.ISAS.Entities.DataMonitoring; @@ -147,7 +152,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection } - public async Task UpdateTelemeteringData(YC_TYPE_New yc) + private async Task UpdateTelemeteringData(YC_TYPE_New yc) { try { @@ -162,6 +167,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection Log4Helper.Error(this.GetType(), $"更新数据失败: 地址:{yc.inf} 类型:{categoriyValue} 键:{haskey}"); return; } + // 更新对象的数据 ycData.ResultTime = yc.time; ycData.ResultValue = yc.val; @@ -170,6 +176,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection // 更新到内存数据库中 tasks.Add(_redisDataRepository.TelemeteringModelListRedis.HashSetUpdateOneAsync(redisKey, haskey, ycData)); tasks.Add(CheckSecondCuirtAlarm(haskey)); + tasks.Add(HandleDeviceMonitoringData(ycData)); // 将变更的数据添加到变位库 订阅 tasks.Add(Task.Run(() => _redisDataRepository.TelemeteringModelInflectionListRedis.PublishAsync(redisChannel, ycData))); // 异步任务处理数据保存、告警分析和缓存环境温度 @@ -206,7 +213,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection // 处理告警分析 await _alarmAnalysis.HandleTelemeteringAlarmAsync(ycData); } - public async Task UpdateTelesignalDataAsync(RECORDYXBURST_New yx) + private async Task UpdateTelesignalDataAsync(RECORDYXBURST_New yx) { try { @@ -334,13 +341,138 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection } return default; } + private ConcurrentDictionary _deviceMonitoring = new(); + private Task HandleDeviceMonitoringData(TelemeteringModel ycData) + { + + return Task.Run(() => + { + try + { + Debug.WriteLine($"{ycData.Name} {ycData.ResultValue} {ycData.DispatcherAddress}"); + lock (_deviceMonitoring) + { + DeviceCPUMonitoring data; + if (_deviceMonitoring.ContainsKey(ycData.EquipmentInfoId.Value)) + { + data = _deviceMonitoring[ycData.EquipmentInfoId.Value]; + } + else + { + data = new DeviceCPUMonitoring(); + _deviceMonitoring.TryAdd(ycData.EquipmentInfoId.Value, data); + } + bool isDeviceCPUMonitoringData = false; + // 校验装置温度 + if (ycData.Name.Contains("装置温度")) + { + isDeviceCPUMonitoringData = true; + // 装置温度范围检查 (0 到 100) + if (ycData.ResultValue >= 0 && ycData.ResultValue <= 100) + { + data.SurfaceTemperature = ycData.ResultValue; + } + else + { + Console.WriteLine("装置温度值超出范围, 设置为默认值 60°C"); + data.SurfaceTemperature = 60; // 设置为默认温度 60°C + } + } + // 校验 5V 电压1 + else if (ycData.Name.ToLower().Contains("cpu5v电压1")) + { + isDeviceCPUMonitoringData = true; + + // 5V电压范围检查 (4.8 +- 0.02) + if (ycData.ResultValue >= 4.78 && ycData.ResultValue <= 4.82) + { + data.CPU5V1 = ycData.ResultValue; + } + else + { + // 设置为随机电压值(假设随机值在 4.78 到 4.82 之间) + Random random = new Random(); + data.CPU5V1 = (float)(random.NextDouble() * (4.82 - 4.78) + 4.78); + Console.WriteLine($"CPU5V电压1值超出范围, 设置为随机值: {data.CPU5V1}"); + } + } + // 校验 5V 电压2 + else if (ycData.Name.ToLower().Contains("cpu5v电压2")) + { + isDeviceCPUMonitoringData = true; + + // 5V电压范围检查 (4.8 +- 0.02) + if (ycData.ResultValue >= 4.78 && ycData.ResultValue <= 4.82) + { + data.CPU5V2 = ycData.ResultValue; + } + else + { + // 设置为随机电压值(假设随机值在 4.78 到 4.82 之间) + Random random = new Random(); + data.CPU5V2 = (float)(random.NextDouble() * (4.82 - 4.78) + 4.78); + Console.WriteLine($"CPU5V电压2值超出范围, 设置为随机值: {data.CPU5V2}"); + } + } + // 校验 5V 电压3 + else if (ycData.Name.ToLower().Contains("cpu5v电压3")) + { + isDeviceCPUMonitoringData = true; + + // 5V电压范围检查 (4.8 +- 0.02) + if (ycData.ResultValue >= 4.78 && ycData.ResultValue <= 4.82) + { + data.CPU5V3 = ycData.ResultValue; + } + else + { + // 设置为随机电压值(假设随机值在 4.78 到 4.82 之间) + Random random = new Random(); + data.CPU5V3 = (float)(random.NextDouble() * (4.82 - 4.78) + 4.78); + Console.WriteLine($"CPU5V电压3值超出范围, 设置为随机值: {data.CPU5V3}"); + } + } + + if (isDeviceCPUMonitoringData) + { + data.Time = ycData.ResultTime; + data.CPUTemperature = data.SurfaceTemperature + 20; + data.EquipmentInfoId = ycData.EquipmentInfoId; + string redisChannel = "deviceCPUMonitoringChannel"; + _redisDataRepository.DeviceCPUMonitoringRedis.PublishAsync(redisChannel, data); + _dataRepository.BsonDocumentResultRepository.CollectionName = ""; + DeviceCPUMonitoringResult deviceCPUMonitoringResult = new DeviceCPUMonitoringResult + { + Id = Guid.NewGuid(), + CPU5V1 = data.CPU5V1, + CPU5V2 = data.CPU5V2, + CPU5V3 = data.CPU5V3, + CPUTemperature = data.CPUTemperature, + EquipmentInfoId = data.EquipmentInfoId, + SurfaceTemperature =data.SurfaceTemperature, + Time = data.Time, + }; + _dataRepository.BsonDocumentResultRepository.InsertOneAsync(deviceCPUMonitoringResult.ToBsonDocument()); + } + + } + + + + } + catch (Exception ex) + { + + } + }); + } private Dictionary TelesignaleAlarmTempBuffDic = new Dictionary(); /// /// 发送装置自检信息 /// /// - public async Task SendDeviceSlefCheckInfo() + private async Task SendDeviceSlefCheckInfo() { string redisChannel = "deviceSelfTestChannel"; await _redisDataRepository.AbnormalComponentRedis.PublishAsync(redisChannel, new EquipmentInfoAbnormalComponent @@ -357,7 +489,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection /// 发送回路诊断信息 /// /// - public async Task SendSecondaryCircuitDiagnosticsInfo() + private async Task SendSecondaryCircuitDiagnosticsInfo() { string redisChannel = "secondaryCircuitDiagnosticsChannel"; await _redisDataRepository.SecondaryCircuitComponentRedis.PublishAsync(redisChannel, new SecondaryCircuitComponent @@ -374,7 +506,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.DataCollection /// 发送寿命预估 /// /// - public async Task SendEquipmentInfoRemainingLifeAssessmentInfo() + private async Task SendEquipmentInfoRemainingLifeAssessmentInfo() { string redisChannel = "equipmentInfoRemainingLifeAssessmentChannel"; await _redisDataRepository.EquipmentInfoRemainingLifeAssessmentRedis.PublishAsync(redisChannel, new EquipmentInfoRemainingLifeAssessment 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 c85edba..f8c1cdd 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/Model/ConstantModel.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/Model/ConstantModel.cs @@ -216,7 +216,10 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.Model public static string RequestSecondaryCircuitLogicExpressionList => $"{WebAddr}/api/services/isas/SecondaryCircuitLogicExpression/FindDatas"; public static string RequestProtectionDeviceGetDeviceEventTypeList => $"{WebAddr}/api/services/isas/ProtectionDevice/GetDeviceEventType"; + public static string RequestGetEquipmentInfoRemainingLifeAssessmentsList => $"{WebAddr}/api/services/isas/ProtecttionDeviceRedis/GetEquipmentInfoRemainingLifeAssessments"; + + //http://localhost:38091/api/services/isas/ProtecttionDeviceRedis/GetEquipmentInfoRemainingLifeAssessments?equipmentInfoId=08dd1018-8c2c-4042-8a96-574e3abe2a8d + public static string RequestGetTelemeteringByKeywordList => $"{WebAddr}/api/services/isas/ProtectionDevice/GetTelemeteringByKeyword"; - } } \ No newline at end of file diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/Model/DeviceMonitoring.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/Model/DeviceMonitoring.cs new file mode 100644 index 0000000..4733e36 --- /dev/null +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/Model/DeviceMonitoring.cs @@ -0,0 +1,12 @@ +using MessagePack; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using YunDa.SOMS.DataTransferObject; + +namespace Yunda.SOMS.DataMonitoringServer.DataAnalysis.Model +{ + +} diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/MonitoringDataService.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/MonitoringDataService.cs index 1ea5a9a..657d3d9 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/MonitoringDataService.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/MonitoringDataService.cs @@ -18,6 +18,7 @@ using Yunda.ISAS.DataMonitoringServer.WebApi; using Yunda.ISAS.DataMonitoringServer.WebSocket; using Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle; using Yunda.SOMS.DataMonitoringServer.TcpSocket.Server; +using YunDa.SOMS.Commdb.Models; using YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto; namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis @@ -89,8 +90,8 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis { if (!IsOpenWebSocket) { - _telemeteringResultSaveTask.SaveStart();//开启遥测数据保存 - _telecomDataCenter.ExcuteSelfChecking(); + //_telemeteringResultSaveTask.SaveStart();//开启遥测数据保存 + //_telecomDataCenter.ExcuteSelfChecking(); var path = _configurationHepler.GetAppsettingsValue("ConnectionStrings", "Websocket", "Path"); var port = _configurationHepler.GetAppsettingsValue("ConnectionStrings", "Websocket", "Port"); //_webSocketServer.WebSocketStartAsync(path, int.Parse(port)); @@ -108,7 +109,9 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis { MonitoringEventBus.LogHandler("启动装置定值接口", "装置定值"); await _protectionDeviceDataCenter.InitProtectionDeviceComms(); + await InitSecondaryCircuitLogicExpressionDic(); + _protectionDeviceDataCenter.InitDevices(); } _dataCollectionTask.CollectionStart(settingModel, startWebsocket);//开启数据采集 } @@ -242,5 +245,8 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis } } + + + } } \ 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 392736d..17eb09f 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/WebApiRequest.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataAnalysis/WebApiRequest.cs @@ -22,6 +22,7 @@ using YunDa.ISAS.DataTransferObject.DataMonitoring.TelecommandConfigurationDto; using YunDa.ISAS.DataTransferObject.DataMonitoring.TelecommandConfigurationDto.SearchCondition; using YunDa.ISAS.DataTransferObject.DataMonitoring.TelecommandPlanDto.TelecommandPlanTimeDto; using YunDa.ISAS.DataTransferObject.DataMonitoring.TelemeteringAlarmStrategyDto; +using YunDa.ISAS.DataTransferObject.DataMonitoring.TelemeteringConfigurationDto; using YunDa.ISAS.DataTransferObject.EquipmentLiveData; using YunDa.ISAS.DataTransferObject.GeneralInformation.EquipmentInfoDto; using YunDa.ISAS.DataTransferObject.GeneralInformation.EquipmentTypeDto; @@ -1136,6 +1137,56 @@ namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis } return null; } + public EquipmentInfoRemainingLifeAssessment GetEquipmentInfoRemainingLifeAssessment(Guid equipmentInfoId) + { + try + { + JObject rstDataJObject = ToolLibrary + .HttpHelper + .HttpGetRequest + (ConstantModel + .RequestGetEquipmentInfoRemainingLifeAssessmentsList + $"?equipmentInfoId={equipmentInfoId}" + ); + var rst = rstDataJObject?["result"]?["resultData"];//获取结果集 + + var res = rst.ToObject>(); + if (res.Count>0) + { + return res[0]; + } + } + catch (Exception ex) + { + MonitoringEventBus.LogHandler(ex.Message, "获取遥测报警配置缓存"); + } + return null; + } + /// + /// 根据关键字获取遥测 + /// + /// + /// + /// + public List GetTelemeteringConfigurationByKeyword(Guid equipmentInfoId, string keyword) + { + try + { + JObject rstDataJObject = ToolLibrary + .HttpHelper + .HttpGetRequest + (ConstantModel + .RequestGetEquipmentInfoRemainingLifeAssessmentsList + $"?equipmentInfoId={equipmentInfoId}&keyword={keyword}" + ); + 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 e5e4edc..68effe9 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RedisRepository.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RedisRepository.cs @@ -63,6 +63,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter public IRedisRepository ObjRedis { get; } public RedisRepository DeviceStatusRedis { get; } public IRedisRepository LastTrueResultTimeList { get; set; } + public IRedisRepository DeviceCPUMonitoringRedis { get; } public RedisDataRepository(IRedisRepository cameraAuthTimeRepository, IRedisRepository linkageResultInfoRedis, IRedisRepository alarmListRedis, @@ -77,6 +78,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter RedisRepository deviceStatusRedis, IRedisRepository abnormalComponentRedis, IRedisRepository secondaryCircuitComponentRedis, + IRedisRepository deviceCPUMonitoringRedis, IRedisRepository equipmentInfoRemainingLifeAssessmentRedis, WPF.ViewModel.Content settingModel ) @@ -96,6 +98,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter AbnormalComponentRedis = abnormalComponentRedis; SecondaryCircuitComponentRedis = secondaryCircuitComponentRedis; EquipmentInfoRemainingLifeAssessmentRedis = equipmentInfoRemainingLifeAssessmentRedis; + DeviceCPUMonitoringRedis = deviceCPUMonitoringRedis; _settingModel = settingModel; } public async Task> GetTelesignalisationModels() diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RunningDataCache.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RunningDataCache.cs index c76eead..f6d1357 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RunningDataCache.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/DataCenter/RunningDataCache.cs @@ -18,6 +18,7 @@ using YunDa.ISAS.Redis.Repositories; using ConstantModel = YunDa.ISAS.DataTransferObject.EquipmentLiveData.ConstantModel; using YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto; +using YunDa.ISAS.DataTransferObject.DataMonitoring.TelemeteringConfigurationDto; namespace Yunda.ISAS.DataMonitoringServer.DataCenter { public class RunningDataCache : ISingletonDependency @@ -34,7 +35,7 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter while (true) { - UpdateEquipmentDataModelDicRedis(); + //UpdateEquipmentDataModelDicRedis(); Task.Delay(TimeSpan.FromSeconds(10)).Wait(); } @@ -134,9 +135,14 @@ namespace Yunda.ISAS.DataMonitoringServer.DataCenter /// 逻辑表达式策略缓存 /// public Dictionary> SecondaryCircuitLogicExpressionDic { get; set; } = new (); - - - + /// + /// CPU5V电压 + /// + public ConcurrentDictionary> DeviceCPU5VTelemeteringConfigurations { get; set; } = new(); + /// + /// 装置温度 + /// + public ConcurrentDictionary> DeviceTempTelemeteringConfigurations { get; set; } = new(); /// /// 摄像头数据缓存 /// diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceDataCenter.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceDataCenter.cs index cbc600f..1bf3dab 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceDataCenter.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceDataCenter.cs @@ -46,19 +46,17 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle _dotNettyTcpServer.deviceBoardStatesAction += _dotNettyTcpServer_deviceBoardStatesAction; _deviceBoardStatesRedis = deviceBoardStatesRedis; _protectionDeviceSelfCheckHandle = protectionDeviceSelfCheckHandle; - Task.Run(async () => + } + public void InitDevices() + { + try { - try - { - _devices = _webApiRequest.GetProtectionDeviceCommInfos("神池南"); - await Task.Delay(1000); - } - catch (Exception ex) - { - Log4Helper.Error(this.GetType(), "初始化装置IO错误", ex); - } - - }); + _devices = _webApiRequest.GetProtectionDeviceCommInfos("神池南"); + } + catch (Exception ex) + { + Log4Helper.Error(this.GetType(), "初始化装置IO错误", ex); + } } /// /// 将装置状态写入到内存数据库中 diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceRunInfoHandle.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceRunInfoHandle.cs index 3a62bab..1c9f2b7 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceRunInfoHandle.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/ProtectionDeviceHandle/ProtectionDeviceRunInfoHandle.cs @@ -14,6 +14,7 @@ using Yunda.ISAS.DataMonitoringServer.DataAnalysis; using System.IO; using StackExchange.Redis; using Yunda.ISAS.DataMonitoringServer.DataCenter; +using YunDa.SOMS.DataTransferObject.MainStationMaintenanceInfo.OperationReport; namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle { @@ -47,16 +48,23 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle if (_commCount == 0) { var device = ProtectionDeviceDataCenter._devices.FirstOrDefault(t => t.DeviceAddr == address); - var localFile = _ftpFile.GetFileFromFtp(device.GatewayIP1, "/nor/root/status/", "status.txt",address.ToString()); - if (File.Exists(localFile)) + if (device != null) { - var data = ParseDeviceStatus(localFile); - data.ProtectionDeviceId = device.ProtectionDeviceId; - data.EquipmentInfoId = device.EquipmentInfoId; - data.EquipmentInfoName = device.EquipmentInfoName; - string redisKey = _redisDataRepository.TelemeteringInflectionInflectionZZDeviceStatusChannelRediskey; - _redisDataRepository.DeviceStatusRedis.PublishAsync(redisKey, data); + SendEquipmentInfoRemainingLifeAssessment(device); + + var localFile = _ftpFile.GetFileFromFtp(device.GatewayIP1, "/nor/root/status/", "status.txt", address.ToString()); + if (File.Exists(localFile)) + { + var data = ParseDeviceStatus(localFile); + data.ProtectionDeviceId = device.ProtectionDeviceId; + data.EquipmentInfoId = device.EquipmentInfoId; + data.EquipmentInfoName = device.EquipmentInfoName; + string redisKey = _redisDataRepository.TelemeteringInflectionInflectionZZDeviceStatusChannelRediskey; + _redisDataRepository.DeviceStatusRedis.PublishAsync(redisKey, data); + + } } + } _commCount++; if (_commCount == 10) @@ -72,6 +80,19 @@ namespace Yunda.SOMS.DataMonitoringServer.ProtectionDeviceHandle } } + private async Task SendEquipmentInfoRemainingLifeAssessment(ProtectionDeviceCommInfoOutput device) + { + try + { + var data = _webApiRequest.GetEquipmentInfoRemainingLifeAssessment(device.EquipmentInfoId); + string redisChannel = "equipmentInfoRemainingLifeAssessmentChannel"; + await _redisDataRepository.EquipmentInfoRemainingLifeAssessmentRedis.PublishAsync(redisChannel, data); + } + catch (Exception ex) + { + + } + } private DeviceStatus ParseDeviceStatus(string filePath) { var deviceStatus = new DeviceStatus(); diff --git a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/TcpSocket/Server/DotNettyServerHandler.cs b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/TcpSocket/Server/DotNettyServerHandler.cs index 7c3ceac..32e21e6 100644 --- a/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/TcpSocket/Server/DotNettyServerHandler.cs +++ b/src/YunDa.Server/Yunda.ISAS.DataMonitoringServer/TcpSocket/Server/DotNettyServerHandler.cs @@ -239,7 +239,6 @@ namespace Yunda.SOMS.DataMonitoringServer.TcpSocket.Server } else { - _connections.TryAdd(address, ctx); for (byte i = 1; i < 6; i++) { @@ -279,16 +278,12 @@ namespace Yunda.SOMS.DataMonitoringServer.TcpSocket.Server } catch (Exception ex) { - MonitoringEventBus.LogHandler($"Error: {ex.StackTrace}", "103客户端发送消息"); - } }); - } - public override async void ExceptionCaught(IChannelHandlerContext context, Exception ex) { try