using Quartz; using Service.Budget; namespace Service.Jobs; /// /// 预算归档定时任务 /// [DisallowConcurrentExecution] public class BudgetArchiveJob( IServiceProvider serviceProvider, ILogger logger) : IJob { public async Task Execute(IJobExecutionContext context) { try { logger.LogInformation("开始执行预算归档任务"); // 每个月1号执行,归档上个月的数据 var targetDate = DateTime.Now.AddMonths(-1); var year = targetDate.Year; var month = targetDate.Month; using var scope = serviceProvider.CreateScope(); var budgetService = scope.ServiceProvider.GetRequiredService(); // 归档月度数据 var result = await budgetService.ArchiveBudgetsAsync(year, month); if (string.IsNullOrEmpty(result)) { logger.LogInformation("归档 {Year}年{Month}月 预算任务执行成功", year, month); } else { logger.LogWarning("归档 {Year}年{Month}月 预算任务提示: {Result}", year, month, result); } } catch (Exception ex) { logger.LogError(ex, "预算归档任务执行出错"); } } }