package com.doumee.service.timer; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.service.business.third.model.PageData; import com.doumee.service.business.third.model.PageWrap; import com.doumee.core.utils.Utils; import com.doumee.dao.timer.entity.JobState; import com.doumee.dao.timer.entity.QuartzJob; import com.doumee.dao.timer.mapper.QuartzJobMapper; import com.doumee.dao.timer.scheduler.QuartzManage; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Objects; /** * @author 公众号:知了一笑 * @since 2023-07-26 11:08 */ @Service public class QuartzJobService { @Resource private QuartzJobMapper quartzJobMapper ; @Resource private QuartzManage quartzManage; /** * 任务主键查询 */ public QuartzJob getById(Integer id) { return quartzJobMapper.selectById(id) ; } /** * 新增任务 */ public int insert(QuartzJob quartzJob) { if(quartzJobMapper.selectCount(new QueryWrapper().lambda() .eq(QuartzJob::getModule,quartzJob.getModule()) .eq(QuartzJob::getBeanName,quartzJob.getBeanName())) >0){ throw new BusinessException(ResponseStatus.DATA_EXISTS); } int flag = quartzJobMapper.insert(quartzJob) ; if (flag > 0){ quartzManage.createJob(quartzJob) ; } return flag; } /** * 更新任务 */ public int update(QuartzJob quartzJob) { if(quartzJobMapper.selectCount(new QueryWrapper().lambda() .eq(QuartzJob::getModule,quartzJob.getModule()) .ne(QuartzJob::getId,quartzJob.getId()) .eq(QuartzJob::getBeanName,quartzJob.getBeanName())) >0){ throw new BusinessException(ResponseStatus.DATA_EXISTS); } int flag = quartzJobMapper.updateById(quartzJob); if (flag > 0){ quartzManage.updateJob(quartzJob); } return flag ; } /** * 暂停任务 */ public void pause(Integer id) { QuartzJob quartzJob = quartzJobMapper.selectById(id) ; if (!Objects.isNull(quartzJob)){ quartzJob.setState(JobState.JOB_STOP.getStatus()); if (quartzJobMapper.updateById(quartzJob)>0){ quartzManage.checkStop(quartzJob); } } } /** * 恢复任务 */ public void resume(Integer id) { QuartzJob quartzJob = quartzJobMapper.selectById(id) ; if (!Objects.isNull(quartzJob)){ quartzJob.setState(JobState.JOB_RUN.getStatus()); if (quartzJobMapper.updateById(quartzJob)>0){ quartzManage.resumeJob(id); } } } /** * 执行任务一次 */ public void runOnce(Integer id) { QuartzJob quartzJob = quartzJobMapper.selectById(id) ; if (!Objects.isNull(quartzJob) && quartzJob.getState() != JobState.JOB_DEL.getStatus()){ quartzManage.run(quartzJob); } } public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper queryWrapper = new QueryWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); queryWrapper.lambda() .eq(pageWrap.getModel().getId() != null, QuartzJob::getId, pageWrap.getModel().getId()) .eq(pageWrap.getModel().getParams() != null, QuartzJob::getParams, pageWrap.getModel().getParams()) .like(pageWrap.getModel().getBeanName() != null, QuartzJob::getBeanName, pageWrap.getModel().getBeanName()) .eq(pageWrap.getModel().getState() != null, QuartzJob::getState, pageWrap.getModel().getState()) .like(pageWrap.getModel().getRemark() != null, QuartzJob::getRemark, pageWrap.getModel().getRemark()) .like(pageWrap.getModel().getModule() != null, QuartzJob::getModule, pageWrap.getModel().getModule()) ; return PageData.from(quartzJobMapper.selectPage(page, queryWrapper)); } public void updateById(QuartzJob model) { QuartzJob quartzJob = quartzJobMapper.selectById(model.getId()) ; if (Objects.isNull(quartzJob)) { throw new BusinessException(ResponseStatus.DATA_EMPTY); } pause(model.getId());//暂停 //先删除就任务 quartzManage.deleteJob(model.getId()); quartzJob.setState(JobState.JOB_STOP.getStatus()); quartzJobMapper.updateById(quartzJob) ; } }