package com.xmomen.module.pick.entity;

import com.xmomen.framework.mybatis.model.BaseMybatisModel;
import java.math.BigDecimal;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Version;

/**
 * TbPick 类是一个实体类，对应数据库中的 tb_pick 表。
 * 它继承自 BaseMybatisModel，用于封装采摘相关的信息。
 * 该类使用了 JPA 注解，方便与数据库进行交互。
 */
@Entity
@Table(name = "tb_pick")
public class TbPick extends BaseMybatisModel {
    /**
     * 主键，用于唯一标识一条采摘记录。
     */
    private Integer id;

    /**
     * 卡号，关联会员的卡片信息，用于识别会员身份。
     */
    private String couponNo;

    /**
     * 采摘重量，记录本次采摘的物品重量，使用 BigDecimal 类型确保精度。
     */
    private BigDecimal pickWeight;

    /**
     * 采摘付款方式，用整数表示不同的付款方式：
     * 1 - 刷卡
     * 2 - 现金 + 刷卡
     * 3 - 现金
     */
    private Integer pickPayType;

    /**
     * 采摘总金额，包含刷卡和现金支付的金额总和，使用 BigDecimal 类型确保精度。
     */
    private BigDecimal pickTotalPrice;

    /**
     * 刷卡金额，记录本次采摘中使用刷卡方式支付的金额，使用 BigDecimal 类型确保精度。
     */
    private BigDecimal pickCradPrice;

    /**
     * 现金金额，记录本次采摘中使用现金方式支付的金额，使用 BigDecimal 类型确保精度。
     */
    private BigDecimal pickCasePrice;

    /**
     * 采摘日期，记录采摘行为发生的具体日期。
     */
    private Date pickDate;

    /**
     * 采摘点，用整数标识采摘的具体地点。
     */
    private Integer pickPlace;

    /**
     * 结算人，用整数标识负责本次采摘结算的人员。
     */
    private Integer pickPlaceUser;

    /**
     * 获取主键值。
     * @return 主键的整数值。
     */
    @Column(name = "ID")
    @Id
    @GeneratedValue(generator = "UUIDGenerator")
    public Integer getId() {
        return id;
    }

    /**
     * 设置主键值。
     * 如果传入的主键值为 null，则从有效字段列表中移除该字段；
     * 否则，将该字段添加到有效字段列表中。
     * @param id 要设置的主键值。
     */
    public void setId(Integer id) {
        this.id = id;
        if(id == null){
            // 当 id 为 null 时，移除该字段的有效性标记
            removeValidField("id");
            return;
        }
        // 当 id 不为 null 时，添加该字段的有效性标记
        addValidField("id");
    }

    /**
     * 获取卡号。
     * @return 卡号的字符串值。
     */
    @Column(name = "COUPON_NO")
    public String getCouponNo() {
        return couponNo;
    }

    /**
     * 设置卡号。
     * 如果传入的卡号为 null，则从有效字段列表中移除该字段；
     * 否则，将该字段添加到有效字段列表中。
     * @param couponNo 要设置的卡号。
     */
    public void setCouponNo(String couponNo) {
        this.couponNo = couponNo;
        if(couponNo == null){
            // 当 couponNo 为 null 时，移除该字段的有效性标记
            removeValidField("couponNo");
            return;
        }
        // 当 couponNo 不为 null 时，添加该字段的有效性标记
        addValidField("couponNo");
    }

    /**
     * 获取采摘重量。
     * @return 采摘重量的 BigDecimal 值。
     */
    @Column(name = "PICK_WEIGHT")
    public BigDecimal getPickWeight() {
        return pickWeight;
    }

    /**
     * 设置采摘重量。
     * 如果传入的采摘重量为 null，则从有效字段列表中移除该字段；
     * 否则，将该字段添加到有效字段列表中。
     * @param pickWeight 要设置的采摘重量。
     */
    public void setPickWeight(BigDecimal pickWeight) {
        this.pickWeight = pickWeight;
        if(pickWeight == null){
            // 当 pickWeight 为 null 时，移除该字段的有效性标记
            removeValidField("pickWeight");
            return;
        }
        // 当 pickWeight 不为 null 时，添加该字段的有效性标记
        addValidField("pickWeight");
    }

    /**
     * 获取采摘付款方式。
     * @return 采摘付款方式的整数值。
     */
    @Column(name = "PICK_PAY_TYPE")
    public Integer getPickPayType() {
        return pickPayType;
    }

    /**
     * 设置采摘付款方式。
     * 如果传入的采摘付款方式为 null，则从有效字段列表中移除该字段；
     * 否则，将该字段添加到有效字段列表中。
     * @param pickPayType 要设置的采摘付款方式。
     */
    public void setPickPayType(Integer pickPayType) {
        this.pickPayType = pickPayType;
        if(pickPayType == null){
            // 当 pickPayType 为 null 时，移除该字段的有效性标记
            removeValidField("pickPayType");
            return;
        }
        // 当 pickPayType 不为 null 时，添加该字段的有效性标记
        addValidField("pickPayType");
    }

    /**
     * 获取采摘总金额。
     * @return 采摘总金额的 BigDecimal 值。
     */
    @Column(name = "PICK_TOTAL_PRICE")
    public BigDecimal getPickTotalPrice() {
        return pickTotalPrice;
    }

    /**
     * 设置采摘总金额。
     * 如果传入的采摘总金额为 null，则从有效字段列表中移除该字段；
     * 否则，将该字段添加到有效字段列表中。
     * @param pickTotalPrice 要设置的采摘总金额。
     */
    public void setPickTotalPrice(BigDecimal pickTotalPrice) {
        this.pickTotalPrice = pickTotalPrice;
        if(pickTotalPrice == null){
            // 当 pickTotalPrice 为 null 时，移除该字段的有效性标记
            removeValidField("pickTotalPrice");
            return;
        }
        // 当 pickTotalPrice 不为 null 时，添加该字段的有效性标记
        addValidField("pickTotalPrice");
    }

    /**
     * 获取刷卡金额。
     * @return 刷卡金额的 BigDecimal 值。
     */
    @Column(name = "PICK_CRAD_PRICE")
    public BigDecimal getPickCradPrice() {
        return pickCradPrice;
    }

    /**
     * 设置刷卡金额。
     * 如果传入的刷卡金额为 null，则从有效字段列表中移除该字段；
     * 否则，将该字段添加到有效字段列表中。
     * @param pickCradPrice 要设置的刷卡金额。
     */
    public void setPickCradPrice(BigDecimal pickCradPrice) {
        this.pickCradPrice = pickCradPrice;
        if(pickCradPrice == null){
            // 当 pickCradPrice 为 null 时，移除该字段的有效性标记
            removeValidField("pickCradPrice");
            return;
        }
        // 当 pickCradPrice 不为 null 时，添加该字段的有效性标记
        addValidField("pickCradPrice");
    }

    /**
     * 获取现金金额。
     * @return 现金金额的 BigDecimal 值。
     */
    @Column(name = "PICK_CASE_PRICE")
    public BigDecimal getPickCasePrice() {
        return pickCasePrice;
    }

    /**
     * 设置现金金额。
     * 如果传入的现金金额为 null，则从有效字段列表中移除该字段；
     * 否则，将该字段添加到有效字段列表中。
     * @param pickCasePrice 要设置的现金金额。
     */
    public void setPickCasePrice(BigDecimal pickCasePrice) {
        this.pickCasePrice = pickCasePrice;
        if(pickCasePrice == null){
            // 当 pickCasePrice 为 null 时，移除该字段的有效性标记
            removeValidField("pickCasePrice");
            return;
        }
        // 当 pickCasePrice 不为 null 时，添加该字段的有效性标记
        addValidField("pickCasePrice");
    }

    /**
     * 获取采摘日期。
     * @return 采摘日期的 Date 对象。
     */
    @Column(name = "PICK_DATE")
    public Date getPickDate() {
        return pickDate;
    }

    /**
     * 设置采摘日期。
     * 如果传入的采摘日期为 null，则从有效字段列表中移除该字段；
     * 否则，将该字段添加到有效字段列表中。
     * @param pickDate 要设置的采摘日期。
     */
    public void setPickDate(Date pickDate) {
        this.pickDate = pickDate;
        if(pickDate == null){
            // 当 pickDate 为 null 时，移除该字段的有效性标记
            removeValidField("pickDate");
            return;
        }
        // 当 pickDate 不为 null 时，添加该字段的有效性标记
        addValidField("pickDate");
    }

    /**
     * 获取采摘点。
     * @return 采摘点的整数值。
     */
    @Column(name = "PICK_PLACE")
    public Integer getPickPlace() {
        return pickPlace;
    }

    /**
     * 设置采摘点。
     * 如果传入的采摘点为 null，则从有效字段列表中移除该字段；
     * 否则，将该字段添加到有效字段列表中。
     * @param pickPlace 要设置的采摘点。
     */
    public void setPickPlace(Integer pickPlace) {
        this.pickPlace = pickPlace;
        if(pickPlace == null){
            // 当 pickPlace 为 null 时，移除该字段的有效性标记
            removeValidField("pickPlace");
            return;
        }
        // 当 pickPlace 不为 null 时，添加该字段的有效性标记
        addValidField("pickPlace");
    }

    /**
     * 获取结算人。
     * @return 结算人的整数值。
     */
    @Column(name = "PICK_PLACE_USER")
    public Integer getPickPlaceUser() {
        return pickPlaceUser;
    }

    /**
     * 设置结算人。
     * 如果传入的结算人为 null，则从有效字段列表中移除该字段；
     * 否则，将该字段添加到有效字段列表中。
     * @param pickPlaceUser 要设置的结算人。
     */
    public void setPickPlaceUser(Integer pickPlaceUser) {
        this.pickPlaceUser = pickPlaceUser;
        if(pickPlaceUser == null){
            // 当 pickPlaceUser 为 null 时，移除该字段的有效性标记
            removeValidField("pickPlaceUser");
            return;
        }
        // 当 pickPlaceUser 不为 null 时，添加该字段的有效性标记
        addValidField("pickPlaceUser");
    }
}