Files
DMS/DMS.WPF/Services/MqttDataService.cs
David P.G 816827e5e9 refactor: 移除MenuBeanDto,直接使用MenuBean模型
- 删除了 DMS.Application/DTOs/MenuBeanDto.cs 文件
- 在DTOs中将MenuBeanDto类型替换为MenuBean类型
- 更新了IMenuAppService和IMenuManagementService接口中相关方法的参数和返回值类型
- 修改了MenuAppService、MenuManagementService等服务类的实现
- 在DMS.Core/Models/MenuBean.cs中添加了Children属性以支持菜单树结构
- 更新了WPF层相关的菜单处理逻辑
- 修改了映射配置和视图模型中的菜单对象创建方式
- 这一更改简化了数据模型,消除了DTO与模型之间的重复定义,直接在各层之间使用MenuBean实体。
2025-10-13 20:20:09 +08:00

146 lines
4.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using AutoMapper;
using DMS.Application.Interfaces;
using DMS.Application.Interfaces.Management;
using DMS.Core.Enums;
using DMS.WPF.Interfaces;
using DMS.WPF.ViewModels;
using DMS.WPF.ItemViewModel;
using DMS.Core.Models;
using DMS.Application.DTOs;
namespace DMS.WPF.Services;
/// <summary>
/// MQTT数据服务类负责管理MQTT服务器相关的数据和操作。
/// </summary>
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;
/// <summary>
/// MqttDataService类的构造函数。
/// </summary>
/// <param name="mapper">AutoMapper 实例。</param>
/// <param name="mqttAppService">MQTT应用服务实例。</param>
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;
}
/// <summary>
/// 加载所有MQTT服务器数据。
/// </summary>
public async Task LoadMqttServers()
{
try
{
// 加载MQTT服务器数据
foreach (var mqttServer in _appDataStorageService.MqttServers.Values)
{
_dataStorageService.MqttServers.TryAdd(mqttServer.Id, _mapper.Map<MqttServerItem>(mqttServer));
}
}
catch (Exception ex)
{
// 记录异常或处理错误
Console.WriteLine($"加载MQTT服务器数据时发生错误: {ex.Message}");
}
}
/// <summary>
/// 添加MQTT服务器。
/// </summary>
public async Task<MqttServerItem> AddMqttServer(MqttServerItem mqttServer)
{
var addMqttServer = await _mqttManagementService.CreateMqttServerAsync(_mapper.Map<MqttServer>(mqttServer));
MqttServerItem mqttServerItem = _mapper.Map<MqttServerItem>(addMqttServer);
_dataStorageService.MqttServers.Add(mqttServerItem.Id, mqttServerItem);
var mqttRootMenu = _dataStorageService.Menus.FirstOrDefault(m => m.Header == "Mqtt服务器");
if (mqttRootMenu is not null)
{
var mqttServerMenu = new MenuBean()
{
Header = mqttServerItem.ServerName,
TargetId = mqttServerItem.Id,
ParentId = mqttRootMenu.Id,
Icon = "\uE753", // 使用设备图标
MenuType = MenuType.MqttServerMenu,
TargetViewKey = nameof(MqttServerDetailViewModel),
};
await _menuDataService.AddMenuItem(_mapper.Map<MenuItem>(mqttServerMenu));
}
return mqttServerItem;
}
/// <summary>
/// 更新MQTT服务器。
/// </summary>
public async Task<bool> UpdateMqttServer(MqttServerItem mqttServer)
{
var mqttServerModel = _mapper.Map<DMS.Core.Models.MqttServer>(mqttServer);
var result = await _mqttManagementService.UpdateMqttServerAsync(mqttServerModel);
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<MenuBean>(menu);
await _menuManagementServiceImpl.UpdateMenuAsync(menuDto);
}
}
return result > 0;
}
/// <summary>
/// 删除MQTT服务器。
/// </summary>
public async Task<bool> DeleteMqttServer(MqttServerItem mqttServer)
{
// 从数据库和内存中删除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;
}
}