Authored by Zhao

fix cacheaop recommendpromotion

package com.yoho.search.service.scene;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import com.alibaba.fastjson.JSONArray;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
... ... @@ -88,7 +90,7 @@ public class FuzzySceneService extends AbstractSceneService {
// 4、获取自定义标签聚合结果
CompletableFuture<SearchApiResult> customizeTagFuture = CompletableFuture.supplyAsync(() -> sceneAggregationsHelper.secneAggCustomizeTag(this.newParamMap(paramMap)), executor);
// 5、获取促销专题
CompletableFuture<List<Object>> recommendPromotionFuture = CompletableFuture.supplyAsync(() -> recommendService.recommendPromotion(this.newParamMap(paramMap)),
CompletableFuture<SearchApiResult> recommendPromotionFuture = CompletableFuture.supplyAsync(() -> sceneAggregationsHelper.secneAggRecommendPromotion(this.newParamMap(paramMap)),
executor);
// 6、加入建议词
... ... @@ -103,10 +105,15 @@ public class FuzzySceneService extends AbstractSceneService {
}
// 8、组合结果
SearchApiResult customizeTags = customizeTagFuture.get();
List<Object> recommendProducts = recommendPromotionFuture.get();
SearchApiResult recommendProducts = recommendPromotionFuture.get();
JSONObject dataMap = (JSONObject) productListResult.getData();
dataMap.put(CUSTOMIZE_TAG_LIST, customizeTags.getData());
dataMap.put(RECOMMEND_PROMOTION_LIST, recommendProducts);
if (recommendProducts.getData() == null) {
dataMap.put(RECOMMEND_PROMOTION_LIST, Collections.EMPTY_LIST);
} else {
dataMap.put(RECOMMEND_PROMOTION_LIST, subList(recommendProducts.getData(), StringUtils.isBlank(paramMap.get("page")) ? 1 : Integer.parseInt(paramMap.get("page")), 1));
}
return productListResult;
} catch (Exception e) {
logger.error(e.getMessage(), e);
... ... @@ -171,4 +178,24 @@ public class FuzzySceneService extends AbstractSceneService {
// 1.6加入推荐词
dataMap.put("suggestion", searchRecommendService.recommend(searchResult, paramMap));
}
private List<Object> subList(Object source, int page, int count) {
try {
JSONArray sourceList = (JSONArray)source;
if (sourceList != null && !sourceList.isEmpty()) {
int start = (page - 1) * count;
int end = start + count;
if (start >= sourceList.size()) {
return Collections.emptyList();
}
if (end > sourceList.size()) {
end = sourceList.size();
}
return sourceList.subList(start, end);
}
} catch (Exception e) {
return Collections.emptyList();
}
return Collections.emptyList();
}
}
... ...