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