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-07
 */
@ColumnWidth(30)
@HeadRowHeight(15)
@ContentRowHeight(20)
@ContentStyle(borderLeft = BorderStyleEnum.THIN, borderBottom = BorderStyleEnum.THIN, borderTop = BorderStyleEnum.THIN, borderRight = BorderStyleEnum.THIN)
@ExcelIgnoreUnannotated
@ApiModel
@TableName("equipment_fixed_assets")
@Data
public class EquipmentFixedAssets implements Serializable {

    private static final long serialVersionUID = 1L;

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

    /**
     * 资产编号
     */
    @ExcelProperty("固定资产编号")
    @TableField("asset_no")
    @ApiModelProperty(value = "资产编号", dataType = "String", required = true)
    private String assetNo;

    /**
     * 资产类型-字典code
     */
    @NotNull(message = "资产类型不能为空")
    @TableField("asset_type")
    @ApiModelProperty(value = "资产类型", dataType = "String", required = true)
    @DictCodeField(message = "资产类型不合法", cacheName = MeterDictCode.ASSET_TYPE)
    private String assetType;

    /**
     * 资产类型名称
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "资产类型名称", dataType = "String", required = true)
    private String assetTypeName;

    /**
     * 设备名称
     */
    @ExcelProperty("设备名称")
    @NotBlank(message = "设备名称不能为空")
    @TableField("equipment_name")
    @ApiModelProperty(value = "设备名称", dataType = "String", required = true)
    private String equipmentName;

    /**
     * 设备编号
     */
    @TableField("equipment_no")
    @ApiModelProperty(value = "设备编号", dataType = "String", required = true)
    private String equipmentNo;

    /**
     * 型号
     */
    @ExcelProperty("型号")
//    @NotBlank(message = "型号不能为空")
    @TableField("model_no")
    @ApiModelProperty(value = "型号", dataType = "String", required = true)
    private String modelNo;

    /**
     * 是否加入固定资产台账
     */
    @TableField("is_fixed_assets")
    @ApiModelProperty(value = "是否加入固定资产台账", dataType = "Integer", required = true)
    private Integer isFixedAssets;

    /**
     * 是否强制检定
     */
    @TableField("compulsory_verification")
    @ApiModelProperty(value = "是否强制检定", dataType = "Integer", required = true)
    private Integer compulsoryVerification;

    /**
     * 生产厂家
     */
//    @NotBlank(message = "生产厂家不能为空")
    @TableField("manufacturer")
    @ApiModelProperty(value = "生产厂家", dataType = "String", required = true)
    private String manufacturer;

    /**
     * 厂家国别
     */
    @TableField("manufacturer_country")
    @ApiModelProperty(value = "厂家国别", dataType = "String", required = false)
    private String manufacturerCountry;

    /**
     * 出厂编号
     */
//    @NotBlank(message = "出厂编号不能为空")
    @TableField("manufacturing_no")
    @ApiModelProperty(value = "出厂编号", dataType = "String", required = false)
    private String manufacturingNo;

    /**
     * 出厂年月
     */
    @TableField("manufacturing_date")
    @ApiModelProperty(value = "出厂年月", dataType = "String", required = false)
    private String manufacturingDate;


    /**
     * 管理状态-字典code
     */
    @TableField("manager_state")
    @ApiModelProperty(value = "管理状态", dataType = "String", required = false)
    @DictCodeField(message = "管理状态不合法", cacheName = MeterDictCode.MANAGER_STATE)
    private String managerState;
    /**
     * 管理状态名称
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "管理状态名称", dataType = "String", required = false)
    private String managerStateName;

    /**
     * ABC-字典code
     */
    @TableField("ABC")
    @DictCodeField(message = "ABC不合法", cacheName = MeterDictCode.ABC)
    @ApiModelProperty(value = "ABC", dataType = "String", required = false)
    private String abc;

    /**
     * abcName
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "abcName", dataType = "String", required = false)
    private String abcName;

    /**
     * 标签绑定
     */
    @TableField("label_bind")
    @ApiModelProperty(value = "标签绑定", dataType = "String", required = false)
    private String labelBind;

    /**
     * 立卡年月
     */
    @TableField("card_establishment_date")
    @ApiModelProperty(value = "立卡年月", dataType = "String", required = false)
    private String cardEstablishmentDate;

    /**
     * 启用日期
     */
    @TableField("enable_date")
    @ApiModelProperty(value = "启用日期", dataType = "String", required = false)
    private String enableDate;

    /**
     * 检定方式-字典code
     */
    @TableField("mesure_type")
    @ApiModelProperty(value = "检定方式", dataType = "String", required = false)
    @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE)
    private String mesureType;

    /**
     * 检定方式名称
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "检定方式名称", dataType = "String", required = false)
    private String mesureTypeName;

    /**
     * 检定周期
     */
    @TableField("mesure_cycle")
    @ApiModelProperty(value = "检定周期", dataType = "Integer", required = false)
    private Integer mesureCycle;

    /**
     * 测量范围
     */
    @TableField("mesure_range")
    @ApiModelProperty(value = "测量范围", dataType = "String", required = false)
    private String mesureRange;

    /**
     * 不确定度
     */
    @TableField("uncertainty")
    @ApiModelProperty(value = "不确定度", dataType = "String", required = false)
    private String uncertainty;

    /**
     * 使用人
     */
    @TableField("use_person")
    @ApiModelProperty(value = "使用人", dataType = "String", required = false)
    private Long usePerson;

    /**
     * 使用人名称
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "使用人", dataType = "String", required = false)
    private String usePersonName;

    /**
     * 专业分类-字典code
     */
    @TableField("major_category")
    @DictCodeField(message = "专业分类不合法", cacheName = MeterDictCode.MAJOR_CATEGORY)
    @ApiModelProperty(value = "专业分类", dataType = "String", required = false)
    private String majorCategory;
    /**
     * 专业分类名称
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "专业分类名称", dataType = "String", required = false)
    private String majorCategoryName;

    //废弃，手填检定部门名称
//    /**
//     * 检定部门
//     */
//    @TableField("mesure_dept")
//    @ApiModelProperty(value = "检定部门", dataType = "Long", required = false)
//    private Long mesureDept;

    /**
     * 检定部门
     */
    @TableField("mesure_dept_name")
    @ApiModelProperty(value = "检定部门名称", dataType = "String")
    private String mesureDeptName;

    /**
     * 检定日期
     */
    @TableField("mesure_date")
    @ApiModelProperty(value = "检定日期", dataType = "String", required = false)
    private String mesureDate;

    /**
     * 有效日期
     */
    @TableField("valid_date")
    @ApiModelProperty(value = "有效日期", dataType = "String", required = false)
    private String validDate;

    /**
     * 检定结果-字典code
     */
    @TableField("mesure_result")
    @DictCodeField(message = "检定结果不合法", cacheName = MeterDictCode.MESURE_RESULT)
    @ApiModelProperty(value = "检定结果", dataType = "String", required = false)
    private String mesureResult;

    /**
     * 检定结果名称
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "检定结果名称", dataType = "String", required = false)
    private String mesureResultName;

    /**
     * 是否是技术指标需要校准检定的设备		
     */
    @TableField("is_calibration_test_equipment")
    @ApiModelProperty(value = "是否是技术指标需要校准检定的设备", dataType = "Integer", required = false)
    private Integer isCalibrationTestEquipment;

    /**
     * 是否是测量工装台账
     */
    @TableField("is_measure_account")
    @ApiModelProperty(value = "是否是测量工装台账", dataType = "Integer", required = false)
    private Integer isMeasureAccount;

    /**
     * 是否标准配套设备
     */
    @TableField("is_standard_support_equipment")
    @ApiModelProperty(value = "是否标准配套设备", dataType = "Integer", required = false)
    private Integer isStandardSupportEquipment;

    /**
     * 资产来源
     */
    @TableField("asset_source")
    @ApiModelProperty(value = "资产来源", dataType = "String", required = false)
    private String assetSource;

    /**
     * 设备规格
     */
    @ExcelProperty("设备规格")
    @TableField("equipment_specifications")
    @ApiModelProperty(value = "设备规格", dataType = "String", required = false)
    private String equipmentSpecifications;

    /**
     * 设备类别-字典code
     */
    @TableField("equipment_category")
    @DictCodeField(message = "设备类别不合法", cacheName = MeterDictCode.EQUIPMENT_CATEGORY)
    @ApiModelProperty(value = "设备类别", dataType = "String", required = false)
    private String equipmentCategory;

    /**
     * 设备类别名称
     */
    @ExcelProperty("设备类别")
    @TableField(exist = false)
    @ApiModelProperty(value = "设备类别名称", dataType = "String", required = false)
    private String equipmentCategoryName;

    /**
     * 设备类型-字典code
     */
    @TableField("equipment_type")
    @DictCodeField(message = "设备类型不合法", cacheName = MeterDictCode.EQUIPMENT_TYPE)
    @ApiModelProperty(value = "设备类型", dataType = "String", required = false)
    private String equipmentType;

    /**
     * 设备类型名称
     */
    @ExcelProperty("设备类型")
    @TableField(exist = false)
    @ApiModelProperty(value = "设备类型名称", dataType = "String", required = false)
    private String equipmentTypeName;

    /**
     * 资本来源
     */
    @TableField("capital_source")
    @DictCodeField(message = "资本来源不合法", cacheName = MeterDictCode.CAPITAL_SOURCE)
    @ApiModelProperty(value = "资本来源", dataType = "String", required = false)
    private String capitalSource;

    /**
     * 资本来源名称
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "资本来源", dataType = "String", required = false)
    private String capitalSourceName;

    /**
     * 用途
     */
    @ExcelProperty("用途")
    @TableField("purpose")
    @ApiModelProperty(value = "用途", dataType = "String", required = false)
    private String purpose;

    /**
     * 管理级别-字典code
     */
    @TableField("manager_level")
    @DictCodeField(message = "管理级别不合法", cacheName = MeterDictCode.MANAGER_LEVEL)
    @ApiModelProperty(value = "管理级别", dataType = "String", required = false)
    private String managerLevel;

    /**
     * 管理级别名称
     */
    @ExcelProperty("管理级别")
    @TableField(exist = false)
    @ApiModelProperty(value = "管理级别名称", dataType = "String", required = false)
    private String managerLevelName;

    /**
     * 使用部门
     */
    @TableField("use_dept")
    @ApiModelProperty(value = "使用部门", dataType = "Long", required = false)
    private Long useDept;

    /**
     * 使用部门名称
     */
    @ExcelProperty("使用单位")
    @TableField(exist = false)
    @ApiModelProperty(value = "使用部门名称", dataType = "String", required = false)
    private String useDeptName;

    /**
     * 技术水平
     */
    @TableField("technical_level")
    @ApiModelProperty(value = "技术水平", dataType = "String", required = false)
    private String technicalLevel;

    /**
     * 完好状态
     */
    @TableField("intact_state")
    @ApiModelProperty(value = "完好状态", dataType = "String", required = false)
    private String intactState;

    /**
     * 外形尺寸
     */
    @TableField("overall_dimension")
    @ApiModelProperty(value = "外形尺寸", dataType = "String", required = false)
    private String overallDimension;

    /**
     * 重量（吨）
     */
    @TableField("weight")
    @ApiModelProperty(value = "重量（吨）", dataType = "BigDecimal", required = false)
    private BigDecimal weight;

    /**
     * 单价
     */
    @TableField("single_price")
    @ApiModelProperty(value = "单价", dataType = "BigDecimal", required = false)
    private BigDecimal singlePrice;

    /**
     * 安装及杂费
     */
    @TableField("install_incidental_expenses")
    @ApiModelProperty(value = "安装及杂费", dataType = "String", required = false)
    private String installIncidentalExpenses;

    /**
     * 安装地点
     */
    @TableField("install_place")
    @ApiModelProperty(value = "安装地点", dataType = "String", required = false)
    private String installPlace;

    /**
     * 原值
     */
    @TableField("origin_value")
    @ApiModelProperty(value = "原值", dataType = "BigDecimal", required = false)
    private BigDecimal originValue;

    /**
     * 目前原值
     */
    @TableField("present_origin_value")
    @ApiModelProperty(value = "目前原值", dataType = "BigDecimal", required = false)
    private BigDecimal presentOriginValue;

    /**
     * 折旧年限
     */
    @TableField("depreciation_period")
    @ApiModelProperty(value = "折旧年限", dataType = "Integer", required = false)
    private Integer depreciationPeriod;

    /**
     * 折旧方法-字典code
     */
    @TableField("depreciation_method")
    @DictCodeField(message = "折旧方法不合法", cacheName = MeterDictCode.DEPRECIATION_METHOD)
    @ApiModelProperty(value = "折旧方法", dataType = "String", required = false)
    private String depreciationMethod;

    /**
     * 折旧方法名称
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "折旧方法名称", dataType = "String", required = false)
    private String depreciationMethodName;
    /**
     * 属性
     */
    @TableField("attribute")
    @ApiModelProperty(value = "属性", dataType = "String", required = false)
    private String attribute;

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

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

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

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

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

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

    /**
     * 文件
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "文件集合", dataType = "List", required = false)
    private List<EquipmentFixedAssetFile> fileList;

    /**
     * 所属标准装置编号
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "所属标准装置编号", dataType = "String", required = false)
    private String supportStandardEquipmentNo;

    /**
     * 所属标准装置编号
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "所属标准装置名称", dataType = "String", required = false)
    private String supportStandardEquipmentName;

    /**
     * 申请设备关联id
     */
    @TableField(exist = false)
    @ApiModelProperty(value = "申请设备关联id", dataType = "String", required = false)
    private String applyRelationId;


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

    @TableField(exist = false)
    @ApiModelProperty(value = "负责人", dataType = "String")
    private String 负责人;
    public String get负责人() {
        return this.usePersonName;
    }

    @TableField(exist = false)
    @ApiModelProperty(value = "到期时间", dataType = "String")
    private String 到期时间;
    public String get到期时间() {
        return this.validDate;
    }

}
