package com.monkeylessey.job.service.impl; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.monkeylessey.enums.general.JobStatusEnum; import com.monkeylessey.exception.JobException; import com.monkeylessey.job.domain.entity.SysJob; import com.monkeylessey.job.domain.form.SysJobForm; import com.monkeylessey.job.domain.query.SysJobQuery; import com.monkeylessey.job.domain.vo.SysJobVO; import com.monkeylessey.job.mapper.SysJobMapper; import com.monkeylessey.job.service.SysJobService; import com.monkeylessey.job.utis.JobUtil; import com.monkeylessey.response.Result; import com.monkeylessey.framework.utils.SecurityUtil; import com.monkeylessey.utils.PageUtil; import lombok.RequiredArgsConstructor; import org.quartz.Scheduler; import org.quartz.SchedulerException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; /** * 定时任务表 服务实现类 * * @author 向培 * @since 2022-06-08 */ @Service @RequiredArgsConstructor public class SysJobServiceImpl extends ServiceImpl implements SysJobService { private final SysJobMapper sysJobMapper; private final Scheduler scheduler; private static final Logger log = LoggerFactory.getLogger(SysJobServiceImpl.class); @Override public Result addSysJob(SysJobForm form) { SysJob entity = SysJobForm.getSysJob(null, form); String s = SecurityUtil.getCurrentUserName(); entity.setCreateBy(s); try { JobUtil.createJob(scheduler, entity); baseMapper.insert(entity); } catch (ClassNotFoundException e) { log.error(e.getMessage()); throw new JobException("Job类路径错误", e); } catch (SchedulerException e) { log.error(e.getMessage()); throw new JobException("任务异常", e); } return Result.ok("添加成功"); } @Override public Result editSysJob(SysJobForm form) { SysJob entity = SysJobForm.getSysJob(null, form); String s = SecurityUtil.getCurrentUserName(); try { JobUtil.createJob(scheduler, entity); entity.setUpdateBy(s); } catch (ClassNotFoundException e) { e.printStackTrace(); throw new JobException("Job类路径错误", e); } catch (SchedulerException e) { e.printStackTrace(); throw new JobException("任务异常", e); } baseMapper.updateById(entity); return Result.ok("修改成功"); } @Override @Transactional(rollbackFor = Exception.class) public Result deleteSysJobById(String id) { try { JobUtil.deleteJob(scheduler, baseMapper.selectById(id)); } catch (SchedulerException e) { throw new JobException("任务异常", e); } int i = baseMapper.deleteById(id); return Result.ok("删除成功"); } @Override @Transactional(rollbackFor = Exception.class) public Result deleteSysJobByIds(List ids) { try { for (String id : ids) { JobUtil.deleteJob(scheduler, baseMapper.selectById(id)); baseMapper.deleteById(id); } } catch (SchedulerException e) { e.printStackTrace(); throw new JobException("任务异常", e); } return Result.ok("操作成功").data(baseMapper.deleteBatchIds(ids)); } @Override public Result getSysJobByPage(SysJobQuery query) { List vos = new ArrayList<>(); Long total = 0L; IPage page = PageUtil.getPage(query, SysJob.class); try { new LambdaQueryChainWrapper<>(this.baseMapper).page(page); vos = page.getRecords().stream() .map(sysJob -> SysJobVO.getVoByEntity(sysJob, null)) .collect(Collectors.toList()); total = page.getTotal(); } catch (Exception e) { e.printStackTrace(); } return Result.ok().data(vos).total(total); } @Override public Result getSysJobById(String id) { SysJob entity = baseMapper.selectById(id); SysJobVO vo = new SysJobVO(); BeanUtils.copyProperties(entity, vo); return Result.ok().data(vo); } @Override public Result executeJobOnce(SysJobForm form) { try { JobUtil.executeOnce(scheduler, SysJobForm.getSysJob(null, form)); } catch (SchedulerException e) { e.printStackTrace(); throw new JobException("任务异常", e); } return Result.ok("执行成功"); } @Override public Result pauseJob(SysJobForm form) { try { JobUtil.stopJob(scheduler, SysJobForm.getSysJob(null, form)); new LambdaUpdateChainWrapper<>(baseMapper) .set(SysJob::getJobStatus, JobStatusEnum.OFF) .eq(SysJob::getId, form.getId()) .update(); } catch (SchedulerException e) { e.printStackTrace(); throw new JobException("任务异常", e); } return Result.ok("暂停成功"); } @Override public Result startJob(SysJobForm form) { try { JobUtil.startJob(scheduler, SysJobForm.getSysJob(null, form)); new LambdaUpdateChainWrapper<>(baseMapper) .set(SysJob::getJobStatus, JobStatusEnum.ON) .eq(SysJob::getId, form.getId()) .update(); } catch (SchedulerException e) { throw new JobException("任务异常", e); } return Result.ok("启动成功"); } }