Showing
11 changed files
with
426 additions
and
8 deletions
@@ -7,8 +7,8 @@ import com.yoho.search.base.utils.ProductIndexEsField; | @@ -7,8 +7,8 @@ import com.yoho.search.base.utils.ProductIndexEsField; | ||
7 | import com.yoho.search.core.es.model.SearchParam; | 7 | import com.yoho.search.core.es.model.SearchParam; |
8 | import com.yoho.search.core.es.model.SearchResult; | 8 | import com.yoho.search.core.es.model.SearchResult; |
9 | import com.yoho.search.models.SearchApiResult; | 9 | import com.yoho.search.models.SearchApiResult; |
10 | -import com.yoho.search.recall.scene.beans.CacheRecallSknRequestResponseBean; | ||
11 | -import com.yoho.search.recall.scene.beans.CacheSknInfoRequestResponseBean; | 10 | +import com.yoho.search.recall.scene.cache.beans.CacheRecallSknRequestResponseBean; |
11 | +import com.yoho.search.recall.scene.cache.beans.CacheSknInfoRequestResponseBean; | ||
12 | import com.yoho.search.recall.scene.strategy.helper.SortBuilderHelper; | 12 | import com.yoho.search.recall.scene.strategy.helper.SortBuilderHelper; |
13 | import com.yoho.search.recall.scene.models.*; | 13 | import com.yoho.search.recall.scene.models.*; |
14 | import com.yoho.search.recall.scene.builder.request.RecallParamsBuilder; | 14 | import com.yoho.search.recall.scene.builder.request.RecallParamsBuilder; |
@@ -31,9 +31,11 @@ public class RecallParamsBuilder { | @@ -31,9 +31,11 @@ public class RecallParamsBuilder { | ||
31 | List<String> firstProductSkns = recallServiceHelper.getFirstProductSkns(paramMap); | 31 | List<String> firstProductSkns = recallServiceHelper.getFirstProductSkns(paramMap); |
32 | 32 | ||
33 | //3、获取uid或udid | 33 | //3、获取uid或udid |
34 | - int uid = MapUtils.getIntValue(paramMap, "uid", 1); | 34 | + int uid = MapUtils.getIntValue(paramMap, "uid", 0); |
35 | String udid = MapUtils.getString(paramMap, "udid", ""); | 35 | String udid = MapUtils.getString(paramMap, "udid", ""); |
36 | - | 36 | + if(uid==0){ |
37 | + uid = (int)(Math.random() * Integer.MAX_VALUE); | ||
38 | + } | ||
37 | return new RecallSknParams(queryFilter,pageSize, firstProductSkns , uid, udid); | 39 | return new RecallSknParams(queryFilter,pageSize, firstProductSkns , uid, udid); |
38 | } | 40 | } |
39 | } | 41 | } |
1 | package com.yoho.search.recall.scene.builder.response; | 1 | package com.yoho.search.recall.scene.builder.response; |
2 | 2 | ||
3 | -import com.yoho.search.recall.scene.beans.CacheRecallRequestResponse; | 3 | +import com.yoho.search.recall.scene.cache.beans.CacheRecallRequestResponse; |
4 | import com.yoho.search.recall.scene.models.RecallRequest; | 4 | import com.yoho.search.recall.scene.models.RecallRequest; |
5 | import com.yoho.search.recall.scene.models.RecallResponse; | 5 | import com.yoho.search.recall.scene.models.RecallResponse; |
6 | import com.yoho.search.recall.scene.models.RecallResponseBatch; | 6 | import com.yoho.search.recall.scene.models.RecallResponseBatch; |
@@ -5,12 +5,10 @@ import com.yoho.search.base.utils.CollectionUtils; | @@ -5,12 +5,10 @@ import com.yoho.search.base.utils.CollectionUtils; | ||
5 | import com.yoho.search.base.utils.Transfer; | 5 | import com.yoho.search.base.utils.Transfer; |
6 | import com.yoho.search.common.cache.impls.EhCache; | 6 | import com.yoho.search.common.cache.impls.EhCache; |
7 | import com.yoho.search.core.redis.components.YohoSearchRedisComponent; | 7 | import com.yoho.search.core.redis.components.YohoSearchRedisComponent; |
8 | -import com.yoho.search.recall.scene.beans.CacheSknInfoRequestResponse; | ||
9 | import org.apache.commons.lang.StringUtils; | 8 | import org.apache.commons.lang.StringUtils; |
10 | import org.slf4j.Logger; | 9 | import org.slf4j.Logger; |
11 | import org.slf4j.LoggerFactory; | 10 | import org.slf4j.LoggerFactory; |
12 | import org.springframework.beans.factory.annotation.Autowired; | 11 | import org.springframework.beans.factory.annotation.Autowired; |
13 | -import org.springframework.stereotype.Component; | ||
14 | 12 | ||
15 | import java.util.*; | 13 | import java.util.*; |
16 | 14 |
service/src/main/java/com/yoho/search/recall/scene/cache/beans/CacheRecallRequestResponse.java
0 → 100644
1 | +package com.yoho.search.recall.scene.cache.beans; | ||
2 | + | ||
3 | +import com.alibaba.fastjson.JSON; | ||
4 | +import com.yoho.core.redis.cluster.operations.serializer.RedisKeyBuilder; | ||
5 | +import com.yoho.search.base.utils.Transfer; | ||
6 | +import com.yoho.search.recall.scene.cache.CacheRequestResponse; | ||
7 | +import com.yoho.search.recall.scene.models.RecallRequest; | ||
8 | +import com.yoho.search.recall.scene.models.RecallResponse; | ||
9 | + | ||
10 | +public class CacheRecallRequestResponse extends CacheRequestResponse<RecallRequest,RecallResponse> { | ||
11 | + | ||
12 | + public CacheRecallRequestResponse(RecallRequest request) { | ||
13 | + super(request); | ||
14 | + } | ||
15 | + | ||
16 | + @Override | ||
17 | + public Transfer<String, RecallResponse> getToResponseTransfer() { | ||
18 | + return toResponseTransfer; | ||
19 | + } | ||
20 | + | ||
21 | + @Override | ||
22 | + public Transfer<RecallResponse, String> getFromResponseTransfer() { | ||
23 | + return fromResponseTransfer; | ||
24 | + } | ||
25 | + | ||
26 | + private static Transfer<String,RecallResponse> toResponseTransfer = new Transfer<String, RecallResponse>() { | ||
27 | + @Override | ||
28 | + public RecallResponse transfer(String jsonValue) { | ||
29 | + return JSON.parseObject(jsonValue, RecallResponse.class); | ||
30 | + } | ||
31 | + }; | ||
32 | + | ||
33 | + private static Transfer<RecallResponse,String> fromResponseTransfer = new Transfer<RecallResponse, String>() { | ||
34 | + @Override | ||
35 | + public String transfer(RecallResponse recallResponse) { | ||
36 | + return JSON.toJSONString(recallResponse); | ||
37 | + } | ||
38 | + }; | ||
39 | +} |
service/src/main/java/com/yoho/search/recall/scene/cache/beans/CacheRecallRequestResponseBean.java
0 → 100644
1 | +package com.yoho.search.recall.scene.cache.beans; | ||
2 | + | ||
3 | +import com.yoho.search.base.utils.ISearchConstants; | ||
4 | +import com.yoho.search.base.utils.ProductIndexEsField; | ||
5 | +import com.yoho.search.core.es.model.SearchParam; | ||
6 | +import com.yoho.search.core.es.model.SearchResult; | ||
7 | +import com.yoho.search.recall.scene.cache.CacheRequestResponseComponent; | ||
8 | +import com.yoho.search.recall.scene.models.RecallRequest; | ||
9 | +import com.yoho.search.recall.scene.models.RecallResponse; | ||
10 | +import com.yoho.search.service.base.SearchCommonService; | ||
11 | +import org.apache.commons.collections.MapUtils; | ||
12 | +import org.springframework.beans.factory.annotation.Autowired; | ||
13 | +import org.springframework.stereotype.Component; | ||
14 | + | ||
15 | +import java.util.ArrayList; | ||
16 | +import java.util.HashMap; | ||
17 | +import java.util.List; | ||
18 | +import java.util.Map; | ||
19 | + | ||
20 | +@Component | ||
21 | +public class CacheRecallRequestResponseBean extends CacheRequestResponseComponent<RecallRequest,RecallResponse,CacheRecallRequestResponse>{ | ||
22 | + | ||
23 | + @Autowired | ||
24 | + private SearchCommonService searchCommonService; | ||
25 | + | ||
26 | + private static final int maxEsRequestCountPerTime = 10; | ||
27 | + | ||
28 | + /** | ||
29 | + * 批量召回入口 | ||
30 | + * | ||
31 | + * @param batchRequests | ||
32 | + * @return | ||
33 | + */ | ||
34 | + public List<CacheRecallRequestResponse> batchRecallAndCache(final List<RecallRequest> batchRequests) { | ||
35 | + //1、构造请求 | ||
36 | + final List<CacheRecallRequestResponse> results = new ArrayList<>(); | ||
37 | + for (RecallRequest request : batchRequests) { | ||
38 | + results.add(new CacheRecallRequestResponse(request)); | ||
39 | + } | ||
40 | + //2、执行查询 | ||
41 | + this.bacthFillResponseWithCache(results,false); | ||
42 | + | ||
43 | + //3、返回结果 | ||
44 | + return results; | ||
45 | + } | ||
46 | + | ||
47 | + @Override | ||
48 | + public Map<RecallRequest, RecallResponse> queryMissCacheRequestResults(List<CacheRecallRequestResponse> missCacheRequests) { | ||
49 | + //1、构造请求参数 | ||
50 | + List<SearchParam> searchParams = new ArrayList<>(); | ||
51 | + for (CacheRecallRequestResponse requestResponse : missCacheRequests) { | ||
52 | + searchParams.add(requestResponse.getRequest().searchParam()); | ||
53 | + //控制每次请求es的数量 | ||
54 | + if(searchParams.size()>=maxEsRequestCountPerTime){ | ||
55 | + break; | ||
56 | + } | ||
57 | + } | ||
58 | + //2、执行搜索 | ||
59 | + List<SearchResult> searchResults = searchCommonService.doMutiSearch(ISearchConstants.INDEX_NAME_PRODUCT_INDEX, searchParams); | ||
60 | + //3、构造返回结果 | ||
61 | + Map<RecallRequest,RecallResponse> notCachedResults = new HashMap<>(); | ||
62 | + for (int i = 0; i < missCacheRequests.size(); i++) { | ||
63 | + RecallRequest request = missCacheRequests.get(i).getRequest(); | ||
64 | + SearchResult searchResult = searchResults.get(i); | ||
65 | + RecallResponse response = this.buildResonse(searchResult); | ||
66 | + notCachedResults.put(request,response); | ||
67 | + } | ||
68 | + return notCachedResults; | ||
69 | + } | ||
70 | + | ||
71 | + private RecallResponse buildResonse(SearchResult searchResult) { | ||
72 | + List<Map<String, Object>> results = searchResult.getResultList(); | ||
73 | + List<RecallResponse.RecallSkn> recallSkns = new ArrayList<>(); | ||
74 | + for (Map<String, Object> result : results) { | ||
75 | + Integer productSkn = MapUtils.getInteger(result, ProductIndexEsField.productSkn, 0); | ||
76 | + Integer brandId = MapUtils.getInteger(result, ProductIndexEsField.brandId, 0); | ||
77 | + Integer middleSortId = MapUtils.getInteger(result, ProductIndexEsField.middleSortId, 0); | ||
78 | + recallSkns.add(new RecallResponse.RecallSkn(productSkn, brandId, middleSortId)); | ||
79 | + } | ||
80 | + return new RecallResponse(searchResult.getTotal(), recallSkns); | ||
81 | + } | ||
82 | + | ||
83 | +} |
service/src/main/java/com/yoho/search/recall/scene/cache/beans/CacheRecallSknRequestResponse.java
0 → 100644
1 | +package com.yoho.search.recall.scene.cache.beans; | ||
2 | + | ||
3 | +import com.alibaba.fastjson.JSON; | ||
4 | +import com.yoho.search.base.utils.Transfer; | ||
5 | +import com.yoho.search.recall.scene.cache.CacheRequestResponse; | ||
6 | +import com.yoho.search.recall.scene.models.RecallSknParams; | ||
7 | +import com.yoho.search.recall.scene.models.RecallSknResult; | ||
8 | + | ||
9 | +public class CacheRecallSknRequestResponse extends CacheRequestResponse<RecallSknParams,RecallSknResult> { | ||
10 | + | ||
11 | + public CacheRecallSknRequestResponse(RecallSknParams request) { | ||
12 | + super(request); | ||
13 | + } | ||
14 | + | ||
15 | + private static Transfer<String,RecallSknResult> toResponseTransfer = new Transfer<String, RecallSknResult>() { | ||
16 | + @Override | ||
17 | + public RecallSknResult transfer(String jsonValue) { | ||
18 | + return JSON.parseObject(jsonValue, RecallSknResult.class); | ||
19 | + } | ||
20 | + }; | ||
21 | + | ||
22 | + private static Transfer<RecallSknResult,String> fromResponseTransfer = new Transfer<RecallSknResult, String>() { | ||
23 | + @Override | ||
24 | + public String transfer(RecallSknResult recallSknResult) { | ||
25 | + return JSON.toJSONString(recallSknResult); | ||
26 | + } | ||
27 | + }; | ||
28 | + | ||
29 | + @Override | ||
30 | + public Transfer<String, RecallSknResult> getToResponseTransfer() { | ||
31 | + return toResponseTransfer; | ||
32 | + } | ||
33 | + | ||
34 | + @Override | ||
35 | + public Transfer<RecallSknResult, String> getFromResponseTransfer() { | ||
36 | + return fromResponseTransfer; | ||
37 | + } | ||
38 | +} |
1 | +package com.yoho.search.recall.scene.cache.beans; | ||
2 | + | ||
3 | +import com.yoho.search.recall.scene.builder.request.BrandRecallRequestBuilder; | ||
4 | +import com.yoho.search.recall.scene.builder.request.CommonRecallRequestBuilder; | ||
5 | +import com.yoho.search.recall.scene.builder.request.SortPriceRecallRequestBuilder; | ||
6 | +import com.yoho.search.recall.scene.builder.response.RecallResponseBatchBuilder; | ||
7 | +import com.yoho.search.recall.scene.builder.response.RecallSknResultBuilder; | ||
8 | +import com.yoho.search.recall.scene.cache.CacheRequestResponseComponent; | ||
9 | +import com.yoho.search.recall.scene.models.RecallRequest; | ||
10 | +import com.yoho.search.recall.scene.models.RecallResponseBatch; | ||
11 | +import com.yoho.search.recall.scene.models.RecallSknParams; | ||
12 | +import com.yoho.search.recall.scene.models.RecallSknResult; | ||
13 | +import com.yoho.search.recall.scene.persional.PersionalFactor; | ||
14 | +import com.yoho.search.recall.scene.persional.RecallPersionalService; | ||
15 | +import org.springframework.beans.factory.annotation.Autowired; | ||
16 | +import org.springframework.stereotype.Component; | ||
17 | + | ||
18 | +import java.util.ArrayList; | ||
19 | +import java.util.HashMap; | ||
20 | +import java.util.List; | ||
21 | +import java.util.Map; | ||
22 | + | ||
23 | +@Component | ||
24 | +public class CacheRecallSknRequestResponseBean extends CacheRequestResponseComponent<RecallSknParams,RecallSknResult,CacheRecallSknRequestResponse>{ | ||
25 | + | ||
26 | + @Autowired | ||
27 | + private RecallPersionalService recallPersionalService; | ||
28 | + @Autowired | ||
29 | + private CacheRecallRequestResponseBean cacheRecallRequestResponseBean; | ||
30 | + @Autowired | ||
31 | + private RecallResponseBatchBuilder recallResponseBatchBuilder; | ||
32 | + @Autowired | ||
33 | + private RecallSknResultBuilder recallSknResultBuilder; | ||
34 | + @Autowired | ||
35 | + private CommonRecallRequestBuilder commonRequestBuilder; | ||
36 | + @Autowired | ||
37 | + private BrandRecallRequestBuilder brandRequestBuilder; | ||
38 | + @Autowired | ||
39 | + private SortPriceRecallRequestBuilder sortPriceRequestBuilder; | ||
40 | + | ||
41 | + /** | ||
42 | + * 召回入口 | ||
43 | + * @param recallSknParams | ||
44 | + * @return | ||
45 | + */ | ||
46 | + public RecallSknResult doRecallSknResult(RecallSknParams recallSknParams){ | ||
47 | + //1、构建请求 | ||
48 | + List<CacheRecallSknRequestResponse> requests = new ArrayList<>(); | ||
49 | + requests.add(new CacheRecallSknRequestResponse(recallSknParams)); | ||
50 | + | ||
51 | + //2、执行父类方法 | ||
52 | + this.bacthFillResponseWithCache(requests,false); | ||
53 | + | ||
54 | + //3、判断 | ||
55 | + if(requests.size()==1 && requests.get(0).getResponse()!=null){ | ||
56 | + return requests.get(0).getResponse(); | ||
57 | + } | ||
58 | + return null; | ||
59 | + } | ||
60 | + | ||
61 | + @Override | ||
62 | + public Map<RecallSknParams, RecallSknResult> queryMissCacheRequestResults(List<CacheRecallSknRequestResponse> missCachseRequests) { | ||
63 | + Map<RecallSknParams, RecallSknResult> results = new HashMap<>(); | ||
64 | + for (CacheRecallSknRequestResponse request: missCachseRequests) { | ||
65 | + RecallSknResult response = this.doRealRecall(request.getRequest()); | ||
66 | + results.put(request.getRequest(),response); | ||
67 | + } | ||
68 | + return results; | ||
69 | + } | ||
70 | + | ||
71 | + /** | ||
72 | + * 真正的召回入口 | ||
73 | + * @param param | ||
74 | + * @return | ||
75 | + */ | ||
76 | + private RecallSknResult doRealRecall(RecallSknParams param) { | ||
77 | + //1、获取个性化因子 | ||
78 | + PersionalFactor persionalFactor = recallPersionalService.queryPersionalFactor(param); | ||
79 | + //2、构造请求 | ||
80 | + List<RecallRequest> batchRequests = this.buildBatchRequests(param, persionalFactor); | ||
81 | + //3、批量召回 | ||
82 | + List<CacheRecallRequestResponse> requestResponses = cacheRecallRequestResponseBean.batchRecallAndCache(batchRequests); | ||
83 | + //4、获取skn列表[去重] | ||
84 | + RecallResponseBatch recallResponseBatch = recallResponseBatchBuilder.buildRecallResponseBatch(requestResponses); | ||
85 | + //5、构造真实结果[排序,截取skn] | ||
86 | + RecallSknResult recallSknResult = recallSknResultBuilder.builderRecallResult(recallResponseBatch, param, persionalFactor); | ||
87 | + return recallSknResult; | ||
88 | + } | ||
89 | + | ||
90 | + /** | ||
91 | + * 批量构造请求 | ||
92 | + * @param param | ||
93 | + * @param persionalFactor | ||
94 | + * @return | ||
95 | + */ | ||
96 | + private List<RecallRequest> buildBatchRequests(RecallSknParams param, PersionalFactor persionalFactor) { | ||
97 | + //1、构造召回请求 | ||
98 | + List<RecallRequest> allRequests = new ArrayList<>(); | ||
99 | + //2、构造非个性化的请求 | ||
100 | + List<RecallRequest> commonRequests = commonRequestBuilder.buildCommonRecallRequests(param.getParamQueryFilter(), param.getFirstProductSkns()); | ||
101 | + allRequests.addAll(commonRequests); | ||
102 | + //4、构建个性化品牌的召回请求 | ||
103 | + List<RecallRequest> brandRequests = brandRequestBuilder.buildBrandRecallRequests(param.getParamQueryFilter(), persionalFactor.getBrandIds()); | ||
104 | + allRequests.addAll(brandRequests); | ||
105 | + //5、构建个性化品牌的召回请求 | ||
106 | + List<RecallRequest> sortPriceRequests = sortPriceRequestBuilder.buildSortPriceRecallRequests(param.getParamQueryFilter(), persionalFactor.getSortPriceAreas()); | ||
107 | + allRequests.addAll(sortPriceRequests); | ||
108 | + return allRequests; | ||
109 | + } | ||
110 | + | ||
111 | + | ||
112 | +} |
service/src/main/java/com/yoho/search/recall/scene/cache/beans/CacheSknInfoRequestResponse.java
0 → 100644
1 | +package com.yoho.search.recall.scene.cache.beans; | ||
2 | + | ||
3 | +import com.alibaba.fastjson.JSON; | ||
4 | +import com.alibaba.fastjson.JSONObject; | ||
5 | +import com.yoho.core.redis.cluster.operations.serializer.RedisKeyBuilder; | ||
6 | +import com.yoho.search.base.utils.Transfer; | ||
7 | +import com.yoho.search.recall.scene.cache.CacheRequestResponse; | ||
8 | +import com.yoho.search.recall.scene.models.SknInfoRequest; | ||
9 | + | ||
10 | +import java.util.HashMap; | ||
11 | +import java.util.Map; | ||
12 | + | ||
13 | +public class CacheSknInfoRequestResponse extends CacheRequestResponse<SknInfoRequest, Map<String, Object>> { | ||
14 | + | ||
15 | + public CacheSknInfoRequestResponse(SknInfoRequest sknInfoRequest) { | ||
16 | + super(sknInfoRequest); | ||
17 | + } | ||
18 | + | ||
19 | + static Transfer<String, Map<String, Object>> toResponseTransfer = new Transfer<String, Map<String, Object>>() { | ||
20 | + @Override | ||
21 | + public Map<String, Object> transfer(String value) { | ||
22 | + Map<String, Object> product = new HashMap<>(); | ||
23 | + product.putAll(JSONObject.parseObject(value)); | ||
24 | + return product; | ||
25 | + } | ||
26 | + }; | ||
27 | + | ||
28 | + static Transfer<Map<String, Object>, String> fromResponseTransfer = new Transfer<Map<String, Object>, String>() { | ||
29 | + @Override | ||
30 | + public String transfer(Map<String, Object> product) { | ||
31 | + return JSON.toJSONString(product); | ||
32 | + } | ||
33 | + }; | ||
34 | + | ||
35 | + @Override | ||
36 | + public Transfer<String, Map<String, Object>> getToResponseTransfer() { | ||
37 | + return toResponseTransfer; | ||
38 | + } | ||
39 | + | ||
40 | + @Override | ||
41 | + public Transfer<Map<String, Object>, String> getFromResponseTransfer() { | ||
42 | + return fromResponseTransfer; | ||
43 | + } | ||
44 | +} |
service/src/main/java/com/yoho/search/recall/scene/cache/beans/CacheSknInfoRequestResponseBean.java
0 → 100644
1 | +package com.yoho.search.recall.scene.cache.beans; | ||
2 | + | ||
3 | + | ||
4 | +import com.yoho.search.base.utils.ISearchConstants; | ||
5 | +import com.yoho.search.base.utils.ProductIndexEsField; | ||
6 | +import com.yoho.search.core.es.model.SearchParam; | ||
7 | +import com.yoho.search.core.es.model.SearchResult; | ||
8 | +import com.yoho.search.recall.scene.cache.CacheRequestResponseComponent; | ||
9 | +import com.yoho.search.recall.scene.models.SknInfoRequest; | ||
10 | +import com.yoho.search.service.base.SearchCommonService; | ||
11 | +import com.yoho.search.service.base.index.ProductIndexBaseService; | ||
12 | +import org.apache.commons.collections.MapUtils; | ||
13 | +import org.elasticsearch.index.query.QueryBuilders; | ||
14 | +import org.springframework.beans.factory.annotation.Autowired; | ||
15 | +import org.springframework.stereotype.Component; | ||
16 | + | ||
17 | +import java.util.ArrayList; | ||
18 | +import java.util.HashMap; | ||
19 | +import java.util.List; | ||
20 | +import java.util.Map; | ||
21 | + | ||
22 | +@Component | ||
23 | +public class CacheSknInfoRequestResponseBean extends CacheRequestResponseComponent<SknInfoRequest,Map<String, Object>,CacheSknInfoRequestResponse>{ | ||
24 | + | ||
25 | + @Autowired | ||
26 | + private SearchCommonService searchCommonService; | ||
27 | + @Autowired | ||
28 | + private ProductIndexBaseService productIndexBaseService; | ||
29 | + | ||
30 | + /** | ||
31 | + * 按skn查询并按顺序返回 | ||
32 | + * | ||
33 | + * @param productSkns | ||
34 | + * @return | ||
35 | + */ | ||
36 | + public List<Map<String, Object>> queryProductListBySkn(List<Integer> productSkns,int size){ | ||
37 | + //1、批量查询SKN信息 | ||
38 | + List<CacheSknInfoRequestResponse> sknInfoCacheRequestRespons = this.batchQuery(productSkns); | ||
39 | + //2、构造返回结果 | ||
40 | + List<Map<String, Object>> finalResults = new ArrayList<>(); | ||
41 | + for (CacheSknInfoRequestResponse sknInfoCacheRequestResponse : sknInfoCacheRequestRespons) { | ||
42 | + if(sknInfoCacheRequestResponse !=null && sknInfoCacheRequestResponse.getResponse()!=null){ | ||
43 | + finalResults.add(sknInfoCacheRequestResponse.getResponse()); | ||
44 | + } | ||
45 | + if(finalResults.size()>=size){ | ||
46 | + break; | ||
47 | + } | ||
48 | + } | ||
49 | + return finalResults; | ||
50 | + } | ||
51 | + | ||
52 | + private List<CacheSknInfoRequestResponse> batchQuery(List<Integer> productSkns){ | ||
53 | + //1、构建请求与返回结果 | ||
54 | + final List<CacheSknInfoRequestResponse> requests = new ArrayList<>(); | ||
55 | + for (Integer productSkn : productSkns) { | ||
56 | + requests.add(new CacheSknInfoRequestResponse(new SknInfoRequest(productSkn))); | ||
57 | + } | ||
58 | + //2、调父类方法 | ||
59 | + this.bacthFillResponseWithCache(requests,true); | ||
60 | + | ||
61 | + //3、返回结果 | ||
62 | + return requests; | ||
63 | + } | ||
64 | + | ||
65 | + @Override | ||
66 | + public Map<SknInfoRequest, Map<String, Object>> queryMissCacheRequestResults(List<CacheSknInfoRequestResponse> missCacheRequests) { | ||
67 | + //1、合法性判断 | ||
68 | + Map<SknInfoRequest,Map<String, Object>> results = new HashMap<>(); | ||
69 | + if(missCacheRequests==null||missCacheRequests.isEmpty()){ | ||
70 | + return results; | ||
71 | + } | ||
72 | + //2、获取skn | ||
73 | + List<Integer> productSkns = new ArrayList<>(); | ||
74 | + for (CacheSknInfoRequestResponse sknInfoCacheRequestResponse : missCacheRequests) { | ||
75 | + productSkns.add(sknInfoCacheRequestResponse.getRequest().getProductSkn()); | ||
76 | + } | ||
77 | + //3、构建SearchParam | ||
78 | + SearchParam searchParam = new SearchParam(); | ||
79 | + searchParam.setOffset(0); | ||
80 | + searchParam.setSize(productSkns.size()); | ||
81 | + searchParam.setFiter(QueryBuilders.termsQuery(ProductIndexEsField.productSkn, productSkns)); | ||
82 | + searchParam.setIncludeFields(productIndexBaseService.getProductIndexIncludeFields()); | ||
83 | + SearchResult searchResult = searchCommonService.doSearch(ISearchConstants.INDEX_NAME_PRODUCT_INDEX, searchParam); | ||
84 | + List<Map<String, Object>> productList = productIndexBaseService.getProductListWithPricePlan(searchResult.getResultList()); | ||
85 | + //4、构建SKN临时结果 | ||
86 | + Map<Integer,Map<String, Object>> productTempMap = new HashMap<>(); | ||
87 | + for (Map<String, Object> product: productList) { | ||
88 | + productTempMap.put(MapUtils.getIntValue(product,"product_skn",0),product); | ||
89 | + } | ||
90 | + //5、构造最终结果 | ||
91 | + for (CacheSknInfoRequestResponse requestResponse :missCacheRequests ) { | ||
92 | + results.put(requestResponse.getRequest(),productTempMap.get(requestResponse.getRequest().getProductSkn())); | ||
93 | + } | ||
94 | + return results; | ||
95 | + } | ||
96 | + | ||
97 | + | ||
98 | + | ||
99 | + | ||
100 | + | ||
101 | + | ||
102 | +} |
@@ -22,7 +22,7 @@ class PersionalFactorUserComponent { | @@ -22,7 +22,7 @@ class PersionalFactorUserComponent { | ||
22 | } | 22 | } |
23 | List<PersionalFactor.SortPriceArea> sortPriceArea = new ArrayList<PersionalFactor.SortPriceArea>(); | 23 | List<PersionalFactor.SortPriceArea> sortPriceArea = new ArrayList<PersionalFactor.SortPriceArea>(); |
24 | for (int i = 0; i < 50; i++) { | 24 | for (int i = 0; i < 50; i++) { |
25 | - sortPriceArea.add(new PersionalFactor.SortPriceArea((int) (Math.random() * 1000), (int) (Math.random() * 3))); | 25 | + sortPriceArea.add(new PersionalFactor.SortPriceArea((int) (Math.random() * 1000), (int) (Math.random() *10))); |
26 | } | 26 | } |
27 | String factor = ""; | 27 | String factor = ""; |
28 | return new PersionalFactor(brandIds, sortPriceArea,factor); | 28 | return new PersionalFactor(brandIds, sortPriceArea,factor); |
-
Please register or login to post a comment