/*
 * Copyright (c) 2018-2999 广州亚米信息科技有限公司 All rights reserved.
 *
 * https://www.gz-yami.com/
 *
 * 未经允许，不可做商业用途！
 *
 * 版权所有，侵权必究！
 */

package com.yami.shop.bean.model;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

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

@Data
@TableName("tz_order")
public class Order implements Serializable {
    private static final long serialVersionUID = 6222259729062826852L;
    /**
     * 订单ID
     */
    @TableId
    private Long orderId;

    /**
     * 店铺id
     */
    private Long shopId;
    @TableField(exist = false)
    private String shopName;
    /**
     * 渠道ID
     */
    private Long channelId;
    @TableField(exist = false)
    private String channelName;

    /**
     * 产品名称,多个产品将会以逗号隔开
     */
    private String prodName;

    /**
     * 订购用户ID
     */
    private String userId;
    /**
     * 父订单编号
     */
    private String parentOrderNumber;

    /**
     * 订购流水号
     */
    private String orderNumber;

    /**
     * 总值
     */
    private Double total;

    /**
     * 实际总值
     */
    private Double actualTotal;

    /**
     * 支付方式 1 微信支付 2 支付宝
     */
    private Integer payType;

    /**
     * 用户备注
     */
    private String remarks;

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


    /**
     * 海博订单状态
     * 0-待支付 20-订单已接单(待拣货),30-订单待配送（拣货完成/自提类订单为待自提）,40-订单配送中 ,50-订单取消待审核,60-订单已取消,70-订单已送达,80-订单已完成
     */
    private Integer hbOrderStatus;

    /**
     * 海博物流状态
     * 20:已抢单，30:配送员到店，40:取货完成，50:配送单取消,100:已送达
     */
    private Integer hbLogisticStatus;

    /**
     * 配送类型（1:快递 2:自提 3：及时配送）
     */
    private Integer dvyType;

    /**
     * 配送方式ID
     */
    private Long dvyId;

    /**
     * 物流单号
     */
    private String dvyFlowId;

    /**
     * 订单运费
     */
    private Double freightAmount;

    /**
     * 用户订单地址Id
     */
    private Long addrOrderId;

    /**
     * 是否为超重订单（0-未超重，1-超重 ）
     */
    private Integer orderSplitStatus;
    /**
     * 子订单数量命名
     */
    private Integer orderSplitNumber;
    /**
     * 是否自动拆单(0-手动拆单，1-自动拆单)
     */
    private Integer autoSplit;
    /**
     * 是否需要拆单（0-拆单临时保存，1-不拆单，2-待拆单，3-拆单中，4-已拆单）
     */
    private Integer splitStatus;
    /**
     * 订单等级（0-父订单，1-子订单）
     */
    private Integer orderLevel;
    /**
     * 拆单操作人ID
     */
    private Long splitUserId;
    @TableField(exist = false)
    @ApiModelProperty("拆单操作人名称")
    private String splitUserName;


    /**
     * 订单商品总数
     */
    private Integer productNums;
    @ApiModelProperty("牵牛花订单id")
    private  String qnhOrderId;

    @ApiModelProperty("牵牛花订单状态 0 失败 1 成功 null为暂未创建")
    private  String qnhOrderStatus;

    /**
     * 订购时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 订单更新时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     * 付款时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date payTime;

    /**
     * 发货时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date dvyTime;

    /**
     * 完成时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date finallyTime;


    /**
     * 订单取消原因
     */
    private String cancelReason;

    /**
     * 取消时间
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date cancelTime;

    /**
     * 是否已经支付，1：已经支付过，0：，没有支付过
     */
    private Integer isPayed;

    /**
     * 用户订单删除状态，0：没有删除， 1：回收站， 2：永久删除
     */
    private Integer deleteStatus;

    /**
     * 订单退款状态（1:申请退款 2:退款成功 3:部分退款成功 4:退款失败）
     */
    private Integer refundStatus;

    /**
     * 平台优惠总额
     */
    private Double platformAmount;

    /**
     * 优惠总额
     */
    private Double reduceAmount;

    /**
     * 订单类型参考orderType ,1团购订单 2秒杀订单,3积分订单
     */
    private Integer orderType;

    /**
     * 订单关闭原因 (1:超时未支付 2:退款关闭 4:买家取消 15:已通过货到付款交易)
     */
    private Integer closeType;

    @ApiModelProperty("麦芽条状态 0 失败 1 成功 null为暂未创建")
    private Integer dvyStatus;


    /**
     * 买家昵称
     */
    @TableField(exist = false)
    @ApiModelProperty("买家名称")
    private String nickName;
    /**
     * 买家手机号
     */
    @TableField(exist = false)
    @ApiModelProperty("买家手机号")
    private String userMobile;

    @TableField(exist = false)
    @ApiModelProperty("收货人")
    private String receiver;

    @TableField(exist = false)
    private List<OrderItem> orderItems;

    /**
     * 用户订单地址
     */
    @TableField(exist = false)
    private UserAddrOrder userAddrOrder;

    /**
     * 退款订单编号
     */
    @TableField(exist = false)
    private String refundSn;

    /**
     * 订单所用积分
     */
    @TableField(exist = false)
    private Integer score;
    /**
     * 评论状态： 0 未评价  1 已评价
     */
    private Integer commSts;
    /**
     * 退款状态
     */
    @TableField(exist = false)
    private Integer returnMoneySts;

    /**
     * 退款类型
     */
    @TableField(exist = false)
    private Integer refundType;

    /**
     * 亏损金额
     */
    @TableField(exist = false)
    private Double lossAmount;

    @TableField(exist = false)
    private Integer payScore;

    /**
     * 是否需要支付
     */
    @TableField(exist = false)
    private Boolean nextPay = Boolean.FALSE;

    @TableField
    private Long offsetPoints;

    @TableField(exist = false)
    private Integer goodsTotalCount;


    /**
     * 子订单信息
     */
    @TableField(exist = false)
    private List<Order> subOrders;


}
