package cn.edu.whu.boot.xml.domain;

import java.io.Serializable;
import java.util.Date;

/**
 * 对应 public.task 表
 */
public class Task implements Serializable{

    private static final long serialVersionUID = 4569485495696088421L;

    public static final int HAS_CREATE_TABLES = 1;
    public static final int NOT_CREATE_TABLES = 0;
    public static final int WITHOUT_ALLOCATION = 1;

    /**
     * 主键
     */
    private Integer id;

    /**
     * 项目名称
     */
    private String taskName;

    /**
     * 该项目对应的数据库名!
     * 注意 PostgreSQL 数据库有一个 schema(模式) 的概念! 为了更好地使每个项目对应的数据库独立，
     * 这里就使用了 schema ! 像 public 就是个 schema ! 也就是说通过  schema.table 可以唯一的确定一个表!!!
     */
    private String databaseName;

    /**
     * 创建该任务的操作员
     */
    private String operator;

    /**
     * 创建时间
     */
    private Date createTime;

    /**
     * 修改时间
     */
    private Date modifyTime;

    /**
     * 是否已经创建数据库!!!
     * 如果没有创建数据库，这个时候任务可以重新修改配置!
     * 如果已经创建数据库，这个时候任务只能查看，不能修改!
     */
    private int hasCreateTables = NOT_CREATE_TABLES;

    /**
     * 任务介绍
     */
    private String introduction;

    /**
     * 该字段标记任务是否无需进行分配操作，就可以进行采集
     */
    private int isAllocationOptional;

    /**
     * 该任务对应的 XmlEnity 的主键
     */
    private Integer xmlId;

    /**
     * 记录当前任务的 config 字符串，这里面主要就是配置的内容
     * 基于该字符串可以生成 cn.edu.whu.boot.xml.xmlreader.bean.Config 对象!!!
     */
    private String config;

    /**
     * 上传截止时间，这个字段主要用于统计采集人员的每日工作量!
     * 既然统计每日工作量，需要确定每日的具体时间是什么时候。
     * 例如 uploadDeadline 为 17:00 ，昨天的17:00 - 今天的17:00 算一个工作日
     */
    private String uploadDeadline;

    /**
     * 创建数据库时，此时的 XML 文件对应的 md5Code，
     * 通过该字段和 XmlEnity.md5Code 字段就可以知道 XML 文件是否发生修改
     */
    private String createTablesMd5code;

    /**
     * 如果为 0，巡查人员只能获取 collector = -1 OR reviewer = -1 OR reviewer = userId 的数据
     */
    private int isReviewerRestricted;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getTaskName() {
        return taskName;
    }

    public void setTaskName(String taskName) {
        this.taskName = taskName;
    }

    public String getOperator() {
        return operator;
    }

    public void setOperator(String operator) {
        this.operator = operator;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getModifyTime() {
        return modifyTime;
    }

    public void setModifyTime(Date modifyTime) {
        this.modifyTime = modifyTime;
    }

    public Integer getXmlId() {
        return xmlId;
    }

    public void setXmlId(Integer xmlId) {
        this.xmlId = xmlId;
    }

    public int getHasCreateTables() {
        return hasCreateTables;
    }

    public void setHasCreateTables(int hasCreateTables) {
        this.hasCreateTables = hasCreateTables;
    }

    public String getConfig() {
        return config;
    }

    public void setConfig(String config) {
        this.config = config;
    }

    public String getDatabaseName() {
        return databaseName;
    }

    public void setDatabaseName(String databaseName) {
        this.databaseName = databaseName;
    }

    public String getIntroduction() {
        return introduction;
    }

    public void setIntroduction(String introduction) {
        this.introduction = introduction;
    }

    public int getIsAllocationOptional(){
        return isAllocationOptional;
    }

    public void setIsAllocationOptional(int isAllocationOptional){
        this.isAllocationOptional = isAllocationOptional;
    }

    public String getUploadDeadline() {
        return uploadDeadline;
    }

    public void setUploadDeadline(String uploadDeadline) {
        this.uploadDeadline = uploadDeadline;
    }

    public String getCreateTablesMd5code() {
        return createTablesMd5code;
    }

    public void setCreateTablesMd5code(String createTablesMd5code) {
        this.createTablesMd5code = createTablesMd5code;
    }

    public int getIsReviewerRestricted() {
        return isReviewerRestricted;
    }

    public void setIsReviewerRestricted(int isReviewerRestricted) {
        this.isReviewerRestricted = isReviewerRestricted;
    }
}