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.baomidou.mybatisplus.annotation.Version;
import com.qs.mp.common.enums.TicketBoxStatusEnum;
import com.qs.mp.common.enums.TicketTypeEnum;
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.Objects;

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

/**
 * @describe 盲票组实体类
 * @auther quanshu
 * @create 2022-03-02 12:25:55
 */
@ApiModel("盲票组实体类")
@TableName("mp_ticket_box")
@Data
public class TicketBox implements Serializable {

  private static final long serialVersionUID = 1L;

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

  /**
   * 盲票组编号
   */
  @ApiModelProperty("盲票组编号")
  @TableField("box_no")
  private String boxNo;

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

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

  /**
   * 盲票类别
   */
  @ApiModelProperty("盲票类别")
  @TableField("category_id")
  private Long categoryId;

  /**
   * 详细描述
   */
  @ApiModelProperty("详细描述")
  @TableField("description")
  private String description;

  /**
   * 卖点
   */
  @ApiModelProperty("卖点")
  @TableField("sale_point")
  private String salePoint;

  /**
   * 盲票形式（线上或线下）
   */
  @ApiModelProperty("盲票形式（线上或线下）")
  @TableField("type")
  @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
  private TicketTypeEnum type;

  /**
   * 盲票张数
   */
  @ApiModelProperty("盲票张数")
  @TableField("quantity")
  private Integer quantity;

  /**
   * 已售盲票张数
   */
  @TableField("sale_qty")
  private Integer saleQty;

  /**
   * 盲票包售价
   */
  @ApiModelProperty("盲票包售价")
  @TableField("pkg_sale_price")
  private Integer pkgSalePrice;

  /**
   * 每包盲票张数
   */
  @ApiModelProperty("每包盲票张数")
  @TableField("pkg_unit")
  private Integer pkgUnit;

  /**
   * 盲票包数
   */
  @ApiModelProperty("盲票包数")
  @TableField("pkg_qty")
  private Integer pkgQty;

  /**
   * 已销售包数
   */
  @ApiModelProperty("已销售包数")
  @TableField("sale_pkg_qty")
  private Integer salePkgQty;

  @ApiModelProperty("原价")
  @TableField("origin_price")
  private Integer originPrice;

  /**
   * 盲票票面价格
   */
  @ApiModelProperty("盲票票面价格")
  @TableField("face_price")
  private Integer facePrice;

  /**
   * 盲票销售价格
   */
  @ApiModelProperty("盲票销售价格")
  @TableField("sale_price")
  private Integer salePrice;


  @ApiModelProperty("预购价")
  @TableField("pre_price")
  private Integer prePrice;

  /**
   * 分佣的销售额百分比
   */
  @ApiModelProperty("分佣的销售额百分比")
  @TableField("sale_comm_rate")
  private BigDecimal saleCommRate;

  @ApiModelProperty("销售渠道类型:1所有渠道,2指定渠道")
  @TableField("sale_channel_type")
  private Integer saleChannelType;

  /**
   * 规格属性
   */
  @ApiModelProperty("规格属性")
  @TableField("properties")
  private String properties;

  @ApiModelProperty("排序权重，越大越靠前")
  @TableField("sort_weight")
  private Integer sortWeight;

  /**
   * 上架时间
   */
  @ApiModelProperty("上架时间")
  @TableField("on_time")
  private Date onTime;

  /**
   * 下架时间
   */
  @ApiModelProperty("下架时间")
  @TableField("off_time")
  private Date offTime;

  /**
   * 人工下架标识，1为人工下架
   */
  @ApiModelProperty("人工下架标识，1为人工下架")
  @TableField("manual_off")
  private Integer manualOff;

  /**
   * 状态，上架/下架
   */
  @ApiModelProperty("状态,上架/下架")
  @TableField("status")
  @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
  private TicketBoxStatusEnum status;

  @ApiModelProperty("序列号加密:0否,1是")
  @TableField("is_encrypt")
  private Integer isEncrypt;

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

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

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


  @ApiModelProperty("预付票包价格")
  public Integer getPkgPrePrice() {
    if (Objects.nonNull(this.prePrice) && Objects.nonNull(this.pkgUnit)) {
      return this.prePrice * this.pkgUnit;
    }
    return 0;
  }


}
