using Admin.NET.Plugin.ApprovalFlow.Service; using Furion.Schedule; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; namespace Admin.NET.Plugin.ApprovalFlow; /// /// 审批超时自动处理作业 — 每 5 分钟扫描一次超时的待办任务。 /// 扫描细节由 提供,以便管理员接口可复用同一段逻辑。 /// [JobDetail("job_flow_timeout", Description = "审批超时自动处理", GroupName = "default", Concurrent = false)] [Period(300000, TriggerId = "trigger_flow_timeout", Description = "每5分钟执行")] public class FlowTimeoutJob : IJob { private readonly IServiceScopeFactory _scopeFactory; private readonly ILogger _logger; public FlowTimeoutJob(IServiceScopeFactory scopeFactory, ILoggerFactory loggerFactory) { _scopeFactory = scopeFactory; _logger = loggerFactory.CreateLogger("FlowTimeoutJob"); } public async Task ExecuteAsync(JobExecutingContext context, CancellationToken stoppingToken) { using var scope = _scopeFactory.CreateScope(); var engine = scope.ServiceProvider.GetRequiredService(); try { var processed = await engine.ScanTimeoutTasks(stoppingToken); if (processed > 0) _logger.LogInformation("FlowTimeoutJob 本轮处理了 {Count} 个超时任务", processed); } catch (Exception ex) { _logger.LogError(ex, "FlowTimeoutJob 扫描超时任务失败"); } } }