package com.bonus.material.devchange.domain;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.bonus.material.device.domain.vo.DevInfoPropertyVo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 装备实体类
 * 存储装备的详细信息，包括基本属性、状态、使用情况、文档资料等
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MaDevInfo {
    /**
     * 设备id
     */
    private Integer maId;

    private Integer devId;
    /**
     * 类型id
     */
    private Integer typeId;
    /**
     * 订单id
     */
    private Integer orderId;
    /**
     * 所属省份
     * 说明：装备当前所在的省份
     */
    private String province;
    /**
     * 专业Id
     * 说明：装备所属的专业领域（如机械、电子、建筑等）
     */
    private Integer majorId;
    /**
     * 专业
     * 说明：装备所属的专业领域（如机械、电子、建筑等）
     */
    private String major;
    /**
     * 管理模式
     */
    private String manageType;
    /**
     * 数量
     */
    private Integer count;
    /**
     * 主工序id
     */
    private Integer mainProcessId;
    /**
     * 主工序
     * 说明：装备主要参与的工序环节
     */
    private String mainProcess;
    /**
     * 子工序id
     * 说明：装备参与的具体子工序
     */
    private Integer subProcessId;
    /**
     * 子工序
     * 说明：装备参与的具体子工序
     */
    private String subProcess;

    /**
     * 装备大类目id
     * 说明：装备所属的一级分类（如工程机械、仪器仪表等）
     */
    private Integer mainCategoryId;
    /**
     * 装备大类目
     * 说明：装备所属的一级分类（如工程机械、仪器仪表等）
     */
    private String mainCategory;
    /**
     * 装备小类目id
     * 说明：装备所属的二级分类，主类目下的细分分类
     */
    private Integer subCategoryId;
    /**
     * 装备小类目
     * 说明：装备所属的二级分类，主类目下的细分分类
     */
    private String subCategory;
    /**
     * 装备分支id
     * 说明：小类目下的更细分类，代表具体的装备类型分支
     */
    private Integer branchId;
    /**
     * 装备分支
     * 说明：小类目下的更细分类，代表具体的装备类型分支
     */
    private String branch;

    /**
     * 装备名称
     * 说明：装备的具体名称，用于标识和展示
     */
    private String name;

    /**
     * 规格型号
     * 说明：装备的规格和型号信息，反映装备的技术参数
     */
    private String specificationModel;

    /**
     * 装备编码
     * 说明：系统内部为装备分配的唯一编码，用于管理和识别
     */
    private String code;

    /**
     * 装备状态
     * 说明：装备当前的状态（如在用、闲置、维修中、报废等）
     */
    private String status;

    /**
     * 使用年限
     * 说明：装备已使用的年限
     */
    private String serviceLife;

    /**
     * 使用项目Id
     * 说明：装备当前正在使用的项目名称
     */
    private String usingProjectId;
    /**
     * 使用项目
     * 说明：装备当前正在使用的项目名称
     */
    private String usingProject;

    /**
     * 使用到期时间
     * 说明：装备预计的使用到期时间或租赁到期时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date expirationTime;

    /**
     * 使用次数
     * 说明：装备累计的使用次数统计
     */
    private Integer usageCount;

    /**
     * 维修次数
     * 说明：装备累计的维修次数统计
     */
    private Integer repairCount;

    /**
     * 装备原始编码
     * 说明：装备出厂时厂家赋予的原始编码，用于溯源
     */
    private String originalCode;

    /**
     * 计量单位
     * 说明：装备的计量单位（如台、套、个等）
     */
    private String unit;
    /**
     * 生产厂家id
     * 说明：装备的生产制造厂商名称
     */
    private Integer manufacturerId;
    /**
     * 生产厂家
     * 说明：装备的生产制造厂商名称
     */
    private String manufacturer;

    /**
     * 出厂日期
     * 说明：装备从厂家生产出厂的日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date productionDate;

    // 新增：开始出厂时间（查询条件，用于筛选 >= 该日期的记录）
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date startProductionDate;

    // 新增：结束出厂时间（查询条件，用于筛选 <= 该日期的记录）
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date endProductionDate;


    /**
     * 采购日期
     * 说明：装备被采购入库的日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date purchaseDate;
    /**
     * 开始采购日期
     * 说明：装备被采购入库的日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date startPurchaseDate;
    /**
     * 结束采购日期
     * 说明：装备被采购入库的日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date endPurchaseDate;

    /**
     * 资产原值（元）
     * 说明：装备的原始采购价值，以元为单位
     */
    private BigDecimal originalValue;

    /**
     * 资产净值（元）
     * 说明：装备的当前采购价值，以元为单位
     */
    private BigDecimal value;

    /**
     * 最小资产原值（元）
     * 说明：装备的原始采购价值，以元为单位
     */
    private BigDecimal minOriginalValue;


    /**
     * 最大资产原值（元）
     * 说明：装备的原始采购价值，以元为单位
     */
    private BigDecimal maxOriginalValue;

    /**
     * 最大使用年限（年）
     * 说明：装备设计的最大可使用年限
     */
    private Integer maxServiceLifeYears;

    /**
     * 下次维保日期
     * 说明：装备下一次需要进行维护保养的日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date nextMaintenanceDate;

    /**
     * 产权单位id
     * 说明：装备的所有权所属单位
     */
    private Integer propertyUnitId;
    /**
     * 产权单位
     * 说明：装备的所有权所属单位
     */
    private String propertyUnit;

    /**
     * 装备外观
     * 说明：装备外观图片的URL列表，存储装备的外观照片
     */
    private List<MaDevFile> appearanceImages;

    /**
     * 合格证
     * 说明：装备合格证的URL列表，存储合格证扫描件或照片
     */
    private List<MaDevFile> certificates;

    /**
     * 定期检验报告
     * 说明：装备定期检验报告的URL列表
     */
    private List<MaDevFile> inspectionReports;

    /**
     * 采购发票
     * 说明：装备采购发票的URL列表，存储发票扫描件或照片
     */
    private List<MaDevFile> purchaseInvoices;
    /**
     * 特征项列表
     */
    private List<DevInfoPropertyVo> propertyVoList;
    /**
     * 订单编号
     */
    private String orderNumber;
    /**
     * 订单创建人
     */
    private String orderCreateUser;
    /**
     * 订单时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date orderCreateTime;

    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date startOrderCreateTime;

    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date endOrderCreateTime;
    /**
     * 订单时间
     */

    private String orderStatus;

    private String daysDiff;

    private String remainingDays;

    private String remainingYears;

    private String yearsDiff;

    private String expirationYears;

    private String actualStartYear;

    private String remainingStartYear;

    private String isWarn;
    private String entryStatus;

    private String upDownStatus;

    private String remainingStopYear;

    private String actualStopYear;

    private Long companyId;

}
