using Microsoft.AspNetCore.Mvc; using Quartz; using Quartz.Spi; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using VueWebCoreApi.Extensions; using VueWebCoreApi.Quartz; using VueWebCoreApi.Tools; namespace VueWebCoreApi.Controllers { [ApiExplorerSettings(GroupName = "周期任务")] [ApiController] [Route("api/[controller]")] public class TaskBackGroundController : Controller { ToMessage mes = new ToMessage(); private readonly ISchedulerFactory _schedulerFactory; private readonly IJobFactory _jobFactory; private readonly QuartzRepository _quartzRepo; public TaskBackGroundController(ISchedulerFactory schedulerFactory, IJobFactory jobFactory, QuartzRepository quartzRepo) { _schedulerFactory = schedulerFactory; _jobFactory = jobFactory; _quartzRepo = quartzRepo; } [Route("GetJobs")] [HttpGet] public async Task GetJobs() { try { mes.code = "200"; mes.message = "查询成功!"; mes.data = await _schedulerFactory.GetJobs(_quartzRepo); } catch (Exception ex) { mes.code = "300"; mes.message = "查询失败:" + ex.Message; mes.data = null; } return Json(mes); } [Route("GetRunLog")] [HttpGet] public async Task GetRunLog(string taskName, string groupName, int page = 1) { // 入参校验 if (string.IsNullOrEmpty(taskName) || string.IsNullOrEmpty(groupName)) { mes.code = "300"; mes.message = "任务名和分组名不能为空!"; mes.data = null; return Json(mes); } try { mes.code = "200"; mes.message = "查询成功!"; mes.data = await _quartzRepo.GetJobRunLogAsync(taskName, groupName, page); } catch (Exception ex) { mes.code = "300"; mes.message = "查询失败:" + ex.Message; mes.data = null; } return Json(mes); } [Route("Add")] [HttpPost] public async Task Add(TaskOptions taskOptions) { if (string.IsNullOrEmpty(taskOptions.TaskName) || string.IsNullOrEmpty(taskOptions.GroupName)) { mes.code = "300"; mes.message = "任务名和分组名不能为空!"; return Json(mes); } return Json(await taskOptions.AddJob(_schedulerFactory, false, _jobFactory, _quartzRepo)); } [Route("Remove")] [HttpPost] public async Task Remove(TaskOptions taskOptions) { if (string.IsNullOrEmpty(taskOptions.TaskName) || string.IsNullOrEmpty(taskOptions.GroupName)) { mes.code = "300"; mes.message = "任务名和分组名不能为空!"; return Json(mes); } return Json(await _schedulerFactory.Remove(taskOptions, _quartzRepo)); } [Route("Update")] [HttpPost] public async Task Update(TaskOptions taskOptions) { if (string.IsNullOrEmpty(taskOptions.TaskName) || string.IsNullOrEmpty(taskOptions.GroupName)) { mes.code = "300"; mes.message = "任务名和分组名不能为空!"; return Json(mes); } return Json(await _schedulerFactory.Update(taskOptions, _quartzRepo)); } [Route("Pause")] [HttpPost] public async Task Pause(TaskOptions taskOptions) { if (string.IsNullOrEmpty(taskOptions.TaskName) || string.IsNullOrEmpty(taskOptions.GroupName)) { mes.code = "300"; mes.message = "任务名和分组名不能为空!"; return Json(mes); } // 校验任务是否存在 if (!await _quartzRepo.TaskExistsAsync(taskOptions.TaskName, taskOptions.GroupName)) { mes.code = "300"; mes.message = "任务不存在!"; return Json(mes); } return Json(await _schedulerFactory.Pause(taskOptions, _quartzRepo)); } [Route("Start")] [HttpPost] public async Task Start(TaskOptions taskOptions) { if (string.IsNullOrEmpty(taskOptions.TaskName) || string.IsNullOrEmpty(taskOptions.GroupName)) { mes.code = "300"; mes.message = "任务名和分组名不能为空!"; return Json(mes); } if (!await _quartzRepo.TaskExistsAsync(taskOptions.TaskName, taskOptions.GroupName)) { mes.code = "300"; mes.message = "任务不存在!"; return Json(mes); } return Json(await _schedulerFactory.Start(taskOptions, _quartzRepo)); } [Route("Run")] [HttpPost] public async Task Run(TaskOptions taskOptions) { if (string.IsNullOrEmpty(taskOptions.TaskName) || string.IsNullOrEmpty(taskOptions.GroupName)) { mes.code = "300"; mes.message = "任务名和分组名不能为空!"; return Json(mes); } if (!await _quartzRepo.TaskExistsAsync(taskOptions.TaskName, taskOptions.GroupName)) { mes.code = "300"; mes.message = "任务不存在!"; return Json(mes); } return Json(await _schedulerFactory.Run(taskOptions, _quartzRepo)); } } }