JobController.cs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. using Host.Common;
  2. using Host.Entity;
  3. using Microsoft.AspNetCore.Cors;
  4. using Microsoft.AspNetCore.Mvc;
  5. using Quartz;
  6. using System.Collections.Generic;
  7. using System.Threading.Tasks;
  8. using Talk.Extensions;
  9. namespace Host.Controllers
  10. {
  11. /// <summary>
  12. /// 任务调度
  13. /// </summary>
  14. [Route("api/[controller]/[Action]")]
  15. [EnableCors("AllowSameDomain")] //允许跨域
  16. public class JobController : Controller
  17. {
  18. private SchedulerCenter scheduler;
  19. /// <summary>
  20. /// 任务调度对象
  21. /// </summary>
  22. /// <param name="schedulerCenter"></param>
  23. public JobController(SchedulerCenter schedulerCenter)
  24. {
  25. scheduler = schedulerCenter;
  26. }
  27. /// <summary>
  28. /// 添加任务
  29. /// </summary>
  30. /// <param name="entity"></param>
  31. /// <returns></returns>
  32. [HttpPost]
  33. public async Task<BaseResult> AddJob([FromBody] ScheduleEntity entity)
  34. {
  35. if (ConfigurationManager.GetTryConfig("EnvironmentalRestrictions", "false") == "true")
  36. {
  37. if (entity.TriggerType == TriggerTypeEnum.Simple &&
  38. entity.IntervalSecond.HasValue &&
  39. entity.IntervalSecond <= 10)
  40. {
  41. return new BaseResult()
  42. {
  43. Code = 403,
  44. Msg = "当前环境不允许低于10秒内循环执行任务!"
  45. };
  46. }
  47. else if (entity.TriggerType == TriggerTypeEnum.Cron &&
  48. entity.Cron == "* * * * * ?")
  49. {
  50. return new BaseResult()
  51. {
  52. Code = 403,
  53. Msg = "当前环境不允许过频繁执行任务!"
  54. };
  55. }
  56. }
  57. return await scheduler.AddScheduleJobAsync(entity);
  58. }
  59. /// <summary>
  60. /// 暂停任务
  61. /// </summary>
  62. /// <returns></returns>
  63. [HttpPost]
  64. public async Task<BaseResult> StopJob([FromBody] JobKey job)
  65. {
  66. return await scheduler.StopOrDelScheduleJobAsync(job.Group, job.Name);
  67. }
  68. /// <summary>
  69. /// 删除任务
  70. /// </summary>
  71. /// <returns></returns>
  72. [HttpPost]
  73. public async Task<BaseResult> RemoveJob([FromBody] JobKey job)
  74. {
  75. return await scheduler.StopOrDelScheduleJobAsync(job.Group, job.Name, true);
  76. }
  77. /// <summary>
  78. /// 恢复运行暂停的任务
  79. /// </summary>
  80. /// <returns></returns>
  81. [HttpPost]
  82. public async Task<BaseResult> ResumeJob([FromBody] JobKey job)
  83. {
  84. return await scheduler.ResumeJobAsync(job.Group, job.Name);
  85. }
  86. /// <summary>
  87. /// 查询任务
  88. /// </summary>
  89. /// <returns></returns>
  90. [HttpPost]
  91. public async Task<ScheduleEntity> QueryJob([FromBody] JobKey job)
  92. {
  93. return await scheduler.QueryJobAsync(job.Group, job.Name);
  94. }
  95. /// <summary>
  96. /// 修改
  97. /// </summary>
  98. /// <param name="entity"></param>
  99. /// <returns></returns>
  100. [HttpPost]
  101. public async Task<BaseResult> ModifyJob([FromBody] ModifyJobInput entity)
  102. {
  103. if (ConfigurationManager.GetTryConfig("EnvironmentalRestrictions", "false") == "true")
  104. {
  105. if (entity.NewScheduleEntity.TriggerType == TriggerTypeEnum.Simple &&
  106. entity.NewScheduleEntity.IntervalSecond.HasValue &&
  107. entity.NewScheduleEntity.IntervalSecond <= 10)
  108. {
  109. return new BaseResult()
  110. {
  111. Code = 403,
  112. Msg = "当前环境不允许低于10秒内循环执行任务!"
  113. };
  114. }
  115. else if (entity.NewScheduleEntity.TriggerType == TriggerTypeEnum.Cron &&
  116. entity.NewScheduleEntity.Cron == "* * * * * ?")
  117. {
  118. return new BaseResult()
  119. {
  120. Code = 403,
  121. Msg = "当前环境不允许过频繁执行任务!"
  122. };
  123. }
  124. }
  125. var jobKey = new JobKey(entity.OldScheduleEntity.JobName, entity.OldScheduleEntity.JobGroup);
  126. var runNumber = await scheduler.GetRunNumberAsync(jobKey);
  127. await scheduler.StopOrDelScheduleJobAsync(entity.OldScheduleEntity.JobGroup, entity.OldScheduleEntity.JobName, true);
  128. await scheduler.AddScheduleJobAsync(entity.NewScheduleEntity, runNumber);
  129. return new BaseResult() { Msg = "修改计划任务成功!" };
  130. }
  131. /// <summary>
  132. /// 立即执行
  133. /// </summary>
  134. /// <param name="job"></param>
  135. /// <returns></returns>
  136. [HttpPost]
  137. public async Task<bool> TriggerJob([FromBody] JobKey job)
  138. {
  139. await scheduler.TriggerJobAsync(job);
  140. return true;
  141. }
  142. /// <summary>
  143. /// 获取job日志
  144. /// </summary>
  145. /// <param name="jobKey"></param>
  146. /// <returns></returns>
  147. [HttpPost]
  148. public async Task<List<string>> GetJobLogs([FromBody] JobKey jobKey)
  149. {
  150. var logs = await scheduler.GetJobLogsAsync(jobKey);
  151. logs?.Reverse();
  152. return logs;
  153. }
  154. /// <summary>
  155. /// 启动调度
  156. /// </summary>
  157. /// <returns></returns>
  158. [HttpGet]
  159. public async Task<bool> StartSchedule()
  160. {
  161. return await scheduler.StartScheduleAsync();
  162. }
  163. /// <summary>
  164. /// 停止调度
  165. /// </summary>
  166. /// <returns></returns>
  167. [HttpGet]
  168. public async Task<bool> StopSchedule()
  169. {
  170. return await scheduler.StopScheduleAsync();
  171. }
  172. /// <summary>
  173. /// 获取所有任务
  174. /// </summary>
  175. /// <returns></returns>
  176. [HttpGet]
  177. public async Task<List<JobInfoEntity>> GetAllJob()
  178. {
  179. return await scheduler.GetAllJobAsync();
  180. }
  181. /// <summary>
  182. /// 获取所有Job信息(简要信息 - 刷新数据的时候使用)
  183. /// </summary>
  184. /// <returns></returns>
  185. [HttpGet]
  186. public async Task<List<JobBriefInfoEntity>> GetAllJobBriefInfo()
  187. {
  188. return await scheduler.GetAllJobBriefInfoAsync();
  189. }
  190. /// <summary>
  191. /// 移除异常信息
  192. /// </summary>
  193. /// <param name="jobKey"></param>
  194. /// <returns></returns>
  195. [HttpPost]
  196. public async Task<bool> RemoveErrLog([FromBody] JobKey jobKey)
  197. {
  198. return await scheduler.RemoveErrLog(jobKey.Group, jobKey.Name);
  199. }
  200. }
  201. }