package com.ruoyi.domain;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.StandardJsonTypeHandler;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;

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

/**
 * 任务表
 */
@ApiModel
@TableName(value ="t_task", autoResultMap = true)
@Accessors(chain = true)
@Data
public class Task {

    @TableField(exist = false)
    public static final String RUN_STATUS_RUNNABLE = "RUNNABLE";
    @TableField(exist = false)
    public static final String RUN_STATUS_STATUS_RUNNING = "RUNNING";

    @TableField(exist = false)
    public static final String TASK_STATUS_NEW = "NEW";
    @TableField(exist = false)
    public static final String TASK_STATUS_PENDING = "PENDING";
    @TableField(exist = false)
    public static final String TASK_STATUS_FINISH = "FINISH";
    @TableField(exist = false)
    public static final String TASK_STATUS_TEMPORARILY = "TEMPORARILY";

    /**
     * 汽车信息安全一般要求
     */
    @TableField(exist = false)
    public static final String SUB_TASK_GRFIS = "grfis";

    /**
     * 汽车信息安全技术要求
     */
    @TableField(exist = false)
    public static final String SUB_TASK_TRFIS = "trfis";

    /**
     * 汽车信息安全管理体系要求
     */
    @TableField(exist = false)
    public static final String SUB_TASK_SRAIF = "sraif";

    @ApiModelProperty("主键")
    @TableId(type = IdType.ASSIGN_ID)
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    private Long id;

    @ApiModelProperty("体系审查任务id")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    @TableField(insertStrategy = FieldStrategy.IGNORED,updateStrategy = FieldStrategy.IGNORED,whereStrategy = FieldStrategy.IGNORED)
    private Long systemReviewTaskId;

    @ApiModelProperty("车辆检查任务id")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    @TableField(insertStrategy = FieldStrategy.IGNORED,updateStrategy = FieldStrategy.IGNORED,whereStrategy = FieldStrategy.IGNORED)
    private Long carReviewTaskId;

    @ApiModelProperty("车型检验任务id")
    @JsonFormat(shape = JsonFormat.Shape.STRING)
    @TableField(insertStrategy = FieldStrategy.IGNORED,updateStrategy = FieldStrategy.IGNORED,whereStrategy = FieldStrategy.IGNORED)
    private Long modelTestTaskId;

    @ApiModelProperty("任务状态NEW(新建的)、PENDING(运行中的)、FINISH(已结束的)、TEMPORARILY(暂存)")
    private String taskStatus;

    @ApiModelProperty("任务运行状态[RUNNABLE(可运行的)、RUNNING(运行中的)]")
    private String runStatus;

    @ApiModelProperty("任务编号")
    private String taskNo;

    @ApiModelProperty("任务名称")
    private String taskName;

    @ApiModelProperty("保密等级")
    private String confidentialityLevel;

    @ApiModelProperty("产品名称")
    private String productName;

    @ApiModelProperty(" 车辆型号(产品型号)")
    private String productModel;

    @ApiModelProperty("委托单位")
    private String entrustedUnit;

    @ApiModelProperty("委托单位地址")
    private String entrustedUnitAddress;

    @ApiModelProperty("委托单位电话")
    private String entrustedUnitPhone;

    @ApiModelProperty("委托单位邮政编码")
    private String entrustedUnitCode;

    @ApiModelProperty("整车样品信息")
    private String vehicleSampleInformation;

    @ApiModelProperty("零件样品信息")
    private String partSampleInformation;

    @ApiModelProperty("任务发起人id")
    private Long taskInitiatorId;

    @ApiModelProperty("任务发起人姓名")
    private String taskInitiator;

    @ApiModelProperty("任务发起人部门")
    private String taskInitiatorDept;

    @ApiModelProperty("任务开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private Date taskBeginTime;

    @ApiModelProperty("任务结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private Date taskEndTime;


    @JsonFormat(shape = JsonFormat.Shape.STRING)
    @ApiModelProperty("审核组长id")
    private Long leaderId;


    @ApiModelProperty("审核组长姓名")
    private String leader;


    @ApiModelProperty("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm")
    private Date createTime;


    @JsonFormat(shape = JsonFormat.Shape.STRING)
    @ApiModelProperty("关联标准表id(检验依据)")
    private Long standardId;


    @ApiModelProperty("标准名称")
    private String name;


    @ApiModelProperty("标准号")
    private String standardNo;


    @ApiModelProperty("文件路径")
    private String file;

    @ApiModelProperty("选择的项目")
    private String taskList;

    @ApiModelProperty("整车信息安全检验报告模板")
    private String retentionUrl;

    @ApiModelProperty("企业留档文件存储地址")
    private String vehicleInformationUrl;

    @ApiModelProperty("车型试验原始记录模板")
    private String modelTestUrl;

    @ApiModelProperty("指向待执行节点的指针[0、1、2]")
    private int pointer;

    @ApiModelProperty("子任务指针最大值")
    private int maxPointer;

    @ApiModelProperty("检验项目名称")
    @TableField(exist = false)
    private String inspectionItemName;

    /**
     * 返回当前节点的下一个节点
     */
    public String getNextNode() {
        String[] split = taskList.split(",");
        if(pointer < split.length) {
            return split[pointer];
        }
        return null;
    }

    public void setSystemReviewTaskIdNull(){
        this.systemReviewTaskId = null;
    }

    public void setCarReviewTaskIdNull() {
        this.carReviewTaskId = null;
    }

    public void setModelTestTaskIdNull() {
        this.modelTestTaskId = null;
    }
}