
package com.tmerclub.cloud.common.product.dto;

import io.swagger.v3.oas.annotations.media.Schema;

import java.io.Serial;
import java.io.Serializable;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * @author tmerclub
 * @date 2020/11/16
 */
public class ProductSearchDTO implements Serializable {
    @Serial
    private static final long serialVersionUID = 1L;
    @Schema(description = "页面传递过来的全文匹配关键字")
    private String keyword;

    @Schema(description = "品牌id,可以多选")
    private String brandIds;

    @Schema(description = "商品id")
    private Long spuId;

    @Schema(description = "商品名称")
    private String spuName;

    @Schema(description = "商家一级分类id")
    private Long shopPrimaryCategoryId;

    @Schema(description = "商家二级分类id")
    private Long shopSecondaryCategoryId;

    @Schema(description = "平台一级分类id")
    private Long primaryCategoryId;

    @Schema(description = "平台二级分类id")
    private Long secondaryCategoryId;

    @Schema(description = "平台三级分类id")
    private Long categoryId;

    /**
     * 参考EsProductSortEnum
     */
    @Schema(description = "排序：1新品,2销量倒序,3销量正序,4商品价格倒序,5商品价格正序,6评论,21spu编码正序, 22spu编码倒序, 23spu状态正序, 24spu状态倒序")
    private Integer sort;

    @Schema(description = "自营店 1：自营店 2：非自营店")
    private Integer selfShop;

    @Schema(description = "商品类型(0普通商品 1拼团 2秒杀 3积分)")
    private Integer spuType;

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

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

    @Schema(description = "所选批次(0-23，一个数字代表一个时间段,每个时间段两小时，共24个)")
    private Integer selectedLot;

    @Schema(description = "秒杀分类id")
    private Integer seckillCategoryId;

    @Schema(description = "是否显示有货")
    private Integer hasStock;

    @Schema(description = "价格区间查询-最低价")
    private Long minPrice;

    @Schema(description = "价格区间查询-最高价")
    private Long maxPrice;

    @Schema(description = "销量区间查询-最低销量")
    private Long minSaleNum;

    @Schema(description = "销量区间查询-最高销量")
    private Long maxSaleNum;

    @Schema(description = "店铺id")
    private Long shopId;

    @Schema(description = "店铺id列表")
    private List<Long> shopIds;

    @Schema(description = "店铺名称")
    private String shopName;

    @Schema(description = "商品状态")
    private Integer spuStatus;

    @Schema(description = "属性值ids(属性之间用^拼接；属性于属性值id用_拼接；多个属性值id间用,拼接)")
    private String attrIds;

    @Schema(description = "spuId列表")
    private List<Long> spuIds;

    @Schema(description = "不为该spuId列表")
    private List<Long> spuIdsExclude;

    @Schema(description = "分组id")
    private Long tagId;

    @Schema(description = "活动id(关联prod_type)")
    private Long activityId;

    @Schema(description = "是否需要活动信息  1:需要  0:不需要")
    private Integer needActivity;

    @Schema(description = "商品编码列表（逗号分隔）")
    private String partyCodes;

    @Schema(description = "商品编码")
    private String partyCode;

    @Schema(description = "商品条形码列表（逗号分隔）")
    private String modelIds;

    @Schema(description = "0.全部  1.销售中  2.已售罄  3.已下架")
    private Integer dataType;

    @Schema(description = "活动时间")
    private Long activityTime;

    @Schema(description = "是否属于分销商品): 否")
    private Boolean distributionSpu;

    @Schema(description = "分销状态(0:商家下架 1:商家上架 2:违规下架 3:平台审核)")
    private Integer distributionState;

    @Schema(description = "奖励方式(0 按比例 1 按固定数值)")
    private Integer awardMode;

    @Schema(description = "不匹配的商品类型(0普通商品 1拼团 2秒杀 3积分 4套餐 5活动)")
    private List<Integer> mustNotProdTypes;

    /**
     * 非该平台一级分类id
     */
    private Long notPrimaryCategoryId;

    /**
     * 是否获取被删除的商品[装修+商品同步es定时任务使用]
     */
    private Integer getDelete;

    /**
     * 非商品模板使用
     */
    @Schema(description = "当前页")
    private Integer pageNum;

    /**
     * 非商品模板使用
     */
    @Schema(description = "每页大小")
    private Integer pageSize;

    /**
     * 0.非用户端搜索，1:用户端搜索
     */
    private Boolean appDisplay;

    /**
     * 响应数据字段数组
     */
    private String[] fetchSource;

    /**
     * 搜索属性信息
     */
    private Map<String, List<String>> attrMap;

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

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

    @Schema(description = "供货价")
    private Double supplyPrice;

    @Schema(description = "供应商id集合")
    private List<Long> supplierIds;

    @Schema(description = "分类ids")
    private List<Long> categoryIds;

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

    @Schema(description = "SPU编码")
    private String spuCode;

    @Schema(description = "SKU编码")
    private String skuCode;

    @Schema(description = "是否库存预警商品 1.是 0.否")
    private Integer stockWarning;

    @Schema(description = "skuIds")
    private List<Long> skuIds;

    @Schema(description = "商家搜索供应商商品/代销商品标识")
    private Boolean shopQuerySupplierSpu;

    @Schema(description = "是否展示预售商品 1.展示定金预售 0.否 2.展示全款预售")
    private Integer canDeposit;

    @Schema(description = "代销商品状态 1:上架 2:部分上架 3:下架 4:部分下架 ")
    private Integer commissionSpuStatus;

    @Schema(description = "供应商名称")
    private String supplierName;

    @Schema(description = "是否筛选掉活动商品，空代表筛选，1代表不筛选")
    private Integer isActive;

    @Schema(description = "是否筛选掉虚拟商品，空代表不筛选，1代表筛选")
    private Integer isVirtual;

    @Schema(description = "是否为赠品活动的赠品")
    private Integer isGiveaway;

    @Schema(description = "是否筛选掉供应商发货的代销商品,空代表不筛选，1代表筛选(去除供应商发货的商品)")
    private Integer isSupplierDelivery;

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

    @Schema(description = "是否过滤掉供应商商品但不过滤导入的代销商品 0不过滤, 1过滤")
    private Integer isSupplierType;
    @Schema(description = "商品来源 0商家 1供应商 为空则不筛选")
    private Integer spuOrigin;

    @Schema(description = "展示商品类型 0.展示指定的商品ids 1.展示瀑布流商品集合")
    private Integer showSpuType;

    /**
     * 装修商品时间排序规则参考,EsTimeRangeEnum
     */
    @Schema(description = "装修商品时间排序规则 0.全部 1.最近一年 2.最近三个月 3.最近一个月 4.最近一个星期")
    private Integer esTimeRange;

    /**
     * 装修商品排序规则参考,EsRenovationProductSortEnum
     */
    @Schema(description = "装修商品排序规则 0.上架时间升序 1.上架时间降序 2.销量倒序 3.销量正序 4.评论数倒序  5.评论数正序")
    private Integer esRenovationSpuSort;

    @Schema(description = "是否为代销商品 0.否 1.是")
    private Integer isCommission;

    private Integer lang;

    @Schema(description = "是否自提")
    private Boolean hasUserPickUp;

    public Boolean getHasUserPickUp() {
        return hasUserPickUp;
    }

    public void setHasUserPickUp(Boolean hasUserPickUp) {
        this.hasUserPickUp = hasUserPickUp;
    }

    public Integer getSpuOrigin() {
        return spuOrigin;
    }

    public void setSpuOrigin(Integer spuOrigin) {
        this.spuOrigin = spuOrigin;
    }
    public Integer getNotSpuMold() {
        return notSpuMold;
    }

    public void setNotSpuMold(Integer notSpuMold) {
        this.notSpuMold = notSpuMold;
    }

    public Integer getLang() {
        return lang;
    }

    public void setLang(Integer lang) {
        this.lang = lang;
    }

    public Integer getShowSpuType() {
        return showSpuType;
    }

    public void setShowSpuType(Integer showSpuType) {
        this.showSpuType = showSpuType;
    }

    public Integer getEsTimeRange() {
        return esTimeRange;
    }

    public void setEsTimeRange(Integer esTimeRange) {
        this.esTimeRange = esTimeRange;
    }

    public Integer getEsRenovationSpuSort() {
        return esRenovationSpuSort;
    }

    public void setEsRenovationSpuSort(Integer esRenovationSpuSort) {
        this.esRenovationSpuSort = esRenovationSpuSort;
    }

    public Integer getIsSupplierType() {
        return isSupplierType;
    }

    public void setIsSupplierType(Integer isSupplierType) {
        this.isSupplierType = isSupplierType;
    }

    public Integer getIsGiveaway() {
        return isGiveaway;
    }

    public void setIsGiveaway(Integer isGiveaway) {
        this.isGiveaway = isGiveaway;
    }

    public Integer getCanDeposit() {
        return canDeposit;
    }

    public void setCanDeposit(Integer canDeposit) {
        this.canDeposit = canDeposit;
    }

    public Integer getSupplierDeliveryType() {
        return supplierDeliveryType;
    }

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

    public String getPartyCode() {
        return partyCode;
    }

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

    public Integer getStockWarning() {
        return stockWarning;
    }

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

    public Boolean getShopQuerySupplierSpu() {
        return shopQuerySupplierSpu;
    }

    public void setShopQuerySupplierSpu(Boolean shopQuerySupplierSpu) {
        this.shopQuerySupplierSpu = shopQuerySupplierSpu;
    }

    public List<Long> getSkuIds() {
        return skuIds;
    }

    public void setSkuIds(List<Long> skuIds) {
        this.skuIds = skuIds;
    }

    public String getSpuCode() {
        return spuCode;
    }

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

    public String getSkuCode() {
        return skuCode;
    }

    public void setSkuCode(String skuCode) {
        this.skuCode = skuCode;
    }

    public Long getSupplierId() {
        return supplierId;
    }

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

    public Integer getIsSupplierDelivery() {
        return isSupplierDelivery;
    }

    public void setIsSupplierDelivery(Integer isSupplierDelivery) {
        this.isSupplierDelivery = isSupplierDelivery;
    }

    public Integer getIsVirtual() {
        return isVirtual;
    }

    public void setIsVirtual(Integer isVirtual) {
        this.isVirtual = isVirtual;
    }

    public Integer getIsActive() {
        return isActive;
    }

    public void setIsActive(Integer isActive) {
        this.isActive = isActive;
    }

    public String getSupplierName() {
        return supplierName;
    }

    public void setSupplierName(String supplierName) {
        this.supplierName = supplierName;
    }

    public List<Long> getCategoryIds() {
        return categoryIds;
    }

    public void setCategoryIds(List<Long> categoryIds) {
        this.categoryIds = categoryIds;
    }

    public Integer getCommissionSpuStatus() {
        return commissionSpuStatus;
    }

    public void setCommissionSpuStatus(Integer commissionSpuStatus) {
        this.commissionSpuStatus = commissionSpuStatus;
    }

    public List<Long> getSupplierIds() {
        return supplierIds;
    }

    public void setSupplierIds(List<Long> supplierIds) {
        this.supplierIds = supplierIds;
    }

    public Double getSupplyPrice() {
        return supplyPrice;
    }

    public void setSupplyPrice(Double supplyPrice) {
        this.supplyPrice = supplyPrice;
    }

    public Integer getShopType() {
        return shopType;
    }

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

    public Integer getSupplierSpuType() {
        return supplierSpuType;
    }

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

    public Integer getDistributionState() {
        return distributionState;
    }

    public void setDistributionState(Integer distributionState) {
        this.distributionState = distributionState;
    }

    public Integer getAwardMode() {
        return awardMode;
    }

    public void setAwardMode(Integer awardMode) {
        this.awardMode = awardMode;
    }

    public List<Integer> getMustNotProdTypes() {
        return mustNotProdTypes;
    }

    public void setMustNotProdTypes(List<Integer> mustNotProdTypes) {
        this.mustNotProdTypes = mustNotProdTypes;
    }

    public String getSpuName() {
        return spuName;
    }

    public void setSpuName(String spuName) {
        this.spuName = spuName;
    }

    public String getShopName() {
        return shopName;
    }

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

    public List<Long> getShopIds() {
        return shopIds;
    }

    public void setShopIds(List<Long> shopIds) {
        this.shopIds = shopIds;
    }

    public Boolean getDistributionSpu() {
        return distributionSpu;
    }

    public void setDistributionSpu(Boolean distributionSpu) {
        this.distributionSpu = distributionSpu;
    }

    public Long getActivityTime() {
        return activityTime;
    }

    public void setActivityTime(Long activityTime) {
        this.activityTime = activityTime;
    }

    public Integer getSeckillCategoryId() {
        return seckillCategoryId;
    }

    public void setSeckillCategoryId(Integer seckillCategoryId) {
        this.seckillCategoryId = seckillCategoryId;
    }

    public Integer getSelectedLot() {
        return selectedLot;
    }

    public void setSelectedLot(Integer selectedLot) {
        this.selectedLot = selectedLot;
    }

    public String getKeyword() {
        return keyword;
    }

    public void setKeyword(String keyword) {
        this.keyword = keyword;
    }

    public String getBrandIds() {
        return brandIds;
    }

    public void setBrandIds(String brandIds) {
        this.brandIds = brandIds;
    }

    public Long getSpuId() {
        return spuId;
    }

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

    public Long getShopPrimaryCategoryId() {
        return shopPrimaryCategoryId;
    }

    public void setShopPrimaryCategoryId(Long shopPrimaryCategoryId) {
        this.shopPrimaryCategoryId = shopPrimaryCategoryId;
    }

    public Long getShopSecondaryCategoryId() {
        return shopSecondaryCategoryId;
    }

    public void setShopSecondaryCategoryId(Long shopSecondaryCategoryId) {
        this.shopSecondaryCategoryId = shopSecondaryCategoryId;
    }

    public Long getPrimaryCategoryId() {
        return primaryCategoryId;
    }

    public void setPrimaryCategoryId(Long primaryCategoryId) {
        this.primaryCategoryId = primaryCategoryId;
    }

    public Long getNotPrimaryCategoryId() {
        return notPrimaryCategoryId;
    }

    public void setNotPrimaryCategoryId(Long notPrimaryCategoryId) {
        this.notPrimaryCategoryId = notPrimaryCategoryId;
    }

    public Long getSecondaryCategoryId() {
        return secondaryCategoryId;
    }

    public void setSecondaryCategoryId(Long secondaryCategoryId) {
        this.secondaryCategoryId = secondaryCategoryId;
    }

    public Long getCategoryId() {
        return categoryId;
    }

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

    public Integer getSort() {
        return sort;
    }

    public void setSort(Integer sort) {
        this.sort = sort;
    }

    public Integer getSelfShop() {
        return selfShop;
    }

    public void setSelfShop(Integer selfShop) {
        this.selfShop = selfShop;
    }

    public Integer getSpuType() {
        return spuType;
    }

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

    public Integer getSpuMold() {
        return spuMold;
    }

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

    public Integer getHasStock() {
        return hasStock;
    }

    public void setHasStock(Integer hasStock) {
        this.hasStock = hasStock;
    }

    public Long getMinPrice() {
        return minPrice;
    }

    public void setMinPrice(Long minPrice) {
        this.minPrice = minPrice;
    }

    public Long getMaxPrice() {
        return maxPrice;
    }

    public void setMaxPrice(Long maxPrice) {
        this.maxPrice = maxPrice;
    }

    public Long getMinSaleNum() {
        return minSaleNum;
    }

    public void setMinSaleNum(Long minSaleNum) {
        this.minSaleNum = minSaleNum;
    }

    public Long getMaxSaleNum() {
        return maxSaleNum;
    }

    public void setMaxSaleNum(Long maxSaleNum) {
        this.maxSaleNum = maxSaleNum;
    }

    public Long getShopId() {
        return shopId;
    }

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

    public Integer getSpuStatus() {
        return spuStatus;
    }

    public void setSpuStatus(Integer spuStatus) {
        this.spuStatus = spuStatus;
    }

    public String getAttrIds() {
        return attrIds;
    }

    public void setAttrIds(String attrIds) {
        this.attrIds = attrIds;
    }

    public List<Long> getSpuIds() {
        return spuIds;
    }

    public void setSpuIds(List<Long> spuIds) {
        this.spuIds = spuIds;
    }

    public List<Long> getSpuIdsExclude() {
        return spuIdsExclude;
    }

    public void setSpuIdsExclude(List<Long> spuIdsExclude) {
        this.spuIdsExclude = spuIdsExclude;
    }

    public Long getTagId() {
        return tagId;
    }

    public void setTagId(Long tagId) {
        this.tagId = tagId;
    }

    public Long getActivityId() {
        return activityId;
    }

    public void setActivityId(Long activityId) {
        this.activityId = activityId;
    }

    public Integer getNeedActivity() {
        return needActivity;
    }

    public void setNeedActivity(Integer needActivity) {
        this.needActivity = needActivity;
    }

    public String getPartyCodes() {
        return partyCodes;
    }

    public void setPartyCodes(String partyCodes) {
        this.partyCodes = partyCodes;
    }

    public String getModelIds() {
        return modelIds;
    }

    public void setModelIds(String modelIds) {
        this.modelIds = modelIds;
    }

    public Integer getDataType() {
        return dataType;
    }

    public void setDataType(Integer dataType) {
        this.dataType = dataType;
    }

    public Map<String, List<String>> getAttrMap() {
        return attrMap;
    }

    public void setAttrMap(Map<String, List<String>> attrMap) {
        this.attrMap = attrMap;
    }

    public Integer getPageNum() {
        return pageNum;
    }

    public void setPageNum(Integer pageNum) {
        this.pageNum = pageNum;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    public Boolean getAppDisplay() {
        return appDisplay;
    }

    public void setAppDisplay(Boolean appDisplay) {
        this.appDisplay = appDisplay;
    }

    public String[] getFetchSource() {
        return fetchSource;
    }

    public void setFetchSource(String[] fetchSource) {
        this.fetchSource = fetchSource;
    }

    public Integer getGetDelete() {
        return getDelete;
    }

    public void setGetDelete(Integer getDelete) {
        this.getDelete = getDelete;
    }

    public Integer getIsCommission() {
        return isCommission;
    }

    public void setIsCommission(Integer isCommission) {
        this.isCommission = isCommission;
    }

    @Override
    public String toString() {
        return "ProductSearchDTO{" +
                "keyword='" + keyword + '\'' +
                ", brandIds='" + brandIds + '\'' +
                ", spuId=" + spuId +
                ", spuName='" + spuName + '\'' +
                ", shopPrimaryCategoryId=" + shopPrimaryCategoryId +
                ", shopSecondaryCategoryId=" + shopSecondaryCategoryId +
                ", primaryCategoryId=" + primaryCategoryId +
                ", secondaryCategoryId=" + secondaryCategoryId +
                ", categoryId=" + categoryId +
                ", sort=" + sort +
                ", selfShop=" + selfShop +
                ", spuType=" + spuType +
                ", spuMold=" + spuMold +
                ", notSpuMold=" + notSpuMold +
                ", selectedLot=" + selectedLot +
                ", seckillCategoryId=" + seckillCategoryId +
                ", hasStock=" + hasStock +
                ", minPrice=" + minPrice +
                ", maxPrice=" + maxPrice +
                ", minSaleNum=" + minSaleNum +
                ", maxSaleNum=" + maxSaleNum +
                ", shopId=" + shopId +
                ", shopIds=" + shopIds +
                ", shopName='" + shopName + '\'' +
                ", spuStatus=" + spuStatus +
                ", attrIds='" + attrIds + '\'' +
                ", spuIds=" + spuIds +
                ", spuIdsExclude=" + spuIdsExclude +
                ", tagId=" + tagId +
                ", activityId=" + activityId +
                ", needActivity=" + needActivity +
                ", partyCodes='" + partyCodes + '\'' +
                ", partyCode='" + partyCode + '\'' +
                ", modelIds='" + modelIds + '\'' +
                ", dataType=" + dataType +
                ", activityTime=" + activityTime +
                ", distributionSpu=" + distributionSpu +
                ", distributionState=" + distributionState +
                ", awardMode=" + awardMode +
                ", mustNotProdTypes=" + mustNotProdTypes +
                ", notPrimaryCategoryId=" + notPrimaryCategoryId +
                ", getDelete=" + getDelete +
                ", pageNum=" + pageNum +
                ", pageSize=" + pageSize +
                ", appDisplay=" + appDisplay +
                ", fetchSource=" + Arrays.toString(fetchSource) +
                ", attrMap=" + attrMap +
                ", supplierSpuType=" + supplierSpuType +
                ", shopType=" + shopType +
                ", supplyPrice=" + supplyPrice +
                ", supplierIds=" + supplierIds +
                ", categoryIds=" + categoryIds +
                ", supplierId=" + supplierId +
                ", spuCode='" + spuCode + '\'' +
                ", skuCode='" + skuCode + '\'' +
                ", stockWarning=" + stockWarning +
                ", skuIds=" + skuIds +
                ", shopQuerySupplierSpu=" + shopQuerySupplierSpu +
                ", canDeposit=" + canDeposit +
                ", commissionSpuStatus=" + commissionSpuStatus +
                ", supplierName='" + supplierName + '\'' +
                ", isActive=" + isActive +
                ", isVirtual=" + isVirtual +
                ", isGiveaway=" + isGiveaway +
                ", isSupplierDelivery=" + isSupplierDelivery +
                ", supplierDeliveryType=" + supplierDeliveryType +
                ", isSupplierType=" + isSupplierType +
                ", spuOrigin=" + spuOrigin +
                ", hasUserPickUp=" + hasUserPickUp +
                ", showSpuType=" + showSpuType +
                ", esTimeRange=" + esTimeRange +
                ", esRenovationSpuSort=" + esRenovationSpuSort +
                ", isCommission=" + isCommission +
                ", lang=" + lang +
                '}';
    }
}
