refactor 封装任务,调整人员获取
This commit is contained in:
53
Src/Dlhis.ScheduledTask/BaseJob.cs
Normal file
53
Src/Dlhis.ScheduledTask/BaseJob.cs
Normal file
@@ -0,0 +1,53 @@
|
||||
using System.Reflection;
|
||||
using Kurisu.Core.DataAccess.Entity;
|
||||
using Kurisu.Scheduled.Abstractions;
|
||||
using Kurisu.Scheduled.Attributes;
|
||||
using Kurisu.SqlSugar.Services;
|
||||
|
||||
namespace Kurisu.Scheduled;
|
||||
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user