package cn.freemud.amp.body;

import lombok.Data;
import lombok.NoArgsConstructor;

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

/**
 * All rights Reserved, Designed By www.freemud.cn
 *
 * @version V1.0
 * @Title: ${FILE_NAME}
 * @Package com.freemud.mail.core
 * @Description: ${TODO}(用一句话描述该文件做什么)
 * @author: aiqi.gong
 * @date: 2019/3/18 17:12
 * @Copyright: 2018 www.freemud.cn Inc. All rights reserved.
 * 注意：本内容仅限于上海非码科技内部传阅，禁止外泄以及用于其他的商业目
 */
public class OrderBody {



    private String appId;
    private OrderBean orderBean;
    /**
     * 微信上送信息集
     */
    private SyncStatusInfo syncStatusInfo;

    public SyncStatusInfo getSyncStatusInfo() {
        return syncStatusInfo;
    }

    public void seSyncStatusInfo(SyncStatusInfo syncStatusInfo) {

        this.syncStatusInfo = syncStatusInfo;
    }

    public OrderBean getOrderBean() {
        return orderBean;
    }

    public void setOrderBean(OrderBean orderBean) {
        this.orderBean = orderBean;
    }
    public String getAppId() {
        return appId;
    }

    public void setAppId(String appId) {
        this.appId = appId;
    }

    @Data
    public static class OrderBean {

        /**
         * 门店地址
         */
        private String shopAddress;
        /**
         * 收货地址
         */
        private String address;
        /**
         * 门店电话
         */
        private String shopPhone;

        /**
         * 总金额
         */
        private Integer amount;

        /**
         * 订单原始价格
         */
        private BigDecimal originalAmount;
        /**
         * 实际支付金额
         */
        private Integer paidTotalAmount;
        /**
         * 优惠金额
         */
        private Integer discountTotalAmount;
        private Integer barCounter;
        /**
         * 取消原因
         */
        private String cancelReason;
        /**
         * 商户ID
         */
        private String companyId;
        private String courierName;
        private String courierPhone;
        private String createUser;
        private String customerOrder;
        private int evaluateStatus;
        private Object gmtAccept;
        /**
         * 自定义描述字段
         */
        private String extInfo;
        /**
         * 创建时间 时间戳
         */
        private Long gmtCreate;
        /**
         * 期望送达时间
         */
        private Long gmtExpect;
        /**
         * 更新时间 时间戳
         */
        private Long gmtModified;
        private Long gmtPay;
        /**
         * 是否有退款记录
         */
        private Boolean hasRefund;
        /**
         * 维度
         */
        private Double latitude;
        /**
         * 经度
         */
        private Double longitude;
        /**
         * 订单ID
         */
        private String oid;
        private Integer orderType;
        /**
         * 取餐码
         */
        private String otherCode;
        private String partition;
        private String payChannel;
        private String payChannelName;
        /**
         * 订单支付状态   1 未支付 2 已支付 3 已退款 4 已经部分退款 5 完成
         */
        private Integer payStatus;
        /**
         * 订单支付类型   1 线上支付 2 货到付款
         */
        private Integer payType;
        /**
         * 支付凭证 非码流水ID
         */
        private String payVoucher;
        /**
         * 手机号
         */
        private String phone;
        private String posId;
        private String remark;
        /**
         * 日订单序号
         */
        private Integer daySeq;
        private String shopId;
        private String shopName;
        private String source;
        private String sourceName;
        /**
         * 订单状态  1 下单 2 待支付 3已接单 4 配送中 5 已完成 6 已取消 7 已拒单 31 制作完成
         */
        private Integer status;
        /**
         * 取餐地址
         */
        private String takeAddress;
        /**
         * 外卖备注
         */
        private String takeoutRemark;
        /**
         * 取餐排队号  订单详情使用 默认为空
         */
        private String queueIndex;
        /**
         * 订单状态   1 外卖 2 预订单 3 商城 4 门店自提 5 堂食
         */
        private Integer type;
        /**
         * 用户ID
         */
        private String userId;
        /**
         * 用户名称
         */
        private String userName;
        private String userType;
        private List<AccountBean> accountList;
        private List<ProductBean> productList;
        private List<RefundBean> refundList;

        private AddDeliveryInfo addInfo;
        private InvoiceInfo invoiceInfo;

        /**
         * 订单操作状态(从订单操作历史表中获取)
         */
        private String operateTakeOrderTime;
        private String operateWaitPayTime;
        private String operateReceiptTime;
        private String operateDistributionTime;
        private String operateCompleteTime;
        private String operateCalcelTime;
        private String operatePefuseTime;
        private String operateCompleteMakeTime;

        /**
         * 运单状态
         */
        private Integer deliverStatus;

        /**
         * 骑手姓名
         */
        private String riderName;
        /**
         * 骑手文案 商家自配送文案
         */
        private String riderText;
        /**
         * 骑手头像 如果是自配送，显示门店首图
         */
        private String riderPhoto;
        /**
         * 门店首图 扩展字段
         */
        private String shopImageUrl;
        /**
         * 骑手电话
         */
        private String riderPhone;
        /**
         * 系统接单时间
         */
        private String receiveTime;
        /**
         * 骑手分配时间
         */
        private String depatchTime;
        /**
         * 到店时间
         */
        private String arriveShopTime;
        /**
         * 送出时间
         */
        private String sendTime;
        /**
         * 完成时间
         */
        private String completeTime;
        /**
         * 包装费
         */
        private Integer takeoutPackagingFee;

        @NoArgsConstructor
        @Data
        public static class AddDeliveryInfo {
            /**
             * 外卖中台运单号
             */
            private String deliveryId;
            /**
             * 配送公司
             */
            private String express;
            /**
             * 配送公司编号
             */
            private String expressNo;
            /**
             * 配送费
             */
            private Long deliveryAmount;
        }

        @NoArgsConstructor
        @Data
        public static class ProductBean {
            /**
             * customerCode :
             * number : 1
             * opid : 0
             * orderId : 109457845547698183
             * parentProduct :
             * picture :
             * price : 1100
             * productId : product1
             * productName : 奶茶
             * sequence : 10
             * specification : 中杯+常温
             * specificationName :
             * unit :
             */

            private String customerCode;
            /**
             * 商品数量
             */
            private int number;
            private String opid;
            /**
             * 订单ID
             */
            private String orderId;
            /**
             * 商品ID
             */
            private String productId;
            /**
             * 父类商品ID
             */
            private String parentProduct;
            /**
             * 商品图片
             */
            private String picture;
            /**
             * 商品价格
             */
            private Long price;
            /**
             * 商品实际销售价格 扣除优惠价格后计算salePrice V1.5.2增加
             */
            private Long salePrice;
            /**
             * 商品名称
             */
            private String productName;
            /**
             * 商品排序
             */
            private int sequence;
            /**
             * 商品描述
             */
            private String specification;
            private String specificationName;
            private String unit;
            /**
             * 商品扩展字段 保存为
             */
            private String addInfo;

            /**
             * 当前商品的实际优惠信息
             */
            public List<ProductDiscount> discountList;


            @NoArgsConstructor
            @Data
            public static class ProductDiscount {
                /**
                 * 存放活动ID ，couponCode
                 */
                private String discountId;
                /**
                 * 存放活动名称，券名称
                 */
                private String discountDesc;
                /**
                 * 存放活动类型 OrderAccountType 枚举
                 */
                private Integer discountType;
                /**
                 * 特价
                 */
                private Long discountPrice;
                /**
                 * 享受特价数量
                 */
                private Integer discountQty;
                /**
                 * 优惠金额 正数
                 */
                private Long discountAmount;
                /**
                 * 活动子code
                 */
                private String customerCode;
                /**
                 * 活动自定义信息
                 */
                private String addInfo;

                private String productId;
            }

        }

        @NoArgsConstructor
        @Data
        public static class RefundBean {

            /**
             * 订单ID
             */
            private String orderId;

            /**
             * 退款价格
             */
            private Long price;

            /**
             * 原因
             */
            private String reason;

            /**
             * 退款订单
             */
            private String rid;

            /**
             * 退款状态  1 申请退款 2 同意退款 3 已退货 4 退款完成 5 拒绝退款
             */
            private Integer status;

        }

        @Data
        public static class AccountBean {
            /**
             * accountId : 121347407098150912
             * name : 满减折扣
             * number : 1
             * oaid :
             * orderId : 119108155383846159
             * price : -700
             * sequence : 0
             * type : 2
             */
            private String accountId;
            private String name;
            private Integer number;
            private String oaid;
            /**
             * 订单编号
             */
            private String orderId;
            /**
             * 优惠金额
             */
            private Long price;
            private Integer sequence;
            /**
             * 结算对象类型  1 运费 2折扣 3包装费 4积分 5 优惠券 6线下支付 7 微信 8 支付宝 9 商户金额
             */
            private Integer type;
            /**
             * 自定义对象
             */
            private String addInfo;
        }

        @Data
        public static class InvoiceInfo {
            /**
             * 发票编号
             */
            private String taxNo;
            /**
             * 发票抬头
             */
            private String invoiceTitle;
        }
    }

    /**
     * 微信上送数据集
     */
    @NoArgsConstructor
    @Data
    public static class SyncStatusInfo {
        /**
         * 微信支付商户号 sub_matchid
         */
        private String mchId;
        /**
         * 用户小程序Appid sub_appid
         */
        private String wxAppid;
        /**
         * 微信用户开放ID
         */
        private String openId;
        /**
         * 微信sessionKey
         */
        private String sessionKey;

        /**
         * 微信支付订单号（status 为 PAY_SUCCESS时必填）
         */
        private String transactionId;

        /**
         * 服务商支付单号（fmId）
         */
        private String outTradeNo;

        /**
         * 渠道方流水号 （比如扫呗，易宝等）
         */
        private String endTransId;

        /**
         * 扫呗终端号
         */
        private String terminalId;
    }
}
