package com.purui.prims.dscheduler.model;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.purui.prims.dscheduler.enums.Flag;
import com.purui.prims.dscheduler.enums.Priority;
import com.purui.prims.dscheduler.enums.TaskExecuteType;
import com.purui.prims.dscheduler.enums.TaskTimeoutStrategy;
import com.purui.prims.dscheduler.enums.TimeoutFlag;
import lombok.Data;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * task definition
 */
@Data
public class TaskDefinition {

    // id
    private Integer id;

    // 编号
    private Long code;

    // 名称
    private String name;

    // 版本号
    private Integer version;

    // 描述
    private String description;

    // 项目编号
    private Long projectCode;

    // 创建人
    private Integer userId;

    // 任务类型
    private String taskType;

    // 任务参数
    private DataXParams taskParams;

    // 任务参数列表
    private List<Property> taskParamList;

    // 任务参数映射
    private Map<String, String> taskParamMap;

    // 运行标志 yes 正常/no 禁止执行
    private Flag flag;

    // Cache
    private Flag isCache;

    // 优先级
    private Priority taskPriority;

    // 创建用户名
    private String userName;

    // 项目名称
    private String projectName;

    // worker分组
    private String workerGroup;

    // 环境编号
    private Long environmentCode;

    // 重试次数
    private Integer failRetryTimes;

    // 重试间隔
    private Integer failRetryInterval;

    // 超时标识
    private TimeoutFlag timeoutFlag;

    // 超时通知策略
    private TaskTimeoutStrategy timeoutNotifyStrategy;

    // 超时时间(分钟)
    private Integer timeout;

    // 延迟执行时间
    private Integer delayTime;

    // 资源ids
    private String resourceIds;

    // 创建时间
    @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    // 更新时间
    @JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    // 更新人
    private String modifyBy;

    // 任务组id
    private Integer taskGroupId;

    // 任务组id
    private Integer taskGroupPriority;

    // cpu 配额
    private Integer cpuQuota;

    // 最大内存
    private Integer memoryMax;

    // 执行类型
    private TaskExecuteType taskExecuteType;

    // 工作流编号
    private Long processDefinitionCode;

    // 工作流编号
    private Integer processDefinitionVersion;

    // 工作流名
    private String processDefinitionName;

    // 前置任务集合
    private Map<Long, String> upstreamTaskMap;
}
