bugfix:修复Mqtt服务器详情页变量值不更新的问题,修复修改Mqtt别名后台不更新的问题,重新调整了别名的架构

This commit is contained in:
2025-10-11 18:07:01 +08:00
parent 6daca3eaf6
commit 2ada4246ff
30 changed files with 527 additions and 275 deletions

View File

@@ -49,7 +49,7 @@ public class RepositoryManager : IRepositoryManager
VariableTables = variableTables;
Variables = variables;
MqttServers = mqttServers;
VariableMqttAliases = variableMqttAliases;
MqttAliases = variableMqttAliases;
Menus = menus;
VariableHistories = variableHistories;
Users = users;
@@ -86,7 +86,7 @@ public class RepositoryManager : IRepositoryManager
/// <summary>
/// 获取变量MQTT别名仓储实例。
/// </summary>
public IVariableMqttAliasRepository VariableMqttAliases { get; set; }
public IVariableMqttAliasRepository MqttAliases { get; set; }
/// <summary>
/// 获取菜单仓储实例。
/// </summary>

View File

@@ -111,77 +111,4 @@ public class VariableMqttAliasRepository : BaseRepository<DbVariableMqttAlias>,
var addedEntities = await base.AddBatchAsync(dbEntities);
return _mapper.Map<List<MqttAlias>>(addedEntities);
}
/// <summary>
/// 异步获取指定变量的所有MQTT别名关联。
/// </summary>
public async Task<List<MqttAlias>> GetAliasesForVariableAsync(int variableId)
{
// 查询别名关联并包含关联的Variable和MqttServer信息
var dbList = await _dbContext.GetInstance().Queryable<DbVariableMqttAlias>()
.Where(x => x.VariableId == variableId)
.ToListAsync();
// 手动加载关联的Variable和MqttServer实体
var variableIds = dbList.Select(x => x.VariableId).Distinct().ToList();
var mqttServerIds = dbList.Select(x => x.MqttServerId).Distinct().ToList();
var variables = await _dbContext.GetInstance().Queryable<DbVariable>()
.In(x => x.Id, variableIds)
.ToListAsync();
var mqttServers = await _dbContext.GetInstance().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<MqttAlias>>(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>
/// 异步根据变量和服务器获取别名关联。
/// </summary>
public async Task<MqttAlias> GetByVariableAndServerAsync(int variableId, int mqttServerId)
{
var dbAlias = await _dbContext.GetInstance().Queryable<DbVariableMqttAlias>()
.Where(x => x.VariableId == variableId && x.MqttServerId == mqttServerId)
.FirstAsync();
if (dbAlias == null)
return null;
// 手动加载关联的Variable和MqttServer实体
var variable = await _dbContext.GetInstance().Queryable<DbVariable>()
.Where(x => x.Id == variableId)
.FirstAsync();
var mqttServer = await _dbContext.GetInstance().Queryable<DbMqttServer>()
.Where(x => x.Id == mqttServerId)
.FirstAsync();
// 映射主实体并设置导航属性
var result = _mapper.Map<MqttAlias>(dbAlias);
result.Variable = _mapper.Map<Variable>(variable);
result.MqttServer = _mapper.Map<MqttServer>(mqttServer);
return result;
}
}