
package com.tmerclub.cloud.product.vo;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.tmerclub.cloud.common.model.ExcelModel;
import com.tmerclub.cloud.common.product.vo.BrandLangVO;
import com.tmerclub.cloud.common.product.vo.SpuDetailVO;
import com.tmerclub.cloud.common.product.vo.SpuLangVO;
import com.tmerclub.cloud.common.product.vo.SpuSkuAttrValueVO;
import io.swagger.v3.oas.annotations.media.Schema;

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

/**
 * spu信息VO
 *
 * @author tmerclub
 * @date 2020-10-28 15:27:24
 */
public class SpuExcelVO extends ExcelModel implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    /**
     * excel 信息
     */
    public static final String EXCEL_NAME = "商品信息";
    public static final String SHEET_NAME = "商品";
    /**
     * 哪一行开始导出
     */
    public static final int MERGE_ROW_INDEX = 2;
    /**
     * 需要合并的列数组
     */
    public static final int[] MERGE_COLUMN_INDEX = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18};
    /**
     * 需要批注的列
     */
    public static final int[] COMMENT_INDEX = {3, 4, 10};

    public static final String[] COMMENTS = {
            "1. 选填，请填写图片在图片服务器的url地址;\n"
                    + "2. 最多可上传9张，不同图片请以','隔开;",
            "1. 选填，请填写视频在视频服务器的url地址;\n"
                    + "2. 只能添加一个视频连接;\n"
                    + "3. 视频仅支付mp4格式，最大限制50MB;",
            "默认支持快递配送"
    };

    @ExcelProperty(value = {"商品信息", "编号*"}, index = 0)
    private String seq;

    @ExcelProperty(value = {"商品信息", "商品中文名称*"}, index = 1)
    private String nameZh;

    @ExcelProperty(value = {"商品信息", "商品spu编码"}, index = 2)
    private String spuCode;

    @ExcelIgnore
    private String mainImgUrl;

    @ExcelProperty(value = {"商品信息", "商品图片"}, index = 3)
    private String imgs;

    @ExcelProperty(value = {"商品信息", "商品视频"}, index = 4)
    private String video;

    @ExcelProperty(value = {"商品信息", "商品中文卖点"}, index = 5)
    private String sellingPointZh;

    @ExcelProperty(value = {"商品信息", "商品中文详情"}, index = 6)
    private String detailZh;

    @ExcelProperty(value = {"商品信息", "品牌"}, index = 7)
    private String brandName;

    @ExcelProperty(value = {"商品信息", "平台分类*"}, index = 8)
    private String categoryName;

    @ExcelProperty(value = {"商品信息", "店铺分类*"}, index = 9)
    private String shopCategoryName;

    @ExcelProperty(value = {"商品信息", "配送方式"}, index = 10)
    private String deliveryMode;

    @ExcelProperty(value = {"商品信息", "运费模板*"}, index = 11)
    private String deliveryTemplate;

    @ExcelProperty(value = {"商品信息", "固定运费金额(运费模板为固定运费时必填*)"}, index = 12)
    private String deliveryAmount;

    @ExcelProperty(value = {"商品信息", "状态*"}, index = 13)
    private String status;

    @ExcelProperty(value = {"商品信息", "商品类别*"}, index = 14)
    private String spuMold;

    @ExcelIgnore
    private Integer spuType;

    @ExcelProperty(value = {"商品信息", "核销次数 (虚拟商品必填*)"}, index = 15)
    private String writeOffNum;

    @ExcelProperty(value = {"商品信息", "多次核销次数 (多次核销选项，不填默认无限次)"}, index = 16)
    private String writeOffMultipleCount;

    @ExcelProperty(value = {"商品信息", "核销有效期 (x.x天内有效)"}, index = 17)
    private String writeOffTime;

    @ExcelProperty(value = {"商品信息", "核销开始时间(格式:2021-08-08 14:32:01,虚拟商品核销有效期是自定义则必填*)"}, index = 18)
    private Date writeOffStart;

    @ExcelProperty(value = {"商品信息", "核销结束时间(格式:2021-08-08 14:32:01,虚拟商品核销有效期是自定义则必填*)"}, index = 19)
    private Date writeOffEnd;

    @ExcelProperty(value = {"商品信息", "可以退款(虚拟商品必填*)"}, index = 20)
    private String isRefund;

    @ExcelProperty(value = {"商品信息", "虚拟商品留言 格式是[{\"name\": \"xx\", \"isRequired\": true}]"}, index = 21)
    private String virtualRemark;

    @ExcelProperty(value = {"商品sku信息", "中文sku名称"}, index = 22)
    private String skuNameZh;


    @ExcelProperty(value = {"商品sku信息", "中文销售规格"}, index = 23)
    private String propertiesZh;


    @ExcelProperty(value = {"商品sku信息", "售价"}, index = 24)
    private String priceFee;

    @ExcelProperty(value = {"商品sku信息", "市场价"}, index = 25)
    private String marketPriceFee;

    @ExcelProperty(value = {"商品sku信息", "库存"}, index = 26)
    private Integer stock;

    @ExcelProperty(value = {"商品sku信息", "商品sku编码"}, index = 27)
    private String partyCode;


    @ExcelProperty(value = {"商品sku信息", "商品重量"}, index = 28)
    private Double weight;

    @ExcelProperty(value = {"商品sku信息", "商品体积"}, index = 29)
    private Double volume;

    @ExcelProperty(value = {"商品sku信息", "库存预警"}, index = 30)
    private Long stockWarning;

    /**
     * 商品id
     */
    @ExcelIgnore
    private Long spuId;

    /**
     * 物流模板id
     */
    @ExcelIgnore
    private Long deliveryTemplateId;

    @ExcelIgnore
    private List<SpuSkuAttrValueVO> spuSkuAttrValueList;

    @ExcelIgnore
    private List<BrandLangVO> brandLangList;

    @ExcelIgnore
    private List<SpuLangVO> spuLangList;

    @ExcelIgnore
    private List<SpuDetailVO> spuDetailList;

    @ExcelIgnore
    private Long categoryId;

    @ExcelIgnore
    private Long shopCategoryId;

    @ExcelIgnore
    @Schema(description = "供应商商品类型 0.否 1.是 2.商家代销")
    private Integer supplierSpuType;

    public String getDeliveryAmount() {
        return deliveryAmount;
    }

    public void setDeliveryAmount(String deliveryAmount) {
        this.deliveryAmount = deliveryAmount;
    }

    public String getWriteOffNum() {
        return writeOffNum;
    }

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

    public String getWriteOffMultipleCount() {
        return writeOffMultipleCount;
    }

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

    public String getWriteOffTime() {
        return writeOffTime;
    }

    public void setWriteOffTime(String 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 getStockWarning() {
        return stockWarning;
    }

    public void setStockWarning(Long stockWarning) {
        this.stockWarning = stockWarning;
    }

    public String getIsRefund() {
        return isRefund;
    }

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

    public String getVirtualRemark() {
        return virtualRemark;
    }

    public void setVirtualRemark(String virtualRemark) {
        this.virtualRemark = virtualRemark;
    }

    public String getSpuMold() {
        return spuMold;
    }

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

    public Integer getSpuType() {
        return spuType;
    }

    public void setSpuType(Integer spuType) {
        this.spuType = spuType;
    }

    public Integer getSupplierSpuType() {
        return supplierSpuType;
    }

    public void setSupplierSpuType(Integer supplierSpuType) {
        this.supplierSpuType = supplierSpuType;
    }

    public String getSpuCode() {
        return spuCode;
    }

    public void setSpuCode(String spuCode) {
        this.spuCode = spuCode;
    }

    public String getSeq() {
        return seq;
    }

    public void setSeq(String seq) {
        this.seq = seq;
    }

    public String getNameZh() {
        return nameZh;
    }

    public void setNameZh(String nameZh) {
        this.nameZh = nameZh;
    }


    public String getSellingPointZh() {
        return sellingPointZh;
    }

    public void setSellingPointZh(String sellingPointZh) {
        this.sellingPointZh = sellingPointZh;
    }


    public String getBrandName() {
        return brandName;
    }

    public void setBrandName(String brandName) {
        this.brandName = brandName;
    }

    public String getCategoryName() {
        return categoryName;
    }

    public void setCategoryName(String categoryName) {
        this.categoryName = categoryName;
    }

    public String getShopCategoryName() {
        return shopCategoryName;
    }

    public void setShopCategoryName(String shopCategoryName) {
        this.shopCategoryName = shopCategoryName;
    }

    public String getDeliveryMode() {
        return deliveryMode;
    }

    public void setDeliveryMode(String deliveryMode) {
        this.deliveryMode = deliveryMode;
    }

    public String getDeliveryTemplate() {
        return deliveryTemplate;
    }

    public void setDeliveryTemplate(String deliveryTemplate) {
        this.deliveryTemplate = deliveryTemplate;
    }

    public String getStatus() {
        return status;
    }

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

    public String getSkuNameZh() {
        return skuNameZh;
    }

    public void setSkuNameZh(String skuNameZh) {
        this.skuNameZh = skuNameZh;
    }


    public String getPropertiesZh() {
        return propertiesZh;
    }

    public void setPropertiesZh(String propertiesZh) {
        this.propertiesZh = propertiesZh;
    }


    public String getPriceFee() {
        return priceFee;
    }

    public void setPriceFee(String priceFee) {
        this.priceFee = priceFee;
    }

    public String getMarketPriceFee() {
        return marketPriceFee;
    }

    public void setMarketPriceFee(String marketPriceFee) {
        this.marketPriceFee = marketPriceFee;
    }

    public Integer getStock() {
        return stock;
    }

    public void setStock(Integer stock) {
        this.stock = stock;
    }

    public String getPartyCode() {
        return partyCode;
    }

    public void setPartyCode(String partyCode) {
        this.partyCode = partyCode;
    }


    public Double getWeight() {
        return weight;
    }

    public void setWeight(Double weight) {
        this.weight = weight;
    }

    public Double getVolume() {
        return volume;
    }

    public void setVolume(Double volume) {
        this.volume = volume;
    }

    public Long getSpuId() {
        return spuId;
    }

    public void setSpuId(Long spuId) {
        this.spuId = spuId;
    }

    public Long getDeliveryTemplateId() {
        return deliveryTemplateId;
    }

    public void setDeliveryTemplateId(Long deliveryTemplateId) {
        this.deliveryTemplateId = deliveryTemplateId;
    }


    public List<SpuSkuAttrValueVO> getSpuSkuAttrValueList() {
        return spuSkuAttrValueList;
    }

    public void setSpuSkuAttrValueList(List<SpuSkuAttrValueVO> spuSkuAttrValueList) {
        this.spuSkuAttrValueList = spuSkuAttrValueList;
    }

    public List<BrandLangVO> getBrandLangList() {
        return brandLangList;
    }

    public void setBrandLangList(List<BrandLangVO> brandLangList) {
        this.brandLangList = brandLangList;
    }

    public List<SpuLangVO> getSpuLangList() {
        return spuLangList;
    }

    public void setSpuLangList(List<SpuLangVO> spuLangList) {
        this.spuLangList = spuLangList;
    }

    public Long getCategoryId() {
        return categoryId;
    }

    public void setCategoryId(Long categoryId) {
        this.categoryId = categoryId;
    }

    public Long getShopCategoryId() {
        return shopCategoryId;
    }

    public void setShopCategoryId(Long shopCategoryId) {
        this.shopCategoryId = shopCategoryId;
    }

    public String getImgs() {
        return imgs;
    }

    public void setImgs(String imgs) {
        this.imgs = imgs;
    }

    public String getVideo() {
        return video;
    }

    public void setVideo(String video) {
        this.video = video;
    }

    public String getMainImgUrl() {
        return mainImgUrl;
    }

    public void setMainImgUrl(String mainImgUrl) {
        this.mainImgUrl = mainImgUrl;
    }

    public String getDetailZh() {
        return detailZh;
    }

    public void setDetailZh(String detailZh) {
        this.detailZh = detailZh;
    }

    public List<SpuDetailVO> getSpuDetailList() {
        return spuDetailList;
    }

    public void setSpuDetailList(List<SpuDetailVO> spuDetailList) {
        this.spuDetailList = spuDetailList;
    }

    @Override
    public String toString() {
        return "SpuExcelVO{" +
                "seq='" + seq + '\'' +
                ", nameZh='" + nameZh + '\'' +
                ", spuCode='" + spuCode + '\'' +
                ", mainImgUrl='" + mainImgUrl + '\'' +
                ", imgs='" + imgs + '\'' +
                ", video='" + video + '\'' +
                ", sellingPointZh='" + sellingPointZh + '\'' +
                ", detailZh='" + detailZh + '\'' +
                ", brandName='" + brandName + '\'' +
                ", categoryName='" + categoryName + '\'' +
                ", shopCategoryName='" + shopCategoryName + '\'' +
                ", deliveryMode='" + deliveryMode + '\'' +
                ", deliveryTemplate='" + deliveryTemplate + '\'' +
                ", status='" + status + '\'' +
                ", spuMold='" + spuMold + '\'' +
                ", spuType=" + spuType +
                ", writeOffNum='" + writeOffNum + '\'' +
                ", writeOffMultipleCount='" + writeOffMultipleCount + '\'' +
                ", writeOffTime='" + writeOffTime + '\'' +
                ", writeOffStart=" + writeOffStart +
                ", writeOffEnd=" + writeOffEnd +
                ", isRefund='" + isRefund + '\'' +
                ", virtualRemark='" + virtualRemark + '\'' +
                ", skuNameZh='" + skuNameZh + '\'' +
                ", propertiesZh='" + propertiesZh + '\'' +
                ", priceFee='" + priceFee + '\'' +
                ", marketPriceFee='" + marketPriceFee + '\'' +
                ", stock=" + stock +
                ", partyCode='" + partyCode + '\'' +
                ", weight=" + weight +
                ", volume=" + volume +
                ", stockWarning=" + stockWarning +
                ", spuId=" + spuId +
                ", deliveryTemplateId=" + deliveryTemplateId +
                ", spuSkuAttrValueList=" + spuSkuAttrValueList +
                ", brandLangList=" + brandLangList +
                ", spuLangList=" + spuLangList +
                ", spuDetailList=" + spuDetailList +
                ", categoryId=" + categoryId +
                ", shopCategoryId=" + shopCategoryId +
                ", supplierSpuType=" + supplierSpuType +
                ", deliveryAmount=" + deliveryAmount +
                '}';
    }
}
