46 lines
1.6 KiB
C#
46 lines
1.6 KiB
C#
|
|
using Quartz;
|
||
|
|
|
||
|
|
namespace Service.Jobs;
|
||
|
|
|
||
|
|
/// <summary>
|
||
|
|
/// 节假日同步定时任务 - 每10天执行一次
|
||
|
|
/// </summary>
|
||
|
|
[DisallowConcurrentExecution] // 防止并发执行
|
||
|
|
public class HolidaySyncJob(
|
||
|
|
IServiceProvider serviceProvider,
|
||
|
|
ILogger<HolidaySyncJob> logger) : IJob
|
||
|
|
{
|
||
|
|
public async Task Execute(IJobExecutionContext context)
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
logger.LogInformation("开始执行节假日同步任务");
|
||
|
|
|
||
|
|
using var scope = serviceProvider.CreateScope();
|
||
|
|
var holidayService = scope.ServiceProvider.GetRequiredService<IHolidayService>();
|
||
|
|
|
||
|
|
// 获取当前年份和下一年份
|
||
|
|
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 知道任务失败
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|