feat: 菜单管理重构及MQTT服务器功能增强
This commit is contained in:
@@ -112,7 +112,6 @@ public class DeviceDataService : IDeviceDataService
|
||||
if (addDto.DeviceMenu != null)
|
||||
{
|
||||
_menuDataService.AddMenuItem(_mapper.Map<MenuItemViewModel>(addDto.DeviceMenu));
|
||||
_appDataCenterService.MenuManagementService.AddMenuToMemory(addDto.DeviceMenu);
|
||||
|
||||
}
|
||||
|
||||
@@ -126,15 +125,11 @@ public class DeviceDataService : IDeviceDataService
|
||||
if (addDto.VariableTable != null && addDto.VariableTableMenu != null)
|
||||
{
|
||||
_menuDataService.AddMenuItem(_mapper.Map<MenuItemViewModel>(addDto.VariableTableMenu));
|
||||
_appDataCenterService.MenuManagementService.AddMenuToMemory(addDto.VariableTableMenu);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 添加null检查
|
||||
_menuDataService.BuildMenuTrees();
|
||||
|
||||
|
||||
return addDto;
|
||||
|
||||
@@ -1,8 +1,12 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using AutoMapper;
|
||||
using DMS.Application.DTOs;
|
||||
using DMS.Application.Interfaces;
|
||||
using DMS.Application.Interfaces.Management;
|
||||
using DMS.Application.Services.Management;
|
||||
using DMS.WPF.Interfaces;
|
||||
using DMS.WPF.ViewModels.Items;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace DMS.WPF.Services;
|
||||
|
||||
@@ -14,6 +18,7 @@ public class MenuDataService : IMenuDataService
|
||||
private readonly IMapper _mapper;
|
||||
private readonly IDataStorageService _dataStorageService;
|
||||
private readonly IAppDataStorageService _appDataStorageService;
|
||||
private readonly IMenuManagementService _menuManagementService;
|
||||
|
||||
|
||||
|
||||
@@ -22,11 +27,12 @@ public class MenuDataService : IMenuDataService
|
||||
/// </summary>
|
||||
/// <param name="mapper">AutoMapper 实例。</param>
|
||||
/// <param name="appDataStorageService">数据服务中心实例。</param>
|
||||
public MenuDataService(IMapper mapper,IDataStorageService dataStorageService, IAppDataStorageService appDataStorageService)
|
||||
public MenuDataService(IMapper mapper,IDataStorageService dataStorageService, IAppDataStorageService appDataStorageService,IMenuManagementService menuManagementService)
|
||||
{
|
||||
_mapper = mapper;
|
||||
_dataStorageService = dataStorageService;
|
||||
_appDataStorageService = appDataStorageService;
|
||||
_menuManagementService = menuManagementService;
|
||||
}
|
||||
|
||||
public void LoadAllMenus()
|
||||
@@ -65,18 +71,23 @@ public class MenuDataService : IMenuDataService
|
||||
/// <summary>
|
||||
/// 添加菜单项。
|
||||
/// </summary>
|
||||
public void AddMenuItem(MenuItemViewModel menuItemViewModel)
|
||||
public async Task AddMenuItem(MenuItemViewModel menuItemViewModel)
|
||||
{
|
||||
if (menuItemViewModel == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (menuItemViewModel is null) return;
|
||||
|
||||
var deviceMenu = _dataStorageService.Menus.FirstOrDefault(m => m.Id == menuItemViewModel.ParentId);
|
||||
if (deviceMenu != null)
|
||||
if (deviceMenu is not null)
|
||||
{
|
||||
deviceMenu.Children.Add(menuItemViewModel);
|
||||
_dataStorageService.Menus.Add(menuItemViewModel);
|
||||
|
||||
var menuId= await _menuManagementService.CreateMenuAsync(_mapper.Map<MenuBeanDto>(menuItemViewModel));
|
||||
if (menuId>0)
|
||||
{
|
||||
menuItemViewModel.Id = menuId;
|
||||
deviceMenu.Children.Add(menuItemViewModel);
|
||||
_dataStorageService.Menus.Add(menuItemViewModel);
|
||||
BuildMenuTrees();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,17 +95,16 @@ public class MenuDataService : IMenuDataService
|
||||
/// <summary>
|
||||
/// 删除菜单项。
|
||||
/// </summary>
|
||||
public void DeleteMenuItem(MenuItemViewModel? menuItemViewModel)
|
||||
public async Task DeleteMenuItem(MenuItemViewModel? menuItemViewModel)
|
||||
{
|
||||
if (menuItemViewModel == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (menuItemViewModel is null) return;
|
||||
|
||||
await _menuManagementService.DeleteMenuAsync(menuItemViewModel.Id);
|
||||
|
||||
// 从扁平菜单列表中移除
|
||||
_dataStorageService.Menus.Remove(menuItemViewModel);
|
||||
|
||||
// 从树形结构中移除
|
||||
//// 从树形结构中移除
|
||||
if (menuItemViewModel.ParentId.HasValue && menuItemViewModel.ParentId.Value != 0)
|
||||
{
|
||||
// 如果有父菜单,从父菜单的Children中移除
|
||||
@@ -106,5 +116,7 @@ public class MenuDataService : IMenuDataService
|
||||
// 如果是根菜单,从MenuTrees中移除
|
||||
_dataStorageService.MenuTrees.Remove(menuItemViewModel);
|
||||
}
|
||||
|
||||
//BuildMenuTrees();
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,10 @@
|
||||
using System.Collections.ObjectModel;
|
||||
using AutoMapper;
|
||||
using CommunityToolkit.Mvvm.ComponentModel;
|
||||
using DMS.Application.DTOs;
|
||||
using DMS.Application.Interfaces;
|
||||
using DMS.Application.Interfaces.Database;
|
||||
using DMS.Application.Interfaces.Management;
|
||||
using DMS.Core.Enums;
|
||||
using DMS.WPF.Interfaces;
|
||||
using DMS.WPF.ViewModels;
|
||||
using DMS.WPF.ViewModels.Items;
|
||||
|
||||
namespace DMS.WPF.Services;
|
||||
@@ -18,6 +17,8 @@ public class MqttDataService : IMqttDataService
|
||||
private readonly IMapper _mapper;
|
||||
private readonly IAppDataStorageService _appDataStorageService;
|
||||
private readonly IMqttManagementService _mqttManagementService;
|
||||
private readonly IMenuDataService _menuDataService;
|
||||
private readonly IMenuManagementService _menuManagementServiceImpl;
|
||||
private readonly IDataStorageService _dataStorageService;
|
||||
|
||||
|
||||
@@ -26,11 +27,13 @@ public class MqttDataService : IMqttDataService
|
||||
/// </summary>
|
||||
/// <param name="mapper">AutoMapper 实例。</param>
|
||||
/// <param name="mqttAppService">MQTT应用服务实例。</param>
|
||||
public MqttDataService(IMapper mapper, IAppDataStorageService appDataStorageService,IMqttManagementService mqttManagementService, IDataStorageService dataStorageService)
|
||||
public MqttDataService(IMapper mapper, IAppDataStorageService appDataStorageService, IMqttManagementService mqttManagementService, IMenuDataService menuDataService, IMenuManagementService menuManagementServiceImpl, IDataStorageService dataStorageService)
|
||||
{
|
||||
_mapper = mapper;
|
||||
_appDataStorageService = appDataStorageService;
|
||||
_mqttManagementService = mqttManagementService;
|
||||
_menuDataService = menuDataService;
|
||||
_menuManagementServiceImpl = menuManagementServiceImpl;
|
||||
_dataStorageService = dataStorageService;
|
||||
}
|
||||
|
||||
@@ -44,7 +47,7 @@ public class MqttDataService : IMqttDataService
|
||||
// 加载MQTT服务器数据
|
||||
foreach (var mqttServerDto in _appDataStorageService.MqttServers.Values)
|
||||
{
|
||||
_dataStorageService.MqttServers.TryAdd(mqttServerDto.Id,_mapper.Map<MqttServerItemViewModel>(mqttServerDto));
|
||||
_dataStorageService.MqttServers.TryAdd(mqttServerDto.Id, _mapper.Map<MqttServerItemViewModel>(mqttServerDto));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -61,10 +64,30 @@ public class MqttDataService : IMqttDataService
|
||||
/// </summary>
|
||||
public async Task<MqttServerItemViewModel> AddMqttServer(MqttServerItemViewModel mqttServer)
|
||||
{
|
||||
var mqttServerDto = await _mqttManagementService.CreateMqttServerAsync(_mapper.Map<MqttServerDto>(mqttServer));
|
||||
var mqttServerItem = _mapper.Map<MqttServerItemViewModel>(mqttServerDto);
|
||||
_dataStorageService.MqttServers.Add(mqttServerItem.Id,mqttServerItem);
|
||||
|
||||
|
||||
var addMqttServerDto = await _mqttManagementService.CreateMqttServerAsync(_mapper.Map<MqttServerDto>(mqttServer));
|
||||
|
||||
MqttServerItemViewModel mqttServerItem = _mapper.Map<MqttServerItemViewModel>(addMqttServerDto);
|
||||
|
||||
_dataStorageService.MqttServers.Add(mqttServerItem.Id, mqttServerItem);
|
||||
|
||||
|
||||
var mqttRootMenu = _dataStorageService.Menus.FirstOrDefault(m => m.Header == "Mqtt服务器");
|
||||
|
||||
if (mqttRootMenu is not null)
|
||||
{
|
||||
var mqttServerMenu = new MenuBeanDto()
|
||||
{
|
||||
Header = mqttServerItem.ServerName,
|
||||
TargetId = mqttServerItem.Id,
|
||||
ParentId = mqttRootMenu.Id,
|
||||
Icon = "\uE753", // 使用设备图标
|
||||
MenuType = MenuType.MqttServerMenu,
|
||||
TargetViewKey = nameof(MqttServerDetailViewModel),
|
||||
};
|
||||
await _menuDataService.AddMenuItem(_mapper.Map<MenuItemViewModel>(mqttServerMenu));
|
||||
}
|
||||
|
||||
return mqttServerItem;
|
||||
}
|
||||
|
||||
@@ -74,8 +97,24 @@ public class MqttDataService : IMqttDataService
|
||||
public async Task<bool> UpdateMqttServer(MqttServerItemViewModel mqttServer)
|
||||
{
|
||||
var dto = _mapper.Map<MqttServerDto>(mqttServer);
|
||||
await _mqttManagementService.UpdateMqttServerAsync(dto);
|
||||
return true;
|
||||
var result = await _mqttManagementService.UpdateMqttServerAsync(dto);
|
||||
|
||||
if (result > 0)
|
||||
{
|
||||
// 更新菜单项
|
||||
var menu = _dataStorageService.Menus.FirstOrDefault(m => m.MenuType == MenuType.MqttServerMenu && m.TargetId == mqttServer.Id);
|
||||
if (menu != null)
|
||||
{
|
||||
// 更新菜单标题
|
||||
menu.Header = mqttServer.ServerName;
|
||||
|
||||
// 使用菜单管理服务更新菜单
|
||||
var menuDto = _mapper.Map<MenuBeanDto>(menu);
|
||||
await _menuManagementServiceImpl.UpdateMenuAsync(menuDto);
|
||||
}
|
||||
}
|
||||
|
||||
return result > 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -83,8 +122,23 @@ public class MqttDataService : IMqttDataService
|
||||
/// </summary>
|
||||
public async Task<bool> DeleteMqttServer(MqttServerItemViewModel mqttServer)
|
||||
{
|
||||
await _mqttManagementService.DeleteMqttServerAsync(mqttServer.Id);
|
||||
_dataStorageService.MqttServers.Remove(mqttServer.Id);
|
||||
return true;
|
||||
// 从数据库和内存中删除MQTT服务器
|
||||
var result = await _mqttManagementService.DeleteMqttServerAsync(mqttServer.Id);
|
||||
|
||||
if (result)
|
||||
{
|
||||
// 从界面删除MQTT服务器菜单
|
||||
var mqttServerMenu = _dataStorageService.Menus.FirstOrDefault(m => m.MenuType == MenuType.MqttServerMenu && m.TargetId == mqttServer.Id);
|
||||
|
||||
if (mqttServerMenu != null)
|
||||
{
|
||||
await _menuDataService.DeleteMenuItem(mqttServerMenu);
|
||||
}
|
||||
|
||||
// 从界面删除MQTT服务器
|
||||
_dataStorageService.MqttServers.Remove(mqttServer.Id);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user