
package com.tmerclub.cloud.order.vo;

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

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

/**
 * 订单下的每个店铺
 *
 * @author tmerclub
 */
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;

    public Integer getRefundStatus() {
        return refundStatus;
    }

    public void setRefundStatus(Integer refundStatus) {
        this.refundStatus = refundStatus;
    }

    public Integer getWriteOffStatus() {
        return writeOffStatus;
    }

    public void setWriteOffStatus(Integer writeOffStatus) {
        this.writeOffStatus = writeOffStatus;
    }

    public Integer getWriteOffNum() {
        return writeOffNum;
    }

    public void setWriteOffNum(Integer writeOffNum) {
        this.writeOffNum = writeOffNum;
    }

    public Integer getWriteOffMultipleCount() {
        return writeOffMultipleCount;
    }

    public void setWriteOffMultipleCount(Integer writeOffMultipleCount) {
        this.writeOffMultipleCount = writeOffMultipleCount;
    }

    public Date getWriteOffStart() {
        return writeOffStart;
    }

    public void setWriteOffStart(Date writeOffStart) {
        this.writeOffStart = writeOffStart;
    }

    public Date getWriteOffEnd() {
        return writeOffEnd;
    }

    public void setWriteOffEnd(Date writeOffEnd) {
        this.writeOffEnd = writeOffEnd;
    }


    public List<OrderVirtualInfoVO> getVirtualInfoList() {
        return virtualInfoList;
    }

    public void setVirtualInfoList(List<OrderVirtualInfoVO> virtualInfoList) {
        this.virtualInfoList = virtualInfoList;
    }

    public OrderSelfStationVO getOrderSelfStationVO() {
        return orderSelfStationVO;
    }

    public void setOrderSelfStationVO(OrderSelfStationVO orderSelfStationVO) {
        this.orderSelfStationVO = orderSelfStationVO;
    }

    public Long getShopComboAmount() {
        return shopComboAmount;
    }

    public void setShopComboAmount(Long shopComboAmount) {
        this.shopComboAmount = shopComboAmount;
    }

    public Integer getPreSaleType() {
        return preSaleType;
    }

    public void setPreSaleType(Integer preSaleType) {
        this.preSaleType = preSaleType;
    }

    public Integer getOrderMold() {
        return orderMold;
    }

    public void setOrderMold(Integer orderMold) {
        this.orderMold = orderMold;
    }

    public OrderPreSaleInfoVO getOrderPreSaleInfoVO() {
        return orderPreSaleInfoVO;
    }

    public void setOrderPreSaleInfoVO(OrderPreSaleInfoVO orderPreSaleInfoVO) {
        this.orderPreSaleInfoVO = orderPreSaleInfoVO;
    }

    public Long getShopChangeFreeAmount() {
        return shopChangeFreeAmount;
    }

    public void setShopChangeFreeAmount(Long shopChangeFreeAmount) {
        this.shopChangeFreeAmount = shopChangeFreeAmount;
    }

    public Integer getUpdateOrViewDeliveryInfo() {
        return updateOrViewDeliveryInfo;
    }

    public void setUpdateOrViewDeliveryInfo(Integer updateOrViewDeliveryInfo) {
        this.updateOrViewDeliveryInfo = updateOrViewDeliveryInfo;
    }

    public Long getScoreAmount() {
        return scoreAmount;
    }

    public void setScoreAmount(Long scoreAmount) {
        this.scoreAmount = scoreAmount;
    }

    public Long getMemberAmount() {
        return memberAmount;
    }

    public void setMemberAmount(Long memberAmount) {
        this.memberAmount = memberAmount;
    }

    public Long getPlatformCouponAmount() {
        return platformCouponAmount;
    }

    public void setPlatformCouponAmount(Long platformCouponAmount) {
        this.platformCouponAmount = platformCouponAmount;
    }

    public Long getPlatformFreeFreightAmount() {
        return platformFreeFreightAmount;
    }

    public void setPlatformFreeFreightAmount(Long platformFreeFreightAmount) {
        this.platformFreeFreightAmount = platformFreeFreightAmount;
    }

    public Long getFreeFreightAmount() {
        return freeFreightAmount;
    }

    public void setFreeFreightAmount(Long freeFreightAmount) {
        this.freeFreightAmount = freeFreightAmount;
    }

    public Long getShopAmount() {
        return shopAmount;
    }

    public void setShopAmount(Long shopAmount) {
        this.shopAmount = shopAmount;
    }

    public Long getShopId() {
        return shopId;
    }

    public void setShopId(Long shopId) {
        this.shopId = shopId;
    }

    public String getShopName() {
        return shopName;
    }

    public void setShopName(String shopName) {
        this.shopName = shopName;
    }

    public Long getActualTotal() {
        return actualTotal;
    }

    public void setActualTotal(Long actualTotal) {
        this.actualTotal = actualTotal;
    }

    public Long getTotal() {
        return total;
    }

    public void setTotal(Long total) {
        this.total = total;
    }

    public Integer getTotalNum() {
        return totalNum;
    }

    public void setTotalNum(Integer totalNum) {
        this.totalNum = totalNum;
    }

    public OrderAddrVO getOrderAddr() {
        return orderAddr;
    }

    public void setOrderAddr(OrderAddrVO orderAddr) {
        this.orderAddr = orderAddr;
    }

    public Integer getPayType() {
        return payType;
    }

    public void setPayType(Integer payType) {
        this.payType = payType;
    }

    public List<OrderItemVO> getOrderItems() {
        return orderItems;
    }

    public void setOrderItems(List<OrderItemVO> orderItems) {
        this.orderItems = orderItems;
    }

    public Long getTransfee() {
        return transfee;
    }

    public void setTransfee(Long transfee) {
        this.transfee = transfee;
    }

    public Long getReduceAmount() {
        return reduceAmount;
    }

    public void setReduceAmount(Long reduceAmount) {
        this.reduceAmount = reduceAmount;
    }

    public Long getDiscountMoney() {
        return discountMoney;
    }

    public void setDiscountMoney(Long discountMoney) {
        this.discountMoney = discountMoney;
    }

    public Long getShopCouponMoney() {
        return shopCouponMoney;
    }

    public void setShopCouponMoney(Long shopCouponMoney) {
        this.shopCouponMoney = shopCouponMoney;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getPayTime() {
        return payTime;
    }

    public void setPayTime(Date payTime) {
        this.payTime = payTime;
    }

    public Date getFinallyTime() {
        return finallyTime;
    }

    public void setFinallyTime(Date finallyTime) {
        this.finallyTime = finallyTime;
    }

    public Date getCancelTime() {
        return cancelTime;
    }

    public void setCancelTime(Date cancelTime) {
        this.cancelTime = cancelTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }

    public String getRemarks() {
        return remarks;
    }

    public void setRemarks(String remarks) {
        this.remarks = remarks;
    }

    public Integer getOrderType() {
        return orderType;
    }

    public void setOrderType(Integer orderType) {
        this.orderType = orderType;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Boolean getCanRefund() {
        return canRefund;
    }

    public void setCanRefund(Boolean canRefund) {
        this.canRefund = canRefund;
    }

    public Boolean getCanAllRefund() {
        return canAllRefund;
    }

    public void setCanAllRefund(Boolean canAllRefund) {
        this.canAllRefund = canAllRefund;
    }

    public Long getOrderScore() {
        return orderScore;
    }

    public void setOrderScore(Long orderScore) {
        this.orderScore = orderScore;
    }

    public Date getDeliveryTime() {
        return deliveryTime;
    }

    public void setDeliveryTime(Date deliveryTime) {
        this.deliveryTime = deliveryTime;
    }

    public Integer getDeliveryType() {
        return deliveryType;
    }

    public void setDeliveryType(Integer deliveryType) {
        this.deliveryType = deliveryType;
    }

    public Long getFinalRefundId() {
        return finalRefundId;
    }

    public void setFinalRefundId(Long finalRefundId) {
        this.finalRefundId = finalRefundId;
    }

    public Long getCanRefundAmount() {
        return canRefundAmount;
    }

    public void setCanRefundAmount(Long canRefundAmount) {
        this.canRefundAmount = canRefundAmount;
    }

    public Long getOrderInvoiceId() {
        return orderInvoiceId;
    }

    public void setOrderInvoiceId(Long orderInvoiceId) {
        this.orderInvoiceId = orderInvoiceId;
    }

    public Date getAutoCancelTime() {
        return autoCancelTime;
    }

    public void setAutoCancelTime(Date autoCancelTime) {
        this.autoCancelTime = autoCancelTime;
    }

    @Override
    public String toString() {
        return "OrderShopVO{" +
                "shopId=" + shopId +
                ", shopName='" + shopName + '\'' +
                ", actualTotal=" + actualTotal +
                ", total=" + total +
                ", totalNum=" + totalNum +
                ", orderAddr=" + orderAddr +
                ", payType=" + payType +
                ", orderItems=" + orderItems +
                ", transfee=" + transfee +
                ", reduceAmount=" + reduceAmount +
                ", discountMoney=" + discountMoney +
                ", shopCouponMoney=" + shopCouponMoney +
                ", createTime=" + createTime +
                ", payTime=" + payTime +
                ", deliveryTime=" + deliveryTime +
                ", finallyTime=" + finallyTime +
                ", cancelTime=" + cancelTime +
                ", updateTime=" + updateTime +
                ", remarks='" + remarks + '\'' +
                ", deliveryType=" + deliveryType +
                ", orderType=" + orderType +
                ", status=" + status +
                ", orderMold=" + orderMold +
                ", shopAmount=" + shopAmount +
                ", scoreAmount=" + scoreAmount +
                ", memberAmount=" + memberAmount +
                ", platformCouponAmount=" + platformCouponAmount +
                ", platformFreeFreightAmount=" + platformFreeFreightAmount +
                ", freeFreightAmount=" + freeFreightAmount +
                ", orderScore=" + orderScore +
                ", canRefund=" + canRefund +
                ", canAllRefund=" + canAllRefund +
                ", finalRefundId=" + finalRefundId +
                ", canRefundAmount=" + canRefundAmount +
                ", shopChangeFreeAmount=" + shopChangeFreeAmount +
                ", updateOrViewDeliveryInfo=" + updateOrViewDeliveryInfo +
                ", orderInvoiceId=" + orderInvoiceId +
                ", orderPreSaleInfoVO=" + orderPreSaleInfoVO +
                ", preSaleType=" + preSaleType +
                ", shopComboAmount=" + shopComboAmount +
                ", orderSelfStationVO=" + orderSelfStationVO +
                ", autoCancelTime=" + autoCancelTime +
                ", virtualInfoList=" + virtualInfoList +
                ", writeOffNum=" + writeOffNum +
                ", writeOffMultipleCount=" + writeOffMultipleCount +
                ", writeOffStart=" + writeOffStart +
                ", writeOffEnd=" + writeOffEnd +
                ", writeOffStatus=" + writeOffStatus +
                ", refundStatus=" + refundStatus +
                '}';
    }
}
