完成MQTT服务器的别名设置

This commit is contained in:
2025-09-06 19:41:28 +08:00
parent 5db88f5709
commit 6f0e80e1e2
9 changed files with 83 additions and 10 deletions

View File

@@ -1,3 +1,5 @@
using DMS.Core.Models;
namespace DMS.Application.DTOs;
/// <summary>
@@ -10,4 +12,14 @@ public class VariableMqttAliasDto
public int MqttServerId { get; set; }
public string MqttServerName { get; set; } // 用于UI显示关联的服务器名称
public string Alias { get; set; }
/// <summary>
/// 关联的变量对象。
/// </summary>
public Variable Variable { get; set; }
/// <summary>
/// 关联的MQTT服务器对象。
/// </summary>
public MqttServer MqttServer { get; set; }
}

View File

@@ -36,7 +36,7 @@ public class MappingProfile : Profile
// VariableMqttAlias 映射
CreateMap<VariableMqttAlias, VariableMqttAliasDto>()
.ForMember(dest => dest.MqttServerName, opt => opt.Ignore())
.ForMember(dest => dest.MqttServerName, opt => opt.MapFrom(src => src.MqttServer.ServerName))
.ReverseMap();
// VariableHistory 映射

View File

@@ -57,11 +57,17 @@ public class MqttAliasAppService : IMqttAliasAppService
else
{
// 如果不存在,则创建新的关联
// 获取关联的Variable和MqttServer实体
var variable = await _repoManager.Variables.GetByIdAsync(variableId);
var mqttServer = await _repoManager.MqttServers.GetByIdAsync(mqttServerId);
var newAlias = new VariableMqttAlias
{
VariableId = variableId,
MqttServerId = mqttServerId,
Alias = alias
Alias = alias,
Variable = variable,
MqttServer = mqttServer
};
await _repoManager.VariableMqttAliases.AddAsync(newAlias);
}

View File

@@ -30,8 +30,6 @@ public class MappingProfile : Profile
.ForMember(dest => dest.VariableAliases, opt => opt.Ignore())
.ReverseMap();
CreateMap<DbVariableMqttAlias, VariableMqttAlias>()
.ForMember(dest => dest.Variable, opt => opt.Ignore())
.ForMember(dest => dest.MqttServer, opt => opt.Ignore())
.ReverseMap();
CreateMap<DbMenu, MenuBean>().ReverseMap();

View File

@@ -116,10 +116,43 @@ public class VariableMqttAliasRepository : BaseRepository<DbVariableMqttAlias>,
/// </summary>
public async Task<List<VariableMqttAlias>> GetAliasesForVariableAsync(int variableId)
{
// 查询别名关联并包含关联的Variable和MqttServer信息
var dbList = await Db.Queryable<DbVariableMqttAlias>()
.Where(x => x.VariableId == variableId)
.ToListAsync();
return _mapper.Map<List<VariableMqttAlias>>(dbList);
// 手动加载关联的Variable和MqttServer实体
var variableIds = dbList.Select(x => x.VariableId).Distinct().ToList();
var mqttServerIds = dbList.Select(x => x.MqttServerId).Distinct().ToList();
var variables = await Db.Queryable<DbVariable>()
.In(x => x.Id, variableIds)
.ToListAsync();
var mqttServers = await Db.Queryable<DbMqttServer>()
.In(x => x.Id, mqttServerIds)
.ToListAsync();
// 将关联实体映射到领域模型
var variableDict = variables.ToDictionary(v => v.Id, v => _mapper.Map<Variable>(v));
var mqttServerDict = mqttServers.ToDictionary(m => m.Id, m => _mapper.Map<MqttServer>(m));
// 映射主实体并设置导航属性
var result = _mapper.Map<List<VariableMqttAlias>>(dbList);
foreach (var alias in result)
{
if (variableDict.TryGetValue(alias.VariableId, out var variable))
{
alias.Variable = variable;
}
if (mqttServerDict.TryGetValue(alias.MqttServerId, out var mqttServer))
{
alias.MqttServer = mqttServer;
}
}
return result;
}
/// <summary>
@@ -130,6 +163,24 @@ public class VariableMqttAliasRepository : BaseRepository<DbVariableMqttAlias>,
var dbAlias = await Db.Queryable<DbVariableMqttAlias>()
.Where(x => x.VariableId == variableId && x.MqttServerId == mqttServerId)
.FirstAsync();
return _mapper.Map<VariableMqttAlias>(dbAlias);
if (dbAlias == null)
return null;
// 手动加载关联的Variable和MqttServer实体
var variable = await Db.Queryable<DbVariable>()
.Where(x => x.Id == variableId)
.FirstAsync();
var mqttServer = await Db.Queryable<DbMqttServer>()
.Where(x => x.Id == mqttServerId)
.FirstAsync();
// 映射主实体并设置导航属性
var result = _mapper.Map<VariableMqttAlias>(dbAlias);
result.Variable = _mapper.Map<Variable>(variable);
result.MqttServer = _mapper.Map<MqttServer>(mqttServer);
return result;
}
}

View File

@@ -47,6 +47,7 @@ namespace DMS.WPF.ViewModels.Dialogs
MqttServerId = SelectedMqttServer.Id,
MqttServerName = SelectedMqttServer.ServerName,
MqttServer = SelectedMqttServer,
Variable = variable,
Alias = existingAlias?.Alias ?? GenerateDefaultAlias(variable)
};
@@ -60,7 +61,7 @@ namespace DMS.WPF.ViewModels.Dialogs
private string GenerateDefaultAlias(VariableItemViewModel variable)
{
// 可以根据需要自定义默认别名生成逻辑
return $"{variable.Name}_{Guid.NewGuid().ToString("N")[..8]}";
return $"{variable.Name}";
}
/// <summary>
@@ -93,7 +94,7 @@ namespace DMS.WPF.ViewModels.Dialogs
foreach (var alias in VariableMqttAliases)
{
alias.Alias = $"{prefix}_{alias.VariableId}";
alias.Alias = $"{prefix}_{alias.Variable.Name}";
}
}
}

View File

@@ -21,4 +21,7 @@ public partial class VariableMqttAliasItemViewModel : ObservableObject
[ObservableProperty]
private MqttServerItemViewModel _mqttServer;
[ObservableProperty]
private VariableItemViewModel _variable;
}

View File

@@ -626,7 +626,8 @@ partial class VariableTableViewModel : ViewModelBase, INavigatable
VariableId = originalVariable.Id,
MqttServerId = selectedMqtt.Id,
Alias = editedVariableMqtt.Alias,
MqttServer = selectedMqtt
MqttServer = selectedMqtt,
Variable = originalVariable
};
// originalVariable.MqttAliases.Add(variableMqtt);
}

View File

@@ -33,6 +33,7 @@
<TextBlock Text="MQTT服务器" VerticalAlignment="Center" />
<TextBlock Text="{Binding SelectedMqttServer.ServerName}"
FontWeight="Bold"
FontSize="16"
Margin="5,0,0,0"
VerticalAlignment="Center" />
</StackPanel>
@@ -47,7 +48,7 @@
MaxHeight="500">
<DataGrid.Columns>
<DataGridTextColumn Header="变量名称"
Binding="{Binding VariableId}"
Binding="{Binding Variable.Name}"
IsReadOnly="True"
Width="*" />
<DataGridTextColumn Header="别名"