|
|
@@ -64,8 +64,18 @@ public class TabService {
|
|
|
TabParam tabParam = this.requestCoverToParam(request);
|
|
|
|
|
|
List<TabProto> tabProtos = new ArrayList<>();
|
|
|
+
|
|
|
+ List<TabProto> personalizationTabs = this.personalizationTab(tabParam);
|
|
|
+
|
|
|
+ String invalidTabCacheKey = String.format(userInvalidTabCache, tabParam.getUnionId());
|
|
|
+ Set<String> invalidTabCache = Optional.ofNullable(redisTemplate.opsForSet().members(invalidTabCacheKey)).orElse(new HashSet<>());
|
|
|
+ personalizationTabs =personalizationTabs.stream()
|
|
|
+ .filter(i -> !invalidTabCache.contains(i.getKey()))
|
|
|
+ .limit(Math.min(personalizationTabs.size(), personalizationTabSize))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ tabProtos.addAll(personalizationTabs);
|
|
|
tabProtos.addAll(this.territoryTab(tabParam));
|
|
|
- tabProtos.addAll(this.personalizationTab(tabParam));
|
|
|
|
|
|
return TabResponse.newBuilder()
|
|
|
.setResult(Result.newBuilder().setCode(1).setMessage("success"))
|
|
|
@@ -85,13 +95,14 @@ public class TabService {
|
|
|
}
|
|
|
|
|
|
private List<TabProto> personalizationTab(TabParam tabParam) {
|
|
|
- List<TabProto> defaultTab = this.buildTabProto(homepageDefaultTab, TabSource.default_hot, TabType.personalization);
|
|
|
- List<TabProto> tabProtos = new ArrayList<>(defaultTab);
|
|
|
+ List<TabProto> tabProtos = new ArrayList<>();
|
|
|
|
|
|
if (StringUtils.isBlank(tabParam.getUnionId())) {
|
|
|
log.error("unionId is empty");
|
|
|
return tabProtos;
|
|
|
}
|
|
|
+ List<TabProto> defaultTab = this.buildTabProto(homepageDefaultTab, TabSource.default_hot, TabType.personalization);
|
|
|
+ tabProtos.addAll(defaultTab);
|
|
|
|
|
|
String key = String.format(personalizationTabCondidateFormat, tabParam.getUnionId());
|
|
|
String value = redisTemplate.opsForValue().get(key);
|
|
|
@@ -120,14 +131,7 @@ public class TabService {
|
|
|
tabProtos.addAll(0, returnCate2Tab);
|
|
|
tabProtos.addAll(0, shareCate2Tab);
|
|
|
tabProtos.addAll(0, profileTab);
|
|
|
-
|
|
|
- String invalidTabCacheKey = String.format(userInvalidTabCache, tabParam.getUnionId());
|
|
|
- Set<String> invalidTabCache = Optional.ofNullable(redisTemplate.opsForSet().members(invalidTabCacheKey)).orElse(new HashSet<>());
|
|
|
-
|
|
|
- return tabProtos
|
|
|
- .stream().filter(i -> !invalidTabCache.contains(i.getKey()))
|
|
|
- .limit(Math.min(tabProtos.size(), personalizationTabSize))
|
|
|
- .collect(Collectors.toList());
|
|
|
+ return tabProtos;
|
|
|
}
|
|
|
|
|
|
private List<TabProto> buildTabProto(List<String> tabNames, TabSource source, TabType type) {
|