bugfix:修复Mqtt服务器详情页变量值不更新的问题,修复修改Mqtt别名后台不更新的问题,重新调整了别名的架构
This commit is contained in:
@@ -3,7 +3,7 @@ using SqlSugar;
|
||||
namespace DMS.Infrastructure.Entities;
|
||||
|
||||
/// <summary>
|
||||
/// 数据库实体:对应数据库中的 VariableMqttAliases 表。
|
||||
/// 数据库实体:对应数据库中的 MqttAliases 表。
|
||||
/// </summary>
|
||||
public class DbVariableMqttAlias
|
||||
{
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -270,9 +270,12 @@ namespace DMS.Infrastructure.Services.Mqtt
|
||||
StringBuilder sb = new StringBuilder();
|
||||
var now = DateTime.Now;
|
||||
var timestamp = ((DateTimeOffset)now).ToUnixTimeMilliseconds();
|
||||
sb.Append(variableMqtt.MqttServer.MessageHeader.Replace("{timestamp}", timestamp.ToString()));
|
||||
sb.Append(variableMqtt.MqttServer.MessageContent.Replace("{name}", variableMqtt.Alias).Replace("{value}", variableMqtt.Variable.DisplayValue));
|
||||
sb.Append(variableMqtt.MqttServer.MessageFooter);
|
||||
if (!String.IsNullOrWhiteSpace(variableMqtt.MqttServer.MessageHeader))
|
||||
sb.Append(variableMqtt.MqttServer.MessageHeader.Replace("{timestamp}", timestamp.ToString()));
|
||||
if (!String.IsNullOrWhiteSpace(variableMqtt.MqttServer.MessageContent))
|
||||
sb.Append(variableMqtt.MqttServer.MessageContent.Replace("{name}", variableMqtt.Alias).Replace("{value}", variableMqtt.Variable.DisplayValue));
|
||||
if (!String.IsNullOrWhiteSpace(variableMqtt.MqttServer.MessageFooter))
|
||||
sb.Append(variableMqtt.MqttServer.MessageFooter);
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user