using Microsoft.AspNetCore.Cors;
|
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc.RazorPages;
|
using Quartz;
|
using System;
|
using System.Collections.Generic;
|
using System.Threading.Tasks;
|
using Utility.Entity;
|
using Utility;
|
using Model.ModelVm;
|
using Microsoft.AspNetCore.Authorization;
|
|
namespace Wms.Controllers
|
{
|
/// <summary>
|
/// 任务调度
|
/// </summary>
|
[Route("api/[controller]/[action]")]
|
[ApiController]
|
[Authorize]
|
[ServiceFilter(typeof(ApiResponseActionFilter))]
|
public class JobController : ControllerBase
|
{
|
private SchedulerCenter scheduler;
|
|
/// <summary>
|
/// 任务调度对象
|
/// </summary>
|
/// <param name="schedulerCenter"></param>
|
public JobController(SchedulerCenter schedulerCenter)
|
{
|
scheduler = schedulerCenter;
|
}
|
|
/// <summary>
|
/// 添加任务
|
/// </summary>
|
/// <param name="entity"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public async Task<string> AddJob(ScheduleEntity entity)
|
{
|
if (entity.TriggerType == TriggerTypeEnum.Cron &&
|
entity.Cron == "* * * * * ?")
|
{
|
return "不允许过频繁执行任务!";
|
}
|
return await scheduler.AddScheduleJobAsync(entity);
|
}
|
|
/// <summary>
|
/// 暂停任务
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost]
|
public async Task<string> StopJob(JobVm job)
|
{
|
return await scheduler.StopOrDelScheduleJobAsync(job.Group, job.Name);
|
}
|
|
/// <summary>
|
/// 删除任务
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost]
|
public async Task<string> RemoveJob(JobVm job)
|
{
|
return await scheduler.StopOrDelScheduleJobAsync(job.Group, job.Name, true);
|
}
|
|
/// <summary>
|
/// 恢复运行暂停的任务
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost]
|
public async Task<string> ResumeJob(JobVm job)
|
{
|
return await scheduler.ResumeJobAsync(job.Group, job.Name);
|
}
|
|
/// <summary>
|
/// 查询任务
|
/// </summary>
|
/// <returns></returns>
|
[HttpPost]
|
public async Task<ScheduleEntity> QueryJob(JobVm job)
|
{
|
return await scheduler.QueryJobAsync(job.Group, job.Name);
|
}
|
|
/// <summary>
|
/// 修改
|
/// </summary>
|
/// <param name="entity"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public async Task<string> ModifyJob(ModifyJobInput entity)
|
{
|
var jobKey = new JobKey(entity.OldScheduleEntity.JobName, entity.OldScheduleEntity.JobGroup);
|
long runNumber = 0;
|
try
|
{
|
runNumber = await scheduler.GetRunNumberAsync(jobKey);
|
}
|
catch (Exception)
|
{
|
|
}
|
await scheduler.StopOrDelScheduleJobAsync(entity.OldScheduleEntity.JobGroup, entity.OldScheduleEntity.JobName, true);
|
await scheduler.AddScheduleJobAsync(entity.NewScheduleEntity, runNumber);
|
return "修改计划任务成功!";
|
}
|
|
/// <summary>
|
/// 立即执行
|
/// </summary>
|
/// <param name="job"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public async Task<bool> TriggerJob(JobVm job)
|
{
|
JobKey modKey = new JobKey(job.Name, job.Group);
|
await scheduler.TriggerJobAsync(modKey);
|
return true;
|
}
|
|
/// <summary>
|
/// 获取job日志
|
/// </summary>
|
/// <param name="jobKey"></param>
|
/// <returns></returns>
|
[HttpPost]
|
public async Task<List<string>> GetJobLogs(JobVm job)
|
{
|
JobKey modKey = new JobKey(job.Name, job.Group);
|
var logs = await scheduler.GetJobLogsAsync(modKey);
|
logs?.Reverse();
|
return logs;
|
}
|
|
/// <summary>
|
/// 启动调度
|
/// </summary>
|
/// <returns></returns>
|
[HttpGet]
|
public async Task<bool> StartSchedule()
|
{
|
return await scheduler.StartScheduleAsync();
|
}
|
|
/// <summary>
|
/// 停止调度
|
/// </summary>
|
/// <returns></returns>
|
[HttpGet]
|
public async Task<bool> StopSchedule()
|
{
|
return await scheduler.StopScheduleAsync();
|
}
|
|
/// <summary>
|
/// 获取所有任务
|
/// </summary>
|
/// <returns></returns>
|
[HttpGet]
|
public async Task<List<JobInfo>> GetAllJob()
|
{
|
var list = await scheduler.GetAllJobAsync();
|
var listJob = new List<JobInfo>();
|
foreach (var mod in list)
|
{
|
mod.JobInfoList.ForEach(s => s.GroupName = mod.GroupName);
|
listJob.AddRange(mod.JobInfoList);
|
}
|
return listJob;
|
}
|
|
/// <summary>
|
/// 获取所有Job信息(简要信息 - 刷新数据的时候使用)
|
/// </summary>
|
/// <returns></returns>
|
[HttpGet]
|
public async Task<List<JobBriefInfoEntity>> GetAllJobBriefInfo()
|
{
|
return await scheduler.GetAllJobBriefInfoAsync();
|
}
|
|
///// <summary>
|
///// 移除异常信息
|
///// </summary>
|
///// <param name="jobKey"></param>
|
///// <returns></returns>
|
//[HttpPost]
|
//public async Task<bool> RemoveErrLog([FromBody] JobKey jobKey)
|
//{
|
// return await scheduler.RemoveErrLog(jobKey.Group, jobKey.Name);
|
//}
|
}
|
}
|