package com.ruoyi.interfaces.domain;

import com.aizuda.snailjob.common.core.enums.ExecutorTypeEnum;
import com.aizuda.snailjob.common.core.enums.JobTaskTypeEnum;
import com.aizuda.snailjob.common.core.enums.StatusEnum;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.ibatis.type.JdbcType;

/**
 * 任务信息
 *
 * @author opensnail
 * @since 2023-09-24
 */
@Data
public class Job  {

    /**
     * 主键
     */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 命名空间id
     */
    private String namespaceId;

    /**
     * 组名称
     */
    private String groupName;

    /**
     * 名称
     */
    @TableField(updateStrategy =  FieldStrategy.NOT_EMPTY)
    private String jobName;

    /**
     * 执行方法参数
     */
    @TableField(updateStrategy =  FieldStrategy.NOT_EMPTY)
    private String argsStr;

    /**
     * 参数类型 text/json
     */
    @TableField(updateStrategy =  FieldStrategy.NOT_EMPTY)
    private Integer argsType;

    /**
     * 扩展字段
     */
    @TableField(updateStrategy =  FieldStrategy.NOT_EMPTY)
    private String extAttrs;

    /**
     * 下次触发时间
     */
    private Long nextTriggerAt;

    /**
     * 重试状态 0、关闭、1、开启
     * {@link StatusEnum}
     */
    private Integer jobStatus;

    /**
     * 执行器路由策略
     */
    private Integer routeKey;

    /**
     * 执行器类型 1、Java
     * {@link ExecutorTypeEnum}
     */
    private Integer executorType;

    /**
     * 执行器信息
     */
    private String executorInfo;

    /**
     * 触发类型 1.CRON 表达式 2. 固定时间
     */
    private Integer triggerType;

    /**
     * 间隔时长
     */
    @TableField(updateStrategy =  FieldStrategy.NOT_EMPTY)
    private String triggerInterval;

    /**
     * 阻塞策略 1、丢弃 2、覆盖 3、并行
     */
    private Integer blockStrategy;

    /**
     * 任务执行超时时间，单位秒
     */
    private Integer executorTimeout;

    /**
     * 最大重试次数
     */
    private Integer maxRetryTimes;

    /**
     * 重试间隔(s)
     */
    private Integer retryInterval;

    /**
     * 任务类型
     * {@link JobTaskTypeEnum}
     */
    private Integer taskType;

    /**
     * 并行数
     */
    private Integer parallelNum;

    /**
     * bucket
     */
    private Integer bucketIndex;

    /**
     * 是否是常驻任务
     */
    private Integer resident;

    /**
     * 描述
     */
    private String description;

    /**
     * 逻辑删除 1、删除
     */
    private Integer deleted;

    /**
     * 通知告警场景配置id列表
     */
    private String notifyIds;

    /**
     * 负责人id
     */
    private Long ownerId;

    /**
     * 标签
     * json格式，如：{"key1":"value1","key2":"value2"}
     */
    @TableField(updateStrategy =  FieldStrategy.NOT_EMPTY)
    private String labels;

}
