using DMS.Application.DTOs; using DMS.Application.Events; using DMS.Application.Interfaces; using DMS.Application.Interfaces.Database; using DMS.Application.Interfaces.Management; using DMS.Core.Enums; using DMS.Core.Models; namespace DMS.Application.Services.Management; /// /// 变量表管理服务,负责变量表相关的业务逻辑。 /// public class VariableTableManagementService : IVariableTableManagementService { private readonly IVariableTableAppService _variableTableAppService; private readonly IAppDataService _appDataService; private readonly IEventService _eventService; /// /// 当变量表数据发生变化时触发 /// public event EventHandler OnVariableTableChanged; public VariableTableManagementService(IVariableTableAppService variableTableAppService, IAppDataService appStorageService, IEventService eventService) { _variableTableAppService = variableTableAppService; _appDataService = appStorageService; _eventService = eventService; } /// /// 异步根据ID获取变量表DTO。 /// public async Task GetVariableTableByIdAsync(int id) { return await _variableTableAppService.GetVariableTableByIdAsync(id); } /// /// 异步获取所有变量表DTO列表。 /// public async Task> GetAllVariableTablesAsync() { return await _variableTableAppService.GetAllVariableTablesAsync(); } /// /// 异步创建一个新变量表及其关联菜单(事务性操作)。 /// public async Task CreateVariableTableAsync(CreateVariableTableWithMenuDto dto) { var result = await _variableTableAppService.CreateVariableTableAsync(dto); // 创建成功后,将变量表添加到内存中 if (result?.VariableTable != null) { // 添加null检查 if (_appDataService.Devices != null && _appDataService.Devices.TryGetValue(result.VariableTable.DeviceId, out var 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 (_appDataService.VariableTables.TryAdd(result.VariableTable.Id, result.VariableTable)) { _eventService.RaiseVariableTableChanged(this, new VariableTableChangedEventArgs( DataChangeType.Added, result.VariableTable)); } } return result; } /// /// 异步更新一个已存在的变量表。 /// public async Task UpdateVariableTableAsync(VariableTable variableTable) { var result = await _variableTableAppService.UpdateVariableTableAsync(variableTable); // 更新成功后,更新内存中的变量表 if (result > 0 && variableTable != null) { _appDataService.VariableTables.AddOrUpdate(variableTable.Id, variableTable, (key, oldValue) => variableTable); _eventService.RaiseVariableTableChanged(this, new VariableTableChangedEventArgs( DataChangeType.Updated, variableTable)); } return result; } /// /// 异步删除一个变量表。 /// public async Task DeleteVariableTableAsync(int id) { var result = await _variableTableAppService.DeleteVariableTableAsync(id); // 删除成功后,从内存中移除变量表 if (result ) { if (_appDataService.VariableTables.TryRemove(id, out var variableTable)) { if (variableTable != null && _appDataService.Devices.TryGetValue(variableTable.DeviceId, out var device)) { if (device.VariableTables != null) device.VariableTables.Remove(variableTable); } _eventService.RaiseVariableTableChanged(this, new VariableTableChangedEventArgs( DataChangeType.Deleted, variableTable)); } } return result; } /// /// 异步加载所有变量表数据到内存中。 /// public async Task LoadAllVariableTablesAsync() { _appDataService.VariableTables.Clear(); var variableTables = await _variableTableAppService.GetAllVariableTablesAsync(); // 建立变量表与变量的关联 foreach (var variableTable in variableTables) { if (_appDataService.Devices.TryGetValue(variableTable.DeviceId, out var device)) { variableTable.Device = device; if (device.VariableTables == null) device.VariableTables = new List(); device.VariableTables.Add(variableTable); } // 将变量表添加到安全字典 _appDataService.VariableTables.TryAdd(variableTable.Id, variableTable); } } }