package com.prolog.cs.biz.inbound.dto.task;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.prolog.cs.biz.inbound.constant.ValidatorGroup.validAdd;
import com.prolog.cs.biz.inbound.constant.ValidatorGroup.validEdit;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.springframework.format.annotation.DateTimeFormat;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * @Description 收货异常任务池
 * @Author Xiong
 * @Date 2021-04-02
 */

@ApiModel
public class TaskExceptionDetailDTO implements Serializable {
	private static final long serialVersionUID = 131326551710664843L;
	@ApiModelProperty(value = "ID(主键雪花id)", required = true)
	@NotBlank(message = "ID(主键雪花id) can not blank!", groups = validEdit.class)
	private String taskExceptionId;

	@ApiModelProperty(value = "货主ID(隐藏字段)", position = 2, required = true)
	@NotBlank(message = "货主ID can not blank!", groups = validAdd.class)
	private String mtlOwnerId;

	@ApiModelProperty(value = "仓库ID(隐藏字段)", position = 2, required = true)
	@NotBlank(message = "仓库ID can not blank!", groups = validAdd.class)
	private String warehouseId;

	@ApiModelProperty(value = "包装单位", position = 1, required = true)
	@NotBlank(message = "包装单位 can not blank!", groups = validAdd.class)
	private String uom;

	@ApiModelProperty(value = "包装含量", position = 1, required = true)
	@NotNull(message = "包装含量 can not blank!", groups = validAdd.class)
	private BigDecimal conversionRate;

	@ApiModelProperty(value = "单品数量", position = 1, required = true)
	@NotNull(message = "单品数量 can not blank!", groups = validAdd.class)
	private BigDecimal pieceQty;

	@ApiModelProperty(value = "来源单类型(隐藏字段)", position = 3)
	private String srcBillType;

	@ApiModelProperty(value = "来源单头ID(隐藏字段)", position = 3)
	private String srcHeaderId;

	@ApiModelProperty(value = "来源单行ID(隐藏字段)", position = 3)
	private String srcLineId;

	@ApiModelProperty(value = "ASN头ID(隐藏字段)", position = 3)
	private String asnHeaderId;

	@ApiModelProperty(value = "ASN行ID(隐藏字段)", position = 3)
	private String asnLineId;

	@ApiModelProperty(value = "收货单头ID(隐藏字段)", position = 3)
	private String rcvHeaderId;

	@ApiModelProperty(value = "收货行头ID(隐藏字段)", position = 3)
	private String rcvLineId;

	@ApiModelProperty(value = "商品ID(隐藏字段)", position = 3)
	private String itemId;

	@ApiModelProperty(value = "批次ID(隐藏字段)", position = 3)
	private String batchId;

	@ApiModelProperty(value = "数量")
	private BigDecimal qty;

	@ApiModelProperty(value = "批次号")
	private String batchNum;

	@ApiModelProperty(value = "生产商批号")
	private String manufacturerLotNum;

	@ApiModelProperty(value = "供应商批号")
	private String vendorBatchNum;

	@ApiModelProperty(value = "是否允许作业标识")
	private String activeFlag;

	@ApiModelProperty(value = "余量")
	private BigDecimal remainQty;

	@ApiModelProperty(value = "状态(0不可/1可执行-默认)")
	private String status;

	@ApiModelProperty(value = "状态（初始/确认）")
//	@NotBlank(message = "状态（初始/确认） can not blank!", groups = validAdd.class)
	private String qcStatus;

	@ApiModelProperty(value = "结论")
	private String result;

	@ApiModelProperty(value = "原因")
	private String reason;

	@ApiModelProperty(value = "备注,错误原因")
	private String comments;

	@ApiModelProperty(value = "执行者")
	private String executor;

	@ApiModelProperty(value = "容器编码")
	private String containerCode;

	@ApiModelProperty(value = "货格编码")
	private String goodsCaseCode;

	@ApiModelProperty(value = "任务节点（10收货错误/20质检错误/30复检错误/40上架错误）")
	private String nodeType;

	@ApiModelProperty(value = "错误节点的任务id(隐藏字段)", position = 3)
	private String nodeTaskId;

	@ApiModelProperty(value = "数据版本号", hidden = true)
	private Integer dataVersion;

	@ApiModelProperty(value = "单品零散数(列表字段)", position = 4)
	private BigDecimal oddPieceQty;
	@ApiModelProperty(value = "包装件数(列表字段)", position = 4)
	private BigDecimal caseQty;
	@ApiModelProperty(value = "商品条码(列表字段)", position = 4)
	private String itemBarcode;
	@ApiModelProperty(value = "商品体积(列表字段)", position = 4)
	private BigDecimal itemVolume;
	@ApiModelProperty(value = "商品分类名(列表字段)", position = 4)
	private String categoryName;
	@ApiModelProperty(value = "商品重量(列表字段)", position = 4)
	private BigDecimal itemWeight;
	@ApiModelProperty(value = "仓库名称(列表字段)", position = 4)
	private String warehouseName;
	@ApiModelProperty(value = "库区名称(列表字段)", position = 4)
	private String warehouseAreaName;
	@ApiModelProperty(value = "商品编码(列表字段)", position = 4)
	private String itemNum;
	@ApiModelProperty(value = "商品名称(列表字段)", position = 4)
	private String itemName;

	@ApiModelProperty(value = "生产日期(列表展示用)", position = 9)
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date productionDateOld;

	@ApiModelProperty(value = "有效期至(列表展示用)", position = 9)
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date expiredDateOld;

	// ========================6.11新加========================================
	// 异常行所需字段
	@ApiModelProperty(value = "旧批号ID")
	private String batchIdOld;

	@ApiModelProperty(value = "旧批号编码")
	private String batchNumOld;

	@ApiModelProperty(value = "旧供应商批次号")
	private String vendorBatchNumOld;

	@ApiModelProperty(value = "旧生产商批号")
	private String manufacturerLotNumOld;

	@ApiModelProperty(value = "新批号")
	private String batchIdNew;

	@ApiModelProperty(value = "新批号编码")
	private String batchNumNew;

	@ApiModelProperty(value = "新生产日期")
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date productionDateNew;

	@ApiModelProperty(value = "新有效期至")
	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
	private Date expiredDateNew;

	@ApiModelProperty(value = "新供应商批次号")
	private String vendorBatchNumNew;

	@ApiModelProperty(value = "新生产商批号")
	private String manufacturerLotNumNew;

	@ApiModelProperty(value = "旧数量")
	private BigDecimal qtyOld;

	@ApiModelProperty(value = "新数量")
	private BigDecimal qtyNew;

	@ApiModelProperty(value = "包装单位类型(2019/2020)新老包装")
	private String uomType;

	@ApiModelProperty(value = "旧数量(最小单位)")
	private BigDecimal pieceQtyOld;

	@ApiModelProperty(value = "新数量（最小单位）")
	private BigDecimal pieceQtyNew;

	// 生产厂家
	@ApiModelProperty(value = "生产厂家")
	private String manufacturerName;
	// 商品规格
	@ApiModelProperty(value = "商品规格")
	private String specification;
	// 批准文号
	@ApiModelProperty(value = "批准文号")
	private String approvalNumber;

	@ApiModelProperty(value = "新的显示生产日期")
	private String showProductionDateOld;
	@ApiModelProperty(value = "旧的显示生产日期")
	private String showProductionDateNew;
	@ApiModelProperty(value = "新的显示有效期至")
	private String showExpiredDateOld;
	@ApiModelProperty(value = "旧的显示有效期至")
	private String showExpiredDateNew;

	@ApiModelProperty(value = "效期数")
	private Integer shelfLifeDays;
	@ApiModelProperty(value = "效期单位")
	private String shelfLifeUnit;
	@ApiModelProperty(value = "(新)是否委托生产(0否1是)", position = -4)
	private Integer isDelegate;

	@ApiModelProperty(value = "(新)上市许可持有人(冗余)", position = -5)
	private String itemHealthListedLicensor;
	@ApiModelProperty(value = "商品产地", position = -5)
	private String productionPlace;
	// 注册证号
	@ApiModelProperty(value = "(新)注册证号(冗余)", position = -100)
	private String itemHealthRegisterNbr;
	@ApiModelProperty(value = "存储分类(整散分离属性)", position = -100)
	private String itemHealthStoreCategory;

	public String getItemHealthRegisterNbr() {
		return itemHealthRegisterNbr;
	}

	public void setItemHealthRegisterNbr(String itemHealthRegisterNbr) {
		this.itemHealthRegisterNbr = itemHealthRegisterNbr;
	}

	public String getItemHealthStoreCategory() {
		return itemHealthStoreCategory;
	}

	public void setItemHealthStoreCategory(String itemHealthStoreCategory) {
		this.itemHealthStoreCategory = itemHealthStoreCategory;
	}

	public String getProductionPlace() {
		return productionPlace;
	}

	public void setProductionPlace(String productionPlace) {
		this.productionPlace = productionPlace;
	}

	public String getManufacturerName() {
		return manufacturerName;
	}

	public void setManufacturerName(String manufacturerName) {
		this.manufacturerName = manufacturerName;
	}

	public String getItemHealthListedLicensor() {
		return itemHealthListedLicensor;
	}

	public void setItemHealthListedLicensor(String itemHealthListedLicensor) {
		this.itemHealthListedLicensor = itemHealthListedLicensor;
	}

	public Integer getIsDelegate() {
		return isDelegate;
	}

	public void setIsDelegate(Integer isDelegate) {
		this.isDelegate = isDelegate;
	}

	public Integer getShelfLifeDays() {
		return shelfLifeDays;
	}

	public void setShelfLifeDays(Integer shelfLifeDays) {
		this.shelfLifeDays = shelfLifeDays;
	}

	public String getShelfLifeUnit() {
		return shelfLifeUnit;
	}

	public void setShelfLifeUnit(String shelfLifeUnit) {
		this.shelfLifeUnit = shelfLifeUnit;
	}

	public String getShowProductionDateOld() {
		return showProductionDateOld;
	}

	public void setShowProductionDateOld(String showProductionDateOld) {
		this.showProductionDateOld = showProductionDateOld;
	}

	public String getShowProductionDateNew() {
		return showProductionDateNew;
	}

	public void setShowProductionDateNew(String showProductionDateNew) {
		this.showProductionDateNew = showProductionDateNew;
	}

	public String getShowExpiredDateOld() {
		return showExpiredDateOld;
	}

	public void setShowExpiredDateOld(String showExpiredDateOld) {
		this.showExpiredDateOld = showExpiredDateOld;
	}

	public String getShowExpiredDateNew() {
		return showExpiredDateNew;
	}

	public void setShowExpiredDateNew(String showExpiredDateNew) {
		this.showExpiredDateNew = showExpiredDateNew;
	}

	public String getSpecification() {
		return specification;
	}

	public void setSpecification(String specification) {
		this.specification = specification;
	}

	public String getApprovalNumber() {
		return approvalNumber;
	}

	public void setApprovalNumber(String approvalNumber) {
		this.approvalNumber = approvalNumber;
	}

	public String getBatchIdOld() {
		return batchIdOld;
	}

	public void setBatchIdOld(String batchIdOld) {
		this.batchIdOld = batchIdOld;
	}

	public String getBatchNumOld() {
		return batchNumOld;
	}

	public void setBatchNumOld(String batchNumOld) {
		this.batchNumOld = batchNumOld;
	}

	public String getVendorBatchNumOld() {
		return vendorBatchNumOld;
	}

	public void setVendorBatchNumOld(String vendorBatchNumOld) {
		this.vendorBatchNumOld = vendorBatchNumOld;
	}

	public String getManufacturerLotNumOld() {
		return manufacturerLotNumOld;
	}

	public void setManufacturerLotNumOld(String manufacturerLotNumOld) {
		this.manufacturerLotNumOld = manufacturerLotNumOld;
	}

	public String getBatchIdNew() {
		return batchIdNew;
	}

	public void setBatchIdNew(String batchIdNew) {
		this.batchIdNew = batchIdNew;
	}

	public String getBatchNumNew() {
		return batchNumNew;
	}

	public void setBatchNumNew(String batchNumNew) {
		this.batchNumNew = batchNumNew;
	}

	public Date getProductionDateNew() {
		return productionDateNew;
	}

	public void setProductionDateNew(Date productionDateNew) {
		this.productionDateNew = productionDateNew;
	}

	public Date getExpiredDateNew() {
		return expiredDateNew;
	}

	public void setExpiredDateNew(Date expiredDateNew) {
		this.expiredDateNew = expiredDateNew;
	}

	public String getVendorBatchNumNew() {
		return vendorBatchNumNew;
	}

	public void setVendorBatchNumNew(String vendorBatchNumNew) {
		this.vendorBatchNumNew = vendorBatchNumNew;
	}

	public String getManufacturerLotNumNew() {
		return manufacturerLotNumNew;
	}

	public void setManufacturerLotNumNew(String manufacturerLotNumNew) {
		this.manufacturerLotNumNew = manufacturerLotNumNew;
	}

	public BigDecimal getQtyOld() {
		return qtyOld;
	}

	public void setQtyOld(BigDecimal qtyOld) {
		this.qtyOld = qtyOld;
	}

	public BigDecimal getQtyNew() {
		return qtyNew;
	}

	public void setQtyNew(BigDecimal qtyNew) {
		this.qtyNew = qtyNew;
	}

	public String getUomType() {
		return uomType;
	}

	public void setUomType(String uomType) {
		this.uomType = uomType;
	}

	public BigDecimal getPieceQtyOld() {
		return pieceQtyOld;
	}

	public void setPieceQtyOld(BigDecimal pieceQtyOld) {
		this.pieceQtyOld = pieceQtyOld;
	}

	public BigDecimal getPieceQtyNew() {
		return pieceQtyNew;
	}

	public void setPieceQtyNew(BigDecimal pieceQtyNew) {
		this.pieceQtyNew = pieceQtyNew;
	}

	public Date getProductionDateOld() {
		return productionDateOld;
	}

	public void setProductionDateOld(Date productionDateOld) {
		this.productionDateOld = productionDateOld;
	}

	public Date getExpiredDateOld() {
		return expiredDateOld;
	}

	public void setExpiredDateOld(Date expiredDateOld) {
		this.expiredDateOld = expiredDateOld;
	}

	public String getTaskExceptionId() {
		return taskExceptionId;
	}

	public void setTaskExceptionId(String taskExceptionId) {
		this.taskExceptionId = taskExceptionId;
	}

	public String getMtlOwnerId() {
		return mtlOwnerId;
	}

	public void setMtlOwnerId(String mtlOwnerId) {
		this.mtlOwnerId = mtlOwnerId;
	}

	public String getWarehouseId() {
		return warehouseId;
	}

	public void setWarehouseId(String warehouseId) {
		this.warehouseId = warehouseId;
	}

	public String getUom() {
		return uom;
	}

	public void setUom(String uom) {
		this.uom = uom;
	}

	public BigDecimal getConversionRate() {
		return conversionRate;
	}

	public void setConversionRate(BigDecimal conversionRate) {
		this.conversionRate = conversionRate;
	}

	public BigDecimal getPieceQty() {
		return pieceQty;
	}

	public void setPieceQty(BigDecimal pieceQty) {
		this.pieceQty = pieceQty;
	}

	public String getSrcBillType() {
		return srcBillType;
	}

	public void setSrcBillType(String srcBillType) {
		this.srcBillType = srcBillType;
	}

	public String getSrcHeaderId() {
		return srcHeaderId;
	}

	public void setSrcHeaderId(String srcHeaderId) {
		this.srcHeaderId = srcHeaderId;
	}

	public String getSrcLineId() {
		return srcLineId;
	}

	public void setSrcLineId(String srcLineId) {
		this.srcLineId = srcLineId;
	}

	public String getAsnHeaderId() {
		return asnHeaderId;
	}

	public void setAsnHeaderId(String asnHeaderId) {
		this.asnHeaderId = asnHeaderId;
	}

	public String getAsnLineId() {
		return asnLineId;
	}

	public void setAsnLineId(String asnLineId) {
		this.asnLineId = asnLineId;
	}

	public String getRcvHeaderId() {
		return rcvHeaderId;
	}

	public void setRcvHeaderId(String rcvHeaderId) {
		this.rcvHeaderId = rcvHeaderId;
	}

	public String getRcvLineId() {
		return rcvLineId;
	}

	public void setRcvLineId(String rcvLineId) {
		this.rcvLineId = rcvLineId;
	}

	public String getItemId() {
		return itemId;
	}

	public void setItemId(String itemId) {
		this.itemId = itemId;
	}

	public String getBatchId() {
		return batchId;
	}

	public void setBatchId(String batchId) {
		this.batchId = batchId;
	}

	public String getNodeTaskId() {
		return nodeTaskId;
	}

	public void setNodeTaskId(String nodeTaskId) {
		this.nodeTaskId = nodeTaskId;
	}

	public BigDecimal getQty() {
		return qty;
	}

	public void setQty(BigDecimal qty) {
		this.qty = qty;
	}

	public String getBatchNum() {
		return batchNum;
	}

	public void setBatchNum(String batchNum) {
		this.batchNum = batchNum;
	}

	public String getManufacturerLotNum() {
		return manufacturerLotNum;
	}

	public void setManufacturerLotNum(String manufacturerLotNum) {
		this.manufacturerLotNum = manufacturerLotNum;
	}

	public String getVendorBatchNum() {
		return vendorBatchNum;
	}

	public void setVendorBatchNum(String vendorBatchNum) {
		this.vendorBatchNum = vendorBatchNum;
	}

	public String getActiveFlag() {
		return activeFlag;
	}

	public void setActiveFlag(String activeFlag) {
		this.activeFlag = activeFlag;
	}

	public BigDecimal getRemainQty() {
		return remainQty;
	}

	public void setRemainQty(BigDecimal remainQty) {
		this.remainQty = remainQty;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public String getQcStatus() {
		return qcStatus;
	}

	public void setQcStatus(String qcStatus) {
		this.qcStatus = qcStatus;
	}

	public String getResult() {
		return result;
	}

	public void setResult(String result) {
		this.result = result;
	}

	public String getReason() {
		return reason;
	}

	public void setReason(String reason) {
		this.reason = reason;
	}

	public String getComments() {
		return comments;
	}

	public void setComments(String comments) {
		this.comments = comments;
	}

	public String getExecutor() {
		return executor;
	}

	public void setExecutor(String executor) {
		this.executor = executor;
	}

	public String getContainerCode() {
		return containerCode;
	}

	public void setContainerCode(String containerCode) {
		this.containerCode = containerCode;
	}

	public String getGoodsCaseCode() {
		return goodsCaseCode;
	}

	public void setGoodsCaseCode(String goodsCaseCode) {
		this.goodsCaseCode = goodsCaseCode;
	}

	public String getNodeType() {
		return nodeType;
	}

	public void setNodeType(String nodeType) {
		this.nodeType = nodeType;
	}

	public Integer getDataVersion() {
		return dataVersion;
	}

	public void setDataVersion(Integer dataVersion) {
		this.dataVersion = dataVersion;
	}

	public BigDecimal getOddPieceQty() {
		return oddPieceQty;
	}

	public void setOddPieceQty(BigDecimal oddPieceQty) {
		this.oddPieceQty = oddPieceQty;
	}

	public BigDecimal getCaseQty() {
		return caseQty;
	}

	public void setCaseQty(BigDecimal caseQty) {
		this.caseQty = caseQty;
	}

	public String getItemBarcode() {
		return itemBarcode;
	}

	public void setItemBarcode(String itemBarcode) {
		this.itemBarcode = itemBarcode;
	}

	public BigDecimal getItemVolume() {
		return itemVolume;
	}

	public void setItemVolume(BigDecimal itemVolume) {
		this.itemVolume = itemVolume;
	}

	public String getCategoryName() {
		return categoryName;
	}

	public void setCategoryName(String categoryName) {
		this.categoryName = categoryName;
	}

	public BigDecimal getItemWeight() {
		return itemWeight;
	}

	public void setItemWeight(BigDecimal itemWeight) {
		this.itemWeight = itemWeight;
	}

	public String getWarehouseName() {
		return warehouseName;
	}

	public void setWarehouseName(String warehouseName) {
		this.warehouseName = warehouseName;
	}

	public String getWarehouseAreaName() {
		return warehouseAreaName;
	}

	public void setWarehouseAreaName(String warehouseAreaName) {
		this.warehouseAreaName = warehouseAreaName;
	}

	public String getItemNum() {
		return itemNum;
	}

	public void setItemNum(String itemNum) {
		this.itemNum = itemNum;
	}

	public String getItemName() {
		return itemName;
	}

	public void setItemName(String itemName) {
		this.itemName = itemName;
	}

}
