package com.tashow.cloud.trade.dal.dataobject.order;

import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.tashow.cloud.tenant.core.db.TenantBaseDO;
import lombok.*;

import java.time.LocalDateTime;

/**
 * 交易订单 DO
 *
 * @author 芋道源码
 */
@TableName("tz_trade_order")
@KeySequence("tz_trade_order_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TradeOrderDO extends TenantBaseDO {

    /**
     * 订单编号，主键自增
     */
    @TableId
    private Long id;
    /**
     * 订单流水号
     */
    private String orderNum;

    /**
     * 订单类型 (枚举 TradeOrderTypeEnum)
     */
    private Integer orderType;
    /**
     * 订单来源 (枚举 TerminalEnum)
     */
    private Integer orderTerminal;
    /**
     * 订单状态 (枚举 TradeOrderStatusEnum)
     */
    private Integer orderStatus;
    /**
     * 用户编号
     */
    private Long userId;
    /**
     * 用户IP
     */
    private String userIp;
    /**
     * 用户昵称
     */
    private String userName;
    /**
     * 用户手机号
     */
    private String userMobile;
    /**
     * 用户备注
     */
    private String userRemark;
    /**
     * 订单完成时间
     */
    private LocalDateTime finishTime;
    /**
     * 订单取消时间
     */
    private LocalDateTime cancelTime;
    /**
     * 取消类型 (枚举 TradeOrderCancelTypeEnum)
     */
    private Integer cancelType;
    /**
     * 取消原因
     */
    private String cancelReason;
    /**
     * 取消备注
     */
    private String cancelRemark;
    /**
     * 商家编号
     */
    private Long merchantId;
    /**
     * 商家名称
     */
    private String merchantName;
    /**
     * 商家备注
     */
    private String merchantRemark;
    /**
     * 是否评价 (true-已评价, false-未评价)
     */
    private Boolean commentStatus;
    /**
     * 应付金额（总），单位：分
     */
    private Integer payPrice;
    /**
     * 实收金额（总），单位：分
     */
    private Integer livePrice;

    /**
     * 支付订单编号
     */
    private Long payOrderId;
    /**
     * 是否已支付 (true-已支付, false-未支付)
     */
    private Boolean payStatus;
    /**
     * 支付方式（PayTypeEnum）
     */
    private Integer payType;
    /**
     * 付款时间
     */
    private LocalDateTime payTime;
    /**
     * 支付渠道(PayTypeEnum)
     */
    private Integer payChannelCode;
    /**
     * 配送方式 (枚举 DeliveryTypeEnum)
     */
    private Integer deliveryType;
    /**
     * 发货物流公司编号
     */
    private Long logisticsId;
    /**
     * 发货物流单号
     */
    private String logisticsNo;
    /**
     * 发货时间
     */
    private LocalDateTime deliveryTime;
    /**
     * 收货时间
     */
    private LocalDateTime receiveTime;
    /**
     * 收件人名称
     */
    private String receiverName;
    /**
     * 收件人手机
     */
    private String receiverMobile;
    /**
     * 收件人地区编号
     */
    private Integer receiverAreaId;
    /**
     * 收件人详细地址
     */
    private String receiverDetailAddress;
    /**
     * 自提门店编号
     */
    private Long pickUpStoreId;
    /**
     * 自提核销码
     */
    private String pickUpVerifyCode;
    /**
     * 退款状态 (枚举 TradeOrderRefundStatusEnum)
     */
    private Integer refundStatus;

    /**
     * 订单金额，单位：分
     */
    private Integer price;
    /**
     * 退款金额，单位：分
     */
    private Integer refundPrice;
    /**
     * 退款金额，单位：分
     */
    private Integer discountPrice;
    /**
     * 退款时间
     */
    private LocalDateTime refundTime;
    /**
     * 售后单编号
     */
    private Long afterSaleId;
    /**
     * 售后状态 (枚举 TradeOrderItemAfterSaleStatusEnum)
     */
    private Integer afterSaleStatus;
    /**
     * 财务单编号
     */
    private Long financeId;
    /**
     * 财务状态 (枚举 TradeOrderItemFinanceEnum)
     */
    private Integer financeStatus;
    /**
     * 版本号（乐观锁）
     */
    private Integer version;

}