实现MQTT关联变量的别名问题,实现了,同个变量发给不同的MQTT服务器的名称不同

This commit is contained in:
2025-07-17 17:27:16 +08:00
parent 9cffb57b58
commit aea7a21d57
9 changed files with 416 additions and 0 deletions

View File

@@ -0,0 +1,54 @@
using System;
using SqlSugar;
namespace PMSWPF.Data.Entities;
/// <summary>
/// 表示变量数据与MQTT服务器之间的关联实体包含MQTT别名。
/// </summary>
[SugarTable("VariableMqtt")]
public class DbVariableMqtt
{
/// <summary>
/// 关联的唯一标识符。
/// </summary>
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public int Id { get; set; }
/// <summary>
/// 关联的变量数据ID。
/// </summary>
public int VariableDataId { get; set; }
/// <summary>
/// 关联的MQTT服务器ID。
/// </summary>
public int MqttId { get; set; }
/// <summary>
/// 变量在该MQTT服务器上的别名。
/// </summary>
public string MqttAlias { get; set; } = string.Empty;
/// <summary>
/// 创建时间。
/// </summary>
public DateTime CreateTime { get; set; } = DateTime.Now;
/// <summary>
/// 更新时间。
/// </summary>
public DateTime UpdateTime { get; set; } = DateTime.Now;
/// <summary>
/// 导航属性:关联的变量数据。
/// </summary>
[Navigate(NavigateType.ManyToOne, nameof(VariableDataId))]
public DbVariableData? VariableData { get; set; }
/// <summary>
/// 导航属性关联的MQTT服务器。
/// </summary>
[Navigate(NavigateType.ManyToOne, nameof(MqttId))]
public DbMqtt? Mqtt { get; set; }
}

View File

@@ -0,0 +1,123 @@
using PMSWPF.Data.Entities;
using SqlSugar;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace PMSWPF.Data.Repositories;
/// <summary>
/// 变量与MQTT服务器别名关联的数据仓库。
/// </summary>
public class VariableMqttAliasRepository
{
/// <summary>
/// 根据变量ID和MQTT服务器ID获取别名。
/// </summary>
/// <param name="variableDataId">变量数据ID。</param>
/// <param name="mqttId">MQTT服务器ID。</param>
/// <returns>DbVariableMqtt实体如果不存在则为null。</returns>
public async Task<DbVariableMqtt?> GetAliasByVariableAndMqtt(int variableDataId, int mqttId)
{
using (var db = DbContext.GetInstance())
{
return await GetAliasByVariableAndMqtt(variableDataId, mqttId, db);
}
}
/// <summary>
/// 根据变量ID和MQTT服务器ID获取别名。
/// </summary>
/// <param name="variableDataId">变量数据ID。</param>
/// <param name="mqttId">MQTT服务器ID。</param>
/// <param name="db">SqlSugarClient实例。</param>
/// <returns>DbVariableMqtt实体如果不存在则为null。</returns>
public async Task<DbVariableMqtt?> GetAliasByVariableAndMqtt(int variableDataId, int mqttId, SqlSugarClient db)
{
return await db.Queryable<DbVariableMqtt>()
.Where(it => it.VariableDataId == variableDataId && it.MqttId == mqttId)
.FirstAsync();
}
/// <summary>
/// 批量添加变量与MQTT服务器的关联。
/// </summary>
/// <param name="entities">要添加的DbVariableMqtt实体列表。</param>
/// <returns>成功添加的数量。</returns>
public async Task<int> AddManyAsync(IEnumerable<DbVariableMqtt> entities)
{
using (var db = DbContext.GetInstance())
{
return await AddManyAsync(entities, db);
}
}
/// <summary>
/// 批量添加变量与MQTT服务器的关联。
/// </summary>
/// <param name="entities">要添加的DbVariableMqtt实体列表。</param>
/// <param name="db">SqlSugarClient实例。</param>
/// <returns>成功添加的数量。</returns>
public async Task<int> AddManyAsync(IEnumerable<DbVariableMqtt> entities, SqlSugarClient db)
{
return await db.Insertable<DbVariableMqtt>(entities).ExecuteCommandAsync();
}
/// <summary>
/// 更新变量与MQTT服务器的别名。
/// </summary>
/// <param name="variableDataId">变量数据ID。</param>
/// <param name="mqttId">MQTT服务器ID。</param>
/// <param name="newAlias">新的别名。</param>
/// <returns>受影响的行数。</returns>
public async Task<int> UpdateAliasAsync(int variableDataId, int mqttId, string newAlias)
{
using (var db = DbContext.GetInstance())
{
return await UpdateAliasAsync(variableDataId, mqttId, newAlias, db);
}
}
/// <summary>
/// 更新变量与MQTT服务器的别名。
/// </summary>
/// <param name="variableDataId">变量数据ID。</param>
/// <param name="mqttId">MQTT服务器ID。</param>
/// <param name="newAlias">新的别名。</param>
/// <param name="db">SqlSugarClient实例。</param>
/// <returns>受影响的行数。</returns>
public async Task<int> UpdateAliasAsync(int variableDataId, int mqttId, string newAlias, SqlSugarClient db)
{
return await db.Updateable<DbVariableMqtt>()
.SetColumns(it => it.MqttAlias == newAlias)
.Where(it => it.VariableDataId == variableDataId && it.MqttId == mqttId)
.ExecuteCommandAsync();
}
/// <summary>
/// 删除变量与MQTT服务器的关联。
/// </summary>
/// <param name="variableDataId">变量数据ID。</param>
/// <param name="mqttId">MQTT服务器ID。</param>
/// <returns>受影响的行数。</returns>
public async Task<int> DeleteAsync(int variableDataId, int mqttId)
{
using (var db = DbContext.GetInstance())
{
return await DeleteAsync(variableDataId, mqttId, db);
}
}
/// <summary>
/// 删除变量与MQTT服务器的关联。
/// </summary>
/// <param name="variableDataId">变量数据ID。</param>
/// <param name="mqttId">MQTT服务器ID。</param>
/// <param name="db">SqlSugarClient实例。</param>
/// <returns>受影响的行数。</returns>
public async Task<int> DeleteAsync(int variableDataId, int mqttId, SqlSugarClient db)
{
return await db.Deleteable<DbVariableMqtt>()
.Where(it => it.VariableDataId == variableDataId && it.MqttId == mqttId)
.ExecuteCommandAsync();
}
}