package com.czg.order.entity;

import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

import java.io.Serial;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 拼团订单详情表 实体类。
 *
 * @author ww
 * @since 2025-12-16
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("gb_order_detail")
public class GbOrderDetail implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 主键ID
     */
    @Id(keyType = KeyType.Auto)
    private Long id;

    /**
     * 店铺ID
     */
    private Long shopId;
    /**
     * 商品ID
     */
    private Long wareId;

    /**
     * 团单号（关联拼团订单表）
     */
    private String groupOrderNo;

    /**
     * 用户ID（下单用户）
     */
    private Long userId;

    /**
     * 订单号（唯一）
     */
    private String orderNo;

    /**
     * 支付单号
     */
    private Long payOrderId;
    /**
     * 商品数量
     */
    private Integer num;

    /**
     * 支付金额（单位：元）
     */
    private BigDecimal payAmount;

    /**
     * 支付时间（未支付则为NULL）
     */
    private LocalDateTime payTime;

    /**
     * 订单状态：待支付/待核销/待成团/已核销/退款中/已退款
     */
    private String status;

    /**
     * 核销码（唯一，核销时使用）
     */
    private String verifyCode;

    /**
     * 核销时间（未核销则为NULL）
     */
    private LocalDateTime verifyTime;

    /**
     * 创建时间
     */
    @Column(onInsertValue = "now()")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @Column(onInsertValue = "now()", onUpdateValue = "now()")
    private LocalDateTime updateTime;
    /**
     * 退款时间/取消时间
     */
    private LocalDateTime cancelTime;

    /**
     * 取消原因（默认空，取消/退款时填充）
     */
    private String cancelReason;
    /**
     * 自动退款标记（默认空，退款时填充 成团失败）
     */
    private String refundMark;

    /**
     * 删除标记 0-未删 1-已删
     */
    private Integer isDel;

}
