Browse Source

homepage recommend

丁云鹏 1 year ago
parent
commit
ba0aa05f70
35 changed files with 810 additions and 293 deletions
  1. 52 52
      recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/HomepageRecommendResponse.java
  2. 9 9
      recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/HomepageRecommendResponseOrBuilder.java
  3. 15 15
      recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/Recommend.java
  4. 59 59
      recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/VideoProto.java
  5. 57 0
      recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/VideoProtoOrBuilder.java
  6. 2 2
      recommend-server-client/src/main/proto/com/tzld/piaoquan/recommend/server/recommend.proto
  7. 19 13
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/common/enums/AppTypeEnum.java
  8. 0 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/grpcservice/RecommendService.java
  9. 0 8
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/RecommendConstants.java
  10. 57 26
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/RecommendService.java
  11. 48 0
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/ThreadPoolFactory.java
  12. 50 0
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/AbstractFilterService.java
  13. 2 0
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/FilterParam.java
  14. 2 50
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/FilterService.java
  15. 0 14
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/FlowPoolFilterService.java
  16. 54 0
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/FlowPoolWithLevelFilterService.java
  17. 54 0
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/FlowPoolWithLevelScoreFilterService.java
  18. 54 0
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/FlowPoolWithScoreFilterService.java
  19. 5 2
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/RegionFilterService.java
  20. 7 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/VideoFilterService.java
  21. 1 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolConfigService.java
  22. 20 0
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolConstants.java
  23. 188 0
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolService.java
  24. 9 10
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/RecallService.java
  25. 8 9
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/SpecialRegionRecallStrategy.java
  26. 2 2
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/AbstractFlowPoolWithLevelRecallStrategy.java
  27. 3 2
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/AbstractFlowPoolWithLevelScoreRecallStrategy.java
  28. 2 2
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/AbstractFlowPoolWithScoreRecallStrategy.java
  29. 1 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/AbstractRegionRecallStrategy.java
  30. 6 3
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/FlowPoolWithLevelRecallStrategy.java
  31. 7 4
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/FlowPoolWithLevelScoreRecallStrategy.java
  32. 5 2
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/FlowPoolWithScoreRecallStrategy.java
  33. 2 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/QuickFlowPoolWithLevelRecallStrategy.java
  34. 5 2
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/QuickFlowPoolWithLevelScoreRecallStrategy.java
  35. 5 2
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/QuickFlowPoolWithScoreRecallStrategy.java

+ 52 - 52
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/HomepageRecommendResponse.java

@@ -69,11 +69,11 @@ private static final long serialVersionUID = 0L;
           }
           case 18: {
             if (!((mutable_bitField0_ & 0x00000001) != 0)) {
-              video_ = new java.util.ArrayList<com.tzld.piaoquan.recommend.server.gen.recommend.Video>();
+              video_ = new java.util.ArrayList<com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto>();
               mutable_bitField0_ |= 0x00000001;
             }
             video_.add(
-                input.readMessage(com.tzld.piaoquan.recommend.server.gen.recommend.Video.parser(), extensionRegistry));
+                input.readMessage(com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.parser(), extensionRegistry));
             break;
           }
           default: {
@@ -138,41 +138,41 @@ private static final long serialVersionUID = 0L;
   }
 
   public static final int VIDEO_FIELD_NUMBER = 2;
-  private java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.Video> video_;
+  private java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto> video_;
   /**
-   * <code>repeated .Video video = 2;</code>
+   * <code>repeated .VideoProto video = 2;</code>
    */
   @java.lang.Override
-  public java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.Video> getVideoList() {
+  public java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto> getVideoList() {
     return video_;
   }
   /**
-   * <code>repeated .Video video = 2;</code>
+   * <code>repeated .VideoProto video = 2;</code>
    */
   @java.lang.Override
-  public java.util.List<? extends com.tzld.piaoquan.recommend.server.gen.recommend.VideoOrBuilder> 
+  public java.util.List<? extends com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder> 
       getVideoOrBuilderList() {
     return video_;
   }
   /**
-   * <code>repeated .Video video = 2;</code>
+   * <code>repeated .VideoProto video = 2;</code>
    */
   @java.lang.Override
   public int getVideoCount() {
     return video_.size();
   }
   /**
-   * <code>repeated .Video video = 2;</code>
+   * <code>repeated .VideoProto video = 2;</code>
    */
   @java.lang.Override
-  public com.tzld.piaoquan.recommend.server.gen.recommend.Video getVideo(int index) {
+  public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto getVideo(int index) {
     return video_.get(index);
   }
   /**
-   * <code>repeated .Video video = 2;</code>
+   * <code>repeated .VideoProto video = 2;</code>
    */
   @java.lang.Override
-  public com.tzld.piaoquan.recommend.server.gen.recommend.VideoOrBuilder getVideoOrBuilder(
+  public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder getVideoOrBuilder(
       int index) {
     return video_.get(index);
   }
@@ -672,22 +672,22 @@ private static final long serialVersionUID = 0L;
       return resultBuilder_;
     }
 
-    private java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.Video> video_ =
+    private java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto> video_ =
       java.util.Collections.emptyList();
     private void ensureVideoIsMutable() {
       if (!((bitField0_ & 0x00000001) != 0)) {
-        video_ = new java.util.ArrayList<com.tzld.piaoquan.recommend.server.gen.recommend.Video>(video_);
+        video_ = new java.util.ArrayList<com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto>(video_);
         bitField0_ |= 0x00000001;
        }
     }
 
     private com.google.protobuf.RepeatedFieldBuilderV3<
-        com.tzld.piaoquan.recommend.server.gen.recommend.Video, com.tzld.piaoquan.recommend.server.gen.recommend.Video.Builder, com.tzld.piaoquan.recommend.server.gen.recommend.VideoOrBuilder> videoBuilder_;
+        com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder> videoBuilder_;
 
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
-    public java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.Video> getVideoList() {
+    public java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto> getVideoList() {
       if (videoBuilder_ == null) {
         return java.util.Collections.unmodifiableList(video_);
       } else {
@@ -695,7 +695,7 @@ private static final long serialVersionUID = 0L;
       }
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
     public int getVideoCount() {
       if (videoBuilder_ == null) {
@@ -705,9 +705,9 @@ private static final long serialVersionUID = 0L;
       }
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
-    public com.tzld.piaoquan.recommend.server.gen.recommend.Video getVideo(int index) {
+    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto getVideo(int index) {
       if (videoBuilder_ == null) {
         return video_.get(index);
       } else {
@@ -715,10 +715,10 @@ private static final long serialVersionUID = 0L;
       }
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
     public Builder setVideo(
-        int index, com.tzld.piaoquan.recommend.server.gen.recommend.Video value) {
+        int index, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto value) {
       if (videoBuilder_ == null) {
         if (value == null) {
           throw new NullPointerException();
@@ -732,10 +732,10 @@ private static final long serialVersionUID = 0L;
       return this;
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
     public Builder setVideo(
-        int index, com.tzld.piaoquan.recommend.server.gen.recommend.Video.Builder builderForValue) {
+        int index, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder builderForValue) {
       if (videoBuilder_ == null) {
         ensureVideoIsMutable();
         video_.set(index, builderForValue.build());
@@ -746,9 +746,9 @@ private static final long serialVersionUID = 0L;
       return this;
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
-    public Builder addVideo(com.tzld.piaoquan.recommend.server.gen.recommend.Video value) {
+    public Builder addVideo(com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto value) {
       if (videoBuilder_ == null) {
         if (value == null) {
           throw new NullPointerException();
@@ -762,10 +762,10 @@ private static final long serialVersionUID = 0L;
       return this;
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
     public Builder addVideo(
-        int index, com.tzld.piaoquan.recommend.server.gen.recommend.Video value) {
+        int index, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto value) {
       if (videoBuilder_ == null) {
         if (value == null) {
           throw new NullPointerException();
@@ -779,10 +779,10 @@ private static final long serialVersionUID = 0L;
       return this;
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
     public Builder addVideo(
-        com.tzld.piaoquan.recommend.server.gen.recommend.Video.Builder builderForValue) {
+        com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder builderForValue) {
       if (videoBuilder_ == null) {
         ensureVideoIsMutable();
         video_.add(builderForValue.build());
@@ -793,10 +793,10 @@ private static final long serialVersionUID = 0L;
       return this;
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
     public Builder addVideo(
-        int index, com.tzld.piaoquan.recommend.server.gen.recommend.Video.Builder builderForValue) {
+        int index, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder builderForValue) {
       if (videoBuilder_ == null) {
         ensureVideoIsMutable();
         video_.add(index, builderForValue.build());
@@ -807,10 +807,10 @@ private static final long serialVersionUID = 0L;
       return this;
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
     public Builder addAllVideo(
-        java.lang.Iterable<? extends com.tzld.piaoquan.recommend.server.gen.recommend.Video> values) {
+        java.lang.Iterable<? extends com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto> values) {
       if (videoBuilder_ == null) {
         ensureVideoIsMutable();
         com.google.protobuf.AbstractMessageLite.Builder.addAll(
@@ -822,7 +822,7 @@ private static final long serialVersionUID = 0L;
       return this;
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
     public Builder clearVideo() {
       if (videoBuilder_ == null) {
@@ -835,7 +835,7 @@ private static final long serialVersionUID = 0L;
       return this;
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
     public Builder removeVideo(int index) {
       if (videoBuilder_ == null) {
@@ -848,16 +848,16 @@ private static final long serialVersionUID = 0L;
       return this;
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
-    public com.tzld.piaoquan.recommend.server.gen.recommend.Video.Builder getVideoBuilder(
+    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder getVideoBuilder(
         int index) {
       return getVideoFieldBuilder().getBuilder(index);
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
-    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoOrBuilder getVideoOrBuilder(
+    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder getVideoOrBuilder(
         int index) {
       if (videoBuilder_ == null) {
         return video_.get(index);  } else {
@@ -865,9 +865,9 @@ private static final long serialVersionUID = 0L;
       }
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
-    public java.util.List<? extends com.tzld.piaoquan.recommend.server.gen.recommend.VideoOrBuilder> 
+    public java.util.List<? extends com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder> 
          getVideoOrBuilderList() {
       if (videoBuilder_ != null) {
         return videoBuilder_.getMessageOrBuilderList();
@@ -876,33 +876,33 @@ private static final long serialVersionUID = 0L;
       }
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
-    public com.tzld.piaoquan.recommend.server.gen.recommend.Video.Builder addVideoBuilder() {
+    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder addVideoBuilder() {
       return getVideoFieldBuilder().addBuilder(
-          com.tzld.piaoquan.recommend.server.gen.recommend.Video.getDefaultInstance());
+          com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.getDefaultInstance());
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
-    public com.tzld.piaoquan.recommend.server.gen.recommend.Video.Builder addVideoBuilder(
+    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder addVideoBuilder(
         int index) {
       return getVideoFieldBuilder().addBuilder(
-          index, com.tzld.piaoquan.recommend.server.gen.recommend.Video.getDefaultInstance());
+          index, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.getDefaultInstance());
     }
     /**
-     * <code>repeated .Video video = 2;</code>
+     * <code>repeated .VideoProto video = 2;</code>
      */
-    public java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.Video.Builder> 
+    public java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder> 
          getVideoBuilderList() {
       return getVideoFieldBuilder().getBuilderList();
     }
     private com.google.protobuf.RepeatedFieldBuilderV3<
-        com.tzld.piaoquan.recommend.server.gen.recommend.Video, com.tzld.piaoquan.recommend.server.gen.recommend.Video.Builder, com.tzld.piaoquan.recommend.server.gen.recommend.VideoOrBuilder> 
+        com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder> 
         getVideoFieldBuilder() {
       if (videoBuilder_ == null) {
         videoBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
-            com.tzld.piaoquan.recommend.server.gen.recommend.Video, com.tzld.piaoquan.recommend.server.gen.recommend.Video.Builder, com.tzld.piaoquan.recommend.server.gen.recommend.VideoOrBuilder>(
+            com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder>(
                 video_,
                 ((bitField0_ & 0x00000001) != 0),
                 getParentForChildren(),

+ 9 - 9
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/HomepageRecommendResponseOrBuilder.java

@@ -23,26 +23,26 @@ public interface HomepageRecommendResponseOrBuilder extends
   com.tzld.piaoquan.recommend.server.gen.common.ResultOrBuilder getResultOrBuilder();
 
   /**
-   * <code>repeated .Video video = 2;</code>
+   * <code>repeated .VideoProto video = 2;</code>
    */
-  java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.Video> 
+  java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto> 
       getVideoList();
   /**
-   * <code>repeated .Video video = 2;</code>
+   * <code>repeated .VideoProto video = 2;</code>
    */
-  com.tzld.piaoquan.recommend.server.gen.recommend.Video getVideo(int index);
+  com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto getVideo(int index);
   /**
-   * <code>repeated .Video video = 2;</code>
+   * <code>repeated .VideoProto video = 2;</code>
    */
   int getVideoCount();
   /**
-   * <code>repeated .Video video = 2;</code>
+   * <code>repeated .VideoProto video = 2;</code>
    */
-  java.util.List<? extends com.tzld.piaoquan.recommend.server.gen.recommend.VideoOrBuilder> 
+  java.util.List<? extends com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder> 
       getVideoOrBuilderList();
   /**
-   * <code>repeated .Video video = 2;</code>
+   * <code>repeated .VideoProto video = 2;</code>
    */
-  com.tzld.piaoquan.recommend.server.gen.recommend.VideoOrBuilder getVideoOrBuilder(
+  com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder getVideoOrBuilder(
       int index);
 }

+ 15 - 15
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/Recommend.java

@@ -25,10 +25,10 @@ public final class Recommend {
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_HomepageRecommendResponse_fieldAccessorTable;
   static final com.google.protobuf.Descriptors.Descriptor
-    internal_static_Video_descriptor;
+    internal_static_VideoProto_descriptor;
   static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
-      internal_static_Video_fieldAccessorTable;
+      internal_static_VideoProto_fieldAccessorTable;
 
   public static com.google.protobuf.Descriptors.FileDescriptor
       getDescriptor() {
@@ -52,16 +52,16 @@ public final class Recommend {
       "o_platform\030\016 \001(\t\022\023\n\013page_source\030\017 \001(\t\022\024\n" +
       "\014version_code\030\020 \001(\005\022\030\n\020recommend_source\030" +
       "\021 \001(\t\022\022\n\nscene_type\030\022 \001(\005\022\032\n\022recommend_t" +
-      "race_id\030\023 \001(\t\"K\n\031HomepageRecommendRespon" +
-      "se\022\027\n\006result\030\001 \001(\0132\007.Result\022\025\n\005video\030\002 \003" +
-      "(\0132\006.Video\"v\n\005Video\022\020\n\010video_id\030\001 \001(\003\022\021\n" +
-      "\trov_score\030\002 \001(\001\022\021\n\tpush_from\030\003 \001(\t\022\017\n\007a" +
-      "b_code\030\004 \001(\t\022\022\n\nsort_score\030\005 \001(\001\022\020\n\010posi" +
-      "tion\030\006 \001(\0052^\n\020RecommendService\022J\n\021Homepa" +
-      "geRecommend\022\031.HomepageRecommendRequest\032\032" +
-      ".HomepageRecommendResponseB7\n0com.tzld.p" +
-      "iaoquan.recommend.server.gen.recommendP\001" +
-      "\210\001\001b\006proto3"
+      "race_id\030\023 \001(\t\"P\n\031HomepageRecommendRespon" +
+      "se\022\027\n\006result\030\001 \001(\0132\007.Result\022\032\n\005video\030\002 \003" +
+      "(\0132\013.VideoProto\"{\n\nVideoProto\022\020\n\010video_i" +
+      "d\030\001 \001(\003\022\021\n\trov_score\030\002 \001(\001\022\021\n\tpush_from\030" +
+      "\003 \001(\t\022\017\n\007ab_code\030\004 \001(\t\022\022\n\nsort_score\030\005 \001" +
+      "(\001\022\020\n\010position\030\006 \001(\0052^\n\020RecommendService" +
+      "\022J\n\021HomepageRecommend\022\031.HomepageRecommen" +
+      "dRequest\032\032.HomepageRecommendResponseB7\n0" +
+      "com.tzld.piaoquan.recommend.server.gen.r" +
+      "ecommendP\001\210\001\001b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -81,11 +81,11 @@ public final class Recommend {
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_HomepageRecommendResponse_descriptor,
         new java.lang.String[] { "Result", "Video", });
-    internal_static_Video_descriptor =
+    internal_static_VideoProto_descriptor =
       getDescriptor().getMessageTypes().get(2);
-    internal_static_Video_fieldAccessorTable = new
+    internal_static_VideoProto_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
-        internal_static_Video_descriptor,
+        internal_static_VideoProto_descriptor,
         new java.lang.String[] { "VideoId", "RovScore", "PushFrom", "AbCode", "SortScore", "Position", });
     com.google.protobuf.AnyProto.getDescriptor();
     com.tzld.piaoquan.recommend.server.gen.common.Common.getDescriptor();

+ 59 - 59
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/Video.java → recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/VideoProto.java

@@ -4,18 +4,18 @@
 package com.tzld.piaoquan.recommend.server.gen.recommend;
 
 /**
- * Protobuf type {@code Video}
+ * Protobuf type {@code VideoProto}
  */
-public final class Video extends
+public final class VideoProto extends
     com.google.protobuf.GeneratedMessageV3 implements
-    // @@protoc_insertion_point(message_implements:Video)
-    VideoOrBuilder {
+    // @@protoc_insertion_point(message_implements:VideoProto)
+    VideoProtoOrBuilder {
 private static final long serialVersionUID = 0L;
-  // Use Video.newBuilder() to construct.
-  private Video(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+  // Use VideoProto.newBuilder() to construct.
+  private VideoProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
     super(builder);
   }
-  private Video() {
+  private VideoProto() {
     pushFrom_ = "";
     abCode_ = "";
   }
@@ -24,7 +24,7 @@ private static final long serialVersionUID = 0L;
   @SuppressWarnings({"unused"})
   protected java.lang.Object newInstance(
       UnusedPrivateParameter unused) {
-    return new Video();
+    return new VideoProto();
   }
 
   @java.lang.Override
@@ -32,7 +32,7 @@ private static final long serialVersionUID = 0L;
   getUnknownFields() {
     return this.unknownFields;
   }
-  private Video(
+  private VideoProto(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
@@ -103,15 +103,15 @@ private static final long serialVersionUID = 0L;
   }
   public static final com.google.protobuf.Descriptors.Descriptor
       getDescriptor() {
-    return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_Video_descriptor;
+    return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_VideoProto_descriptor;
   }
 
   @java.lang.Override
   protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internalGetFieldAccessorTable() {
-    return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_Video_fieldAccessorTable
+    return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_VideoProto_fieldAccessorTable
         .ensureFieldAccessorsInitialized(
-            com.tzld.piaoquan.recommend.server.gen.recommend.Video.class, com.tzld.piaoquan.recommend.server.gen.recommend.Video.Builder.class);
+            com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.class, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder.class);
   }
 
   public static final int VIDEO_ID_FIELD_NUMBER = 1;
@@ -307,10 +307,10 @@ private static final long serialVersionUID = 0L;
     if (obj == this) {
      return true;
     }
-    if (!(obj instanceof com.tzld.piaoquan.recommend.server.gen.recommend.Video)) {
+    if (!(obj instanceof com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto)) {
       return super.equals(obj);
     }
-    com.tzld.piaoquan.recommend.server.gen.recommend.Video other = (com.tzld.piaoquan.recommend.server.gen.recommend.Video) obj;
+    com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto other = (com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto) obj;
 
     if (getVideoId()
         != other.getVideoId()) return false;
@@ -357,69 +357,69 @@ private static final long serialVersionUID = 0L;
     return hash;
   }
 
-  public static com.tzld.piaoquan.recommend.server.gen.recommend.Video parseFrom(
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(
       java.nio.ByteBuffer data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.recommend.Video parseFrom(
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(
       java.nio.ByteBuffer data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.recommend.Video parseFrom(
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(
       com.google.protobuf.ByteString data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.recommend.Video parseFrom(
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(
       com.google.protobuf.ByteString data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.recommend.Video parseFrom(byte[] data)
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(byte[] data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.recommend.Video parseFrom(
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(
       byte[] data,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data, extensionRegistry);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.recommend.Video parseFrom(java.io.InputStream input)
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(java.io.InputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.recommend.Video parseFrom(
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input, extensionRegistry);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.recommend.Video parseDelimitedFrom(java.io.InputStream input)
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseDelimitedFrom(java.io.InputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseDelimitedWithIOException(PARSER, input);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.recommend.Video parseDelimitedFrom(
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseDelimitedFrom(
       java.io.InputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.recommend.Video parseFrom(
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(
       com.google.protobuf.CodedInputStream input)
       throws java.io.IOException {
     return com.google.protobuf.GeneratedMessageV3
         .parseWithIOException(PARSER, input);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.recommend.Video parseFrom(
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
@@ -432,7 +432,7 @@ private static final long serialVersionUID = 0L;
   public static Builder newBuilder() {
     return DEFAULT_INSTANCE.toBuilder();
   }
-  public static Builder newBuilder(com.tzld.piaoquan.recommend.server.gen.recommend.Video prototype) {
+  public static Builder newBuilder(com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto prototype) {
     return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
   }
   @java.lang.Override
@@ -448,26 +448,26 @@ private static final long serialVersionUID = 0L;
     return builder;
   }
   /**
-   * Protobuf type {@code Video}
+   * Protobuf type {@code VideoProto}
    */
   public static final class Builder extends
       com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
-      // @@protoc_insertion_point(builder_implements:Video)
-      com.tzld.piaoquan.recommend.server.gen.recommend.VideoOrBuilder {
+      // @@protoc_insertion_point(builder_implements:VideoProto)
+      com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder {
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_Video_descriptor;
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_VideoProto_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_Video_fieldAccessorTable
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_VideoProto_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tzld.piaoquan.recommend.server.gen.recommend.Video.class, com.tzld.piaoquan.recommend.server.gen.recommend.Video.Builder.class);
+              com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.class, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder.class);
     }
 
-    // Construct using com.tzld.piaoquan.recommend.server.gen.recommend.Video.newBuilder()
+    // Construct using com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.newBuilder()
     private Builder() {
       maybeForceBuilderInitialization();
     }
@@ -503,17 +503,17 @@ private static final long serialVersionUID = 0L;
     @java.lang.Override
     public com.google.protobuf.Descriptors.Descriptor
         getDescriptorForType() {
-      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_Video_descriptor;
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_VideoProto_descriptor;
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.recommend.Video getDefaultInstanceForType() {
-      return com.tzld.piaoquan.recommend.server.gen.recommend.Video.getDefaultInstance();
+    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.getDefaultInstance();
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.recommend.Video build() {
-      com.tzld.piaoquan.recommend.server.gen.recommend.Video result = buildPartial();
+    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto build() {
+      com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto result = buildPartial();
       if (!result.isInitialized()) {
         throw newUninitializedMessageException(result);
       }
@@ -521,8 +521,8 @@ private static final long serialVersionUID = 0L;
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.recommend.Video buildPartial() {
-      com.tzld.piaoquan.recommend.server.gen.recommend.Video result = new com.tzld.piaoquan.recommend.server.gen.recommend.Video(this);
+    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto buildPartial() {
+      com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto result = new com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto(this);
       result.videoId_ = videoId_;
       result.rovScore_ = rovScore_;
       result.pushFrom_ = pushFrom_;
@@ -567,16 +567,16 @@ private static final long serialVersionUID = 0L;
     }
     @java.lang.Override
     public Builder mergeFrom(com.google.protobuf.Message other) {
-      if (other instanceof com.tzld.piaoquan.recommend.server.gen.recommend.Video) {
-        return mergeFrom((com.tzld.piaoquan.recommend.server.gen.recommend.Video)other);
+      if (other instanceof com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto) {
+        return mergeFrom((com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto)other);
       } else {
         super.mergeFrom(other);
         return this;
       }
     }
 
-    public Builder mergeFrom(com.tzld.piaoquan.recommend.server.gen.recommend.Video other) {
-      if (other == com.tzld.piaoquan.recommend.server.gen.recommend.Video.getDefaultInstance()) return this;
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto other) {
+      if (other == com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.getDefaultInstance()) return this;
       if (other.getVideoId() != 0L) {
         setVideoId(other.getVideoId());
       }
@@ -612,11 +612,11 @@ private static final long serialVersionUID = 0L;
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws java.io.IOException {
-      com.tzld.piaoquan.recommend.server.gen.recommend.Video parsedMessage = null;
+      com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parsedMessage = null;
       try {
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        parsedMessage = (com.tzld.piaoquan.recommend.server.gen.recommend.Video) e.getUnfinishedMessage();
+        parsedMessage = (com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto) e.getUnfinishedMessage();
         throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
@@ -914,41 +914,41 @@ private static final long serialVersionUID = 0L;
     }
 
 
-    // @@protoc_insertion_point(builder_scope:Video)
+    // @@protoc_insertion_point(builder_scope:VideoProto)
   }
 
-  // @@protoc_insertion_point(class_scope:Video)
-  private static final com.tzld.piaoquan.recommend.server.gen.recommend.Video DEFAULT_INSTANCE;
+  // @@protoc_insertion_point(class_scope:VideoProto)
+  private static final com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto DEFAULT_INSTANCE;
   static {
-    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.server.gen.recommend.Video();
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto();
   }
 
-  public static com.tzld.piaoquan.recommend.server.gen.recommend.Video getDefaultInstance() {
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto getDefaultInstance() {
     return DEFAULT_INSTANCE;
   }
 
-  private static final com.google.protobuf.Parser<Video>
-      PARSER = new com.google.protobuf.AbstractParser<Video>() {
+  private static final com.google.protobuf.Parser<VideoProto>
+      PARSER = new com.google.protobuf.AbstractParser<VideoProto>() {
     @java.lang.Override
-    public Video parsePartialFrom(
+    public VideoProto parsePartialFrom(
         com.google.protobuf.CodedInputStream input,
         com.google.protobuf.ExtensionRegistryLite extensionRegistry)
         throws com.google.protobuf.InvalidProtocolBufferException {
-      return new Video(input, extensionRegistry);
+      return new VideoProto(input, extensionRegistry);
     }
   };
 
-  public static com.google.protobuf.Parser<Video> parser() {
+  public static com.google.protobuf.Parser<VideoProto> parser() {
     return PARSER;
   }
 
   @java.lang.Override
-  public com.google.protobuf.Parser<Video> getParserForType() {
+  public com.google.protobuf.Parser<VideoProto> getParserForType() {
     return PARSER;
   }
 
   @java.lang.Override
-  public com.tzld.piaoquan.recommend.server.gen.recommend.Video getDefaultInstanceForType() {
+  public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto getDefaultInstanceForType() {
     return DEFAULT_INSTANCE;
   }
 

+ 57 - 0
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/VideoProtoOrBuilder.java

@@ -0,0 +1,57 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/server/recommend.proto
+
+package com.tzld.piaoquan.recommend.server.gen.recommend;
+
+public interface VideoProtoOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:VideoProto)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <code>int64 video_id = 1;</code>
+   * @return The videoId.
+   */
+  long getVideoId();
+
+  /**
+   * <code>double rov_score = 2;</code>
+   * @return The rovScore.
+   */
+  double getRovScore();
+
+  /**
+   * <code>string push_from = 3;</code>
+   * @return The pushFrom.
+   */
+  java.lang.String getPushFrom();
+  /**
+   * <code>string push_from = 3;</code>
+   * @return The bytes for pushFrom.
+   */
+  com.google.protobuf.ByteString
+      getPushFromBytes();
+
+  /**
+   * <code>string ab_code = 4;</code>
+   * @return The abCode.
+   */
+  java.lang.String getAbCode();
+  /**
+   * <code>string ab_code = 4;</code>
+   * @return The bytes for abCode.
+   */
+  com.google.protobuf.ByteString
+      getAbCodeBytes();
+
+  /**
+   * <code>double sort_score = 5;</code>
+   * @return The sortScore.
+   */
+  double getSortScore();
+
+  /**
+   * <code>int32 position = 6;</code>
+   * @return The position.
+   */
+  int getPosition();
+}

+ 2 - 2
recommend-server-client/src/main/proto/com/tzld/piaoquan/recommend/server/recommend.proto

@@ -33,10 +33,10 @@ message HomepageRecommendRequest {
 // https://sls.console.aliyun.com/lognext/project/rov-server/logsearch/info
 message HomepageRecommendResponse {
   Result result = 1;
-  repeated Video video = 2;
+  repeated VideoProto video = 2;
 }
 
-message Video{
+message VideoProto{
   int64 video_id = 1;
   double rov_score = 2;
   string push_from = 3;

+ 19 - 13
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/common/enums/AppTypeEnum.java

@@ -3,6 +3,7 @@ package com.tzld.piaoquan.recommend.server.common.enums;
 /**
  * AppType
  * 目前只维护 0 1 4 13 4个应用
+ *
  * @author supeng
  * @date 2020/08/19
  */
@@ -27,21 +28,26 @@ public enum AppTypeEnum {
     LONGVIDEO(5, "长视频"),
     SHORTVIDEO(6, "短视频"),
     SURPRISE(7, "惊奇视频"),
-    PC(8,"PC端"),
-    CIRCLEAPP(9,"票圈长视频APP"),
-    LONGVIDEOLITE(10,"票圈长视频lite"),
+    PC(8, "PC端"),
+    CIRCLEAPP(9, "票圈长视频APP"),
+    LONGVIDEOLITE(10, "票圈长视频lite"),
     /**
      * 票圈相册小程序
      */
-    ALBUM(11,"票圈相册"),
-    H5(12,"H5端"),
+    ALBUM(11, "票圈相册"),
+    H5(12, "H5端"),
     /**
      * 极速版APP
      */
-    APPSPEED(13,"APP极速"),
-    SMALLSPEED(14,"小程序极速"),
-    ADMIN_CRAWLER(888888,"后台-爬虫"),
-    OTHERS(999999,"其他的调用方,比如后台管理系统");
+    APPSPEED(13, "APP极速"),
+    SMALLSPEED(14, "小程序极速"),
+    WAN_NENG_VIDEO(17, "万能影视屋(票圈|信仰之路)"),
+    LAO_HAO_KAN_VIDEO(18, "老好看视频"),
+    ZUI_JING_QI(19, "票圈最惊奇"),
+    PIAO_QUAN_VIDEO_PLUS(21, "票圈视频+"),
+    JOURNEY(22, "票圈足迹"),
+    ADMIN_CRAWLER(888888, "后台-爬虫"),
+    OTHERS(999999, "其他的调用方,比如后台管理系统");
 
     private Integer code;
     private String desc;
@@ -67,12 +73,12 @@ public enum AppTypeEnum {
         this.desc = desc;
     }
 
-    public static AppTypeEnum valueOf( Integer code ){
-        if(code == null) {
+    public static AppTypeEnum valueOf(Integer code) {
+        if (code == null) {
             return null;
         }
-        for( AppTypeEnum appTypeEnum :AppTypeEnum.values()){
-            if( appTypeEnum.getCode().intValue() == code.intValue() ){
+        for (AppTypeEnum appTypeEnum : AppTypeEnum.values()) {
+            if (appTypeEnum.getCode().intValue() == code.intValue()) {
                 return appTypeEnum;
             }
         }

+ 0 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/grpcservice/RecommendService.java

@@ -16,7 +16,6 @@ public class RecommendService extends RecommendServiceGrpc.RecommendServiceImplB
         HomepageRecommendResponse.Builder builder = HomepageRecommendResponse.newBuilder();
 
 
-
         responseObserver.onNext(builder.build());
         responseObserver.onCompleted();
     }

+ 0 - 8
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/RecommendConstants.java

@@ -1,8 +0,0 @@
-package com.tzld.piaoquan.recommend.server.service;
-
-/**
- * @author dyp
- */
-public class RecommendConstants {
-    public static final String KEY_PRE_VIEWED_FORMAT = "previewed:videos:%s:%s";
-}

+ 57 - 26
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/RecommendService.java

@@ -5,8 +5,12 @@ import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 import com.tzld.piaoquan.recommend.server.gen.common.Result;
 import com.tzld.piaoquan.recommend.server.gen.recommend.HomepageRecommendRequest;
 import com.tzld.piaoquan.recommend.server.gen.recommend.HomepageRecommendResponse;
-import com.tzld.piaoquan.recommend.server.gen.recommend.Video;
+import com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto;
 import com.tzld.piaoquan.recommend.server.model.HomepageRecommendParam;
+import com.tzld.piaoquan.recommend.server.model.Video;
+import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConfigService;
+import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants;
+import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolService;
 import com.tzld.piaoquan.recommend.server.service.rank.RankParam;
 import com.tzld.piaoquan.recommend.server.service.rank.RankResult;
 import com.tzld.piaoquan.recommend.server.service.rank.RankService;
@@ -32,6 +36,7 @@ import org.springframework.util.CollectionUtils;
 import javax.annotation.PostConstruct;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 /**
  * @author dyp
@@ -63,6 +68,8 @@ public class RecommendService {
     private RankService rankService;
     @Autowired
     private PreViewedService preViewedService;
+    @Autowired
+    private FlowPoolService flowPoolService;
 
     @PostConstruct
     public void init() {
@@ -90,16 +97,28 @@ public class RecommendService {
 
         List<Video> videos = videoRecommend(request, param);
 
-        updateCache(request, videos);
+        updateCache(request, param, videos);
+
+        List<VideoProto> vps = new ArrayList<>();
+        for (int i = 0; i < videos.size(); i++) {
+            vps.add(VideoProto.newBuilder()
+                    .setPosition(i + 1)
+                    .setPushFrom(videos.get(i).getPushFrom())
+                    .setAbCode(videos.get(i).getAbCode())
+                    .setVideoId(videos.get(i).getVideoId())
+                    .setRovScore(videos.get(i).getRovScore())
+                    .setSortScore(videos.get(i).getRovScore())
+                    .build());
+        }
 
         return HomepageRecommendResponse.newBuilder()
                 .setResult(Result.newBuilder().setCode(1).setMessage("success"))
-                .addAllVideo(videos)
+                .addAllVideo(vps)
                 .build();
 
     }
 
-    private void updateCache(HomepageRecommendRequest request, List<Video> videos) {
+    private void updateCache(HomepageRecommendRequest request, HomepageRecommendParam param, List<Video> videos) {
         if (StringUtils.isNotBlank(request.getMid())
                 || CollectionUtils.isEmpty(videos)) {
             return;
@@ -111,17 +130,41 @@ public class RecommendService {
         }
 
         preViewedService.updateCache(request.getAppType(), request.getMid(), videoIds);
-        updateLastVideoCache(request, videos);
-
-        // 更新流量池:本地分发数量-1
-        // redis没有这个key 也没有flowPool这个push_form
-        // updateFlowPoolCache(request, videos);
+        updateLastVideoCache(request, param, videos);
+        updateFlowPoolCache(request, param, videos);
 
         // 更新视频限流逻辑:redis没有这个key,而且代码中无引用
 
     }
 
-    private void updateLastVideoCache(HomepageRecommendRequest request, List<Video> videos) {
+    private void updateFlowPoolCache(HomepageRecommendRequest request, HomepageRecommendParam param,
+                                     List<Video> videos) {
+        if (request.getAppType() == 18
+                || request.getAppType() == 19
+                || CollectionUtils.isEmpty(videos)) {
+            return;
+        }
+
+        List<Video> flowPoolVideos = videos.stream()
+                .filter(v -> v.getPushFrom().equals(FlowPoolConstants.PUSH_FORM))
+                .collect(Collectors.toList());
+
+
+        switch (param.getFlow_pool_abtest_group()) {
+            case FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL:
+                flowPoolService.updateLocalDistributeCountWithLevel(flowPoolVideos);
+                break;
+            case FlowPoolConstants.EXPERIMENTAL_FLOW_SET_LEVEL_SCORE:
+                flowPoolService.updateLocalDistributeCountWithLevelScore(flowPoolVideos);
+                break;
+            default:
+                flowPoolService.updateLocalDistributeCount(flowPoolVideos);
+                break;
+        }
+    }
+
+    private void updateLastVideoCache(HomepageRecommendRequest request, HomepageRecommendParam param,
+                                      List<Video> videos) {
         // 2 地域小时最后一个视频
         for (int i = videos.size() - 1; i >= 0; i--) {
             if (videos.get(i).equals(RegionHRecallStrategy.PUSH_FORM)) {
@@ -174,21 +217,9 @@ public class RecommendService {
 
         // 只返回size条数据
         List<Video> videos = new ArrayList<>();
-        int size = request.getSize() < result.getVideos().size()
-                ? request.getSize()
-                : result.getVideos().size();
-
-        for (int i = 0; i < size; i++) {
-            videos.add(Video.newBuilder()
-                    .setPosition(i + 1)
-                    .setPushFrom(videos.get(i).getPushFrom())
-                    .setAbCode(videos.get(i).getAbCode())
-                    .setVideoId(videos.get(i).getVideoId())
-                    .setRovScore(videos.get(i).getRovScore())
-                    .setSortScore(videos.get(i).getRovScore())
-                    .build());
+        if (request.getSize() < result.getVideos().size()) {
+            return videos.subList(0, request.getSize());
         }
-
         return videos;
     }
 
@@ -313,7 +344,7 @@ public class RecommendService {
 
         int getSize = request.getSize() * 5;
         int freq = 0;
-        List<Video> results = new ArrayList<>();
+        List<VideoProto> results = new ArrayList<>();
         while (results.size() < request.getSize()) {
             freq += 1;
             if (freq > 2) {
@@ -325,7 +356,7 @@ public class RecommendService {
             }
             idx += getSize;
             data.stream().forEach(t ->
-                    results.add(Video.newBuilder()
+                    results.add(VideoProto.newBuilder()
                             .setVideoId(Long.getLong(t.getValue(), 0L))
                             .setRovScore(t.getScore())
                             .setAbCode("99999")

+ 48 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/ThreadPoolFactory.java

@@ -0,0 +1,48 @@
+package com.tzld.piaoquan.recommend.server.service;
+
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * @author dyp
+ */
+public final class ThreadPoolFactory {
+    private final static ExecutorService DEFAULT = new ThreadPoolExecutor(
+            4,
+            16,
+            0L, TimeUnit.SECONDS,
+            new LinkedBlockingQueue<>(1000),
+            new ThreadFactoryBuilder().setNameFormat("RecallService-%d").build(),
+            new ThreadPoolExecutor.AbortPolicy());
+    public final static ExecutorService RECALL = new ThreadPoolExecutor(
+            4,
+            16,
+            0L, TimeUnit.SECONDS,
+            new LinkedBlockingQueue<>(1000),
+            new ThreadFactoryBuilder().setNameFormat("RecallService-%d").build(),
+            new ThreadPoolExecutor.AbortPolicy());
+
+    public final static ExecutorService SPECIAL_REGION = new ThreadPoolExecutor(
+            4,
+            16,
+            0L, TimeUnit.SECONDS,
+            new LinkedBlockingQueue<>(1000),
+            new ThreadFactoryBuilder().setNameFormat("RecallService-%d").build(),
+            new ThreadPoolExecutor.AbortPolicy());
+
+    public static ExecutorService defaultPool() {
+        return DEFAULT;
+    }
+
+    public static ExecutorService recallPool() {
+        return RECALL;
+    }
+
+    public static ExecutorService specialRegionPool() {
+        return SPECIAL_REGION;
+    }
+}

+ 50 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/AbstractFilterService.java

@@ -0,0 +1,50 @@
+package com.tzld.piaoquan.recommend.server.service.filter;
+
+import com.tzld.piaoquan.recommend.server.service.PreViewedService;
+import com.tzld.piaoquan.recommend.server.service.ViewedService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @author dyp
+ */
+public abstract class AbstractFilterService implements  FilterService {
+    @Autowired
+    private PreViewedService preViewedService;
+
+    @Autowired
+    private ViewedService viewedService;
+
+    protected List<Long> viewFilter(FilterParam param) {
+        List<Long> videoIds = filterByPreViewed(param.getAppType(), param.getMid(), param.getVideoIds());
+        videoIds = filterByViewed(param.getAppType(), param.getMid(), param.getUid(), videoIds);
+        return videoIds;
+    }
+
+    private List<Long> filterByViewed(int appType, String mid, String uid, List<Long> videoIds) {
+        // TODO uid为空时,还需要过滤么?
+        if (StringUtils.isBlank(mid)
+                || CollectionUtils.isEmpty(videoIds)) {
+            return videoIds;
+        }
+        return viewedService.filterViewedVideo(appType, mid, uid, videoIds);
+
+    }
+
+    private List<Long> filterByPreViewed(int appType, String mid, List<Long> videoIds) {
+
+        if (StringUtils.isBlank(mid)) {
+            return videoIds;
+        }
+        Set<Long> preViewedVideoIds = preViewedService.getVideoIds(appType, mid);
+        return videoIds.stream()
+                .filter(l -> !preViewedVideoIds.contains(l))
+                .collect(Collectors.toList());
+
+    }
+}

+ 2 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/FilterParam.java

@@ -3,6 +3,7 @@ package com.tzld.piaoquan.recommend.server.service.filter;
 import lombok.Data;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author dyp
@@ -10,6 +11,7 @@ import java.util.List;
 @Data
 public class FilterParam {
     private List<Long> videoIds;
+    private Map<Long, String> flowPoolMap;
     private String requestId;
     private int appType;
     private String mid;

+ 2 - 50
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/FilterService.java

@@ -1,53 +1,5 @@
 package com.tzld.piaoquan.recommend.server.service.filter;
 
-import com.tzld.piaoquan.recommend.server.service.PreViewedService;
-import com.tzld.piaoquan.recommend.server.service.ViewedService;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-/**
- * @author dyp
- */
-public abstract class FilterService {
-    @Autowired
-    private PreViewedService preViewedService;
-
-    @Autowired
-    private ViewedService viewedService;
-
-    public FilterResult filter(FilterParam param) {
-        List<Long> videoIds = filterByPreViewed(param.getAppType(), param.getMid(), param.getVideoIds());
-        if (CollectionUtils.isEmpty(videoIds)) {
-            return new FilterResult(videoIds);
-        }
-        videoIds = filterByViewed(param.getAppType(), param.getMid(), param.getUid(), videoIds);
-
-        return new FilterResult(videoIds);
-    }
-
-    protected List<Long> filterByViewed(int appType, String mid, String uid, List<Long> videoIds) {
-        // TODO uid为空时,还需要过滤么?
-        if (StringUtils.isBlank(mid)) {
-            return videoIds;
-        }
-        return viewedService.filterViewedVideo(appType, mid, uid, videoIds);
-
-    }
-
-    protected List<Long> filterByPreViewed(int appType, String mid, List<Long> videoIds) {
-
-        if (StringUtils.isBlank(mid)) {
-            return videoIds;
-        }
-        Set<Long> preViewedVideoIds = preViewedService.getVideoIds(appType, mid);
-        return videoIds.stream()
-                .filter(l -> !preViewedVideoIds.contains(l))
-                .collect(Collectors.toList());
-
-    }
+public interface FilterService {
+    FilterResult filter(FilterParam param);
 }

+ 0 - 14
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/FlowPoolFilterService.java

@@ -1,14 +0,0 @@
-package com.tzld.piaoquan.recommend.server.service.filter;
-
-import org.apache.commons.collections4.CollectionUtils;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * @author dyp
- */
-@Service
-public class FlowPoolFilterService extends FilterService {
-
-}

+ 54 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/FlowPoolWithLevelFilterService.java

@@ -0,0 +1,54 @@
+package com.tzld.piaoquan.recommend.server.service.filter;
+
+import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author dyp
+ */
+@Service
+public class FlowPoolWithLevelFilterService extends AbstractFilterService {
+    @Autowired
+    private FlowPoolService flowPoolService;
+
+    public FilterResult filter(FilterParam param) {
+        List<Long> videoIds = viewFilter(param);
+
+        videoIds = filterDistributeCountAndDel(param, videoIds);
+
+        return new FilterResult(videoIds);
+    }
+
+    private List<Long> filterDistributeCountAndDel(FilterParam param, List<Long> videoIds) {
+        if (CollectionUtils.isEmpty(videoIds)
+                || MapUtils.isEmpty(param.getFlowPoolMap())) {
+            return videoIds;
+        }
+        Map<Long, String> flowPoolMap = videoIds.stream()
+                .filter(v -> param.getFlowPoolMap().containsKey(v)
+                        && StringUtils.isNotBlank(param.getFlowPoolMap().get(v)))
+                .collect(Collectors.toMap(
+                        v -> v,
+                        v -> param.getFlowPoolMap().get(v)));
+
+        Map<Long, Integer> distributeCountMap = flowPoolService.getLocalDistributeCountWithLevel(flowPoolMap);
+
+        List<Long> remainVideoIds = new ArrayList<>();
+        for (Long videoId : videoIds) {
+            if (distributeCountMap.get(videoId) != null
+                    && distributeCountMap.get(videoId) > 0) {
+                remainVideoIds.add(videoId);
+            }
+        }
+        return remainVideoIds;
+    }
+}

+ 54 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/FlowPoolWithLevelScoreFilterService.java

@@ -0,0 +1,54 @@
+package com.tzld.piaoquan.recommend.server.service.filter;
+
+import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author dyp
+ */
+@Service
+public class FlowPoolWithLevelScoreFilterService extends AbstractFilterService {
+    @Autowired
+    private FlowPoolService flowPoolService;
+
+    public FilterResult filter(FilterParam param) {
+        List<Long> videoIds = viewFilter(param);
+
+        videoIds = filterDistributeCountAndDel(param, videoIds);
+
+        return new FilterResult(videoIds);
+    }
+
+    private List<Long> filterDistributeCountAndDel(FilterParam param, List<Long> videoIds) {
+        if (CollectionUtils.isEmpty(videoIds)
+                || MapUtils.isEmpty(param.getFlowPoolMap())) {
+            return videoIds;
+        }
+        Map<Long, String> flowPoolMap = videoIds.stream()
+                .filter(v -> param.getFlowPoolMap().containsKey(v)
+                        && StringUtils.isNotBlank(param.getFlowPoolMap().get(v)))
+                .collect(Collectors.toMap(
+                        v -> v,
+                        v -> param.getFlowPoolMap().get(v)));
+
+        Map<Long, Integer> distributeCountMap = flowPoolService.getLocalDistributeCountWithLevelScore(flowPoolMap);
+
+        List<Long> remainVideoIds = new ArrayList<>();
+        for (Long videoId : videoIds) {
+            if (distributeCountMap.get(videoId) != null
+                    && distributeCountMap.get(videoId) > 0) {
+                remainVideoIds.add(videoId);
+            }
+        }
+        return remainVideoIds;
+    }
+}

+ 54 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/FlowPoolWithScoreFilterService.java

@@ -0,0 +1,54 @@
+package com.tzld.piaoquan.recommend.server.service.filter;
+
+import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author dyp
+ */
+@Service
+public class FlowPoolWithScoreFilterService extends AbstractFilterService {
+    @Autowired
+    private FlowPoolService flowPoolService;
+
+    public FilterResult filter(FilterParam param) {
+        List<Long> videoIds = viewFilter(param);
+
+        videoIds = filterDistributeCountAndDel(param, videoIds);
+
+        return new FilterResult(videoIds);
+    }
+
+    private List<Long> filterDistributeCountAndDel(FilterParam param, List<Long> videoIds) {
+        if (CollectionUtils.isEmpty(videoIds)
+                || MapUtils.isEmpty(param.getFlowPoolMap())) {
+            return videoIds;
+        }
+        Map<Long, String> flowPoolMap = videoIds.stream()
+                .filter(v -> param.getFlowPoolMap().containsKey(v)
+                        && StringUtils.isNotBlank(param.getFlowPoolMap().get(v)))
+                .collect(Collectors.toMap(
+                        v -> v,
+                        v -> param.getFlowPoolMap().get(v)));
+
+        Map<Long, Integer> distributeCountMap = flowPoolService.getLocalDistributeCountWithScore(flowPoolMap);
+
+        List<Long> remainVideoIds = new ArrayList<>();
+        for (Long videoId : videoIds) {
+            if (distributeCountMap.get(videoId) != null
+                    && distributeCountMap.get(videoId) > 0) {
+                remainVideoIds.add(videoId);
+            }
+        }
+        return remainVideoIds;
+    }
+}

+ 5 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/RegionFilterService.java

@@ -1,6 +1,5 @@
 package com.tzld.piaoquan.recommend.server.service.filter;
 
-import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -9,6 +8,10 @@ import java.util.List;
  * @author dyp
  */
 @Service
-public class RegionFilterService extends FilterService {
+public class RegionFilterService extends AbstractFilterService {
+    public FilterResult filter(FilterParam param) {
+        List<Long> videoIds = viewFilter(param);
 
+        return new FilterResult(videoIds);
+    }
 }

+ 7 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/VideoFilterService.java

@@ -2,10 +2,16 @@ package com.tzld.piaoquan.recommend.server.service.filter;
 
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @author dyp
  */
 @Service
-public class VideoFilterService extends FilterService {
+public class VideoFilterService extends AbstractFilterService {
+    public FilterResult filter(FilterParam param) {
+        List<Long> videoIds = viewFilter(param);
 
+        return new FilterResult(videoIds);
+    }
 }

+ 1 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/FlowPoolConfigService.java → recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolConfigService.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.recommend.server.service;
+package com.tzld.piaoquan.recommend.server.service.flowpool;
 
 import com.alibaba.fastjson.JSONObject;
 import com.google.common.cache.CacheBuilder;

+ 20 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolConstants.java

@@ -0,0 +1,20 @@
+package com.tzld.piaoquan.recommend.server.service.flowpool;
+
+/**
+ * @author dyp
+ */
+public class FlowPoolConstants {
+    public static final String EXPERIMENTAL_FLOW_SET_LEVEL = "experimental_flow_set_level";
+    public static final String EXPERIMENTAL_FLOW_SET_LEVEL_SCORE = "experimental_flow_set_level_score";
+
+    public static final String PUSH_FORM = "flow_pool";
+
+    public static final String KEY_WITH_LEVEL_FORMAT = "flow:pool:level:item:%s:%s";
+    public static final String KEY_QUICK_WITH_LEVEL_FORMAT = "flow:pool:quick:item:%s:3";
+    public static final String KEY_WITH_LEVEL_SCORE_FORMAT = "flow:pool:level:item:score:%s:%s";
+    public static final String KEY_QUICK_WITH_LEVEL_SCORE_FORMAT = "flow:pool:quick:item:score:%s:3";
+
+    public static final String KEY_WITH_SCORE_FORMAT = "flow:pool:item:score:%s";
+    public static final String KEY_QUICK_WITH_SCORE_FORMAT = "flow:pool:quick:item:score:%s:3";
+
+}

+ 188 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/flowpool/FlowPoolService.java

@@ -0,0 +1,188 @@
+package com.tzld.piaoquan.recommend.server.service.flowpool;
+
+import com.tzld.piaoquan.recommend.server.service.ThreadPoolFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.MapUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.stream.Collectors;
+
+import static com.tzld.piaoquan.recommend.server.common.enums.AppTypeEnum.*;
+import static com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants.*;
+
+/**
+ * @author dyp
+ */
+@Service
+@Slf4j
+public class FlowPoolService {
+    @Autowired
+    private RedisTemplate<String, Integer> redisTemplate;
+    @Autowired
+    private FlowPoolConfigService flowPoolConfigService;
+
+    private final String localDistributeCountFormat = "flow:pool:local:distribute:count:%s:%s";
+
+    public final String valueFormat = "%s-%s";
+
+    private ExecutorService pool = ThreadPoolFactory.defaultPool();
+
+    private int[] appTypes = {VLOG.getCode(), LOVEMOVIE.getCode(), LOVELIVE.getCode(), LONGVIDEO.getCode(),
+            SHORTVIDEO.getCode(), H5.getCode(), APPSPEED.getCode(), WAN_NENG_VIDEO.getCode(),
+            LAO_HAO_KAN_VIDEO.getCode(), ZUI_JING_QI.getCode(), PIAO_QUAN_VIDEO_PLUS.getCode(), JOURNEY.getCode()};
+
+
+    public Map<Long, Integer> getLocalDistributeCountWithLevel(Map<Long, String> videoFlowPoolMap) {
+        if (MapUtils.isEmpty(videoFlowPoolMap)) {
+            return Collections.emptyMap();
+        }
+
+        Map<Long, Integer> result = getDistributeCount(videoFlowPoolMap);
+
+
+        // 处理脏数据:分发数<0
+        Map<Long, String> dirties = videoFlowPoolMap.entrySet().stream()
+                .filter(e -> result.get(e.getKey()) <= 0)
+                .collect(Collectors.toMap(
+                        e -> e.getKey(),
+                        e -> e.getValue()
+                ));
+        asyncDelLocalDistributeCountWithLevel(dirties);
+
+        return result;
+    }
+
+    private Map<Long, Integer> getDistributeCount(Map<Long, String> videoFlowPoolMap) {
+        // 为了保证有序
+        List<Map.Entry<Long, String>> entries =
+                videoFlowPoolMap.entrySet().stream().sorted().collect(Collectors.toList());
+
+        List<String> keys = entries.stream()
+                .map(v -> String.format(localDistributeCountFormat, v.getKey(), v.getValue()))
+                .collect(Collectors.toList());
+        List<Integer> counts = redisTemplate.opsForValue().multiGet(keys);
+
+        Map<Long, Integer> result = new HashMap<>();
+        for (int i = 0; i < entries.size(); i++) {
+            result.put(entries.get(i).getKey(), counts.get(i));
+        }
+        return result;
+    }
+
+    private void asyncDelLocalDistributeCountWithLevel(Map<Long, String> videoFlowPoolMap) {
+        if (MapUtils.isEmpty(videoFlowPoolMap)) {
+            return;
+        }
+        pool.execute(() -> {
+            List<String> keys = videoFlowPoolMap.entrySet().stream()
+                    .map(v -> String.format(localDistributeCountFormat, v.getKey(), v.getValue()))
+                    .collect(Collectors.toList());
+            redisTemplate.delete(keys);
+
+            Map<String, Double> levelWeight = flowPoolConfigService.getLevelWeight();
+            List<String> values = videoFlowPoolMap.entrySet().stream()
+                    .map(v -> String.format(valueFormat, v.getKey(), v.getValue()))
+                    .collect(Collectors.toList());
+            for (String level : levelWeight.keySet()) {
+                for (int appType : appTypes) {
+                    redisTemplate.opsForSet().remove(String.format(KEY_WITH_LEVEL_FORMAT, appType, level), values);
+                    redisTemplate.opsForSet().remove(String.format(KEY_QUICK_WITH_LEVEL_FORMAT, appType), values);
+                }
+            }
+        });
+    }
+
+    public Map<Long, Integer> getLocalDistributeCountWithLevelScore(Map<Long, String> videoFlowPoolMap) {
+        if (MapUtils.isEmpty(videoFlowPoolMap)) {
+            return Collections.emptyMap();
+        }
+
+        Map<Long, Integer> result = getDistributeCount(videoFlowPoolMap);
+
+
+        // 处理脏数据:分发数<0
+        Map<Long, String> dirties = videoFlowPoolMap.entrySet().stream()
+                .filter(e -> result.get(e.getKey()) <= 0)
+                .collect(Collectors.toMap(
+                        e -> e.getKey(),
+                        e -> e.getValue()
+                ));
+        asyncDelLocalDistributeCountWithLevelScore(dirties);
+
+        return result;
+    }
+
+    private void asyncDelLocalDistributeCountWithLevelScore(Map<Long, String> videoFlowPoolMap) {
+        if (MapUtils.isEmpty(videoFlowPoolMap)) {
+            return;
+        }
+        pool.execute(() -> {
+            List<String> keys = videoFlowPoolMap.entrySet().stream()
+                    .map(v -> String.format(localDistributeCountFormat, v.getKey(), v.getValue()))
+                    .collect(Collectors.toList());
+            redisTemplate.delete(keys);
+
+            Map<String, Double> levelWeight = flowPoolConfigService.getLevelWeight();
+            List<String> values = videoFlowPoolMap.entrySet().stream()
+                    .map(v -> String.format(valueFormat, v.getKey(), v.getValue()))
+                    .collect(Collectors.toList());
+            for (String level : levelWeight.keySet()) {
+                for (int appType : appTypes) {
+                    redisTemplate.opsForZSet().remove(String.format(KEY_WITH_LEVEL_SCORE_FORMAT, appType, level), values);
+                    redisTemplate.opsForZSet().remove(String.format(KEY_QUICK_WITH_LEVEL_SCORE_FORMAT, appType), values);
+                }
+            }
+        });
+    }
+
+    public Map<Long, Integer> getLocalDistributeCountWithScore(Map<Long, String> videoFlowPoolMap) {
+        if (MapUtils.isEmpty(videoFlowPoolMap)) {
+            return Collections.emptyMap();
+        }
+
+        Map<Long, Integer> result = getDistributeCount(videoFlowPoolMap);
+
+
+        // 处理脏数据:分发数<0
+        Map<Long, String> dirties = videoFlowPoolMap.entrySet().stream()
+                .filter(e -> result.get(e.getKey()) <= 0)
+                .collect(Collectors.toMap(
+                        e -> e.getKey(),
+                        e -> e.getValue()
+                ));
+        asyncDelLocalDistributeCountWithScore(dirties);
+
+        return result;
+    }
+
+    private void asyncDelLocalDistributeCountWithScore(Map<Long, String> videoFlowPoolMap) {
+        if (MapUtils.isEmpty(videoFlowPoolMap)) {
+            return;
+        }
+        pool.execute(() -> {
+            List<String> keys = videoFlowPoolMap.entrySet().stream()
+                    .map(v -> String.format(localDistributeCountFormat, v.getKey(), v.getValue()))
+                    .collect(Collectors.toList());
+            redisTemplate.delete(keys);
+
+            Map<String, Double> levelWeight = flowPoolConfigService.getLevelWeight();
+            List<String> values = videoFlowPoolMap.entrySet().stream()
+                    .map(v -> String.format(valueFormat, v.getKey(), v.getValue()))
+                    .collect(Collectors.toList());
+            for (String level : levelWeight.keySet()) {
+                for (int appType : appTypes) {
+                    redisTemplate.opsForZSet().remove(String.format(KEY_WITH_SCORE_FORMAT, appType, level), values);
+                    redisTemplate.opsForZSet().remove(String.format(KEY_QUICK_WITH_SCORE_FORMAT, appType), values);
+                }
+            }
+        });
+    }
+
+}

+ 9 - 10
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/RecallService.java

@@ -1,7 +1,7 @@
 package com.tzld.piaoquan.recommend.server.service.recall;
 
-import com.google.common.util.concurrent.ThreadFactoryBuilder;
 import com.tzld.piaoquan.recommend.server.model.Video;
+import com.tzld.piaoquan.recommend.server.service.ThreadPoolFactory;
 import com.tzld.piaoquan.recommend.server.service.recall.strategy.*;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
@@ -12,7 +12,10 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
 import java.util.*;
-import java.util.concurrent.*;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
 
 /**
  * @author dyp
@@ -23,14 +26,10 @@ public class RecallService implements ApplicationContextAware {
 
     private final Map<String, RecallStrategy> strategyMap = new HashMap<>();
     private ApplicationContext applicationContext;
-    private ExecutorService pool;
+    private ExecutorService pool = ThreadPoolFactory.recallPool();
 
     @PostConstruct
     public void init() {
-        // init thread pool
-        pool = new ThreadPoolExecutor(8, 32,
-                0L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(1000),
-                new ThreadFactoryBuilder().setNameFormat("video-title-%d").build(), new ThreadPoolExecutor.AbortPolicy());
         Map<String, RecallStrategy> type = applicationContext.getBeansOfType(RecallStrategy.class);
         for (Map.Entry<String, RecallStrategy> entry : type.entrySet()) {
             RecallStrategy value = entry.getValue();
@@ -93,7 +92,7 @@ public class RecallService implements ApplicationContextAware {
                 }
                 List<Video> simRecall = null;
                 List<Video> returnRecall = null;
-                if (param.getAppType().equals("18") || param.getAppType().equals("19")) {
+                if (param.getAppType() == 18 || param.getAppType() == 19) {
                     simRecall = results.get(1);
                 } else {
                     if (results.size() >= 4) {
@@ -129,7 +128,7 @@ public class RecallService implements ApplicationContextAware {
 
 
         RecallResult result = new RecallResult();
-        if (param.getAppType().equals("18") || param.getAppType().equals("19")) {
+        if (param.getAppType() == 18 || param.getAppType() == 19) {
             // TODO 可能没有这个code
             if (param.getAbCode().equals("30001")
                     || param.getAbCode().equals("30002")
@@ -155,7 +154,7 @@ public class RecallService implements ApplicationContextAware {
 
     private List<RecallStrategy> getRecallStrategy(RecallParam param) {
         List<RecallStrategy> strategies = new ArrayList<>();
-        if (param.getAppType().equals("18") || param.getAppType().equals("19")) {
+        if (param.getAppType() == 18 || param.getAppType() == 19) {
             strategies.add(strategyMap.get(SpecialRegionRecallStrategy.class.getSimpleName()));
         } else if (param.getFlowPoolAbtestGroup().equals("experimental_flow_set_level")) {
             strategies.add(strategyMap.get(SpecialRegionRecallStrategy.class.getSimpleName()));

+ 8 - 9
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/SpecialRegionRecallStrategy.java

@@ -1,12 +1,12 @@
 package com.tzld.piaoquan.recommend.server.service.recall;
 
 import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
-import com.google.common.util.concurrent.ThreadFactoryBuilder;
 import com.tzld.piaoquan.recommend.server.model.Video;
-import com.tzld.piaoquan.recommend.server.service.recall.strategy.RegionRelative24HRecallStrategy;
-import com.tzld.piaoquan.recommend.server.service.recall.strategy.RegionRelative24HDupRecallStrategy;
+import com.tzld.piaoquan.recommend.server.service.ThreadPoolFactory;
 import com.tzld.piaoquan.recommend.server.service.recall.strategy.Region24HRecallStrategy;
 import com.tzld.piaoquan.recommend.server.service.recall.strategy.RegionHRecallStrategy;
+import com.tzld.piaoquan.recommend.server.service.recall.strategy.RegionRelative24HDupRecallStrategy;
+import com.tzld.piaoquan.recommend.server.service.recall.strategy.RegionRelative24HRecallStrategy;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -19,7 +19,10 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
 import java.util.*;
-import java.util.concurrent.*;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
 
 /**
  * @author dyp
@@ -38,14 +41,10 @@ public class SpecialRegionRecallStrategy implements ApplicationContextAware, Rec
     @ApolloJsonValue("city_code")
     private Set<String> cityCodes;
 
-    private ExecutorService pool;
+    private ExecutorService pool = ThreadPoolFactory.specialRegionPool();
 
     @PostConstruct
     public void init() {
-        // init thread pool
-        pool = new ThreadPoolExecutor(8, 32,
-                0L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(1000),
-                new ThreadFactoryBuilder().setNameFormat("video-title-%d").build(), new ThreadPoolExecutor.AbortPolicy());
 
         Map<String, RecallStrategy> type = applicationContext.getBeansOfType(RecallStrategy.class);
         for (Map.Entry<String, RecallStrategy> entry : type.entrySet()) {

+ 2 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/AbstractFlowPoolWithLevelRecallStrategy.java

@@ -4,7 +4,7 @@ import com.google.common.collect.Lists;
 import com.tzld.piaoquan.recommend.server.model.Video;
 import com.tzld.piaoquan.recommend.server.service.filter.FilterParam;
 import com.tzld.piaoquan.recommend.server.service.filter.FilterResult;
-import com.tzld.piaoquan.recommend.server.service.filter.FlowPoolFilterService;
+import com.tzld.piaoquan.recommend.server.service.filter.FlowPoolWithLevelFilterService;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallStrategy;
 import org.apache.commons.collections4.CollectionUtils;
@@ -27,7 +27,7 @@ public abstract class AbstractFlowPoolWithLevelRecallStrategy implements RecallS
     protected RedisTemplate<String, String> redisTemplate;
 
     @Autowired
-    protected FlowPoolFilterService filterService;
+    protected FlowPoolWithLevelFilterService filterService;
 
     @Override
     public List<Video> recall(RecallParam param) {

+ 3 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/AbstractFlowPoolWithLevelScoreRecallStrategy.java

@@ -4,7 +4,8 @@ import com.google.common.collect.Lists;
 import com.tzld.piaoquan.recommend.server.model.Video;
 import com.tzld.piaoquan.recommend.server.service.filter.FilterParam;
 import com.tzld.piaoquan.recommend.server.service.filter.FilterResult;
-import com.tzld.piaoquan.recommend.server.service.filter.FlowPoolFilterService;
+import com.tzld.piaoquan.recommend.server.service.filter.FlowPoolWithLevelFilterService;
+import com.tzld.piaoquan.recommend.server.service.filter.FlowPoolWithLevelScoreFilterService;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallStrategy;
 import org.apache.commons.collections4.CollectionUtils;
@@ -24,7 +25,7 @@ public abstract class AbstractFlowPoolWithLevelScoreRecallStrategy implements Re
     protected RedisTemplate<String, String> redisTemplate;
 
     @Autowired
-    protected FlowPoolFilterService filterService;
+    protected FlowPoolWithLevelScoreFilterService filterService;
 
     @Override
     public List<Video> recall(RecallParam param) {

+ 2 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/AbstractFlowPoolWithScoreRecallStrategy.java

@@ -4,7 +4,7 @@ import com.google.common.collect.Lists;
 import com.tzld.piaoquan.recommend.server.model.Video;
 import com.tzld.piaoquan.recommend.server.service.filter.FilterParam;
 import com.tzld.piaoquan.recommend.server.service.filter.FilterResult;
-import com.tzld.piaoquan.recommend.server.service.filter.FlowPoolFilterService;
+import com.tzld.piaoquan.recommend.server.service.filter.FlowPoolWithScoreFilterService;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallStrategy;
 import org.apache.commons.collections4.CollectionUtils;
@@ -23,7 +23,7 @@ public abstract class AbstractFlowPoolWithScoreRecallStrategy implements RecallS
     protected RedisTemplate<String, String> redisTemplate;
 
     @Autowired
-    protected FlowPoolFilterService filterService;
+    protected FlowPoolWithScoreFilterService filterService;
 
     @Override
     public List<Video> recall(RecallParam param) {

+ 1 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/AbstractRegionRecallStrategy.java

@@ -138,7 +138,7 @@ public abstract class AbstractRegionRecallStrategy implements RecallStrategy {
         return idx;
     }
 
-    // TODO 和 推荐排序后的last更新有什么区别?
+    // TODO 和 推荐排序后的lastVideo更新有什么区别?
     private String updateLastVideoRecord(String recordKey, RecallParam param) {
         String currentDateStr = DateUtils.getCurrentDateStr("yyyyMMdd");
         int h = DateUtils.getCurrentHour();

+ 6 - 3
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/FlowPoolWithLevelRecallStrategy.java

@@ -1,6 +1,7 @@
 package com.tzld.piaoquan.recommend.server.service.recall.strategy;
 
-import com.tzld.piaoquan.recommend.server.service.FlowPoolConfigService;
+import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConfigService;
+import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
 import lombok.Data;
 import org.apache.commons.collections4.CollectionUtils;
@@ -13,6 +14,8 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
 
+import static com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants.KEY_WITH_LEVEL_FORMAT;
+
 /**
  * @author dyp
  */
@@ -30,7 +33,7 @@ public class FlowPoolWithLevelRecallStrategy extends AbstractFlowPoolWithLevelRe
         // 2. 判断各层级是否有视频需分发
         List<LevelWeight> availableLevels = new ArrayList<>();
         levelWeightMap.forEach((l, w) -> {
-            String levelKey = String.format("flow:pool:level:item:%s:%s", param.getAppType(), l);
+            String levelKey = String.format(KEY_WITH_LEVEL_FORMAT, param.getAppType(), l);
             if (redisTemplate.hasKey(levelKey)) {
                 LevelWeight lw = new LevelWeight();
                 lw.setLevel(l);
@@ -92,6 +95,6 @@ public class FlowPoolWithLevelRecallStrategy extends AbstractFlowPoolWithLevelRe
 
     @Override
     String pushFrom() {
-        return "flow_pool";
+        return FlowPoolConstants.PUSH_FORM;
     }
 }

+ 7 - 4
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/FlowPoolWithLevelScoreRecallStrategy.java

@@ -1,6 +1,7 @@
 package com.tzld.piaoquan.recommend.server.service.recall.strategy;
 
-import com.tzld.piaoquan.recommend.server.service.FlowPoolConfigService;
+import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConfigService;
+import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
 import lombok.Data;
 import org.apache.commons.collections4.CollectionUtils;
@@ -13,11 +14,13 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.util.*;
 
+import static com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants.KEY_WITH_LEVEL_SCORE_FORMAT;
+
 /**
  * @author dyp
  */
 @Service
-public class FlowPoolWithLevelScoreRecallStrategy extends AbstractFlowPoolWithLevelRecallStrategy {
+public class FlowPoolWithLevelScoreRecallStrategy extends AbstractFlowPoolWithLevelScoreRecallStrategy {
 
     @Autowired
     private FlowPoolConfigService flowPoolConfigService;
@@ -30,7 +33,7 @@ public class FlowPoolWithLevelScoreRecallStrategy extends AbstractFlowPoolWithLe
         // 2. 判断各层级是否有视频需分发
         List<LevelWeight> availableLevels = new ArrayList<>();
         levelWeightMap.forEach((l, w) -> {
-            String levelKey = String.format("flow:pool:level:item:score:%s:%s", param.getAppType(), l);
+            String levelKey = String.format(KEY_WITH_LEVEL_SCORE_FORMAT, param.getAppType(), l);
             if (redisTemplate.hasKey(levelKey)) {
                 LevelWeight lw = new LevelWeight();
                 lw.setLevel(l);
@@ -92,6 +95,6 @@ public class FlowPoolWithLevelScoreRecallStrategy extends AbstractFlowPoolWithLe
 
     @Override
     String pushFrom() {
-        return "flow_pool";
+        return FlowPoolConstants.PUSH_FORM;
     }
 }

+ 5 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/FlowPoolWithScoreRecallStrategy.java

@@ -1,8 +1,11 @@
 package com.tzld.piaoquan.recommend.server.service.recall.strategy;
 
+import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
 import org.springframework.stereotype.Service;
 
+import static com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants.KEY_WITH_SCORE_FORMAT;
+
 /**
  * @author dyp
  */
@@ -11,11 +14,11 @@ public class FlowPoolWithScoreRecallStrategy extends AbstractFlowPoolWithScoreRe
 
     @Override
     String flowPoolKey(RecallParam param) {
-        return String.format("flow:pool:item:score:%s", param.getAppType());
+        return String.format(KEY_WITH_SCORE_FORMAT, param.getAppType());
     }
 
     @Override
     String pushFrom() {
-        return "flow_pool";
+        return FlowPoolConstants.PUSH_FORM;
     }
 }

+ 2 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/QuickFlowPoolWithLevelRecallStrategy.java

@@ -1,5 +1,6 @@
 package com.tzld.piaoquan.recommend.server.service.recall.strategy;
 
+import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
 import org.apache.commons.lang3.tuple.Pair;
 import org.springframework.stereotype.Service;
@@ -17,6 +18,6 @@ public class QuickFlowPoolWithLevelRecallStrategy extends AbstractFlowPoolWithLe
 
     @Override
     String pushFrom() {
-        return "flow_pool";
+        return FlowPoolConstants.PUSH_FORM;
     }
 }

+ 5 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/QuickFlowPoolWithLevelScoreRecallStrategy.java

@@ -1,9 +1,12 @@
 package com.tzld.piaoquan.recommend.server.service.recall.strategy;
 
+import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
 import org.apache.commons.lang3.tuple.Pair;
 import org.springframework.stereotype.Service;
 
+import static com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants.KEY_QUICK_WITH_LEVEL_SCORE_FORMAT;
+
 /**
  * @author dyp
  */
@@ -12,11 +15,11 @@ public class QuickFlowPoolWithLevelScoreRecallStrategy extends AbstractFlowPoolW
 
     @Override
     Pair<String, String> flowPoolKeyAndLevel(RecallParam param) {
-        return Pair.of(String.format("flow:pool:quick:item:score:%s:3", param.getAppType()), "");
+        return Pair.of(String.format(KEY_QUICK_WITH_LEVEL_SCORE_FORMAT, param.getAppType()), "");
     }
 
     @Override
     String pushFrom() {
-        return "flow_pool";
+        return FlowPoolConstants.PUSH_FORM;
     }
 }

+ 5 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/recall/strategy/QuickFlowPoolWithScoreRecallStrategy.java

@@ -1,8 +1,11 @@
 package com.tzld.piaoquan.recommend.server.service.recall.strategy;
 
+import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants;
 import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
 import org.springframework.stereotype.Service;
 
+import static com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolConstants.KEY_QUICK_WITH_SCORE_FORMAT;
+
 /**
  * @author dyp
  */
@@ -11,11 +14,11 @@ public class QuickFlowPoolWithScoreRecallStrategy extends AbstractFlowPoolWithSc
 
     @Override
     String flowPoolKey(RecallParam param) {
-        return String.format("flow:pool:quick:item:score:%s:3", param.getAppType());
+        return String.format(KEY_QUICK_WITH_SCORE_FORMAT, param.getAppType());
     }
 
     @Override
     String pushFrom() {
-        return "flow_pool";
+        return FlowPoolConstants.PUSH_FORM;
     }
 }