package com.qqchen.deploy.backend.schedule.job;

import java.util.Map;

/**
 * 定时任务统一接口
 * 所有定时任务都应实现此接口，以便统一管理和调度
 *
 * @author qichen
 */
public interface IScheduleJob {

    /**
     * 执行任务
     *
     * @param params 任务参数（从表单定义或数据库配置中获取）
     * @throws Exception 任务执行异常
     */
    void execute(Map<String, Object> params) throws Exception;

    /**
     * 获取任务名称
     *
     * @return 任务名称
     */
    default String getJobName() {
        return this.getClass().getSimpleName();
    }

    /**
     * 获取任务描述
     *
     * @return 任务描述
     */
    default String getJobDescription() {
        return "定时任务";
    }

    /**
     * 是否支持进度报告
     * 返回true表示该任务会主动上报进度，返回false则只记录开始和结束
     *
     * @return 是否支持进度报告
     */
    default boolean supportProgress() {
        return false;
    }

    /**
     * 任务执行前的预处理
     * 可用于参数验证、资源准备等
     *
     * @param params 任务参数
     * @throws Exception 预处理异常
     */
    default void beforeExecute(Map<String, Object> params) throws Exception {
        // 默认空实现
    }

    /**
     * 任务执行后的后处理
     * 可用于资源释放、结果处理等
     *
     * @param params 任务参数
     * @param success 是否执行成功
     */
    default void afterExecute(Map<String, Object> params, boolean success) {
        // 默认空实现
    }
}

