package com.bonus.material.toolLedger.domain;

import com.bonus.common.core.annotation.Excel;
import com.bonus.material.device.domain.vo.DevInfoPropertyVo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ToolLedgerAllEntity implements Serializable {

    //用于excel导出的序号一列,不需要业务逻辑处理
    @Excel(name = "序号", isSequence = true, type = Excel.Type.EXPORT , sort = 0)
    int sequence;


    /**
     * 主键（自增）
     */
    private Long id;

    /**
     * 工具编码（编码管理使用）
     */

    private String toolCode;

    /**
     * 工具类型ID（非空）
     */
    private Long typeId;

    @Excel(name = "规格型号", sort = 5)
    private String typeName;

    /**
     * 管理方式：1-编码管理；2-数量管理（非空）
     * 建议后续用枚举
     */
    @Excel(name = "管理模式", sort = 12)
    private String manageMode;

    /**
     * 装备原值（仅编码设备）
     * 对应数据库 decimal(10,2)，用 BigDecimal 保证精度
     */

    private BigDecimal originCost;

    /**
     * 总数量（非空，默认1.00）
     */
    @Excel(name = "工具总数", sort = 11)
    private BigDecimal totalNum;


    private String unitName;

    /**
     * 在库数量（非空，默认0.00）
     */
    @Excel(name = "在库数量", sort = 6)
    private BigDecimal availableNum;

    /**
     * 在用数量（非空，默认0.00）
     */
    @Excel(name = "自用数量", sort = 7)
    private BigDecimal inNum;

    /**
     * 维修数量（非空，默认0.00）
     */
    @Excel(name = "在修数量", sort = 9)
    private BigDecimal repairNum;

    /**
     * 报废数量（非空，默认0.00）
     */
    @Excel(name = "退役数量", sort = 10)
    private BigDecimal scrapNum;

    /**
     * 共享数量
     */
    @Excel(name = "共享数量", sort = 8)
    private BigDecimal shareNum;

    /**
     * 厂家id（非空，默认0）
     */
    private Integer supplierId;


    private String supplierName;

    /**
     * 采购日期
     * 用 LocalDate 对应数据库 date 类型（Java 8+ 推荐）
     */
    private LocalDate purchaseDate;

    /**
     * 出厂日期
     */
    //@Excel(name = "出厂日期", sort = 10)
    private LocalDate productionDate;

    /**
     * 最近检验日期
     */
    private LocalDate lastCheckDate;

    /**
     * 下次检验日期
     */

    private LocalDate nextCheckDate;

    /**
     * 当前状态：0-在库 1-在用 2-在修 3-已报废（非空，默认0）
     * 建议后续用枚举
     */
    private String status;

    /**
     * 上下架状态：1-上架 0-下架（非空，默认0）
     * 建议后续用枚举
     */
    private String upDownStatus;

    /**
     * 所属公司ID（非空）
     */
    private Long companyId;

    /**
     * 备注
     */
    private String remark;

    /**
     * 创建时间（默认当前时间）
     * 对应数据库 DEFAULT CURRENT_TIMESTAMP
     */
    private LocalDateTime createTime;

    /**
     * 更新时间（默认当前时间，更新时自动刷新）
     * 对应数据库 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
     */
    private LocalDateTime updateTime;
    /**
     * 装备原值
     */

    private String identifyCode;


    /**
     * 4级父节点id
     */
    private String fourthParentId;
    /**
     * 4级父节点名称
     */
    @Excel(name = "工具专业", sort = 1)
    private String fourthParentName;

    /**
     * 3级父节点id
     */
    private String greatGrandparentId;
    /**
     * 3级父节点名称
     */
    @Excel(name = "施工类型", sort = 2)
    private String greatGrandparentName;
    /**
     * 2级父节点id
     */

    private String grandparentTypeId;
    /**
     * 2级父节点名称
     */
    @Excel(name = "工具类型", sort = 3)
    private String grandparentTypeName;

    /**
     * 1级父节点id
     */
    private String parentTypeId;
    /**
     * 1级父节点名称
     */
    @Excel(name = "工具名称", sort = 4)
    private String parentTypeName;
    /**
     * 文件地址
     */
    private String fileList;

    private List<DevInfoPropertyVo> propertyVoList = new ArrayList<>();

    private String proName;

    private String companyName;
}
