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>(); DbContext = scope.ServiceProvider.GetService(); var sqlSugarOptionsService = scope.ServiceProvider.GetService(); DbContext.Client.QueryFilter.ClearAndBackup(); sqlSugarOptionsService.IgnoreTenant = true; var name = this.GetType().GetCustomAttribute()!.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); }