/**
 * All rights Reserved, Designed By www.freemud.cn
 *
 * @Title: OrderInfoReqs
 * @Package com.freemud.application.sdk.api.ordercenter.response.orderInfo
 * @Description:
 * @author: ping.wu
 * @date: 2019/4/2 17:21
 * @version V1.0
 * @Copyright: 2019 www.freemud.cn Inc. All rights reserved.
 * 注意：本内容仅限于上海非码科技内部传阅，禁止外泄以及用于其他的商业目
 */
package com.freemud.application.sdk.api.ordercenter.response.orderInfo;

import com.freemud.application.sdk.api.ordercenter.request.OrderExtendedReq;
import com.freemud.application.sdk.api.ordercenter.request.OrderTraceInfoResp;
import com.freemud.application.sdk.api.ordercenter.response.OrderPayItemResp;
import lombok.Data;

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

@Data
public class OrderInfoReqs {

    /**
     * 订单异常具体描述
     */
    private String abnormalDesc;
    /**
     * 订单异常状态 0:正常（无异常）1:异常
     */
    private Integer abnormalState;

//    @ApiModelProperty(value = "父订单编号")
    private String parentCode;

    private Boolean isParent;

    //售后单状态 1:待处理 2:退货中 3:拒绝退款 4:已退货 5:完成 6:取消
    private Integer afterSalesState;

//    @ApiModelProperty(value = "是否需要开发票")
    private Boolean isNeedInvoice;

//    @ApiModelProperty(value = "是否立即送达")
    private Boolean isImmediately;

//    @ApiModelProperty(value = "取消原因")
    private String cancelReason;

//    @ApiModelProperty(value = "打印时间")
    private String printTime;

//    @ApiModelProperty(value = "接单时间")
    private String acceptTime;

//    @ApiModelProperty(value = "实际到达时间")
    private String actualArrivalTime;

//    @ApiModelProperty(value = "捡货时间（制作完成发货的时间）")
    private String pickUpTime;

//    @ApiModelProperty(value = "创建时间")
    private String createTime;

//    @ApiModelProperty(value = "更新时间")
    private String updateTime;

//    @ApiModelProperty(value = "POS专用更新时间戳")
    private Long updateTimestamp;

    //订单编号
    private String orderCode;

    //商户号
    private String partnerId;

    //商户名
    private String partnerName;

    //门店编号
    private String storeId;

    //第三方门店编号
    private String thirdStoreId;

    //门店名
    private String storeName;

    //门店全局唯一编号
    private String storeUnifyId;

    //目的门店
    private String toStoreId;

    //用户ID
    private String userId;

    //用户姓名
    private String userName;

    //默认为待支付状态，如需要则设置对应的值
    private Integer orderState;

    //正常情况下不要设置值，此字段仅在做订单同步时使用 订单子状态
    private Integer orderSubState;

    //订单类型
    private Integer orderType;

    //正常情况下不要设置值，此字段仅在做订单同步时使用 1:未支付 2:已支付 3:已退款 4:部分退款
    private Integer payState;

    private Integer payType;

    //当前支付请求号
    private String payRequestNo;

    //支付渠道
    private String payChannel;

    //支付渠道名称
    private String payChannelName;

    //配送状态
    private Integer deliveryState;

    //订单原始金额，单位分
    private BigDecimal originalAmount;

    //用户在界面上看到的支付金额
    private BigDecimal settlementAmount;

    //实际支付现金金额，扣除支付自生优惠，单位分
    private BigDecimal actualPayAmount;

    //是否需要开发票
    private Boolean needInvoice;

    //下单渠道必填，根据此字段的值判断是自营或第三方，来走不同的状态机 详细见 orderClientType枚举
    private Integer orderClient;

    //商户自己生成的订单号
    private String companySelfCode;

    //第三方订单号/客户展示订单编号
    private String thirdOrderCode;

    //订单备注
    private String note;

    //扩展字段
    private String extInfo;

    //取货号 取餐号
    private String pickUpGoodsNo;

    //门店订单序号
    private Integer daySeq;

    //订单特殊类型 1:普通订单 2:拼团订单 3:秒杀订单
    private Integer marketingType;

    //销售类型对应的场景值
    private String marketingCode;

    //配送类型 1自配送(三方渠道配送、商家店员配送) 2平台配送")
    private Integer expressType;

    //配送渠道名称
    private String expressChannelName;

    //配送渠道编号
    private String expressChannelCode;

    //快递单号
    private String expressNo;

    //重量
    private BigDecimal weight;

    //是否能退货 是否有退货商品
    private Boolean canRefund;

    //支付时间
    private String payTime;

    //发货时间
    private String deliveryTime;

    //签收时间 送达时间 收货时间
    private String receiveTime;

    //桌台号
    private String barCounter;

    //pos编号
    private String posCode;

    //就餐人数
    private Integer dinersNumber;

    //小程序本地tableKey
    private String localTableKey;

    //@ApiModelProperty(value = "pos table key")
    private String posTableKey;

    //用户预约时间，仅为预约单时存放
    private String expectTime;

    //打印次数
    private Integer printNum;

    //订单业务类型 1:普通订单 2:虚拟订单
    private Integer bizType;

    //挂起状态 0 正常 1 未成团挂起 2 风控挂起 3 售中取消挂起
    private Integer suspendState;

    //挂起状态描述
    private String suspendDesc;

    //承诺送达标识  0-无承诺 60-1小时达 120-2小时达 180-3小时达 1440-隔日达
    private Short deliveryPromise;

    //预计送达时间
    private String estimateDeliveryCompleteTime;

    //@ApiModelProperty(value = "发票明细")
    private OrderInvoice orderInvoice;

    //    @ApiModelProperty(value = "订单商品信息")
    List<OrderItemResp> orderItemList;

    //    @ApiModelProperty(value = "配送联系信息")
    List<DeliveryContactInfoResp> deliveryContactInfoList;

    //    @ApiModelProperty(value = "订单费用信息")
    List<OrderCostResp> orderCostDetailList;

    //    @ApiModelProperty(value = "订单结算信息")
    List<OrderSettlementResp> orderSettlementDetailList;
    //售后单信息
    List<AfterSalesOrderResp> afterSalesOrderList;

    //订单操作历史
    List<OrderOperationHistoryResp> orderOperationHistoryList;

    //@ApiModelProperty(value = "下单区域")
    private String orderArea;

    private Integer dispenseStatus;

    //@ApiModelProperty(value = "是否立即送达")
    private Boolean immediately;

    //订单扩展信息 （门店渠道信息）
    private OrderExtendedReq orderExtended;

    /**
     * 下游POS商编号
     */
    private String downstreamPosCode;

    /**
     * 下游订单号
     */
    private String downstreamThirdOrderCode;

    //支付渠道类型
    private String payChannelType;

    List<OrderSendCouponResp> orderSendCouponRespList;
    /**
     * 支付信息
     */
    private List<OrderPayItemReqs> orderPayItemCreateReqList;

    private String appId;

}
