Files
DMS/DMS.WPF/Services/MqttDataService.cs

146 lines
4.8 KiB
C#
Raw Permalink Normal View History

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 IAppDataService _appDataService;
private readonly IMqttManagementService _mqttManagementService;
2025-10-20 22:47:22 +08:00
private readonly IMenuViewService _menuDataService;
private readonly IMenuManagementService _menuManagementServiceImpl;
private readonly IViewDataService _viewDataService;
/// <summary>
/// MqttDataService类的构造函数。
/// </summary>
/// <param name="mapper">AutoMapper 实例。</param>
/// <param name="mqttAppService">MQTT应用服务实例。</param>
public MqttDataService(IMapper mapper, IAppDataService appStorageService, IMqttManagementService mqttManagementService, IMenuViewService menuDataService, IMenuManagementService menuManagementServiceImpl, IViewDataService dataStorageService)
{
_mapper = mapper;
_appDataService = appStorageService;
_mqttManagementService = mqttManagementService;
_menuDataService = menuDataService;
_menuManagementServiceImpl = menuManagementServiceImpl;
_viewDataService = dataStorageService;
}
/// <summary>
/// 加载所有MQTT服务器数据。
/// </summary>
public async Task LoadMqttServers()
{
try
{
// 加载MQTT服务器数据
foreach (var mqttServer in _appDataService.MqttServers.Values)
{
_viewDataService.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);
_viewDataService.MqttServers.Add(mqttServerItem.Id, mqttServerItem);
var mqttRootMenu = _viewDataService.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),
};
2025-10-20 22:47:22 +08:00
_menuDataService.AddMenuToView(_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 = _viewDataService.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.UpdateAsync(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 = _viewDataService.Menus.FirstOrDefault(m => m.MenuType == MenuType.MqttServerMenu && m.TargetId == mqttServer.Id);
if (mqttServerMenu != null)
{
_menuDataService.DeleteMenuToView(mqttServerMenu);
}
// 从界面删除MQTT服务器
_viewDataService.MqttServers.Remove(mqttServer.Id);
}
return result;
}
}