SysJobController.java 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. package com.ruoyi.quartz.controller;
  2. import java.util.List;
  3. import org.apache.shiro.authz.annotation.RequiresPermissions;
  4. import org.quartz.SchedulerException;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.ui.ModelMap;
  8. import org.springframework.validation.annotation.Validated;
  9. import org.springframework.web.bind.annotation.GetMapping;
  10. import org.springframework.web.bind.annotation.PathVariable;
  11. import org.springframework.web.bind.annotation.PostMapping;
  12. import org.springframework.web.bind.annotation.RequestMapping;
  13. import org.springframework.web.bind.annotation.ResponseBody;
  14. import com.ruoyi.common.annotation.Log;
  15. import com.ruoyi.common.constant.Constants;
  16. import com.ruoyi.common.core.controller.BaseController;
  17. import com.ruoyi.common.core.domain.AjaxResult;
  18. import com.ruoyi.common.core.page.TableDataInfo;
  19. import com.ruoyi.common.enums.BusinessType;
  20. import com.ruoyi.common.exception.job.TaskException;
  21. import com.ruoyi.common.utils.StringUtils;
  22. import com.ruoyi.common.utils.poi.ExcelUtil;
  23. import com.ruoyi.quartz.domain.SysJob;
  24. import com.ruoyi.quartz.service.ISysJobService;
  25. import com.ruoyi.quartz.util.CronUtils;
  26. /**
  27. * 调度任务信息操作处理
  28. *
  29. * @author ruoyi
  30. */
  31. @Controller
  32. @RequestMapping("/monitor/job")
  33. public class SysJobController extends BaseController
  34. {
  35. private String prefix = "monitor/job";
  36. @Autowired
  37. private ISysJobService jobService;
  38. @RequiresPermissions("monitor:job:view")
  39. @GetMapping()
  40. public String job()
  41. {
  42. return prefix + "/job";
  43. }
  44. @RequiresPermissions("monitor:job:list")
  45. @PostMapping("/list")
  46. @ResponseBody
  47. public TableDataInfo list(SysJob job)
  48. {
  49. startPage();
  50. List<SysJob> list = jobService.selectJobList(job);
  51. return getDataTable(list);
  52. }
  53. @Log(title = "定时任务", businessType = BusinessType.EXPORT)
  54. @RequiresPermissions("monitor:job:export")
  55. @PostMapping("/export")
  56. @ResponseBody
  57. public AjaxResult export(SysJob job)
  58. {
  59. List<SysJob> list = jobService.selectJobList(job);
  60. ExcelUtil<SysJob> util = new ExcelUtil<SysJob>(SysJob.class);
  61. return util.exportExcel(list, "定时任务");
  62. }
  63. @Log(title = "定时任务", businessType = BusinessType.DELETE)
  64. @RequiresPermissions("monitor:job:remove")
  65. @PostMapping("/remove")
  66. @ResponseBody
  67. public AjaxResult remove(String ids) throws SchedulerException
  68. {
  69. jobService.deleteJobByIds(ids);
  70. return success();
  71. }
  72. @RequiresPermissions("monitor:job:detail")
  73. @GetMapping("/detail/{jobId}")
  74. public String detail(@PathVariable("jobId") Long jobId, ModelMap mmap)
  75. {
  76. mmap.put("name", "job");
  77. mmap.put("job", jobService.selectJobById(jobId));
  78. return prefix + "/detail";
  79. }
  80. /**
  81. * 任务调度状态修改
  82. */
  83. @Log(title = "定时任务", businessType = BusinessType.UPDATE)
  84. @RequiresPermissions("monitor:job:changeStatus")
  85. @PostMapping("/changeStatus")
  86. @ResponseBody
  87. public AjaxResult changeStatus(SysJob job) throws SchedulerException
  88. {
  89. SysJob newJob = jobService.selectJobById(job.getJobId());
  90. newJob.setStatus(job.getStatus());
  91. return toAjax(jobService.changeStatus(newJob));
  92. }
  93. /**
  94. * 任务调度立即执行一次
  95. */
  96. @Log(title = "定时任务", businessType = BusinessType.UPDATE)
  97. @RequiresPermissions("monitor:job:changeStatus")
  98. @PostMapping("/run")
  99. @ResponseBody
  100. public AjaxResult run(SysJob job) throws SchedulerException
  101. {
  102. jobService.run(job);
  103. return success();
  104. }
  105. /**
  106. * 新增调度
  107. */
  108. @GetMapping("/add")
  109. public String add()
  110. {
  111. return prefix + "/add";
  112. }
  113. /**
  114. * 新增保存调度
  115. */
  116. @Log(title = "定时任务", businessType = BusinessType.INSERT)
  117. @RequiresPermissions("monitor:job:add")
  118. @PostMapping("/add")
  119. @ResponseBody
  120. public AjaxResult addSave(@Validated SysJob job) throws SchedulerException, TaskException
  121. {
  122. if (!CronUtils.isValid(job.getCronExpression()))
  123. {
  124. return AjaxResult.error("新增任务'" + job.getJobName() + "'失败,Cron表达式不正确");
  125. }
  126. else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI))
  127. {
  128. return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'rmi://'调用");
  129. }
  130. else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.HTTP, Constants.HTTPS }))
  131. {
  132. return error("新增任务'" + job.getJobName() + "'失败,目标字符串不允许'http(s)//'调用");
  133. }
  134. return toAjax(jobService.insertJob(job));
  135. }
  136. /**
  137. * 修改调度
  138. */
  139. @GetMapping("/edit/{jobId}")
  140. public String edit(@PathVariable("jobId") Long jobId, ModelMap mmap)
  141. {
  142. mmap.put("job", jobService.selectJobById(jobId));
  143. return prefix + "/edit";
  144. }
  145. /**
  146. * 修改保存调度
  147. */
  148. @Log(title = "定时任务", businessType = BusinessType.UPDATE)
  149. @RequiresPermissions("monitor:job:edit")
  150. @PostMapping("/edit")
  151. @ResponseBody
  152. public AjaxResult editSave(@Validated SysJob job) throws SchedulerException, TaskException
  153. {
  154. if (!CronUtils.isValid(job.getCronExpression()))
  155. {
  156. return AjaxResult.error("修改任务'" + job.getJobName() + "'失败,Cron表达式不正确");
  157. }
  158. else if (StringUtils.containsIgnoreCase(job.getInvokeTarget(), Constants.LOOKUP_RMI))
  159. {
  160. return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'rmi://'调用");
  161. }
  162. else if (StringUtils.containsAnyIgnoreCase(job.getInvokeTarget(), new String[] { Constants.HTTP, Constants.HTTPS }))
  163. {
  164. return error("修改任务'" + job.getJobName() + "'失败,目标字符串不允许'http(s)//'调用");
  165. }
  166. return toAjax(jobService.updateJob(job));
  167. }
  168. /**
  169. * 校验cron表达式是否有效
  170. */
  171. @PostMapping("/checkCronExpressionIsValid")
  172. @ResponseBody
  173. public boolean checkCronExpressionIsValid(SysJob job)
  174. {
  175. return jobService.checkCronExpressionIsValid(job.getCronExpression());
  176. }
  177. }