liujunchi пре 3 година
родитељ
комит
e5a06d3e00
14 измењених фајлова са 0 додато и 1025 уклоњено
  1. 0 45
      cooleshow-mall/mall-search/pom.xml
  2. 0 19
      cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/MallSearchApplication.java
  3. 0 35
      cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/config/ResourceServerConfig.java
  4. 0 51
      cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/config/WebMvcConfig.java
  5. 0 107
      cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/controller/EsProductController.java
  6. 0 17
      cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/dao/EsProductDao.java
  7. 0 191
      cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/domain/EsProduct.java
  8. 0 66
      cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/domain/EsProductAttributeValue.java
  9. 0 70
      cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/domain/EsProductRelatedInfo.java
  10. 0 23
      cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/repository/EsProductRepository.java
  11. 0 53
      cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/service/EsProductService.java
  12. 0 286
      cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/service/impl/EsProductServiceImpl.java
  13. 0 16
      cooleshow-mall/mall-search/src/main/resources/bootstrap-dev.properties
  14. 0 46
      cooleshow-mall/mall-search/src/main/resources/config/mybatis/EsProductDao.xml

+ 0 - 45
cooleshow-mall/mall-search/pom.xml

@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-    <modelVersion>4.0.0</modelVersion>
-
-    <artifactId>mall-search</artifactId>
-    <version>1.0</version>
-    <packaging>jar</packaging>
-
-    <name>mall-search</name>
-    <description>mall-search project for mall</description>
-
-    <parent>
-        <groupId>com.yonge.cooleshow</groupId>
-        <artifactId>cooleshow-mall</artifactId>
-        <version>1.0</version>
-    </parent>
-
-    <dependencies>
-        <dependency>
-            <groupId>com.yonge.cooleshow</groupId>
-            <artifactId>mall-mbg</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>com.spring4all</groupId>
-            <artifactId>swagger-spring-boot-starter</artifactId>
-        </dependency>
-
-    </dependencies>
-
-    <build>
-        <plugins>
-            <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
-            </plugin>
-        </plugins>
-    </build>
-
-</project>

+ 0 - 19
cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/MallSearchApplication.java

@@ -1,19 +0,0 @@
-package com.yonge.cooleshow.search;
-
-import com.spring4all.swagger.EnableSwagger2Doc;
-import org.mybatis.spring.annotation.MapperScan;
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
-
-@SpringBootApplication
-@MapperScan({"com.yonge.cooleshow.mbg.mapper", "com.yonge.cooleshow.search.dao"})
-@ComponentScan(basePackages = {"com.yonge.cooleshow.search", "com.yonge.cooleshow.auth", "com.yonge.cooleshow.mbg", "com.yonge.cooleshow.mall.common", "com.yonge.cooleshow.common" })
-@EnableSwagger2Doc
-public class MallSearchApplication {
-
-    public static void main(String[] args) {
-        SpringApplication.run(MallSearchApplication.class, args);
-    }
-}

+ 0 - 35
cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/config/ResourceServerConfig.java

@@ -1,35 +0,0 @@
-package com.yonge.cooleshow.search.config;
-
-import com.yonge.cooleshow.common.security.BaseAccessDeniedHandler;
-import com.yonge.cooleshow.common.security.BaseAuthenticationEntryPoint;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
-import org.springframework.security.config.annotation.web.builders.HttpSecurity;
-import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
-import org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter;
-import org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer;
-
-@Configuration
-@EnableResourceServer
-@EnableGlobalMethodSecurity(prePostEnabled = true)
-public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
-
-    @Autowired
-    private BaseAccessDeniedHandler baseAccessDeniedHandler;
-
-    @Autowired
-    private BaseAuthenticationEntryPoint baseAuthenticationEntryPoint;
-
-    @Override
-    public void configure(HttpSecurity http) throws Exception {
-        http.csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and()
-                .authorizeRequests().antMatchers("/wechat/*","/v2/api-docs", "/code/*").permitAll().anyRequest().permitAll().and().httpBasic();
-    }
-
-    @Override
-    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
-        resources.authenticationEntryPoint(baseAuthenticationEntryPoint).accessDeniedHandler(baseAccessDeniedHandler);
-    }
-
-}

+ 0 - 51
cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/config/WebMvcConfig.java

@@ -1,51 +0,0 @@
-package com.yonge.cooleshow.search.config;
-
-import com.yonge.cooleshow.common.config.EnumConverterFactory;
-import com.yonge.cooleshow.common.config.LocalFastJsonHttpMessageConverter;
-import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.format.FormatterRegistry;
-import org.springframework.http.MediaType;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-import java.util.ArrayList;
-import java.util.List;
-
-@Configuration
-public class WebMvcConfig implements WebMvcConfigurer {
-
-
-	/**
-	 * 枚举类的转换器 addConverterFactory
-	 */
-	@Override
-	public void addFormatters(FormatterRegistry registry) {
-		registry.addConverterFactory(new EnumConverterFactory());
-	}
-
-	@Override
-	public void addInterceptors(InterceptorRegistry registry) {
-		// addPathPatterns 用于添加拦截规则, 这里假设拦截 /url 后面的全部链接
-		List<String> includePathPatterns = new ArrayList<String>();
-		includePathPatterns.add("/**");
-
-		// excludePathPatterns 用户排除拦截
-		List<String> excludePathPatterns = new ArrayList<String>();
-		excludePathPatterns.add("/login");
-
-		// registry.addInterceptor(mdcInterceptor).addPathPatterns(includePathPatterns).excludePathPatterns(excludePathPatterns);
-
-//		registry.addInterceptor(operationLogInterceptor).addPathPatterns("/**").excludePathPatterns("/login");
-	}
-
-	@Bean
-	public HttpMessageConverters fastJsonHttpMessageConverters() {
-		LocalFastJsonHttpMessageConverter converter = new LocalFastJsonHttpMessageConverter();
-		List<MediaType> fastMediaTypes = new ArrayList<MediaType>();
-		fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
-		converter.setSupportedMediaTypes(fastMediaTypes);
-		return new HttpMessageConverters(converter);
-	}
-}

+ 0 - 107
cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/controller/EsProductController.java

@@ -1,107 +0,0 @@
-package com.yonge.cooleshow.search.controller;
-
-import com.yonge.cooleshow.mall.common.api.CommonPage;
-import com.yonge.cooleshow.mall.common.api.CommonResult;
-import com.yonge.cooleshow.search.domain.EsProduct;
-import com.yonge.cooleshow.search.domain.EsProductRelatedInfo;
-import com.yonge.cooleshow.search.service.EsProductService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 搜索商品管理Controller
- * Created by macro on 2018/6/19.
- */
-@Controller
-@Api(tags = "EsProductController", description = "搜索商品管理")
-@RequestMapping("/esProduct")
-public class EsProductController {
-    @Autowired
-    private EsProductService esProductService;
-
-    @ApiOperation(value = "导入所有数据库中商品到ES")
-    @RequestMapping(value = "/importAll", method = RequestMethod.POST)
-    @ResponseBody
-    public CommonResult<Integer> importAllList() {
-        int count = esProductService.importAll();
-        return CommonResult.success(count);
-    }
-
-    @ApiOperation(value = "根据id删除商品")
-    @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET)
-    @ResponseBody
-    public CommonResult<Object> delete(@PathVariable Long id) {
-        esProductService.delete(id);
-        return CommonResult.success(null);
-    }
-
-    @ApiOperation(value = "根据id批量删除商品")
-    @RequestMapping(value = "/delete/batch", method = RequestMethod.POST)
-    @ResponseBody
-    public CommonResult<Object> delete(@RequestParam("ids") List<Long> ids) {
-        esProductService.delete(ids);
-        return CommonResult.success(null);
-    }
-
-    @ApiOperation(value = "根据id创建商品")
-    @RequestMapping(value = "/create/{id}", method = RequestMethod.POST)
-    @ResponseBody
-    public CommonResult<EsProduct> create(@PathVariable Long id) {
-        EsProduct esProduct = esProductService.create(id);
-        if (esProduct != null) {
-            return CommonResult.success(esProduct);
-        } else {
-            return CommonResult.failed();
-        }
-    }
-
-    @ApiOperation(value = "简单搜索")
-    @RequestMapping(value = "/search/simple", method = RequestMethod.GET)
-    @ResponseBody
-    public CommonResult<CommonPage<EsProduct>> search(@RequestParam(required = false) String keyword,
-                                                      @RequestParam(required = false, defaultValue = "0") Integer pageNum,
-                                                      @RequestParam(required = false, defaultValue = "5") Integer pageSize) {
-        Page<EsProduct> esProductPage = esProductService.search(keyword, pageNum, pageSize);
-        return CommonResult.success(CommonPage.restPage(esProductPage));
-    }
-
-    @ApiOperation(value = "综合搜索、筛选、排序")
-    @ApiImplicitParam(name = "sort", value = "排序字段:0->按相关度;1->按新品;2->按销量;3->价格从低到高;4->价格从高到低",
-            defaultValue = "0", allowableValues = "0,1,2,3,4", paramType = "query", dataType = "integer")
-    @RequestMapping(value = "/search", method = RequestMethod.GET)
-    @ResponseBody
-    public CommonResult<CommonPage<EsProduct>> search(@RequestParam(required = false) String keyword,
-                                                      @RequestParam(required = false) Long brandId,
-                                                      @RequestParam(required = false) Long productCategoryId,
-                                                      @RequestParam(required = false, defaultValue = "0") Integer pageNum,
-                                                      @RequestParam(required = false, defaultValue = "5") Integer pageSize,
-                                                      @RequestParam(required = false, defaultValue = "0") Integer sort) {
-        Page<EsProduct> esProductPage = esProductService.search(keyword, brandId, productCategoryId, pageNum, pageSize, sort);
-        return CommonResult.success(CommonPage.restPage(esProductPage));
-    }
-
-    @ApiOperation(value = "根据商品id推荐商品")
-    @RequestMapping(value = "/recommend/{id}", method = RequestMethod.GET)
-    @ResponseBody
-    public CommonResult<CommonPage<EsProduct>> recommend(@PathVariable Long id,
-                                                         @RequestParam(required = false, defaultValue = "0") Integer pageNum,
-                                                         @RequestParam(required = false, defaultValue = "5") Integer pageSize) {
-        Page<EsProduct> esProductPage = esProductService.recommend(id, pageNum, pageSize);
-        return CommonResult.success(CommonPage.restPage(esProductPage));
-    }
-
-    @ApiOperation(value = "获取搜索的相关品牌、分类及筛选属性")
-    @RequestMapping(value = "/search/relate", method = RequestMethod.GET)
-    @ResponseBody
-    public CommonResult<EsProductRelatedInfo> searchRelatedInfo(@RequestParam(required = false) String keyword) {
-        EsProductRelatedInfo productRelatedInfo = esProductService.searchRelatedInfo(keyword);
-        return CommonResult.success(productRelatedInfo);
-    }
-}

+ 0 - 17
cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/dao/EsProductDao.java

@@ -1,17 +0,0 @@
-package com.yonge.cooleshow.search.dao;
-
-import com.yonge.cooleshow.search.domain.EsProduct;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
-
-/**
- * 搜索商品管理自定义Dao
- * Created by macro on 2018/6/19.
- */
-public interface EsProductDao {
-    /**
-     * 获取指定ID的搜索商品
-     */
-    List<EsProduct> getAllEsProductList(@Param("id") Long id);
-}

+ 0 - 191
cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/domain/EsProduct.java

@@ -1,191 +0,0 @@
-package com.yonge.cooleshow.search.domain;
-
-
-import org.springframework.data.annotation.Id;
-import org.springframework.data.elasticsearch.annotations.Document;
-import org.springframework.data.elasticsearch.annotations.Field;
-import org.springframework.data.elasticsearch.annotations.FieldType;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.List;
-
-/**
- * 搜索商品的信息
- * Created by macro on 2018/6/19.
- */
-
-@Document(indexName = "pms", type = "product",shards = 1,replicas = 0)
-public class EsProduct implements Serializable {
-    private static final long serialVersionUID = -1L;
-    @Id
-    private Long id;
-    @Field(type = FieldType.Keyword)
-    private String productSn;
-    private Long brandId;
-    @Field(type = FieldType.Keyword)
-    private String brandName;
-    private Long productCategoryId;
-    @Field(type = FieldType.Keyword)
-    private String productCategoryName;
-    private String pic;
-    @Field(analyzer = "ik_max_word",type = FieldType.Text,fielddata = true)
-    private String name;
-    @Field(analyzer = "ik_max_word",type = FieldType.Text,fielddata = true)
-    private String subTitle;
-    @Field(analyzer = "ik_max_word",type = FieldType.Text,fielddata = true)
-    private String keywords;
-    private BigDecimal price;
-    private Integer sale;
-    private Integer newStatus;
-    private Integer recommandStatus;
-    private Integer stock;
-    private Integer promotionType;
-    private Integer sort;
-    @Field(type =FieldType.Nested)
-    private List<EsProductAttributeValue> attrValueList;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getProductSn() {
-        return productSn;
-    }
-
-    public void setProductSn(String productSn) {
-        this.productSn = productSn;
-    }
-
-    public Long getBrandId() {
-        return brandId;
-    }
-
-    public void setBrandId(Long brandId) {
-        this.brandId = brandId;
-    }
-
-    public String getBrandName() {
-        return brandName;
-    }
-
-    public void setBrandName(String brandName) {
-        this.brandName = brandName;
-    }
-
-    public Long getProductCategoryId() {
-        return productCategoryId;
-    }
-
-    public void setProductCategoryId(Long productCategoryId) {
-        this.productCategoryId = productCategoryId;
-    }
-
-    public String getProductCategoryName() {
-        return productCategoryName;
-    }
-
-    public void setProductCategoryName(String productCategoryName) {
-        this.productCategoryName = productCategoryName;
-    }
-
-    public String getPic() {
-        return pic;
-    }
-
-    public void setPic(String pic) {
-        this.pic = pic;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getSubTitle() {
-        return subTitle;
-    }
-
-    public void setSubTitle(String subTitle) {
-        this.subTitle = subTitle;
-    }
-
-    public String getKeywords() {
-        return keywords;
-    }
-
-    public void setKeywords(String keywords) {
-        this.keywords = keywords;
-    }
-
-    public BigDecimal getPrice() {
-        return price;
-    }
-
-    public void setPrice(BigDecimal price) {
-        this.price = price;
-    }
-
-    public Integer getSale() {
-        return sale;
-    }
-
-    public void setSale(Integer sale) {
-        this.sale = sale;
-    }
-
-    public Integer getNewStatus() {
-        return newStatus;
-    }
-
-    public void setNewStatus(Integer newStatus) {
-        this.newStatus = newStatus;
-    }
-
-    public Integer getRecommandStatus() {
-        return recommandStatus;
-    }
-
-    public void setRecommandStatus(Integer recommandStatus) {
-        this.recommandStatus = recommandStatus;
-    }
-
-    public Integer getStock() {
-        return stock;
-    }
-
-    public void setStock(Integer stock) {
-        this.stock = stock;
-    }
-
-    public Integer getPromotionType() {
-        return promotionType;
-    }
-
-    public void setPromotionType(Integer promotionType) {
-        this.promotionType = promotionType;
-    }
-
-    public Integer getSort() {
-        return sort;
-    }
-
-    public void setSort(Integer sort) {
-        this.sort = sort;
-    }
-
-    public List<EsProductAttributeValue> getAttrValueList() {
-        return attrValueList;
-    }
-
-    public void setAttrValueList(List<EsProductAttributeValue> attrValueList) {
-        this.attrValueList = attrValueList;
-    }
-}

+ 0 - 66
cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/domain/EsProductAttributeValue.java

@@ -1,66 +0,0 @@
-package com.yonge.cooleshow.search.domain;
-
-
-import org.springframework.data.elasticsearch.annotations.Field;
-import org.springframework.data.elasticsearch.annotations.FieldType;
-
-import java.io.Serializable;
-
-/**
- * 搜索商品的属性信息
- * Created by macro on 2018/6/27.
- */
-
-public class EsProductAttributeValue implements Serializable {
-    private static final long serialVersionUID = 1L;
-    private Long id;
-    private Long productAttributeId;
-    //属性值
-    @Field(type = FieldType.Keyword)
-    private String value;
-    //属性参数:0->规格;1->参数
-    private Integer type;
-    //属性名称
-    @Field(type=FieldType.Keyword)
-    private String name;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getProductAttributeId() {
-        return productAttributeId;
-    }
-
-    public void setProductAttributeId(Long productAttributeId) {
-        this.productAttributeId = productAttributeId;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public Integer getType() {
-        return type;
-    }
-
-    public void setType(Integer type) {
-        this.type = type;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-}

+ 0 - 70
cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/domain/EsProductRelatedInfo.java

@@ -1,70 +0,0 @@
-package com.yonge.cooleshow.search.domain;
-
-
-import java.util.List;
-
-/**
- * 搜索商品的关联信息,包括品牌名称,分类名称及属性
- * Created by macro on 2018/6/27.
- */
-
-public class EsProductRelatedInfo {
-    private List<String> brandNames;
-    private List<String> productCategoryNames;
-    private List<ProductAttr> productAttrs;
-
-
-    public static class ProductAttr {
-        private Long attrId;
-        private String attrName;
-        private List<String> attrValues;
-
-        public Long getAttrId() {
-            return attrId;
-        }
-
-        public void setAttrId(Long attrId) {
-            this.attrId = attrId;
-        }
-
-        public String getAttrName() {
-            return attrName;
-        }
-
-        public void setAttrName(String attrName) {
-            this.attrName = attrName;
-        }
-
-        public List<String> getAttrValues() {
-            return attrValues;
-        }
-
-        public void setAttrValues(List<String> attrValues) {
-            this.attrValues = attrValues;
-        }
-    }
-
-    public List<String> getBrandNames() {
-        return brandNames;
-    }
-
-    public void setBrandNames(List<String> brandNames) {
-        this.brandNames = brandNames;
-    }
-
-    public List<String> getProductCategoryNames() {
-        return productCategoryNames;
-    }
-
-    public void setProductCategoryNames(List<String> productCategoryNames) {
-        this.productCategoryNames = productCategoryNames;
-    }
-
-    public List<ProductAttr> getProductAttrs() {
-        return productAttrs;
-    }
-
-    public void setProductAttrs(List<ProductAttr> productAttrs) {
-        this.productAttrs = productAttrs;
-    }
-}

+ 0 - 23
cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/repository/EsProductRepository.java

@@ -1,23 +0,0 @@
-package com.yonge.cooleshow.search.repository;
-
-import com.yonge.cooleshow.search.domain.EsProduct;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
-
-/**
- * 搜索商品ES操作类
- * Created by macro on 2018/6/19.
- */
-public interface EsProductRepository extends ElasticsearchRepository<EsProduct, Long> {
-    /**
-     * 搜索查询
-     *
-     * @param name              商品名称
-     * @param subTitle          商品标题
-     * @param keywords          商品关键字
-     * @param page              分页信息
-     */
-    Page<EsProduct> findByNameOrSubTitleOrKeywords(String name, String subTitle, String keywords,Pageable page);
-
-}

+ 0 - 53
cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/service/EsProductService.java

@@ -1,53 +0,0 @@
-package com.yonge.cooleshow.search.service;
-
-import com.yonge.cooleshow.search.domain.EsProduct;
-import com.yonge.cooleshow.search.domain.EsProductRelatedInfo;
-import org.springframework.data.domain.Page;
-
-import java.util.List;
-
-/**
- * 搜索商品管理Service
- * Created by macro on 2018/6/19.
- */
-public interface EsProductService {
-    /**
-     * 从数据库中导入所有商品到ES
-     */
-    int importAll();
-
-    /**
-     * 根据id删除商品
-     */
-    void delete(Long id);
-
-    /**
-     * 根据id创建商品
-     */
-    EsProduct create(Long id);
-
-    /**
-     * 批量删除商品
-     */
-    void delete(List<Long> ids);
-
-    /**
-     * 根据关键字搜索名称或者副标题
-     */
-    Page<EsProduct> search(String keyword, Integer pageNum, Integer pageSize);
-
-    /**
-     * 根据关键字搜索名称或者副标题复合查询
-     */
-    Page<EsProduct> search(String keyword, Long brandId, Long productCategoryId, Integer pageNum, Integer pageSize,Integer sort);
-
-    /**
-     * 根据商品id推荐相关商品
-     */
-    Page<EsProduct> recommend(Long id, Integer pageNum, Integer pageSize);
-
-    /**
-     * 获取搜索词相关品牌、分类、属性
-     */
-    EsProductRelatedInfo searchRelatedInfo(String keyword);
-}

+ 0 - 286
cooleshow-mall/mall-search/src/main/java/com/yonge/cooleshow/search/service/impl/EsProductServiceImpl.java

@@ -1,286 +0,0 @@
-package com.yonge.cooleshow.search.service.impl;
-
-import com.yonge.cooleshow.search.dao.EsProductDao;
-import com.yonge.cooleshow.search.domain.EsProduct;
-import com.yonge.cooleshow.search.domain.EsProductRelatedInfo;
-import com.yonge.cooleshow.search.repository.EsProductRepository;
-import com.yonge.cooleshow.search.service.EsProductService;
-import org.elasticsearch.common.lucene.search.function.FunctionScoreQuery;
-import org.elasticsearch.index.query.BoolQueryBuilder;
-import org.elasticsearch.index.query.QueryBuilders;
-import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;
-import org.elasticsearch.index.query.functionscore.ScoreFunctionBuilders;
-import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
-import org.elasticsearch.search.aggregations.Aggregation;
-import org.elasticsearch.search.aggregations.AggregationBuilders;
-import org.elasticsearch.search.aggregations.bucket.filter.ParsedFilter;
-import org.elasticsearch.search.aggregations.bucket.nested.ParsedNested;
-import org.elasticsearch.search.aggregations.bucket.terms.ParsedLongTerms;
-import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms;
-import org.elasticsearch.search.aggregations.bucket.terms.Terms;
-import org.elasticsearch.search.sort.SortBuilders;
-import org.elasticsearch.search.sort.SortOrder;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
-import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
-import org.springframework.data.elasticsearch.core.query.NativeSearchQuery;
-import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
-import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
-import org.springframework.util.StringUtils;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-
-/**
- * 搜索商品管理Service实现类
- * Created by macro on 2018/6/19.
- */
-@Service
-public class EsProductServiceImpl implements EsProductService {
-    private static final Logger LOGGER = LoggerFactory.getLogger(EsProductServiceImpl.class);
-    @Autowired
-    private EsProductDao productDao;
-    @Autowired
-    private EsProductRepository productRepository;
-
-    @Autowired
-    private ElasticsearchTemplate elasticsearchTemplate;
-    @Override
-    public int importAll() {
-        List<EsProduct> esProductList = productDao.getAllEsProductList(null);
-        Iterable<EsProduct> esProductIterable = productRepository.saveAll(esProductList);
-        Iterator<EsProduct> iterator = esProductIterable.iterator();
-        int result = 0;
-        while (iterator.hasNext()) {
-            result++;
-            iterator.next();
-        }
-        return result;
-    }
-
-    @Override
-    public void delete(Long id) {
-        productRepository.deleteById(id);
-    }
-
-    @Override
-    public EsProduct create(Long id) {
-        EsProduct result = null;
-        List<EsProduct> esProductList = productDao.getAllEsProductList(id);
-        if (esProductList.size() > 0) {
-            EsProduct esProduct = esProductList.get(0);
-            result = productRepository.save(esProduct);
-        }
-        return result;
-    }
-
-    @Override
-    public void delete(List<Long> ids) {
-        if (!CollectionUtils.isEmpty(ids)) {
-            List<EsProduct> esProductList = new ArrayList<>();
-            for (Long id : ids) {
-                EsProduct esProduct = new EsProduct();
-                esProduct.setId(id);
-                esProductList.add(esProduct);
-            }
-            productRepository.deleteAll(esProductList);
-        }
-    }
-
-    @Override
-    public Page<EsProduct> search(String keyword, Integer pageNum, Integer pageSize) {
-        Pageable pageable = PageRequest.of(pageNum, pageSize);
-        return productRepository.findByNameOrSubTitleOrKeywords(keyword, keyword, keyword, pageable);
-    }
-
-    @Override
-    public Page<EsProduct> search(String keyword, Long brandId, Long productCategoryId, Integer pageNum, Integer pageSize,Integer sort) {
-        Pageable pageable = PageRequest.of(pageNum, pageSize);
-        NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
-        //分页
-        nativeSearchQueryBuilder.withPageable(pageable);
-        //过滤
-        if (brandId != null || productCategoryId != null) {
-            BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
-            if (brandId != null) {
-                boolQueryBuilder.must(QueryBuilders.termQuery("brandId", brandId));
-            }
-            if (productCategoryId != null) {
-                boolQueryBuilder.must(QueryBuilders.termQuery("productCategoryId", productCategoryId));
-            }
-            nativeSearchQueryBuilder.withFilter(boolQueryBuilder);
-        }
-        //搜索
-        if (StringUtils.isEmpty(keyword)) {
-            nativeSearchQueryBuilder.withQuery(QueryBuilders.matchAllQuery());
-        } else {
-            List<FunctionScoreQueryBuilder.FilterFunctionBuilder> filterFunctionBuilders = new ArrayList<>();
-            filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("name", keyword),
-                    ScoreFunctionBuilders.weightFactorFunction(10)));
-            filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("subTitle", keyword),
-                    ScoreFunctionBuilders.weightFactorFunction(5)));
-            filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("keywords", keyword),
-                    ScoreFunctionBuilders.weightFactorFunction(2)));
-            FunctionScoreQueryBuilder.FilterFunctionBuilder[] builders = new FunctionScoreQueryBuilder.FilterFunctionBuilder[filterFunctionBuilders.size()];
-            filterFunctionBuilders.toArray(builders);
-            FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(builders)
-                    .scoreMode(FunctionScoreQuery.ScoreMode.SUM)
-                    .setMinScore(2);
-            nativeSearchQueryBuilder.withQuery(functionScoreQueryBuilder);
-        }
-        //排序
-        if(sort==1){
-            //按新品从新到旧
-            nativeSearchQueryBuilder.withSort(SortBuilders.fieldSort("id").order(SortOrder.DESC));
-        }else if(sort==2){
-            //按销量从高到低
-            nativeSearchQueryBuilder.withSort(SortBuilders.fieldSort("sale").order(SortOrder.DESC));
-        }else if(sort==3){
-            //按价格从低到高
-            nativeSearchQueryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.ASC));
-        }else if(sort==4){
-            //按价格从高到低
-            nativeSearchQueryBuilder.withSort(SortBuilders.fieldSort("price").order(SortOrder.DESC));
-        }else{
-            //按相关度
-            nativeSearchQueryBuilder.withSort(SortBuilders.scoreSort().order(SortOrder.DESC));
-        }
-        nativeSearchQueryBuilder.withSort(SortBuilders.scoreSort().order(SortOrder.DESC));
-        NativeSearchQuery searchQuery = nativeSearchQueryBuilder.build();
-        LOGGER.info("DSL:{}", searchQuery.getQuery().toString());
-        searchQuery.setPageable(pageable);
-        Page<EsProduct> searchHits = productRepository.search(searchQuery);
-        if(searchHits.getTotalElements()<=0){
-            return new PageImpl<>(null,pageable,0);
-        }
-        return searchHits;
-    }
-
-    @Override
-    public Page<EsProduct> recommend(Long id, Integer pageNum, Integer pageSize) {
-        Pageable pageable = PageRequest.of(pageNum, pageSize);
-        List<EsProduct> esProductList = productDao.getAllEsProductList(id);
-        if (esProductList.size() > 0) {
-            EsProduct esProduct = esProductList.get(0);
-            String keyword = esProduct.getName();
-            Long brandId = esProduct.getBrandId();
-            Long productCategoryId = esProduct.getProductCategoryId();
-            //根据商品标题、品牌、分类进行搜索
-            List<FunctionScoreQueryBuilder.FilterFunctionBuilder> filterFunctionBuilders = new ArrayList<>();
-            filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("name", keyword),
-                    ScoreFunctionBuilders.weightFactorFunction(8)));
-            filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("subTitle", keyword),
-                    ScoreFunctionBuilders.weightFactorFunction(2)));
-            filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("keywords", keyword),
-                    ScoreFunctionBuilders.weightFactorFunction(2)));
-            filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("brandId", brandId),
-                    ScoreFunctionBuilders.weightFactorFunction(5)));
-            filterFunctionBuilders.add(new FunctionScoreQueryBuilder.FilterFunctionBuilder(QueryBuilders.matchQuery("productCategoryId", productCategoryId),
-                    ScoreFunctionBuilders.weightFactorFunction(3)));
-            FunctionScoreQueryBuilder.FilterFunctionBuilder[] builders = new FunctionScoreQueryBuilder.FilterFunctionBuilder[filterFunctionBuilders.size()];
-            filterFunctionBuilders.toArray(builders);
-            FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(builders)
-                    .scoreMode(FunctionScoreQuery.ScoreMode.SUM)
-                    .setMinScore(2);
-            //用于过滤掉相同的商品
-            BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
-            boolQueryBuilder.mustNot(QueryBuilders.termQuery("id",id));
-            //构建查询条件
-            NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
-            builder.withQuery(functionScoreQueryBuilder);
-            builder.withFilter(boolQueryBuilder);
-            builder.withPageable(pageable);
-            NativeSearchQuery searchQuery = builder.build();
-            LOGGER.info("DSL:{}", searchQuery.getQuery().toString());
-            searchQuery.setPageable(pageable);
-            Page<EsProduct> searchHits = productRepository.search(searchQuery);
-            if(searchHits.getTotalElements()<=0){
-                return new PageImpl<>(null,pageable,0);
-            }
-            return searchHits;
-        }
-        return new PageImpl<>(null);
-    }
-
-    @Override
-    public EsProductRelatedInfo searchRelatedInfo(String keyword) {
-        NativeSearchQueryBuilder builder = new NativeSearchQueryBuilder();
-        //搜索条件
-        if(StringUtils.isEmpty(keyword)){
-            builder.withQuery(QueryBuilders.matchAllQuery());
-        }else{
-            builder.withQuery(QueryBuilders.multiMatchQuery(keyword,"name","subTitle","keywords"));
-        }
-        //聚合搜索品牌名称
-        builder.addAggregation(AggregationBuilders.terms("brandNames").field("brandName"));
-        //集合搜索分类名称
-        builder.addAggregation(AggregationBuilders.terms("productCategoryNames").field("productCategoryName"));
-        //聚合搜索商品属性,去除type=1的属性
-        AbstractAggregationBuilder aggregationBuilder = AggregationBuilders.nested("allAttrValues","attrValueList")
-                .subAggregation(AggregationBuilders.filter("productAttrs",QueryBuilders.termQuery("attrValueList.type",1))
-                        .subAggregation(AggregationBuilders.terms("attrIds")
-                                .field("attrValueList.productAttributeId")
-                                .subAggregation(AggregationBuilders.terms("attrValues")
-                                        .field("attrValueList.value"))
-                                .subAggregation(AggregationBuilders.terms("attrNames")
-                                        .field("attrValueList.name"))));
-        builder.addAggregation(aggregationBuilder);
-        NativeSearchQuery searchQuery = builder.build();
-        AggregatedPage<EsProduct> searchHits = elasticsearchTemplate.queryForPage(searchQuery, EsProduct.class);
-        return convertProductRelatedInfo(searchHits);
-    }
-
-    /**
-     * 将返回结果转换为对象
-     */
-    private EsProductRelatedInfo convertProductRelatedInfo(AggregatedPage<EsProduct> response) {
-        EsProductRelatedInfo productRelatedInfo = new EsProductRelatedInfo();
-        Map<String, Aggregation> aggregationMap = response.getAggregations().getAsMap();
-        //设置品牌
-        Aggregation brandNames = aggregationMap.get("brandNames");
-        List<String> brandNameList = new ArrayList<>();
-        for(int i = 0; i<((Terms) brandNames).getBuckets().size(); i++){
-            brandNameList.add(((Terms) brandNames).getBuckets().get(i).getKeyAsString());
-        }
-        productRelatedInfo.setBrandNames(brandNameList);
-        //设置分类
-        Aggregation productCategoryNames = aggregationMap.get("productCategoryNames");
-        List<String> productCategoryNameList = new ArrayList<>();
-        for(int i=0;i<((Terms) productCategoryNames).getBuckets().size();i++){
-            productCategoryNameList.add(((Terms) productCategoryNames).getBuckets().get(i).getKeyAsString());
-        }
-        productRelatedInfo.setProductCategoryNames(productCategoryNameList);
-        //设置参数
-        Aggregation productAttrs = aggregationMap.get("allAttrValues");
-        List<? extends Terms.Bucket> attrIds = ((ParsedLongTerms) ((ParsedFilter) ((ParsedNested) productAttrs).getAggregations().get("productAttrs")).getAggregations().get("attrIds")).getBuckets();
-        List<EsProductRelatedInfo.ProductAttr> attrList = new ArrayList<>();
-        for (Terms.Bucket attrId : attrIds) {
-            EsProductRelatedInfo.ProductAttr attr = new EsProductRelatedInfo.ProductAttr();
-            attr.setAttrId((Long) attrId.getKey());
-            List<String> attrValueList = new ArrayList<>();
-            List<? extends Terms.Bucket> attrValues = ((ParsedStringTerms) attrId.getAggregations().get("attrValues")).getBuckets();
-            List<? extends Terms.Bucket> attrNames = ((ParsedStringTerms) attrId.getAggregations().get("attrNames")).getBuckets();
-            for (Terms.Bucket attrValue : attrValues) {
-                attrValueList.add(attrValue.getKeyAsString());
-            }
-            attr.setAttrValues(attrValueList);
-            if(!CollectionUtils.isEmpty(attrNames)){
-                String attrName = attrNames.get(0).getKeyAsString();
-                attr.setAttrName(attrName);
-            }
-            attrList.add(attr);
-        }
-        productRelatedInfo.setProductAttrs(attrList);
-        return productRelatedInfo;
-    }
-}

+ 0 - 16
cooleshow-mall/mall-search/src/main/resources/bootstrap-dev.properties

@@ -1,16 +0,0 @@
-#\u6307\u5b9a\u5f00\u53d1\u73af\u5883
-#spring.profiles.active=dev
-#\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=47.114.1.200:8848
-#\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=de48b8cc-3dd2-4230-bf41-81d733fa8369
-#\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
-spring.cloud.nacos.config.group=DEFAULT_GROUP
-#\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}
-spring.cloud.nacos.config.prefix=mall-search
-#\u6307\u5b9a\u6587\u4ef6\u540e\u7f00
-spring.cloud.nacos.config.file-extension=yaml
-#\u662f\u5426\u52a8\u6001\u5237\u65b0
-spring.cloud.nacos.config.refresh.enabled=true
-#\u662f\u5426\u542f\u7528\u914d\u7f6e\u4e2d\u5fc3
-spring.cloud.nacos.config.enabled=true

+ 0 - 46
cooleshow-mall/mall-search/src/main/resources/config/mybatis/EsProductDao.xml

@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.yonge.cooleshow.search.dao.EsProductDao">
-    <resultMap id="esProductListMap" type="com.yonge.cooleshow.search.domain.EsProduct" autoMapping="true">
-        <id column="id" jdbcType="BIGINT" property="id" />
-        <collection property="attrValueList" columnPrefix="attr_" ofType="com.yonge.cooleshow.search.domain.EsProductAttributeValue">
-            <id column="id" property="id" jdbcType="BIGINT"/>
-            <result column="product_attribute_id" property="productAttributeId" jdbcType="BIGINT"/>
-            <result column="value" property="value" jdbcType="VARCHAR"/>
-            <result column="type" property="type"/>
-            <result column="name" property="name"/>
-        </collection>
-    </resultMap>
-    <select id="getAllEsProductList" resultMap="esProductListMap">
-        select
-            p.id id,
-            p.product_sn productSn,
-            p.brand_id brandId,
-            p.brand_name brandName,
-            p.product_category_id productCategoryId,
-            p.product_category_name productCategoryName,
-            p.pic pic,
-            p.name name,
-            p.sub_title subTitle,
-            p.price price,
-            p.sale sale,
-            p.new_status newStatus,
-            p.recommand_status recommandStatus,
-            p.stock stock,
-            p.promotion_type promotionType,
-            p.keywords keywords,
-            p.sort sort,
-            pav.id attr_id,
-            pav.value attr_value,
-            pav.product_attribute_id attr_product_attribute_id,
-            pa.type attr_type,
-            pa.name attr_name
-        from pms_product p
-        left join pms_product_attribute_value pav on p.id = pav.product_id
-        left join pms_product_attribute pa on pav.product_attribute_id= pa.id
-        where delete_status = 0 and publish_status = 1
-        <if test="id!=null">
-            and p.id=#{id}
-        </if>
-    </select>
-</mapper>