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<IActionResult> 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<IActionResult> 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<IActionResult> 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<IActionResult> 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<IActionResult> 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<IActionResult> 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<IActionResult> 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<IActionResult> 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));
|
}
|
}
|
}
|