...
|
...
|
@@ -62,18 +62,21 @@ public class UserRecallResponseBuilder { |
|
|
//6、处理firstSkn-直通车等信息
|
|
|
sknResultList = this.doReRank(userRecallRequest, sknResultList);
|
|
|
|
|
|
//7、分页处理
|
|
|
//7、处理平衡
|
|
|
sknResultList = this.doBalance(userRecallRequest, sknResultList);
|
|
|
|
|
|
//8、分页处理
|
|
|
int pageSize = userRecallRequest.getPageSize();
|
|
|
int recallTotalPage = (sknResultList.size() / pageSize);
|
|
|
int recallTotalCount = Math.min(sknResultList.size(), RecallConfigConstants.USER_MAX_RECALL_COUNT);
|
|
|
int recallTotalPage = recallTotalCount / pageSize;//计算总页数,最小为1。
|
|
|
if (recallTotalPage == 0) {
|
|
|
recallTotalPage = 1;
|
|
|
}
|
|
|
int userMaxRecallCount = RecallConfigConstants.USER_MAX_RECALL_COUNT;
|
|
|
recallTotalPage = Math.min(recallTotalPage, userMaxRecallCount / pageSize);//为用户最多保留X个skn进缓存
|
|
|
sknResultList = SearchCollectionUtils.safeSubList(sknResultList, 0, recallTotalPage * pageSize);
|
|
|
sknResultList = SearchCollectionUtils.safeSubList(sknResultList, 0, recallTotalPage * pageSize);//为用户最多保留X个skn进缓存
|
|
|
|
|
|
RECALL_NEW_LOGGER.info("total recall skn count after merger2 is [{}]", sknResultList.size());
|
|
|
|
|
|
//8、添加日志
|
|
|
//9、添加日志
|
|
|
if (userRecallRequest.openDetailLog()) {
|
|
|
for (RecallMergerResult.SknResult sknResult : sknResultList) {
|
|
|
try {
|
...
|
...
|
@@ -84,7 +87,7 @@ public class UserRecallResponseBuilder { |
|
|
}
|
|
|
}
|
|
|
|
|
|
//9、构造返回结果
|
|
|
//10、构造返回结果
|
|
|
List<RecallSknInfo> sknList = new ArrayList<>();
|
|
|
for (RecallMergerResult.SknResult sknResult : sknResultList) {
|
|
|
sknList.add(new RecallSknInfo(sknResult.getProductSkn(), sknResult.getStrategy().name()));
|
...
|
...
|
@@ -288,9 +291,18 @@ public class UserRecallResponseBuilder { |
|
|
int recallInterval = recallConfigService.queryStrategyConfigInterval(userRecallRequest, strategyEnum, 10);
|
|
|
this.addByIndexIndex(sknResultList, results, fromIndex++, recallInterval, (sknResult -> strategyEnum.equals(sknResult.getStrategy())), dropTransfer);
|
|
|
}
|
|
|
return results;
|
|
|
}
|
|
|
|
|
|
|
|
|
// 4、品牌平衡
|
|
|
results = productListSortHelper.sortProductList(results, new ProductListSortKey<RecallMergerResult.SknResult>() {
|
|
|
/**
|
|
|
* 品牌/品类平衡
|
|
|
*/
|
|
|
private List<RecallMergerResult.SknResult> doBalance(UserRecallRequest userRecallRequest, List<RecallMergerResult.SknResult> results) {
|
|
|
if (!userRecallRequest.isDefaultOrder()) {
|
|
|
return results;
|
|
|
}
|
|
|
List<RecallMergerResult.SknResult> balanceResult = productListSortHelper.sortProductList(results, new ProductListSortKey<RecallMergerResult.SknResult>() {
|
|
|
@Override
|
|
|
public String getSortKey(RecallMergerResult.SknResult product) {
|
|
|
return product.getBrandId() == null ? "default" : product.getBrandId().toString();
|
...
|
...
|
@@ -306,10 +318,10 @@ public class UserRecallResponseBuilder { |
|
|
return 8;
|
|
|
}
|
|
|
});
|
|
|
|
|
|
return results;
|
|
|
return balanceResult;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 单策略召回时,超出数量直接丢弃
|
|
|
*/
|
...
|
...
|
|