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