peng
3 天以前 ebe36b26782231d6d6f40a76c6e3cbb23d1b2714
update 修改商品发布支持预售
11个文件已修改
114 ■■■■■ 已修改文件
consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/elasticsearch/BaseElasticsearchService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSkuDTO.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/goods/entity/enums/GoodsSalesModeEnum.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/goods/mapper/GoodsSkuMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/search/entity/dto/EsGoodsSearchDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consumer/src/main/java/cn/lili/listener/GoodsMessageListener.java
@@ -406,6 +406,8 @@
        }
        goodsIndex.setAuthFlag(goods.getAuthFlag());
        goodsIndex.setMarketEnable(goods.getMarketEnable());
        goodsIndex.setPreSaleBeginDate(goods.getPreSaleBeginDate());
        goodsIndex.setPreSaleEndDate(goods.getPreSaleEndDate());
        this.settingUpGoodsIndexOtherParam(goodsIndex);
        return goodsIndex;
    }
framework/src/main/java/cn/lili/elasticsearch/BaseElasticsearchService.java
@@ -168,6 +168,14 @@
                        "        \"type\": \"date\",\n" +
                        "        \"format\": \"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"\n" +
                        "      },\n" +
                        "      \"preSaleEndDate\": {\n" +
                        "        \"type\": \"date\",\n" +
                        "        \"format\": \"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"\n" +
                        "      },\n" +
                        "      \"preSaleBeginDate\": {\n" +
                        "        \"type\": \"date\",\n" +
                        "        \"format\": \"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis\"\n" +
                        "      },\n" +
                        "      \"categoryPath\": {\n" +
                        "        \"type\": \"text\",\n" +
                        "        \"fielddata\": true,\n" +
framework/src/main/java/cn/lili/modules/goods/entity/dos/Goods.java
@@ -17,17 +17,21 @@
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xkcoding.http.util.StringUtil;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;
/**
@@ -157,7 +161,17 @@
    @ApiModelProperty(value = "商品参数json", hidden = true)
    private String params;
    @ApiModelProperty(value = "预售结束时间")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date preSaleEndDate;
    @ApiModelProperty(value = "预售开始时间")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date preSaleBeginDate;
    @ApiModelProperty(value = "抽成比例")
    private BigDecimal commission;
    public Goods() {
    }
@@ -175,6 +189,9 @@
        this.mobileIntro = goodsOperationDTO.getMobileIntro();
        this.goodsVideo = goodsOperationDTO.getGoodsVideo();
        this.price = goodsOperationDTO.getPrice();
        this.preSaleEndDate = goodsOperationDTO.getPreSaleEndDate();
        this.preSaleBeginDate = goodsOperationDTO.getPreSaleBeginDate();
        this.commission =  goodsOperationDTO.getCommission();
        if (goodsOperationDTO.getGoodsParamsDTOList() != null && goodsOperationDTO.getGoodsParamsDTOList().isEmpty()) {
            this.params = JSONUtil.toJsonStr(goodsOperationDTO.getGoodsParamsDTOList());
        }
framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsOperationDTO.java
@@ -3,17 +3,17 @@
import cn.lili.common.validation.EnumValue;
import cn.lili.modules.goods.entity.enums.GoodsSalesModeEnum;
import cn.lili.modules.goods.entity.enums.GoodsTypeEnum;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.Valid;
import javax.validation.constraints.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.math.BigDecimal;
import java.util.*;
/**
 * 商品操作DTO
@@ -141,6 +141,22 @@
    @ApiModelProperty(value = "浏览权限")
    private String browsePermissions;
    @ApiModelProperty(value = "预售结束时间")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date preSaleEndDate;
    @ApiModelProperty(value = "预售开始时间")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date preSaleBeginDate;
    @ApiModelProperty(value = "抽成比例")
    @DecimalMax(value = "100",message = "抽成比例必须小于100")
    @DecimalMin(value = "0",message = "抽成比例必须大于0")
    private BigDecimal commission;
    public String getGoodsName() {
        //对商品对名称做一个极限处理。这里没有用xss过滤是因为xss过滤为全局过滤,影响很大。
        // 业务中,全局代码中只有商品名称不能拥有英文逗号,是由于商品名称存在一个数据库联合查询,结果要根据逗号分组
framework/src/main/java/cn/lili/modules/goods/entity/dto/GoodsSkuDTO.java
@@ -1,11 +1,15 @@
package cn.lili.modules.goods.entity.dto;
import cn.lili.modules.goods.entity.dos.GoodsSku;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
 * @author paulG
@@ -22,4 +26,16 @@
    @ApiModelProperty(value = "商品参数json")
    private String params;
    @ApiModelProperty(value = "预售结束时间")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date preSaleEndDate;
    @ApiModelProperty(value = "预售开始时间")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date preSaleBeginDate;
}
framework/src/main/java/cn/lili/modules/goods/entity/enums/GoodsSalesModeEnum.java
@@ -9,6 +9,7 @@
public enum GoodsSalesModeEnum {
    RETAIL("零售"),
    PRESALE("预售"),
    WHOLESALE("批发");
    private final String description;
framework/src/main/java/cn/lili/modules/goods/mapper/GoodsSkuMapper.java
@@ -114,7 +114,7 @@
     * @param queryWrapper 查询条件
     * @return 售后VO分页
     */
    @Select("SELECT *,g.params as params FROM li_goods_sku gs inner join li_goods g on gs.goods_id = g.id ${ew.customSqlSegment}")
    @Select("SELECT *,g.params as params,g.pre_sale_end_date,g.pre_sale_begin_date FROM li_goods_sku gs inner join li_goods g on gs.goods_id = g.id ${ew.customSqlSegment}")
    IPage<GoodsSkuDTO> queryByParams(IPage<GoodsSkuDTO> page, @Param(Constants.WRAPPER) Wrapper<GoodsSkuDTO> queryWrapper);
    @Select("SELECT id as sku_id, quantity, goods_id,simple_specs,sn,goods_name FROM li_goods_sku ${ew.customSqlSegment}")
framework/src/main/java/cn/lili/modules/search/entity/dos/EsGoodsIndex.java
@@ -6,6 +6,8 @@
import cn.lili.modules.goods.entity.dos.GoodsSku;
import cn.lili.modules.goods.entity.dto.GoodsParamsDTO;
import cn.lili.modules.promotion.tools.PromotionTools;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -15,6 +17,7 @@
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.ArrayList;
@@ -271,6 +274,18 @@
    @Field(type = FieldType.Nested)
    private List<EsGoodsAttribute> attrList;
    @ApiModelProperty(value = "预售结束时间")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Field(type = FieldType.Date)
    private Date preSaleEndDate;
    @ApiModelProperty(value = "预售开始时间")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @Field(type = FieldType.Date)
    private Date preSaleBeginDate;
    /**
     * 商品促销活动集合
     * key 为 促销活动类型
framework/src/main/java/cn/lili/modules/search/entity/dto/EsGoodsSearchDTO.java
@@ -79,6 +79,9 @@
    @ApiModelProperty("是否开启商品过滤")
    private Boolean canFilter;
    @ApiModelProperty("是否需要开启过滤预售商品")
    private Boolean needFilterPre;
    //过滤搜索关键字
framework/src/main/java/cn/lili/modules/search/serviceimpl/EsGoodsSearchServiceImpl.java
@@ -48,6 +48,10 @@
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.stream.Collectors;
@@ -93,7 +97,7 @@
            cache.incrementScore(CachePrefix.HOT_WORD.getPrefix(), searchDTO.getKeyword());
        }
        NativeSearchQueryBuilder searchQueryBuilder = createSearchQueryBuilder(searchDTO, pageVo);
        if (Objects.nonNull(searchDTO.getCanFilter())&&searchDTO.getCanFilter()){
        if (Objects.nonNull(searchDTO.getCanFilter()) && searchDTO.getCanFilter()) {
            searchQueryBuilder.withCollapseField("goodsId.keyword");
        }
        NativeSearchQuery searchQuery = searchQueryBuilder.build();
@@ -557,6 +561,23 @@
        if (CharSequenceUtil.isNotEmpty(searchDTO.getPromotionsId()) && CharSequenceUtil.isNotEmpty(searchDTO.getPromotionType())) {
            filterBuilder.must(QueryBuilders.wildcardQuery("promotionMapJson", "*" + searchDTO.getPromotionType() + "-" + searchDTO.getPromotionsId() + "*"));
        }
        if (Objects.nonNull(searchDTO.getNeedFilterPre()) && searchDTO.getNeedFilterPre()) {
            // 转换为当天 00:00:00 的时间戳(毫秒)
            long time = LocalDate.now().atStartOfDay(ZoneId.systemDefault())
                    .toInstant()
                    .toEpochMilli();
            // 条件2:预售结束时间 >= 当前时间 OR 结束时间为空
            filterBuilder.must(QueryBuilders.boolQuery()
                    .should(QueryBuilders.rangeQuery("preSaleEndDate").gte(time))
                    .should(QueryBuilders.boolQuery()
                            .mustNot(QueryBuilders.existsQuery("preSaleEndDate"))));
            // 条件1:预售开始时间 <= 当前时间 OR 开始时间为空
            filterBuilder.must(QueryBuilders.boolQuery()
                    .should(QueryBuilders.rangeQuery("preSaleBeginDate").lte(time))
                    .should(QueryBuilders.boolQuery()
                            .mustNot(QueryBuilders.existsQuery("preSaleBeginDate"))));
        }
        //价格区间判定
        if (CharSequenceUtil.isNotEmpty(searchDTO.getPrice())) {
            String[] prices = searchDTO.getPrice().split("_");
seller-api/src/main/java/cn/lili/controller/goods/GoodsStoreController.java
@@ -27,6 +27,7 @@
import cn.lili.modules.store.entity.dos.StoreDetail;
import cn.lili.modules.store.service.StoreDetailService;
import cn.lili.utils.COSUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -148,6 +149,7 @@
    @ApiOperation(value = "新增商品")
    @PostMapping(value = "/create", consumes = "application/json", produces = "application/json")
    public ResultMessage<GoodsOperationDTO> save(@Valid @RequestBody GoodsOperationDTO goodsOperationDTO) {
        System.err.println(JSONObject.toJSONString(goodsOperationDTO));
        goodsService.addGoods(goodsOperationDTO);
        return ResultUtil.success();
    }
@@ -155,6 +157,7 @@
    @ApiOperation(value = "修改商品")
    @PutMapping(value = "/update/{goodsId}", consumes = "application/json", produces = "application/json")
    public ResultMessage<GoodsOperationDTO> update(@Valid @RequestBody GoodsOperationDTO goodsOperationDTO, @PathVariable String goodsId) {
        System.err.println(JSONObject.toJSONString(goodsOperationDTO));
        goodsService.editGoods(goodsOperationDTO, goodsId);
        return ResultUtil.success();
    }