Authored by 胡古飞

用户收藏列表支持showChannel参数

@@ -59,8 +59,7 @@ public class UfoProductListController { @@ -59,8 +59,7 @@ public class UfoProductListController {
59 @ResponseBody 59 @ResponseBody
60 public SearchApiResult favoriteProductList(HttpServletRequest request) { 60 public SearchApiResult favoriteProductList(HttpServletRequest request) {
61 Map<String, String> paramMap = HttpServletRequestUtils.transParamType(request); 61 Map<String, String> paramMap = HttpServletRequestUtils.transParamType(request);
62 - return ufoFavoriteService.productList(paramMap); 62 + return ufoFavoriteService.favoriteProductList(paramMap);
63 } 63 }
64 64
65 -  
66 } 65 }
@@ -3,6 +3,7 @@ package com.yoho.search.service.scene.ufo; @@ -3,6 +3,7 @@ package com.yoho.search.service.scene.ufo;
3 import com.alibaba.fastjson.JSONObject; 3 import com.alibaba.fastjson.JSONObject;
4 import com.yoho.search.aop.cache.SearchCacheAble; 4 import com.yoho.search.aop.cache.SearchCacheAble;
5 import com.yoho.search.base.constants.ISearchConstants; 5 import com.yoho.search.base.constants.ISearchConstants;
  6 +import com.yoho.search.base.constants.UfoProductIndexEsField;
6 import com.yoho.search.cache.CacheInMinute; 7 import com.yoho.search.cache.CacheInMinute;
7 import com.yoho.search.common.SearchCommonService; 8 import com.yoho.search.common.SearchCommonService;
8 import com.yoho.search.common.UfoSearchRequestParams; 9 import com.yoho.search.common.UfoSearchRequestParams;
@@ -15,6 +16,7 @@ import com.yoho.search.service.index.ufo.UfoProductIndexBaseService; @@ -15,6 +16,7 @@ import com.yoho.search.service.index.ufo.UfoProductIndexBaseService;
15 import org.apache.commons.collections.MapUtils; 16 import org.apache.commons.collections.MapUtils;
16 import org.apache.commons.lang.StringUtils; 17 import org.apache.commons.lang.StringUtils;
17 import org.elasticsearch.index.query.BoolQueryBuilder; 18 import org.elasticsearch.index.query.BoolQueryBuilder;
  19 +import org.elasticsearch.index.query.QueryBuilders;
18 import org.slf4j.Logger; 20 import org.slf4j.Logger;
19 import org.slf4j.LoggerFactory; 21 import org.slf4j.LoggerFactory;
20 import org.springframework.beans.factory.annotation.Autowired; 22 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,42 +46,39 @@ public class UfoFavoriteService { @@ -44,42 +46,39 @@ public class UfoFavoriteService {
44 @Autowired 46 @Autowired
45 private CustomizeTagBaseService customizeTagBaseService; 47 private CustomizeTagBaseService customizeTagBaseService;
46 48
47 - private static final String RETURN_LIST_NAME = "product_list";  
48 -  
49 @SearchCacheAble(cacheName = "UFO_FAVORITE_LIST", cacheInMinute = CacheInMinute.Minute_UFO) 49 @SearchCacheAble(cacheName = "UFO_FAVORITE_LIST", cacheInMinute = CacheInMinute.Minute_UFO)
50 - public SearchApiResult productList(Map<String, String> paramMap) { 50 + public SearchApiResult favoriteProductList(Map<String, String> paramMap) {
51 try { 51 try {
52 // 1、参数校验 52 // 1、参数校验
  53 + if (StringUtils.isBlank(paramMap.get(UfoSearchRequestParams.UFO_PARAM_ID))) {
  54 + return new SearchApiResult().setCode(400).setMessage("id参数必传");
  55 + }
53 int page = MapUtils.getIntValue(paramMap, UfoSearchRequestParams.UFO_PARAM_SEARCH_PAGE, 1); 56 int page = MapUtils.getIntValue(paramMap, UfoSearchRequestParams.UFO_PARAM_SEARCH_PAGE, 1);
54 int pageSize = MapUtils.getIntValue(paramMap, UfoSearchRequestParams.UFO_PARAM_SEARCH_VIEWNUM, 10); 57 int pageSize = MapUtils.getIntValue(paramMap, UfoSearchRequestParams.UFO_PARAM_SEARCH_VIEWNUM, 10);
55 pageSize = Math.min(pageSize, 100); 58 pageSize = Math.min(pageSize, 100);
56 if (page < 1 || pageSize < 0 || page * pageSize > 100000) { 59 if (page < 1 || pageSize < 0 || page * pageSize > 100000) {
57 return new SearchApiResult().setCode(400).setMessage("分页参数不合法"); 60 return new SearchApiResult().setCode(400).setMessage("分页参数不合法");
58 } 61 }
59 - if (StringUtils.isBlank(paramMap.get(UfoSearchRequestParams.UFO_PARAM_ID))) {  
60 - return new SearchApiResult().setCode(400).setMessage("id参数必传");  
61 - }  
62 - // 2. 构建SearchParam 62 +
  63 + // 2. 构建SearchParam[按id和showChannel过滤]
63 SearchParam searchParam = new SearchParam(); 64 SearchParam searchParam = new SearchParam();
64 - BoolQueryBuilder boolFilter = ufoSearchQueryHelper.constructFilterBuilderIdFilter(paramMap); 65 + BoolQueryBuilder boolFilter = QueryBuilders.boolQuery();
  66 + ufoSearchQueryHelper.addMustIntTermsQuery(boolFilter, paramMap, UfoSearchRequestParams.UFO_PARAM_ID, UfoProductIndexEsField.id);
  67 + ufoSearchQueryHelper.addMustIntTermsQuery(boolFilter, paramMap, UfoSearchRequestParams.UFO_PARAM_SHOW_CHANNEL, UfoProductIndexEsField.showChannel);
65 searchParam.setFiter(boolFilter); 68 searchParam.setFiter(boolFilter);
66 - searchParam.setAggregationBuilders(null); 69 +
  70 + // 3、分页
67 searchParam.setSize(pageSize); 71 searchParam.setSize(pageSize);
68 searchParam.setOffset((page - 1) * pageSize); 72 searchParam.setOffset((page - 1) * pageSize);
69 - // 设置返回的结果 73 + // 4、设置返回的结果
70 searchParam.setIncludeFields(ufoProductIndexBaseService.getUfoProductIndexIncludeFields()); 74 searchParam.setIncludeFields(ufoProductIndexBaseService.getUfoProductIndexIncludeFields());
71 - // 执行搜索 75 + // 5、执行搜索
72 SearchResult searchResult = searchCommonService.doSearch(ISearchConstants.INDEX_NAME_UFO_PRODUCT_INDEX, searchParam); 76 SearchResult searchResult = searchCommonService.doSearch(ISearchConstants.INDEX_NAME_UFO_PRODUCT_INDEX, searchParam);
73 - // 构造返回结果 77 + // 6、构造返回结果
74 List<Map<String, Object>> returnInfoList = ufoProductIndexBaseService.buildProductReturnInfoList(searchResult.getResultList()); 78 List<Map<String, Object>> returnInfoList = ufoProductIndexBaseService.buildProductReturnInfoList(searchResult.getResultList());
75 - // 添加自定义标签 79 + // 7、添加自定义标签
76 customizeTagBaseService.fillCustomizeTag(returnInfoList, false); 80 customizeTagBaseService.fillCustomizeTag(returnInfoList, false);
77 - JSONObject dataMap = new JSONObject();  
78 - dataMap.put("total", searchResult.getTotal());  
79 - dataMap.put("page", searchResult.getPage());  
80 - dataMap.put("page_size", pageSize);  
81 - dataMap.put("page_total", searchResult.getTotalPage());  
82 - // 按id顺序排序 81 + // 8、按id顺序排序
83 Map<String, Map<String, Object>> productReturnInfoMap = returnInfoList.stream().collect(Collectors.toMap(p -> p.get("id").toString(), p -> p)); 82 Map<String, Map<String, Object>> productReturnInfoMap = returnInfoList.stream().collect(Collectors.toMap(p -> p.get("id").toString(), p -> p));
84 List<Map<String, Object>> productReturnInfoListSorted = new ArrayList<>(productReturnInfoMap.size()); 83 List<Map<String, Object>> productReturnInfoListSorted = new ArrayList<>(productReturnInfoMap.size());
85 List<String> idList = Arrays.asList(paramMap.get(UfoSearchRequestParams.UFO_PARAM_ID).split(",")); 84 List<String> idList = Arrays.asList(paramMap.get(UfoSearchRequestParams.UFO_PARAM_ID).split(","));
@@ -89,7 +88,13 @@ public class UfoFavoriteService { @@ -89,7 +88,13 @@ public class UfoFavoriteService {
89 productReturnInfoListSorted.add(sknInfo); 88 productReturnInfoListSorted.add(sknInfo);
90 } 89 }
91 } 90 }
92 - dataMap.put(RETURN_LIST_NAME, productReturnInfoListSorted); 91 + // 9、构造返回结果
  92 + JSONObject dataMap = new JSONObject();
  93 + dataMap.put("total", searchResult.getTotal());
  94 + dataMap.put("page", searchResult.getPage());
  95 + dataMap.put("page_size", pageSize);
  96 + dataMap.put("page_total", searchResult.getTotalPage());
  97 + dataMap.put("product_list", productReturnInfoListSorted);
93 return new SearchApiResult().setData(dataMap); 98 return new SearchApiResult().setData(dataMap);
94 } catch (Exception e) { 99 } catch (Exception e) {
95 logger.error(e.getMessage(), e); 100 logger.error(e.getMessage(), e);