Просмотр исходного кода

新增店铺页面联想词接口

dongbw 7 лет назад
Родитель
Сommit
b9f910db3a

+ 16 - 1
src/main/java/com/uas/platform/b2c/common/search/constant/SearchUrl.java

@@ -108,7 +108,6 @@ public class SearchUrl {
      */
     public static final String SIMILAR_BRAND_URL = "/search/similarBrands?keyword={keyword}";
 
-
     /**
      * 根据关键字联想类目
      */
@@ -116,6 +115,22 @@ public class SearchUrl {
 
 
 
+    /**
+     * 根据关键字联想产品型号(加入店铺类型过滤)
+     */
+    public static final String SIMILAR_PRODUCTS_STORETYPE_URL = "/search/similarGoods/cmpcode?keyword={keyword}&storeType={storeType}";
+
+    /**
+     * 根据关键字联想品牌(加入店铺类型过滤)
+     */
+    public static final String SIMILAR_BRAND_STORETYPE_URL = "/search/similarGoods/brand?keyword={keyword}&storeType={storeType}";
+
+    /**
+     * 根据关键字联想类目(加入店铺类型过滤)
+     */
+    public static final String SIMILAR_KIND_STORETYPE_URL = "/search/similarGoods/kind?keyword={keyword}&storeType={storeType}";
+
+
     /**
      * 获取某个信息的叶子节点
      */

+ 15 - 1
src/main/java/com/uas/platform/b2c/common/search/controller/SearcherController.java

@@ -3,7 +3,6 @@ package com.uas.platform.b2c.common.search.controller;
 import com.uas.platform.b2c.common.account.model.User;
 import com.uas.platform.b2c.common.search.dao.SearchHistoryDao;
 import com.uas.platform.b2c.common.search.model.SearchHistory;
-import com.uas.platform.b2c.common.search.rpc.service.SearchService;
 import com.uas.platform.b2c.common.search.service.SearcherService;
 import com.uas.platform.b2c.core.support.SystemSession;
 import com.uas.platform.b2c.prod.commodity.service.GoodsService;
@@ -308,6 +307,21 @@ public class SearcherController {
 		return  searcherService.getSimilarKeywords(keyword, type);
 	}
 
+	/**
+	 * 根据输入获取联想词(包括器件、类目、品牌,按顺序获取)
+	 *									增加店铺类型过滤参数,用来在原厂、代理等页面搜索对应类型产品联想
+	 * @param keyword 关键词
+	 * @param type 搜索类型
+	 * @param storeTypes 店铺类型  多个以,隔开
+	 * @return 获取联想词(包括器件、类目、品牌)
+	 */
+	@RequestMapping(value = "/similarKeywords/goods", method = RequestMethod.GET)
+	@ResponseBody
+	public Map<String,Object> getSimilarKeywordsWithStoreTypes(String keyword, String type, String storeTypes) {
+		keyword = keyword.trim();
+		return  searcherService.getSimilarKeywordsWithStoreTypes(keyword, type, storeTypes);
+	}
+
 	/**
 	 * 2018.19期搜索接口
 	 *

+ 61 - 2
src/main/java/com/uas/platform/b2c/common/search/rpc/service/Impl/SearchServiceImpl.java

@@ -19,11 +19,9 @@ import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 import org.springframework.web.client.RestTemplate;
 
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 /**
  * 通过resttemplate调用搜索接口的实现方法
@@ -330,6 +328,67 @@ public class SearchServiceImpl implements SearchService{
         }
     }
 
+    /**
+     *  根据店铺类型获取产品联想词
+     * @param keyword  关键词
+     * @param type  搜索类型
+     * @param storeType  店铺类型  多条用,隔开
+     * @return 搜索结果
+     * @throws SearchException
+     */
+    @Override
+    public Map<String,Object> getSimilarKeywordsWithStoreTypes(String keyword, String type, String storeType) throws SearchException {
+        Map<String, Object> map = new HashedMap();
+        map.put("keyword", keyword);
+        map.put("storeType", storeType);
+        String result = "",resultKind= "",resultCmp = "",resultBrand = "";
+        switch (type) {
+            case COMPONENT:
+                result = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_PRODUCTS_STORETYPE_URL, String.class, map);
+                result = result.replaceAll("pcmpcode","code");
+                break;
+            case BRAND:
+                result = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_BRAND_STORETYPE_URL, String.class, map);
+                break;
+            case KIND:
+                result = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_KIND_STORETYPE_URL, String.class, map);
+                break;
+            case ALL:
+                resultCmp = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_PRODUCTS_STORETYPE_URL, String.class, map);
+                resultCmp = resultCmp.replaceAll("pr_pcmpcode","code");
+                resultBrand = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_BRAND_STORETYPE_URL, String.class, map);
+                resultBrand = resultBrand.replaceAll("br_name_en_untokenized","brand");
+                resultKind = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_KIND_STORETYPE_URL, String.class, map);
+                resultKind = resultKind.replaceAll("ki_name_cn","kind");
+                break;
+            default:
+                result = restTemplate.getForObject(sysConf.getSearchUrl() + SearchUrl.SIMILAR_KEYWORD_URL, String.class, map);
+                break;
+        }
+        try {
+            switch (type) {
+                case ALL:
+                    List<Object> resultMapCmp = FastjsonUtils.fromJsonArray(resultCmp);
+                    List<Object> resultMapKind = FastjsonUtils.fromJsonArray(resultKind);
+                    List<Object> resultMapBrand = FastjsonUtils.fromJsonArray(resultBrand);
+                    map.clear();
+                    map.put("component",resultMapCmp);
+                    map.put("kind",resultMapKind);
+                    map.put("brand",resultMapBrand);
+                    break;
+                default:
+                    List<Object> resultMap = FastjsonUtils.fromJsonArray(result);
+                    map.clear();
+                    map.put("result",resultMap);
+                    break;
+            }
+            return map;
+        }catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
     @Override
     public Map<String,Object> getProductSimilarKeywords(String keyword) throws SearchException {
         Map<String, Object> map = new HashedMap();

+ 2 - 0
src/main/java/com/uas/platform/b2c/common/search/rpc/service/SearchService.java

@@ -41,6 +41,8 @@ public interface SearchService {
 
     Map<String,Object> getSimilarKeywords(String keyword, String type) throws SearchException;
 
+    Map<String,Object> getSimilarKeywordsWithStoreTypes(String keyword, String type, String storeTypes) throws SearchException;
+
     Map<String,Object> getProductSimilarKeywords(String keyword) throws SearchException;
 
     List<Map<String, Object>> getSimilarComponents(String keyword) throws SearchException;

+ 10 - 0
src/main/java/com/uas/platform/b2c/common/search/service/SearcherService.java

@@ -146,6 +146,16 @@ public interface SearcherService {
 	 */
 	public Map<String,Object> getSimilarKeywords(String keyword, String type);
 
+
+	/**
+	 * 获取产品联想词 , 参数包括店铺信息
+	 * @param keyword  关键词
+	 * @param type  搜索类型
+	 * @param storeType 店铺类型
+	 * @return 联想词结果
+	 */
+	Map<String,Object> getSimilarKeywordsWithStoreTypes(String keyword, String type, String storeType);
+
 	/**
 	 * 根据输入获取联想词(包括器件、类目、品牌,按顺序获取)
 	 *

+ 92 - 19
src/main/java/com/uas/platform/b2c/common/search/service/impl/SearcherServiceImpl.java

@@ -30,7 +30,7 @@ import com.uas.platform.b2c.prod.product.component.modal.ComponentInfo;
 import com.uas.platform.b2c.prod.store.dao.StoreInDao;
 import com.uas.platform.b2c.prod.store.model.StoreIn;
 import com.uas.platform.b2c.prod.store.model.StoreStatus;
-
+import com.uas.platform.b2c.prod.store.model.StoreType;
 import com.uas.platform.b2c.trade.order.dao.OrderDetailDao;
 import com.uas.platform.b2c.trade.vendor.model.VendorIntroduction;
 import com.uas.platform.b2c.trade.vendor.service.VendorIntroductionService;
@@ -39,22 +39,6 @@ import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.search.exception.SearchException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.stream.Collectors;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-import javax.servlet.http.HttpServletRequest;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -68,6 +52,16 @@ import org.springframework.ui.ModelMap;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.util.*;
+import java.util.Map.Entry;
+import java.util.stream.Collectors;
+
 /**
  * 搜索索引
  *
@@ -660,7 +654,7 @@ public class SearcherServiceImpl implements SearcherService {
         }
         try {
             if (type.equals("store") || type.equals("all")) {
-                List<VendorIntroduction> vendorIntroductions = vendorIntroductionService.getVendorIntroduction(1,1024*1024*1024,keyword,null).getContent();
+                List<VendorIntroduction> vendorIntroductions = vendorIntroductionService.getVendorIntroduction(DEFAULT_PAGE, DEFAULT_SIZE, keyword,null).getContent();
                 List<Object> resultMap = FastjsonUtils.fromJsonArray(JSON.toJSONString(vendorIntroductions.stream().map(VendorIntroduction::getEnName).map(en -> {Map s = new HashMap ();s.put("name", en);return s;}).collect(Collectors.toList())
                 ));
                 if (type.equals("store")) {
@@ -684,6 +678,85 @@ public class SearcherServiceImpl implements SearcherService {
         return result;
     }
 
+    /**
+     * 获取产品联想词 , 参数包括店铺信息
+     *
+     * @param keyword   关键词
+     * @param type      搜索类型
+     * @param storeTypes 店铺类型  1个或多个  多个以, 隔开
+     * @return 联想词结果
+     */
+    @Override
+    public Map<String, Object> getSimilarKeywordsWithStoreTypes(String keyword, String type, String storeTypes) {
+        Map<String, Object> result = null;
+        if (StringUtils.isEmpty(type)) {
+            type = "all";
+        }
+        try {
+            if ("store".equals(type) || "all".equals(type)) {
+                PageInfo pageInfo = new PageInfo(DEFAULT_PAGE, DEFAULT_SIZE);
+                List<StoreIn> stores = getStorePageByStoreTypes(pageInfo,keyword,storeTypes).getContent();
+                List<Object> resultMap = FastjsonUtils.fromJsonArray(JSON.toJSONString(stores.stream().map(StoreIn::getStoreName).map(en -> {Map s = new HashMap ();s.put("name", en);return s;}).collect(Collectors.toList())
+                ));
+                if ("store".equals(type)) {
+                    result= new HashMap<>();
+                    result.put("result",resultMap);
+                } else {
+                    result = searchService.getSimilarKeywordsWithStoreTypes(keyword, type, storeTypes);
+                    result.put("store", resultMap);
+                }
+            } else {
+                result = searchService.getSimilarKeywordsWithStoreTypes(keyword, type, storeTypes);
+            }
+        } catch (SearchException e) {
+            throwSystemException(e);
+        }
+        for (Entry<String, Object> entry : result.entrySet()) {
+            if (((List) entry.getValue()).size() > 8) {
+                entry.setValue(((List) entry.getValue()).subList(0, 8));
+            }
+        }
+        return result;
+    }
+
+    /**
+     * 根据关键词和店铺类型获取店铺信息
+     *
+     * @param pageInfo   分页参数
+     * @param keyword    关键词
+     * @param storeTypes 店铺类型 多个时 以,隔开
+     * @return 店铺分页信息
+     */
+    public Page<StoreIn> getStorePageByStoreTypes(PageInfo pageInfo, String keyword, String storeTypes) {
+        if (StringUtils.hasText(keyword)){
+            pageInfo.expression(PredicateUtils.like("storeName", keyword, false));
+        }
+        if (StringUtils.hasText(storeTypes)){
+            List<StoreType> storeTypeList = new ArrayList<>();
+            if (storeTypes.contains(StoreType.AGENCY.toString())) {
+                storeTypeList.add(StoreType.AGENCY);
+            }
+            if (storeTypes.contains(StoreType.DISTRIBUTION.toString())) {
+                storeTypeList.add(StoreType.DISTRIBUTION);
+            }
+            if (storeTypes.contains(StoreType.ORIGINAL_FACTORY.toString())) {
+                storeTypeList.add(StoreType.ORIGINAL_FACTORY);
+            }
+            if (storeTypes.contains(StoreType.CONSIGNMENT.toString())) {
+                storeTypeList.add(StoreType.CONSIGNMENT);
+            }
+            pageInfo.expression(PredicateUtils.in("type", storeTypeList, false));
+        }
+
+        return storeInDao.findAll(new Specification<StoreIn>() {
+            @Override
+            public Predicate toPredicate(Root<StoreIn> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
+                criteriaQuery.where(pageInfo.getPredicates(root, criteriaQuery, criteriaBuilder));
+                return null;
+            }
+        }, pageInfo);
+    }
+
     @Override
     public Map<String, Object> getProductSimilarKeywords(String keyword) {
         Map<String, Object> result = null;
@@ -785,7 +858,7 @@ public class SearcherServiceImpl implements SearcherService {
 				SystemSession.getUser().getEnterprise() == null ? null : SystemSession.getUser().getEnterprise().getUu() );
 	}
 
-	/**
+    /**
 	 * 捕获SearchException抛出SystemException
 	 *
 	 * @param e

+ 10 - 0
src/main/java/com/uas/platform/b2c/prod/store/service/StoreInService.java

@@ -163,6 +163,16 @@ public interface StoreInService {
 	 */
 	Page<StoreIn> getStorePage(PageInfo pageInfo, String keyword, StoreType storeType);
 
+
+	/**
+	 * 根据关键词和店铺类型获取店铺信息
+	 * @param pageInfo  分页参数
+	 * @param keyword  关键词
+	 * @param storeTypes  店铺类型 多个时 以,隔开
+	 * @return
+	 */
+	Page<StoreIn> getStorePageByStoreTypes(PageInfo pageInfo, String keyword, String storeTypes);
+
 	/**
 	 * 当管理员推荐店铺的时候,保存店铺的广告信息
 	 *

+ 39 - 0
src/main/java/com/uas/platform/b2c/prod/store/service/impl/StoreInServiceImpl.java

@@ -668,6 +668,45 @@ public class StoreInServiceImpl implements StoreInService {
 		}, pageInfo);
 	}
 
+	/**
+	 * 根据关键词和店铺类型获取店铺信息
+	 *
+	 * @param pageInfo   分页参数
+	 * @param keyword    关键词
+	 * @param storeTypes 店铺类型 多个时 以,隔开
+	 * @return 店铺分页信息
+	 */
+	@Override
+	public Page<StoreIn> getStorePageByStoreTypes(PageInfo pageInfo, String keyword, String storeTypes) {
+		if (StringUtils.hasText(keyword)){
+			pageInfo.expression(PredicateUtils.like("storeName", keyword, false));
+		}
+		if (StringUtils.hasText(storeTypes)){
+			List<StoreType> storeTypeList = new ArrayList<>();
+			if (storeTypes.contains(StoreType.AGENCY.toString())) {
+				storeTypeList.add(StoreType.AGENCY);
+			}
+			if (storeTypes.contains(StoreType.DISTRIBUTION.toString())) {
+				storeTypeList.add(StoreType.DISTRIBUTION);
+			}
+			if (storeTypes.contains(StoreType.ORIGINAL_FACTORY.toString())) {
+				storeTypeList.add(StoreType.ORIGINAL_FACTORY);
+			}
+			if (storeTypes.contains(StoreType.CONSIGNMENT.toString())) {
+				storeTypeList.add(StoreType.CONSIGNMENT);
+			}
+			pageInfo.expression(PredicateUtils.in("type", storeTypeList, false));
+		}
+
+		return storeDao.findAll(new Specification<StoreIn>() {
+			@Override
+			public Predicate toPredicate(Root<StoreIn> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
+				criteriaQuery.where(pageInfo.getPredicates(root, criteriaQuery, criteriaBuilder));
+				return null;
+			}
+		}, pageInfo);
+	}
+
 	/**
 	 * 获取店铺的联系信息
 	 *