doum
2025-09-11 7298d5354963a88643a543b51b90192dc9fc934c
server/system_service/src/main/java/com/doumee/service/timer/QuartzJobService.java
@@ -1,16 +1,20 @@
package com.doumee.service.timer;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.quartz.CronTrigger;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;
/**
@@ -27,24 +31,6 @@
    private QuartzManage quartzManage;
    /**
     * 初始化加载定时任务
     */
    @PostConstruct
    public void init () {
        LambdaQueryWrapper<QuartzJob> queryWrapper = new LambdaQueryWrapper<>() ;
        queryWrapper.in(QuartzJob::getState, JobState.JOB_RUN.getStatus(),JobState.JOB_STOP.getStatus());
        List<QuartzJob> jobList = quartzJobMapper.selectList(queryWrapper);
        jobList.forEach(quartzJob -> {
            CronTrigger cronTrigger = quartzManage.getCronTrigger(quartzJob.getId()) ;
            if (Objects.isNull(cronTrigger)){
                quartzManage.createJob(quartzJob);
            } else {
                quartzManage.updateJob(quartzJob);
            }
        });
    }
    /**
     * 任务主键查询
     */
    public QuartzJob getById(Integer id) {
@@ -55,6 +41,11 @@
     * 新增任务
     */
    public int insert(QuartzJob quartzJob) {
        if(quartzJobMapper.selectCount(new QueryWrapper<QuartzJob>().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) ;
@@ -66,10 +57,16 @@
     * 更新任务
     */
    public int update(QuartzJob quartzJob) {
        if(quartzJobMapper.selectCount(new QueryWrapper<QuartzJob>().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 ;
    }
@@ -108,4 +105,32 @@
            quartzManage.run(quartzJob);
        }
    }
    public PageData<QuartzJob> findPage(PageWrap<QuartzJob> pageWrap) {
        IPage<QuartzJob> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        QueryWrapper<QuartzJob> 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) ;
    }
}