using Furion; using Furion.DatabaseAccessor; using Furion.Schedule; using Mapster; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ApiTools.Core { /// /// 作业持久化(数据库) /// public class DbJobPersistence : IJobPersistence { private readonly IServiceScopeFactory serviceScopeFactory; public DbJobPersistence(IServiceScopeFactory serviceScopeFactory) { this.serviceScopeFactory = serviceScopeFactory; } /// /// 作业调度服务启动时 /// /// public Task> PreloadAsync(CancellationToken stoppingToken) { return Task.FromResult(App.EffectiveTypes.ScanToBuilders().AsEnumerable()); } public Task OnLoadingAsync(SchedulerBuilder builder, CancellationToken stoppingToken) { return Task.FromResult(builder); } public Task OnChangedAsync(PersistenceContext context) { return Task.CompletedTask; } public Task OnTriggerChangedAsync(PersistenceTriggerContext context) { return Task.CompletedTask; } public async Task OnExecutionRecordAsync(PersistenceExecutionRecordContext context) { using (var scope = serviceScopeFactory.CreateScope()) { var rep = scope.ServiceProvider.GetRequiredService>(); var entity = new ScheduleJobTriggerTimeline(); context.Timeline.Adapt(entity); await rep.InsertNowAsync(entity); } } } }