| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- using Admin.NET.Plugin.ApprovalFlow.Service;
- using Furion.Schedule;
- using Microsoft.Extensions.DependencyInjection;
- using Microsoft.Extensions.Logging;
- namespace Admin.NET.Plugin.ApprovalFlow;
- /// <summary>
- /// 审批超时自动处理作业 — 每 5 分钟扫描一次超时的待办任务。
- /// 扫描细节由 <see cref="FlowEngineService.ScanTimeoutTasks"/> 提供,以便管理员接口可复用同一段逻辑。
- /// </summary>
- [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<FlowEngineService>();
- try
- {
- var processed = await engine.ScanTimeoutTasks(stoppingToken);
- if (processed > 0)
- _logger.LogInformation("FlowTimeoutJob 本轮处理了 {Count} 个超时任务", processed);
- }
- catch (Exception ex)
- {
- _logger.LogError(ex, "FlowTimeoutJob 扫描超时任务失败");
- }
- }
- }
|