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.Data;
import org.springframework.format.annotation.DateTimeFormat;

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

/**
 * 选配车订单表
 *
 * @author Pine
 * @email 771190883@qq.com
 * @date 2019-07-24 17:43:47
 */
@Data
@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
@ApiModel(value = "选配车订单表对象", description = "选配车订单表对象")
public class CarOrder implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 主键id
     */
    @ApiModelProperty(value = "主键id", name = "id")
    private Long id;
    /**
     * 订单号
     */
    @ApiModelProperty(value = "订单号", name = "code")
    private String code;
    /**
     * 订单所属会员id
     */
    @ApiModelProperty(value = "订单所属会员id", name = "customerId")
    private Long customerId;
    /**
     * 支付方式  1 全款 2 贷款
     */
    @ApiModelProperty(value = "支付方式  1 全款 2 贷款", name = "payType")
    private String payType;
    /**
     * 订单状态 1 待支付定金 2 已支付定金 3 已完成 4 取消订单 5 退定金完成
     */
    @ApiModelProperty(value = "订单状态 1 待支付定金 2 已支付定金 3 已完成 4 取消订单 5 退定金完成", name = "status")
    private String status;
    /**
     * 贷款状态 0 暂无 1 线上待审核 2 线上审核通过 3 线上审核不通过 4 线下待审核 5 线下审核通过 6 线下审核不通过
     */
    @ApiModelProperty(value = "贷款状态 0 暂无 1 线上待审核 2 线上审核通过 3 线上审核不通过 4 线下待审核 5 线下审核通过 6 线下审核不通过", name = "loanStatus")
    private String loanStatus;
    /**
     * 是否被工厂使用过 0 否 1 是 默认0
     */
    @ApiModelProperty(value = "是否被工厂使用过 0 否 1 是 默认0 ", name = "isUse")
    private String isUse;
    /**
     * 车型id
     */
    @ApiModelProperty(value = "车型id", name = "carId")
    private Long carId;
    /**
     * 车型信息 json字符串格式
     */
    @ApiModelProperty(value = "车型信息 json字符串格式", name = "carJson")
    private String carJson;
    /**
     * 车辆选配信息  json信息如下： var a = {
     * // 卡钳
     * "carCaliper": {
     * // 名称
     * "name": "卡钳",
     * // 价格
     * "price": 10,
     * // 类型5 卡钳
     * "type": "5",
     * // 选择的卡钳值
     * "value": "黑色卡钳"
     * },
     * // 车身颜色
     * "carColor": {
     * // 名称
     * "name": "车身颜色",
     * // 价格
     * "price": 10,
     * // 类型2 车身颜色
     * "type": "2",
     * // 颜色和材质值 用/分割
     * "value": "红色/基础版"
     * },
     * // 座椅
     * "carSeat": {
     * // 名称
     * "name": "座椅布局",
     * // 价格
     * "price": 10,
     * // 类型1 座椅
     * "type": "1",
     * // 座椅值
     * "value": "5座"
     * },
     * // 轮廓
     * "carWheelHub": {
     * // 名称
     * "name": "轮毂",
     * // 价格
     * "price": 10,
     * // 类型4 轮廓
     * "type": "4",
     * // 轮廓值
     * "value": "轮毂型号名称"
     * },
     * // 内饰
     * "catUpholstery": {
     * // 名称
     * "name": "内饰",
     * // 价格
     * "price": 10,
     * // 类型3 内饰
     * "type": "3",
     * // 内饰值
     * "value": "红黑条纹软包套件"
     * }
     * };
     */
    @ApiModelProperty(value = "车辆选配信息", name = "pickedCarInformation")
    private String pickedCarInformation;
    /**
     * 贷款分期次数（例如 12，24，36）
     */
    @ApiModelProperty(value = "贷款分期次数（例如 12，24，36）", name = "loanInstalmentCount")
    private Integer loanInstalmentCount;
    /**
     * 贷款利率
     */
    @ApiModelProperty(value = "贷款利率", name = "loanRate")
    private BigDecimal loanRate;
    /**
     * 首付比例  (系统后台配置的首付比例）
     */
    @ApiModelProperty(value = "首付比例  (系统后台配置的首付比例）", name = "downPaymentRate")
    private BigDecimal downPaymentRate;
    /**
     * 实际首付比例（线下审核通过金融公司返回实际首付比例）
     */
    @ApiModelProperty(value = "实际首付比例（线下审核通过金融公司返回实际首付比例）", name = "realDownPaymentRate")
    private BigDecimal realDownPaymentRate;
    /**
     * 总价  车型价格+各项选配价格
     */
    @ApiModelProperty(value = "总价  车型价格+各项选配价格", name = "totalPrice")
    private BigDecimal totalPrice;
    /**
     * 定金
     */
    @ApiModelProperty(value = "定金", name = "depositPrice")
    private BigDecimal depositPrice;
    /**
     * 尾款（全款支付）总价-定金
     */
    @ApiModelProperty(value = "尾款（全款支付）总价-定金", name = "finalPaymentPrice")
    private BigDecimal finalPaymentPrice;
    /**
     * 首付款（不包含定金） 总价*首付比例-定金
     */
    @ApiModelProperty(value = "首付款（不包含定金） 总价*首付比例-定金", name = "downPaymentPrice")
    private BigDecimal downPaymentPrice;
    /**
     * 实际首付款 （线下审核通过金融公司返回实际首付比例重新计算首付款，用户实际支付的首付款）
     */
    @ApiModelProperty(value = "实际首付款 （线下审核通过金融公司返回实际首付比例重新计算首付款，用户实际支付的首付款）", name = "realDownPaymentPrice")
    private BigDecimal realDownPaymentPrice;
    /**
     * 贷款总额  总价-总价*首付比例
     */
    @ApiModelProperty(value = "贷款总额  总价-总价*首付比例", name = "loanPrice")
    private BigDecimal loanPrice;
    /**
     * 月供金额（贷款金额+贷款金额*贷款利率)/贷款分期次数
     */
    @ApiModelProperty(value = "月供金额（贷款金额+贷款金额*贷款利率)/贷款分期次数", name = "monthlyInstallmentPaymentPrice")
    private BigDecimal monthlyInstallmentPaymentPrice;
    /**
     * 收货人姓名
     */
    @ApiModelProperty(value = "收货人姓名", name = "name")
    private String name;
    /**
     * 收货人联系方式
     */
    @ApiModelProperty(value = "收货人联系方式", name = "mobile")
    private String mobile;
    /**
     * 收货人身份证号
     */
    @ApiModelProperty(value = "收货人身份证号", name = "idCard")
    private String idCard;
    /**
     * 取车城市
     */
    @ApiModelProperty(value = "取车城市", name = "pickCity")
    private String pickCity;
    /**
     * 4S供应商
     */
    @ApiModelProperty(value = "4S供应商", name = "carSupplier")
    private String carSupplier;
    /**
     * 4S供应商编码
     */
    @ApiModelProperty(value = "4S供应商编码", name = "carSupplierNo")
    private String carSupplierNo;
    /**
     * 创建时间
     */
    @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 = "orderCancelTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date orderCancelTime;
    /**
     * 支付定金时间
     */
    @ApiModelProperty(value = "支付定金时间", name = "payDepositTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date payDepositTime;
    /**
     * 线上审核时间
     */
    @ApiModelProperty(value = "线上审核时间", name = "onlineAuditTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date onlineAuditTime;
    /**
     * 线下审核时间
     */
    @ApiModelProperty(value = "线下审核时间", name = "offlineAuditTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date offlineAuditTime;
    /**
     * 订单完成时间
     */
    @ApiModelProperty(value = "订单完成时间", name = "orderFinishTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date orderFinishTime;
    /**
     * 填写申请金融公司贷款资料链接地址
     */
    @ApiModelProperty(value = "填写申请金融公司贷款资料链接地址", name = "url")
    private String url;
    /**
     * 订单取消原因 1 不需要了 2 车辆选配内容错误 3 地址信息填写错误 4 其他
     */
    @ApiModelProperty(value = "订单取消原因 1 不需要了 2 车辆选配内容错误 3 地址信息填写错误 4 其他", name = "cancelReason")
    private String cancelReason;
    /**
     * 订单是否发送给金融公司  0 否 1是  默认 0
     */
    @ApiModelProperty(value = "订单是否发送给金融公司  0 否 1是  默认 0", name = "isSend")
    private String isSend;

    @ApiModelProperty(value = "是否退款 0 否 1 是 默认 0",name = "isRefund")
    private Integer isRefund = 0 ;

    @ApiModelProperty(hidden = true)
    private OfflinePayments offlinePayments;

    /**
     * 搜索条件  查询首付/尾款  支付信息
     *   0 未支付 1 已线下支付  2 已经在线支付
     */
    @ApiModelProperty(value = "搜索条件  查询首付/尾款0 未支付 1 已线下支付  2 已经在线支付",name = "offlinePayType")
    private String offlinePayType;

    /**
     * 退单状态 1 待审核 2 审核通过 3 审核不通过 4 已退款
     */
    @ApiModelProperty(value = "退单状态 1 待审核 2 审核通过 3 审核不通过 4 已退款", name = "status")
    private String backStatus;
}
