package com.qs.mp.user.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.TableName;
import com.baomidou.mybatisplus.annotation.Version;
import com.qs.mp.common.enums.UserCouponStatusEnum;
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:45:43
 */
@TableName("mp_user_coupon")
@Data
@ApiModel("用户的优惠券实体类")
public class UserCoupon implements Serializable {

  private static final long serialVersionUID = 1L;

  /**
   * 主键
   */
  @ApiModelProperty("主键")
  @TableId(value = "id", type = IdType.INPUT)
  private String id;

  /**
   * 用户ID
   */
  @ApiModelProperty("用户id")
  @TableField("user_id")
  private Long userId;

  /**
   * 核销码
   */
  @ApiModelProperty("核销码")
  @TableField("verify_code")
  private String verifyCode;

  /**
   * 优惠券ID
   */
  @ApiModelProperty("优惠券id")
  @TableField("coupon_id")
  private Long couponId;

  /**
   * 生效日
   */
  @ApiModelProperty("生效日")
  @TableField("valid_start")
  private Date validStart;

  /**
   * 到期日
   */
  @ApiModelProperty("到期日")
  @TableField("valid_end")
  private Date validEnd;

  /**
   * 适用范围说明
   */
  @ApiModelProperty("使用范围;0通用, 1指定范围, 2门店消费,发放时动态指定范围, 3线上票, 4线下票")
  @TableField("use_area_desc")
  private String useAreaDesc;

  /**
   * 使用订单ID
   */
  @ApiModelProperty("使用订单id")
  @TableField("order_id")
  private String orderId;

  /**
   * 核销时间
   */
  @ApiModelProperty("核销时间")
  @TableField("verify_time")
  private Date verifyTime;

  /**
   * 状态;1未使用 2已使用 3已过期
   */
  @ApiModelProperty("状态;1未使用 2已使用 3已过期")
  @TableField("status")
  @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
  private UserCouponStatusEnum status;

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

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


}
