From 67a7db2f918a801242896bf70a46e9e22d6f8660 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Fri, 29 Mar 2024 12:01:11 +0800
Subject: [PATCH] xxl job 调度任务操作修改完善
---
src/main/java/org/springblade/xxljob/service/impl/JobInfoServiceImpl.java | 127 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 125 insertions(+), 2 deletions(-)
diff --git a/src/main/java/org/springblade/xxljob/service/impl/JobInfoServiceImpl.java b/src/main/java/org/springblade/xxljob/service/impl/JobInfoServiceImpl.java
index 7fba17b..1f7c86e 100644
--- a/src/main/java/org/springblade/xxljob/service/impl/JobInfoServiceImpl.java
+++ b/src/main/java/org/springblade/xxljob/service/impl/JobInfoServiceImpl.java
@@ -1,12 +1,16 @@
package org.springblade.xxljob.service.impl;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xxl.job.core.biz.model.ReturnT;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.xxljob.cron.CronExpression;
import org.springblade.xxljob.entity.JobInfoEntity;
import org.springblade.xxljob.vo.JobInfoVO;
import org.springblade.xxljob.mapper.JobInfoMapper;
import org.springblade.xxljob.service.IJobInfoService;
-import org.springblade.core.mp.base.BaseServiceImpl;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.metadata.IPage;
+import java.util.Date;
/**
* 调度任务信息表 服务实现类
@@ -15,12 +19,131 @@
* @since 2024-01-10
*/
@Service
-public class JobInfoServiceImpl extends BaseServiceImpl<JobInfoMapper, JobInfoEntity> implements IJobInfoService {
+public class JobInfoServiceImpl extends ServiceImpl<JobInfoMapper, JobInfoEntity> implements IJobInfoService {
+
+
+ public static final long PRE_READ_MS = 5000; // pre read
+
@Override
public IPage<JobInfoVO> selectJobInfoPage(IPage<JobInfoVO> page, JobInfoVO jobInfo) {
return page.setRecords(baseMapper.selectJobInfoPage(page, jobInfo));
}
+ /**
+ * 更新任务
+ * @param jobInfo
+ * @return
+ */
+ @Override
+ public boolean updateJob(JobInfoEntity jobInfo) {
+ boolean flag = false;
+ // 获取最新任务信息
+ JobInfoEntity exists_jobInfo = getById(jobInfo.getId());
+ // next trigger time (5s后生效,避开预读周期)
+ long nextTriggerTime = jobInfo.getTriggerNextTime();
+ boolean scheduleDataNotChanged = jobInfo.getScheduleType().equals(exists_jobInfo.getScheduleType()) && jobInfo.getScheduleConf().equals(exists_jobInfo.getScheduleConf());
+ if (exists_jobInfo.getTriggerStatus() == 1 && !scheduleDataNotChanged) {
+ try {
+ Date nextValidTime = generateNextValidTime(jobInfo, new Date(System.currentTimeMillis() + PRE_READ_MS));
+ if (nextValidTime == null) {
+ return false;
+ }
+ nextTriggerTime = nextValidTime.getTime();
+ } catch (Exception e) {
+ return false;
+ }
+ }
+ exists_jobInfo.setJobGroup(jobInfo.getJobGroup());
+ exists_jobInfo.setJobDesc(jobInfo.getJobDesc());
+ exists_jobInfo.setAuthor(jobInfo.getAuthor());
+ exists_jobInfo.setAlarmEmail(jobInfo.getAlarmEmail());
+ exists_jobInfo.setScheduleType(jobInfo.getScheduleType());
+ exists_jobInfo.setScheduleConf(jobInfo.getScheduleConf());
+ exists_jobInfo.setMisfireStrategy(jobInfo.getMisfireStrategy());
+ exists_jobInfo.setExecutorRouteStrategy(jobInfo.getExecutorRouteStrategy());
+ exists_jobInfo.setExecutorHandler(jobInfo.getExecutorHandler());
+ exists_jobInfo.setExecutorParam(jobInfo.getExecutorParam());
+ exists_jobInfo.setExecutorBlockStrategy(jobInfo.getExecutorBlockStrategy());
+ exists_jobInfo.setExecutorTimeout(jobInfo.getExecutorTimeout());
+ exists_jobInfo.setExecutorFailRetryCount(jobInfo.getExecutorFailRetryCount());
+ exists_jobInfo.setChildJobid(jobInfo.getChildJobid());
+ exists_jobInfo.setTriggerNextTime(nextTriggerTime);
+ exists_jobInfo.setUpdateTime(new Date());
+ // 更新
+ flag = updateById(exists_jobInfo);
+ // 返回
+ return flag;
+ }
+
+ // ---------------------- tools ----------------------
+ public Date generateNextValidTime(JobInfoEntity jobInfo, Date fromTime) throws Exception {
+ Date nextValidTime = new CronExpression(jobInfo.getScheduleConf()).getNextValidTimeAfter(fromTime);
+ return nextValidTime;
+ }
+
+ /**
+ * 调度任务信息表 新增
+ * @param jobInfo
+ * @return
+ */
+ @Override
+ public boolean addJob(JobInfoEntity jobInfo) {
+ boolean flag = false;
+ // add in db
+ jobInfo.setAddTime(new Date());
+ jobInfo.setUpdateTime(new Date());
+ jobInfo.setGlueUpdatetime(new Date());
+ // 新增
+ flag = save(jobInfo);
+ // 返回
+ return flag;
+ }
+
+ /**
+ * 调度任务信息表 启动
+ * @param jobInfo
+ * @return
+ */
+ @Override
+ public boolean start(JobInfoEntity jobInfo) {
+ // next trigger time (5s后生效,避开预读周期)
+ long nextTriggerTime = 0;
+ try {
+ Date nextValidTime = generateNextValidTime(jobInfo, new Date(System.currentTimeMillis() + PRE_READ_MS));
+ if (nextValidTime == null) {
+ return false;
+ }
+ nextTriggerTime = nextValidTime.getTime();
+ } catch (Exception e) {
+ return false;
+ }
+ byte b = 1;
+ jobInfo.setTriggerStatus(b);
+ jobInfo.setTriggerLastTime(0L);
+ jobInfo.setTriggerNextTime(nextTriggerTime);
+
+ jobInfo.setUpdateTime(new Date());
+ boolean update = updateById(jobInfo);
+ // 返回
+ return update;
+ }
+
+ /**
+ * 调度任务信息表 停止
+ * @param jobInfo
+ * @return
+ */
+ @Override
+ public boolean stop(JobInfoEntity jobInfo) {
+ byte b = 0;
+ jobInfo.setTriggerStatus(b);
+ jobInfo.setTriggerLastTime(0L);
+ jobInfo.setTriggerNextTime(0L);
+ jobInfo.setUpdateTime(new Date());
+ boolean update = updateById(jobInfo);
+ // 返回
+ return update;
+ }
}
--
Gitblit v1.9.3