package com.yc.ship.module.product.dal.dataobject.productGroup;

import com.baomidou.mybatisplus.annotation.*;
import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
import lombok.*;

import java.math.BigDecimal;

/**
 * 产品组合 DO
 *
 * @author 管理员
 */
@TableName("product_group")
@KeySequence("product_group_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ProductGroupDO extends TenantBaseDO {

    /**
     * 主键
     */
    @TableId(type = IdType.ASSIGN_ID)
    private Long id;
    /**
     * 产品ID
     */
    private Long productId;
    /**
     * 基础产品ID;平台产品时为关联ID
     */
    private Long productBaseId;
    /**
     * 基础产品类型;0自建子票 1平台产品
     */
    private Integer productBaseType;
    /**
     * sku_id
     */
    private Long skuId;
    /**
     * 项目ID
     */
    private Long projectId;
    /**
     * 规格ID
     */
    private Long specificationId;
    /**
     * 优先资源ID
     */
    private Long firstResourceId;
    /**
     * 成本价格
     */
    private BigDecimal costPrice;
    /**
     * 销售价格
     */
    private BigDecimal salePrice;
    /**
     * 规格类型：common通用 full全价 half半价 free免票
     */
    private String specType;
    /**
     * 是否必选;0否 1是
     */
    private Integer needChoose;
    /**
     * 非必选项目最大选择数量
     */
    private Integer maxNum;
    /**
     * 是否匹配过
     */
    @TableField(exist = false)
    private Boolean isMatched = false;
    /**
     * 小程序是否显示
     */
    private Integer isShow = 1;

    /**
     * 哪些规格不计算金额
     */
    private String specificationShow;

    /**
     * 第几天
     */
    private Integer daySort = 1;

    @Override
    public int hashCode() {
        int result = id.hashCode();
        result = 31 * result + (this.productId != null ? this.productId.hashCode() : 0);
        result = 31 * result + (this.productBaseId != null ? this.productBaseId.hashCode() : 0);
        result = 31 * result + (this.productBaseType != null ? this.productBaseType.hashCode() : 0);
        result = 31 * result + (this.skuId != null ? this.skuId.hashCode() : 0);
        result = 31 * result + (this.projectId != null ? this.projectId.hashCode() : 0);
        result = 31 * result + (this.specificationId != null ? this.specificationId.hashCode() : 0);
        result = 31 * result + (this.firstResourceId != null ? this.firstResourceId.hashCode() : 0);
        result = 31 * result + (this.costPrice != null ? this.costPrice.hashCode() : 0);
        result = 31 * result + (this.salePrice != null ? this.salePrice.hashCode() : 0);
        result = 31 * result + (this.specType != null ? this.specType.hashCode() : 0);
        return result;
    }
}
