Authored by wangnan9279

ufo推荐列表bug fix

@@ -153,6 +153,7 @@ public class SearchRequestParams { @@ -153,6 +153,7 @@ public class SearchRequestParams {
153 //ufo 153 //ufo
154 public static final String UFOPRODUCTINDEX_SEARCH_QUERY = "query"; 154 public static final String UFOPRODUCTINDEX_SEARCH_QUERY = "query";
155 public static final String UFOPRODUCTINDEX_PARAM_ID = "id"; 155 public static final String UFOPRODUCTINDEX_PARAM_ID = "id";
  156 + public static final String UFOPRODUCTINDEX_PARAM_NOT_ID = "not_id";
156 public static final String UFOPRODUCTINDEX_PARAM_MAXSORT = "maxSort"; 157 public static final String UFOPRODUCTINDEX_PARAM_MAXSORT = "maxSort";
157 public static final String UFOPRODUCTINDEX_PARAM_MIDSORT = "midSort"; 158 public static final String UFOPRODUCTINDEX_PARAM_MIDSORT = "midSort";
158 public static final String UFOPRODUCTINDEX_PARAM_GENDER = "gender"; 159 public static final String UFOPRODUCTINDEX_PARAM_GENDER = "gender";
@@ -61,17 +61,21 @@ public class UfoSearchQueryHelper extends BaseService { @@ -61,17 +61,21 @@ public class UfoSearchQueryHelper extends BaseService {
61 61
62 public BoolQueryBuilder constructFilterBuilder(Map<String, String> paramMap, String filterParamName) throws Exception { 62 public BoolQueryBuilder constructFilterBuilder(Map<String, String> paramMap, String filterParamName) throws Exception {
63 BoolQueryBuilder boolFilter = QueryBuilders.boolQuery(); 63 BoolQueryBuilder boolFilter = QueryBuilders.boolQuery();
  64 + //只id过滤
  65 + if ("Y".equals(paramMap.get(SearchRequestParams.UFOPRODUCTINDEX_PARAM_IS_ID_FILTER))) {
  66 + this.addMustIntTermsQuery(boolFilter, paramMap, filterParamName, SearchRequestParams.UFOPRODUCTINDEX_PARAM_ID, UfoProductIndexEsField.id);
  67 + return boolFilter;
  68 + }
64 //硬过滤 69 //硬过滤
65 - if (!"Y".equals(paramMap.get(SearchRequestParams.UFOPRODUCTINDEX_PARAM_IS_ID_FILTER))) {  
66 - boolFilter.must(QueryBuilders.termQuery(UfoProductIndexEsField.delStatus, 0));  
67 - boolFilter.must(QueryBuilders.termQuery(UfoProductIndexEsField.shelveStatus, 1));  
68 - long now = DateUtil.getCurrentTimeSecond();  
69 - if ("Y".equals(paramMap.get(SearchRequestParams.UFOPRODUCTINDEX_PARAM_IS_SOON_SALE))) {  
70 - boolFilter.must(QueryBuilders.rangeQuery(UfoProductIndexEsField.saleTime).gt(now));  
71 - paramMap.put("order", "saleTime:asc");  
72 - } else {  
73 - boolFilter.must(QueryBuilders.rangeQuery(UfoProductIndexEsField.saleTime).lte(now));  
74 - } 70 + boolFilter.must(QueryBuilders.termQuery(UfoProductIndexEsField.delStatus, 0));
  71 + boolFilter.must(QueryBuilders.termQuery(UfoProductIndexEsField.shelveStatus, 1));
  72 + //是否是即将发售列表
  73 + long now = DateUtil.getCurrentTimeSecond();
  74 + if ("Y".equals(paramMap.get(SearchRequestParams.UFOPRODUCTINDEX_PARAM_IS_SOON_SALE))) {
  75 + boolFilter.must(QueryBuilders.rangeQuery(UfoProductIndexEsField.saleTime).gt(now));
  76 + paramMap.put("order", "saleTime:asc");
  77 + } else {
  78 + boolFilter.must(QueryBuilders.rangeQuery(UfoProductIndexEsField.saleTime).lte(now));
75 } 79 }
76 //参数过滤 80 //参数过滤
77 this.addMustIntTermsQuery(boolFilter, paramMap, filterParamName, SearchRequestParams.UFOPRODUCTINDEX_PARAM_ID, UfoProductIndexEsField.id); 81 this.addMustIntTermsQuery(boolFilter, paramMap, filterParamName, SearchRequestParams.UFOPRODUCTINDEX_PARAM_ID, UfoProductIndexEsField.id);
@@ -83,6 +87,11 @@ public class UfoSearchQueryHelper extends BaseService { @@ -83,6 +87,11 @@ public class UfoSearchQueryHelper extends BaseService {
83 this.addMustIntTermsQuery(boolFilter, paramMap, filterParamName, SearchRequestParams.UFOPRODUCTINDEX_PARAM_SIZE, UfoProductIndexEsField.sizeIds); 87 this.addMustIntTermsQuery(boolFilter, paramMap, filterParamName, SearchRequestParams.UFOPRODUCTINDEX_PARAM_SIZE, UfoProductIndexEsField.sizeIds);
84 this.addMustIntTermsQuery(boolFilter, paramMap, filterParamName, SearchRequestParams.UFOPRODUCTINDEX_PARAM_COLOR, UfoProductIndexEsField.colorIds); 88 this.addMustIntTermsQuery(boolFilter, paramMap, filterParamName, SearchRequestParams.UFOPRODUCTINDEX_PARAM_COLOR, UfoProductIndexEsField.colorIds);
85 this.addMustIntTermsQuery(boolFilter, paramMap, filterParamName, SearchRequestParams.UFOPRODUCTINDEX_PARAM_POOL, UfoProductIndexEsField.poolIds); 89 this.addMustIntTermsQuery(boolFilter, paramMap, filterParamName, SearchRequestParams.UFOPRODUCTINDEX_PARAM_POOL, UfoProductIndexEsField.poolIds);
  90 + //推荐列表中去掉自身
  91 + String not_id = paramMap.get(SearchRequestParams.UFOPRODUCTINDEX_PARAM_NOT_ID);
  92 + if (StringUtils.isNotBlank(not_id)) {
  93 + boolFilter.mustNot(QueryBuilders.termQuery(UfoProductIndexEsField.id, not_id));
  94 + }
86 return boolFilter; 95 return boolFilter;
87 } 96 }
88 97
@@ -110,7 +110,7 @@ public class UfoProductListService { @@ -110,7 +110,7 @@ public class UfoProductListService {
110 return new SearchApiResult().setCode(400).setMessage("参数不合法,缺少必传参数"); 110 return new SearchApiResult().setCode(400).setMessage("参数不合法,缺少必传参数");
111 } 111 }
112 //第一次查询 112 //第一次查询
113 - paramMap.put("viewNum", "1000"); 113 + paramMap.put("viewNum", "100");
114 SearchApiResult searchApiResult = this.productList(paramMap); 114 SearchApiResult searchApiResult = this.productList(paramMap);
115 if (searchApiResult.getData() == null) { 115 if (searchApiResult.getData() == null) {
116 return new SearchApiResult().setData(null).setCode(500); 116 return new SearchApiResult().setData(null).setCode(500);
@@ -123,20 +123,13 @@ public class UfoProductListService { @@ -123,20 +123,13 @@ public class UfoProductListService {
123 Set<Integer> idList = new HashSet<>(); 123 Set<Integer> idList = new HashSet<>();
124 if (returnInfoList.size() < RECOMMEND_LIMIT) { 124 if (returnInfoList.size() < RECOMMEND_LIMIT) {
125 returnInfoList.stream().map(p -> MapUtils.getIntValue(p, "id")).forEach(id -> idList.add(id)); 125 returnInfoList.stream().map(p -> MapUtils.getIntValue(p, "id")).forEach(id -> idList.add(id));
126 - //可能的第二次查询  
127 - paramMap = new HashMap<>();  
128 - paramMap.put("brand", brandId.toString());  
129 - paramMap.put("midSort", midSortId.toString());  
130 - paramMap.put("not_id", not_id.toString());  
131 - paramMap.put("viewNum", "1000"); 126 + //可能的第二次查询,去掉query去查
  127 + paramMap.remove("query");
132 this.addReturnInfoList(paramMap, idList, returnInfoList); 128 this.addReturnInfoList(paramMap, idList, returnInfoList);
133 } 129 }
134 if (returnInfoList.size() < RECOMMEND_LIMIT) { 130 if (returnInfoList.size() < RECOMMEND_LIMIT) {
135 - //可能的第三次查询  
136 - paramMap = new HashMap<>();  
137 - paramMap.put("brand", brandId.toString());  
138 - paramMap.put("viewNum", "1000");  
139 - paramMap.put("not_id", not_id.toString()); 131 + //可能的第三次查询,去掉中分类去查
  132 + paramMap.remove("midSort");
140 this.addReturnInfoList(paramMap, idList, returnInfoList); 133 this.addReturnInfoList(paramMap, idList, returnInfoList);
141 } 134 }
142 dataMap.put("total", returnInfoList.size()); 135 dataMap.put("total", returnInfoList.size());
@@ -168,7 +161,7 @@ public class UfoProductListService { @@ -168,7 +161,7 @@ public class UfoProductListService {
168 161
169 public SearchApiResult productListForPlatform(Map<String, String> paramMap) { 162 public SearchApiResult productListForPlatform(Map<String, String> paramMap) {
170 try { 163 try {
171 - // 2. 构建SearchParam 164 + // 构建SearchParam
172 SearchParam searchParam = new SearchParam(); 165 SearchParam searchParam = new SearchParam();
173 searchParam.setQuery(QueryBuilders.matchAllQuery()); 166 searchParam.setQuery(QueryBuilders.matchAllQuery());
174 BoolQueryBuilder boolFilter = ufoSearchQueryHelper.constructFilterBuilderForPlatform(paramMap, null); 167 BoolQueryBuilder boolFilter = ufoSearchQueryHelper.constructFilterBuilderForPlatform(paramMap, null);