package com.casic.missiles.quartz.service;

import java.util.*;

public interface IQuartzManager {

    /**
     * @param jobName 任务名
     * @param cls     任务
     * @param date  具体执行时间点
     * @Description: 延时一段时间后触发任务
     */
    void addJob(String jobName, Class cls, Date date);

    /**
     * @param jobName 任务名
     * @param cls     任务
     * @param date  具体执行时间点
     * @param params  传入的参数对
     * @Description: 延时一段时间后触发任务
     */
    void addJob(String jobName, Class cls, Date date, Map<String, Object> params);


    /**
     * @param jobName 任务名
     * @param cls     任务
     * @param amount  延时时间，单位 秒
     * @Description: 延时一段时间后触发任务
     */
    void addJob(String jobName, Class cls, int amount);

    /**
     * @param jobName 任务名
     * @param cls     任务
     * @param amount  延时时间，单位 秒
     * @param params  传入的参数对
     * @Description: 延时一段时间后触发任务
     */
    void addJob(String jobName, Class cls, int amount, Map<String, Object> params);


    /**
     * @param jobName 任务名
     * @param cls     任务
     * @param cron    时间设置,cron表达式
     * @Description: 添加一个定时任务，使用默认的任务组名，触发器名，触发器组名
     */
    void addJob(String jobName, Class cls, String cron);

    /**
     * @param jobName          任务名
     * @param jobGroupName     任务组名
     * @param triggerName      触发器名
     * @param triggerGroupName 触发器组名
     * @param jobClass         任务
     * @param cron             时间设置，cron表达式
     * @Description: 添加一个定时任务
     */
    void addJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName, Class jobClass, String cron);

    /**
     * @param jobName
     * @param cron
     * @Description: 修改一个任务的触发时间(使用默认的任务组名 ， 触发器名 ， 触发器组名)
     */
    void modifyJobTime(String jobName, String cron);


    /**
     * @param oldJobName ：原任务名
     * @param jobName
     * @param jobclass
     * @param cron
     * @Description:修改任务，（可以修改任务名，任务类，触发时间）
     */
    void modifyJob(String oldJobName, String jobName, Class jobclass, String cron);


    /**
     * @param triggerName
     * @param triggerGroupName
     * @param cron
     * @Description: 修改一个任务的触发时间
     */
    void modifyJobTime(String triggerName, String triggerGroupName, String cron);


    /**
     * @param jobName
     * @Description 移除一个任务(使用默认的任务组名 ， 触发器名 ， 触发器组名)
     */
    void removeJob(String jobName);

    /**
     * @param jobName
     * @param jobGroupName
     * @param triggerName
     * @param triggerGroupName
     * @Description: 移除一个任务
     */
    void removeJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName);


    /**
     * @param jobName
     * @Description:暂停一个任务(使用默认组名)
     */
    void pauseJob(String jobName);

    /**
     * @param jobName
     * @param jobGroupName
     * @Description:暂停一个任务
     */
    void pauseJob(String jobName, String jobGroupName);

    /**
     * @param jobName
     * @Description:恢复一个任务(使用默认组名)
     */
    void resumeJob(String jobName);

    /**
     * @param jobName
     * @param jobGroupName
     * @Description:恢复一个任务
     */
    void resumeJob(String jobName, String jobGroupName);

    /**
     * @Description:启动所有定时任务
     */
    void startJobs();

    /**
     * @Description 关闭所有定时任务
     */
    void shutdownJobs();

    /**
     * @param jobName
     * @Description: 立即运行任务，这里的立即运行，只会运行一次，方便测试时用。
     */
    void triggerJob(String jobName);

    /**
     * @param jobName
     * @param jobGroupName
     * @Description: 立即运行任务，这里的立即运行，只会运行一次，方便测试时用。
     */
    void triggerJob(String jobName, String jobGroupName);

}
