Authored by 胡古飞

/ufo/soonSaleProductList 支持showChannel参数

... ... @@ -8,24 +8,20 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.Map;
/**
* @author wangnan
* @version 2018/12/27
*/
@Controller
@RestController
public class UfoSoonSaleController {
@Autowired
private UfoSoonSaleService ufoSoonSaleService;
@RequestMapping(method = RequestMethod.GET, value = "/ufo/soonSaleProductList")
@ResponseBody
public SearchApiResult favoriteProductList(HttpServletRequest request) {
Map<String, String> paramMap = HttpServletRequestUtils.transParamType(request);
return ufoSoonSaleService.productList(paramMap);
return ufoSoonSaleService.soonSaleProductList(paramMap);
}
}
... ...
... ... @@ -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;
}
}
... ...
... ... @@ -56,20 +56,20 @@ public class UfoUVScoreSceneService {
public SearchApiResult uvScoreProductList(Map<String, String> paramMap) {
try {
// 1、参数校验
int page = MapUtils.getIntValue(paramMap,"page",1);
int pageSize = MapUtils.getIntValue(paramMap,"viewNum",10);
if (page < 1 || pageSize < 0 || page * pageSize > 1000000) {
int page = MapUtils.getIntValue(paramMap, UfoSearchRequestParams.UFO_PARAM_SEARCH_PAGE, 1);
int pageSize = MapUtils.getIntValue(paramMap, UfoSearchRequestParams.UFO_PARAM_SEARCH_VIEWNUM, 10);
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.获取商品列表
SearchApiResult productListSearchApiResult = this.innerProductList(paramMap,page,pageSize);
SearchApiResult productListSearchApiResult = this.innerProductList(paramMap, page, pageSize);
//3、处理csSearchResourceList
JSONObject productListData = (JSONObject) productListSearchApiResult.getData();
List<Map<String, Object>> csSearchResourceList = csSearchResourceService.queryUfoCsSearchResource(productListData,page,pageSize);
List<Map<String, Object>> csSearchResourceList = csSearchResourceService.queryUfoCsSearchResource(productListData, page, pageSize);
// 4、处理结果并返回
productListData.put("search_resource_list", csSearchResourceList);
return productListSearchApiResult;
... ... @@ -79,28 +79,26 @@ public class UfoUVScoreSceneService {
}
}
private SearchApiResult innerProductList(Map<String, String> paramMap,int page,int pageSize) {
private SearchApiResult innerProductList(Map<String, String> paramMap, int page, int pageSize) {
try {
// 1. 构建SearchParam
SearchParam searchParam = new SearchParam();
//Filter
BoolQueryBuilder boolFilter = this.constructUVScoreFilterBuilder(paramMap);
searchParam.setFiter(boolFilter);
searchParam.setAggregationBuilders(null);
searchParam.setFiter(this.constructUVScoreFilterBuilder(paramMap));
searchParam.setSize(pageSize);
searchParam.setOffset((page - 1) * pageSize);
// 设置排序字段
String rankType = MapUtils.getString(paramMap, UfoSearchRequestParams.UFO_PARAM_RANK_TYPE, "a");
this.constructSortBuilder(searchParam, rankType);
// 设置返回的结果
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 = buildProductReturnInfoList(searchResult.getResultList(), rankType);
// 添加自定义标签
customizeTagBaseService.fillCustomizeTag(returnInfoList, false);
// 构建返回结果
JSONObject dataMap = new JSONObject();
dataMap.put("total", searchResult.getTotal());
dataMap.put("page", searchResult.getPage());
... ... @@ -121,6 +119,7 @@ public class UfoUVScoreSceneService {
boolFilter.must(QueryBuilders.termQuery(UfoProductIndexEsField.shelveStatus, 1));
boolFilter.must(QueryBuilders.rangeQuery(UfoProductIndexEsField.storage).gte(1));
boolFilter.mustNot(QueryBuilders.termQuery(UfoProductIndexEsField.isYoho, "Y"));
// 支持 showChannel参数
ufoSearchQueryHelper.addMustIntTermsQuery(boolFilter, paramMap, UfoSearchRequestParams.UFO_PARAM_SHOW_CHANNEL, UfoProductIndexEsField.showChannel);
return boolFilter;
}
... ...