
package com.tmerclub.cloud.product.model;

import com.tmerclub.cloud.common.model.BaseModel;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;

/**
 * spu信息
 *
 * @author tmerclub
 * @date 2020-12-08 15:54:23
 */
@EqualsAndHashCode(callSuper = true)
@Data
@ToString
public class Spu extends BaseModel implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * spu id
     */
    private Long spuId;

    /**
     * 品牌ID
     */
    private Long brandId;

    /**
     * 分类ID
     */
    private Long categoryId;

    /**
     * 店铺分类ID
     */
    private Long shopCategoryId;

    /**
     * 店铺id 0:平台端id, id > 0:店铺的id, -1:供应商商品
     */
    private Long shopId;

    /**
     * spu名称
     */
    private String name;

    /**
     * 卖点
     */
    private String sellingPoint;

    /**
     * 主图
     */
    private String mainImgUrl;

    /**
     * 商品图片 多个图片逗号分隔
     */
    private String imgUrls;

    /**
     * 商品视频
     */
    private String video;

    /**
     * 售价，整数方式保存
     */
    private Long priceFee;

    /**
     * 市场价，整数方式保存
     */
    private Long marketPriceFee;

    /**
     * 积分价格
     */
    private Long scoreFee;

    /**
     * 状态 1:enable, 0:disable, -1:deleted
     */
    private Integer status;

    /**
     * 配送方式json见TransportModeVO
     */
    private String deliveryMode;

    /**
     * 运费模板id -1固定运费 0包邮
     */
    private Long deliveryTemplateId;

    /**
     * 固定运费金额
     */
    private Long deliveryAmount;

    /**
     *
     */
    private Integer hasSkuImg;
    /**
     * 商品类型(0普通商品 1拼团 2秒杀 3积分)
     */
    private Integer spuType;

    /**
     * 活动id(关联prod_type)
     */
    private Long activityId;

    /**
     * 商品类别 0.实物商品 1. 虚拟商品 2.组合商品
     */
    private Integer spuMold;

    /**
     * 是否可以退款 1.可以 0不可以
     */
    private Integer isRefund;

    /**
     * 虚拟商品的留言备注
     */
    private String virtualRemark;

    /**
     * 序号
     */
    private Integer seq;

    /**
     * 是否置顶，1.置顶 0.不置顶
     */
    private Integer isTop;

    /**
     * spu编码
     */
    private String spuCode;

    /**
     * 供应商商品类型 0.否 1.是 2.商家代销
     */
    private Integer supplierSpuType;

    /**
     * 关联商品商品id，只有供应商商品为2才有
     */
    private Long supplierSpuId;

    /**
     * 发货方式 1.供应商发货 2.仓库发货
     */
    private Integer supplierDeliveryType;

    /**
     * 供应商id -1、0：普通商品， id > 0: 供应商商品
     */
    private Long supplierId;

    /**
     * 计量单位
     */
    private String measureUnit;

    /**
     * 代销商品规格选择状态，1: 全选 2：部分选择
     */
    private Integer skuChoiceStatus;

    /**
     * 供应商商品更新后代销商品是否已同步更新 1:已更新 -1:未更新
     */
    private Integer isSynUpdate;
    /**
     * 预售类型  -1：未开启 0.全款预售 1.定金预售
     */
    private Integer preSaleType;

    /**
     * 定金收取类型 0.按比例 1.按金额
     */
    private Integer depositType;

    /**
     * 定金数额(定金收取类型比例为0时，代表百分比*100，为1时代表实际金额*100）
     */
    private Long depositAmount;

    /**
     * 定金膨胀数额(定金收取类型比例为0时，代表百分比*100，为1时代表实际金额*100）
     */
    private Long depositExpansionAmount;

    /**
     * 定金支付开始时间
     */
    private Date depositStartTime;
    /**
     * 定金支付结束时间
     */
    private Date depositEndTime;

    /**
     * 尾款支付开始时间
     */
    private Date balanceStartTime;

    /**
     * 尾款支付结束时间
     */
    private Date balanceEndTime;

    /**
     * 预售发货类型 -1.固定时间  x.尾款支付后x天发货
     */
    private Integer preSaleDeliveryType;

    /**
     * 预售发货时间
     */
    private Date preSaleDeliveryTime;

    @Schema(description = "定金数值")
    private BigDecimal depositValue;

    /**
     * 核销次数 -1.多次核销 0.无需核销 1.单次核销
     */
    private Integer writeOffNum;

    /**
     * 多次核销次数 -1.无限次
     */
    private Integer writeOffMultipleCount;

    /**
     * 核销有效期 -1.长期有效 0.自定义  x.x天内有效
     */
    private Integer writeOffTime;

    /**
     * 核销开始时间
     */
    private Date writeOffStart;

    /**
     * 核销结束时间
     */
    private Date writeOffEnd;

    /**
     * 是否为全部实物商品的组合商品 1.是 0.否
     */
    private Integer isAllEntity;

}
