package com.seer.teach.pay.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.seer.teach.common.entity.BaseEntity;
import lombok.Data;

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

/**
 * <p>
 * 支付订单
 * </p>
 *
 * @author Wang
 * @since 2025-09-11 14:04:02
 */
@Data
@TableName("pay_order")
public class PayOrderEntity extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /**
     * 支付内部订单号,对应微信和支付宝的商户订单号（out_trade_no）字段，要求6-32个字符内，只能是数字、大小写字母_-|* 且在同一个商户号下唯一
     */
    @TableField("order_sn")
    private String orderSn;

    /**
     * 商户订单SN，商户系统内部的订单号，商户系统内部唯一，同一笔交易多次查询只返回一次结果
     */
    @TableField("merchant_order_sn")
    private String merchantOrderSn;

    /**
     * 商户订单编号
     */
    @TableField("merchant_order_id")
    private String merchantOrderId;

    /**
     * 渠道编号
     */
    @TableField("channel_id")
    private Integer channelId;

    /**
     * 渠道编码
     */
    @TableField("channel_code")
    private String channelCode;

    /**
     * 用户编号
     */
    @TableField("user_id")
    private Integer userId;

    /**
     * 订单来源
     */
    @TableField("order_source")
    private Integer orderSource;

    /**
     * 商品
     */
    @TableField("`subject`")
    private String subject;

    /**
     * 商品描述
     */
    @TableField("body")
    private String body;

    /**
     * 渠道方的交易流水号
     */
    @TableField("transaction_id")
    private String transactionId;

    /**
     * 异步通知地址
     */
    @TableField("notify_url")
    private String notifyUrl;

    /**
     * 实际支付订单总金额，单位为分，整型，必须大于0
     */
    @TableField("total_amount")
    private Long totalAmount;

    /**
     * 币种,默认为CNY，代表人民币
     */
    @TableField("currency")
    private String currency;

    /**
     * 实际支付的学豆
     */
    @TableField("total_coin")
    private BigDecimal totalCoin;

    /**
     * 兑换比例
     */
    @TableField("exchange_ratio")
    private BigDecimal exchangeRatio;

    /**
     * 学豆兑换比例配置ID
     */
    @TableField("coin_config_id")
    private Integer coinConfigId;

    /**
     * 渠道手续费，单位：百分比
     */
    @TableField("channel_fee_rate")
    private Double channelFeeRate;

    /**
     * 渠道手续金额，单位：分
     */
    @TableField("channel_fee_price")
    private Long channelFeePrice;

    /**
     * 支付状态
     */
    @TableField("`status`")
    private Integer status;

    /**
     * 用户 IP
     */
    @TableField("user_ip")
    private String userIp;

    /**
     * 订单失效时间
     */
    @TableField("expire_time")
    private LocalDateTime expireTime;

    /**
     * 订单支付成功时间
     */
    @TableField("success_time")
    private LocalDateTime successTime;

    /**
     * 退款总金额，单位：分
     */
    @TableField("refund_price")
    private Long refundPrice;
}