54 lines
1.7 KiB
C#
54 lines
1.7 KiB
C#
using System.Reflection;
|
|
using Kurisu.AspNetCore.DataAccess.Entity;
|
|
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
|
|
using Kurisu.Scheduled.Abstractions;
|
|
using Kurisu.Scheduled.Attributes;
|
|
|
|
namespace Dlhis.ScheduledTask;
|
|
|
|
public abstract class BaseJob : IJob
|
|
{
|
|
private readonly IServiceProvider _serviceProvider;
|
|
|
|
public BaseJob(IServiceProvider serviceProvider)
|
|
{
|
|
_serviceProvider = serviceProvider;
|
|
}
|
|
|
|
protected ILogger Logger { get; set; }
|
|
protected IDbContext DbContext { get; set; }
|
|
|
|
public async Task TodoAsync()
|
|
{
|
|
using (var scope = _serviceProvider.CreateScope())
|
|
{
|
|
Logger = scope.ServiceProvider.GetService<ILogger<BaseJob>>();
|
|
DbContext = scope.ServiceProvider.GetService<IDbContext>();
|
|
var sqlSugarOptionsService = scope.ServiceProvider.GetService<ISqlSugarOptionsService>();
|
|
|
|
DbContext.Client.QueryFilter.ClearAndBackup<ITenantId>();
|
|
sqlSugarOptionsService.IgnoreTenant = true;
|
|
|
|
var name = this.GetType().GetCustomAttribute<RecurringJobAttribute>()!.Name;
|
|
Logger.LogDebug("[{name}]开始执行...", name);
|
|
|
|
try
|
|
{
|
|
await RunAsync(scope.ServiceProvider);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Logger.LogError(ex, "[{name}]执行失败:{message} {stacktrace}", name, ex.Message, ex.StackTrace);
|
|
}
|
|
finally
|
|
{
|
|
Logger.LogDebug("[{name}]执行结束...", name);
|
|
DbContext.Client.QueryFilter.Restore();
|
|
sqlSugarOptionsService.IgnoreTenant = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
public abstract Task RunAsync(IServiceProvider serviceProvider);
|
|
}
|