diff --git a/src/ThingsGateway.Server/Test/TestDynamicModel.cs b/src/ThingsGateway.Server/Test/TestDynamicModel.cs index 3bc5111e2..ef168d99c 100644 --- a/src/ThingsGateway.Server/Test/TestDynamicModel.cs +++ b/src/ThingsGateway.Server/Test/TestDynamicModel.cs @@ -1,56 +1,56 @@ -////------------------------------------------------------------------------------ -////此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 -//// 此代码版权(除特别声明外的代码)归作者本人Diego所有 -//// 源代码使用协议遵循本仓库的开源协议及附加协议 -//// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway -//// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway -//// 使用文档:https://thingsgateway.cn/ -//// QQ群:605534569 -//// ------------------------------------------------------------------------------ +//////------------------------------------------------------------------------------ +//////此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 +////// 此代码版权(除特别声明外的代码)归作者本人Diego所有 +////// 源代码使用协议遵循本仓库的开源协议及附加协议 +////// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway +////// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway +////// 使用文档:https://thingsgateway.cn/ +////// QQ群:605534569 +////// ------------------------------------------------------------------------------ -using System.Dynamic; +//using System.Dynamic; -using ThingsGateway.Foundation; -using ThingsGateway.Gateway.Application; -public class TestDynamicModel : IDynamicModel -{ - public IEnumerable GetList(IEnumerable datas) - { - if (datas == null) return null; - List deviceObjs = new List(); - //按设备名称分组 - var groups = datas.Where(a => !string.IsNullOrEmpty(((AlarmVariable)a).DeviceName)).GroupBy(a => ((AlarmVariable)a).DeviceName, a => ((AlarmVariable)a)); - foreach (var group in groups) - { - //按采集时间分组 - var data = group.GroupBy(a => a.AlarmTime.DateTimeToUnixTimestamp()); - var deviceObj = new ExpandoObject(); - List expandos = new List(); - foreach (var item in data) - { - var expando = new ExpandoObject(); - expando.TryAdd("ts", item.Key); - var variableObj = new ExpandoObject(); - foreach (var tag in item) - { - var alarmObj = new ExpandoObject(); - alarmObj.TryAdd(nameof(tag.AlarmCode), tag.AlarmCode); - alarmObj.TryAdd(nameof(tag.AlarmText), tag.AlarmText); - alarmObj.TryAdd(nameof(tag.AlarmType), tag.AlarmType); - alarmObj.TryAdd(nameof(tag.AlarmLimit), tag.AlarmLimit); - alarmObj.TryAdd(nameof(tag.EventTime), tag.EventTime); - alarmObj.TryAdd(nameof(tag.EventType), tag.EventType); +//using ThingsGateway.Foundation; +//using ThingsGateway.Gateway.Application; +//public class TestDynamicModel : IDynamicModel +//{ +// public IEnumerable GetList(IEnumerable datas) +// { +// if (datas == null) return null; +// List deviceObjs = new List(); +// //按设备名称分组 +// var groups = datas.Where(a => !string.IsNullOrEmpty(((AlarmVariable)a).DeviceName)).GroupBy(a => ((AlarmVariable)a).DeviceName, a => ((AlarmVariable)a)); +// foreach (var group in groups) +// { +// //按采集时间分组 +// var data = group.GroupBy(a => a.AlarmTime.DateTimeToUnixTimestamp()); +// var deviceObj = new ExpandoObject(); +// List expandos = new List(); +// foreach (var item in data) +// { +// var expando = new ExpandoObject(); +// expando.TryAdd("ts", item.Key); +// var variableObj = new ExpandoObject(); +// foreach (var tag in item) +// { +// var alarmObj = new ExpandoObject(); +// alarmObj.TryAdd(nameof(tag.AlarmCode), tag.AlarmCode); +// alarmObj.TryAdd(nameof(tag.AlarmText), tag.AlarmText); +// alarmObj.TryAdd(nameof(tag.AlarmType), tag.AlarmType); +// alarmObj.TryAdd(nameof(tag.AlarmLimit), tag.AlarmLimit); +// alarmObj.TryAdd(nameof(tag.EventTime), tag.EventTime); +// alarmObj.TryAdd(nameof(tag.EventType), tag.EventType); - variableObj.TryAdd(tag.Name, alarmObj); - } - expando.TryAdd("alarms", variableObj); +// variableObj.TryAdd(tag.Name, alarmObj); +// } +// expando.TryAdd("alarms", variableObj); - expandos.Add(expando); - } - deviceObj.TryAdd(group.Key, expandos); - deviceObjs.Add(deviceObj); - } +// expandos.Add(expando); +// } +// deviceObj.TryAdd(group.Key, expandos); +// deviceObjs.Add(deviceObj); +// } - return deviceObjs; - } -} \ No newline at end of file +// return deviceObjs; +// } +//} \ No newline at end of file diff --git a/src/ThingsGateway.Server/Test/TestKafkaDynamicModel.cs b/src/ThingsGateway.Server/Test/TestKafkaDynamicModel.cs index 6012a46d4..52a8abe9b 100644 --- a/src/ThingsGateway.Server/Test/TestKafkaDynamicModel.cs +++ b/src/ThingsGateway.Server/Test/TestKafkaDynamicModel.cs @@ -1,223 +1,223 @@ -////------------------------------------------------------------------------------ -////此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 -//// 此代码版权(除特别声明外的代码)归作者本人Diego所有 -//// 源代码使用协议遵循本仓库的开源协议及附加协议 -//// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway -//// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway -//// 使用文档:https://thingsgateway.cn/ -//// QQ群:605534569 -//// ------------------------------------------------------------------------------ +//////------------------------------------------------------------------------------ +//////此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 +////// 此代码版权(除特别声明外的代码)归作者本人Diego所有 +////// 源代码使用协议遵循本仓库的开源协议及附加协议 +////// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway +////// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway +////// 使用文档:https://thingsgateway.cn/ +////// QQ群:605534569 +////// ------------------------------------------------------------------------------ -using ThingsGateway.Foundation; -using ThingsGateway.Gateway.Application; -using ThingsGateway.NewLife.Extension; -public class TestKafkaDynamicModel : DynamicModelBase -{ - private Dictionary variableRuntimes = new(); +//using ThingsGateway.Foundation; +//using ThingsGateway.Gateway.Application; +//using ThingsGateway.NewLife.Extension; +//public class TestKafkaDynamicModel : DynamicModelBase +//{ +// private Dictionary variableRuntimes = new(); - private long id = 0; +// private long id = 0; - public TestKafkaDynamicModel() - { - var name = "kafka1"; - if (GlobalData.ReadOnlyDevices.TryGetValue(name, out var kafka1)) - { - id = kafka1.Id; +// public TestKafkaDynamicModel() +// { +// var name = "kafka1"; +// if (GlobalData.ReadOnlyDevices.TryGetValue(name, out var kafka1)) +// { +// id = kafka1.Id; - foreach (var item in kafka1.Driver?.IdVariableRuntimes) - { - //变量备注1作为Key(AE报警SourceId) - var data1 = item.Value.GetPropertyValue(id, nameof(BusinessVariableProperty.Data1)); - if (!data1.IsNullOrEmpty()) - { - variableRuntimes.Add(data1, item.Value); - } - } +// foreach (var item in kafka1.Driver?.IdVariableRuntimes) +// { +// //变量备注1作为Key(AE报警SourceId) +// var data1 = item.Value.GetPropertyValue(id, nameof(BusinessVariableProperty.Data1)); +// if (!data1.IsNullOrEmpty()) +// { +// variableRuntimes.Add(data1, item.Value); +// } +// } - } - else - { - throw new Exception($"找不到设备 {name}"); - } +// } +// else +// { +// throw new Exception($"找不到设备 {name}"); +// } - } - public override IEnumerable GetList(IEnumerable datas) - { - if (datas == null) return null; - var pluginEventDatas = datas.Cast(); - var opcDatas = pluginEventDatas.Select( - a => - { - if (a.ObjectValue == null) - { - a.ObjectValue = a.Value.ToObject(Type.GetType(a.ValueType)); - } - return a.ObjectValue is ThingsGateway.Plugin.OpcAe.OpcAeEventData opcData ? opcData : null; - } - ).Where(a => a != null).ToList(); +// } +// public override IEnumerable GetList(IEnumerable datas) +// { +// if (datas == null) return null; +// var pluginEventDatas = datas.Cast(); +// var opcDatas = pluginEventDatas.Select( +// a => +// { +// if (a.ObjectValue == null) +// { +// a.ObjectValue = a.Value.ToObject(Type.GetType(a.ValueType)); +// } +// return a.ObjectValue is ThingsGateway.Plugin.OpcAe.OpcAeEventData opcData ? opcData : null; +// } +// ).Where(a => a != null).ToList(); - List alarmEntities = new List(); - if (opcDatas.Count == 0) - { - Logger?.LogInformation("没有OPCAE数据"); - return alarmEntities; - } +// List alarmEntities = new List(); +// if (opcDatas.Count == 0) +// { +// Logger?.LogInformation("没有OPCAE数据"); +// return alarmEntities; +// } - foreach (var opcAeEventData in opcDatas) - { - //一般只需要条件报警 - //if (opcAeEventData.EventType != Opc.Ae.EventType.Condition) - // continue; - //重连时触发的事件,可以跳过不处理 - //if(opcAeEventData.Refresh) - // continue; - var sourceName = opcAeEventData.SourceID; - if (variableRuntimes.TryGetValue(sourceName, out var variableRuntime)) - { - var ack = opcAeEventData.EventType != Opc.Ae.EventType.Condition ? false : ((Opc.Ae.ConditionState)opcAeEventData.NewState).HasFlag(Opc.Ae.ConditionState.Acknowledged); +// foreach (var opcAeEventData in opcDatas) +// { +// //一般只需要条件报警 +// //if (opcAeEventData.EventType != Opc.Ae.EventType.Condition) +// // continue; +// //重连时触发的事件,可以跳过不处理 +// //if(opcAeEventData.Refresh) +// // continue; +// var sourceName = opcAeEventData.SourceID; +// if (variableRuntimes.TryGetValue(sourceName, out var variableRuntime)) +// { +// var ack = opcAeEventData.EventType != Opc.Ae.EventType.Condition ? false : ((Opc.Ae.ConditionState)opcAeEventData.NewState).HasFlag(Opc.Ae.ConditionState.Acknowledged); - bool isRecover = opcAeEventData.EventType != Opc.Ae.EventType.Condition ? false : !((Opc.Ae.ConditionState)opcAeEventData.NewState).HasFlag(Opc.Ae.ConditionState.Active); +// bool isRecover = opcAeEventData.EventType != Opc.Ae.EventType.Condition ? false : !((Opc.Ae.ConditionState)opcAeEventData.NewState).HasFlag(Opc.Ae.ConditionState.Active); - //构建告警实体 - KafkaAlarmEntity alarmEntity = new KafkaAlarmEntity - { - AlarmCode = variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data2)), //唯一编码 - ResourceCode = variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data3)), //资源编码 - ResourceName = variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data4)), //资源名称 - MetricCode = variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data5)), //指标编码 - MetricName = variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data6)), //指标名称 - Content = $"{variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data4))},{opcAeEventData.Message}", //告警内容,设备名称+告警内容(包含阈值信息),可能opcae里没有带阈值信息,那么就需要录入固定值,可选Data10 - AlarmType = variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data7)), // opcAeEventData.Severity 告警类型,子系统产生告警的类型,可能需要固定备注值 +// //构建告警实体 +// KafkaAlarmEntity alarmEntity = new KafkaAlarmEntity +// { +// AlarmCode = variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data2)), //唯一编码 +// ResourceCode = variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data3)), //资源编码 +// ResourceName = variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data4)), //资源名称 +// MetricCode = variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data5)), //指标编码 +// MetricName = variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data6)), //指标名称 +// Content = $"{variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data4))},{opcAeEventData.Message}", //告警内容,设备名称+告警内容(包含阈值信息),可能opcae里没有带阈值信息,那么就需要录入固定值,可选Data10 +// AlarmType = variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data7)), // opcAeEventData.Severity 告警类型,子系统产生告警的类型,可能需要固定备注值 - ConfirmedTime = ack ? opcAeEventData.Time.DateTimeToUnixTimestamp() : null, //告警确认时间 - FixTime = isRecover ? opcAeEventData.Time.DateTimeToUnixTimestamp() : null, //解除告警时间 - LastTime = opcAeEventData.ActiveTime.DateTimeToUnixTimestamp(), //产生告警时间 - Status = isRecover ? "FIXED" : "UNFIXED", //告警状态 - AlarmLevel = variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data8)), //opcAeEventData.Severity.ToString(), //告警等级,可能需要固定备注值 - SubSystemCode = variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data9)), //子系统编码 - Type = "SUB_SYSTEM_ALARM", //默认填写字段 - ConfirmAccount = opcAeEventData.ActorID, //告警确认人 - ClearAccount = opcAeEventData.ActorID, //告警清除人 - ProcessInstruction = null //告警处理说明,OPCAE不带有 - }; - alarmEntities.Add(alarmEntity); - } - else - { - Logger?.LogInformation($"找不到相关变量{sourceName}"); - } - } +// ConfirmedTime = ack ? opcAeEventData.Time.DateTimeToUnixTimestamp() : null, //告警确认时间 +// FixTime = isRecover ? opcAeEventData.Time.DateTimeToUnixTimestamp() : null, //解除告警时间 +// LastTime = opcAeEventData.ActiveTime.DateTimeToUnixTimestamp(), //产生告警时间 +// Status = isRecover ? "FIXED" : "UNFIXED", //告警状态 +// AlarmLevel = variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data8)), //opcAeEventData.Severity.ToString(), //告警等级,可能需要固定备注值 +// SubSystemCode = variableRuntime.GetPropertyValue(id, nameof(BusinessVariableProperty.Data9)), //子系统编码 +// Type = "SUB_SYSTEM_ALARM", //默认填写字段 +// ConfirmAccount = opcAeEventData.ActorID, //告警确认人 +// ClearAccount = opcAeEventData.ActorID, //告警清除人 +// ProcessInstruction = null //告警处理说明,OPCAE不带有 +// }; +// alarmEntities.Add(alarmEntity); +// } +// else +// { +// Logger?.LogInformation($"找不到相关变量{sourceName}"); +// } +// } - return alarmEntities; - } -} +// return alarmEntities; +// } +//} -/// -/// 告警实体 -/// -public class KafkaAlarmEntity -{ - /// - /// 告警编码唯一 (非空) - /// 示例:"8e8a118ac452fd04da8c26fa588a7cab" - /// - public string AlarmCode { get; set; } +///// +///// 告警实体 +///// +//public class KafkaAlarmEntity +//{ +// /// +// /// 告警编码唯一 (非空) +// /// 示例:"8e8a118ac452fd04da8c26fa588a7cab" +// /// +// public string AlarmCode { get; set; } - /// - /// 资源编码,唯一编码,需要按照映射表上传 (非空) - /// 示例:"RS_A6K9MUSG19V" - /// - public string ResourceCode { get; set; } +// /// +// /// 资源编码,唯一编码,需要按照映射表上传 (非空) +// /// 示例:"RS_A6K9MUSG19V" +// /// +// public string ResourceCode { get; set; } - /// - /// 资源名称,需要按照映射表上传 (非空) - /// 示例:"MB-A7" - /// - public string ResourceName { get; set; } +// /// +// /// 资源名称,需要按照映射表上传 (非空) +// /// 示例:"MB-A7" +// /// +// public string ResourceName { get; set; } - /// - /// 指标编码唯一,需要按照映射表上传 (非空) - /// 示例:"ActivePowerPa" - /// - public string MetricCode { get; set; } +// /// +// /// 指标编码唯一,需要按照映射表上传 (非空) +// /// 示例:"ActivePowerPa" +// /// +// public string MetricCode { get; set; } - /// - /// 指标名称,需要按照映射表上传 (非空) - /// 示例:"有功功率Pa" - /// - public string MetricName { get; set; } +// /// +// /// 指标名称,需要按照映射表上传 (非空) +// /// 示例:"有功功率Pa" +// /// +// public string MetricName { get; set; } - /// - /// 告警内容:设备名称+告警内容(包含阈值信息) (非空) - /// 示例:"MB-A7,有功功率Pa > 30" - /// - public string Content { get; set; } +// /// +// /// 告警内容:设备名称+告警内容(包含阈值信息) (非空) +// /// 示例:"MB-A7,有功功率Pa > 30" +// /// +// public string Content { get; set; } - /// - /// 告警类型,子系统产生告警的类型 (非空) - /// 示例:"0101" 表示高限报警 - /// - public string AlarmType { get; set; } +// /// +// /// 告警类型,子系统产生告警的类型 (非空) +// /// 示例:"0101" 表示高限报警 +// /// +// public string AlarmType { get; set; } - /// - /// 告警确认时间 (可空,时间戳) - /// 示例:1586152800000 - /// - public long? ConfirmedTime { get; set; } +// /// +// /// 告警确认时间 (可空,时间戳) +// /// 示例:1586152800000 +// /// +// public long? ConfirmedTime { get; set; } - /// - /// 解除告警时间 (可空,时间戳) - /// 示例:1586152800000 - /// - public long? FixTime { get; set; } +// /// +// /// 解除告警时间 (可空,时间戳) +// /// 示例:1586152800000 +// /// +// public long? FixTime { get; set; } - /// - /// 产生告警时间 (非空,时间戳) - /// 示例:1586152800000 - /// - public long LastTime { get; set; } +// /// +// /// 产生告警时间 (非空,时间戳) +// /// 示例:1586152800000 +// /// +// public long LastTime { get; set; } - /// - /// 告警状态 (非空) - /// 可选值:UNFIXED(新增告警)、FIXED(解除告警) - /// - public string Status { get; set; } +// /// +// /// 告警状态 (非空) +// /// 可选值:UNFIXED(新增告警)、FIXED(解除告警) +// /// +// public string Status { get; set; } - /// - /// 告警等级,需要按照映射表上传 (非空) - /// 示例:"1" - /// - public string AlarmLevel { get; set; } +// /// +// /// 告警等级,需要按照映射表上传 (非空) +// /// 示例:"1" +// /// +// public string AlarmLevel { get; set; } - /// - /// 子系统编码 (非空) - /// 示例:"MS_NEW_PD_DCIM_001" - /// - public string SubSystemCode { get; set; } +// /// +// /// 子系统编码 (非空) +// /// 示例:"MS_NEW_PD_DCIM_001" +// /// +// public string SubSystemCode { get; set; } - /// - /// 默认填写字段 (非空) - /// 固定值:"SUB_SYSTEM_ALARM" - /// - public string Type { get; set; } +// /// +// /// 默认填写字段 (非空) +// /// 固定值:"SUB_SYSTEM_ALARM" +// /// +// public string Type { get; set; } - /// - /// 告警确认人 (可空) - /// 示例:"admin3" - /// - public string ConfirmAccount { get; set; } +// /// +// /// 告警确认人 (可空) +// /// 示例:"admin3" +// /// +// public string ConfirmAccount { get; set; } - /// - /// 告警清除人 (可空) - /// 示例:"admin" - /// - public string ClearAccount { get; set; } +// /// +// /// 告警清除人 (可空) +// /// 示例:"admin" +// /// +// public string ClearAccount { get; set; } - /// - /// 告警处理说明 (可空) - /// 示例:"admin" - /// - public string ProcessInstruction { get; set; } -} +// /// +// /// 告警处理说明 (可空) +// /// 示例:"admin" +// /// +// public string ProcessInstruction { get; set; } +//} diff --git a/src/ThingsGateway.Server/Test/TestSQL.cs b/src/ThingsGateway.Server/Test/TestSQL.cs index 45fdb68a1..8d92980e8 100644 --- a/src/ThingsGateway.Server/Test/TestSQL.cs +++ b/src/ThingsGateway.Server/Test/TestSQL.cs @@ -1,46 +1,46 @@ -//------------------------------------------------------------------------------ -//此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 -// 此代码版权(除特别声明外的代码)归作者本人Diego所有 -// 源代码使用协议遵循本仓库的开源协议及附加协议 -// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway -// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway -// 使用文档:https://thingsgateway.cn/ -// QQ群:605534569 -// ------------------------------------------------------------------------------ +////------------------------------------------------------------------------------ +////此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充 +//// 此代码版权(除特别声明外的代码)归作者本人Diego所有 +//// 源代码使用协议遵循本仓库的开源协议及附加协议 +//// Gitee源代码仓库:https://gitee.com/diego2098/ThingsGateway +//// Github源代码仓库:https://github.com/kimdiego2098/ThingsGateway +//// 使用文档:https://thingsgateway.cn/ +//// QQ群:605534569 +//// ------------------------------------------------------------------------------ -using ThingsGateway.Gateway.Application; -using ThingsGateway.NewLife.Json.Extension; -using ThingsGateway.Plugin.DB; -using ThingsGateway.SqlSugar; +//using ThingsGateway.Gateway.Application; +//using ThingsGateway.NewLife.Json.Extension; +//using ThingsGateway.Plugin.DB; +//using ThingsGateway.SqlSugar; -using TouchSocket.Core; +//using TouchSocket.Core; -public class TestSQL : DynamicSQLBase -{ - public override Task DBInit(ISqlSugarClient db, CancellationToken cancellationToken) - { - db.DbMaintenance.CreateDatabase(); - db.CodeFirst.InitTables(); - return Task.CompletedTask; - } +//public class TestSQL : DynamicSQLBase +//{ +// public override Task DBInit(ISqlSugarClient db, CancellationToken cancellationToken) +// { +// db.DbMaintenance.CreateDatabase(); +// db.CodeFirst.InitTables(); +// return Task.CompletedTask; +// } - public override async Task DBInsertable(ISqlSugarClient db, IEnumerable datas, CancellationToken cancellationToken) - { - var pluginEventDatas = datas.Cast(); - var opcDatas = pluginEventDatas.Select( - a => - { - if (a.ObjectValue == null) - { - a.ObjectValue = a.Value.ToObject(Type.GetType(a.ValueType)); - } - return a.ObjectValue is ThingsGateway.Plugin.OpcAe.OpcAeEventData opcData ? opcData : null; - } - ).Where(a => a != null).ToList(); - if (opcDatas.Count == 0) - return; - Logger?.Info(opcDatas.ToSystemTextJsonString()); +// public override async Task DBInsertable(ISqlSugarClient db, IEnumerable datas, CancellationToken cancellationToken) +// { +// var pluginEventDatas = datas.Cast(); +// var opcDatas = pluginEventDatas.Select( +// a => +// { +// if (a.ObjectValue == null) +// { +// a.ObjectValue = a.Value.ToObject(Type.GetType(a.ValueType)); +// } +// return a.ObjectValue is ThingsGateway.Plugin.OpcAe.OpcAeEventData opcData ? opcData : null; +// } +// ).Where(a => a != null).ToList(); +// if (opcDatas.Count == 0) +// return; +// Logger?.Info(opcDatas.ToSystemTextJsonString()); - await db.Insertable(opcDatas).ExecuteCommandAsync(cancellationToken).ConfigureAwait(false); - } -} +// await db.Insertable(opcDatas).ExecuteCommandAsync(cancellationToken).ConfigureAwait(false); +// } +//}