using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Quartz;
namespace WebApi.Controllers;
///
/// 定时任务管理控制器
///
[ApiController]
[Route("api/[controller]")]
public class JobController(
ISchedulerFactory schedulerFactory,
ILogger logger) : ControllerBase
{
///
/// 手动触发邮件同步任务
///
[HttpPost("sync-email")]
[Authorize]
public async Task TriggerEmailSync()
{
try
{
var scheduler = await schedulerFactory.GetScheduler();
var jobKey = new JobKey("EmailSyncJob");
// 立即触发任务
await scheduler.TriggerJob(jobKey);
logger.LogInformation("手动触发邮件同步任务成功");
return Ok(new { message = "邮件同步任务已触发" });
}
catch (Exception ex)
{
logger.LogError(ex, "触发邮件同步任务失败");
return StatusCode(500, new { message = "触发任务失败", error = ex.Message });
}
}
///
/// 手动触发周期性账单任务
///
[HttpPost("periodic-bill")]
[Authorize]
public async Task TriggerPeriodicBill()
{
try
{
var scheduler = await schedulerFactory.GetScheduler();
var jobKey = new JobKey("PeriodicBillJob");
// 立即触发任务
await scheduler.TriggerJob(jobKey);
logger.LogInformation("手动触发周期性账单任务成功");
return Ok(new { message = "周期性账单任务已触发" });
}
catch (Exception ex)
{
logger.LogError(ex, "触发周期性账单任务失败");
return StatusCode(500, new { message = "触发任务失败", error = ex.Message });
}
}
///
/// 获取所有任务的状态
///
[HttpGet("status")]
[Authorize]
public async Task GetJobStatus()
{
try
{
var scheduler = await schedulerFactory.GetScheduler();
var jobGroups = await scheduler.GetJobGroupNames();
var jobStatuses = new List