171 lines
7.2 KiB
C#
Raw Normal View History

2024-07-15 10:31:26 +08:00
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;
2024-09-20 09:59:25 +08:00
using YunDa.ISAS.DataTransferObject.DataMonitoring.DMAlarmCategoryDto;
2024-07-15 10:31:26 +08:00
using YunDa.ISAS.DataTransferObject.DataMonitoring.LinkageExecuteActivityDto;
2024-09-20 09:59:25 +08:00
using YunDa.ISAS.DataTransferObject.DataMonitoring.TelemeteringAlarmStrategyDto;
2024-07-15 10:31:26 +08:00
using YunDa.ISAS.DataTransferObject.EquipmentLiveData;
2024-09-20 09:59:25 +08:00
using YunDa.ISAS.DataTransferObject.GeneralInformation.EquipmentInfoDto;
using YunDa.ISAS.DataTransferObject.GeneralInformation.EquipmentTypeDto;
2024-07-15 10:31:26 +08:00
using YunDa.ISAS.DataTransferObject.GeneralInformation.TransformerSubstationDto;
using YunDa.ISAS.Redis.Repositories;
using ConstantModel = YunDa.ISAS.DataTransferObject.EquipmentLiveData.ConstantModel;
2024-11-29 09:03:54 +08:00
using YunDa.SOMS.DataTransferObject.GeneralInformation.SecondaryCircuitDto;
2024-12-03 16:25:07 +08:00
using YunDa.ISAS.DataTransferObject.DataMonitoring.TelemeteringConfigurationDto;
2024-07-15 10:31:26 +08:00
namespace Yunda.ISAS.DataMonitoringServer.DataCenter
{
public class RunningDataCache : ISingletonDependency
{
2024-09-20 09:59:25 +08:00
private string realtimetail = "realtime";
private string inflectiontail = "inflectiontail";
public RedisDataRepository RedisDataRepository { get; }
2024-07-15 10:31:26 +08:00
public TransformerSubstationOutput _transformerSubstation;
public bool IsRunning { get; set; }
public RunningDataCache(RedisDataRepository redisDataRepository)
{
2024-09-20 09:59:25 +08:00
RedisDataRepository = redisDataRepository;
2024-07-15 10:31:26 +08:00
Task.Factory.StartNew( () => {
while (true)
{
2024-12-03 16:25:07 +08:00
//UpdateEquipmentDataModelDicRedis();
2024-09-20 09:59:25 +08:00
Task.Delay(TimeSpan.FromSeconds(10)).Wait();
2024-07-15 10:31:26 +08:00
}
},TaskCreationOptions.LongRunning);
}
public async void UpdateEquipmentDataModelDicRedis()
{
try
{
2024-09-20 09:59:25 +08:00
await RedisDataRepository.EquipmentDataModelDicRedis.DeleteKeyAsync(ConstantModel.EquipmentDataModelDicRedisKey);
await RedisDataRepository.EquipmentDataModelDicRedis.HashSetUpdateManyAsync(ConstantModel.EquipmentDataModelDicRedisKey, EquipmentDataDic.Keys.ToList(), EquipmentDataDic.Values.ToList());
2024-07-15 10:31:26 +08:00
}
catch (Exception e)
{
Log4Helper.Error(this.GetType(), "内存数据库插入", e);
}
}
public ConcurrentDictionary<Guid, EquipmentDataModel> EquipmentDataDic { get; set; }
= new ConcurrentDictionary<Guid, EquipmentDataModel>();
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;
}
2024-09-20 09:59:25 +08:00
/// <summary>
/// 设备字典
/// </summary>
public Dictionary<Guid,EquipmentInfoSimProperty> EquipmentInfoSimDic { get; set; }= new Dictionary<Guid,EquipmentInfoSimProperty>();
/// <summary>
/// 设备类型字典
/// </summary>
public Dictionary<Guid, EquipmentTypeSimpleProperty> EquipmentTypeSimDic { get; set; } = new Dictionary<Guid, EquipmentTypeSimpleProperty>();
/// <summary>
/// 遥测报警策略缓存
/// </summary>
public Dictionary<Guid, List<TelemeteringAlarmStrategySimple>> TelemeteringAlarmStrategySimDic { get; set; } = new Dictionary<Guid, List<TelemeteringAlarmStrategySimple>>();
/// <summary>
/// 报警策略缓存
/// </summary>
public Dictionary<Guid, DMAlarmCategorySimple> DMAlarmCategorySimDic { get; set; } = new Dictionary<Guid, DMAlarmCategorySimple>();
2024-07-15 10:31:26 +08:00
/// <summary>
/// 遥控策略数据缓存
/// </summary>
public ConcurrentBag<LinkageExecuteActivityOutput> LinkageExecuteActivities { get; set; }
= new ConcurrentBag<LinkageExecuteActivityOutput>();
2024-11-29 09:03:54 +08:00
/// <summary>
/// 逻辑表达式策略缓存
/// </summary>
2024-12-25 15:06:46 +08:00
public Dictionary<string, List<LogicExpressionTelesignalisation>> SecondaryCircuitLogicExpressionDic { get; set; } = new Dictionary<string, List<LogicExpressionTelesignalisation>>();
2024-12-03 16:25:07 +08:00
/// <summary>
/// CPU5V电压
/// </summary>
2024-12-25 15:06:46 +08:00
public ConcurrentDictionary<Guid,List<TelemeteringConfigurationProperty>> DeviceCPU5VTelemeteringConfigurations { get; set; } = new ConcurrentDictionary<Guid, List<TelemeteringConfigurationProperty>>();
2024-12-03 16:25:07 +08:00
/// <summary>
/// 装置温度
/// </summary>
2024-12-25 15:06:46 +08:00
public ConcurrentDictionary<Guid, List<TelemeteringConfigurationProperty>> DeviceTempTelemeteringConfigurations { get; set; } = new ConcurrentDictionary<Guid, List<TelemeteringConfigurationProperty>>();
2024-07-15 10:31:26 +08:00
/// <summary>
/// 摄像头数据缓存
/// </summary>
public ConcurrentBag<VideoDev> VideoDevs { get; set; }
= new ConcurrentBag<VideoDev>();
/// <summary>
/// 遥控数据缓存
/// </summary>
public ConcurrentBag<TelecommandModel> TelecommandModels { get; set; }
= new ConcurrentBag<TelecommandModel>();
/// <summary>
/// 遥测小时统计列表
/// </summary>
public Dictionary<Guid, TelemeteringHourStatisticsModel> TelemeteringHourStatisticsDic { get; set; }
= new Dictionary<Guid, TelemeteringHourStatisticsModel>();
/// <summary>
/// 联动策略缓存
/// </summary>
public ConcurrentBag<LinkageStrategyModel> LinkageStrategys { get; set; }
= new ConcurrentBag<LinkageStrategyModel>();
}
}