package com.jeesharp.business.modules.mall.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.jeesharp.business.modules.mall.vo.MallOrderReceivableEntryVO;
import com.jeesharp.framework.mybatis.core.dataobject.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.util.List;

/**
 * 订单主表；{@code unifiedOrderId} 为全站统一单 {@code biz_trade_order.id}（M5）。
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("mall_order")
public class MallOrder extends BaseEntity<MallOrder> {

    /**
     * 订单编号
     */
    private String orderNo;

    /**
     * 统一交易订单主键（biz_trade_order.id）
     */
    private String unifiedOrderId;

    /**
     * 合并支付批次主键（mall_pay_batch.id）
     */
    private String payBatchId;

    /**
     * 会员ID
     */
    private String memberId;

    /**
     * 分享人会员ID（归因快照）
     */
    private String shareMemberId;

    /**
     * 分享归因 JSON 快照
     */
    private String shareAttributionJson;

    /**
     * 归因类型：RELATIONSHIP/SHARE_DIRECT
     */
    private String attributionType;

    /**
     * 订单总金额
     */
    private BigDecimal totalAmount;

    /**
     * 商品金额（不含运费）
     */
    private BigDecimal goodsAmount;

    /**
     * 优惠金额
     */
    private BigDecimal discountAmount;

    /**
     * 优惠券抵扣
     */
    private BigDecimal couponAmount;

    /**
     * 商户券抵扣
     */
    private BigDecimal merchantCouponAmount;

    /**
     * 平台券分摊抵扣
     */
    private BigDecimal platformCouponAmount;

    /**
     * 积分抵扣金额
     */
    private BigDecimal pointsAmount;

    /**
     * 金币抵扣金额
     */
    private BigDecimal coinsAmount;

    /**
     * 账户余额支付金额
     */
    private BigDecimal balanceAmount;

    /**
     * 运费金额
     */
    private BigDecimal freightAmount;

    /**
     * 实付金额
     */
    private BigDecimal payAmount;

    /**
     * 使用积分数
     */
    private Integer pointsUsed;

    /**
     * 使用金币数
     */
    private Integer coinsUsed;

    /**
     * 买家留言
     */
    private String buyerRemark;

    /**
     * 商家备注
     */
    private String adminRemark;

    /**
     * 发票类型：0-不开票 1-个人 2-企业
     */
    private Integer invoiceType;

    /**
     * 发票抬头
     */
    private String invoiceTitle;

    /**
     * 税号
     */
    private String invoiceTaxNo;

    /**
     * 改价前金额（改价时记录）
     */
    private BigDecimal priceBeforeChange;

    /**
     * 配送方式：DELIVERY-配送 PICKUP-到店自提
     */
    private String deliveryType;

    /**
     * 自提点ID（到店自提时）
     */
    private String pickupPointId;

    /**
     * 期望自提时间
     */
    private java.util.Date pickupTime;

    /**
     * 自提核销码
     */
    private String pickupVerifyCode;

    /**
     * 自提核销时间
     */
    private java.util.Date pickupVerifyTime;

    /**
     * 核销人ID（sys_user，管理端核销时写入）
     */
    private String pickupVerifyBy;

    /**
     * 核销人姓名（冗余，便于展示）
     */
    private String pickupVerifyByName;

    /**
     * 订单状态，取值见 {@link com.jeesharp.business.modules.mall.enums.MallOrderStatusEnum}
     */
    private Integer status;

    /**
     * 支付方式：WECHAT/ALIPAY/BALANCE/COINS（组合支付时可存主支付方式或逗号分隔）
     */
    private String payType;

    /**
     * 支付时间
     */
    private java.util.Date payTime;

    /**
     * 收货人
     */
    private String receiverName;

    /**
     * 收货手机
     */
    private String receiverMobile;

    /**
     * 省
     */
    private String receiverProvince;

    /**
     * 市
     */
    private String receiverCity;

    /**
     * 区
     */
    private String receiverDistrict;

    /**
     * 详细地址
     */
    private String receiverAddress;

    /**
     * 物流公司
     */
    private String logisticsCompany;

    /**
     * 运单号
     */
    private String logisticsNo;

    /**
     * 发货时间
     */
    private java.util.Date shipTime;

    /**
     * 确认收货时间
     */
    private java.util.Date confirmTime;

    /**
     * 订单明细行（管理端详情等场景组装，非表字段）
     */
    @TableField(exist = false)
    private List<MallOrderItem> items;

    /** 自提点名称（详情展示，非表字段） */
    @TableField(exist = false)
    private String pickupPointName;

    /** 自提点联系电话（详情展示，非表字段） */
    @TableField(exist = false)
    private String pickupPointContactMobile;

    /** 自提点地址（详情展示，非表字段） */
    @TableField(exist = false)
    private String pickupPointAddress;

    /** 自提点营业时间（详情展示，非表字段） */
    @TableField(exist = false)
    private String pickupPointBusinessHours;

    /** 合并支付批次编号（详情展示，非表字段） */
    @TableField(exist = false)
    private String payBatchNo;

    /** 同批次子单数量（详情展示，非表字段） */
    @TableField(exist = false)
    private Integer payBatchSubOrderCount;

    /** 平台代收应收流水（详情展示，非表字段） */
    @TableField(exist = false)
    private List<MallOrderReceivableEntryVO> receivableEntries;
}