package com.yida.data.common.core.entity.mall;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yida.data.common.core.enums.PayWay;
import com.yida.data.common.core.enums.RefundStatusEnum;
import com.yida.data.common.core.enums.UnionPayTypeEnum;
import com.yida.data.common.core.enums.WxPayTypeEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 账单订单表 Entity
 *
 * @author ZYJ
 * @date 2022-03-31 14:49:59
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName("edu_bill_order")
public class EduBillOrder implements Serializable {

    private static final long serialVersionUID = 5540744135475827651L;

    @TableId(value = "order_id", type = IdType.AUTO)
    private Long orderId;

    /**
     * 订单编号:NOT NULL，不可重复，加索引，生成规则参照：snowflake算法原理生成
     */
    @ApiModelProperty(value = "订单编号:NOT NULL，不可重复，加索引，生成规则参照：snowflake算法原理生成")
    @TableField("order_code")
    private String orderCode;

    /**
     * 流水号生成规则：
     * 第一位：一位数前缀
     * 第2-10位：学校ID，缺少的以0在前补位
     * 第11-20位：商品编码code，缺少的以0在前补位，
     * 第21-28位：购买日期（年月日），
     * 第29-36位：8位随机数
     */
    @ApiModelProperty(value = "流水号生成规则： 第一位：Z 第2-10位：学校ID，缺少的以0在前补位 第11-20位：商品编码code，缺少的以0在前补位， 第21-28位：购买日期（年月日）， 第29-36位：8位随机数")
    @TableField("transaction_number")
    private String transactionNumber;

    @ApiModelProperty(value = "学生id")
    private Long studentId;

    /**
     * 账单id
     */
    @ApiModelProperty(value = "账单id")
    @TableField("bill_id")
    private Long billId;

    /**
     * 账单名称
     */
    @ApiModelProperty(value = "账单名称")
    @TableField("bill_title")
    private String billTitle;

    @ApiModelProperty(value = "订单总金额")
    private BigDecimal totalMoney;

    /**
     * 实际支付金额
     */
    @ApiModelProperty(value = "实际支付金额")
    @TableField("practical_money")
    private BigDecimal practicalMoney;

    /**
     * 支付人手机号（家长手机）
     */
    @ApiModelProperty(value = "支付人手机号（家长手机）")
    @TableField("phone")
    private String phone;

    /**
     * 支付时间
     */
    @ApiModelProperty(value = "支付时间")
    @TableField("pay_date")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime payDate;

    /**
     * 订单状态：0：待付款
     * 1：付款中
     * 2：交易完成（正常支付成功）
     * 3：待退款
     * 4：交易关闭（a:超时未支付,b:退款成功
     */
    @ApiModelProperty(value = "订单状态：0：待付款 1：付款中 2：交易完成（正常支付成功） 3：待退款 4：交易关闭（a:超时未支付,b:退款成功")
    @TableField("order_status")
    private String orderStatus;

    /**
     * 支付状态：0：未支付(默认)
     * 1：已支付
     * 2：已退款
     * 3：已取消
     */
    @ApiModelProperty(value = "支付状态：0：未支付(默认) 1：已支付 2：已退款 3：已取消")
    @TableField("pay_status")
    private String payStatus;

    /**
     * 支付方式：1：微信，2：支付宝，3：银联，4：其他待定 {@link PayWay}
     */
    @ApiModelProperty(value = "支付方式：1：微信，2：支付宝，3：银联，4：其他待定")
    @TableField("pay_way")
    private String payWay;

    /**
     * 具体支付类型
     * 银联云闪付: {@link UnionPayTypeEnum}
     * 微信类型: {@link WxPayTypeEnum}
     */
    @ApiModelProperty("具体支付类型")
    private Integer payType;

    /**
     * 是否退款：
     * 0：否（默认）
     * 1：是
     * {@link RefundStatusEnum}
     */
    @ApiModelProperty(value = "是否退款：0：否（默认） 1：是")
    @TableField("is_refund")
    private String isRefund;

    /**
     * 学校id
     */
    @ApiModelProperty(value = "学校id")
    @TableField("dept_id")
    private Long deptId;

    /**
     * 是否删除：1删除
     * 0未删除 默认0
     */
    @ApiModelProperty(value = "是否删除：1删除 0未删除 默认0")
    @TableField("del_flag")
    @TableLogic(value = "0", delval = "1")
    private Integer delFlag;

    /**
     * 创建时间（下单时间）
     */
    @ApiModelProperty(value = "创建时间（下单时间）")
    @TableField(value = "create_date", fill = FieldFill.INSERT)
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createDate;

    /**
     * 创建人id
     */
    @ApiModelProperty(value = "创建人id")
    @TableField(value = "create_id", fill = FieldFill.INSERT)
    private Long createId;

    /**
     * 修改时间
     */
    @ApiModelProperty(value = "修改时间")
    @TableField(value = "update_date", fill = FieldFill.UPDATE)
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateDate;

    /**
     * 修改人id
     */
    @ApiModelProperty(value = "修改人id")
    @TableField(value = "update_id", fill = FieldFill.UPDATE)
    private Long updateId;
}