
package com.tmerclub.cloud.order.vo;

import com.tmerclub.cloud.common.order.vo.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.ToString;

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

/**
 * 订单下的每个店铺
 *
 * @author tmerclub
 */
@Data
@ToString
public class OrderShopVO implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * 店铺ID
     **/
    @Schema(description = "店铺id", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long shopId;

    /**
     * 店铺名称
     **/
    @Schema(description = "店铺名称", requiredMode = Schema.RequiredMode.REQUIRED)
    private String shopName;

    @Schema(description = "实际总值", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long actualTotal;

    @Schema(description = "商品总值", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long total;

    @Schema(description = "商品总数", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer totalNum;

    @Schema(description = "地址Dto", requiredMode = Schema.RequiredMode.REQUIRED)
    private OrderAddrVO orderAddr;

    @Schema(description = "支付方式", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer payType;

    @Schema(description = "产品信息", requiredMode = Schema.RequiredMode.REQUIRED)
    private List<OrderItemVO> orderItems;

    @Schema(description = "运费", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long transfee;

    @Schema(description = "优惠总额", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long reduceAmount;

    @Schema(description = "促销活动优惠金额", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long discountMoney;

    @Schema(description = "店铺优惠券优惠金额", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long shopCouponMoney;

    @Schema(description = "订单创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    private Date createTime;

    @Schema(description = "订单付款时间")
    private Date payTime;

    @Schema(description = "订单发货时间")
    private Date deliveryTime;

    @Schema(description = "订单完成时间")
    private Date finallyTime;

    @Schema(description = "订单取消时间")
    private Date cancelTime;

    @Schema(description = "订单更新时间")
    private Date updateTime;

    @Schema(description = "订单备注信息", requiredMode = Schema.RequiredMode.REQUIRED)
    private String remarks;

    @Schema(description = "配送类型 1:快递 2:自提 3：无需快递", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer deliveryType;

    @Schema(description = "订单类型（1团购订单 2秒杀订单）", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer orderType;

    @Schema(description = "订单状态", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer status;

    @Schema(description = "是否为虚拟商品订单 1.是 0.否")
    private Integer orderMold;

    @Schema(description = "店铺优惠金额")
    private Long shopAmount;

    @Schema(description = "积分抵扣金额")
    private Long scoreAmount;

    @Schema(description = "会员折扣金额")
    private Long memberAmount;

    @Schema(description = "平台优惠券优惠金额")
    private Long platformCouponAmount;

    @Schema(description = "平台运费减免金额")
    private Long platformFreeFreightAmount;

    @Schema(description = "商家运费减免金额")
    private Long freeFreightAmount;

    @Schema(description = "订单积分")
    private Long orderScore;

    @Schema(description = "能否退款", requiredMode = Schema.RequiredMode.REQUIRED)
    private Boolean canRefund;

    @Schema(description = "能否整单退款", requiredMode = Schema.RequiredMode.REQUIRED)
    private Boolean canAllRefund;

    @Schema(description = "最终的退款id")
    private Long finalRefundId;

    @Schema(description = "当前可退款金额")
    private Long canRefundAmount;

    @Schema(description = "店铺改价优惠金额")
    private Long shopChangeFreeAmount;

    @Schema(description = "能否修改或者查看物流 1.可以，2.不可以")
    private Integer updateOrViewDeliveryInfo;

    @Schema(description = "订单发票id")
    private Long orderInvoiceId;

    @Schema(description = "预售信息")
    private OrderPreSaleInfoVO orderPreSaleInfoVO;

    @Schema(description = "预售类型 -1.未开启预售 0.全款预售类型 1.定金预售")
    private Integer preSaleType;

    @Schema(description = "套餐优惠金额")
    private Long shopComboAmount;

    @Schema(description = "自提信息")
    private OrderSelfStationVO orderSelfStationVO;

    @Schema(description = "订单自动取消时间")
    private Date autoCancelTime;

    @Schema(description = "订单卡券信息")
    private List<OrderVirtualInfoVO> virtualInfoList;

    /**
     * 核销次数 -1.多次核销 0.无需核销 1.单次核销
     */
    private Integer writeOffNum;

    /**
     * 多次核销次数 -1.无限次
     */
    private Integer writeOffMultipleCount;

    /**
     * 核销开始时间
     */
    private Date writeOffStart;

    /**
     * 核销结束时间
     */
    private Date writeOffEnd;

    /**
     * 订单核销状态 0.待核销 1.核销完成
     */
    private Integer writeOffStatus;

    @Schema(description = "订单退款状态（1:申请退款 2:退款成功 3:部分退款成功 4:退款失败）")
    private Integer refundStatus;

}
