package com.wms_main.service.quartz_job.serviceImpl;

import com.wms_main.constant.enums.jobs.JobStatusEnums;
import com.wms_main.dao.ITAppJobsService;
import com.wms_main.model.po.TAppJobs;
import com.wms_main.quartz.JobUtils;
import com.wms_main.quartz.config.JobBean;
import com.wms_main.service.quartz_job.IJobService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.quartz.Scheduler;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 定时任务服务实现
 */
@Service
@RequiredArgsConstructor
@Slf4j
public class JobServiceImpl implements IJobService {
    private final Scheduler scheduler;// 调度器
    private final ITAppJobsService tAppJobsService;// Job服务

    /**
     * 创建任务
     * @param jobBean 任务信息
     */
    @Override
    public void createJob(JobBean jobBean) {
        log.info("创建定时任务：{}。", jobBean.getJobName());
        JobUtils.createJob(scheduler, jobBean);
    }

    /**
     * 删除定时任务
     * @param jobName 任务名
     */
    @Override
    public void deleteJob(String jobName) {
        log.info("删除定时任务：{}。", jobName);
        JobUtils.deleteJob(scheduler, jobName);
    }

    /**
     * 修改定时任务
     * @param jobBean 任务信息
     */
    @Override
    public void modifyJob(JobBean jobBean) {
        log.info("修改定时任务：{}。", jobBean.getJobName());
        JobUtils.modifyJob(scheduler, jobBean);
    }

    /**
     * 暂停定时任务
     * @param jobName 任务名
     */
    @Override
    public void pauseJob(String jobName) {
        log.info("暂停定时任务：{}。", jobName);
        JobUtils.pauseJob(scheduler, jobName);
    }

    /**
     * 恢复定时任务
     * @param jobName 任务名
     */
    @Override
    public void resumeJob(String jobName) {
        log.info("恢复定时任务：{}。", jobName);
        JobUtils.resumeJob(scheduler, jobName);
    }

    /**
     * 立即执行一次任务
     * @param jobName 任务名
     */
    @Override
    public void runJobOnce(String jobName) {
        log.info("立即执行一次任务：{}。", jobName);
        JobUtils.runJobOnce(scheduler, jobName);
    }

    /**
     * 初始化所有的定时任务
     * 只创建启用的
     */
    @Override
    public void initAllJobs() {
        log.info("开始初始化定时任务。");
        List<JobBean> jobBeans = tAppJobsService.getJobs(new TAppJobs(null, null, null, null, null, JobStatusEnums.RUN.getStatus()));
        for (JobBean jobBean : jobBeans) {
            createJob(jobBean);
        }
        log.info("初始化定时任务结束，已启动{}个任务。", jobBeans.size());
    }
}
