package com.hw.wms.domain;

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

import com.fasterxml.jackson.annotation.JsonFormat;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.hw.common.core.annotation.Excel;
import com.hw.common.core.web.domain.BaseEntity;

/**
 * 成品入库记录;成品入库记录对象 wms_product_instock
 *
 * @author xins
 * @date 2023-12-25
 */
public class WmsProductInstock extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * 成品入库记录ID
     */
    private Long productInstockId;

    /**
     * 任务编号;移库时必须
     */
    @Excel(name = "任务编号;移库时必须")
    private String taskCode;

    /**
     * 仓库ID
     */
    @Excel(name = "仓库ID")
    private Long warehouseId;

    /**
     * 库位编码
     */
    @Excel(name = "库位编码")
    private String locationCode;

    /**
     * 成品类型（2半成品,3成品）
     */
    @Excel(name = "成品类型", readConverterExp = "2=半成品,3成品")
    private String productType;

    /**
     * 操作类型(0自动,1手动,2强制,3调度);调度，适合双排库自动移库时
     */
    @Excel(name = "操作类型(0自动,1手动,2强制,3调度);调度，适合双排库自动移库时")
    private String operationType;

    /**
     * 计划编号,关联pd_base_plan_info的plan_id
     */
    @Excel(name = "计划编号,关联pd_base_plan_info的plan_code")
    private String planCode;

    /**
     * 计划明细ID,关联pd_base_plan_detail的plan_detail_id
     */
    @Excel(name = "计划明细编号,关联pd_base_plan_detail的plan_detail_code")
    private String planDetailCode;

    /**
     * 入库类型(1生产入库,2移库入库,3合库入库,4出半成品库,9其他入库)
     */
    @Excel(name = "入库类型(1生产入库,2移库入库,3合库入库,4出半成品库,9其他入库)")
    private String instockType;

    /** 成品ID */
    @Excel(name = "成品ID")
    private Long productId;

    /** 成品批次,等于成品条码 */
    @Excel(name = "成品批次,等于成品条码")
    private String productBatch;

    /** 入库数量 */
    @Excel(name = "入库数量")
    private BigDecimal instockAmount;

    /** 托盘RFID代码 */
    @Excel(name = "托盘RFID代码")
    private String palletInfoCode;

    /**
     * 申请原因
     */
    @Excel(name = "申请原因")
    private String applyReason;

    /**
     * 审核原因
     */
    @Excel(name = "审核原因")
    private String auditReason;

    /**
     * 审核状态(0待审核,1审核通过,2审核未通过)
     */
    @Excel(name = "审核状态(0待审核,1审核通过,2审核未通过)")
    private String auditStatus;

    /**
     * 执行状态(0待执行,1执行中,2执行完成)
     */
    @Excel(name = "执行状态(0待执行,1执行中,2执行完成)")
    private String executeStatus;

    /**
     * 申请人
     */
    @Excel(name = "申请人")
    private String applyBy;

    /**
     * 申请时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "申请时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date applyDate;

    /**
     * 审核人
     */
    @Excel(name = "审核人")
    private String auditBy;

    /**
     * 审核时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "审核时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date auditDate;

    /**
     * 最后更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "最后更新时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date updateDate;

    /**
     * 开始时间;AGV处理开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "开始时间;AGV处理开始时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date beginTime;

    /**
     * 结束时间;agv处理结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "结束时间;agv处理结束时间", width = 30, dateFormat = "yyyy-MM-dd")
    private Date endTime;

    /** 同步ERP状态(0:失败,1成功) */
    @Excel(name = "同步ERP状态(0:失败,1成功)")
    private String erpStatus;

    /** 同步给ERP的数量 */
    @Excel(name = "同步给ERP的数量")
    private BigDecimal erpAmount;

    /**
     * 成品入库记录明细信息
     */
    private List<WmsProductInstockDetail> wmsProductInstockDetailList;

    public void setProductInstockId(Long productInstockId) {
        this.productInstockId = productInstockId;
    }

    public Long getProductInstockId() {
        return productInstockId;
    }

    public void setTaskCode(String taskCode) {
        this.taskCode = taskCode;
    }

    public String getTaskCode() {
        return taskCode;
    }

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

    public Long getWarehouseId() {
        return warehouseId;
    }

    public void setLocationCode(String locationCode) {
        this.locationCode = locationCode;
    }

    public String getLocationCode() {
        return locationCode;
    }

    public void setProductType(String productType) {
        this.productType = productType;
    }

    public String getProductType() {
        return productType;
    }

    public void setOperationType(String operationType) {
        this.operationType = operationType;
    }

    public String getOperationType() {
        return operationType;
    }

    public String getPlanCode() {
        return planCode;
    }

    public void setPlanCode(String planCode) {
        this.planCode = planCode;
    }

    public String getPlanDetailCode() {
        return planDetailCode;
    }

    public void setPlanDetailCode(String planDetailCode) {
        this.planDetailCode = planDetailCode;
    }

    public void setInstockType(String instockType) {
        this.instockType = instockType;
    }

    public String getInstockType() {
        return instockType;
    }

    public Long getProductId() {
        return productId;
    }

    public void setProductId(Long productId) {
        this.productId = productId;
    }

    public String getProductBatch() {
        return productBatch;
    }

    public void setProductBatch(String productBatch) {
        this.productBatch = productBatch;
    }

    public BigDecimal getInstockAmount() {
        return instockAmount;
    }

    public void setInstockAmount(BigDecimal instockAmount) {
        this.instockAmount = instockAmount;
    }

    public String getPalletInfoCode() {
        return palletInfoCode;
    }

    public void setPalletInfoCode(String palletInfoCode) {
        this.palletInfoCode = palletInfoCode;
    }

    public void setApplyReason(String applyReason) {
        this.applyReason = applyReason;
    }

    public String getApplyReason() {
        return applyReason;
    }

    public void setAuditReason(String auditReason) {
        this.auditReason = auditReason;
    }

    public String getAuditReason() {
        return auditReason;
    }

    public void setAuditStatus(String auditStatus) {
        this.auditStatus = auditStatus;
    }

    public String getAuditStatus() {
        return auditStatus;
    }

    public void setExecuteStatus(String executeStatus) {
        this.executeStatus = executeStatus;
    }

    public String getExecuteStatus() {
        return executeStatus;
    }

    public void setApplyBy(String applyBy) {
        this.applyBy = applyBy;
    }

    public String getApplyBy() {
        return applyBy;
    }

    public void setApplyDate(Date applyDate) {
        this.applyDate = applyDate;
    }

    public Date getApplyDate() {
        return applyDate;
    }

    public void setAuditBy(String auditBy) {
        this.auditBy = auditBy;
    }

    public String getAuditBy() {
        return auditBy;
    }

    public void setAuditDate(Date auditDate) {
        this.auditDate = auditDate;
    }

    public Date getAuditDate() {
        return auditDate;
    }

    public void setUpdateDate(Date updateDate) {
        this.updateDate = updateDate;
    }

    public Date getUpdateDate() {
        return updateDate;
    }

    public void setBeginTime(Date beginTime) {
        this.beginTime = beginTime;
    }

    public Date getBeginTime() {
        return beginTime;
    }

    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }

    public Date getEndTime() {
        return endTime;
    }

    public String getErpStatus() {
        return erpStatus;
    }

    public void setErpStatus(String erpStatus) {
        this.erpStatus = erpStatus;
    }

    public BigDecimal getErpAmount() {
        return erpAmount;
    }

    public void setErpAmount(BigDecimal erpAmount) {
        this.erpAmount = erpAmount;
    }

    public List<WmsProductInstockDetail> getWmsProductInstockDetailList() {
        return wmsProductInstockDetailList;
    }

    public void setWmsProductInstockDetailList(List<WmsProductInstockDetail> wmsProductInstockDetailList) {
        this.wmsProductInstockDetailList = wmsProductInstockDetailList;
    }

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("productInstockId", getProductInstockId())
                .append("taskCode", getTaskCode())
                .append("warehouseId", getWarehouseId())
                .append("locationCode", getLocationCode())
                .append("productType", getProductType())
                .append("operationType", getOperationType())
                .append("planCode", getPlanCode())
                .append("planDetailCode", getPlanDetailCode())
                .append("instockType", getInstockType())
                .append("applyReason", getApplyReason())
                .append("auditReason", getAuditReason())
                .append("auditStatus", getAuditStatus())
                .append("executeStatus", getExecuteStatus())
                .append("applyBy", getApplyBy())
                .append("applyDate", getApplyDate())
                .append("auditBy", getAuditBy())
                .append("auditDate", getAuditDate())
                .append("updateBy", getUpdateBy())
                .append("updateDate", getUpdateDate())
                .append("beginTime", getBeginTime())
                .append("endTime", getEndTime())
                .append("wmsProductInstockDetailList", getWmsProductInstockDetailList())
                .toString();
    }
}
