初步完成单个变量的历史记录查询

This commit is contained in:
2025-09-17 13:32:29 +08:00
parent 74fde6bd8b
commit 82c355a392
14 changed files with 212 additions and 239 deletions

View File

@@ -14,7 +14,7 @@ namespace DMS.Infrastructure.Repositories;
public abstract class BaseRepository<TEntity>
where TEntity : class, new()
{
private readonly SqlSugarDbContext _dbContext;
protected readonly SqlSugarDbContext _dbContext;
protected readonly ILogger<BaseRepository<TEntity>> _logger;
/// <summary>
@@ -45,7 +45,7 @@ public abstract class BaseRepository<TEntity>
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Insertable(entity)
var result = await _dbContext.GetInstance().Insertable(entity)
.ExecuteReturnEntityAsync();
stopwatch.Stop();
_logger.LogInformation($"Add {typeof(TEntity).Name}耗时:{stopwatch.ElapsedMilliseconds}ms");
@@ -61,7 +61,7 @@ public abstract class BaseRepository<TEntity>
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Updateable(entity)
var result = await _dbContext.GetInstance().Updateable(entity)
.ExecuteCommandAsync();
stopwatch.Stop();
_logger.LogInformation($"Update {typeof(TEntity).Name}耗时:{stopwatch.ElapsedMilliseconds}ms");
@@ -77,7 +77,7 @@ public abstract class BaseRepository<TEntity>
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Deleteable(entity)
var result = await _dbContext.GetInstance().Deleteable(entity)
.ExecuteCommandAsync();
stopwatch.Stop();
_logger.LogInformation($"Delete {typeof(TEntity).Name}耗时:{stopwatch.ElapsedMilliseconds}ms");
@@ -93,7 +93,7 @@ public abstract class BaseRepository<TEntity>
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var entities = await Db.Queryable<TEntity>()
var entities = await _dbContext.GetInstance().Queryable<TEntity>()
.ToListAsync();
stopwatch.Stop();
_logger.LogInformation($"GetAll {typeof(TEntity).Name}耗时:{stopwatch.ElapsedMilliseconds}ms");
@@ -111,7 +111,7 @@ public abstract class BaseRepository<TEntity>
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var entity = await Db.Queryable<TEntity>()
var entity = await _dbContext.GetInstance().Queryable<TEntity>()
.In(id)
.FirstAsync();
stopwatch.Stop();
@@ -128,7 +128,7 @@ public abstract class BaseRepository<TEntity>
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var entity = await Db.Queryable<TEntity>()
var entity = await _dbContext.GetInstance().Queryable<TEntity>()
.In(id)
.FirstAsync();
stopwatch.Stop();
@@ -145,7 +145,7 @@ public abstract class BaseRepository<TEntity>
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Deleteable<TEntity>()
var result = await _dbContext.GetInstance().Deleteable<TEntity>()
.In(ids)
.ExecuteCommandAsync();
stopwatch.Stop();
@@ -162,7 +162,7 @@ public abstract class BaseRepository<TEntity>
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var entity = await Db.Queryable<TEntity>()
var entity = await _dbContext.GetInstance().Queryable<TEntity>()
.FirstAsync(expression);
stopwatch.Stop();
_logger.LogInformation($"GetByCondition {typeof(TEntity).Name}耗时:{stopwatch.ElapsedMilliseconds}ms");
@@ -178,7 +178,7 @@ public abstract class BaseRepository<TEntity>
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Queryable<TEntity>()
var result = await _dbContext.GetInstance().Queryable<TEntity>()
.AnyAsync(expression);
stopwatch.Stop();
_logger.LogInformation($"Exists {typeof(TEntity).Name}耗时:{stopwatch.ElapsedMilliseconds}ms");
@@ -191,7 +191,7 @@ public abstract class BaseRepository<TEntity>
/// <returns>表示异步操作的任务。</returns>
public async Task BeginTranAsync()
{
await Db.BeginTranAsync();
await _dbContext.GetInstance().BeginTranAsync();
}
/// <summary>
@@ -200,7 +200,7 @@ public abstract class BaseRepository<TEntity>
/// <returns>表示异步操作的任务。</returns>
public async Task CommitTranAsync()
{
await Db.CommitTranAsync();
await _dbContext.GetInstance().CommitTranAsync();
}
@@ -210,7 +210,7 @@ public abstract class BaseRepository<TEntity>
/// <returns>表示异步操作的任务。</returns>
public async Task RollbackTranAsync()
{
await Db.RollbackTranAsync();
await _dbContext.GetInstance().RollbackTranAsync();
}
/// <summary>
@@ -222,7 +222,7 @@ public abstract class BaseRepository<TEntity>
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var entity = await Db.Queryable<TEntity>().Take(number).ToListAsync();
var entity = await _dbContext.GetInstance().Queryable<TEntity>().Take(number).ToListAsync();
stopwatch.Stop();
_logger.LogInformation($"TakeAsync {typeof(TEntity).Name}耗时:{stopwatch.ElapsedMilliseconds}ms");
@@ -238,7 +238,7 @@ public abstract class BaseRepository<TEntity>
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Deleteable<TEntity>()
var result = await _dbContext.GetInstance().Deleteable<TEntity>()
.In(id)
.ExecuteCommandAsync();
stopwatch.Stop();
@@ -253,7 +253,7 @@ public abstract class BaseRepository<TEntity>
var retrunEntities = new List<TEntity>();
foreach (var entity in entities)
{
var result = await Db.Insertable(entity).ExecuteReturnEntityAsync();
var result = await _dbContext.GetInstance().Insertable(entity).ExecuteReturnEntityAsync();
retrunEntities.Add(result);
}

View File

@@ -84,7 +84,7 @@ public class DeviceRepository : BaseRepository<DbDevice>, IDeviceRepository
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Deleteable(new DbDevice() { Id = id })
var result = await _dbContext.GetInstance().Deleteable(new DbDevice() { Id = id })
.ExecuteCommandAsync();
stopwatch.Stop();
_logger.LogInformation($"Delete {typeof(DbDevice)},ID={id},耗时:{stopwatch.ElapsedMilliseconds}ms");

View File

@@ -37,7 +37,7 @@ public class MenuRepository : BaseRepository<DbMenu>, IMenuRepository
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var dbMenuTree = await Db.Queryable<DbMenu>()
var dbMenuTree = await _dbContext.GetInstance().Queryable<DbMenu>()
.ToTreeAsync(dm => dm.Childrens, dm => dm.ParentId, 0);
stopwatch.Stop();
_logger.LogInformation($"获取菜单树耗时:{stopwatch.ElapsedMilliseconds}ms");
@@ -99,7 +99,7 @@ public class MenuRepository : BaseRepository<DbMenu>, IMenuRepository
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Deleteable(new DbMenu { Id = id })
var result = await _dbContext.GetInstance().Deleteable(new DbMenu { Id = id })
.ExecuteCommandAsync();
stopwatch.Stop();
_logger.LogInformation($"Delete {typeof(DbMenu)},ID={id},耗时:{stopwatch.ElapsedMilliseconds}ms");
@@ -116,11 +116,11 @@ public class MenuRepository : BaseRepository<DbMenu>, IMenuRepository
var stopwatch = new Stopwatch();
stopwatch.Start();
int delConut = 0;
var childList = await Db.Queryable<DbMenu>()
var childList = await _dbContext.GetInstance().Queryable<DbMenu>()
.ToChildListAsync(c => c.ParentId, id);
delConut = await Db.Deleteable<DbMenu>(childList)
delConut = await _dbContext.GetInstance().Deleteable<DbMenu>(childList)
.ExecuteCommandAsync();
delConut += await Db.Deleteable<DbMenu>()
delConut += await _dbContext.GetInstance().Deleteable<DbMenu>()
.Where(m => m.Id == id)
.ExecuteCommandAsync();
stopwatch.Stop();
@@ -138,13 +138,13 @@ public class MenuRepository : BaseRepository<DbMenu>, IMenuRepository
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var menu = await Db.Queryable<DbMenu>().FirstAsync(m => m.MenuType == menuType && m.TargetId == targetId);
var menu = await _dbContext.GetInstance().Queryable<DbMenu>().FirstAsync(m => m.MenuType == menuType && m.TargetId == targetId);
if (menu == null) return 0;
var childList = await Db.Queryable<DbMenu>()
var childList = await _dbContext.GetInstance().Queryable<DbMenu>()
.ToChildListAsync(c => c.ParentId, menu.Id);
var delConut = await Db.Deleteable<DbMenu>(childList)
var delConut = await _dbContext.GetInstance().Deleteable<DbMenu>(childList)
.ExecuteCommandAsync();
delConut += await Db.Deleteable<DbMenu>()
delConut += await _dbContext.GetInstance().Deleteable<DbMenu>()
.Where(m => m.Id == menu.Id)
.ExecuteCommandAsync();
stopwatch.Stop();
@@ -160,7 +160,7 @@ public class MenuRepository : BaseRepository<DbMenu>, IMenuRepository
/// <returns>对应的菜单实体如果不存在则为null。</returns>
public async Task<MenuBean> GetMenuByTargetIdAsync(MenuType menuType, int targetId)
{
var dbMenu = await Db.Queryable<DbMenu>().FirstAsync(m => m.MenuType == menuType && m.TargetId == targetId);
var dbMenu = await _dbContext.GetInstance().Queryable<DbMenu>().FirstAsync(m => m.MenuType == menuType && m.TargetId == targetId);
return _mapper.Map<MenuBean>(dbMenu);
}

View File

@@ -83,7 +83,7 @@ public class MqttServerRepository : BaseRepository<DbMqttServer>, IMqttServerRep
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Deleteable(new DbMqttServer() { Id = id })
var result = await _dbContext.GetInstance().Deleteable(new DbMqttServer() { Id = id })
.ExecuteCommandAsync();
stopwatch.Stop();
_logger.LogInformation($"Delete {typeof(DbMqttServer)},ID={id},耗时:{stopwatch.ElapsedMilliseconds}ms");

View File

@@ -32,7 +32,7 @@ public class NlogRepository : BaseRepository<DbNlog>, INlogRepository
/// </summary>
public async Task DeleteAllAsync()
{
await Db.Deleteable<DbNlog>().ExecuteCommandAsync();
await _dbContext.GetInstance().Deleteable<DbNlog>().ExecuteCommandAsync();
}
// Nlog 通常是只读或追加的日志,因此像 AddAsync, UpdateAsync, DeleteAsync 这样的修改方法

View File

@@ -71,7 +71,7 @@ namespace DMS.Infrastructure.Repositories
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var rowsAffected = await Db.Deleteable<DbTriggerDefinition>()
var rowsAffected = await _dbContext.GetInstance().Deleteable<DbTriggerDefinition>()
.In(id)
.ExecuteCommandAsync();
stopwatch.Stop();
@@ -86,7 +86,7 @@ namespace DMS.Infrastructure.Repositories
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var dbList = await Db.Queryable<DbTriggerDefinition>()
var dbList = await _dbContext.GetInstance().Queryable<DbTriggerDefinition>()
.Where(t => t.VariableId == variableId)
.ToListAsync();
stopwatch.Stop();

View File

@@ -86,7 +86,7 @@ public class UserRepository : BaseRepository<DbUser>, IUserRepository
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Deleteable(new DbUser() { Id = id })
var result = await _dbContext.GetInstance().Deleteable(new DbUser() { Id = id })
.ExecuteCommandAsync();
stopwatch.Stop();
_logger.LogInformation($"Delete {typeof(DbUser)},ID={id},耗时:{stopwatch.ElapsedMilliseconds}ms");

View File

@@ -85,7 +85,7 @@ public class VariableHistoryRepository : BaseRepository<DbVariableHistory>, IVar
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Deleteable(new DbVariableHistory() { Id = id })
var result = await _dbContext.GetInstance().Deleteable(new DbVariableHistory() { Id = id })
.ExecuteCommandAsync();
stopwatch.Stop();
_logger.LogInformation($"Delete {typeof(DbVariableHistory)},ID={id},耗时:{stopwatch.ElapsedMilliseconds}ms");
@@ -118,7 +118,7 @@ public class VariableHistoryRepository : BaseRepository<DbVariableHistory>, IVar
/// <returns>变量历史记录列表</returns>
public async Task<List<VariableHistory>> GetByVariableIdAsync(int variableId)
{
var dbList = await Db.Queryable<DbVariableHistory>()
var dbList = await _dbContext.GetInstance().Queryable<DbVariableHistory>()
.Where(h => h.VariableId == variableId)
.OrderBy(h => h.Timestamp, SqlSugar.OrderByType.Desc)
.ToListAsync();
@@ -135,7 +135,7 @@ public class VariableHistoryRepository : BaseRepository<DbVariableHistory>, IVar
/// <returns>变量历史记录列表</returns>
public async Task<List<VariableHistory>> GetByVariableIdAsync(int variableId, int? limit = null, DateTime? startTime = null, DateTime? endTime = null)
{
var query = Db.Queryable<DbVariableHistory>()
var query = _dbContext.GetInstance().Queryable<DbVariableHistory>()
.Where(h => h.VariableId == variableId);
// 添加时间范围筛选
@@ -165,7 +165,7 @@ public class VariableHistoryRepository : BaseRepository<DbVariableHistory>, IVar
/// <returns>所有历史记录列表</returns>
public new async Task<List<VariableHistory>> GetAllAsync(int? limit = null, DateTime? startTime = null, DateTime? endTime = null)
{
var query = Db.Queryable<DbVariableHistory>();
var query = _dbContext.GetInstance().Queryable<DbVariableHistory>();
// 添加时间范围筛选
if (startTime.HasValue)

View File

@@ -86,7 +86,7 @@ public class VariableMqttAliasRepository : BaseRepository<DbVariableMqttAlias>,
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Deleteable(new DbVariableMqttAlias() { Id = id })
var result = await _dbContext.GetInstance().Deleteable(new DbVariableMqttAlias() { Id = id })
.ExecuteCommandAsync();
stopwatch.Stop();
_logger.LogInformation($"Delete {typeof(DbVariableMqttAlias)},ID={id},耗时:{stopwatch.ElapsedMilliseconds}ms");
@@ -118,7 +118,7 @@ public class VariableMqttAliasRepository : BaseRepository<DbVariableMqttAlias>,
public async Task<List<VariableMqttAlias>> GetAliasesForVariableAsync(int variableId)
{
// 查询别名关联并包含关联的Variable和MqttServer信息
var dbList = await Db.Queryable<DbVariableMqttAlias>()
var dbList = await _dbContext.GetInstance().Queryable<DbVariableMqttAlias>()
.Where(x => x.VariableId == variableId)
.ToListAsync();
@@ -126,11 +126,11 @@ public class VariableMqttAliasRepository : BaseRepository<DbVariableMqttAlias>,
var variableIds = dbList.Select(x => x.VariableId).Distinct().ToList();
var mqttServerIds = dbList.Select(x => x.MqttServerId).Distinct().ToList();
var variables = await Db.Queryable<DbVariable>()
var variables = await _dbContext.GetInstance().Queryable<DbVariable>()
.In(x => x.Id, variableIds)
.ToListAsync();
var mqttServers = await Db.Queryable<DbMqttServer>()
var mqttServers = await _dbContext.GetInstance().Queryable<DbMqttServer>()
.In(x => x.Id, mqttServerIds)
.ToListAsync();
@@ -161,7 +161,7 @@ public class VariableMqttAliasRepository : BaseRepository<DbVariableMqttAlias>,
/// </summary>
public async Task<VariableMqttAlias> GetByVariableAndServerAsync(int variableId, int mqttServerId)
{
var dbAlias = await Db.Queryable<DbVariableMqttAlias>()
var dbAlias = await _dbContext.GetInstance().Queryable<DbVariableMqttAlias>()
.Where(x => x.VariableId == variableId && x.MqttServerId == mqttServerId)
.FirstAsync();
@@ -169,11 +169,11 @@ public class VariableMqttAliasRepository : BaseRepository<DbVariableMqttAlias>,
return null;
// 手动加载关联的Variable和MqttServer实体
var variable = await Db.Queryable<DbVariable>()
var variable = await _dbContext.GetInstance().Queryable<DbVariable>()
.Where(x => x.Id == variableId)
.FirstAsync();
var mqttServer = await Db.Queryable<DbMqttServer>()
var mqttServer = await _dbContext.GetInstance().Queryable<DbMqttServer>()
.Where(x => x.Id == mqttServerId)
.FirstAsync();

View File

@@ -38,7 +38,7 @@ public class VariableRepository : BaseRepository<DbVariable>, IVariableRepositor
/// <returns>成功添加或更新关联的数量。</returns>
public async Task<int> AddMqttToVariablesAsync(IEnumerable<VariableMqtt> variableMqttList)
{
await Db.BeginTranAsync();
await _dbContext.GetInstance().BeginTranAsync();
try
{
@@ -47,7 +47,7 @@ public class VariableRepository : BaseRepository<DbVariable>, IVariableRepositor
var mqttIds = variableMqttList.Select(vm => vm.Mqtt.Id).Distinct().ToList();
// 1. 一次性查询所有相关的现有别名
var existingAliases = await Db.Queryable<DbVariableMqtt>()
var existingAliases = await _dbContext.GetInstance().Queryable<DbVariableMqtt>()
.Where(it => variableIds.Contains(it.VariableId) && mqttIds.Contains(it.MqttId))
.ToListAsync();
@@ -87,24 +87,24 @@ public class VariableRepository : BaseRepository<DbVariable>, IVariableRepositor
// 2. 批量更新
if (toUpdate.Any())
{
var updateResult = await Db.Updateable(toUpdate).ExecuteCommandAsync();
var updateResult = await _dbContext.GetInstance().Updateable(toUpdate).ExecuteCommandAsync();
affectedCount += updateResult;
}
// 3. 批量插入
if (toInsert.Any())
{
var insertResult = await Db.Insertable(toInsert).ExecuteCommandAsync();
var insertResult = await _dbContext.GetInstance().Insertable(toInsert).ExecuteCommandAsync();
affectedCount += insertResult;
}
await Db.CommitTranAsync();
await _dbContext.GetInstance().CommitTranAsync();
//_logger.LogInformation($"成功为 {variableMqttList.Count()} 个变量请求添加/更新了MQTT服务器关联实际影响 {affectedCount} 个。");
return affectedCount;
}
catch (Exception ex)
{
await Db.RollbackTranAsync();
await _dbContext.GetInstance().RollbackTranAsync();
//_logger.LogError(ex, $"为变量添加MQTT服务器关联时发生错误: {ex.Message}");
// 根据需要,可以向上层抛出异常
throw;
@@ -167,7 +167,7 @@ public class VariableRepository : BaseRepository<DbVariable>, IVariableRepositor
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Deleteable(new DbVariable() { Id = id })
var result = await _dbContext.GetInstance().Deleteable(new DbVariable() { Id = id })
.ExecuteCommandAsync();
stopwatch.Stop();
_logger.LogInformation($"Delete {typeof(DbVariable)},ID={id},耗时:{stopwatch.ElapsedMilliseconds}ms");
@@ -183,7 +183,7 @@ public class VariableRepository : BaseRepository<DbVariable>, IVariableRepositor
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Deleteable<DbVariable>()
var result = await _dbContext.GetInstance().Deleteable<DbVariable>()
.In(ids)
.ExecuteCommandAsync();
stopwatch.Stop();
@@ -217,7 +217,7 @@ public class VariableRepository : BaseRepository<DbVariable>, IVariableRepositor
/// <returns>找到的变量实体如果不存在则返回null。</returns>
public async Task<Variable?> GetByOpcUaNodeIdAsync(string opcUaNodeId)
{
var dbVariable = await Db.Queryable<DbVariable>()
var dbVariable = await _dbContext.GetInstance().Queryable<DbVariable>()
.Where(v => v.OpcUaNodeId == opcUaNodeId)
.FirstAsync();
return dbVariable == null ? null : _mapper.Map<Variable>(dbVariable);
@@ -230,7 +230,7 @@ public class VariableRepository : BaseRepository<DbVariable>, IVariableRepositor
/// <returns>找到的变量实体列表。</returns>
public async Task<List<Variable>> GetByOpcUaNodeIdsAsync(List<string> opcUaNodeIds)
{
var dbVariables = await Db.Queryable<DbVariable>()
var dbVariables = await _dbContext.GetInstance().Queryable<DbVariable>()
.Where(v => opcUaNodeIds.Contains(v.OpcUaNodeId))
.ToListAsync();
return _mapper.Map<List<Variable>>(dbVariables);

View File

@@ -85,7 +85,7 @@ public class VariableTableRepository : BaseRepository<DbVariableTable>, IVariabl
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Deleteable(new DbVariableTable() { Id = id })
var result = await _dbContext.GetInstance().Deleteable(new DbVariableTable() { Id = id })
.ExecuteCommandAsync();
stopwatch.Stop();
_logger.LogInformation($"Delete {typeof(DbVariableTable)},ID={id},耗时:{stopwatch.ElapsedMilliseconds}ms");
@@ -120,7 +120,7 @@ public class VariableTableRepository : BaseRepository<DbVariableTable>, IVariabl
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Deleteable<DbVariableTable>()
var result = await _dbContext.GetInstance().Deleteable<DbVariableTable>()
.Where(it => it.DeviceId == deviceId)
.ExecuteCommandAsync();
stopwatch.Stop();