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 扫描超时任务失败");
}
}
}