JobService.java 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. package cn.cslg.pas.service.upLoadPatent;
  2. import cn.cslg.pas.common.model.vo.QuartzVO;
  3. import cn.cslg.pas.domain.QrtzTask;
  4. import cn.cslg.pas.domain.Task;
  5. import cn.cslg.pas.domain.asso.AssoOsTaskQrtzTask;
  6. import cn.cslg.pas.service.TaskService;
  7. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  8. import lombok.RequiredArgsConstructor;
  9. import lombok.extern.slf4j.Slf4j;
  10. import org.quartz.*;
  11. import org.springframework.context.annotation.Lazy;
  12. import org.springframework.stereotype.Service;
  13. import org.springframework.transaction.annotation.Transactional;
  14. @Service
  15. @Slf4j
  16. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  17. public class JobService {
  18. private final Scheduler scheduler;
  19. private final QrTaskService qrTaskService;
  20. private final TaskService taskService;
  21. //private final QrTaskDetailService qrTaskDetailService;
  22. /**
  23. * 删除job
  24. *
  25. * @throws SchedulerException
  26. */
  27. public void deleteJob(Integer taskId) throws SchedulerException {
  28. QuartzVO quartzVO = this.generateQuartzVO(taskId);
  29. TriggerKey triggerKey = TriggerKey.triggerKey(quartzVO.getTriggerName(), quartzVO.getTriggerGroupName());
  30. scheduler.pauseTrigger(triggerKey);
  31. scheduler.unscheduleJob(triggerKey);
  32. JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
  33. scheduler.deleteJob(jobKey);
  34. qrTaskService.removeById(taskId);
  35. //同时删除该任务条件的所有任务执行情况记录
  36. LambdaQueryWrapper<Task> queryWrapper = new LambdaQueryWrapper<>();
  37. queryWrapper.eq(Task::getQrtzTaskId, taskId);
  38. taskService.remove(queryWrapper);
  39. }
  40. /**
  41. * 暂停job
  42. *
  43. * @throws SchedulerException
  44. */
  45. // public void pauseJob(Integer taskId) throws SchedulerException {
  46. // QuartzVO quartzVO = this.generateQuartzVO(taskId);
  47. // //更新任务条件状态
  48. // qrTaskService.updateState(taskId, 6);
  49. // JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
  50. // scheduler.pauseJob(jobKey);
  51. // }
  52. /**
  53. * 恢复job
  54. *
  55. * @throws SchedulerException
  56. */
  57. // public void resumeJob(Integer taskId) throws SchedulerException {
  58. // QuartzVO quartzVO = this.generateQuartzVO(taskId);
  59. // qrTaskService.updateState(taskId, 1);
  60. // JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
  61. // scheduler.resumeJob(jobKey);
  62. // }
  63. /**
  64. * 修改定时任务
  65. *
  66. * @param
  67. */
  68. public void updateJob(QrtzTask qrtzTask) {
  69. //更新任务
  70. QuartzVO quartzVO = this.generateQuartzVO(qrtzTask.getId());
  71. JobDataMap jobDataMap = new JobDataMap();
  72. jobDataMap.put("qrtzTask", qrtzTask);
  73. TriggerKey oldTriggerKey = TriggerKey.triggerKey(quartzVO.getTriggerName(), quartzVO.getTriggerGroupName());
  74. CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(qrtzTask.getCrons());
  75. CronTrigger cronTrigger = TriggerBuilder.newTrigger()
  76. .withIdentity(oldTriggerKey).usingJobData(jobDataMap).withSchedule(scheduleBuilder).build();
  77. try {
  78. scheduler.rescheduleJob(oldTriggerKey, cronTrigger);
  79. } catch (SchedulerException e) {
  80. e.printStackTrace();
  81. }
  82. }
  83. /**
  84. * 新增job任务
  85. *
  86. * @throws SchedulerException
  87. */
  88. @Transactional
  89. public void addJob(AssoOsTaskQrtzTask assoOsTaskQrtzTask) throws SchedulerException {
  90. //添加一条任务记录
  91. QuartzVO quartzVO = this.generateQuartzVO(assoOsTaskQrtzTask.getId());
  92. JobDataMap jobDataMap = new JobDataMap();
  93. jobDataMap.put("assoOsTaskQrtzTask", assoOsTaskQrtzTask);
  94. CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(assoOsTaskQrtzTask.getCrons());
  95. JobDetail jobDetail = JobBuilder
  96. .newJob(TaskAddJob.class)
  97. .withIdentity(quartzVO.getJobName(), quartzVO.getJobGroupName())
  98. .build();
  99. Trigger trigger = TriggerBuilder
  100. .newTrigger()
  101. .withIdentity(quartzVO.getTriggerName(), quartzVO.getTriggerGroupName())
  102. .withSchedule(cronScheduleBuilder)
  103. .usingJobData(jobDataMap)
  104. .build();
  105. scheduler.scheduleJob(jobDetail, trigger);
  106. }
  107. public QuartzVO generateQuartzVO(Integer taskId) {
  108. QuartzVO quartzVO = new QuartzVO();
  109. quartzVO.setJobName("Job_" + taskId);
  110. quartzVO.setJobGroupName("Default");
  111. quartzVO.setTriggerName("Trigger_" + taskId);
  112. quartzVO.setTriggerGroupName("Default");
  113. return quartzVO;
  114. }
  115. /**
  116. * 停止正在进行的job
  117. *
  118. * @throws SchedulerException
  119. */
  120. public void interruptJob(Integer taskId) throws SchedulerException {
  121. QuartzVO quartzVO = this.generateQuartzVO(taskId);
  122. JobKey jobKey = JobKey.jobKey(quartzVO.getJobName(), quartzVO.getJobGroupName());
  123. scheduler.interrupt(jobKey);
  124. }
  125. }