using AutoMapper; using DMS.Application.DTOs; using DMS.Application.Interfaces; using DMS.Application.Interfaces.Management; using DMS.WPF.Interfaces; using DMS.WPF.ItemViewModel; namespace DMS.WPF.Services; /// /// MQTT别名数据服务类,负责管理MQTT别名相关的数据和操作。 /// public class MqttAliasDataService : IMqttAliasDataService { private readonly IMapper _mapper; private readonly IAppDataService _appDataService; private readonly IMqttAliasManagementService _mqttAliasManagementService; private readonly IViewDataService _viewDataService; /// /// MqttAliasDataService类的构造函数。 /// /// AutoMapper 实例。 /// 应用数据存储服务实例。 /// MQTT别名管理服务实例。 /// 数据存储服务实例。 public MqttAliasDataService(IMapper mapper, IAppDataService appStorageService, IMqttAliasManagementService mqttAliasManagementService, IViewDataService dataStorageService) { _mapper = mapper; _appDataService = appStorageService; _mqttAliasManagementService = mqttAliasManagementService; _viewDataService = dataStorageService; } /// /// 加载所有MQTT别名数据。 /// public async Task LoadMqttAliases() { try { // 清空现有数据 _viewDataService.MqttAliases.Clear(); // 加载MQTT别名数据 foreach (var mqttAlias in _appDataService.MqttAliases.Values) { MqttAliasItem mqttAliasItem = _mapper.Map(mqttAlias); if(_viewDataService.MqttAliases.TryAdd(mqttAlias.Id, mqttAliasItem)) { if (_viewDataService.MqttServers.TryGetValue(mqttAlias.MqttServerId,out var mqttServerItem)) { mqttServerItem.VariableAliases.Add(mqttAliasItem); mqttAliasItem.MqttServer = mqttServerItem; } if (_viewDataService.Variables.TryGetValue(mqttAlias.VariableId,out var variableItem)) { variableItem.MqttAliases.Add(mqttAliasItem); mqttAliasItem.Variable = variableItem; } } } } catch (Exception ex) { // 记录异常或处理错误 Console.WriteLine($"加载MQTT别名数据时发生错误: {ex.Message}"); } } /// /// 添加MQTT别名。 /// public async Task AssignAliasAsync(MqttAliasItem mqttAlias) { var addMqttAlias = await _mqttAliasManagementService.AssignAliasAsync(_mapper.Map(mqttAlias)); if (_viewDataService.MqttAliases.ContainsKey(addMqttAlias.Id)) { return null; } mqttAlias.Id = addMqttAlias.Id; _viewDataService.MqttAliases.Add(mqttAlias.Id, mqttAlias); if (_viewDataService.MqttServers.TryGetValue(mqttAlias.MqttServerId, out var mqttServerItem)) { mqttAlias.MqttServer = mqttServerItem; mqttServerItem.VariableAliases.Add(mqttAlias); } if (_viewDataService.Variables.TryGetValue(mqttAlias.VariableId, out var variableItem)) { mqttAlias.Variable = variableItem; variableItem.MqttAliases.Add(mqttAlias); } return mqttAlias; } /// /// 更新MQTT别名。 /// public async Task UpdateMqttAlias(MqttAliasItem mqttAlias) { var result = await _mqttAliasManagementService.UpdateAsync(_mapper.Map(mqttAlias)); if (result > 0) { // 更新界面数据 if (_viewDataService.MqttAliases.TryGetValue(mqttAlias.Id, out var existingAlias)) { // 更新现有别名的属性 existingAlias.VariableId = mqttAlias.VariableId; existingAlias.MqttServerId = mqttAlias.MqttServerId; existingAlias.Alias = mqttAlias.Alias; existingAlias.MqttServerName = mqttAlias.MqttServerName; } } return result > 0; } /// /// 删除MQTT别名。 /// public async Task DeleteMqttAlias(MqttAliasItem mqttAlias) { // 从数据库和内存中删除MQTT别名 var result = await _mqttAliasManagementService.DeleteAsync(mqttAlias.Id); if (result ) { if (_viewDataService.MqttServers.TryGetValue(mqttAlias.MqttServerId, out var mqttServerItem)) { mqttServerItem.VariableAliases.Remove(mqttAlias); } if (_viewDataService.Variables.TryGetValue(mqttAlias.VariableId, out var variableItem)) { variableItem.MqttAliases.Remove(mqttAlias); } _viewDataService.MqttAliases.Remove(mqttAlias.Id, out _); } return result; } /// /// 根据ID获取MQTT别名。 /// public async Task GetMqttAliasById(int id) { if (_viewDataService.MqttAliases.TryGetValue(id, out var mqttAliasItem)) { return mqttAliasItem; } // 如果内存中没有,则从数据库查询 var mqttAlias = await _mqttAliasManagementService.AssignAliasAsync(new MqttAlias { Id = id }); if (mqttAlias != null) { var mappedItem = _mapper.Map(mqttAlias); _viewDataService.MqttAliases.TryAdd(mappedItem.Id, mappedItem); return mappedItem; } return null; } }