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, "预算归档任务执行出错");
}
}
}