Authored by hugufei

命中不了时,只召回skn,再查询skn信息

... ... @@ -24,6 +24,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
... ... @@ -78,13 +79,14 @@ public class SceneRecallService {
//1、判断当前页码是否在召回的页码里
int recallTotalPage = recallSknResult.getRecallTotalPage();
//2、在召回结果中则直接根据skn去查询
List<Integer> productSkns = null;
if(page<=recallTotalPage){
List<Integer> productSkns = CollectionUtils.safeSubList(recallSknResult.getSknList(),(page-1)*pageSize,page*pageSize);
return bacthSknInfoComponent.queryProductListBySkn(productSkns,productSkns.size());
}
productSkns = CollectionUtils.safeSubList(recallSknResult.getSknList(),(page-1)*pageSize,page*pageSize);
}else{
//3、过滤召回的skn,修改真实页码,执行查询
int realPage = page - recallTotalPage;
return this.queryProductByFilterSkn(recallSknParams, recallSknResult.getSknList(), realPage, pageSize);
productSkns = this.queryProductSknByFilterSkn(recallSknParams, recallSknResult.getSknList(), recallTotalPage-page, pageSize);
}
return bacthSknInfoComponent.queryProductListBySkn(productSkns,productSkns.size());
}
/**
... ... @@ -94,7 +96,7 @@ public class SceneRecallService {
* @param pageSize
* @return
*/
private List<Map<String, Object>> queryProductByFilterSkn(RecallSknParams recallSknParams,List<Integer> notProductSkns,int realPage,int pageSize){
private List<Integer> queryProductSknByFilterSkn(RecallSknParams recallSknParams,List<Integer> notProductSkns,int realPage,int pageSize){
SearchParam searchParam = new SearchParam();
//1、设置query
... ... @@ -110,7 +112,7 @@ public class SceneRecallService {
searchParam.setSize(pageSize);
//4、设置IncludeFields
searchParam.setIncludeFields(productIndexBaseService.getProductIndexIncludeFields());
searchParam.setIncludeFields(Arrays.asList(ProductIndexEsField.productSkn));
//5、设置排序
List<SortBuilder<?>> sortBuilders = new ArrayList<>();
... ... @@ -119,7 +121,12 @@ public class SceneRecallService {
sortBuilders.add(SortBuilderHelper.getIdDescSort());
searchParam.setSortBuilders(sortBuilders);
SearchResult searchResult = searchCommonService.doSearch(ISearchConstants.INDEX_NAME_PRODUCT_INDEX,searchParam);
return productIndexBaseService.getProductListWithPricePlan(searchResult.getResultList());
List<Integer> results = new ArrayList<>();
for (Map<String, Object> product : searchResult.getResultList()) {
results.add(MapUtils.getIntValue(product,ProductIndexEsField.productSkn,0));
}
return results;
}
}
... ...