...
|
...
|
@@ -7,10 +7,13 @@ import com.yoho.search.base.constants.ISearchConstants; |
|
|
import com.yoho.search.base.constants.UfoProductIndexEsField;
|
|
|
import com.yoho.search.cache.CacheInMinute;
|
|
|
import com.yoho.search.common.SearchCommonService;
|
|
|
import com.yoho.search.common.UfoSearchRequestParams;
|
|
|
import com.yoho.search.core.es.model.SearchParam;
|
|
|
import com.yoho.search.core.es.model.SearchResult;
|
|
|
import com.yoho.search.models.SearchApiResult;
|
|
|
import com.yoho.search.service.helper.UfoSearchQueryHelper;
|
|
|
import com.yoho.search.service.index.ufo.UfoProductIndexBaseService;
|
|
|
import org.apache.commons.collections.MapUtils;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.elasticsearch.index.query.BoolQueryBuilder;
|
|
|
import org.elasticsearch.index.query.QueryBuilders;
|
...
|
...
|
@@ -39,26 +42,22 @@ public class UfoSoonSaleService { |
|
|
private SearchCommonService searchCommonService;
|
|
|
@Autowired
|
|
|
private UfoProductIndexBaseService ufoProductIndexBaseService;
|
|
|
|
|
|
private static final String RETURN_LIST_NAME = "product_list";
|
|
|
@Autowired
|
|
|
private UfoSearchQueryHelper ufoSearchQueryHelper;
|
|
|
|
|
|
@SearchCacheAble(cacheName = "UFO_SOON_SALE_LIST", cacheInMinute = CacheInMinute.Minute_UFO)
|
|
|
public SearchApiResult productList(Map<String, String> paramMap) {
|
|
|
public SearchApiResult soonSaleProductList(Map<String, String> paramMap) {
|
|
|
try {
|
|
|
// 1、参数校验
|
|
|
int pageSize = StringUtils.isBlank(paramMap.get("viewNum")) ? 10 : Integer.parseInt(paramMap.get("viewNum"));
|
|
|
int page = StringUtils.isBlank(paramMap.get("page")) ? 1 : Integer.parseInt(paramMap.get("page"));
|
|
|
if (page < 1 || pageSize < 0 || page * pageSize > 1000000) {
|
|
|
int pageSize = MapUtils.getIntValue(paramMap, UfoSearchRequestParams.UFO_PARAM_SEARCH_VIEWNUM, 10);
|
|
|
int page = MapUtils.getIntValue(paramMap, UfoSearchRequestParams.UFO_PARAM_SEARCH_PAGE, 1);
|
|
|
pageSize = Math.min(pageSize, 100);
|
|
|
if (page < 1 || pageSize < 0 || page * pageSize > 100000) {
|
|
|
return new SearchApiResult().setCode(400).setMessage("分页参数不合法");
|
|
|
}
|
|
|
if (pageSize > 100) {
|
|
|
pageSize = 100;
|
|
|
}
|
|
|
// 2. 构建SearchParam
|
|
|
SearchParam searchParam = new SearchParam();
|
|
|
BoolQueryBuilder boolFilter = constructFilterBuilder();
|
|
|
searchParam.setFiter(boolFilter);
|
|
|
searchParam.setAggregationBuilders(null);
|
|
|
searchParam.setFiter(this.constructFilterBuilder(paramMap));
|
|
|
searchParam.setSize(pageSize);
|
|
|
searchParam.setOffset((page - 1) * pageSize);
|
|
|
// 设置排序字段
|
...
|
...
|
@@ -67,33 +66,36 @@ public class UfoSoonSaleService { |
|
|
sortBuilders.add(SortBuilders.fieldSort(UfoProductIndexEsField.id).order(SortOrder.DESC));
|
|
|
searchParam.setSortBuilders(sortBuilders);
|
|
|
// 设置返回的结果
|
|
|
List<String> includeFields = ufoProductIndexBaseService.getUfoProductIndexIncludeFields();
|
|
|
searchParam.setIncludeFields(includeFields);
|
|
|
searchParam.setIncludeFields(ufoProductIndexBaseService.getUfoProductIndexIncludeFields());
|
|
|
// 执行搜索
|
|
|
SearchResult searchResult = searchCommonService.doSearch(ISearchConstants.INDEX_NAME_UFO_PRODUCT_INDEX, searchParam);
|
|
|
// 构造返回结果
|
|
|
// 处理返回结果
|
|
|
List<Map<String, Object>> returnInfoList = ufoProductIndexBaseService.buildProductReturnInfoList(searchResult.getResultList());
|
|
|
JSONObject dataMap = new JSONObject();
|
|
|
dataMap.put("total", searchResult.getTotal());
|
|
|
dataMap.put("page", searchResult.getPage());
|
|
|
dataMap.put("page_size", pageSize);
|
|
|
dataMap.put("page_total", searchResult.getTotalPage());
|
|
|
dataMap.put(RETURN_LIST_NAME, returnInfoList);
|
|
|
return new SearchApiResult().setData(dataMap);
|
|
|
// 构造返回结果
|
|
|
JSONObject result = new JSONObject();
|
|
|
result.put("total", searchResult.getTotal());
|
|
|
result.put("page", searchResult.getPage());
|
|
|
result.put("page_size", pageSize);
|
|
|
result.put("page_total", searchResult.getTotalPage());
|
|
|
result.put("product_list", returnInfoList);
|
|
|
return new SearchApiResult().setData(result);
|
|
|
} catch (Exception e) {
|
|
|
logger.error(e.getMessage(), e);
|
|
|
return new SearchApiResult().setData(null).setCode(500);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public BoolQueryBuilder constructFilterBuilder() throws Exception {
|
|
|
public BoolQueryBuilder constructFilterBuilder(Map<String, String> paramMap) {
|
|
|
BoolQueryBuilder boolFilter = QueryBuilders.boolQuery();
|
|
|
//硬过滤
|
|
|
// 硬过滤
|
|
|
boolFilter.must(QueryBuilders.termQuery(UfoProductIndexEsField.delStatus, 0));
|
|
|
boolFilter.must(QueryBuilders.termQuery(UfoProductIndexEsField.shelveStatus, 1));
|
|
|
// 不包含有货
|
|
|
boolFilter.mustNot(QueryBuilders.termQuery(UfoProductIndexEsField.isYoho, "Y"));
|
|
|
//发售列表
|
|
|
// 即将发售列表
|
|
|
boolFilter.must(QueryBuilders.rangeQuery(UfoProductIndexEsField.saleTime).gt(SearchDateUtils.getCurrentTimeSecond()));
|
|
|
// 支持 showChannel参数
|
|
|
ufoSearchQueryHelper.addMustIntTermsQuery(boolFilter, paramMap, UfoSearchRequestParams.UFO_PARAM_SHOW_CHANNEL, UfoProductIndexEsField.showChannel);
|
|
|
return boolFilter;
|
|
|
}
|
|
|
} |
...
|
...
|
|