package com.aegis.resource.material.domain;

import com.aegis.common.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.math.BigDecimal;
import java.util.Date;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 物资实体类 resource_material
 * 
 * @author aegis
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("resource_material")
public class Material extends BaseEntity {
    
    private static final long serialVersionUID = 1L;

    /** 物资ID */
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /** 物资编码 */
    @NotBlank(message = "物资编码不能为空")
    @Size(max = 50, message = "物资编码长度不能超过50个字符")
    private String materialCode;

    /** 物资名称 */
    @NotBlank(message = "物资名称不能为空")
    @Size(max = 200, message = "物资名称长度不能超过200个字符")
    private String materialName;

    /** 分类ID */
    private Long categoryId;

    /** 分类名称（关联查询字段，不持久化） */
    @TableField(exist = false)
    @Size(max = 100, message = "分类名称长度不能超过100个字符")
    private String categoryName;

    /** 单位 */
    @Size(max = 16, message = "单位长度不能超过16个字符")
    private String unit;

    /** 规格 */
    @Size(max = 200, message = "规格长度不能超过200个字符")
    private String spec;

    /** 品牌 */
    @Size(max = 100, message = "品牌长度不能超过100个字符")
    private String brand;

    /** 批次号 */
    @Size(max = 64, message = "批次号长度不能超过64个字符")
    private String batchNo;

    /** 过期日期 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date expireDate;

    /** 是否可重复使用：0-否，1-是 */
    private Integer reusable;

    /** 回收政策 */
    @Size(max = 200, message = "回收政策长度不能超过200个字符")
    private String recyclePolicy;

    /** 是否需要消毒：0-否，1-是 */
    private Integer sterilizeRequired;

    /** 报警阈值 */
    @DecimalMin(value = "0.00", message = "报警阈值不能为负数")
    private BigDecimal threshold;

    /** 锁定数量 */
    @DecimalMin(value = "0.00", message = "锁定数量不能为负数")
    private BigDecimal lockedQty;

    /** 已使用数量 */
    @DecimalMin(value = "0.00", message = "已使用数量不能为负数")
    private BigDecimal usedQty;

    /** 总数量（聚合字段，不持久化） */
    @TableField(exist = false)
    private BigDecimal totalQty;

    /** 可用数量（聚合字段，不持久化） */
    @TableField(exist = false)
    private BigDecimal availableQty;
}