diff --git a/DMS.Core/Events/DeviceStateChangedEventArgs.cs b/DMS.Application/Events/DeviceStateChangedEventArgs.cs
similarity index 97%
rename from DMS.Core/Events/DeviceStateChangedEventArgs.cs
rename to DMS.Application/Events/DeviceStateChangedEventArgs.cs
index b3e21ab..4ac6c86 100644
--- a/DMS.Core/Events/DeviceStateChangedEventArgs.cs
+++ b/DMS.Application/Events/DeviceStateChangedEventArgs.cs
@@ -1,6 +1,6 @@
using DMS.Core.Enums;
-namespace DMS.Core.Events
+namespace DMS.Application.Events
{
///
/// 设备状态改变事件参数
diff --git a/DMS.Application/Interfaces/IEventService.cs b/DMS.Application/Interfaces/IEventService.cs
index 76ba66d..8db6560 100644
--- a/DMS.Application/Interfaces/IEventService.cs
+++ b/DMS.Application/Interfaces/IEventService.cs
@@ -71,6 +71,18 @@ public interface IEventService
+ ///
+ /// 变量表改变事件
+ ///
+ event EventHandler OnVariableTableChanged;
+
+ ///
+ /// 触发变量表改变事件
+ ///
+ /// 事件发送者
+ /// 变量表改变事件参数
+ void RaiseVariableTableChanged(object sender, VariableTableChangedEventArgs e);
+
///
/// 变量值改变事件
///
diff --git a/DMS.Application/Interfaces/Management/IVariableTableManagementService.cs b/DMS.Application/Interfaces/Management/IVariableTableManagementService.cs
index 72b163d..81f0804 100644
--- a/DMS.Application/Interfaces/Management/IVariableTableManagementService.cs
+++ b/DMS.Application/Interfaces/Management/IVariableTableManagementService.cs
@@ -5,11 +5,6 @@ namespace DMS.Application.Interfaces.Management;
public interface IVariableTableManagementService
{
- ///
- /// 当变量表数据发生变化时触发
- ///
- event EventHandler OnVariableTableChanged;
-
///
/// 异步根据ID获取变量表DTO。
///
@@ -34,19 +29,4 @@ public interface IVariableTableManagementService
/// 异步删除一个变量表。
///
Task DeleteVariableTableAsync(int id);
-
- ///
- /// 在内存中添加变量表
- ///
- void AddVariableTableToMemory(VariableTableDto variableTableDto);
-
- ///
- /// 在内存中更新变量表
- ///
- void UpdateVariableTableInMemory(VariableTableDto variableTableDto);
-
- ///
- /// 在内存中删除变量表
- ///
- void RemoveVariableTableFromMemory(int variableTableId);
}
\ No newline at end of file
diff --git a/DMS.Application/Services/EventService.cs b/DMS.Application/Services/EventService.cs
index 658f42e..f34a964 100644
--- a/DMS.Application/Services/EventService.cs
+++ b/DMS.Application/Services/EventService.cs
@@ -84,6 +84,21 @@ public class EventService : IEventService
#endregion
#region 变量事件
+ ///
+ /// 变量表改变事件
+ ///
+ public event EventHandler OnVariableTableChanged;
+
+ ///
+ /// 触发变量表改变事件
+ ///
+ /// 事件发送者
+ /// 变量表改变事件参数
+ public void RaiseVariableTableChanged(object sender, VariableTableChangedEventArgs e)
+ {
+ OnVariableTableChanged?.Invoke(sender, e);
+ }
+
///
/// 变量值改变事件
///
diff --git a/DMS.Application/Services/Management/VariableTableManagementService.cs b/DMS.Application/Services/Management/VariableTableManagementService.cs
index fbbf1d3..2c66956 100644
--- a/DMS.Application/Services/Management/VariableTableManagementService.cs
+++ b/DMS.Application/Services/Management/VariableTableManagementService.cs
@@ -15,17 +15,20 @@ public class VariableTableManagementService : IVariableTableManagementService
{
private readonly IVariableTableAppService _variableTableAppService;
private readonly IAppDataStorageService _appDataStorageService;
+ private readonly IEventService _eventService;
///
/// 当变量表数据发生变化时触发
///
public event EventHandler OnVariableTableChanged;
- public VariableTableManagementService(IVariableTableAppService variableTableAppService,IAppDataStorageService appDataStorageService
- )
+ public VariableTableManagementService(IVariableTableAppService variableTableAppService,
+ IAppDataStorageService appDataStorageService,
+ IEventService eventService)
{
_variableTableAppService = variableTableAppService;
_appDataStorageService = appDataStorageService;
+ _eventService = eventService;
}
///
@@ -49,7 +52,42 @@ public class VariableTableManagementService : IVariableTableManagementService
///
public async Task CreateVariableTableAsync(CreateVariableTableWithMenuDto dto)
{
- return await _variableTableAppService.CreateVariableTableAsync(dto);
+ var result = await _variableTableAppService.CreateVariableTableAsync(dto);
+
+ // 创建成功后,将变量表添加到内存中
+ if (result?.VariableTable != null)
+ {
+ // 添加null检查
+ if (result.VariableTable == null)
+ return result;
+
+ DeviceDto deviceDto = null;
+ if (_appDataStorageService.Devices != null &&
+ _appDataStorageService.Devices.TryGetValue(result.VariableTable.DeviceId, out var device))
+ {
+ deviceDto = device;
+ // 确保VariableTables不为null
+ if (device.VariableTables == null)
+ device.VariableTables = new List();
+
+ device.VariableTables.Add(result.VariableTable);
+
+ // 确保Device属性不为null
+ if (result.VariableTable != null)
+ result.VariableTable.Device = device;
+ }
+
+ // 确保_variableTables和result.VariableTable不为null
+ if (_appDataStorageService.VariableTables.TryAdd(result.VariableTable.Id, result.VariableTable))
+ {
+ _eventService.RaiseVariableTableChanged(this, new VariableTableChangedEventArgs(
+ DataChangeType.Added,
+ result.VariableTable,
+ deviceDto));
+ }
+ }
+
+ return result;
}
///
@@ -57,7 +95,25 @@ public class VariableTableManagementService : IVariableTableManagementService
///
public async Task UpdateVariableTableAsync(VariableTableDto variableTableDto)
{
- return await _variableTableAppService.UpdateVariableTableAsync(variableTableDto);
+ var result = await _variableTableAppService.UpdateVariableTableAsync(variableTableDto);
+
+ // 更新成功后,更新内存中的变量表
+ if (result > 0 && variableTableDto != null)
+ {
+ DeviceDto deviceDto = null;
+ if (_appDataStorageService.Devices.TryGetValue(variableTableDto.DeviceId, out var device))
+ {
+ deviceDto = device;
+ }
+
+ _appDataStorageService.VariableTables.AddOrUpdate(variableTableDto.Id, variableTableDto, (key, oldValue) => variableTableDto);
+ _eventService.RaiseVariableTableChanged(this, new VariableTableChangedEventArgs(
+ DataChangeType.Updated,
+ variableTableDto,
+ deviceDto));
+ }
+
+ return result;
}
///
@@ -65,82 +121,33 @@ public class VariableTableManagementService : IVariableTableManagementService
///
public async Task DeleteVariableTableAsync(int id)
{
- return await _variableTableAppService.DeleteVariableTableAsync(id);
- }
-
- ///
- /// 在内存中添加变量表
- ///
- public void AddVariableTableToMemory(VariableTableDto variableTableDto)
- {
- // 添加null检查
- if (variableTableDto == null)
- return;
-
- DeviceDto deviceDto = null;
- if (_appDataStorageService.Devices != null &&
- _appDataStorageService.Devices.TryGetValue(variableTableDto.DeviceId, out var device))
+ var variableTable = await _variableTableAppService.GetVariableTableByIdAsync(id); // 获取变量表信息用于内存删除
+ var result = await _variableTableAppService.DeleteVariableTableAsync(id);
+
+ // 删除成功后,从内存中移除变量表
+ if (result && variableTable != null)
{
- deviceDto = device;
- // 确保VariableTables不为null
- if (device.VariableTables == null)
- device.VariableTables = new List();
-
- device.VariableTables.Add(variableTableDto);
-
- // 确保Device属性不为null
- if (variableTableDto != null)
- variableTableDto.Device = device;
- }
-
- // 确保_variableTables和variableTableDto不为null
- if (_appDataStorageService.VariableTables.TryAdd(variableTableDto.Id, variableTableDto))
+ if (_appDataStorageService.VariableTables.TryRemove(id, out var variableTableDto))
{
- OnVariableTableChanged?.Invoke(this, new VariableTableChangedEventArgs(
- DataChangeType.Added,
- variableTableDto,
- deviceDto));
+ DeviceDto deviceDto = null;
+ if (variableTableDto != null && _appDataStorageService.Devices.TryGetValue(variableTableDto.DeviceId, out var device))
+ {
+ deviceDto = device;
+ if (device.VariableTables != null)
+ device.VariableTables.Remove(variableTableDto);
+ }
+
+ _eventService.RaiseVariableTableChanged(this, new VariableTableChangedEventArgs(
+ DataChangeType.Deleted,
+ variableTableDto,
+ deviceDto));
}
- }
-
- ///
- /// 在内存中更新变量表
- ///
- public void UpdateVariableTableInMemory(VariableTableDto variableTableDto)
- {
- DeviceDto deviceDto = null;
- if (_appDataStorageService.Devices.TryGetValue(variableTableDto.DeviceId, out var device))
- {
- deviceDto = device;
}
-
- _appDataStorageService.VariableTables.AddOrUpdate(variableTableDto.Id, variableTableDto, (key, oldValue) => variableTableDto);
- OnVariableTableChanged?.Invoke(this,new VariableTableChangedEventArgs(
- DataChangeType.Updated,
- variableTableDto,
- deviceDto));
+
+ return result;
}
- ///
- /// 在内存中删除变量表
- ///
- public void RemoveVariableTableFromMemory(int variableTableId)
- {
- if (_appDataStorageService.VariableTables.TryRemove(variableTableId, out var variableTableDto))
- {
- DeviceDto deviceDto = null;
- if (variableTableDto != null && _appDataStorageService.Devices.TryGetValue(variableTableDto.DeviceId, out var device))
- {
- deviceDto = device;
- device.VariableTables.Remove(variableTableDto);
- }
-
- OnVariableTableChanged?.Invoke(this,new VariableTableChangedEventArgs(
- DataChangeType.Deleted,
- variableTableDto,
- deviceDto));
- }
- }
+
}
\ No newline at end of file
diff --git a/DMS.Application/Services/Monitoring/DeviceMonitoringService.cs b/DMS.Application/Services/Monitoring/DeviceMonitoringService.cs
index 8ea917a..466593f 100644
--- a/DMS.Application/Services/Monitoring/DeviceMonitoringService.cs
+++ b/DMS.Application/Services/Monitoring/DeviceMonitoringService.cs
@@ -2,6 +2,7 @@ using System;
using System.Collections.Concurrent;
using System.Threading;
using System.Threading.Tasks;
+using DMS.Application.Events;
using DMS.Application.Interfaces;
using DMS.Core.Events;
using DMS.Core.Models;
diff --git a/DMS.Infrastructure/Services/S7/S7ServiceManager.cs b/DMS.Infrastructure/Services/S7/S7ServiceManager.cs
index d70f1dd..1add6ba 100644
--- a/DMS.Infrastructure/Services/S7/S7ServiceManager.cs
+++ b/DMS.Infrastructure/Services/S7/S7ServiceManager.cs
@@ -1,6 +1,7 @@
using System.Collections.Concurrent;
using System.Diagnostics;
using DMS.Application.DTOs;
+using DMS.Application.Events;
using DMS.Application.Interfaces;
using DMS.Core.Enums;
using DMS.Core.Events;
diff --git a/DMS.WPF/Services/DeviceDataService.cs b/DMS.WPF/Services/DeviceDataService.cs
index 3a2cddb..abb5771 100644
--- a/DMS.WPF/Services/DeviceDataService.cs
+++ b/DMS.WPF/Services/DeviceDataService.cs
@@ -121,7 +121,7 @@ public class DeviceDataService : IDeviceDataService
if (addDto.VariableTable != null)
{
await _variableDataService.AddVariableTableToView(addDto.VariableTable);
- _appDataCenterService.VariableTableManagementService.AddVariableTableToMemory(addDto.VariableTable);
+ // 添加变量表到内存的操作现在在服务内部完成,无需额外调用
if (addDto.VariableTable != null && addDto.VariableTableMenu != null)
{
diff --git a/DMS.WPF/Services/VariableDataService.cs b/DMS.WPF/Services/VariableDataService.cs
index 2b1c0fc..ca2688e 100644
--- a/DMS.WPF/Services/VariableDataService.cs
+++ b/DMS.WPF/Services/VariableDataService.cs
@@ -79,8 +79,7 @@ public class VariableDataService : IVariableDataService
var variableTableDto = _mapper.Map(variableTable);
if (await _appDataCenterService.VariableTableManagementService.UpdateVariableTableAsync(variableTableDto) > 0)
{
- _appDataCenterService.VariableTableManagementService.UpdateVariableTableInMemory(variableTableDto);
-
+ // 更新数据库后会自动更新内存,无需额外操作
return true;
}
@@ -111,8 +110,6 @@ public class VariableDataService : IVariableDataService
_dataStorageService.Variables.Remove(variable.Id);
}
- _appDataCenterService.VariableTableManagementService.RemoveVariableTableFromMemory(variableTable.Id);
-
// 删除变量表
_dataStorageService.VariableTables.Remove(variableTable.Id);
variableTable.Device.VariableTables.Remove(variableTable);
diff --git a/DMS.WPF/Services/VariableTableDataService.cs b/DMS.WPF/Services/VariableTableDataService.cs
index d391ed3..e8a180d 100644
--- a/DMS.WPF/Services/VariableTableDataService.cs
+++ b/DMS.WPF/Services/VariableTableDataService.cs
@@ -57,7 +57,7 @@ public class VariableTableDataService : IVariableTableDataService
_menuDataService.AddMenuItem(_mapper.Map(resDto.Menu));
}
- _appDataCenterService.VariableTableManagementService.AddVariableTableToMemory(variableTableDto);
+ // 添加变量表到内存的操作现在在服务内部完成,无需额外调用
// var device = _deviceDataService.Devices.FirstOrDefault(d => d.Id == variableTableDto.DeviceId);
// if (device != null)
@@ -82,7 +82,7 @@ public class VariableTableDataService : IVariableTableDataService
var variableTableDto = _mapper.Map(variableTable);
if (await _appDataCenterService.VariableTableManagementService.UpdateVariableTableAsync(variableTableDto) > 0)
{
- _appDataCenterService.VariableTableManagementService.UpdateVariableTableInMemory(variableTableDto);
+ // 更新数据库后会自动更新内存,无需额外操作
var menu = _dataStorageService.Menus.FirstOrDefault(m =>
m.MenuType == MenuType.VariableTableMenu &&
@@ -119,7 +119,6 @@ public class VariableTableDataService : IVariableTableDataService
_dataStorageService.Variables.Remove(variable.Id);
}
- _appDataCenterService.VariableTableManagementService.RemoveVariableTableFromMemory(variableTable.Id);
// 删除变量表界面相关的菜单
var variableTableMenu
diff --git a/DMS.WPF/ViewModels/Items/DeviceItemViewModel.cs b/DMS.WPF/ViewModels/Items/DeviceItemViewModel.cs
index 7845dbc..4a9712a 100644
--- a/DMS.WPF/ViewModels/Items/DeviceItemViewModel.cs
+++ b/DMS.WPF/ViewModels/Items/DeviceItemViewModel.cs
@@ -2,6 +2,7 @@
using System.Collections.ObjectModel;
using CommunityToolkit.Mvvm.ComponentModel;
+using DMS.Application.Events;
using DMS.Application.Interfaces;
using DMS.Core.Enums;
using DMS.Core.Events;