package com.pine.admin.modules.business.entity;

import java.math.BigDecimal;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

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

/**
 * 订单表
 *
 * @author Pine
 * @email 771190883@qq.com
 * @date 2019-10-11 15:44:20
 */
@Data
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@ApiModel(value = "订单表对象", description = "订单表对象")
public class Order implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 主键id
     */
    @ApiModelProperty(value = "主键id", name = "id")
    private Long id;
    /**
     * 订单code
     */
    @ApiModelProperty(value = "订单code", name = "orderCode")
    private String orderCode;
    /**
     * 主订单code  下单可能会同时下多个订单 ，一个master_order_code 可以对应多个order_code 即多个订单
     */
    @ApiModelProperty(value = "主订单code  下单可能会同时下多个订单 ，一个master_order_code 可以对应多个order_code 即多个订单", name = "masterOrderCode")
    private String masterOrderCode;
    /**
     * 订单所属的会员id
     */
    @ApiModelProperty(value = "订单所属的会员id", name = "customerId")
    private Long customerId;
    /**
     * 订单的最终价格(订单的最终成交价格)
     */
    @ApiModelProperty(value = "订单的最终价格(订单的最终成交价格)", name = "price")
    private BigDecimal price;
    /**
     * 预售需要支付的金额 （预售订单使用）
     */
    @ApiModelProperty(value = "预售需要支付的金额 （预售订单使用）", name = "presalePrice")
    private BigDecimal presalePrice;
    /**
     * 订单原始金额（每个单品详情页面的总价）
     */
    @ApiModelProperty(value = "订单原始金额（每个单品详情页面的总价）", name = "originalPrice")
    private BigDecimal originalPrice;
    /**
     * 运费
     */
    @ApiModelProperty(value = "运费", name = "freightPrice")
    private BigDecimal freightPrice;
    /**
     * 订单修改的金额（后端管理员修改）
     */
    @ApiModelProperty(value = "订单修改的金额（后端管理员修改）", name = "modifyPrice")
    private BigDecimal modifyPrice;
    /**
     * 积分抵消的金额
     */
    @ApiModelProperty(value = "积分抵消的金额", name = "pointPrice")
    private BigDecimal pointPrice;
    /**
     * 优惠卷抵消的价格
     */
    @ApiModelProperty(value = "优惠卷抵消的价格", name = "couponPrice")
    private BigDecimal couponPrice;
    /**
     * 使用红包减去的价格
     */
    @ApiModelProperty(value = "使用红包减去的价格", name = "redEnvelopePrice")
    private BigDecimal redEnvelopePrice;
    /**
     * 总的优惠价（包含订单使用的优惠卷 积分 红包 ,满减满折的价格）
     */
    @ApiModelProperty(value = "总的优惠价（包含订单使用的优惠卷 积分 红包 ,满减满折的价格）", name = "concessionalRate")
    private BigDecimal concessionalRate;
    /**
     * 1:待付款  （用户刚下单）
     * 2:代发货  （用户付完款 等待商城发货）
     * 3:代收货  （商城已经发货 等待用户确认收货）
     * 4:已完成  （用户已经确认收货 订单结束）
     * 5:取消订单 （用户未付款前取消订单）
     * 6:退款通过  （用户已经付款但是商城还未发货，用户发出退款申请，商城同意退款）
     * 7:退货通过   （用户已经确认收货后用户发出退货申请，商城同意所有退货申请 ，一个订单可能有多个单品）
     */
    @ApiModelProperty(value = "", name = "status")
    private String status;
    /**
     * 预售订单状态   普通订单 该状态没作用
     * 0 第一阶段未支付
     * 1 第一阶段已支付第二阶段未支付
     * 2 第二阶段已支付   默认0
     */
    @ApiModelProperty(value = "预售订单状态", name = "presaleStatus")
    private String presaleStatus;
    /**
     * 评价状态  0 未评价 1 已评价  默认为0 未评价
     */
    @ApiModelProperty(value = "评价状态  0 未评价 1 已评价  默认为0 未评价", name = "evaluationStatus")
    private String evaluationStatus;
    /**
     * 使用红包的code
     */
    @ApiModelProperty(value = "使用红包的code", name = "redEnvelopeCode")
    private String redEnvelopeCode;
    /**
     * 使用的优惠卷的卷码
     */
    @ApiModelProperty(value = "使用的优惠卷的卷码", name = "couponNo")
    private String couponNo;
    /**
     * 使用的积分数量
     */
    @ApiModelProperty(value = "使用的积分数量", name = "usePoint")
    private Integer usePoint;
    /**
     * 支付类型  0在线支付  1货到付款
     */
    @ApiModelProperty(value = "支付类型  0在线支付  1货到付款 ", name = "payType")
    private String payType;
    /**
     * 订单店铺id  平台的订单id为0
     */
    @ApiModelProperty(value = "订单店铺id  平台的订单id为0", name = "storeId")
    private Long storeId = 0L;
    /**
     * 订单取消原因
     * 1:现在不想买
     * 2:商品价格较贵
     * 3:价格波动
     * 4:商品缺货
     * 5:重复下单
     * 6:收货人信息有误
     * 7:发票信息有误/发票未开
     * 8:送货时间过长
     * 9:其他原因
     * 0:系统取消
     */
    @ApiModelProperty(value = "订单取消原因", name = "cancelReson")
    private String cancelReson;
    /**
     * 是否预存款支付  0 否 1 是  默认0
     */
    @ApiModelProperty(value = "是否预存款支付  0 否 1 是  默认0", name = "predepositPay")
    private String predepositPay;
    /**
     * 订单来源 1pc  2 h5   3 app
     */
    @ApiModelProperty(value = "订单来源 1pc  2 h5   3 app", name = "source")
    private String source;
    /**
     * 运费模版id 对应ls_logistics_template表中的id
     */
    @ApiModelProperty(value = "运费模版id 对应ls_logistics_template表中的id", name = "freightTemplateId")
    private Long freightTemplateId;
    /**
     * 运单号
     */
    @ApiModelProperty(value = "运单号", name = "waybillCode")
    private String waybillCode;
    /**
     * 订单类型 0 普通订单 1 定金预售订单 2全款预售订单 3 拼团订单 4 众筹全款 5 众筹1元 6 众筹无回报 7 虚拟商品订单 8 社区团购订单 默认0 普通订单
     */
    @ApiModelProperty(value = "订单类型 0 普通订单 1 定金预售订单 2全款预售订单 3 拼团订单 4 众筹全款 5 众筹1元 6 众筹无回报 7 虚拟商品订单 8 社区团购订单 默认0 普通订单", name = "orderType")
    private String orderType;
    /**
     * 创建时间
     */
    @ApiModelProperty(value = "创建时间", name = "createTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /**
     * 支付时间
     */
    @ApiModelProperty(value = "支付时间", name = "payTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date payTime;
    /**
     * 发货时间
     */
    @ApiModelProperty(value = "发货时间", name = "deliveryTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date deliveryTime;
    /**
     * 确认收货时间
     */
    @ApiModelProperty(value = "确认收货时间", name = "receivingTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date receivingTime;
    /**
     * 订单取消时间
     */
    @ApiModelProperty(value = "订单取消时间", name = "cancelTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date cancelTime;
    /**
     * 修改时间
     */
    @ApiModelProperty(value = "修改时间", name = "modifyTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date modifyTime;
    /**
     * 订单评价时间
     */
    @ApiModelProperty(value = "订单评价时间", name = "evaluationTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date evaluationTime;
    /**
     * 预售订单的时间
     * 对于定金预售 则是第二阶段付款时间 和发货时间 对于全款预售 则是发货时间
     */
    @ApiModelProperty(value = "预售订单的时间", name = "presaleTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date presaleTime;
    /**
     * 是否团长  0 是 1 否  当订单为拼团订单的时候有用
     */
    @ApiModelProperty(value = "是否团长  0 是 1 否  当订单为拼团订单的时候有用", name = "groupHead")
    private String groupHead;
    /**
     * 拼团订单的id  拼团订单的时候有用
     */
    @ApiModelProperty(value = "拼团订单的id  拼团订单的时候有用", name = "groupId")
    private String groupId;
    /**
     * 拼团订单的促销id 拼团订单的时候有用
     */
    @ApiModelProperty(value = "拼团订单的促销id 拼团订单的时候有用", name = "groupMarketingId")
    private Long groupMarketingId;
    /**
     * 拼团的单品id （拼团订单时候有效）
     */
    @ApiModelProperty(value = "拼团的单品id （拼团订单时候有效）", name = "groupSkuId")
    private String groupSkuId;
    /**
     * 拼团状态 -1无状态 0未成团 1已成团 默认-1
     */
    @ApiModelProperty(value = "拼团状态 -1无状态 0未成团 1已成团 默认-1 ", name = "groupStatus")
    private String groupStatus;
    /**
     * 成团的数量
     */
    @ApiModelProperty(value = "成团的数量", name = "groupNum")
    private Integer groupNum;
    /**
     * 开团时间
     */
    @ApiModelProperty(value = "开团时间", name = "openGroupTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date openGroupTime;
    /**
     * 拼团订单定时任务处理状态 '0'未处理 '1'已处理 默认'0'
     */
    @ApiModelProperty(value = "拼团订单定时任务处理状态 '0'未处理 '1'已处理 默认'0'", name = "autoHandleStatus")
    private String autoHandleStatus;
    /**
     * 订单推广人的会员id(订单会员的推广人 ，也就是订单会员的上级的id) 如果为-1 则说明该订单会员没有推荐人或者不是推广订单
     */
    @ApiModelProperty(value = "订单推广人的会员id(订单会员的推广人 ，也就是订单会员的上级的id) 如果为-1 则说明该订单会员没有推荐人或者不是推广订单", name = "recommended")
    private Long recommended;
    /**
     * 众筹id  对应ls_markeing 表中的id
     */
    @ApiModelProperty(value = "众筹id  对应ls_markeing 表中的id", name = "crowdfundingId")
    private Long crowdfundingId;
    /**
     * 抽奖状态  0 待抽奖 1 抽中 默认0
     */
    @ApiModelProperty(value = "抽奖状态  0 待抽奖 1 抽中 默认0", name = "lotteryStatus")
    private String lotteryStatus;
    /**
     * 虚拟订单的核销码
     */
    @ApiModelProperty(value = "虚拟订单的核销码", name = "writeOffCode")
    private String writeOffCode;
    /**
     * 社区团购的团长会员id  社区团购的时候使用 对应ls_customer表中的id
     */
    @ApiModelProperty(value = "社区团购的团长会员id  社区团购的时候使用 对应ls_customer表中的id", name = "communityBuyCustomerId")
    private Integer communityBuyCustomerId;
    /**
     * 社区团购的团购id  对应ls_community_buy 表中的id
     */
    @ApiModelProperty(value = "社区团购的团购id  对应ls_community_buy 表中的id ", name = "communityBuyId")
    private Integer communityBuyId;
    /**
     * 社区团购的利润，社区团购的时候使用
     */
    @ApiModelProperty(value = "社区团购的利润，社区团购的时候使用", name = "profit")
    private BigDecimal profit;
    /**
     * 小区名称 社区团购使用
     */
    @ApiModelProperty(value = "小区名称 社区团购使用", name = "communityName")
    private String communityName;
    /**
     * 社区团购名称
     */
    @ApiModelProperty(value = "社区团购名称", name = "communityBuyName")
    private String communityBuyName;
    /**
     * 经销商id
     */
    @ApiModelProperty(value = "经销商id", name = "dealerId")
    private Long dealerId;
    /**
     * 经销商信息
     */
    @ApiModelProperty(value = "经销商信息", name = "dealerInfo")
    private String dealerInfo;
    /**
     * 订单支付渠道 1 H5 2 公众号 3 PC
     */
    @ApiModelProperty(value = "订单支付渠道 1 H5 2 公众号 3 PC", name = "payChannel")
    private String payChannel;
    /**
     * 商品类型 0 精品 1 普通
     */
    @ApiModelProperty(value = "商品类型 0 精品 1 普通", name = "skuType")
    private String skuType;
    /**
     * 捷途官网留资推送标记  0 未推送 1 已推送  默认 0
     */
    @ApiModelProperty(value = "捷途官网留资推送标记  0 未推送 1 已推送  默认 0", name = "jetourSendFlag")
    private String jetourSendFlag;
    /**
     * 来源 URL
     */
    @ApiModelProperty(value = "来源 URL", name = "incomingUrl")
    private String incomingUrl;
    /**
     * 收货人
     */
    @ApiModelProperty(value = "收货人", name = "customerName")
    private String customerName;
    /**
     * 收货人手机号
     */
    @ApiModelProperty(value = "收货人手机号", name = "customerMobile")
    private String customerMobile;

    /**
     * 开始时间
     */
    @ApiModelProperty(value = "开始时间", name = "startTime")
    private String startTime;
    /**
     * 结束时间
     */
    @ApiModelProperty(value = "结束时间", name = "endTime")
    private String endTime;
    /**
     * 订单商品信息
     */
    private List<OrderSku> orderSkus;
    /**
     * 订单附属信息
     */
    private OrderAttr orderAttr;
    /**
     * 物流模板信息
     * LogisticsTemplate
     */
    private LogisticsTemplate logisticsTemplate;

    /**
     * 收货人手机号
     */
    private String receiptMobile;
    /**
     * 收货人姓名
     */
    private String receiptName;
    /**
     * 收货人地址
     */
    private String address;
    /**
     * 商品名称
     */
    private String shopName;
    /**
     * 商拼编号
     */
    private String skuNo;
    /**
     * 商品规格
     */
    private String skuSpecs;
    /**
     * billNo 银联单号
     */
    private String billNo;
}
