
package 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 ShopCartOrderVO implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    @Schema(description = "订单id", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long orderId;

    @Schema(description = "店铺id", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long shopId;

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

    @Schema(description = "店铺类型1自营店 2普通店")
    private Integer shopType;

    @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 totalCount;

    @Schema(description = "平台等级免运费金额", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long levelFreeTransfee;

    @Schema(description = "店家包邮金额", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long freeTransfee;

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

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

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

    @Schema(description = "平台优惠券优惠金额", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long platformCouponReduce;

    @Schema(description = "积分优惠金额", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long scoreReduce;

    @Schema(description = "使用积分", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long useScore;

    @Schema(description = "平台优惠金额", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long platformAmount;

    @Schema(description = "平台佣金", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long platformCommission;

    @Schema(description = "平台供应商佣金", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long totalPurchasePlatformCommission;


    @Schema(description = "等级优惠金额", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long levelReduce;

    /**
     * 这个是一个店铺的总分摊，如果要算店铺的单独分摊 = 总分摊 - 平台分摊
     */
    @Schema(description = "店铺优惠金额(促销活动 + 优惠券 + 积分优惠金额 + 其他)", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long shopReduce;

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

    @Schema(description = "订单类型")
    private Integer orderType;

    @Schema(description = "购物车商品", requiredMode = Schema.RequiredMode.REQUIRED)
    private List<ShopCartItemDiscountVO> shopCartItemDiscounts;

    @Schema(description = "整个店铺可以使用的优惠券列表", requiredMode = Schema.RequiredMode.REQUIRED)
    private List<CouponOrderVO> coupons;

    @Schema(description = "发货方式 1.供应商发货 2.仓库发货")
    private Integer supplierDeliveryType;

    @Schema(description = "供应商id")
    private Long supplierId;

    @Schema(description = "同城配送可用状态 : 0 不可用 1 可用 -1 不在范围内 -2 商品没有配置同城配送信息 -3 起送费不够", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer shopCityStatus;

    @Schema(description = "同城配送起送费", requiredMode = Schema.RequiredMode.REQUIRED)
    private Double startDeliveryFee;

    @Schema(description = "是否可以退款 1.可以 0.不可以", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer isRefund;

    @Schema(description = "商品类别 0.实物商品 1. 虚拟商品 2.组合商品")
    private Integer spuMold;

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

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

    @Schema(description = "用户id")
    private Long userId;

    @Schema(description = "核销次数 -1.多次核销 0.无需核销 1.单次核销")
    private Integer writeOffNum;

    @Schema(description = "多次核销次数 -1.无限次")
    private Integer writeOffMultipleCount;

    @Schema(description = "核销有效期 -1.长期有效 0.自定义  x.x天内有效")
    private Integer writeOffTime;

    @Schema(description = "核销开始时间")
    private Date writeOffStart;

    @Schema(description = "核销结束时间")
    private Date writeOffEnd;

    @Schema(description = "包含套餐提交订单 true: 包含 false: 不包含")
    private Boolean hasComboOrder;

    @Schema(description = "主单号,在组合商品拆单时会存在")
    private Long mainOrderId;

    public Long getMainOrderId() {
        return mainOrderId;
    }

    public void setMainOrderId(Long mainOrderId) {
        this.mainOrderId = mainOrderId;
    }

    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 Integer getWriteOffTime() {
        return writeOffTime;
    }

    public void setWriteOffTime(Integer writeOffTime) {
        this.writeOffTime = writeOffTime;
    }

    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 Long getUserId() {
        return userId;
    }

    public void setUserId(Long userId) {
        this.userId = userId;
    }

    public Long getShopComboAmount() {
        return shopComboAmount;
    }

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

    public Integer getSpuMold() {
        return spuMold;
    }

    public void setSpuMold(Integer spuMold) {
        this.spuMold = spuMold;
    }

    public Integer getIsRefund() {
        return isRefund;
    }

    public void setIsRefund(Integer isRefund) {
        this.isRefund = isRefund;
    }

    public Double getStartDeliveryFee() {
        return startDeliveryFee;
    }

    public void setStartDeliveryFee(Double startDeliveryFee) {
        this.startDeliveryFee = startDeliveryFee;
    }

    public Integer getShopCityStatus() {
        return shopCityStatus;
    }

    public void setShopCityStatus(Integer shopCityStatus) {
        this.shopCityStatus = shopCityStatus;
    }

    public Integer getPreSaleType() {
        return preSaleType;
    }

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

    public Long getTotalPurchasePlatformCommission() {
        return totalPurchasePlatformCommission;
    }

    public void setTotalPurchasePlatformCommission(Long totalPurchasePlatformCommission) {
        this.totalPurchasePlatformCommission = totalPurchasePlatformCommission;
    }

    public Integer getSupplierDeliveryType() {
        return supplierDeliveryType;
    }

    public void setSupplierDeliveryType(Integer supplierDeliveryType) {
        this.supplierDeliveryType = supplierDeliveryType;
    }

    public Long getSupplierId() {
        return supplierId;
    }

    public void setSupplierId(Long supplierId) {
        this.supplierId = supplierId;
    }

    public Long getOrderId() {
        return orderId;
    }

    public void setOrderId(Long orderId) {
        this.orderId = orderId;
    }

    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 getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(Integer totalCount) {
        this.totalCount = totalCount;
    }

    public Long getFreeTransfee() {
        return freeTransfee;
    }

    public void setFreeTransfee(Long freeTransfee) {
        this.freeTransfee = freeTransfee;
    }

    public Long getTransfee() {
        return transfee;
    }

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

    public Long getDiscountReduce() {
        return discountReduce;
    }

    public void setDiscountReduce(Long discountReduce) {
        this.discountReduce = discountReduce;
    }

    public Long getCouponReduce() {
        return couponReduce;
    }

    public void setCouponReduce(Long couponReduce) {
        this.couponReduce = couponReduce;
    }

    public Long getScoreReduce() {
        return scoreReduce;
    }

    public void setScoreReduce(Long scoreReduce) {
        this.scoreReduce = scoreReduce;
    }

    public Long getUseScore() {
        return useScore;
    }

    public void setUseScore(Long useScore) {
        this.useScore = useScore;
    }

    public Long getPlatformAmount() {
        return platformAmount;
    }

    public void setPlatformAmount(Long platformAmount) {
        this.platformAmount = platformAmount;
    }

    public Long getLevelReduce() {
        return levelReduce;
    }

    public void setLevelReduce(Long levelReduce) {
        this.levelReduce = levelReduce;
    }

    public Long getShopReduce() {
        return shopReduce;
    }

    public void setShopReduce(Long shopReduce) {
        this.shopReduce = shopReduce;
    }

    public String getRemarks() {
        return remarks;
    }

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

    public List<ShopCartItemDiscountVO> getShopCartItemDiscounts() {
        return shopCartItemDiscounts;
    }

    public void setShopCartItemDiscounts(List<ShopCartItemDiscountVO> shopCartItemDiscounts) {
        this.shopCartItemDiscounts = shopCartItemDiscounts;
    }

    public List<CouponOrderVO> getCoupons() {
        return coupons;
    }

    public void setCoupons(List<CouponOrderVO> coupons) {
        this.coupons = coupons;
    }

    public Integer getOrderType() {
        return orderType;
    }

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

    public Integer getShopType() {
        return shopType;
    }

    public void setShopType(Integer shopType) {
        this.shopType = shopType;
    }

    public Long getPlatformCommission() {
        return platformCommission;
    }

    public void setPlatformCommission(Long platformCommission) {
        this.platformCommission = platformCommission;
    }

    public Long getPlatformCouponReduce() {
        return platformCouponReduce;
    }

    public void setPlatformCouponReduce(Long platformCouponReduce) {
        this.platformCouponReduce = platformCouponReduce;
    }

    public Long getLevelFreeTransfee() {
        return levelFreeTransfee;
    }

    public void setLevelFreeTransfee(Long levelFreeTransfee) {
        this.levelFreeTransfee = levelFreeTransfee;
    }

    public Boolean getHasComboOrder() {
        return hasComboOrder;
    }

    public void setHasComboOrder(Boolean hasComboOrder) {
        this.hasComboOrder = hasComboOrder;
    }

    @Override
    public String toString() {
        return "ShopCartOrderVO{" +
                "orderId=" + orderId +
                ", shopId=" + shopId +
                ", shopName='" + shopName + '\'' +
                ", shopType=" + shopType +
                ", actualTotal=" + actualTotal +
                ", total=" + total +
                ", totalCount=" + totalCount +
                ", levelFreeTransfee=" + levelFreeTransfee +
                ", freeTransfee=" + freeTransfee +
                ", transfee=" + transfee +
                ", discountReduce=" + discountReduce +
                ", couponReduce=" + couponReduce +
                ", platformCouponReduce=" + platformCouponReduce +
                ", scoreReduce=" + scoreReduce +
                ", useScore=" + useScore +
                ", platformAmount=" + platformAmount +
                ", platformCommission=" + platformCommission +
                ", totalPurchasePlatformCommission=" + totalPurchasePlatformCommission +
                ", levelReduce=" + levelReduce +
                ", shopReduce=" + shopReduce +
                ", remarks='" + remarks + '\'' +
                ", orderType=" + orderType +
                ", shopCartItemDiscounts=" + shopCartItemDiscounts +
                ", coupons=" + coupons +
                ", supplierDeliveryType=" + supplierDeliveryType +
                ", supplierId=" + supplierId +
                ", shopCityStatus=" + shopCityStatus +
                ", startDeliveryFee=" + startDeliveryFee +
                ", isRefund=" + isRefund +
                ", spuMold=" + spuMold +
                ", shopComboAmount=" + shopComboAmount +
                ", preSaleType=" + preSaleType +
                ", userId=" + userId +
                ", writeOffNum=" + writeOffNum +
                ", writeOffMultipleCount=" + writeOffMultipleCount +
                ", writeOffTime=" + writeOffTime +
                ", writeOffStart=" + writeOffStart +
                ", writeOffEnd=" + writeOffEnd +
                ", hasComboOrder=" + hasComboOrder +
                ", mainOrderId=" + mainOrderId +
                '}';
    }
}
