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.LinkageExecuteActivityDto; using YunDa.ISAS.DataTransferObject.EquipmentLiveData; using YunDa.ISAS.DataTransferObject.GeneralInformation.TransformerSubstationDto; using YunDa.ISAS.Redis.Repositories; using ConstantModel = YunDa.ISAS.DataTransferObject.EquipmentLiveData.ConstantModel; namespace Yunda.ISAS.DataMonitoringServer.DataCenter { public class RunningDataCache : ISingletonDependency { private readonly RedisDataRepository _redisDataRepository; 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*60)).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 ConcurrentDictionary TelemeteringDic { get; set; } = // new ConcurrentDictionary(); //public ConcurrentDictionary TelesignalisationDic { get; set; } = // new ConcurrentDictionary(); /// /// 遥控策略数据缓存 /// public ConcurrentBag LinkageExecuteActivities { get; set; } = new ConcurrentBag(); /// /// 摄像头数据缓存 /// 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(); } }