diff --git a/DMS.Application/Services/DataCenterService.cs b/DMS.Application/Services/DataCenterService.cs index 3c256ad..99dc74e 100644 --- a/DMS.Application/Services/DataCenterService.cs +++ b/DMS.Application/Services/DataCenterService.cs @@ -299,6 +299,8 @@ public class DataCenterService : IDataCenterService if (variableTableDto != null && Devices.TryGetValue(variableTableDto.DeviceId, out var device)) { deviceDto = device; + device.VariableTables.Remove(variableTableDto); + } OnVariableTableChanged(new VariableTableChangedEventArgs( diff --git a/DMS.WPF/Services/DataServices.cs b/DMS.WPF/Services/DataServices.cs index a37be73..f33c5be 100644 --- a/DMS.WPF/Services/DataServices.cs +++ b/DMS.WPF/Services/DataServices.cs @@ -106,7 +106,7 @@ public partial class DataServices : ObservableObject //更新当前界面 Devices.Add(_mapper.Map(addDto.Device)); AddMenuItem(_mapper.Map(addDto.DeviceMenu)); - AddVariableTable(_mapper.Map(addDto.VariableTable)); + await AddVariableTable(addDto.VariableTable); AddMenuItem(_mapper.Map(addDto.VariableTableMenu)); //更新数据中心 _dataCenterService.AddDeviceToMemory(addDto.Device); @@ -135,16 +135,7 @@ public partial class DataServices : ObservableObject foreach (var variableTable in device.VariableTables) { // 删除与当前变量表关联的所有变量 - foreach (var variable in variableTable.Variables) - { - Variables.Remove(variable); - } - - var variableTableMenu - = Menus.FirstOrDefault(m => m.MenuType == MenuType.VariableTableMenu && m.TargetId == variableTable.Id); - DeleteMenuItem(variableTableMenu); - // 删除变量表 - VariableTables.Remove(variableTable); + DeleteVariableTable(variableTable); } // 2. 删除设备 @@ -167,11 +158,11 @@ public partial class DataServices : ObservableObject } _mapper.Map(device, deviceDto); - if ( await _dataCenterService.UpdateDeviceAsync(deviceDto)> 0) + if (await _dataCenterService.UpdateDeviceAsync(deviceDto) > 0) { var menu = Menus.FirstOrDefault(m => - m.MenuType == MenuType.DeviceMenu && - m.TargetId == device.Id); + m.MenuType == MenuType.DeviceMenu && + m.TargetId == device.Id); if (menu != null) { menu.Header = device.Name; @@ -180,35 +171,96 @@ public partial class DataServices : ObservableObject return true; } + - public void DeleteVariableTableById(int id) + public async Task AddVariableTable(VariableTableDto variableTableDto, + MenuBeanDto menuDto = null, bool isAddDb = false) { - var variableTable = VariableTables.FirstOrDefault(vt => vt.Id == id); - if (variableTable != null) + if (variableTableDto == null) + return false; + + if (isAddDb && menuDto != null) { - // 删除与当前变量表关联的所有变量 - var variablesToDelete = Variables.Where(v => v.VariableTableId == variableTable.Id) - .ToList(); - foreach (var variable in variablesToDelete) + CreateVariableTableWithMenuDto createDto = new CreateVariableTableWithMenuDto(); + createDto.VariableTable = variableTableDto; + createDto.DeviceId = variableTableDto.DeviceId; + createDto.Menu = menuDto; + var resDto = await _dataCenterService.CreateVariableTableAsync(createDto); + _mapper.Map(resDto.VariableTable, variableTableDto); + AddMenuItem(_mapper.Map(resDto.Menu)); + } + + _dataCenterService.AddVariableTableToMemory(variableTableDto); + + var device = Devices.FirstOrDefault(d => d.Id == variableTableDto.DeviceId); + if (device != null) + { + var variableTableItemViewModel = _mapper.Map(variableTableDto); + variableTableItemViewModel.Device = device; + device.VariableTables.Add(variableTableItemViewModel); + VariableTables.Add(variableTableItemViewModel); + } + + return true; + } + + public async Task UpdateVariableTable(VariableTableItemViewModel variableTable) + { + if (variableTable==null) + { + return false; + } + + var variableTableDto = _mapper.Map(variableTable); + if (await _dataCenterService.UpdateVariableTableAsync(variableTableDto) > 0) + { + + _dataCenterService.UpdateVariableTableInMemory(variableTableDto); + + var menu = Menus.FirstOrDefault(m => + m.MenuType == MenuType.VariableTableMenu && + m.TargetId == variableTable.Id); + if (menu != null) { - Variables.Remove(variable); + menu.Header = variableTable.Name; } + + return true; + } + return false; - var device = Devices.FirstOrDefault(d => d.Id == variableTable.DeviceId); - if (device != null) - device.VariableTables.Remove(variableTable); - // 删除变量表 - VariableTables.Remove(variableTable); + } + public async Task DeleteVariableTable(VariableTableItemViewModel variableTable, bool isDeleteDb = false) + { + if (variableTable == null) + { + return false; + } - // 删除与变量表关联的菜单项 - var variableTableMenu - = Menus.FirstOrDefault(m => m.MenuType == MenuType.VariableTableMenu && m.TargetId == variableTable.Id); - if (variableTableMenu != null) + if (isDeleteDb) + { + if (!await _dataCenterService.DeleteVariableTableAsync(variableTable.Id)) { - DeleteMenuItem(variableTableMenu); + return false; } } + + // 删除与当前变量表关联的所有变量 + foreach (var variable in variableTable.Variables) + { + Variables.Remove(variable); + } + + _dataCenterService.RemoveVariableTableFromMemory(variableTable.Id); + + var variableTableMenu + = Menus.FirstOrDefault(m => m.MenuType == MenuType.VariableTableMenu && m.TargetId == variableTable.Id); + DeleteMenuItem(variableTableMenu); + // 删除变量表 + VariableTables.Remove(variableTable); + variableTable.Device.VariableTables.Remove(variableTable); + return true; } @@ -236,8 +288,7 @@ public partial class DataServices : ObservableObject } } - - + public void AddMenuItem(MenuItemViewModel menuItemViewModel) { if (menuItemViewModel == null) @@ -253,19 +304,6 @@ public partial class DataServices : ObservableObject } } - public void AddVariableTable(VariableTableItemViewModel variableTableItemViewModel) - { - if (variableTableItemViewModel == null) - return; - - var device = Devices.FirstOrDefault(d => d.Id == variableTableItemViewModel.DeviceId); - if (device != null) - { - device.VariableTables.Add(variableTableItemViewModel); - VariableTables.Add(variableTableItemViewModel); - } - } - public void AddVariable(VariableItemViewModel variableItem) { if (variableItem == null) @@ -281,7 +319,7 @@ public partial class DataServices : ObservableObject } } - public void DeleteMenuItem(MenuItemViewModel? menuItemViewModel) + private void DeleteMenuItem(MenuItemViewModel? menuItemViewModel) { if (menuItemViewModel == null) { @@ -306,7 +344,7 @@ public partial class DataServices : ObservableObject } - public void DeleteVariableById(int id) + public void DeleteVariable(int id) { var variableItem = Variables.FirstOrDefault(v => v.Id == id); if (variableItem == null) diff --git a/DMS.WPF/ViewModels/DeviceDetailViewModel.cs b/DMS.WPF/ViewModels/DeviceDetailViewModel.cs index ecfb584..0a37533 100644 --- a/DMS.WPF/ViewModels/DeviceDetailViewModel.cs +++ b/DMS.WPF/ViewModels/DeviceDetailViewModel.cs @@ -1,6 +1,7 @@ using AutoMapper; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; +using Dm; using DMS.Application.DTOs; using DMS.Application.Interfaces; using DMS.Core.Enums; @@ -18,8 +19,7 @@ public partial class DeviceDetailViewModel : ViewModelBase, INavigatable private readonly IMapper _mapper; private readonly IDialogService _dialogService; private readonly INavigationService _navigationService; - private readonly IVariableTableAppService _variableTableAppService; - public DataServices DataServices { get; set; } + public DataServices DataServices { get; } [ObservableProperty] private DeviceItemViewModel _currentDevice; @@ -28,12 +28,11 @@ public partial class DeviceDetailViewModel : ViewModelBase, INavigatable private VariableTableItemViewModel _selectedVariableTable; public DeviceDetailViewModel(IMapper mapper, IDialogService dialogService, INavigationService navigationService, - DataServices dataServices, IVariableTableAppService variableTableAppService) + DataServices dataServices) { _mapper = mapper; _dialogService = dialogService; _navigationService = navigationService; - _variableTableAppService = variableTableAppService; DataServices = dataServices; } @@ -54,18 +53,23 @@ public partial class DeviceDetailViewModel : ViewModelBase, INavigatable return; } - CreateVariableTableWithMenuDto createDto = new CreateVariableTableWithMenuDto(); - createDto.VariableTable = _mapper.Map(variableTableItemViewModel); - createDto.DeviceId = CurrentDevice.Id; - createDto.Menu = new MenuBeanDto() + variableTableItemViewModel.DeviceId = CurrentDevice.Id; + var tableMenu = new MenuBeanDto() { Header = variableTableItemViewModel.Name, Icon = SegoeFluentIcons.DataSense.Glyph }; - CreateVariableTableWithMenuDto - resCreateDto = await _variableTableAppService.CreateVariableTableAsync(createDto); - DataServices.AddVariableTable(_mapper.Map(resCreateDto.VariableTable)); - DataServices.AddMenuItem(_mapper.Map(resCreateDto.Menu)); + + if (await DataServices.AddVariableTable(_mapper.Map(variableTableItemViewModel), + tableMenu, true)) + { + NotificationHelper.ShowSuccess($"添加变量表成功:{variableTableItemViewModel.Name}"); + } + else + { + NotificationHelper.ShowError($"添加变量表失败:{variableTableItemViewModel.Name}!!"); + } + } catch (Exception ex) { @@ -96,16 +100,13 @@ public partial class DeviceDetailViewModel : ViewModelBase, INavigatable return; } - int res = await _variableTableAppService.UpdateVariableTableAsync(_mapper.Map(variableTable)); - if (res > 0) + if (await DataServices.UpdateVariableTable(variableTable)) { - var menu = DataServices.Menus.FirstOrDefault(m => - m.MenuType == MenuType.VariableTableMenu && - m.TargetId == variableTable.Id); - if (menu != null) - { - menu.Header = variableTable.Name; - } + NotificationHelper.ShowSuccess($"编辑变量表成功:{variableTable.Name}"); + } + else + { + NotificationHelper.ShowError($"编辑变量表失败:{variableTable.Name}"); } } catch (Exception e) @@ -127,17 +128,16 @@ public partial class DeviceDetailViewModel : ViewModelBase, INavigatable string message = $"确认要删除变量表名为:{SelectedVariableTable.Name} \n\n此操作将同时删除该变量表下的所有变量数据,且无法恢复!"; ConfirmDialogViewModel viewModel = new ConfirmDialogViewModel("删除变量表",message,"删除"); - var res = await _dialogService.ShowDialogAsync(viewModel); - if (res) + if (await _dialogService.ShowDialogAsync(viewModel)) { - var isDel = await _variableTableAppService.DeleteVariableTableAsync(SelectedVariableTable.Id); - if (isDel) + var tableName = SelectedVariableTable.Name; + if (await DataServices.DeleteVariableTable(SelectedVariableTable,true)) { - var delName = SelectedVariableTable.Name; - // 更新界面 - DataServices.DeleteVariableTableById(SelectedVariableTable.Id); - - NotificationHelper.ShowSuccess($"删除变量表成功,变量表名:{delName}"); + NotificationHelper.ShowSuccess($"变量表:{tableName},删除成功。"); + } + else + { + NotificationHelper.ShowError($"变量表:{tableName},删除失败!!!"); } } } @@ -147,22 +147,6 @@ public partial class DeviceDetailViewModel : ViewModelBase, INavigatable } } - // Placeholder for EditDeviceCommand and DeleteDeviceCommand if they are needed here - [RelayCommand] - private async Task EditDevice() - { - // Implement device editing logic, similar to AddDeviceCommand but for existing device - //NotificationHelper.ShowInfo("编辑设备功能待实现。"); - await Task.CompletedTask; - } - - [RelayCommand] - private async Task DeleteDevice() - { - // Implement device deletion logic - //NotificationHelper.ShowInfo("删除设备功能待实现。"); - await Task.CompletedTask; - } public async Task OnNavigatedToAsync(MenuItemViewModel menu) diff --git a/DMS.WPF/ViewModels/VariableTableViewModel.cs b/DMS.WPF/ViewModels/VariableTableViewModel.cs index 4aed29c..4e19327 100644 --- a/DMS.WPF/ViewModels/VariableTableViewModel.cs +++ b/DMS.WPF/ViewModels/VariableTableViewModel.cs @@ -432,7 +432,7 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable foreach (var variable in variablesToDelete) { _variableItemList.Remove(variable); - _dataServices.DeleteVariableById(variable.Id); + _dataServices.DeleteVariable(variable.Id); } // 显示成功通知 NotificationHelper.ShowSuccess($"成功删除 {variablesToDelete.Count} 个变量");