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

import com.baomidou.mybatisplus.annotation.FieldFill;
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.fasterxml.jackson.annotation.JsonFormat;

import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDateTime;
import java.util.List;

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

/**
 * 订单表 Entity
 *
 * @author zhanghaijun
 * @date 2021-07-20 13:36:37
 */
@Data
@TableName("edu_apply_product_order")
public class EduApplyProductOrder {

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

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

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

    /**
     * 商品id
     */
    @TableField("product_id")
    private Long productId;

    /**
     * 商品名称
     */
    @TableField("product_name")
    private String productName;

    /**
     * 商品单价
     */
    @TableField("product_price")
    private Double productPrice;
    /**
     * 商品总价
     */
    @TableField("product_total_price")
    private Double productTotalPrice;
    /**
     * 商品数量
     */
    @TableField("product_num")
    private Integer productNum;

    /**
     * 实际支付金额
     */
    @TableField("pracctical_money")
    private Double praccticalMoney;
    /**
     * 支付人手机号（家长手机）
     */
    @TableField("Phone")
    private String phone;

    /**
     * 支付时间
     */
    @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:退款成功
     */
    @TableField("order_status")
    private String orderStatus;

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

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

    /**
     * 是否退款：0：否（默认）
     * 1：是
     */
    @TableField("is_refund")
    private String isRefund;

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

    /**
     * 创建时间（下单时间）
     */
    @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
     */
    @TableField(value = "create_id", fill = FieldFill.INSERT)
    private Long createId;

    /**
     * 修改时间
     */
    @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
     */
    @TableField(value = "update_id", fill = FieldFill.UPDATE)
    private Long updateId;

    /**
     * 年级+班级
     */
    @TableField(exist = false)
    private String gradeClass;

    /**
     * 学校名字
     */
    @TableField(exist = false)
    private String schoolName;

    /**
     * 学生名字
     */
    @TableField(exist = false)
    private String studentName;

    /**
     * 该笔订单包含的学生
     */
    private transient List<EduApplyProductOrderStudent> orderStudentList;

    @ApiModelProperty("退款信息")
    private transient EduApplyProductRefund refund;
    /**
     * 该笔订单包含的学生
     */
    private transient String studentList;

    private transient Long schoolId;
}
