| | |
| | | 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; |
| | | |
| | | /** |
| | | * 调度任务信息表 服务实现类 |
| | |
| | | * @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; |
| | | } |
| | | } |