package com.casic.missiles.model.equipment;

import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.alibaba.excel.annotation.write.style.ContentStyle;
import com.alibaba.excel.annotation.write.style.HeadRowHeight;
import com.alibaba.excel.enums.poi.BorderStyleEnum;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.casic.missiles.annotation.DictCodeField;
import com.casic.missiles.constants.MeterDictCode;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 标准装置表
 * </p>
 *
 * @author cuicheng
 * @since 2022-12-15
 */
@ColumnWidth(30)
@HeadRowHeight(15)
@ContentRowHeight(20)
@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
@ExcelIgnoreUnannotated
@ApiModel
@Data
@TableName("equipment_standard_equipment")
public class EquipmentStandardEquipment implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @TableId("id")
    @ApiModelProperty(value = "主键", dataType = "Long")
    private Long id;

    /**
     * 标准代码
     */
    @TableField("standard_no")
    @ApiModelProperty(value = "标准代码", dataType = "String")
    @ExcelProperty(value = "标准代码", order = 0)
    private String standardNo;

    /**
     * 标准名称
     */
    @NotBlank(message = "标准名称不能为空")
    @TableField("standard_name")
    @ApiModelProperty(value = "标准名称", dataType = "String")
    @ExcelProperty(value = "标准名称", order = 1)
    private String standardName;

    /**
     * 项目编号
     */
    @NotBlank(message = "项目编号不能为空")
    @TableField("project_no")
    @ApiModelProperty(value = "项目编号", dataType = "String")
    private String projectNo;

    /**
     * 建标项目
     */
    @NotBlank(message = "建标项目不能为空")
    @TableField("construction_standard_project")
    @ApiModelProperty(value = "建标项目", dataType = "String")
    private String constructionStandardProject;

    /**
     * 组织机构代码
     */
    @NotBlank(message = "组织机构代码不能为空")
    @TableField("organize_no")
    @ApiModelProperty(value = "组织机构代码", dataType = "String")
    private String organizeNo;

    /**
     * 建标单位名称
     */
    @NotBlank(message = "建标单位名称不能为空")
    @TableField("construction_standard_unit_name")
    @ApiModelProperty(value = "建标单位名称", dataType = "String")
    private String constructionStandardUnitName;

    /**
     * 标准负责人
     */
    @TableField("standard_owner")
    @ApiModelProperty(value = "标准负责人", dataType = "Long")
    private Long standardOwner;


    /**
     * 标准负责人名称
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "标准负责人名称", dataType = "String")
    private String standardOwnerName;

    /**
     * 联系方式
     */
    @NotBlank(message = "联系方式不能为空")
    @TableField("contact_info")
    @ApiModelProperty(value = "联系方式", dataType = "String")
    private String contactInfo;

    /**
     * 类别-字典code
     */
    @NotNull(message = "类别不能为空")
    @TableField("category")
    @ApiModelProperty(value = "类别", dataType = "String")
    @DictCodeField(message = "类别不合法", cacheName = MeterDictCode.STANDARD_CATEGORY)
    private String category;

    /**
     * 类别名称
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "类别名称", dataType = "String")
    @ExcelProperty(value = "类别", order = 2)
    private String categoryName;

    /**
     * 标准等级-字典code
     */
    @NotNull(message = "标准等级不能为空")
    @TableField("standard_level")
    @ApiModelProperty(value = "标准等级", dataType = "String")
    @DictCodeField(message = "标准等级不合法", cacheName = MeterDictCode.STANDARD_LEVEL)
    private String standardLevel;

    /**
     * 标准等级名称
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "标准等级名称", dataType = "String")
    @ExcelProperty(value = "标准等级", order = 3)
    private String standardLevelName;

    /**
     * 传递范围-字典code
     */
    @NotNull(message = "传递范围不能为空")
    @TableField("transmit_range")
    @ApiModelProperty(value = "传递范围", dataType = "String")
    @DictCodeField(message = "传递范围不合法", cacheName = MeterDictCode.STANDARD_TRANSMIT_RANGE)
    private String transmitRange;

    /**
     * 传递范围名称
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "传递范围名称", dataType = "String")
    @ExcelProperty(value = "传递范围", order = 4)
    private String transmitRangeName;

    /**
     * 投资总额
     */
    @TableField("total_investment")
    @ApiModelProperty(value = "投资总额", dataType = "BigDecimal")
    private BigDecimal totalInvestment;

    /**
     * 筹建日期
     */
    @NotBlank(message = "筹建日期不能为空")
    @TableField("preparation_date")
    @ApiModelProperty(value = "筹建日期", dataType = "String")
    @ExcelProperty(value = "筹建日期", order = 8)
    private String preparationDate;

    /**
     * 标准所在实验室
     */
    @TableField("standard_laboratory")
    @ApiModelProperty(value = "标准所在实验室", dataType = "Long")
    private Long standardLaboratory;

    /**
     * 标准所在实验室名称
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "标准所在实验室名称", dataType = "String")
    @ExcelProperty(value = "标准所在部门", order = 6)
    private String standardLaboratoryName;

    /**
     * 实验室负责人
     */
    @TableField("laboratory_owner")
    @ApiModelProperty(value = "实验室负责人", dataType = "String")
    private String laboratoryOwner;


    /**
     * 实验室负责人名字
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "实验室负责人名字", dataType = "String")
    @ExcelProperty(value = "负责人", order = 7)
    private String laboratoryOwnerName;

    /**
     * 联系方式
     */
    @TableField("laboratory_owner_contact")
    @ApiModelProperty(value = "联系方式", dataType = "String")
    private String laboratoryOwnerContact;

    /**
     * 管理状态-字典code
     */
    @NotNull(message = "管理状态不能为空")
    @TableField("manager_state")
    @DictCodeField(message = "管理状态不合法", cacheName = MeterDictCode.STANDARD_MANAGER_STATE)
    @ApiModelProperty(value = "管理状态", dataType = "String")
    private String managerState;

    /**
     * 管理状态名称
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "管理状态名称", dataType = "String")
    @ExcelProperty(value = "管理状态", order = 5)
    private String managerStateName;

    /**
     * 计量专业-字典code
     */
    @NotNull(message = "计量专业不能为空")
    @TableField("measure_major")
    @ApiModelProperty(value = "计量专业", dataType = "String")
    @DictCodeField(message = "计量专业不合法", cacheName = MeterDictCode.MEASURE_MAJOR)
    private String measureMajor;
    /**
     * 计量专业名称
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "计量专业名称", dataType = "String")
    private String measureMajorName;

    /**
     * 考核单位
     */
    @NotBlank(message = "考核单位不能为空")
    @TableField("assessment_unit")
    @ApiModelProperty(value = "考核单位", dataType = "String")
    private String assessmentUnit;

    /**
     * 考核日期
     */
    @NotBlank(message = "考核日期不能为空")
    @ApiModelProperty(value = "考核日期", dataType = "String")
    @TableField("assess_date")
    private String assessDate;

    /**
     * 不确定度
     */
    @NotBlank(message = "不确定度不能为空")
    @TableField("uncertainty")
    @ApiModelProperty(value = "不确定度", dataType = "String")
    private String uncertainty;

    /**
     * 测量范围
     */
    @NotBlank(message = "测量范围不能为空")
    @TableField("mesure_range")
    @ApiModelProperty(value = "测量范围", dataType = "String")
    private String mesureRange;

    /**
     * 标准温度
     */
    @NotNull(message = "标准温度不能为空")
    @TableField("standard_temperature")
    @ApiModelProperty(value = "标准温度", dataType = "BigDecimal")
    private BigDecimal standardTemperature;

    /**
     * 标准湿度
     */
    @NotNull(message = "标准湿度不能为空")
    @TableField("standard_humidity")
    @ApiModelProperty(value = "标准湿度", dataType = "BigDecimal")
    private BigDecimal standardHumidity;

    /**
     * 版本号
     */
    @ApiModelProperty(value = "版本号", dataType = "Integer")
    @TableField("version")
    private Integer version;

    /**
     * 备注
     */
    @TableField("remark")
    @ApiModelProperty(value = "备注", dataType = "String")
    @ExcelProperty(value = "备注", order = 9)
    private String remark;

    /**
     * 删除标记
     */
    @TableField("is_del")
    @ApiModelProperty(value = "删除标记", dataType = "Integer")
    private Integer isDel;

    /**
     * 创建人
     */
    @TableField("create_user")
    @ApiModelProperty(value = "创建人", dataType = "Long")
    private Long createUser;

    /**
     * 创建时间
     */
    @TableField("create_time")
    @ApiModelProperty(value = "创建时间", dataType = "String")
    private String createTime;

    /**
     * 更新时间
     */
    @TableField("update_time")
    @ApiModelProperty(value = "更新时间", dataType = "String")
    private String updateTime;

    /**
     * 提醒时间
     */
    @TableField("remind_time")
    @ApiModelProperty(value = "提醒时间", dataType = "String")
    private String remindTime;

    /**
     * 有效时间
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "有效时间", dataType = "String")
    private String validTime;


    /**
     * 文件列表
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "文件列表", dataType = "List")
    private List<EquipmentStandardEquipmentFile> fileList;

    /**
     * 关联计量人员列表
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "关联计量人员列表", dataType = "List")
    private List<EquipmentStandardEquipmentUser> userList;

    /**
     * 关联配套设备列表
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "关联配套设备列表", dataType = "List")
    private List<EquipmentStandardSupportEquipment> equipmentList;

    /**
     * 关联检定规程列表
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "关联检定规程列表", dataType = "List")
    private List<EquipmentStandardVerifyRegulation> verifyRegulationList;


    //山海鲸使用参数
    @TableField(exist = false)
    @ApiModelProperty(value = "标准装置名称", dataType = "String")
    private String 标准装置名称;
    public String get标准装置名称() {
        return this.standardName;
    }

    @TableField(exist = false)
    @ApiModelProperty(value = "负责人", dataType = "String")
    private String 负责人;
    public String get负责人() {
        return this.laboratoryOwnerName;
    }
    // TODO: 2023/6/26 质量模块完成后需调整这里使用validTime
    @TableField(exist = false)
    @ApiModelProperty(value = "到期时间", dataType = "String")
    private String 到期时间;
    public String get到期时间() {
        return this.remindTime;
    }
}
