Przeglądaj źródła

feat:添加去重逻辑

zhaohaipeng 1 tydzień temu
rodzic
commit
9ab273f655

+ 19 - 14
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/tab/TabService.java

@@ -64,17 +64,18 @@ public class TabService {
         TabParam tabParam = this.requestCoverToParam(request);
 
         List<TabProto> tabProtos = new ArrayList<>();
+        Set<String> tabs = new HashSet<>();
 
-        List<TabProto> personalizationTabs = this.personalizationTab(tabParam);
+        List<TabProto> personalizationTabs = this.personalizationTab(tabParam, tabs);
 
         String invalidTabCacheKey = String.format(userInvalidTabCache, tabParam.getUnionId());
         Set<String> invalidTabCache = Optional.ofNullable(redisTemplate.opsForSet().members(invalidTabCacheKey)).orElse(new HashSet<>());
-        personalizationTabs =personalizationTabs.stream()
+        personalizationTabs = personalizationTabs.stream()
                 .filter(i -> !invalidTabCache.contains(i.getKey()))
                 .limit(Math.min(personalizationTabs.size(), personalizationTabSize))
                 .collect(Collectors.toList());
 
-        tabProtos.addAll(this.territoryTab(tabParam));
+        tabProtos.addAll(this.territoryTab(tabParam, tabs));
         tabProtos.addAll(personalizationTabs);
 
         return TabResponse.newBuilder()
@@ -83,26 +84,26 @@ public class TabService {
                 .build();
     }
 
-    private List<TabProto> territoryTab(TabParam tabParam) {
+    private List<TabProto> territoryTab(TabParam tabParam, Set<String> tabs) {
         List<TabProto> tabProtos = new ArrayList<>();
         // 非中国地域不返回地域Tab
         if (isChinaRegion(tabParam.getProvinceCode())) {
             String province = tabParam.getProvince().replaceAll("省$", "");
-            List<TabProto> provinceTab = this.buildTabProto(Collections.singletonList(province), TabSource.other, TabType.territory);
+            List<TabProto> provinceTab = this.buildTabProto(Collections.singletonList(province), TabSource.other, TabType.territory, tabs);
             tabProtos.addAll(provinceTab);
         }
         return tabProtos;
     }
 
-    private List<TabProto> personalizationTab(TabParam tabParam) {
-        List<TabProto> tabProtos = new ArrayList<>();
+    private List<TabProto> personalizationTab(TabParam tabParam, Set<String> tabs) {
+
+        List<TabProto> defaultTab = this.buildTabProto(homepageDefaultTab, TabSource.default_hot, TabType.personalization, tabs);
+        List<TabProto> tabProtos = new ArrayList<>(defaultTab);
 
         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);
@@ -121,10 +122,10 @@ public class TabService {
 
         log.info("tabCollect: {}", JSON.toJSONString(tabCollect));
 
-        List<TabProto> profileTab = this.buildTabProto(tabCollect.get(0), TabSource.profile, TabType.personalization);
-        List<TabProto> shareCate2Tab = this.buildTabProto(tabCollect.get(1), TabSource.share_cate2, TabType.personalization);
-        List<TabProto> returnCate2Tab = this.buildTabProto(tabCollect.get(2), TabSource.return_cate2, TabType.personalization);
-        List<TabProto> defaultHotTab = this.buildTabProto(tabCollect.get(3), TabSource.default_hot, TabType.personalization);
+        List<TabProto> profileTab = this.buildTabProto(tabCollect.get(0), TabSource.profile, TabType.personalization, tabs);
+        List<TabProto> shareCate2Tab = this.buildTabProto(tabCollect.get(1), TabSource.share_cate2, TabType.personalization, tabs);
+        List<TabProto> returnCate2Tab = this.buildTabProto(tabCollect.get(2), TabSource.return_cate2, TabType.personalization, tabs);
+        List<TabProto> defaultHotTab = this.buildTabProto(tabCollect.get(3), TabSource.default_hot, TabType.personalization, tabs);
 
         // 默认兜底Tab
         tabProtos.addAll(0, defaultHotTab);
@@ -134,7 +135,7 @@ public class TabService {
         return tabProtos;
     }
 
-    private List<TabProto> buildTabProto(List<String> tabNames, TabSource source, TabType type) {
+    private List<TabProto> buildTabProto(List<String> tabNames, TabSource source, TabType type, Set<String> tabs) {
         if (CollectionUtils.isEmpty(tabNames)) {
             return Collections.emptyList();
         }
@@ -143,6 +144,9 @@ public class TabService {
             if (StringUtils.isBlank(tabName)) {
                 continue;
             }
+            if (tabs.contains(tabName)) {
+                continue;
+            }
             tabProtos.add(
                     TabProto.newBuilder()
                             .setKey(tabName)
@@ -151,6 +155,7 @@ public class TabService {
                             .setType(type.getType())
                             .build()
             );
+            tabs.add(tabName);
         }
         return tabProtos;
     }