package com.xmomen.module.stockdaily.model;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.xmomen.module.stockdaily.entity.StockDaily;
import lombok.Data;
import org.hibernate.validator.constraints.*;

import javax.validation.constraints.*;

import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelTarget;
import org.springframework.beans.BeanUtils;

import java.lang.String;
import java.lang.Integer;
import java.util.Date;
import java.io.Serializable;

/**
 * @author tanxinzheng
 * @version 1.0.0
 * @date 2017-5-26 21:56:23
 */
@ExcelTarget(value = "StockDailyModel")
public
@Data
class StockDailyModel implements Serializable {

    /**
     * 主键
     */
    // 主键为必填项
    @NotBlank(message = "主键为必填项")
    // 主键字符长度限制[0,32]
    @Length(max = 32, message = "主键字符长度限制[0,32]")
    private String id;
    /**  */
    // 标识该字段为Excel中的列名
    @Excel(name = "")
    // 标识该字段为必填项，如果为空则抛出异常，异常信息为"为必填项"
    // 为必填项
    @NotBlank(message = "为必填项")
    // 字符长度限制[0,32]
    @Length(max = 32, message = "字符长度限制[0,32]")
    private String stockId;
    /**  */
    // 标识该字段在Excel中的名称
    @Excel(name = "")
    // 非空校验，如果为空则抛出异常，异常信息为"为必填项"
    @NotBlank(message = "为必填项")
    // 长度校验，最大长度为32，如果超过则抛出异常，异常信息为"字符长度限制[0,32]"
    @Length(max = 32, message = "字符长度限制[0,32]")
    private String itemId;
    /**
     * 昨日库存
     */
    // 昨日库存
    @Excel(name = "昨日库存")
    // 昨日库存数值范围[999999999,-999999999]
    @Range(max = 999999999, min = -999999999, message = "昨日库存数值范围[999999999,-999999999]")
    private Integer oldStockNum;
    /**
     * 入库库存
     */
    // 标识该字段为Excel中的入库库存
    @Excel(name = "入库库存")
    // 验证该字段是否为空
    @NotBlank(message = "入库库存为必填项")
    // 验证该字段的数值范围
    @Range(max = 999999999, min = -999999999, message = "入库库存数值范围[999999999,-999999999]")
    private Integer inNum;
    /**
     * 取消退货入库数
     */
    // 标识该字段为Excel中的取消退货入库数
    @Excel(name = "取消退货入库数")
    // 验证该字段是否为必填项
    @NotBlank(message = "取消退货入库数为必填项")
    // 验证该字段的数值范围
    @Range(max = 999999999, min = -999999999, message = "取消退货入库数数值范围[999999999,-999999999]")
    private Integer returnInNum;
    /**
     * 出库库存
     */
    // 标识该字段为Excel中的出库库存
    @Excel(name = "出库库存")
    // 验证该字段不能为空
    @NotBlank(message = "出库库存为必填项")
    // 验证该字段的数值范围在-999999999到999999999之间
    @Range(max = 999999999, min = -999999999, message = "出库库存数值范围[999999999,-999999999]")
    private Integer outNum;
    /**
     * 破损数
     */
    // 标识该字段为Excel中的"破损数"列
    @Excel(name = "破损数")
    // 验证该字段不能为空
    @NotBlank(message = "破损数为必填项")
    // 验证该字段的数值范围在-999999999到999999999之间
    @Range(max = 999999999, min = -999999999, message = "破损数数值范围[999999999,-999999999]")
    private Integer damagedNum;
    /**
     * 核销数
     */
    // 核销数
    @Excel(name = "核销数")
    // 核销数为必填项
    @NotBlank(message = "核销数为必填项")
    // 核销数数值范围[999999999,-999999999]
    @Range(max = 999999999, min = -999999999, message = "核销数数值范围[999999999,-999999999]")
    private Integer verificationNum;
    /**
     * 现库存
     */
    // 标识Excel中的列名为"现库存"
    @Excel(name = "现库存")
    // 非空校验，如果为空则提示"现库存为必填项"
    @NotBlank(message = "现库存为必填项")
    // 数值范围校验，最大值为999999999，最小值为-999999999，如果超出范围则提示"现库存数值范围[999999999,-999999999]"
    @Range(max = 999999999, min = -999999999, message = "现库存数值范围[999999999,-999999999]")
    private Integer newStockNum;
    /**
     * 快照时间
     */
    // Excel注解，指定该字段在Excel中的列名为“快照时间”
    @Excel(name = "快照时间")
    // 非空校验注解，指定该字段为必填项，如果为空则返回message中的提示信息
    @NotBlank(message = "快照时间为必填项")
    // 定义一个Date类型的字段，用于存储快照时间
    private Date dailyDate;
    /**
     * 插入时间
     */
    // 插入时间
    @Excel(name = "插入时间")
    // 插入时间为必填项
    @NotBlank(message = "插入时间为必填项")
    private Date insertDate;

    // 项目名称
    private String itemName;

    // 项目编码
    private String itemCode;

    /**
     * Get StockDaily Entity Object
     *
     * @return
     */
    @JsonIgnore
    // 获取实体
    public StockDaily getEntity() {
        // 创建StockDaily对象
        StockDaily stockDaily = new StockDaily();
        // 将当前对象的属性复制到StockDaily对象中
        BeanUtils.copyProperties(this, stockDaily);
        // 返回StockDaily对象
        return stockDaily;
    }


}
