fix 调整tenantId为空引起上传失败

This commit is contained in:
2024-12-17 14:10:07 +08:00
parent b7fa470fc3
commit 7a3c5ec2f8
4 changed files with 13 additions and 130 deletions

View File

@@ -11,7 +11,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Kurisu.AspNetCore" Version="0.9.37" /> <PackageReference Include="Kurisu.AspNetCore" Version="0.9.38" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -10,7 +10,6 @@ public class BalanceRecordUploadBackgroundService : BackgroundService
{ {
private readonly IServiceProvider _serviceProvider; private readonly IServiceProvider _serviceProvider;
private readonly ILogger<BalanceRecordUploadBackgroundService> _logger; private readonly ILogger<BalanceRecordUploadBackgroundService> _logger;
private readonly IWebHostEnvironment _environment;
private readonly ISettingService _settingService; private readonly ISettingService _settingService;
private readonly ICanteenApi _canteenApi; private readonly ICanteenApi _canteenApi;
@@ -18,14 +17,12 @@ public class BalanceRecordUploadBackgroundService : BackgroundService
public BalanceRecordUploadBackgroundService(IServiceProvider serviceProvider, public BalanceRecordUploadBackgroundService(IServiceProvider serviceProvider,
ILogger<BalanceRecordUploadBackgroundService> logger, ILogger<BalanceRecordUploadBackgroundService> logger,
IWebHostEnvironment environment,
ISettingService settingService, ISettingService settingService,
ICanteenApi canteenApi, ICanteenApi canteenApi,
IHealthCheckService healthCheckService) IHealthCheckService healthCheckService)
{ {
_serviceProvider = serviceProvider; _serviceProvider = serviceProvider;
_logger = logger; _logger = logger;
_environment = environment;
_settingService = settingService; _settingService = settingService;
_canteenApi = canteenApi; _canteenApi = canteenApi;
_healthCheckService = healthCheckService; _healthCheckService = healthCheckService;
@@ -33,7 +30,7 @@ public class BalanceRecordUploadBackgroundService : BackgroundService
protected override async Task ExecuteAsync(CancellationToken stoppingToken) protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{ {
while (!stoppingToken.IsCancellationRequested && _environment.IsProduction()) while (!stoppingToken.IsCancellationRequested)
{ {
if (!_healthCheckService.GetIsOffline()) if (!_healthCheckService.GetIsOffline())
{ {
@@ -48,7 +45,10 @@ public class BalanceRecordUploadBackgroundService : BackgroundService
{ {
try try
{ {
var balanceRecords = await db.Queryable<LocalBalanceRecordEntity>().Where(x => x.TenantId == factory).Where(x => !x.IsSync).ToListAsync(stoppingToken); var balanceRecords = await db.Queryable<LocalBalanceRecordEntity>()
.Where(x => x.TenantId == factory)
.Where(x => !x.IsSync).ToListAsync(stoppingToken);
if (balanceRecords.Any()) if (balanceRecords.Any())
{ {
_logger.LogInformation("上传离线订单"); _logger.LogInformation("上传离线订单");
@@ -87,9 +87,13 @@ public class BalanceRecordUploadBackgroundService : BackgroundService
balanceRecords = await db.Queryable<LocalBalanceRecordEntity>().Where(x => x.TenantId == factory).Where(x => !x.IsSync).ToListAsync(stoppingToken); balanceRecords = await db.Queryable<LocalBalanceRecordEntity>().Where(x => x.TenantId == factory).Where(x => !x.IsSync).ToListAsync(stoppingToken);
if (!balanceRecords.Any()) if (!balanceRecords.Any())
{ {
_logger.LogInformation("上传离线订单完成"); _logger.LogInformation("{factory}上传离线订单完成", factory);
} }
} }
else
{
_logger.LogInformation("{factory}无离线订单", factory);
}
} }
catch (Exception e) catch (Exception e)
{ {
@@ -125,7 +129,7 @@ public class BalanceRecordUploadBackgroundService : BackgroundService
} }
} }
await Task.Delay(60 * 1000, stoppingToken); await Task.Delay(30 * 1000, stoppingToken);
} }
} }
} }

View File

@@ -1,132 +1,13 @@
using Kurisu.AspNetCore.Authentication.Abstractions; using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
using Kurisu.AspNetCore.DataAccess.Entity;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Attributes;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Extensions;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Options;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
using Kurisu.AspNetCore.Startup; using Kurisu.AspNetCore.Startup;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Microsoft.Extensions.Options;
using SqlSugar; using SqlSugar;
namespace Dlhis.Middle.Packs; namespace Dlhis.Middle.Packs;
public class SqlSugarPack : BaseAppPack public class SqlSugarPack : BaseAppPack
{ {
private const string _infoTemplate = "ExecuteCommand[{ms}] Timeout[{timeout}] \r\n {sql}";
public override void ConfigureServices(IServiceCollection services) public override void ConfigureServices(IServiceCollection services)
{ {
services.AddSqlSugar(DbType.Sqlite); services.AddSqlSugar(DbType.Sqlite);
services.Replace(ServiceDescriptor.Scoped(typeof(ISqlSugarClient), sp =>
{
var options = sp.GetService<IOptions<SqlSugarOptions>>().Value;
var logger = sp.GetService<ILogger<SqlSugarClient>>();
var currentUser = sp.GetService<ICurrentUser>();
var sugarOptions = sp.GetService<ISqlSugarOptionsService>();
var configs = new List<ConnectionConfig>
{
new()
{
ConfigId = "db-main",
ConnectionString = options.DefaultConnectionString,
DbType = DbType.Sqlite,
InitKeyType = InitKeyType.Attribute,
IsAutoCloseConnection = true,
MoreSettings = new ConnMoreSettings
{
DisableNvarchar = true,
},
ConfigureExternalServices = new ConfigureExternalServices
{
EntityService = (c, p) =>
{
if (!p.IsPrimarykey && c.PropertyType.IsGenericType && c.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>)
|| (!p.IsPrimarykey && p.PropertyInfo.PropertyType == typeof(string)))
{
p.IsNullable = true;
}
}
}
}
};
ISqlSugarClient db = new SqlSugarClient(configs);
db.Ado.CommandTimeOut = options.Timeout;
db.Aop.OnLogExecuted = (sql, parameters) =>
{
var ms = db.Ado.SqlExecutionTime.Milliseconds;
//警告慢sql
if (ms >= options.SlowSqlTime * 1000)
logger.LogWarning(message: _infoTemplate, ms, options.Timeout, sql);
if (options.EnableSqlLog)
{
sql = UtilMethods.GetSqlString(DbType.MySql, sql, parameters);
logger.LogInformation(message: _infoTemplate, ms, options.Timeout, sql);
}
};
//软删除
db.QueryFilter.AddTableFilter<ISoftDeleted>(x => x.IsDeleted == false);
//增删改
db.Aop.DataExecuting = (oldValue, model) =>
{
if (sugarOptions.IgnoreTenant == false //启用租户
&& currentUser != null //用户信息存在
&& model.PropertyName == nameof(ITenantId.TenantId) //当前为租户字段
&& typeof(ITenantId).IsAssignableFrom(model.EntityValue.GetType())) //继承ITenantId
{
var tenant = currentUser.GetStringTenantId();
model.SetValue(tenant);
}
//处理人员和时间字段
switch (model.OperationType)
{
case DataFilterType.InsertByObject:
{
if (model.IsAnyAttribute<InsertDateTimeGenerationAttribute>())
{
model.SetValue(DateTime.Now);
}
if (currentUser != null && model.IsAnyAttribute<InsertUserGenerationAttribute>())
{
if ((int)model.EntityColumnInfo.PropertyInfo.GetValue(model.EntityValue) == 0)
{
model.SetValue(currentUser.GetStringSubjectId());
}
}
break;
}
case DataFilterType.UpdateByObject:
{
if (model.IsAnyAttribute<UpdateDateTimeGenerationAttribute>())
{
model.SetValue(DateTime.Now);
}
if (currentUser != null && model.IsAnyAttribute<UpdateUserGenerationAttribute>())
{
model.SetValue(currentUser.GetStringSubjectId());
}
break;
}
}
};
return db;
}));
} }
} }

View File

@@ -2,7 +2,6 @@ using Dlhis.Middle.BackgroundServices;
using Dlhis.Middle.Entities; using Dlhis.Middle.Entities;
using Dlhis.Middle.Services; using Dlhis.Middle.Services;
using Kurisu.AspNetCore; using Kurisu.AspNetCore;
using Kurisu.AspNetCore.Authentication.Extensions;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services; using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
using Kurisu.AspNetCore.Startup; using Kurisu.AspNetCore.Startup;
using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Logging;
@@ -33,7 +32,6 @@ public class Startup : DefaultStartup
services.AddRemoteCall(App.ActiveTypes); services.AddRemoteCall(App.ActiveTypes);
services.AddMemoryCache(); services.AddMemoryCache();
services.AddUserInfo();
} }
/// <inheritdoc /> /// <inheritdoc />