package com.qs.mp.admin.domain;

import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.qs.mp.common.enums.CouponDiscountTypeEnum;
import com.qs.mp.common.enums.CouponDistributeTypeEnum;
import com.qs.mp.common.enums.CouponStatusEnum;
import com.qs.mp.common.enums.CouponTypeEnum;
import com.qs.mp.common.enums.CouponUseAreaEnum;

import java.io.Serializable;
import java.util.Date;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

/**
 * @describe 优惠券实体类
 * @auther quanshu
 * @create 2022-03-07 20:43:44
 */
@TableName("mp_coupon")
@Data
@ApiModel("优惠券实体类")
public class Coupon implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    @ApiModelProperty("优惠券id")
    @TableId(value = "coupon_id", type = IdType.AUTO)
    private Long couponId;

    /**
     * 标题
     */
    @ApiModelProperty("标题")
    @TableField("title")
    private String title;

    /**
     * 类型;1用户盲票购买优惠券、2用户门店消费优惠券、3经销商盲票采购优惠券
     */
    @ApiModelProperty("类型;1用户盲票购买优惠券、2用户门店消费优惠券、3经销商盲票采购优惠券")
    @TableField("type")
    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
    private CouponTypeEnum type;

    /**
     * 图片
     */
    @ApiModelProperty("图片")
    @TableField("pic_url")
    private String picUrl;

    /**
     * 使用说明
     */
    @ApiModelProperty("使用说明")
    @TableField("description")
    private String description;

    /**
     * 优惠类型;1代金券、2折扣券、3兑换券
     */
    @ApiModelProperty("优惠类型;1代金券、2折扣券、3兑换券")
    @TableField("discount_type")
    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
    private CouponDiscountTypeEnum discountType;

    /**
     * 优惠金额（比例）
     */
    @ApiModelProperty("优惠金额（比例）")
    @TableField("discount")
    private Integer discount;

    /**
     * 最低消费金额
     */
    @ApiModelProperty("最低消费金额")
    @TableField("min_order_amt")
    private Integer minOrderAmt;

    /**
     * 渠道代金券，渠道承担比例
     */
    @ApiModelProperty("渠道代金券，渠道承担比例")
    @TableField("channel_shared_rate")
    private Integer channelSharedRate;


    /**
     * 状态;off下架 on正常
     */
    @ApiModelProperty("状态;off下架 on正常")
    @TableField("status")
    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
    private CouponStatusEnum status;

    /**
     * 使用范围;0通用 1生成券时指定范围 2发放时动态指定范围
     * 0：进票门店  1、指定盲票  2：所有门票
     */
    @ApiModelProperty("使用范围;0通用, 1指定范围, 2门店消费,发放时动态指定范围, 3线上票, 4线下票")
    @TableField("use_area")
    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
    private CouponUseAreaEnum useArea;

    /**
     * 发放方式;1系统发放 2用户主动领取
     */
    @ApiModelProperty("发放方式;1系统发放 2用户主动领取")
    @TableField("distribute_type")
    @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
    private CouponDistributeTypeEnum distributeType;

    /**
     * 叠加使用;0不允许 1允许
     */
    @ApiModelProperty("叠加使用;0不允许 1允许")
    @TableField("composite_use")
    private Integer compositeUse;

    /**
     * 有效期天数;从领券后开始多少天有效，0则使用绝对有效期
     */
    @ApiModelProperty("有效期天数;从领券后开始多少天有效，0则使用绝对有效期")
    @TableField("due_days")
    private Integer dueDays;

    /**
     * 有效期开始日
     */
    @TableField("valid_start")
    private Date validStart;

    /**
     * 有效期结束日
     */
    @TableField("valid_end")
    private Date validEnd;

    /**
     * 总量;总量为0代表不限量
     */
    @TableField("quantity")
    private Integer quantity;

    /**
     * 已发放量
     */
    @TableField("distribute_qty")
    private Integer distributeQty;

    /**
     * 逻辑删除标识
     */
    @TableField("is_deleted")
    @TableLogic
    private Integer isDeleted;

    /**
     * 创建时间
     */
    @TableField("created_time")
    private Date createdTime;

    /**
     * 更新时间
     */
    @TableField("updated_time")
    private Date updatedTime;


}
