修改批量导入变量返回实体,防止Io为0的问题

This commit is contained in:
2025-09-15 13:12:14 +08:00
parent d622d73057
commit 4773e87886
26 changed files with 171 additions and 139 deletions

View File

@@ -246,13 +246,22 @@ public abstract class BaseRepository<TEntity>
return result;
}
public async Task<bool> AddBatchAsync(List<TEntity> entities)
public async Task<List<TEntity>> AddBatchAsync(List<TEntity> entities)
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var result = await Db.Insertable(entities).ExecuteCommandAsync();
var retrunEntities = new List<TEntity>();
foreach (var entity in entities)
{
var result = await Db.Insertable(entity).ExecuteReturnEntityAsync();
retrunEntities.Add(result);
}
stopwatch.Stop();
_logger.LogInformation($"AddBatchAsync {typeof(TEntity).Name}耗时:{stopwatch.ElapsedMilliseconds}ms");
return result > 0;
return retrunEntities;
}
}

View File

@@ -103,9 +103,10 @@ public class DeviceRepository : BaseRepository<DbDevice>, IDeviceRepository
}
public Task<bool> AddBatchAsync(List<Device> entities)
public async Task<List<Device>> AddBatchAsync(List<Device> entities)
{
var dbEntities = _mapper.Map<List<DbDevice>>(entities);
return base.AddBatchAsync(dbEntities);
var addedEntities = await base.AddBatchAsync(dbEntities);
return _mapper.Map<List<Device>>(addedEntities);
}
}

View File

@@ -146,13 +146,19 @@ namespace DMS.Infrastructure.Repositories
/// <summary>
/// 异步批量添加实体。
/// </summary>
public async Task<bool> AddBatchAsync(List<EmailAccount> entities)
public async Task<List<EmailAccount>> AddBatchAsync(List<EmailAccount> entities)
{
var dbEntities = _mapper.Map<List<DbEmailAccount>>(entities);
var result = await Db.Insertable(dbEntities)
.ExecuteCommandAsync();
var insertedEntities = new List<DbEmailAccount>();
return result > 0;
// 使用循环逐个插入实体,这样可以确保返回每个插入的实体
foreach (var entity in dbEntities)
{
var insertedEntity = await Db.Insertable(entity).ExecuteReturnEntityAsync();
insertedEntities.Add(insertedEntity);
}
return _mapper.Map<List<EmailAccount>>(insertedEntities);
}
}
}

View File

@@ -122,13 +122,19 @@ namespace DMS.Infrastructure.Repositories
/// <summary>
/// 异步批量添加实体。
/// </summary>
public async Task<bool> AddBatchAsync(List<EmailLog> entities)
public async Task<List<EmailLog>> AddBatchAsync(List<EmailLog> entities)
{
var dbEntities = _mapper.Map<List<DbEmailLog>>(entities);
var result = await Db.Insertable(dbEntities)
.ExecuteCommandAsync();
var insertedEntities = new List<DbEmailLog>();
return result > 0;
// 使用循环逐个插入实体,这样可以确保返回每个插入的实体
foreach (var entity in dbEntities)
{
var insertedEntity = await Db.Insertable(entity).ExecuteReturnEntityAsync();
insertedEntities.Add(insertedEntity);
}
return _mapper.Map<List<EmailLog>>(insertedEntities);
}
/// <summary>

View File

@@ -122,13 +122,19 @@ namespace DMS.Infrastructure.Repositories
/// <summary>
/// 异步批量添加实体。
/// </summary>
public async Task<bool> AddBatchAsync(List<EmailMessage> entities)
public async Task<List<EmailMessage>> AddBatchAsync(List<EmailMessage> entities)
{
var dbEntities = _mapper.Map<List<DbEmailMessage>>(entities);
var result = await Db.Insertable(dbEntities)
.ExecuteCommandAsync();
var insertedEntities = new List<DbEmailMessage>();
return result > 0;
// 使用循环逐个插入实体,这样可以确保返回每个插入的实体
foreach (var entity in dbEntities)
{
var insertedEntity = await Db.Insertable(entity).ExecuteReturnEntityAsync();
insertedEntities.Add(insertedEntity);
}
return _mapper.Map<List<EmailMessage>>(insertedEntities);
}
/// <summary>

View File

@@ -122,13 +122,19 @@ namespace DMS.Infrastructure.Repositories
/// <summary>
/// 异步批量添加实体。
/// </summary>
public async Task<bool> AddBatchAsync(List<EmailTemplate> entities)
public async Task<List<EmailTemplate>> AddBatchAsync(List<EmailTemplate> entities)
{
var dbEntities = _mapper.Map<List<DbEmailTemplate>>(entities);
var result = await Db.Insertable(dbEntities)
.ExecuteCommandAsync();
var insertedEntities = new List<DbEmailTemplate>();
return result > 0;
// 使用循环逐个插入实体,这样可以确保返回每个插入的实体
foreach (var entity in dbEntities)
{
var insertedEntity = await Db.Insertable(entity).ExecuteReturnEntityAsync();
insertedEntities.Add(insertedEntity);
}
return _mapper.Map<List<EmailTemplate>>(insertedEntities);
}
/// <summary>

View File

@@ -158,14 +158,20 @@ public class InitializeRepository : IInitializeRepository
},
new DbMenu
{
Id = 8, Header = "设置", Icon = "\uE713", ParentId = 0,
MenuType = MenuType.MainMenu, TargetViewKey = "SettingView",
Id = 8, Header = "变量历史", Icon = "\uE81C", ParentId = 0,
MenuType = MenuType.MainMenu, TargetViewKey = "VariableHistoryView",
DisplayOrder = 8
},
new DbMenu
{
Id = 9, Header = "关于", Icon = "\uE946", ParentId = 0,
MenuType = MenuType.MainMenu, TargetViewKey = "", DisplayOrder = 9
Id = 9, Header = "设置", Icon = "\uE713", ParentId = 0,
MenuType = MenuType.MainMenu, TargetViewKey = "SettingView",
DisplayOrder = 9
},
new DbMenu
{
Id = 10, Header = "关于", Icon = "\uE946", ParentId = 0,
MenuType = MenuType.MainMenu, TargetViewKey = "", DisplayOrder = 10
} // 假设有一个AboutView
};

View File

@@ -175,9 +175,10 @@ public class MenuRepository : BaseRepository<DbMenu>, IMenuRepository
return _mapper.Map<List<MenuBean>>(dbList);
}
public Task<bool> AddBatchAsync(List<MenuBean> entities)
public async Task<List<MenuBean>> AddBatchAsync(List<MenuBean> entities)
{
var dbEntities = _mapper.Map<List<DbMenu>>(entities);
return base.AddBatchAsync(dbEntities);
var addedEntities = await base.AddBatchAsync(dbEntities);
return _mapper.Map<List<MenuBean>>(addedEntities);
}
}

View File

@@ -102,9 +102,10 @@ public class MqttServerRepository : BaseRepository<DbMqttServer>, IMqttServerRep
}
public Task<bool> AddBatchAsync(List<MqttServer> entities)
public async Task<List<MqttServer>> AddBatchAsync(List<MqttServer> entities)
{
var dbEntities = _mapper.Map<List<DbMqttServer>>(entities);
return base.AddBatchAsync(dbEntities);
var addedEntities = await base.AddBatchAsync(dbEntities);
return _mapper.Map<List<MqttServer>>(addedEntities);
}
}

View File

@@ -129,10 +129,11 @@ public class NlogRepository : BaseRepository<DbNlog>, INlogRepository
/// 此方法主要用于满足接口契约,实际使用应谨慎。
/// </summary>
/// <param name="entities">要添加的Nlog日志实体列表。</param>
/// <returns>操作是否成功。</returns>
public new async Task<bool> AddBatchAsync(List<Core.Models.Nlog> entities)
/// <returns>添加的Nlog日志实体列表。</returns>
public new async Task<List<Core.Models.Nlog>> AddBatchAsync(List<Core.Models.Nlog> entities)
{
var dbEntities = _mapper.Map<List<DbNlog>>(entities);
return await base.AddBatchAsync(dbEntities);
var addedEntities = await base.AddBatchAsync(dbEntities);
return _mapper.Map<List<Core.Models.Nlog>>(addedEntities);
}
}

View File

@@ -105,9 +105,10 @@ public class UserRepository : BaseRepository<DbUser>, IUserRepository
}
public Task<bool> AddBatchAsync(List<User> entities)
public async Task<List<User>> AddBatchAsync(List<User> entities)
{
var dbEntities = _mapper.Map<List<DbUser>>(entities);
return base.AddBatchAsync(dbEntities);
var addedEntities = await base.AddBatchAsync(dbEntities);
return _mapper.Map<List<User>>(addedEntities);
}
}

View File

@@ -104,10 +104,11 @@ public class VariableHistoryRepository : BaseRepository<DbVariableHistory>, IVar
}
public Task<bool> AddBatchAsync(List<VariableHistory> entities)
public async Task<List<VariableHistory>> AddBatchAsync(List<VariableHistory> entities)
{
var dbEntities = _mapper.Map<List<DbVariableHistory>>(entities);
return base.AddBatchAsync(dbEntities);
var addedEntities = await base.AddBatchAsync(dbEntities);
return _mapper.Map<List<VariableHistory>>(addedEntities);
}
/// <summary>

View File

@@ -105,10 +105,11 @@ public class VariableMqttAliasRepository : BaseRepository<DbVariableMqttAlias>,
}
public Task<bool> AddBatchAsync(List<VariableMqttAlias> entities)
public async Task<List<VariableMqttAlias>> AddBatchAsync(List<VariableMqttAlias> entities)
{
var dbEntities = _mapper.Map<List<DbVariableMqttAlias>>(entities);
return base.AddBatchAsync(dbEntities);
var addedEntities = await base.AddBatchAsync(dbEntities);
return _mapper.Map<List<VariableMqttAlias>>(addedEntities);
}
/// <summary>

View File

@@ -203,10 +203,11 @@ public class VariableRepository : BaseRepository<DbVariable>, IVariableRepositor
}
public Task<bool> AddBatchAsync(List<Variable> entities)
public async Task<List<Variable>> AddBatchAsync(List<Variable> entities)
{
var dbEntities = _mapper.Map<List<DbVariable>>(entities);
return base.AddBatchAsync(dbEntities);
var addedEntities = await base.AddBatchAsync(dbEntities);
return _mapper.Map<List<Variable>>(addedEntities);
}
/// <summary>

View File

@@ -104,10 +104,11 @@ public class VariableTableRepository : BaseRepository<DbVariableTable>, IVariabl
}
public Task<bool> AddBatchAsync(List<VariableTable> entities)
public async Task<List<VariableTable>> AddBatchAsync(List<VariableTable> entities)
{
var dbEntities = _mapper.Map<List<DbVariableTable>>(entities);
return base.AddBatchAsync(dbEntities);
var addedEntities = await base.AddBatchAsync(dbEntities);
return _mapper.Map<List<VariableTable>>(addedEntities);
}
/// <summary>

View File

@@ -6,6 +6,7 @@ using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using DMS.Application.DTOs;
using DMS.Application.Events;
using DMS.Application.Interfaces;
using DMS.Core.Enums;
using DMS.Infrastructure.Interfaces.Services;
@@ -19,6 +20,7 @@ namespace DMS.Infrastructure.Services
public class S7ServiceManager : IS7ServiceManager
{
private readonly ILogger<S7ServiceManager> _logger;
private readonly IEventService _eventService;
private readonly IDataProcessingService _dataProcessingService;
private readonly IAppDataCenterService _appDataCenterService;
private readonly IS7ServiceFactory _s7ServiceFactory;
@@ -28,11 +30,13 @@ namespace DMS.Infrastructure.Services
public S7ServiceManager(
ILogger<S7ServiceManager> logger,
IEventService eventService,
IDataProcessingService dataProcessingService,
IAppDataCenterService appDataCenterService,
IS7ServiceFactory s7ServiceFactory)
{
_logger = logger ?? throw new ArgumentNullException(nameof(logger));
_eventService = eventService;
_dataProcessingService = dataProcessingService ?? throw new ArgumentNullException(nameof(dataProcessingService));
_appDataCenterService = appDataCenterService ?? throw new ArgumentNullException(nameof(appDataCenterService));
_s7ServiceFactory = s7ServiceFactory ?? throw new ArgumentNullException(nameof(s7ServiceFactory));
@@ -167,18 +171,25 @@ namespace DMS.Infrastructure.Services
if (context.S7Service.IsConnected)
{
context.IsConnected = true;
_logger.LogInformation("设备 {DeviceName} 连接成功", context.Device.Name);
}
else
{
_logger.LogWarning("设备 {DeviceName} 连接失败", context.Device.Name);
}
_eventService.RaiseDeviceConnectChanged(
this, new DeviceConnectChangedEventArgs(context.Device.Id, context.Device.Name, false, context.IsConnected));
}
catch (Exception ex)
{
_logger.LogError(ex, "连接设备 {DeviceName} 时发生错误: {ErrorMessage}",
context.Device.Name, ex.Message);
context.IsConnected = false;
_eventService.RaiseDeviceConnectChanged(
this, new DeviceConnectChangedEventArgs(context.Device.Id, context.Device.Name, false, context.IsConnected));
}
finally
{
@@ -199,6 +210,9 @@ namespace DMS.Infrastructure.Services
_logger.LogInformation("正在断开设备 {DeviceName} 的连接", context.Device.Name);
await context.S7Service.DisconnectAsync();
context.IsConnected = false;
_eventService.RaiseDeviceConnectChanged(
this, new DeviceConnectChangedEventArgs(context.Device.Id, context.Device.Name, false, context.IsConnected));
_logger.LogInformation("设备 {DeviceName} 连接已断开", context.Device.Name);
}
catch (Exception ex)