
package com.tmerclub.cloud.order.bo.mongo;

import lombok.Data;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.CompoundIndex;
import org.springframework.data.mongodb.core.index.CompoundIndexes;
import org.springframework.data.mongodb.core.mapping.Document;

import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 订单退款记录信息
 *
 * @author YXF
 * @date 2022/8/23
 */
@CompoundIndexes({
        @CompoundIndex(name = "user_idx", def = "{'userId':1}"),
        @CompoundIndex(name = "order_idx", def = "{'orderId':1}"),
        @CompoundIndex(name = "pay_idx", def = "{'payId':1}"),
        @CompoundIndex(name = "shop_idx", def = "{'shopId':1}"),
        @CompoundIndex(name = "supplier_idx", def = "{'supplierId':1}")
})
@Document("order_refund")
@Data
@ToString
public class MongoOrderRefundBO implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * 退款记录ID
     */
    @Id
    private Long refundId;

    /**
     * 店铺ID
     */
    private Long shopId;
    /**
     * 供应商id
     */
    private Long supplierId;

    /**
     *  支付类型 0默认 1通联支付
     */
    private Integer paySysType;

    /**
     * 买家ID
     */
    private Long userId;

    /**
     * 订单创建时间
     */
    private Date createTime;

    /**
     * 订单更新时间
     */
    private Date updateTime;

    /**
     * 订单号
     */
    private Long orderId;

    /**
     * 关联的支付单号
     */
    private Long payId;

    /**
     * 订单项ID(0:为全部订单项)
     */
    private Long orderItemId;

    /**
     * 退货数量(0:为全部订单项)
     */
    private Integer refundCount;

    /**
     * 退还积分
     */
    private Long refundScore;

    /**
     * 退款金额
     */
    private Long refundAmount;

    /**
     * 平台退款金额（退款时将这部分钱退回给平台，所以商家要扣除从平台这里获取的金额）
     */
    private Long platformRefundAmount;

    /**
     * 平台退款佣金
     */
    private Long platformRefundCommission;

    /**
     * 退款单总分销金额
     */
    private Long distributionTotalAmount;

    /**
     * 退款单类型（1:整单退款,2:单个物品退款）
     */
    private Integer refundType;

    /**
     * 申请类型:1,仅退款,2退款退货
     */
    private Integer applyType;

    /**
     * 是否接收到商品(1:已收到,0:未收到)
     */
    private Integer isReceived;

    /**
     * 退款关闭原因(1.买家撤销退款 2.卖家拒绝退款 3.退款申请超时被系统关闭)
     */
    private Integer closeType;

    /**
     * 处理退款状态:(1.买家申请 2.卖家接受 3.买家发货 4.卖家收货 5.退款成功  -1.退款关闭)详情见ReturnMoneyStsType
     */
    private Integer returnMoneySts;

    /**
     * 申请原因 见 BuyerReasonType
     */
    private Integer buyerReason;

    /**
     * 申请说明
     */
    private String buyerDesc;

    /**
     * 联系方式（退款时留下的手机号码）
     */
    private String buyerMobile;

    /**
     * 文件凭证(逗号隔开)
     */
    private String imgUrls;

    /**
     * 超时时间（超过该时间不处理，系统将自动处理）（保留字段）
     */
    private Date overTime;

    /**
     * 拒绝原因
     */
    private String rejectMessage;

    /**
     * 卖家备注
     */
    private String sellerMsg;

    /**
     * 受理时间
     */
    private Date handelTime;

    /**
     * 发货时间
     */
    private Date deliveryTime;

    /**
     * 收货时间
     */
    private Date receiveTime;

    /**
     * 关闭时间
     */
    private Date closeTime;

    /**
     * 确定时间(确定退款时间)
     */
    private Date decisionTime;

    /**
     * 退款时间
     */
    private Date refundTime;

    /**
     * 移交供应商时间
     */
    private Date supplierTime;

    /**
     * 供应商处理状态， -1.商家自行处理 0.待供应商处理 1.供应商已同意 2.供应商已拒绝
     */
    private Integer supplierHandleStatus;
    /**
     * 采购退款金额
     */
    private Long purchaseRefundAmount;
    /**
     * 采购的平台佣金退款金额
     */
    private Long purPlatformRefundCommission;
    /**
     * 订单运费
     */
    private Long freightAmount;
    /**
     * 是否待采购 1.是 0.否 2.已处理
     */
    private Long waitPurchase;

    /**
     * 订单类型 0普通订单 1团购订单 2秒杀订单 3积分订单
     */
    private Integer orderType;

    /**
     * 店铺名称
     */
    private String shopName;

    /**
     * 退款订单项
     * @return
     */
    private List<MongoOrderRefundItemBO> orderItems;

    /**
     * 订单状态
     * @return
     */
    private Integer orderStatus;

    /**
     * 退款退回的赠品订单项ids
     * @return
     */
    private String returnGiveawayIds;

    /**
     * 退款支付类型
     */
    private Integer payType;

    /**
     * 平台介入状态 -1.没有介入 1.用户申请介入 2.平台同意介入 3.平台拒绝介入 5.平台同意退款成功
     */
    private Integer platformInterventionStatus;

    /**
     * 用户申请介入理由
     */
    private String applyInterventionReason;

    /**
     * 用户申请介入凭证
     */
    private String applyInterventionImgUrls;

    /**
     * 平台介入退款方式 1.商家承担 2.商家供应商承担（供应商发货订单） 3.不同意退款
     */
    private Integer interventionRefundType;

    /**
     * 平台介入前的退款金额
     */
    private Long afterInterventionRefundAmount;

    /**
     * 平台留言
     */
    private String platformMessage;

    /**
     * 申请介入时间
     */
    private Date applyInterventionTime;

    /**
     * 介入完成时间
     */
    private Date interventionFinishTime;

}
