完成MQTT服务器的别名设置
This commit is contained in:
@@ -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; }
|
||||
}
|
||||
@@ -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 映射
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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}";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,4 +21,7 @@ public partial class VariableMqttAliasItemViewModel : ObservableObject
|
||||
|
||||
[ObservableProperty]
|
||||
private MqttServerItemViewModel _mqttServer;
|
||||
|
||||
[ObservableProperty]
|
||||
private VariableItemViewModel _variable;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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="别名"
|
||||
|
||||
Reference in New Issue
Block a user