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;