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

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

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

/**
 * 指南步骤订单表 Entity
 *
 * @author ZYJ
 * @date 2023-06-20 16:48:14
 */
@Data
@TableName("edu_guide_step_order")
public class EduGuideStepOrder {

    /**
     *
     */
    @ApiModelProperty(value = "")
    @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;

    /**
     * 指南id
     */
    @ApiModelProperty(value = "指南id")
    @TableField("guide_id")
    private Long guideId;

    /**
     * 指南步骤id
     */
    @ApiModelProperty(value = "指南步骤id")
    @TableField("step_id")
    private Long stepId;

    /**
     * 花名册id
     */
    @ApiModelProperty(value = "花名册id")
    @TableField("roster_id")
    private Long rosterId;

    /**
     * 关联关系id
     */
    @ApiModelProperty(value = "关联关系id")
    @TableField("relation_id")
    private Long relationId;

    /**
     * 订单总金额
     */
    @ApiModelProperty(value = "订单总金额")
    @TableField("total_money")
    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：收钱吧，5：建行
     */
    @ApiModelProperty(value = "支付方式：1：微信，2：支付宝，3：银联，4：收钱吧，5：建行")
    @TableField("pay_way")
    private String payWay;

    /**
     * 具体的支持类型, 需要参考对应支付类型的枚举类
     * <p>
     * 银联云闪付: UnionPayTypeEnum
     * 微信类型: WxPayTypeEnum
     */
    /**
     * 具体支付类型
     * 银联云闪付: {@link UnionPayTypeEnum}
     * 微信类型: {@link WxPayTypeEnum}
     */
    @ApiModelProperty("具体支付类型")
    private Integer payType;

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

    /**
     * 是否删除：0-未删除, 1-删除 默认0
     */
    @ApiModelProperty(value = "是否删除：0-未删除, 1-删除 默认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;

}