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.springframework.stereotype.Service;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import java.util.Date;
|
|
/**
|
* 调度任务信息表 服务实现类
|
*
|
* @author BladeX
|
* @since 2024-01-10
|
*/
|
@Service
|
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;
|
}
|
}
|