using Quartz; namespace Service.Jobs; /// /// 节假日同步定时任务 - 每10天执行一次 /// [DisallowConcurrentExecution] // 防止并发执行 public class HolidaySyncJob( IServiceProvider serviceProvider, ILogger logger) : IJob { public async Task Execute(IJobExecutionContext context) { try { logger.LogInformation("开始执行节假日同步任务"); using var scope = serviceProvider.CreateScope(); var holidayService = scope.ServiceProvider.GetRequiredService(); // 获取当前年份和下一年份 var currentYear = DateTime.Now.Year; var nextYear = currentYear + 1; // 同步当前年和下一年的数据 var currentYearResult = await holidayService.FetchAndCacheHolidaysAsync(currentYear); var nextYearResult = await holidayService.FetchAndCacheHolidaysAsync(nextYear); if (currentYearResult && nextYearResult) { logger.LogInformation("节假日同步任务执行完成,成功同步 {CurrentYear} 和 {NextYear} 年数据", currentYear, nextYear); } else { logger.LogWarning("节假日同步任务部分失败,当前年: {CurrentResult}, 下一年: {NextResult}", currentYearResult, nextYearResult); } } catch (Exception ex) { logger.LogError(ex, "节假日同步任务执行出错"); throw; // 让 Quartz 知道任务失败 } } }