This commit is contained in:
2025-10-20 22:47:22 +08:00
parent 7ad1b7d5e1
commit b980f989d8
17 changed files with 131 additions and 82 deletions

View File

@@ -12,11 +12,11 @@ public interface IDeviceAppService
/// <summary> /// <summary>
/// 异步根据ID获取设备DTO。 /// 异步根据ID获取设备DTO。
/// </summary> /// </summary>
Task<Device> GetDeviceByIdAsync(int id); Task<Device> GetDeviceByIdAsync(int id);
/// <summary> /// <summary>
/// 异步获取所有设备DTO列表。 /// 异步获取所有设备DTO列表。
/// </summary> /// </summary>
Task<List<Device>> GetAllDevicesAsync(); Task<List<Device>> GetAllDevicesAsync();
/// <summary> /// <summary>
/// 异步创建一个新设备及其关联的变量表和菜单(事务性操作)。 /// 异步创建一个新设备及其关联的变量表和菜单(事务性操作)。
/// </summary> /// </summary>
@@ -27,16 +27,12 @@ public interface IDeviceAppService
/// <summary> /// <summary>
/// 异步更新一个已存在的设备。 /// 异步更新一个已存在的设备。
/// </summary> /// </summary>
Task<int> UpdateDeviceAsync(Device device); Task<int> UpdateDeviceAsync(Device device);
/// <summary> /// <summary>
/// 异步删除一个设备。 /// 异步删除一个设备。
/// </summary> /// </summary>
Task DeleteDeviceAsync(Device device); Task<bool> DeleteAsync(Device device);
/// <summary>
/// 异步删除一个设备。
/// </summary>
Task<bool> DeleteDeviceByIdAsync(int deviceId);
/// <summary> /// <summary>
/// 异步切换设备的激活状态。 /// 异步切换设备的激活状态。
@@ -46,4 +42,5 @@ public interface IDeviceAppService
/// <summary> /// <summary>
/// 异步获取指定协议类型的设备列表。 /// 异步获取指定协议类型的设备列表。
/// </summary> /// </summary>
Task<List<Device>> GetDevicesByProtocolAsync(ProtocolType protocol);} Task<List<Device>> GetDevicesByProtocolAsync(ProtocolType protocol);
}

View File

@@ -28,7 +28,7 @@ public interface IDeviceManagementService
/// <summary> /// <summary>
/// 异步删除一个设备。 /// 异步删除一个设备。
/// </summary> /// </summary>
Task<bool> DeleteDeviceByIdAsync(int deviceId); Task<bool> DeleteAsync(Device device);
/// <summary> /// <summary>
/// 异步切换设备的激活状态。 /// 异步切换设备的激活状态。

View File

@@ -68,6 +68,7 @@ public class DeviceAppService : IDeviceAppService
// 假设有设备菜单 // 假设有设备菜单
if (dto.DeviceMenu is not null) if (dto.DeviceMenu is not null)
{ {
dto.DeviceMenu.TargetId = dto.Device.Id;
dto.DeviceMenu = await _repoManager.Menus.AddAsync(dto.DeviceMenu); dto.DeviceMenu = await _repoManager.Menus.AddAsync(dto.DeviceMenu);
} }
@@ -82,6 +83,7 @@ public class DeviceAppService : IDeviceAppService
{ {
throw new InvalidOperationException($"添加设备变量表失败,设备:{dto.Device.Name},变量表:{dto?.VariableTable?.Name}"); throw new InvalidOperationException($"添加设备变量表失败,设备:{dto.Device.Name},变量表:{dto?.VariableTable?.Name}");
} }
dto.VariableTable.Device = dto.Device;
// 假设有设备菜单 // 假设有设备菜单
if (dto.VariableTableMenu is not null && dto.VariableTableMenu is not null) if (dto.VariableTableMenu is not null && dto.VariableTableMenu is not null)
@@ -136,15 +138,6 @@ public class DeviceAppService : IDeviceAppService
return res; return res;
} }
/// <summary>
/// 异步删除一个设备。
/// </summary>
/// <param name="device">要删除的设备实体。</param>
/// <returns>表示异步操作的任务。</returns>
public async Task DeleteDeviceAsync(Device device)
{
await DeleteDeviceByIdAsync(device.Id);
}
/// <summary> /// <summary>
/// 异步根据ID删除一个设备包括其关联的变量表和菜单事务性操作 /// 异步根据ID删除一个设备包括其关联的变量表和菜单事务性操作
@@ -153,19 +146,19 @@ public class DeviceAppService : IDeviceAppService
/// <returns>如果删除成功则为 true否则为 false。</returns> /// <returns>如果删除成功则为 true否则为 false。</returns>
/// <exception cref="InvalidOperationException">如果删除设备失败。</exception> /// <exception cref="InvalidOperationException">如果删除设备失败。</exception>
/// <exception cref="ApplicationException">如果删除设备时发生其他错误。</exception> /// <exception cref="ApplicationException">如果删除设备时发生其他错误。</exception>
public async Task<bool> DeleteDeviceByIdAsync(int deviceId) public async Task<bool> DeleteAsync(Device device)
{ {
try try
{ {
await _repoManager.BeginTranAsync(); await _repoManager.BeginTranAsync();
var delRes = await _repoManager.Devices.DeleteByIdAsync(deviceId); var delRes = await _repoManager.Devices.DeleteAsync(device);
if (delRes == 0) if (delRes == 0)
{ {
throw new InvalidOperationException($"删除设备失败设备ID:{deviceId}请检查设备Id是否存在"); throw new InvalidOperationException($"删除设备失败设备ID:{device.Id}请检查设备Id是否存在");
} }
// 删除关联的变量表 // 删除关联的变量表
await _repoManager.VariableTables.DeleteByDeviceIdAsync(deviceId); await _repoManager.VariableTables.DeleteAsync(device.VariableTables);
// 删除关联的变量 // 删除关联的变量
await _repoManager.Variables.DeleteByVariableTableIdAsync(deviceId); await _repoManager.Variables.DeleteByVariableTableIdAsync(deviceId);

View File

@@ -45,6 +45,9 @@ public class DeviceManagementService : IDeviceManagementService
/// </summary> /// </summary>
public async Task<CreateDeviceWithDetailsDto> CreateDeviceWithDetailsAsync(CreateDeviceWithDetailsDto dto) public async Task<CreateDeviceWithDetailsDto> CreateDeviceWithDetailsAsync(CreateDeviceWithDetailsDto dto)
{ {
var result = await _deviceAppService.CreateDeviceWithDetailsAsync(dto); var result = await _deviceAppService.CreateDeviceWithDetailsAsync(dto);
// 创建成功后,将设备添加到内存中 // 创建成功后,将设备添加到内存中
@@ -54,10 +57,25 @@ public class DeviceManagementService : IDeviceManagementService
{ {
_eventService.RaiseDeviceChanged(this, new DeviceChangedEventArgs(DataChangeType.Added, result.Device)); _eventService.RaiseDeviceChanged(this, new DeviceChangedEventArgs(DataChangeType.Added, result.Device));
} }
if (_appStorageService.VariableTables.TryAdd(result.VariableTable.Id, result.VariableTable)) if (result.VariableTable is not null)
{ {
_eventService.RaiseVariableTableChanged(this, new VariableTableChangedEventArgs(DataChangeType.Added, result.VariableTable)); if (_appStorageService.VariableTables.TryAdd(result.VariableTable.Id, result.VariableTable))
{
_eventService.RaiseVariableTableChanged(this, new VariableTableChangedEventArgs(DataChangeType.Added, result.VariableTable));
}
} }
if (result.DeviceMenu is not null)
{
_appStorageService.Menus.TryAdd(result.DeviceMenu.Id, result.DeviceMenu);
}
if (result.VariableTableMenu is not null)
{
_appStorageService.Menus.TryAdd(result.VariableTableMenu.Id, result.VariableTableMenu);
}
} }
return result; return result;
@@ -83,13 +101,12 @@ public class DeviceManagementService : IDeviceManagementService
/// <summary> /// <summary>
/// 异步删除一个设备。 /// 异步删除一个设备。
/// </summary> /// </summary>
public async Task<bool> DeleteDeviceByIdAsync(int deviceId) public async Task<bool> DeleteAsync(Device device)
{ {
var device = await _deviceAppService.GetDeviceByIdAsync(deviceId); // 获取设备信息用于内存删除 var result = await _deviceAppService.DeleteDeviceByIdAsync(device);
var result = await _deviceAppService.DeleteDeviceByIdAsync(deviceId);
// 删除成功后,从内存中移除设备 // 删除成功后,从内存中移除设备
if (result && device != null) if (result )
{ {
if (_appStorageService.Devices.TryGetValue(deviceId, out var deviceInStorage)) if (_appStorageService.Devices.TryGetValue(deviceId, out var deviceInStorage))
{ {

View File

@@ -144,9 +144,6 @@ public class MenuRepository : BaseRepository<DbMenu>, IMenuRepository
.ToChildListAsync(c => c.ParentId, menu.Id); .ToChildListAsync(c => c.ParentId, menu.Id);
var delConut = await _dbContext.GetInstance().Deleteable<DbMenu>(childList) var delConut = await _dbContext.GetInstance().Deleteable<DbMenu>(childList)
.ExecuteCommandAsync(); .ExecuteCommandAsync();
delConut += await _dbContext.GetInstance().Deleteable<DbMenu>()
.Where(m => m.Id == menu.Id)
.ExecuteCommandAsync();
stopwatch.Stop(); stopwatch.Stop();
_logger.LogInformation($"Delete {typeof(DbMenu)},TargetId={targetId},耗时:{stopwatch.ElapsedMilliseconds}ms"); _logger.LogInformation($"Delete {typeof(DbMenu)},TargetId={targetId},耗时:{stopwatch.ElapsedMilliseconds}ms");
return delConut; return delConut;

View File

@@ -302,10 +302,10 @@ public partial class App : System.Windows.Application
services.AddSingleton<DMS.Application.Interfaces.IEventService, DMS.Application.Services.EventService>(); services.AddSingleton<DMS.Application.Interfaces.IEventService, DMS.Application.Services.EventService>();
// 注册新的数据服务 // 注册新的数据服务
services.AddSingleton<IDeviceDataService, DeviceWpfService>(); services.AddSingleton<IDeviceDataService, DeviceViewService>();
services.AddSingleton<IVariableDataService, VariableDataService>(); services.AddSingleton<IVariableDataService, VariableDataService>();
services.AddSingleton<IVariableTableDataService, VariableTableDataService>(); services.AddSingleton<IVariableTableDataService, VariableTableDataService>();
services.AddSingleton<IMenuWpfService, MenuWpfService>(); services.AddSingleton<IMenuViewService, MenuViewService>();
services.AddSingleton<IMqttDataService, MqttDataService>(); services.AddSingleton<IMqttDataService, MqttDataService>();
services.AddSingleton<IMqttAliasDataService, MqttAliasDataService>(); services.AddSingleton<IMqttAliasDataService, MqttAliasDataService>();
services.AddSingleton<ILogDataService, LogDataService>(); services.AddSingleton<ILogDataService, LogDataService>();

View File

@@ -187,4 +187,10 @@
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Services\ViewService\" />
</ItemGroup>
</Project> </Project>

View File

@@ -22,7 +22,7 @@ public interface IDeviceDataService
/// <summary> /// <summary>
/// 添加设备。 /// 添加设备。
/// </summary> /// </summary>
Task<CreateDeviceWithDetailsDto> AddDevice(CreateDeviceWithDetailsDto dto); Task<CreateDeviceWithDetailsDto?> AddDeviceAsync(CreateDeviceWithDetailsDto dto);
/// <summary> /// <summary>
/// 删除设备。 /// 删除设备。
@@ -33,5 +33,4 @@ public interface IDeviceDataService
/// 更新设备。 /// 更新设备。
/// </summary> /// </summary>
Task<bool> UpdateDevice(DeviceItem device); Task<bool> UpdateDevice(DeviceItem device);
Task<CreateDeviceWithDetailsDto?> AddDevice(CreateDeviceWithDetailsDto dto);
} }

View File

@@ -6,7 +6,7 @@ namespace DMS.WPF.Interfaces;
/// <summary> /// <summary>
/// 菜单数据服务接口。 /// 菜单数据服务接口。
/// </summary> /// </summary>
public interface IMenuWpfService public interface IMenuViewService
{ {

View File

@@ -24,7 +24,7 @@ public interface IWPFDataService
/// <summary> /// <summary>
/// 菜单数据服务。 /// 菜单数据服务。
/// </summary> /// </summary>
IMenuWpfService MenuDataService { get; } IMenuViewService MenuDataService { get; }
/// <summary> /// <summary>
/// MQTT数据服务。 /// MQTT数据服务。

View File

@@ -9,13 +9,14 @@ using DMS.Core.Enums;
using DMS.Core.Events; using DMS.Core.Events;
using DMS.WPF.Interfaces; using DMS.WPF.Interfaces;
using DMS.WPF.ItemViewModel; using DMS.WPF.ItemViewModel;
using DMS.WPF.ViewModels;
namespace DMS.WPF.Services; namespace DMS.WPF.Services;
/// <summary> /// <summary>
/// 设备数据服务类,负责管理设备相关的数据和操作。 /// 设备数据服务类,负责管理设备相关的数据和操作。
/// </summary> /// </summary>
public class DeviceWpfService : IDeviceDataService public class DeviceViewService : IDeviceDataService
{ {
private readonly IMapper _mapper; private readonly IMapper _mapper;
private readonly IAppCenterService _appCenterService; private readonly IAppCenterService _appCenterService;
@@ -24,7 +25,7 @@ public class DeviceWpfService : IDeviceDataService
private readonly IVariableTableDataService _variableTableDataService; private readonly IVariableTableDataService _variableTableDataService;
private readonly IEventService _eventService; private readonly IEventService _eventService;
private readonly INotificationService _notificationService; private readonly INotificationService _notificationService;
private readonly IMenuWpfService _menuDataService; private readonly IMenuViewService _menuDataService;
private readonly IVariableDataService _variableDataService; private readonly IVariableDataService _variableDataService;
private readonly Dispatcher _uiDispatcher; private readonly Dispatcher _uiDispatcher;
@@ -33,12 +34,12 @@ public class DeviceWpfService : IDeviceDataService
/// </summary> /// </summary>
/// <param name="mapper">AutoMapper 实例。</param> /// <param name="mapper">AutoMapper 实例。</param>
/// <param name="appCenterService">数据服务中心实例。</param> /// <param name="appCenterService">数据服务中心实例。</param>
public DeviceWpfService(IMapper mapper, IAppCenterService appCenterService, public DeviceViewService(IMapper mapper, IAppCenterService appCenterService,
IAppStorageService appStorageService, IWpfDataService dataStorageService, IVariableTableDataService variableTableDataService, IAppStorageService appStorageService, IWpfDataService dataStorageService,
IVariableTableDataService variableTableDataService,
IEventService eventService, INotificationService notificationService, IEventService eventService, INotificationService notificationService,
IMenuWpfService menuDataService, IVariableDataService variableDataService) IMenuViewService menuDataService, IVariableDataService variableDataService)
{ {
_mapper = mapper; _mapper = mapper;
_appCenterService = appCenterService; _appCenterService = appCenterService;
_appStorageService = appStorageService; _appStorageService = appStorageService;
@@ -60,10 +61,8 @@ public class DeviceWpfService : IDeviceDataService
{ {
_uiDispatcher.Invoke(() => _uiDispatcher.Invoke(() =>
{ {
if (_dataStorageService.Devices.TryGetValue(e.DeviceId, out DeviceItem device)) if (_dataStorageService.Devices.TryGetValue(e.DeviceId, out DeviceItem device))
{ {
device.IsRunning = e.StateValue; device.IsRunning = e.StateValue;
if (device.IsRunning) if (device.IsRunning)
{ {
@@ -92,10 +91,27 @@ public class DeviceWpfService : IDeviceDataService
/// <summary> /// <summary>
/// 添加设备。 /// 添加设备。
/// </summary> /// </summary>
public async Task<CreateDeviceWithDetailsDto?> AddDevice(CreateDeviceWithDetailsDto dto) public async Task<CreateDeviceWithDetailsDto?> AddDeviceAsync(CreateDeviceWithDetailsDto dto)
{ {
// 添加null检查 // 添加null检查
if (dto is null) return null; if (dto is null) return null;
if (dto.VariableTable is not null)
{
dto.VariableTable.Protocol = dto.Device.Protocol;
dto.VariableTableMenu.MenuType = MenuType.VariableTableMenu;
}
//查找到设备的根菜单
var parentMenu
= _appStorageService.Menus.Values.FirstOrDefault(m => m.TargetViewKey == nameof(DevicesViewModel) &&
m.TargetId == 0);
if (parentMenu is not null)
{
dto.DeviceMenu.MenuType = MenuType.DeviceMenu;
dto.DeviceMenu.ParentId = parentMenu.Id;
}
var addDto = await _appCenterService.DeviceManagementService.CreateDeviceWithDetailsAsync(dto); var addDto = await _appCenterService.DeviceManagementService.CreateDeviceWithDetailsAsync(dto);
@@ -109,10 +125,8 @@ public class DeviceWpfService : IDeviceDataService
if (addDto.DeviceMenu != null) if (addDto.DeviceMenu != null)
{ {
_menuDataService.AddMenuToView(_mapper.Map<MenuItem>(addDto.DeviceMenu)); _menuDataService.AddMenuToView(_mapper.Map<MenuItem>(addDto.DeviceMenu));
} }
// 添加变量表和变量表菜单 // 添加变量表和变量表菜单
if (addDto.VariableTable != null) if (addDto.VariableTable != null)
{ {
@@ -123,41 +137,47 @@ public class DeviceWpfService : IDeviceDataService
{ {
_menuDataService.AddMenuToView(_mapper.Map<MenuItem>(addDto.VariableTableMenu)); _menuDataService.AddMenuToView(_mapper.Map<MenuItem>(addDto.VariableTableMenu));
} }
} }
return addDto; return addDto;
} }
/// <summary> /// <summary>
/// 删除设备。 /// 删除设备。
/// </summary> /// </summary>
public async Task<bool> DeleteDevice(DeviceItem device) public async Task<bool> DeleteDevice(DeviceItem deviceItem)
{ {
if (!_appStorageService.Devices.TryGetValue(deviceItem.Id,out var device))
{
return false;
}
//从数据库和内存中删除设备相关数据 //从数据库和内存中删除设备相关数据
if (!await _appCenterService.DeviceManagementService.DeleteDeviceByIdAsync(device.Id)) bool res = await _appCenterService.DeviceManagementService.DeleteAsync(device);
if (!res)
{ {
return false; return false;
} }
// 从界面删除设备相关数据集 // 从界面删除设备相关数据集
var variableTablesCopy = device.VariableTables.ToList(); var variableTablesCopy = deviceItem.VariableTables.ToList();
foreach (var variableTable in variableTablesCopy) foreach (var variableTable in variableTablesCopy)
{ {
await _variableTableDataService.DeleteVariableTable(variableTable); await _variableTableDataService.DeleteVariableTable(variableTable);
} }
var deviceMenu = _dataStorageService.Menus.FirstOrDefault(m => m.MenuType == MenuType.DeviceMenu && m.TargetId == device.Id); var deviceMenu
= _dataStorageService.Menus.FirstOrDefault(m => m.MenuType == MenuType.DeviceMenu &&
m.TargetId == deviceItem.Id);
if (deviceMenu != null) if (deviceMenu != null)
{ {
await _menuDataService.DeleteMenuItem(deviceMenu); await _menuDataService.DeleteMenuItem(deviceMenu);
} }
_dataStorageService.Devices.Remove(device.Id);
_dataStorageService.Devices.Remove(deviceItem.Id);
return true; return true;

View File

@@ -13,7 +13,7 @@ namespace DMS.WPF.Services;
/// <summary> /// <summary>
/// 菜单数据服务类,负责管理菜单相关的数据和操作。 /// 菜单数据服务类,负责管理菜单相关的数据和操作。
/// </summary> /// </summary>
public class MenuWpfService : IMenuWpfService public class MenuViewService : IMenuViewService
{ {
private readonly IMapper _mapper; private readonly IMapper _mapper;
private readonly IWpfDataService _wpfDataService; private readonly IWpfDataService _wpfDataService;
@@ -27,7 +27,7 @@ public class MenuWpfService : IMenuWpfService
/// </summary> /// </summary>
/// <param name="mapper">AutoMapper 实例。</param> /// <param name="mapper">AutoMapper 实例。</param>
/// <param name="appStorageService">数据服务中心实例。</param> /// <param name="appStorageService">数据服务中心实例。</param>
public MenuWpfService(IMapper mapper, IWpfDataService dataStorageService, IAppStorageService appStorageService, IMenuManagementService menuManagementService) public MenuViewService(IMapper mapper, IWpfDataService dataStorageService, IAppStorageService appStorageService, IMenuManagementService menuManagementService)
{ {
_mapper = mapper; _mapper = mapper;
_wpfDataService = dataStorageService; _wpfDataService = dataStorageService;
@@ -46,7 +46,16 @@ public class MenuWpfService : IMenuWpfService
/// </summary> /// </summary>
public void BuildMenuTrees() public void BuildMenuTrees()
{ {
_wpfDataService.MenuTrees.Clear(); // 创建一个新的临时列表来存储根菜单
var newRootMenus = new List<MenuItem>();
// 首先确保所有菜单项的Children集合是干净的
foreach (var menu in _wpfDataService.Menus)
{
// 避免循环引用清空Children集合
menu.Children.Clear();
}
// 遍历所有菜单项,构建树形结构 // 遍历所有菜单项,构建树形结构
foreach (var menu in _wpfDataService.Menus) foreach (var menu in _wpfDataService.Menus)
{ {
@@ -63,9 +72,16 @@ public class MenuWpfService : IMenuWpfService
else else
{ {
// 如果没有父ID则这是一个根菜单 // 如果没有父ID则这是一个根菜单
_wpfDataService.MenuTrees.Add(menu); newRootMenus.Add(menu);
} }
} }
// 在UI线程安全地更新MenuTrees集合
_wpfDataService.MenuTrees.Clear();
foreach (var rootMenu in newRootMenus)
{
_wpfDataService.MenuTrees.Add(rootMenu);
}
} }
/// <summary> /// <summary>
@@ -75,14 +91,17 @@ public class MenuWpfService : IMenuWpfService
{ {
if (MenuItem is null) return; if (MenuItem is null) return;
var deviceMenu = _wpfDataService.Menus.FirstOrDefault(m => m.Id == MenuItem.ParentId); var parentMenu = _wpfDataService.Menus.FirstOrDefault(m => m.Id == MenuItem.ParentId);
if (deviceMenu is not null) if (parentMenu is not null)
{ {
// 首先添加到菜单列表
deviceMenu.Children.Add(MenuItem);
_wpfDataService.Menus.Add(MenuItem); _wpfDataService.Menus.Add(MenuItem);
BuildMenuTrees();
// 然后将当前菜单添加到父菜单的Children列表中
if (!parentMenu.Children.Contains(MenuItem))
{
parentMenu.Children.Add(MenuItem);
}
} }
} }
@@ -119,7 +138,7 @@ public class MenuWpfService : IMenuWpfService
// 从扁平菜单列表中移除 // 从扁平菜单列表中移除
_wpfDataService.Menus.Remove(MenuItem); _wpfDataService.Menus.Remove(MenuItem);
//// 从树形结构中移除 // 从树形结构中移除
if (MenuItem.ParentId.HasValue && MenuItem.ParentId.Value != 0) if (MenuItem.ParentId.HasValue && MenuItem.ParentId.Value != 0)
{ {
// 如果有父菜单从父菜单的Children中移除 // 如果有父菜单从父菜单的Children中移除
@@ -132,6 +151,7 @@ public class MenuWpfService : IMenuWpfService
_wpfDataService.MenuTrees.Remove(MenuItem); _wpfDataService.MenuTrees.Remove(MenuItem);
} }
//BuildMenuTrees(); // 重新构建整个菜单树以确保一致性
BuildMenuTrees();
} }
} }

View File

@@ -19,7 +19,7 @@ public class MqttDataService : IMqttDataService
private readonly IMapper _mapper; private readonly IMapper _mapper;
private readonly IAppStorageService _appStorageService; private readonly IAppStorageService _appStorageService;
private readonly IMqttManagementService _mqttManagementService; private readonly IMqttManagementService _mqttManagementService;
private readonly IMenuWpfService _menuDataService; private readonly IMenuViewService _menuDataService;
private readonly IMenuManagementService _menuManagementServiceImpl; private readonly IMenuManagementService _menuManagementServiceImpl;
private readonly IWpfDataService _dataStorageService; private readonly IWpfDataService _dataStorageService;
@@ -29,7 +29,7 @@ public class MqttDataService : IMqttDataService
/// </summary> /// </summary>
/// <param name="mapper">AutoMapper 实例。</param> /// <param name="mapper">AutoMapper 实例。</param>
/// <param name="mqttAppService">MQTT应用服务实例。</param> /// <param name="mqttAppService">MQTT应用服务实例。</param>
public MqttDataService(IMapper mapper, IAppStorageService appStorageService, IMqttManagementService mqttManagementService, IMenuWpfService menuDataService, IMenuManagementService menuManagementServiceImpl, IWpfDataService dataStorageService) public MqttDataService(IMapper mapper, IAppStorageService appStorageService, IMqttManagementService mqttManagementService, IMenuViewService menuDataService, IMenuManagementService menuManagementServiceImpl, IWpfDataService dataStorageService)
{ {
_mapper = mapper; _mapper = mapper;
_appStorageService = appStorageService; _appStorageService = appStorageService;
@@ -87,7 +87,7 @@ public class MqttDataService : IMqttDataService
MenuType = MenuType.MqttServerMenu, MenuType = MenuType.MqttServerMenu,
TargetViewKey = nameof(MqttServerDetailViewModel), TargetViewKey = nameof(MqttServerDetailViewModel),
}; };
await _menuDataService.AddMenuToView(_mapper.Map<MenuItem>(mqttServerMenu)); _menuDataService.AddMenuToView(_mapper.Map<MenuItem>(mqttServerMenu));
} }
return mqttServerItem; return mqttServerItem;

View File

@@ -24,7 +24,7 @@ public class TriggerDataService : ITriggerDataService
{ {
private readonly IMapper _mapper; private readonly IMapper _mapper;
private readonly IAppCenterService _appCenterService; private readonly IAppCenterService _appCenterService;
private readonly IMenuWpfService _menuDataService; private readonly IMenuViewService _menuDataService;
private readonly IAppStorageService _appStorageService; private readonly IAppStorageService _appStorageService;
private readonly IWpfDataService _dataStorageService; private readonly IWpfDataService _dataStorageService;
private readonly IEventService _eventService; private readonly IEventService _eventService;
@@ -41,7 +41,7 @@ public class TriggerDataService : ITriggerDataService
/// <param name="eventService">事件服务实例。</param> /// <param name="eventService">事件服务实例。</param>
/// <param name="notificationService">通知服务实例。</param> /// <param name="notificationService">通知服务实例。</param>
public TriggerDataService(IMapper mapper, IAppCenterService appCenterService, public TriggerDataService(IMapper mapper, IAppCenterService appCenterService,
IMenuWpfService menuDataService, IMenuViewService menuDataService,
IAppStorageService appStorageService, IWpfDataService dataStorageService, IAppStorageService appStorageService, IWpfDataService dataStorageService,
IEventService eventService, INotificationService notificationService) IEventService eventService, INotificationService notificationService)
{ {
@@ -111,7 +111,7 @@ public class TriggerDataService : ITriggerDataService
Icon = "\uE945", // 使用触发器图标 Icon = "\uE945", // 使用触发器图标
TargetViewKey = nameof(TriggerDetailViewModel), TargetViewKey = nameof(TriggerDetailViewModel),
}; };
await _menuDataService.AddMenuToView(menuItem); _menuDataService.AddMenuToView(menuItem);
} }

View File

@@ -14,12 +14,12 @@ public class VariableTableDataService : IVariableTableDataService
private readonly IMapper _mapper; private readonly IMapper _mapper;
private readonly IWpfDataService _dataStorageService; private readonly IWpfDataService _dataStorageService;
private readonly IAppCenterService _appCenterService; private readonly IAppCenterService _appCenterService;
private readonly IMenuWpfService _menuDataService; private readonly IMenuViewService _menuDataService;
public VariableTableDataService(IMapper mapper, IWpfDataService dataStorageService, IAppCenterService appCenterService, public VariableTableDataService(IMapper mapper, IWpfDataService dataStorageService, IAppCenterService appCenterService,
IMenuWpfService menuDataService) IMenuViewService menuDataService)
{ {
_mapper = mapper; _mapper = mapper;
_dataStorageService = dataStorageService; _dataStorageService = dataStorageService;
@@ -53,7 +53,7 @@ public class VariableTableDataService : IVariableTableDataService
createDto.Menu = menuDto; createDto.Menu = menuDto;
var resDto = await _appCenterService.VariableTableManagementService.CreateVariableTableAsync(createDto); var resDto = await _appCenterService.VariableTableManagementService.CreateVariableTableAsync(createDto);
await _menuDataService.AddMenuToView(_mapper.Map<MenuItem>(resDto.Menu)); _menuDataService.AddMenuToView(_mapper.Map<MenuItem>(resDto.Menu));
return resDto.VariableTable.Id; return resDto.VariableTable.Id;
} }

View File

@@ -32,7 +32,7 @@ public class WPFDataService : IWPFDataService
/// <summary> /// <summary>
/// 菜单数据服务。 /// 菜单数据服务。
/// </summary> /// </summary>
public IMenuWpfService MenuDataService { get; } public IMenuViewService MenuDataService { get; }
/// <summary> /// <summary>
/// MQTT数据服务。 /// MQTT数据服务。
@@ -62,7 +62,7 @@ public class WPFDataService : IWPFDataService
IAppCenterService appCenterService, IAppCenterService appCenterService,
IDeviceDataService deviceDataService, IDeviceDataService deviceDataService,
IVariableDataService variableDataService, IVariableDataService variableDataService,
IMenuWpfService menuDataService, IMenuViewService menuDataService,
IMqttDataService mqttDataService, IMqttDataService mqttDataService,
ILogDataService logDataService, ILogDataService logDataService,
IVariableTableDataService variableTableDataService, IVariableTableDataService variableTableDataService,

View File

@@ -132,7 +132,7 @@ public partial class DevicesViewModel : ViewModelBase, INavigatable
// 添加null检查 // 添加null检查
if (_wpfDataService != null && _wpfDataService.DeviceDataService != null) if (_wpfDataService != null && _wpfDataService.DeviceDataService != null)
{ {
var addDto = await _wpfDataService.DeviceDataService.AddDevice(dto); var addDto = await _wpfDataService.DeviceDataService.AddDeviceAsync(dto);
// 添加null检查 // 添加null检查
if (addDto != null && addDto.Device != null && _notificationService != null) if (addDto != null && addDto.Device != null && _notificationService != null)