feat.修复新添加设备添加变量OpcServer报错问题,修改初始化菜单的内容
This commit is contained in:
@@ -18,10 +18,6 @@ namespace DMS.Application.Events
|
||||
/// </summary>
|
||||
public VariableTableDto VariableTable { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 关联的设备DTO
|
||||
/// </summary>
|
||||
public DeviceDto Device { get; }
|
||||
|
||||
/// <summary>
|
||||
/// 变更时间
|
||||
@@ -34,11 +30,10 @@ namespace DMS.Application.Events
|
||||
/// <param name="changeType">变更类型</param>
|
||||
/// <param name="variableTable">变量表DTO</param>
|
||||
/// <param name="device">关联的设备DTO</param>
|
||||
public VariableTableChangedEventArgs(DataChangeType changeType, VariableTableDto variableTable, DeviceDto device)
|
||||
public VariableTableChangedEventArgs(DataChangeType changeType, VariableTableDto variableTable)
|
||||
{
|
||||
ChangeType = changeType;
|
||||
VariableTable = variableTable;
|
||||
Device = device;
|
||||
ChangeTime = DateTime.Now;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -53,6 +53,10 @@ public class DeviceManagementService : IDeviceManagementService
|
||||
{
|
||||
_eventService.RaiseDeviceChanged(this, new DeviceChangedEventArgs(DataChangeType.Added, result.Device));
|
||||
}
|
||||
if (_appDataStorageService.VariableTables.TryAdd(result.VariableTable.Id, result.VariableTable))
|
||||
{
|
||||
_eventService.RaiseVariableTableChanged(this, new VariableTableChangedEventArgs(DataChangeType.Added, result.VariableTable));
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
@@ -82,8 +82,7 @@ public class VariableTableManagementService : IVariableTableManagementService
|
||||
{
|
||||
_eventService.RaiseVariableTableChanged(this, new VariableTableChangedEventArgs(
|
||||
DataChangeType.Added,
|
||||
result.VariableTable,
|
||||
deviceDto));
|
||||
result.VariableTable));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,8 +108,7 @@ public class VariableTableManagementService : IVariableTableManagementService
|
||||
_appDataStorageService.VariableTables.AddOrUpdate(variableTableDto.Id, variableTableDto, (key, oldValue) => variableTableDto);
|
||||
_eventService.RaiseVariableTableChanged(this, new VariableTableChangedEventArgs(
|
||||
DataChangeType.Updated,
|
||||
variableTableDto,
|
||||
deviceDto));
|
||||
variableTableDto));
|
||||
}
|
||||
|
||||
return result;
|
||||
@@ -139,8 +137,7 @@ public class VariableTableManagementService : IVariableTableManagementService
|
||||
|
||||
_eventService.RaiseVariableTableChanged(this, new VariableTableChangedEventArgs(
|
||||
DataChangeType.Deleted,
|
||||
variableTableDto,
|
||||
deviceDto));
|
||||
variableTableDto));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -119,54 +119,54 @@ public class InitializeRepository : IInitializeRepository
|
||||
new DbMenu
|
||||
{
|
||||
Id = 1, Header = "主页", Icon = "\uE80F", ParentId = 0,
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "HomeView", DisplayOrder = 1
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "HomeViewModel", DisplayOrder = 1
|
||||
},
|
||||
new DbMenu
|
||||
{
|
||||
Id = 2, Header = "设备", Icon = "\uE975", ParentId = 0,
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "DevicesView",
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "DevicesViewModel",
|
||||
DisplayOrder = 2
|
||||
},
|
||||
new DbMenu
|
||||
{
|
||||
Id = 3, Header = "数据转换", Icon = "\uF1CB", ParentId = 0,
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "DataTransformView",
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "DataTransformViewModel",
|
||||
DisplayOrder = 3
|
||||
},
|
||||
new DbMenu
|
||||
{
|
||||
Id = 4, Header = "Mqtt服务器", Icon = "\uE753", ParentId = 0,
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "MqttsView",
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "MqttsViewModel",
|
||||
DisplayOrder = 4
|
||||
},
|
||||
new DbMenu
|
||||
{
|
||||
Id = 5, Header = "触发器", Icon = "\uE7BA", ParentId = 0,
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "TriggersView",
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "TriggersViewModel",
|
||||
DisplayOrder = 5
|
||||
},
|
||||
new DbMenu
|
||||
{
|
||||
Id = 6, Header = "日志历史", Icon = "\uE7BA", ParentId = 0,
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "LogHistoryView",
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "LogHistoryViewModel",
|
||||
DisplayOrder = 6
|
||||
},
|
||||
new DbMenu
|
||||
{
|
||||
Id = 7, Header = "邮件管理", Icon = "\uE715", ParentId = 0,
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "EmailManagementView",
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "EmailManagementViewModel",
|
||||
DisplayOrder = 7
|
||||
},
|
||||
new DbMenu
|
||||
{
|
||||
Id = 8, Header = "变量历史", Icon = "\uE81C", ParentId = 0,
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "VariableHistoryView",
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "VariableHistoryViewModel",
|
||||
DisplayOrder = 8
|
||||
},
|
||||
new DbMenu
|
||||
{
|
||||
Id = 9, Header = "设置", Icon = "\uE713", ParentId = 0,
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "SettingView",
|
||||
MenuType = MenuType.MainMenu, TargetViewKey = "SettingViewModel",
|
||||
DisplayOrder = 9
|
||||
},
|
||||
new DbMenu
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Collections.Concurrent;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using DMS.Application.DTOs;
|
||||
using DMS.Application.Events;
|
||||
using DMS.Application.Interfaces;
|
||||
@@ -251,38 +252,37 @@ namespace DMS.Infrastructure.Services.OpcUa
|
||||
{
|
||||
_logger.LogInformation("处理批量导入变量事件,共 {Count} 个变量", e.Count);
|
||||
|
||||
// 更新相关设备的变量表
|
||||
var deviceIds = e.Variables.Select(v => v.VariableTable.DeviceId)
|
||||
.Distinct();
|
||||
foreach (var deviceId in deviceIds)
|
||||
{
|
||||
// 获取设备的变量表信息
|
||||
var variablesForDevice = e.Variables.Where(v => v.VariableTable.DeviceId == deviceId)
|
||||
.ToList();
|
||||
if (variablesForDevice.Any())
|
||||
{
|
||||
// 更新设备上下文中的变量
|
||||
if (_deviceContexts.TryGetValue(deviceId, out var context))
|
||||
{
|
||||
// 将新导入的变量添加到设备上下文
|
||||
foreach (var variable in variablesForDevice)
|
||||
{
|
||||
if (!context.Variables.ContainsKey(variable.OpcUaNodeId))
|
||||
{
|
||||
context.Variables.TryAdd(variable.OpcUaNodeId, variable);
|
||||
}
|
||||
}
|
||||
.Distinct().ToList();
|
||||
|
||||
// 如果设备已连接,则设置订阅
|
||||
if (context.IsConnected)
|
||||
foreach (var deviceId in deviceIds){
|
||||
// 获取设备的变量表信息
|
||||
var variablesForDevice = e.Variables.Where(v => v.VariableTable.DeviceId == deviceId)
|
||||
.ToList();
|
||||
if (variablesForDevice.Any())
|
||||
{
|
||||
// 更新设备上下文中的变量
|
||||
if (_deviceContexts.TryGetValue(deviceId, out var context))
|
||||
{
|
||||
await SetupSubscriptionsAsync(context, CancellationToken.None);
|
||||
// 将新导入的变量添加到设备上下文
|
||||
foreach (var variable in variablesForDevice)
|
||||
{
|
||||
if (!context.Variables.ContainsKey(variable.OpcUaNodeId))
|
||||
{
|
||||
context.Variables.TryAdd(variable.OpcUaNodeId, variable);
|
||||
}
|
||||
}
|
||||
|
||||
// 如果设备已连接,则设置订阅
|
||||
if (context.IsConnected)
|
||||
{
|
||||
await SetupSubscriptionsAsync(context, CancellationToken.None);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_logger.LogInformation("批量导入变量事件处理完成,更新了 {DeviceCount} 个设备的变量信息", deviceIds.Count());
|
||||
_logger.LogInformation("批量导入变量事件处理完成,更新了 {DeviceCount} 个设备的变量信息", deviceIds.Count());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
||||
@@ -108,7 +108,7 @@ public partial class DevicesViewModel : ViewModelBase, INavigatable
|
||||
{
|
||||
Header = device.Name,
|
||||
Icon = SegoeFluentIcons.Devices2.Glyph,
|
||||
TargetViewKey = "DeviceDetailView"
|
||||
TargetViewKey = nameof(DeviceDetailViewModel),
|
||||
};
|
||||
|
||||
if (device.IsAddDefVarTable)
|
||||
|
||||
Reference in New Issue
Block a user