using Abp.Dependency; using Newtonsoft.Json; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using ToolLibrary.LogHelper; using Yunda.ISAS.DataMonitoringServer.DataAnalysis.Model; using YunDa.ISAS.DataTransferObject.DataMonitoring.DMAlarmCategoryDto; using YunDa.ISAS.DataTransferObject.DataMonitoring.LinkageExecuteActivityDto; using YunDa.ISAS.DataTransferObject.DataMonitoring.TelemeteringAlarmStrategyDto; using YunDa.ISAS.DataTransferObject.GeneralInformation.EquipmentInfoDto; using YunDa.ISAS.DataTransferObject.GeneralInformation.EquipmentTypeDto; using YunDa.ISAS.DataTransferObject.GeneralInformation.TransformerSubstationDto; using YunDa.ISAS.Redis.Repositories; using ConstantModel = YunDa.SOMS.DataTransferObject.GeneralInformation.EquipmentLiveData.ConstantModel; using YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto; using YunDa.ISAS.DataTransferObject.DataMonitoring.TelemeteringConfigurationDto; using YunDa.SOMS.DataTransferObject.GeneralInformation.EquipmentLiveData; namespace Yunda.ISAS.DataMonitoringServer.DataCenter { public class RunningDataCache : ISingletonDependency { private string realtimetail = "realtime"; private string inflectiontail = "inflectiontail"; public RedisDataRepository RedisDataRepository { get; } public TransformerSubstationOutput _transformerSubstation; public bool IsRunning { get; set; } public RunningDataCache(RedisDataRepository redisDataRepository) { RedisDataRepository = redisDataRepository; Task.Factory.StartNew( () => { while (true) { //UpdateEquipmentDataModelDicRedis(); Task.Delay(TimeSpan.FromSeconds(10)).Wait(); } },TaskCreationOptions.LongRunning); } public async void UpdateEquipmentDataModelDicRedis() { try { await RedisDataRepository.EquipmentDataModelDicRedis.DeleteKeyAsync(ConstantModel.EquipmentDataModelDicRedisKey); await RedisDataRepository.EquipmentDataModelDicRedis.HashSetUpdateManyAsync(ConstantModel.EquipmentDataModelDicRedisKey, EquipmentDataDic.Keys.ToList(), EquipmentDataDic.Values.ToList()); } catch (Exception e) { Log4Helper.Error(this.GetType(), "内存数据库插入", e); } } public ConcurrentDictionary EquipmentDataDic { get; set; } = new ConcurrentDictionary(); public TelemeteringModel GetTelemeteringModel(Guid? guid =null,string name ="") { foreach (var item in EquipmentDataDic.Values) { if (!string.IsNullOrWhiteSpace(name)) { var relemeteringModel = item.Telemeterings.FirstOrDefault(t => t.Name.Contains(name)); if (relemeteringModel != null) { return relemeteringModel; } } else { var relemeteringModel = item.Telemeterings.FirstOrDefault(t => t.Id == guid); if (relemeteringModel != null) { return relemeteringModel; } } } return null; } public TelesignalisationModel GetTelesignalisationModel(Guid? guid = null, string name = "") { foreach (var item in EquipmentDataDic.Values) { if (!string.IsNullOrWhiteSpace(name)) { var telesignalisationModel = item.Telesignalisations.FirstOrDefault(t => t.Name.Contains( name)); if (telesignalisationModel != null) { return telesignalisationModel; } } else { var telesignalisationModel = item.Telesignalisations.FirstOrDefault(t => t.Id == guid); if (telesignalisationModel != null) { return telesignalisationModel; } } } return null; } /// /// 设备字典 /// public Dictionary EquipmentInfoSimDic { get; set; }= new Dictionary(); /// /// 设备类型字典 /// public Dictionary EquipmentTypeSimDic { get; set; } = new Dictionary(); /// /// 遥测报警策略缓存 /// public Dictionary> TelemeteringAlarmStrategySimDic { get; set; } = new Dictionary>(); /// /// 报警策略缓存 /// public Dictionary DMAlarmCategorySimDic { get; set; } = new Dictionary(); /// /// 遥控策略数据缓存 /// public ConcurrentBag LinkageExecuteActivities { get; set; } = new ConcurrentBag(); /// /// 逻辑表达式策略缓存 /// public Dictionary> SecondaryCircuitLogicExpressionDic { get; set; } = new Dictionary>(); /// /// CPU5V电压 /// public ConcurrentDictionary> DeviceCPU5VTelemeteringConfigurations { get; set; } = new ConcurrentDictionary>(); /// /// 装置温度 /// public ConcurrentDictionary> DeviceTempTelemeteringConfigurations { get; set; } = new ConcurrentDictionary>(); /// /// 摄像头数据缓存 /// public ConcurrentBag VideoDevs { get; set; } = new ConcurrentBag(); /// /// 遥控数据缓存 /// public ConcurrentBag TelecommandModels { get; set; } = new ConcurrentBag(); /// /// 遥测小时统计列表 /// public Dictionary TelemeteringHourStatisticsDic { get; set; } = new Dictionary(); /// /// 联动策略缓存 /// public ConcurrentBag LinkageStrategys { get; set; } = new ConcurrentBag(); } }