丁云鹏 1 年之前
父节点
当前提交
9c268c5d73
共有 43 个文件被更改,包括 2213 次插入1347 次删除
  1. 2 2
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/client/FeatureClient.java
  2. 1 1
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/client/ProtobufUtils.java
  3. 3 3
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/common/Common.java
  4. 41 41
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/common/Result.java
  5. 1 1
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/common/ResultOrBuilder.java
  6. 44 19
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/Feature.java
  7. 51 51
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/FeatureService.java
  8. 51 44
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/FeatureServiceGrpc.java
  9. 41 41
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetUserFeatureRequest.java
  10. 1 1
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetUserFeatureRequestOrBuilder.java
  11. 248 60
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetUserFeatureResponse.java
  12. 39 0
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetUserFeatureResponseOrBuilder.java
  13. 76 149
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetVideoFeatureRequest.java
  14. 4 10
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetVideoFeatureRequestOrBuilder.java
  15. 248 60
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetVideoFeatureResponse.java
  16. 39 0
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetVideoFeatureResponseOrBuilder.java
  17. 419 0
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/UserFeatureProto.java
  18. 9 0
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/UserFeatureProtoOrBuilder.java
  19. 419 0
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/VideoFeatureProto.java
  20. 9 0
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/VideoFeatureProtoOrBuilder.java
  21. 0 24
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/GetUserFeatureResponseOrBuilder.java
  22. 0 24
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/GetVideoFeatureResponseOrBuilder.java
  23. 0 308
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/RecommendService.java
  24. 0 355
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/RecommendServiceGrpc.java
  25. 1 1
      recommend-feature-client/src/main/proto/com/tzld/piaoquan/recommend/feature/common.proto
  26. 12 2
      recommend-feature-client/src/main/proto/com/tzld/piaoquan/recommend/feature/feature.proto
  27. 7 11
      recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/config/RedisTemplateConfig.java
  28. 57 0
      recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/config/TairTemplateConfig.java
  29. 10 3
      recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/grpcservice/FeatureGrpcService.java
  30. 30 0
      recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/grpcservice/GrpcAspect.java
  31. 8 0
      recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/model/UserActionFeature.java
  32. 11 0
      recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/model/UserFeature.java
  33. 11 0
      recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/model/VideoFeature.java
  34. 137 0
      recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/service/AbstractFeatureService.java
  35. 66 0
      recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/service/UserFeatureService.java
  36. 63 0
      recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/service/VideoFeatureService.java
  37. 6 0
      recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/service/WarmUpService.java
  38. 0 42
      recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/web/ControllerAspect.java
  39. 0 94
      recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/web/RecommendController.java
  40. 12 0
      recommend-feature-service/src/main/resources/application-dev.yml
  41. 12 0
      recommend-feature-service/src/main/resources/application-pre.yml
  42. 12 0
      recommend-feature-service/src/main/resources/application-prod.yml
  43. 12 0
      recommend-feature-service/src/main/resources/application-test.yml

+ 2 - 2
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/client/FeatureClient.java → recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/client/FeatureClient.java

@@ -1,6 +1,6 @@
-package com.tzld.piaoquan.recommend.server.client;
+package com.tzld.piaoquan.recommend.feature.client;
 
-import com.tzld.piaoquan.recommend.server.gen.feature.FeatureServiceGrpc;
+import com.tzld.piaoquan.recommend.feature.model.feature.FeatureServiceGrpc;
 import net.devh.boot.grpc.client.inject.GrpcClient;
 import org.springframework.stereotype.Component;
 

+ 1 - 1
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/client/ProtobufUtils.java → recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/client/ProtobufUtils.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.recommend.server.client;
+package com.tzld.piaoquan.recommend.feature.client;
 
 import com.google.protobuf.InvalidProtocolBufferException;
 import com.google.protobuf.Message;

+ 3 - 3
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/common/Common.java → recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/common/Common.java

@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: com/tzld/piaoquan/recommend/feature/common.proto
 
-package com.tzld.piaoquan.recommend.server.gen.common;
+package com.tzld.piaoquan.recommend.feature.model.common;
 
 public final class Common {
   private Common() {}
@@ -30,8 +30,8 @@ public final class Common {
     java.lang.String[] descriptorData = {
       "\n0com/tzld/piaoquan/recommend/feature/co" +
       "mmon.proto\"\'\n\006Result\022\014\n\004code\030\001 \001(\005\022\017\n\007me" +
-      "ssage\030\002 \001(\tB2\n.com.tzld.piaoquan.recomme" +
-      "nd.feature.gen.commonP\001b\006proto3"
+      "ssage\030\002 \001(\tB4\n0com.tzld.piaoquan.recomme" +
+      "nd.feature.model.commonP\001b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,

+ 41 - 41
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/common/Result.java → recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/common/Result.java

@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: com/tzld/piaoquan/recommend/feature/common.proto
 
-package com.tzld.piaoquan.recommend.server.gen.common;
+package com.tzld.piaoquan.recommend.feature.model.common;
 
 /**
  * Protobuf type {@code Result}
@@ -81,15 +81,15 @@ private static final long serialVersionUID = 0L;
   }
   public static final com.google.protobuf.Descriptors.Descriptor
       getDescriptor() {
-    return com.tzld.piaoquan.recommend.server.gen.common.Common.internal_static_Result_descriptor;
+    return com.tzld.piaoquan.recommend.feature.model.common.Common.internal_static_Result_descriptor;
   }
 
   @java.lang.Override
   protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internalGetFieldAccessorTable() {
-    return com.tzld.piaoquan.recommend.server.gen.common.Common.internal_static_Result_fieldAccessorTable
+    return com.tzld.piaoquan.recommend.feature.model.common.Common.internal_static_Result_fieldAccessorTable
         .ensureFieldAccessorsInitialized(
-            com.tzld.piaoquan.recommend.server.gen.common.Result.class, com.tzld.piaoquan.recommend.server.gen.common.Result.Builder.class);
+            com.tzld.piaoquan.recommend.feature.model.common.Result.class, com.tzld.piaoquan.recommend.feature.model.common.Result.Builder.class);
   }
 
   public static final int CODE_FIELD_NUMBER = 1;
@@ -191,10 +191,10 @@ private static final long serialVersionUID = 0L;
     if (obj == this) {
      return true;
     }
-    if (!(obj instanceof com.tzld.piaoquan.recommend.server.gen.common.Result)) {
+    if (!(obj instanceof com.tzld.piaoquan.recommend.feature.model.common.Result)) {
       return super.equals(obj);
     }
-    com.tzld.piaoquan.recommend.server.gen.common.Result other = (com.tzld.piaoquan.recommend.server.gen.common.Result) obj;
+    com.tzld.piaoquan.recommend.feature.model.common.Result other = (com.tzld.piaoquan.recommend.feature.model.common.Result) obj;
 
     if (getCode()
         != other.getCode()) return false;
@@ -220,69 +220,69 @@ private static final long serialVersionUID = 0L;
     return hash;
   }
 
-  public static com.tzld.piaoquan.recommend.server.gen.common.Result parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.common.Result parseFrom(
       java.nio.ByteBuffer data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.common.Result parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.common.Result 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.common.Result parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.common.Result parseFrom(
       com.google.protobuf.ByteString data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.common.Result parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.common.Result 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.common.Result parseFrom(byte[] data)
+  public static com.tzld.piaoquan.recommend.feature.model.common.Result parseFrom(byte[] data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.common.Result parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.common.Result 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.common.Result parseFrom(java.io.InputStream input)
+  public static com.tzld.piaoquan.recommend.feature.model.common.Result 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.common.Result parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.common.Result 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.common.Result parseDelimitedFrom(java.io.InputStream input)
+  public static com.tzld.piaoquan.recommend.feature.model.common.Result 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.common.Result parseDelimitedFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.common.Result 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.common.Result parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.common.Result 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.common.Result parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.common.Result parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
@@ -295,7 +295,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.common.Result prototype) {
+  public static Builder newBuilder(com.tzld.piaoquan.recommend.feature.model.common.Result prototype) {
     return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
   }
   @java.lang.Override
@@ -316,21 +316,21 @@ private static final long serialVersionUID = 0L;
   public static final class Builder extends
       com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
       // @@protoc_insertion_point(builder_implements:Result)
-      com.tzld.piaoquan.recommend.server.gen.common.ResultOrBuilder {
+      com.tzld.piaoquan.recommend.feature.model.common.ResultOrBuilder {
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tzld.piaoquan.recommend.server.gen.common.Common.internal_static_Result_descriptor;
+      return com.tzld.piaoquan.recommend.feature.model.common.Common.internal_static_Result_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tzld.piaoquan.recommend.server.gen.common.Common.internal_static_Result_fieldAccessorTable
+      return com.tzld.piaoquan.recommend.feature.model.common.Common.internal_static_Result_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tzld.piaoquan.recommend.server.gen.common.Result.class, com.tzld.piaoquan.recommend.server.gen.common.Result.Builder.class);
+              com.tzld.piaoquan.recommend.feature.model.common.Result.class, com.tzld.piaoquan.recommend.feature.model.common.Result.Builder.class);
     }
 
-    // Construct using com.tzld.piaoquan.recommend.feature.gen.common.Result.newBuilder()
+    // Construct using com.tzld.piaoquan.recommend.feature.model.common.Result.newBuilder()
     private Builder() {
       maybeForceBuilderInitialization();
     }
@@ -358,17 +358,17 @@ private static final long serialVersionUID = 0L;
     @java.lang.Override
     public com.google.protobuf.Descriptors.Descriptor
         getDescriptorForType() {
-      return com.tzld.piaoquan.recommend.server.gen.common.Common.internal_static_Result_descriptor;
+      return com.tzld.piaoquan.recommend.feature.model.common.Common.internal_static_Result_descriptor;
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.common.Result getDefaultInstanceForType() {
-      return com.tzld.piaoquan.recommend.server.gen.common.Result.getDefaultInstance();
+    public com.tzld.piaoquan.recommend.feature.model.common.Result getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.feature.model.common.Result.getDefaultInstance();
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.common.Result build() {
-      com.tzld.piaoquan.recommend.server.gen.common.Result result = buildPartial();
+    public com.tzld.piaoquan.recommend.feature.model.common.Result build() {
+      com.tzld.piaoquan.recommend.feature.model.common.Result result = buildPartial();
       if (!result.isInitialized()) {
         throw newUninitializedMessageException(result);
       }
@@ -376,8 +376,8 @@ private static final long serialVersionUID = 0L;
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.common.Result buildPartial() {
-      com.tzld.piaoquan.recommend.server.gen.common.Result result = new com.tzld.piaoquan.recommend.server.gen.common.Result(this);
+    public com.tzld.piaoquan.recommend.feature.model.common.Result buildPartial() {
+      com.tzld.piaoquan.recommend.feature.model.common.Result result = new com.tzld.piaoquan.recommend.feature.model.common.Result(this);
       result.code_ = code_;
       result.message_ = message_;
       onBuilt();
@@ -418,16 +418,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.common.Result) {
-        return mergeFrom((com.tzld.piaoquan.recommend.server.gen.common.Result)other);
+      if (other instanceof com.tzld.piaoquan.recommend.feature.model.common.Result) {
+        return mergeFrom((com.tzld.piaoquan.recommend.feature.model.common.Result)other);
       } else {
         super.mergeFrom(other);
         return this;
       }
     }
 
-    public Builder mergeFrom(com.tzld.piaoquan.recommend.server.gen.common.Result other) {
-      if (other == com.tzld.piaoquan.recommend.server.gen.common.Result.getDefaultInstance()) return this;
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.feature.model.common.Result other) {
+      if (other == com.tzld.piaoquan.recommend.feature.model.common.Result.getDefaultInstance()) return this;
       if (other.getCode() != 0) {
         setCode(other.getCode());
       }
@@ -450,11 +450,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.common.Result parsedMessage = null;
+      com.tzld.piaoquan.recommend.feature.model.common.Result parsedMessage = null;
       try {
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        parsedMessage = (com.tzld.piaoquan.recommend.server.gen.common.Result) e.getUnfinishedMessage();
+        parsedMessage = (com.tzld.piaoquan.recommend.feature.model.common.Result) e.getUnfinishedMessage();
         throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
@@ -599,12 +599,12 @@ private static final long serialVersionUID = 0L;
   }
 
   // @@protoc_insertion_point(class_scope:Result)
-  private static final com.tzld.piaoquan.recommend.server.gen.common.Result DEFAULT_INSTANCE;
+  private static final com.tzld.piaoquan.recommend.feature.model.common.Result DEFAULT_INSTANCE;
   static {
-    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.server.gen.common.Result();
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.feature.model.common.Result();
   }
 
-  public static com.tzld.piaoquan.recommend.server.gen.common.Result getDefaultInstance() {
+  public static com.tzld.piaoquan.recommend.feature.model.common.Result getDefaultInstance() {
     return DEFAULT_INSTANCE;
   }
 
@@ -629,7 +629,7 @@ private static final long serialVersionUID = 0L;
   }
 
   @java.lang.Override
-  public com.tzld.piaoquan.recommend.server.gen.common.Result getDefaultInstanceForType() {
+  public com.tzld.piaoquan.recommend.feature.model.common.Result getDefaultInstanceForType() {
     return DEFAULT_INSTANCE;
   }
 

+ 1 - 1
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/common/ResultOrBuilder.java → recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/common/ResultOrBuilder.java

@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: com/tzld/piaoquan/recommend/feature/common.proto
 
-package com.tzld.piaoquan.recommend.server.gen.common;
+package com.tzld.piaoquan.recommend.feature.model.common;
 
 public interface ResultOrBuilder extends
     // @@protoc_insertion_point(interface_extends:Result)

+ 44 - 19
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/Feature.java → recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/Feature.java

@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: com/tzld/piaoquan/recommend/feature/feature.proto
 
-package com.tzld.piaoquan.recommend.server.gen.feature;
+package com.tzld.piaoquan.recommend.feature.model.feature;
 
 public final class Feature {
   private Feature() {}
@@ -24,6 +24,11 @@ public final class Feature {
   static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_GetUserFeatureResponse_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_UserFeatureProto_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_UserFeatureProto_fieldAccessorTable;
   static final com.google.protobuf.Descriptors.Descriptor
     internal_static_GetVideoFeatureRequest_descriptor;
   static final 
@@ -34,6 +39,11 @@ public final class Feature {
   static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_GetVideoFeatureResponse_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_VideoFeatureProto_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_VideoFeatureProto_fieldAccessorTable;
 
   public static com.google.protobuf.Descriptors.FileDescriptor
       getDescriptor() {
@@ -45,24 +55,27 @@ public final class Feature {
     java.lang.String[] descriptorData = {
       "\n1com/tzld/piaoquan/recommend/feature/fe" +
       "ature.proto\032\031google/protobuf/any.proto\0320" +
-              "com/tzld/piaoquan/recommend/server/comm" +
+      "com/tzld/piaoquan/recommend/feature/comm" +
       "on.proto\"$\n\025GetUserFeatureRequest\022\013\n\003uid" +
-      "\030\001 \001(\t\"1\n\026GetUserFeatureResponse\022\027\n\006resu" +
-      "lt\030\001 \001(\0132\007.Result\"%\n\026GetVideoFeatureRequ" +
-      "est\022\013\n\003uid\030\001 \001(\t\"2\n\027GetVideoFeatureRespo" +
-      "nse\022\027\n\006result\030\001 \001(\0132\007.Result2\231\001\n\016Feature" +
-      "Service\022A\n\016GetUserFeature\022\026.GetUserFeatu" +
-      "reRequest\032\027.GetUserFeatureResponse\022D\n\017Ge" +
-      "tVideoFeature\022\027.GetVideoFeatureRequest\032\030" +
-      ".GetVideoFeatureResponseB6\n/com.tzld.pia" +
-      "oquan.recommend.feature.gen.featureP\001\210\001\001" +
-      "b\006proto3"
+      "\030\001 \001(\t\"Z\n\026GetUserFeatureResponse\022\027\n\006resu" +
+      "lt\030\001 \001(\0132\007.Result\022\'\n\014user_feature\030\002 \001(\0132" +
+      "\021.UserFeatureProto\"\022\n\020UserFeatureProto\"*" +
+      "\n\026GetVideoFeatureRequest\022\020\n\010video_id\030\001 \001" +
+      "(\003\"]\n\027GetVideoFeatureResponse\022\027\n\006result\030" +
+      "\001 \001(\0132\007.Result\022)\n\rvideo_feature\030\002 \001(\0132\022." +
+      "VideoFeatureProto\"\023\n\021VideoFeatureProto2\231" +
+      "\001\n\016FeatureService\022A\n\016GetUserFeature\022\026.Ge" +
+      "tUserFeatureRequest\032\027.GetUserFeatureResp" +
+      "onse\022D\n\017GetVideoFeature\022\027.GetVideoFeatur" +
+      "eRequest\032\030.GetVideoFeatureResponseB8\n1co" +
+      "m.tzld.piaoquan.recommend.feature.model." +
+      "featureP\001\210\001\001b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
         new com.google.protobuf.Descriptors.FileDescriptor[] {
           com.google.protobuf.AnyProto.getDescriptor(),
-          com.tzld.piaoquan.recommend.server.gen.common.Common.getDescriptor(),
+          com.tzld.piaoquan.recommend.feature.model.common.Common.getDescriptor(),
         });
     internal_static_GetUserFeatureRequest_descriptor =
       getDescriptor().getMessageTypes().get(0);
@@ -75,21 +88,33 @@ public final class Feature {
     internal_static_GetUserFeatureResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_GetUserFeatureResponse_descriptor,
-        new java.lang.String[] { "Result", });
-    internal_static_GetVideoFeatureRequest_descriptor =
+        new java.lang.String[] { "Result", "UserFeature", });
+    internal_static_UserFeatureProto_descriptor =
       getDescriptor().getMessageTypes().get(2);
+    internal_static_UserFeatureProto_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_UserFeatureProto_descriptor,
+        new java.lang.String[] { });
+    internal_static_GetVideoFeatureRequest_descriptor =
+      getDescriptor().getMessageTypes().get(3);
     internal_static_GetVideoFeatureRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_GetVideoFeatureRequest_descriptor,
-        new java.lang.String[] { "Uid", });
+        new java.lang.String[] { "VideoId", });
     internal_static_GetVideoFeatureResponse_descriptor =
-      getDescriptor().getMessageTypes().get(3);
+      getDescriptor().getMessageTypes().get(4);
     internal_static_GetVideoFeatureResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_GetVideoFeatureResponse_descriptor,
-        new java.lang.String[] { "Result", });
+        new java.lang.String[] { "Result", "VideoFeature", });
+    internal_static_VideoFeatureProto_descriptor =
+      getDescriptor().getMessageTypes().get(5);
+    internal_static_VideoFeatureProto_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_VideoFeatureProto_descriptor,
+        new java.lang.String[] { });
     com.google.protobuf.AnyProto.getDescriptor();
-    com.tzld.piaoquan.recommend.server.gen.common.Common.getDescriptor();
+    com.tzld.piaoquan.recommend.feature.model.common.Common.getDescriptor();
   }
 
   // @@protoc_insertion_point(outer_class_scope)

+ 51 - 51
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/FeatureService.java → recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/FeatureService.java

@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: com/tzld/piaoquan/recommend/feature/feature.proto
 
-package com.tzld.piaoquan.recommend.server.gen.feature;
+package com.tzld.piaoquan.recommend.feature.model.feature;
 
 /**
  * Protobuf service {@code FeatureService}
@@ -16,16 +16,16 @@ public  abstract class FeatureService
      */
     public abstract void getUserFeature(
         com.google.protobuf.RpcController controller,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request,
-        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> done);
+        com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest request,
+        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse> done);
 
     /**
      * <code>rpc GetVideoFeature(.GetVideoFeatureRequest) returns (.GetVideoFeatureResponse);</code>
      */
     public abstract void getVideoFeature(
         com.google.protobuf.RpcController controller,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request,
-        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> done);
+        com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest request,
+        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse> done);
 
   }
 
@@ -35,16 +35,16 @@ public  abstract class FeatureService
       @java.lang.Override
       public  void getUserFeature(
           com.google.protobuf.RpcController controller,
-          com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request,
-          com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> done) {
+          com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest request,
+          com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse> done) {
         impl.getUserFeature(controller, request, done);
       }
 
       @java.lang.Override
       public  void getVideoFeature(
           com.google.protobuf.RpcController controller,
-          com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request,
-          com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> done) {
+          com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest request,
+          com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse> done) {
         impl.getVideoFeature(controller, request, done);
       }
 
@@ -71,9 +71,9 @@ public  abstract class FeatureService
         }
         switch(method.getIndex()) {
           case 0:
-            return impl.getUserFeature(controller, (com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest)request);
+            return impl.getUserFeature(controller, (com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest)request);
           case 1:
-            return impl.getVideoFeature(controller, (com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest)request);
+            return impl.getVideoFeature(controller, (com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest)request);
           default:
             throw new java.lang.AssertionError("Can't get here.");
         }
@@ -89,9 +89,9 @@ public  abstract class FeatureService
         }
         switch(method.getIndex()) {
           case 0:
-            return com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest.getDefaultInstance();
+            return com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest.getDefaultInstance();
           case 1:
-            return com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest.getDefaultInstance();
+            return com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest.getDefaultInstance();
           default:
             throw new java.lang.AssertionError("Can't get here.");
         }
@@ -107,9 +107,9 @@ public  abstract class FeatureService
         }
         switch(method.getIndex()) {
           case 0:
-            return com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.getDefaultInstance();
+            return com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse.getDefaultInstance();
           case 1:
-            return com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.getDefaultInstance();
+            return com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.getDefaultInstance();
           default:
             throw new java.lang.AssertionError("Can't get here.");
         }
@@ -123,21 +123,21 @@ public  abstract class FeatureService
    */
   public abstract void getUserFeature(
       com.google.protobuf.RpcController controller,
-      com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request,
-      com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> done);
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest request,
+      com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse> done);
 
   /**
    * <code>rpc GetVideoFeature(.GetVideoFeatureRequest) returns (.GetVideoFeatureResponse);</code>
    */
   public abstract void getVideoFeature(
       com.google.protobuf.RpcController controller,
-      com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request,
-      com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> done);
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest request,
+      com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse> done);
 
   public static final
       com.google.protobuf.Descriptors.ServiceDescriptor
       getDescriptor() {
-    return com.tzld.piaoquan.recommend.server.gen.feature.Feature.getDescriptor().getServices().get(0);
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.getDescriptor().getServices().get(0);
   }
   public final com.google.protobuf.Descriptors.ServiceDescriptor
       getDescriptorForType() {
@@ -157,13 +157,13 @@ public  abstract class FeatureService
     }
     switch(method.getIndex()) {
       case 0:
-        this.getUserFeature(controller, (com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest)request,
-          com.google.protobuf.RpcUtil.<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse>specializeCallback(
+        this.getUserFeature(controller, (com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest)request,
+          com.google.protobuf.RpcUtil.<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse>specializeCallback(
             done));
         return;
       case 1:
-        this.getVideoFeature(controller, (com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest)request,
-          com.google.protobuf.RpcUtil.<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse>specializeCallback(
+        this.getVideoFeature(controller, (com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest)request,
+          com.google.protobuf.RpcUtil.<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse>specializeCallback(
             done));
         return;
       default:
@@ -181,9 +181,9 @@ public  abstract class FeatureService
     }
     switch(method.getIndex()) {
       case 0:
-        return com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest.getDefaultInstance();
+        return com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest.getDefaultInstance();
       case 1:
-        return com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest.getDefaultInstance();
+        return com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest.getDefaultInstance();
       default:
         throw new java.lang.AssertionError("Can't get here.");
     }
@@ -199,9 +199,9 @@ public  abstract class FeatureService
     }
     switch(method.getIndex()) {
       case 0:
-        return com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.getDefaultInstance();
+        return com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse.getDefaultInstance();
       case 1:
-        return com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.getDefaultInstance();
+        return com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.getDefaultInstance();
       default:
         throw new java.lang.AssertionError("Can't get here.");
     }
@@ -212,7 +212,7 @@ public  abstract class FeatureService
     return new Stub(channel);
   }
 
-  public static final class Stub extends com.tzld.piaoquan.recommend.server.gen.feature.FeatureService implements Interface {
+  public static final class Stub extends com.tzld.piaoquan.recommend.feature.model.feature.FeatureService implements Interface {
     private Stub(com.google.protobuf.RpcChannel channel) {
       this.channel = channel;
     }
@@ -225,32 +225,32 @@ public  abstract class FeatureService
 
     public  void getUserFeature(
         com.google.protobuf.RpcController controller,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request,
-        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> done) {
+        com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest request,
+        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse> done) {
       channel.callMethod(
         getDescriptor().getMethods().get(0),
         controller,
         request,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.getDefaultInstance(),
+        com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse.getDefaultInstance(),
         com.google.protobuf.RpcUtil.generalizeCallback(
           done,
-          com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.class,
-          com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.getDefaultInstance()));
+          com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse.class,
+          com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse.getDefaultInstance()));
     }
 
     public  void getVideoFeature(
         com.google.protobuf.RpcController controller,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request,
-        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> done) {
+        com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest request,
+        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse> done) {
       channel.callMethod(
         getDescriptor().getMethods().get(1),
         controller,
         request,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.getDefaultInstance(),
+        com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.getDefaultInstance(),
         com.google.protobuf.RpcUtil.generalizeCallback(
           done,
-          com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.class,
-          com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.getDefaultInstance()));
+          com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.class,
+          com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.getDefaultInstance()));
     }
   }
 
@@ -260,14 +260,14 @@ public  abstract class FeatureService
   }
 
   public interface BlockingInterface {
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse getUserFeature(
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse getUserFeature(
         com.google.protobuf.RpcController controller,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request)
+        com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest request)
         throws com.google.protobuf.ServiceException;
 
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse getVideoFeature(
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse getVideoFeature(
         com.google.protobuf.RpcController controller,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request)
+        com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest request)
         throws com.google.protobuf.ServiceException;
   }
 
@@ -278,27 +278,27 @@ public  abstract class FeatureService
 
     private final com.google.protobuf.BlockingRpcChannel channel;
 
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse getUserFeature(
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse getUserFeature(
         com.google.protobuf.RpcController controller,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request)
+        com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest request)
         throws com.google.protobuf.ServiceException {
-      return (com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse) channel.callBlockingMethod(
+      return (com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse) channel.callBlockingMethod(
         getDescriptor().getMethods().get(0),
         controller,
         request,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.getDefaultInstance());
+        com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse.getDefaultInstance());
     }
 
 
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse getVideoFeature(
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse getVideoFeature(
         com.google.protobuf.RpcController controller,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request)
+        com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest request)
         throws com.google.protobuf.ServiceException {
-      return (com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse) channel.callBlockingMethod(
+      return (com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse) channel.callBlockingMethod(
         getDescriptor().getMethods().get(1),
         controller,
         request,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.getDefaultInstance());
+        com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.getDefaultInstance());
     }
 
   }

+ 51 - 44
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/FeatureServiceGrpc.java → recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/FeatureServiceGrpc.java

@@ -1,11 +1,18 @@
-package com.tzld.piaoquan.recommend.server.gen.feature;
+package com.tzld.piaoquan.recommend.feature.model.feature;
 
 import static io.grpc.MethodDescriptor.generateFullMethodName;
+import static io.grpc.stub.ClientCalls.asyncBidiStreamingCall;
+import static io.grpc.stub.ClientCalls.asyncClientStreamingCall;
+import static io.grpc.stub.ClientCalls.asyncServerStreamingCall;
 import static io.grpc.stub.ClientCalls.asyncUnaryCall;
 import static io.grpc.stub.ClientCalls.blockingServerStreamingCall;
 import static io.grpc.stub.ClientCalls.blockingUnaryCall;
 import static io.grpc.stub.ClientCalls.futureUnaryCall;
+import static io.grpc.stub.ServerCalls.asyncBidiStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncClientStreamingCall;
+import static io.grpc.stub.ServerCalls.asyncServerStreamingCall;
 import static io.grpc.stub.ServerCalls.asyncUnaryCall;
+import static io.grpc.stub.ServerCalls.asyncUnimplementedStreamingCall;
 import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall;
 
 /**
@@ -20,29 +27,29 @@ public final class FeatureServiceGrpc {
   public static final String SERVICE_NAME = "FeatureService";
 
   // Static method descriptors that strictly reflect the proto.
-  private static volatile io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest,
-      com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> getGetUserFeatureMethod;
+  private static volatile io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest,
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse> getGetUserFeatureMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
       fullMethodName = SERVICE_NAME + '/' + "GetUserFeature",
-      requestType = com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest.class,
-      responseType = com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.class,
+      requestType = com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest.class,
+      responseType = com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest,
-      com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> getGetUserFeatureMethod() {
-    io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest, com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> getGetUserFeatureMethod;
+  public static io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest,
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse> getGetUserFeatureMethod() {
+    io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest, com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse> getGetUserFeatureMethod;
     if ((getGetUserFeatureMethod = FeatureServiceGrpc.getGetUserFeatureMethod) == null) {
       synchronized (FeatureServiceGrpc.class) {
         if ((getGetUserFeatureMethod = FeatureServiceGrpc.getGetUserFeatureMethod) == null) {
           FeatureServiceGrpc.getGetUserFeatureMethod = getGetUserFeatureMethod =
-              io.grpc.MethodDescriptor.<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest, com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse>newBuilder()
+              io.grpc.MethodDescriptor.<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest, com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
               .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetUserFeature"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest.getDefaultInstance()))
+                  com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.getDefaultInstance()))
+                  com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse.getDefaultInstance()))
               .setSchemaDescriptor(new FeatureServiceMethodDescriptorSupplier("GetUserFeature"))
               .build();
         }
@@ -51,29 +58,29 @@ public final class FeatureServiceGrpc {
     return getGetUserFeatureMethod;
   }
 
-  private static volatile io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest,
-      com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> getGetVideoFeatureMethod;
+  private static volatile io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest,
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse> getGetVideoFeatureMethod;
 
   @io.grpc.stub.annotations.RpcMethod(
       fullMethodName = SERVICE_NAME + '/' + "GetVideoFeature",
-      requestType = com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest.class,
-      responseType = com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.class,
+      requestType = com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest.class,
+      responseType = com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.class,
       methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest,
-      com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> getGetVideoFeatureMethod() {
-    io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest, com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> getGetVideoFeatureMethod;
+  public static io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest,
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse> getGetVideoFeatureMethod() {
+    io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest, com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse> getGetVideoFeatureMethod;
     if ((getGetVideoFeatureMethod = FeatureServiceGrpc.getGetVideoFeatureMethod) == null) {
       synchronized (FeatureServiceGrpc.class) {
         if ((getGetVideoFeatureMethod = FeatureServiceGrpc.getGetVideoFeatureMethod) == null) {
           FeatureServiceGrpc.getGetVideoFeatureMethod = getGetVideoFeatureMethod =
-              io.grpc.MethodDescriptor.<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest, com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse>newBuilder()
+              io.grpc.MethodDescriptor.<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest, com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse>newBuilder()
               .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
               .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetVideoFeature"))
               .setSampledToLocalTracing(true)
               .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest.getDefaultInstance()))
+                  com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest.getDefaultInstance()))
               .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.getDefaultInstance()))
+                  com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.getDefaultInstance()))
               .setSchemaDescriptor(new FeatureServiceMethodDescriptorSupplier("GetVideoFeature"))
               .build();
         }
@@ -132,15 +139,15 @@ public final class FeatureServiceGrpc {
 
     /**
      */
-    public void getUserFeature(com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request,
-        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> responseObserver) {
+    public void getUserFeature(com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest request,
+        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse> responseObserver) {
       asyncUnimplementedUnaryCall(getGetUserFeatureMethod(), responseObserver);
     }
 
     /**
      */
-    public void getVideoFeature(com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request,
-        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> responseObserver) {
+    public void getVideoFeature(com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest request,
+        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse> responseObserver) {
       asyncUnimplementedUnaryCall(getGetVideoFeatureMethod(), responseObserver);
     }
 
@@ -150,15 +157,15 @@ public final class FeatureServiceGrpc {
             getGetUserFeatureMethod(),
             asyncUnaryCall(
               new MethodHandlers<
-                com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest,
-                com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse>(
+                com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest,
+                com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse>(
                   this, METHODID_GET_USER_FEATURE)))
           .addMethod(
             getGetVideoFeatureMethod(),
             asyncUnaryCall(
               new MethodHandlers<
-                com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest,
-                com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse>(
+                com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest,
+                com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse>(
                   this, METHODID_GET_VIDEO_FEATURE)))
           .build();
     }
@@ -180,16 +187,16 @@ public final class FeatureServiceGrpc {
 
     /**
      */
-    public void getUserFeature(com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request,
-        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> responseObserver) {
+    public void getUserFeature(com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest request,
+        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse> responseObserver) {
       asyncUnaryCall(
           getChannel().newCall(getGetUserFeatureMethod(), getCallOptions()), request, responseObserver);
     }
 
     /**
      */
-    public void getVideoFeature(com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request,
-        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> responseObserver) {
+    public void getVideoFeature(com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest request,
+        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse> responseObserver) {
       asyncUnaryCall(
           getChannel().newCall(getGetVideoFeatureMethod(), getCallOptions()), request, responseObserver);
     }
@@ -211,14 +218,14 @@ public final class FeatureServiceGrpc {
 
     /**
      */
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse getUserFeature(com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request) {
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse getUserFeature(com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest request) {
       return blockingUnaryCall(
           getChannel(), getGetUserFeatureMethod(), getCallOptions(), request);
     }
 
     /**
      */
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse getVideoFeature(com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request) {
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse getVideoFeature(com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest request) {
       return blockingUnaryCall(
           getChannel(), getGetVideoFeatureMethod(), getCallOptions(), request);
     }
@@ -240,16 +247,16 @@ public final class FeatureServiceGrpc {
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> getUserFeature(
-        com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request) {
+    public com.google.common.util.concurrent.ListenableFuture<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse> getUserFeature(
+        com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest request) {
       return futureUnaryCall(
           getChannel().newCall(getGetUserFeatureMethod(), getCallOptions()), request);
     }
 
     /**
      */
-    public com.google.common.util.concurrent.ListenableFuture<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> getVideoFeature(
-        com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request) {
+    public com.google.common.util.concurrent.ListenableFuture<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse> getVideoFeature(
+        com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest request) {
       return futureUnaryCall(
           getChannel().newCall(getGetVideoFeatureMethod(), getCallOptions()), request);
     }
@@ -276,12 +283,12 @@ public final class FeatureServiceGrpc {
     public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
       switch (methodId) {
         case METHODID_GET_USER_FEATURE:
-          serviceImpl.getUserFeature((com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest) request,
-              (io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse>) responseObserver);
+          serviceImpl.getUserFeature((com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest) request,
+              (io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse>) responseObserver);
           break;
         case METHODID_GET_VIDEO_FEATURE:
-          serviceImpl.getVideoFeature((com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest) request,
-              (io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse>) responseObserver);
+          serviceImpl.getVideoFeature((com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest) request,
+              (io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse>) responseObserver);
           break;
         default:
           throw new AssertionError();
@@ -305,7 +312,7 @@ public final class FeatureServiceGrpc {
 
     @java.lang.Override
     public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.Feature.getDescriptor();
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.getDescriptor();
     }
 
     @java.lang.Override

+ 41 - 41
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/GetUserFeatureRequest.java → recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetUserFeatureRequest.java

@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: com/tzld/piaoquan/recommend/feature/feature.proto
 
-package com.tzld.piaoquan.recommend.server.gen.feature;
+package com.tzld.piaoquan.recommend.feature.model.feature;
 
 /**
  * Protobuf type {@code GetUserFeatureRequest}
@@ -76,15 +76,15 @@ private static final long serialVersionUID = 0L;
   }
   public static final com.google.protobuf.Descriptors.Descriptor
       getDescriptor() {
-    return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetUserFeatureRequest_descriptor;
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureRequest_descriptor;
   }
 
   @java.lang.Override
   protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internalGetFieldAccessorTable() {
-    return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetUserFeatureRequest_fieldAccessorTable
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureRequest_fieldAccessorTable
         .ensureFieldAccessorsInitialized(
-            com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest.class, com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest.Builder.class);
+            com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest.class, com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest.Builder.class);
   }
 
   public static final int UID_FIELD_NUMBER = 1;
@@ -164,10 +164,10 @@ private static final long serialVersionUID = 0L;
     if (obj == this) {
      return true;
     }
-    if (!(obj instanceof com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest)) {
+    if (!(obj instanceof com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest)) {
       return super.equals(obj);
     }
-    com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest other = (com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest) obj;
+    com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest other = (com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest) obj;
 
     if (!getUid()
         .equals(other.getUid())) return false;
@@ -189,69 +189,69 @@ private static final long serialVersionUID = 0L;
     return hash;
   }
 
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest parseFrom(
       java.nio.ByteBuffer data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest 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.feature.GetUserFeatureRequest parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest parseFrom(
       com.google.protobuf.ByteString data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest 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.feature.GetUserFeatureRequest parseFrom(byte[] data)
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest parseFrom(byte[] data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest 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.feature.GetUserFeatureRequest parseFrom(java.io.InputStream input)
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest 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.feature.GetUserFeatureRequest parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest 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.feature.GetUserFeatureRequest parseDelimitedFrom(java.io.InputStream input)
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest 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.feature.GetUserFeatureRequest parseDelimitedFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest 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.feature.GetUserFeatureRequest parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest 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.feature.GetUserFeatureRequest parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
@@ -264,7 +264,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.feature.GetUserFeatureRequest prototype) {
+  public static Builder newBuilder(com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest prototype) {
     return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
   }
   @java.lang.Override
@@ -285,21 +285,21 @@ private static final long serialVersionUID = 0L;
   public static final class Builder extends
       com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
       // @@protoc_insertion_point(builder_implements:GetUserFeatureRequest)
-      com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequestOrBuilder {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequestOrBuilder {
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetUserFeatureRequest_descriptor;
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureRequest_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetUserFeatureRequest_fieldAccessorTable
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureRequest_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest.class, com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest.Builder.class);
+              com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest.class, com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest.Builder.class);
     }
 
-    // Construct using com.tzld.piaoquan.recommend.feature.gen.feature.GetUserFeatureRequest.newBuilder()
+    // Construct using com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest.newBuilder()
     private Builder() {
       maybeForceBuilderInitialization();
     }
@@ -325,17 +325,17 @@ private static final long serialVersionUID = 0L;
     @java.lang.Override
     public com.google.protobuf.Descriptors.Descriptor
         getDescriptorForType() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetUserFeatureRequest_descriptor;
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureRequest_descriptor;
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest getDefaultInstanceForType() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest.getDefaultInstance();
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest.getDefaultInstance();
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest build() {
-      com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest result = buildPartial();
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest build() {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest result = buildPartial();
       if (!result.isInitialized()) {
         throw newUninitializedMessageException(result);
       }
@@ -343,8 +343,8 @@ private static final long serialVersionUID = 0L;
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest buildPartial() {
-      com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest result = new com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest(this);
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest buildPartial() {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest result = new com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest(this);
       result.uid_ = uid_;
       onBuilt();
       return result;
@@ -384,16 +384,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.feature.GetUserFeatureRequest) {
-        return mergeFrom((com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest)other);
+      if (other instanceof com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest) {
+        return mergeFrom((com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest)other);
       } else {
         super.mergeFrom(other);
         return this;
       }
     }
 
-    public Builder mergeFrom(com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest other) {
-      if (other == com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest.getDefaultInstance()) return this;
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest other) {
+      if (other == com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest.getDefaultInstance()) return this;
       if (!other.getUid().isEmpty()) {
         uid_ = other.uid_;
         onChanged();
@@ -413,11 +413,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.feature.GetUserFeatureRequest parsedMessage = null;
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest parsedMessage = null;
       try {
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        parsedMessage = (com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest) e.getUnfinishedMessage();
+        parsedMessage = (com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest) e.getUnfinishedMessage();
         throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
@@ -519,12 +519,12 @@ private static final long serialVersionUID = 0L;
   }
 
   // @@protoc_insertion_point(class_scope:GetUserFeatureRequest)
-  private static final com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest DEFAULT_INSTANCE;
+  private static final com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest DEFAULT_INSTANCE;
   static {
-    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest();
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest();
   }
 
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest getDefaultInstance() {
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest getDefaultInstance() {
     return DEFAULT_INSTANCE;
   }
 
@@ -549,7 +549,7 @@ private static final long serialVersionUID = 0L;
   }
 
   @java.lang.Override
-  public com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest getDefaultInstanceForType() {
+  public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest getDefaultInstanceForType() {
     return DEFAULT_INSTANCE;
   }
 

+ 1 - 1
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/GetUserFeatureRequestOrBuilder.java → recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetUserFeatureRequestOrBuilder.java

@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: com/tzld/piaoquan/recommend/feature/feature.proto
 
-package com.tzld.piaoquan.recommend.server.gen.feature;
+package com.tzld.piaoquan.recommend.feature.model.feature;
 
 public interface GetUserFeatureRequestOrBuilder extends
     // @@protoc_insertion_point(interface_extends:GetUserFeatureRequest)

+ 248 - 60
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/GetUserFeatureResponse.java → recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetUserFeatureResponse.java

@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: com/tzld/piaoquan/recommend/feature/feature.proto
 
-package com.tzld.piaoquan.recommend.server.gen.feature;
+package com.tzld.piaoquan.recommend.feature.model.feature;
 
 /**
  * Protobuf type {@code GetUserFeatureResponse}
@@ -49,11 +49,11 @@ private static final long serialVersionUID = 0L;
             done = true;
             break;
           case 10: {
-            com.tzld.piaoquan.recommend.server.gen.common.Result.Builder subBuilder = null;
+            com.tzld.piaoquan.recommend.feature.model.common.Result.Builder subBuilder = null;
             if (result_ != null) {
               subBuilder = result_.toBuilder();
             }
-            result_ = input.readMessage(com.tzld.piaoquan.recommend.server.gen.common.Result.parser(), extensionRegistry);
+            result_ = input.readMessage(com.tzld.piaoquan.recommend.feature.model.common.Result.parser(), extensionRegistry);
             if (subBuilder != null) {
               subBuilder.mergeFrom(result_);
               result_ = subBuilder.buildPartial();
@@ -61,6 +61,19 @@ private static final long serialVersionUID = 0L;
 
             break;
           }
+          case 18: {
+            com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.Builder subBuilder = null;
+            if (userFeature_ != null) {
+              subBuilder = userFeature_.toBuilder();
+            }
+            userFeature_ = input.readMessage(com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.parser(), extensionRegistry);
+            if (subBuilder != null) {
+              subBuilder.mergeFrom(userFeature_);
+              userFeature_ = subBuilder.buildPartial();
+            }
+
+            break;
+          }
           default: {
             if (!parseUnknownField(
                 input, unknownFields, extensionRegistry, tag)) {
@@ -82,19 +95,19 @@ private static final long serialVersionUID = 0L;
   }
   public static final com.google.protobuf.Descriptors.Descriptor
       getDescriptor() {
-    return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetUserFeatureResponse_descriptor;
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureResponse_descriptor;
   }
 
   @java.lang.Override
   protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internalGetFieldAccessorTable() {
-    return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetUserFeatureResponse_fieldAccessorTable
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureResponse_fieldAccessorTable
         .ensureFieldAccessorsInitialized(
-            com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.class, com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.Builder.class);
+            com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse.class, com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse.Builder.class);
   }
 
   public static final int RESULT_FIELD_NUMBER = 1;
-  private com.tzld.piaoquan.recommend.server.gen.common.Result result_;
+  private com.tzld.piaoquan.recommend.feature.model.common.Result result_;
   /**
    * <code>.Result result = 1;</code>
    * @return Whether the result field is set.
@@ -108,17 +121,43 @@ private static final long serialVersionUID = 0L;
    * @return The result.
    */
   @java.lang.Override
-  public com.tzld.piaoquan.recommend.server.gen.common.Result getResult() {
-    return result_ == null ? com.tzld.piaoquan.recommend.server.gen.common.Result.getDefaultInstance() : result_;
+  public com.tzld.piaoquan.recommend.feature.model.common.Result getResult() {
+    return result_ == null ? com.tzld.piaoquan.recommend.feature.model.common.Result.getDefaultInstance() : result_;
   }
   /**
    * <code>.Result result = 1;</code>
    */
   @java.lang.Override
-  public com.tzld.piaoquan.recommend.server.gen.common.ResultOrBuilder getResultOrBuilder() {
+  public com.tzld.piaoquan.recommend.feature.model.common.ResultOrBuilder getResultOrBuilder() {
     return getResult();
   }
 
+  public static final int USER_FEATURE_FIELD_NUMBER = 2;
+  private com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto userFeature_;
+  /**
+   * <code>.UserFeatureProto user_feature = 2;</code>
+   * @return Whether the userFeature field is set.
+   */
+  @java.lang.Override
+  public boolean hasUserFeature() {
+    return userFeature_ != null;
+  }
+  /**
+   * <code>.UserFeatureProto user_feature = 2;</code>
+   * @return The userFeature.
+   */
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto getUserFeature() {
+    return userFeature_ == null ? com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.getDefaultInstance() : userFeature_;
+  }
+  /**
+   * <code>.UserFeatureProto user_feature = 2;</code>
+   */
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProtoOrBuilder getUserFeatureOrBuilder() {
+    return getUserFeature();
+  }
+
   private byte memoizedIsInitialized = -1;
   @java.lang.Override
   public final boolean isInitialized() {
@@ -136,6 +175,9 @@ private static final long serialVersionUID = 0L;
     if (result_ != null) {
       output.writeMessage(1, getResult());
     }
+    if (userFeature_ != null) {
+      output.writeMessage(2, getUserFeature());
+    }
     unknownFields.writeTo(output);
   }
 
@@ -149,6 +191,10 @@ private static final long serialVersionUID = 0L;
       size += com.google.protobuf.CodedOutputStream
         .computeMessageSize(1, getResult());
     }
+    if (userFeature_ != null) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(2, getUserFeature());
+    }
     size += unknownFields.getSerializedSize();
     memoizedSize = size;
     return size;
@@ -159,16 +205,21 @@ private static final long serialVersionUID = 0L;
     if (obj == this) {
      return true;
     }
-    if (!(obj instanceof com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse)) {
+    if (!(obj instanceof com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse)) {
       return super.equals(obj);
     }
-    com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse other = (com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse) obj;
+    com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse other = (com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse) obj;
 
     if (hasResult() != other.hasResult()) return false;
     if (hasResult()) {
       if (!getResult()
           .equals(other.getResult())) return false;
     }
+    if (hasUserFeature() != other.hasUserFeature()) return false;
+    if (hasUserFeature()) {
+      if (!getUserFeature()
+          .equals(other.getUserFeature())) return false;
+    }
     if (!unknownFields.equals(other.unknownFields)) return false;
     return true;
   }
@@ -184,74 +235,78 @@ private static final long serialVersionUID = 0L;
       hash = (37 * hash) + RESULT_FIELD_NUMBER;
       hash = (53 * hash) + getResult().hashCode();
     }
+    if (hasUserFeature()) {
+      hash = (37 * hash) + USER_FEATURE_FIELD_NUMBER;
+      hash = (53 * hash) + getUserFeature().hashCode();
+    }
     hash = (29 * hash) + unknownFields.hashCode();
     memoizedHashCode = hash;
     return hash;
   }
 
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse parseFrom(
       java.nio.ByteBuffer data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse 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.feature.GetUserFeatureResponse parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse parseFrom(
       com.google.protobuf.ByteString data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse 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.feature.GetUserFeatureResponse parseFrom(byte[] data)
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse parseFrom(byte[] data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse 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.feature.GetUserFeatureResponse parseFrom(java.io.InputStream input)
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse 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.feature.GetUserFeatureResponse parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse 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.feature.GetUserFeatureResponse parseDelimitedFrom(java.io.InputStream input)
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse 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.feature.GetUserFeatureResponse parseDelimitedFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse 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.feature.GetUserFeatureResponse parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse 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.feature.GetUserFeatureResponse parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
@@ -264,7 +319,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.feature.GetUserFeatureResponse prototype) {
+  public static Builder newBuilder(com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse prototype) {
     return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
   }
   @java.lang.Override
@@ -285,21 +340,21 @@ private static final long serialVersionUID = 0L;
   public static final class Builder extends
       com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
       // @@protoc_insertion_point(builder_implements:GetUserFeatureResponse)
-      com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponseOrBuilder {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponseOrBuilder {
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetUserFeatureResponse_descriptor;
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureResponse_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetUserFeatureResponse_fieldAccessorTable
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureResponse_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.class, com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.Builder.class);
+              com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse.class, com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse.Builder.class);
     }
 
-    // Construct using com.tzld.piaoquan.recommend.feature.gen.feature.GetUserFeatureResponse.newBuilder()
+    // Construct using com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse.newBuilder()
     private Builder() {
       maybeForceBuilderInitialization();
     }
@@ -323,23 +378,29 @@ private static final long serialVersionUID = 0L;
         result_ = null;
         resultBuilder_ = null;
       }
+      if (userFeatureBuilder_ == null) {
+        userFeature_ = null;
+      } else {
+        userFeature_ = null;
+        userFeatureBuilder_ = null;
+      }
       return this;
     }
 
     @java.lang.Override
     public com.google.protobuf.Descriptors.Descriptor
         getDescriptorForType() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetUserFeatureResponse_descriptor;
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureResponse_descriptor;
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse getDefaultInstanceForType() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.getDefaultInstance();
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse.getDefaultInstance();
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse build() {
-      com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse result = buildPartial();
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse build() {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse result = buildPartial();
       if (!result.isInitialized()) {
         throw newUninitializedMessageException(result);
       }
@@ -347,13 +408,18 @@ private static final long serialVersionUID = 0L;
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse buildPartial() {
-      com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse result = new com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse(this);
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse buildPartial() {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse result = new com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse(this);
       if (resultBuilder_ == null) {
         result.result_ = result_;
       } else {
         result.result_ = resultBuilder_.build();
       }
+      if (userFeatureBuilder_ == null) {
+        result.userFeature_ = userFeature_;
+      } else {
+        result.userFeature_ = userFeatureBuilder_.build();
+      }
       onBuilt();
       return result;
     }
@@ -392,19 +458,22 @@ 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.feature.GetUserFeatureResponse) {
-        return mergeFrom((com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse)other);
+      if (other instanceof com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse) {
+        return mergeFrom((com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse)other);
       } else {
         super.mergeFrom(other);
         return this;
       }
     }
 
-    public Builder mergeFrom(com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse other) {
-      if (other == com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.getDefaultInstance()) return this;
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse other) {
+      if (other == com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse.getDefaultInstance()) return this;
       if (other.hasResult()) {
         mergeResult(other.getResult());
       }
+      if (other.hasUserFeature()) {
+        mergeUserFeature(other.getUserFeature());
+      }
       this.mergeUnknownFields(other.unknownFields);
       onChanged();
       return this;
@@ -420,11 +489,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.feature.GetUserFeatureResponse parsedMessage = null;
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse parsedMessage = null;
       try {
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        parsedMessage = (com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse) e.getUnfinishedMessage();
+        parsedMessage = (com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse) e.getUnfinishedMessage();
         throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
@@ -434,9 +503,9 @@ private static final long serialVersionUID = 0L;
       return this;
     }
 
-    private com.tzld.piaoquan.recommend.server.gen.common.Result result_;
+    private com.tzld.piaoquan.recommend.feature.model.common.Result result_;
     private com.google.protobuf.SingleFieldBuilderV3<
-        com.tzld.piaoquan.recommend.server.gen.common.Result, com.tzld.piaoquan.recommend.server.gen.common.Result.Builder, com.tzld.piaoquan.recommend.server.gen.common.ResultOrBuilder> resultBuilder_;
+        com.tzld.piaoquan.recommend.feature.model.common.Result, com.tzld.piaoquan.recommend.feature.model.common.Result.Builder, com.tzld.piaoquan.recommend.feature.model.common.ResultOrBuilder> resultBuilder_;
     /**
      * <code>.Result result = 1;</code>
      * @return Whether the result field is set.
@@ -448,9 +517,9 @@ private static final long serialVersionUID = 0L;
      * <code>.Result result = 1;</code>
      * @return The result.
      */
-    public com.tzld.piaoquan.recommend.server.gen.common.Result getResult() {
+    public com.tzld.piaoquan.recommend.feature.model.common.Result getResult() {
       if (resultBuilder_ == null) {
-        return result_ == null ? com.tzld.piaoquan.recommend.server.gen.common.Result.getDefaultInstance() : result_;
+        return result_ == null ? com.tzld.piaoquan.recommend.feature.model.common.Result.getDefaultInstance() : result_;
       } else {
         return resultBuilder_.getMessage();
       }
@@ -458,7 +527,7 @@ private static final long serialVersionUID = 0L;
     /**
      * <code>.Result result = 1;</code>
      */
-    public Builder setResult(com.tzld.piaoquan.recommend.server.gen.common.Result value) {
+    public Builder setResult(com.tzld.piaoquan.recommend.feature.model.common.Result value) {
       if (resultBuilder_ == null) {
         if (value == null) {
           throw new NullPointerException();
@@ -475,7 +544,7 @@ private static final long serialVersionUID = 0L;
      * <code>.Result result = 1;</code>
      */
     public Builder setResult(
-        com.tzld.piaoquan.recommend.server.gen.common.Result.Builder builderForValue) {
+        com.tzld.piaoquan.recommend.feature.model.common.Result.Builder builderForValue) {
       if (resultBuilder_ == null) {
         result_ = builderForValue.build();
         onChanged();
@@ -488,11 +557,11 @@ private static final long serialVersionUID = 0L;
     /**
      * <code>.Result result = 1;</code>
      */
-    public Builder mergeResult(com.tzld.piaoquan.recommend.server.gen.common.Result value) {
+    public Builder mergeResult(com.tzld.piaoquan.recommend.feature.model.common.Result value) {
       if (resultBuilder_ == null) {
         if (result_ != null) {
           result_ =
-            com.tzld.piaoquan.recommend.server.gen.common.Result.newBuilder(result_).mergeFrom(value).buildPartial();
+            com.tzld.piaoquan.recommend.feature.model.common.Result.newBuilder(result_).mergeFrom(value).buildPartial();
         } else {
           result_ = value;
         }
@@ -520,7 +589,7 @@ private static final long serialVersionUID = 0L;
     /**
      * <code>.Result result = 1;</code>
      */
-    public com.tzld.piaoquan.recommend.server.gen.common.Result.Builder getResultBuilder() {
+    public com.tzld.piaoquan.recommend.feature.model.common.Result.Builder getResultBuilder() {
       
       onChanged();
       return getResultFieldBuilder().getBuilder();
@@ -528,23 +597,23 @@ private static final long serialVersionUID = 0L;
     /**
      * <code>.Result result = 1;</code>
      */
-    public com.tzld.piaoquan.recommend.server.gen.common.ResultOrBuilder getResultOrBuilder() {
+    public com.tzld.piaoquan.recommend.feature.model.common.ResultOrBuilder getResultOrBuilder() {
       if (resultBuilder_ != null) {
         return resultBuilder_.getMessageOrBuilder();
       } else {
         return result_ == null ?
-            com.tzld.piaoquan.recommend.server.gen.common.Result.getDefaultInstance() : result_;
+            com.tzld.piaoquan.recommend.feature.model.common.Result.getDefaultInstance() : result_;
       }
     }
     /**
      * <code>.Result result = 1;</code>
      */
     private com.google.protobuf.SingleFieldBuilderV3<
-        com.tzld.piaoquan.recommend.server.gen.common.Result, com.tzld.piaoquan.recommend.server.gen.common.Result.Builder, com.tzld.piaoquan.recommend.server.gen.common.ResultOrBuilder>
+        com.tzld.piaoquan.recommend.feature.model.common.Result, com.tzld.piaoquan.recommend.feature.model.common.Result.Builder, com.tzld.piaoquan.recommend.feature.model.common.ResultOrBuilder> 
         getResultFieldBuilder() {
       if (resultBuilder_ == null) {
         resultBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-            com.tzld.piaoquan.recommend.server.gen.common.Result, com.tzld.piaoquan.recommend.server.gen.common.Result.Builder, com.tzld.piaoquan.recommend.server.gen.common.ResultOrBuilder>(
+            com.tzld.piaoquan.recommend.feature.model.common.Result, com.tzld.piaoquan.recommend.feature.model.common.Result.Builder, com.tzld.piaoquan.recommend.feature.model.common.ResultOrBuilder>(
                 getResult(),
                 getParentForChildren(),
                 isClean());
@@ -552,6 +621,125 @@ private static final long serialVersionUID = 0L;
       }
       return resultBuilder_;
     }
+
+    private com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto userFeature_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto, com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.Builder, com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProtoOrBuilder> userFeatureBuilder_;
+    /**
+     * <code>.UserFeatureProto user_feature = 2;</code>
+     * @return Whether the userFeature field is set.
+     */
+    public boolean hasUserFeature() {
+      return userFeatureBuilder_ != null || userFeature_ != null;
+    }
+    /**
+     * <code>.UserFeatureProto user_feature = 2;</code>
+     * @return The userFeature.
+     */
+    public com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto getUserFeature() {
+      if (userFeatureBuilder_ == null) {
+        return userFeature_ == null ? com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.getDefaultInstance() : userFeature_;
+      } else {
+        return userFeatureBuilder_.getMessage();
+      }
+    }
+    /**
+     * <code>.UserFeatureProto user_feature = 2;</code>
+     */
+    public Builder setUserFeature(com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto value) {
+      if (userFeatureBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        userFeature_ = value;
+        onChanged();
+      } else {
+        userFeatureBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     * <code>.UserFeatureProto user_feature = 2;</code>
+     */
+    public Builder setUserFeature(
+        com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.Builder builderForValue) {
+      if (userFeatureBuilder_ == null) {
+        userFeature_ = builderForValue.build();
+        onChanged();
+      } else {
+        userFeatureBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     * <code>.UserFeatureProto user_feature = 2;</code>
+     */
+    public Builder mergeUserFeature(com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto value) {
+      if (userFeatureBuilder_ == null) {
+        if (userFeature_ != null) {
+          userFeature_ =
+            com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.newBuilder(userFeature_).mergeFrom(value).buildPartial();
+        } else {
+          userFeature_ = value;
+        }
+        onChanged();
+      } else {
+        userFeatureBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     * <code>.UserFeatureProto user_feature = 2;</code>
+     */
+    public Builder clearUserFeature() {
+      if (userFeatureBuilder_ == null) {
+        userFeature_ = null;
+        onChanged();
+      } else {
+        userFeature_ = null;
+        userFeatureBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     * <code>.UserFeatureProto user_feature = 2;</code>
+     */
+    public com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.Builder getUserFeatureBuilder() {
+      
+      onChanged();
+      return getUserFeatureFieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.UserFeatureProto user_feature = 2;</code>
+     */
+    public com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProtoOrBuilder getUserFeatureOrBuilder() {
+      if (userFeatureBuilder_ != null) {
+        return userFeatureBuilder_.getMessageOrBuilder();
+      } else {
+        return userFeature_ == null ?
+            com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.getDefaultInstance() : userFeature_;
+      }
+    }
+    /**
+     * <code>.UserFeatureProto user_feature = 2;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto, com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.Builder, com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProtoOrBuilder> 
+        getUserFeatureFieldBuilder() {
+      if (userFeatureBuilder_ == null) {
+        userFeatureBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto, com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.Builder, com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProtoOrBuilder>(
+                getUserFeature(),
+                getParentForChildren(),
+                isClean());
+        userFeature_ = null;
+      }
+      return userFeatureBuilder_;
+    }
     @java.lang.Override
     public final Builder setUnknownFields(
         final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -569,12 +757,12 @@ private static final long serialVersionUID = 0L;
   }
 
   // @@protoc_insertion_point(class_scope:GetUserFeatureResponse)
-  private static final com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse DEFAULT_INSTANCE;
+  private static final com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse DEFAULT_INSTANCE;
   static {
-    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse();
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse();
   }
 
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse getDefaultInstance() {
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse getDefaultInstance() {
     return DEFAULT_INSTANCE;
   }
 
@@ -599,7 +787,7 @@ private static final long serialVersionUID = 0L;
   }
 
   @java.lang.Override
-  public com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse getDefaultInstanceForType() {
+  public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse getDefaultInstanceForType() {
     return DEFAULT_INSTANCE;
   }
 

+ 39 - 0
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetUserFeatureResponseOrBuilder.java

@@ -0,0 +1,39 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/feature/feature.proto
+
+package com.tzld.piaoquan.recommend.feature.model.feature;
+
+public interface GetUserFeatureResponseOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:GetUserFeatureResponse)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <code>.Result result = 1;</code>
+   * @return Whether the result field is set.
+   */
+  boolean hasResult();
+  /**
+   * <code>.Result result = 1;</code>
+   * @return The result.
+   */
+  com.tzld.piaoquan.recommend.feature.model.common.Result getResult();
+  /**
+   * <code>.Result result = 1;</code>
+   */
+  com.tzld.piaoquan.recommend.feature.model.common.ResultOrBuilder getResultOrBuilder();
+
+  /**
+   * <code>.UserFeatureProto user_feature = 2;</code>
+   * @return Whether the userFeature field is set.
+   */
+  boolean hasUserFeature();
+  /**
+   * <code>.UserFeatureProto user_feature = 2;</code>
+   * @return The userFeature.
+   */
+  com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto getUserFeature();
+  /**
+   * <code>.UserFeatureProto user_feature = 2;</code>
+   */
+  com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProtoOrBuilder getUserFeatureOrBuilder();
+}

+ 76 - 149
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/GetVideoFeatureRequest.java → recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetVideoFeatureRequest.java

@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: com/tzld/piaoquan/recommend/feature/feature.proto
 
-package com.tzld.piaoquan.recommend.server.gen.feature;
+package com.tzld.piaoquan.recommend.feature.model.feature;
 
 /**
  * Protobuf type {@code GetVideoFeatureRequest}
@@ -16,7 +16,6 @@ private static final long serialVersionUID = 0L;
     super(builder);
   }
   private GetVideoFeatureRequest() {
-    uid_ = "";
   }
 
   @java.lang.Override
@@ -49,10 +48,9 @@ private static final long serialVersionUID = 0L;
           case 0:
             done = true;
             break;
-          case 10: {
-            java.lang.String s = input.readStringRequireUtf8();
+          case 8: {
 
-            uid_ = s;
+            videoId_ = input.readInt64();
             break;
           }
           default: {
@@ -76,53 +74,26 @@ private static final long serialVersionUID = 0L;
   }
   public static final com.google.protobuf.Descriptors.Descriptor
       getDescriptor() {
-    return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetVideoFeatureRequest_descriptor;
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureRequest_descriptor;
   }
 
   @java.lang.Override
   protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internalGetFieldAccessorTable() {
-    return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetVideoFeatureRequest_fieldAccessorTable
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureRequest_fieldAccessorTable
         .ensureFieldAccessorsInitialized(
-            com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest.class, com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest.Builder.class);
+            com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest.class, com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest.Builder.class);
   }
 
-  public static final int UID_FIELD_NUMBER = 1;
-  private volatile java.lang.Object uid_;
+  public static final int VIDEO_ID_FIELD_NUMBER = 1;
+  private long videoId_;
   /**
-   * <code>string uid = 1;</code>
-   * @return The uid.
+   * <code>int64 video_id = 1;</code>
+   * @return The videoId.
    */
   @java.lang.Override
-  public java.lang.String getUid() {
-    java.lang.Object ref = uid_;
-    if (ref instanceof java.lang.String) {
-      return (java.lang.String) ref;
-    } else {
-      com.google.protobuf.ByteString bs = 
-          (com.google.protobuf.ByteString) ref;
-      java.lang.String s = bs.toStringUtf8();
-      uid_ = s;
-      return s;
-    }
-  }
-  /**
-   * <code>string uid = 1;</code>
-   * @return The bytes for uid.
-   */
-  @java.lang.Override
-  public com.google.protobuf.ByteString
-      getUidBytes() {
-    java.lang.Object ref = uid_;
-    if (ref instanceof java.lang.String) {
-      com.google.protobuf.ByteString b = 
-          com.google.protobuf.ByteString.copyFromUtf8(
-              (java.lang.String) ref);
-      uid_ = b;
-      return b;
-    } else {
-      return (com.google.protobuf.ByteString) ref;
-    }
+  public long getVideoId() {
+    return videoId_;
   }
 
   private byte memoizedIsInitialized = -1;
@@ -139,8 +110,8 @@ private static final long serialVersionUID = 0L;
   @java.lang.Override
   public void writeTo(com.google.protobuf.CodedOutputStream output)
                       throws java.io.IOException {
-    if (!getUidBytes().isEmpty()) {
-      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, uid_);
+    if (videoId_ != 0L) {
+      output.writeInt64(1, videoId_);
     }
     unknownFields.writeTo(output);
   }
@@ -151,8 +122,9 @@ private static final long serialVersionUID = 0L;
     if (size != -1) return size;
 
     size = 0;
-    if (!getUidBytes().isEmpty()) {
-      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, uid_);
+    if (videoId_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(1, videoId_);
     }
     size += unknownFields.getSerializedSize();
     memoizedSize = size;
@@ -164,13 +136,13 @@ private static final long serialVersionUID = 0L;
     if (obj == this) {
      return true;
     }
-    if (!(obj instanceof com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest)) {
+    if (!(obj instanceof com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest)) {
       return super.equals(obj);
     }
-    com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest other = (com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest) obj;
+    com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest other = (com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest) obj;
 
-    if (!getUid()
-        .equals(other.getUid())) return false;
+    if (getVideoId()
+        != other.getVideoId()) return false;
     if (!unknownFields.equals(other.unknownFields)) return false;
     return true;
   }
@@ -182,76 +154,77 @@ private static final long serialVersionUID = 0L;
     }
     int hash = 41;
     hash = (19 * hash) + getDescriptor().hashCode();
-    hash = (37 * hash) + UID_FIELD_NUMBER;
-    hash = (53 * hash) + getUid().hashCode();
+    hash = (37 * hash) + VIDEO_ID_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getVideoId());
     hash = (29 * hash) + unknownFields.hashCode();
     memoizedHashCode = hash;
     return hash;
   }
 
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest parseFrom(
       java.nio.ByteBuffer data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest 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.feature.GetVideoFeatureRequest parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest parseFrom(
       com.google.protobuf.ByteString data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest 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.feature.GetVideoFeatureRequest parseFrom(byte[] data)
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest parseFrom(byte[] data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest 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.feature.GetVideoFeatureRequest parseFrom(java.io.InputStream input)
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest 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.feature.GetVideoFeatureRequest parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest 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.feature.GetVideoFeatureRequest parseDelimitedFrom(java.io.InputStream input)
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest 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.feature.GetVideoFeatureRequest parseDelimitedFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest 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.feature.GetVideoFeatureRequest parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest 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.feature.GetVideoFeatureRequest parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
@@ -264,7 +237,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.feature.GetVideoFeatureRequest prototype) {
+  public static Builder newBuilder(com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest prototype) {
     return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
   }
   @java.lang.Override
@@ -285,21 +258,21 @@ private static final long serialVersionUID = 0L;
   public static final class Builder extends
       com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
       // @@protoc_insertion_point(builder_implements:GetVideoFeatureRequest)
-      com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequestOrBuilder {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequestOrBuilder {
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetVideoFeatureRequest_descriptor;
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureRequest_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetVideoFeatureRequest_fieldAccessorTable
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureRequest_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest.class, com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest.Builder.class);
+              com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest.class, com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest.Builder.class);
     }
 
-    // Construct using com.tzld.piaoquan.recommend.feature.gen.feature.GetVideoFeatureRequest.newBuilder()
+    // Construct using com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest.newBuilder()
     private Builder() {
       maybeForceBuilderInitialization();
     }
@@ -317,7 +290,7 @@ private static final long serialVersionUID = 0L;
     @java.lang.Override
     public Builder clear() {
       super.clear();
-      uid_ = "";
+      videoId_ = 0L;
 
       return this;
     }
@@ -325,17 +298,17 @@ private static final long serialVersionUID = 0L;
     @java.lang.Override
     public com.google.protobuf.Descriptors.Descriptor
         getDescriptorForType() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetVideoFeatureRequest_descriptor;
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureRequest_descriptor;
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest getDefaultInstanceForType() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest.getDefaultInstance();
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest.getDefaultInstance();
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest build() {
-      com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest result = buildPartial();
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest build() {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest result = buildPartial();
       if (!result.isInitialized()) {
         throw newUninitializedMessageException(result);
       }
@@ -343,9 +316,9 @@ private static final long serialVersionUID = 0L;
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest buildPartial() {
-      com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest result = new com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest(this);
-      result.uid_ = uid_;
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest buildPartial() {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest result = new com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest(this);
+      result.videoId_ = videoId_;
       onBuilt();
       return result;
     }
@@ -384,19 +357,18 @@ 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.feature.GetVideoFeatureRequest) {
-        return mergeFrom((com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest)other);
+      if (other instanceof com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest) {
+        return mergeFrom((com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest)other);
       } else {
         super.mergeFrom(other);
         return this;
       }
     }
 
-    public Builder mergeFrom(com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest other) {
-      if (other == com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest.getDefaultInstance()) return this;
-      if (!other.getUid().isEmpty()) {
-        uid_ = other.uid_;
-        onChanged();
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest other) {
+      if (other == com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest.getDefaultInstance()) return this;
+      if (other.getVideoId() != 0L) {
+        setVideoId(other.getVideoId());
       }
       this.mergeUnknownFields(other.unknownFields);
       onChanged();
@@ -413,11 +385,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.feature.GetVideoFeatureRequest parsedMessage = null;
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest parsedMessage = null;
       try {
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        parsedMessage = (com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest) e.getUnfinishedMessage();
+        parsedMessage = (com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest) e.getUnfinishedMessage();
         throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
@@ -427,78 +399,33 @@ private static final long serialVersionUID = 0L;
       return this;
     }
 
-    private java.lang.Object uid_ = "";
-    /**
-     * <code>string uid = 1;</code>
-     * @return The uid.
-     */
-    public java.lang.String getUid() {
-      java.lang.Object ref = uid_;
-      if (!(ref instanceof java.lang.String)) {
-        com.google.protobuf.ByteString bs =
-            (com.google.protobuf.ByteString) ref;
-        java.lang.String s = bs.toStringUtf8();
-        uid_ = s;
-        return s;
-      } else {
-        return (java.lang.String) ref;
-      }
-    }
+    private long videoId_ ;
     /**
-     * <code>string uid = 1;</code>
-     * @return The bytes for uid.
+     * <code>int64 video_id = 1;</code>
+     * @return The videoId.
      */
-    public com.google.protobuf.ByteString
-        getUidBytes() {
-      java.lang.Object ref = uid_;
-      if (ref instanceof String) {
-        com.google.protobuf.ByteString b = 
-            com.google.protobuf.ByteString.copyFromUtf8(
-                (java.lang.String) ref);
-        uid_ = b;
-        return b;
-      } else {
-        return (com.google.protobuf.ByteString) ref;
-      }
-    }
-    /**
-     * <code>string uid = 1;</code>
-     * @param value The uid to set.
-     * @return This builder for chaining.
-     */
-    public Builder setUid(
-        java.lang.String value) {
-      if (value == null) {
-    throw new NullPointerException();
-  }
-  
-      uid_ = value;
-      onChanged();
-      return this;
+    @java.lang.Override
+    public long getVideoId() {
+      return videoId_;
     }
     /**
-     * <code>string uid = 1;</code>
+     * <code>int64 video_id = 1;</code>
+     * @param value The videoId to set.
      * @return This builder for chaining.
      */
-    public Builder clearUid() {
+    public Builder setVideoId(long value) {
       
-      uid_ = getDefaultInstance().getUid();
+      videoId_ = value;
       onChanged();
       return this;
     }
     /**
-     * <code>string uid = 1;</code>
-     * @param value The bytes for uid to set.
+     * <code>int64 video_id = 1;</code>
      * @return This builder for chaining.
      */
-    public Builder setUidBytes(
-        com.google.protobuf.ByteString value) {
-      if (value == null) {
-    throw new NullPointerException();
-  }
-  checkByteStringIsUtf8(value);
+    public Builder clearVideoId() {
       
-      uid_ = value;
+      videoId_ = 0L;
       onChanged();
       return this;
     }
@@ -519,12 +446,12 @@ private static final long serialVersionUID = 0L;
   }
 
   // @@protoc_insertion_point(class_scope:GetVideoFeatureRequest)
-  private static final com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest DEFAULT_INSTANCE;
+  private static final com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest DEFAULT_INSTANCE;
   static {
-    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest();
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest();
   }
 
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest getDefaultInstance() {
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest getDefaultInstance() {
     return DEFAULT_INSTANCE;
   }
 
@@ -549,7 +476,7 @@ private static final long serialVersionUID = 0L;
   }
 
   @java.lang.Override
-  public com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest getDefaultInstanceForType() {
+  public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest getDefaultInstanceForType() {
     return DEFAULT_INSTANCE;
   }
 

+ 4 - 10
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/GetVideoFeatureRequestOrBuilder.java → recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetVideoFeatureRequestOrBuilder.java

@@ -1,21 +1,15 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: com/tzld/piaoquan/recommend/feature/feature.proto
 
-package com.tzld.piaoquan.recommend.server.gen.feature;
+package com.tzld.piaoquan.recommend.feature.model.feature;
 
 public interface GetVideoFeatureRequestOrBuilder extends
     // @@protoc_insertion_point(interface_extends:GetVideoFeatureRequest)
     com.google.protobuf.MessageOrBuilder {
 
   /**
-   * <code>string uid = 1;</code>
-   * @return The uid.
+   * <code>int64 video_id = 1;</code>
+   * @return The videoId.
    */
-  java.lang.String getUid();
-  /**
-   * <code>string uid = 1;</code>
-   * @return The bytes for uid.
-   */
-  com.google.protobuf.ByteString
-      getUidBytes();
+  long getVideoId();
 }

+ 248 - 60
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/GetVideoFeatureResponse.java → recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetVideoFeatureResponse.java

@@ -1,7 +1,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: com/tzld/piaoquan/recommend/feature/feature.proto
 
-package com.tzld.piaoquan.recommend.server.gen.feature;
+package com.tzld.piaoquan.recommend.feature.model.feature;
 
 /**
  * Protobuf type {@code GetVideoFeatureResponse}
@@ -49,11 +49,11 @@ private static final long serialVersionUID = 0L;
             done = true;
             break;
           case 10: {
-            com.tzld.piaoquan.recommend.server.gen.common.Result.Builder subBuilder = null;
+            com.tzld.piaoquan.recommend.feature.model.common.Result.Builder subBuilder = null;
             if (result_ != null) {
               subBuilder = result_.toBuilder();
             }
-            result_ = input.readMessage(com.tzld.piaoquan.recommend.server.gen.common.Result.parser(), extensionRegistry);
+            result_ = input.readMessage(com.tzld.piaoquan.recommend.feature.model.common.Result.parser(), extensionRegistry);
             if (subBuilder != null) {
               subBuilder.mergeFrom(result_);
               result_ = subBuilder.buildPartial();
@@ -61,6 +61,19 @@ private static final long serialVersionUID = 0L;
 
             break;
           }
+          case 18: {
+            com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.Builder subBuilder = null;
+            if (videoFeature_ != null) {
+              subBuilder = videoFeature_.toBuilder();
+            }
+            videoFeature_ = input.readMessage(com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.parser(), extensionRegistry);
+            if (subBuilder != null) {
+              subBuilder.mergeFrom(videoFeature_);
+              videoFeature_ = subBuilder.buildPartial();
+            }
+
+            break;
+          }
           default: {
             if (!parseUnknownField(
                 input, unknownFields, extensionRegistry, tag)) {
@@ -82,19 +95,19 @@ private static final long serialVersionUID = 0L;
   }
   public static final com.google.protobuf.Descriptors.Descriptor
       getDescriptor() {
-    return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetVideoFeatureResponse_descriptor;
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureResponse_descriptor;
   }
 
   @java.lang.Override
   protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internalGetFieldAccessorTable() {
-    return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetVideoFeatureResponse_fieldAccessorTable
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureResponse_fieldAccessorTable
         .ensureFieldAccessorsInitialized(
-            com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.class, com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.Builder.class);
+            com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.class, com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.Builder.class);
   }
 
   public static final int RESULT_FIELD_NUMBER = 1;
-  private com.tzld.piaoquan.recommend.server.gen.common.Result result_;
+  private com.tzld.piaoquan.recommend.feature.model.common.Result result_;
   /**
    * <code>.Result result = 1;</code>
    * @return Whether the result field is set.
@@ -108,17 +121,43 @@ private static final long serialVersionUID = 0L;
    * @return The result.
    */
   @java.lang.Override
-  public com.tzld.piaoquan.recommend.server.gen.common.Result getResult() {
-    return result_ == null ? com.tzld.piaoquan.recommend.server.gen.common.Result.getDefaultInstance() : result_;
+  public com.tzld.piaoquan.recommend.feature.model.common.Result getResult() {
+    return result_ == null ? com.tzld.piaoquan.recommend.feature.model.common.Result.getDefaultInstance() : result_;
   }
   /**
    * <code>.Result result = 1;</code>
    */
   @java.lang.Override
-  public com.tzld.piaoquan.recommend.server.gen.common.ResultOrBuilder getResultOrBuilder() {
+  public com.tzld.piaoquan.recommend.feature.model.common.ResultOrBuilder getResultOrBuilder() {
     return getResult();
   }
 
+  public static final int VIDEO_FEATURE_FIELD_NUMBER = 2;
+  private com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto videoFeature_;
+  /**
+   * <code>.VideoFeatureProto video_feature = 2;</code>
+   * @return Whether the videoFeature field is set.
+   */
+  @java.lang.Override
+  public boolean hasVideoFeature() {
+    return videoFeature_ != null;
+  }
+  /**
+   * <code>.VideoFeatureProto video_feature = 2;</code>
+   * @return The videoFeature.
+   */
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto getVideoFeature() {
+    return videoFeature_ == null ? com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.getDefaultInstance() : videoFeature_;
+  }
+  /**
+   * <code>.VideoFeatureProto video_feature = 2;</code>
+   */
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProtoOrBuilder getVideoFeatureOrBuilder() {
+    return getVideoFeature();
+  }
+
   private byte memoizedIsInitialized = -1;
   @java.lang.Override
   public final boolean isInitialized() {
@@ -136,6 +175,9 @@ private static final long serialVersionUID = 0L;
     if (result_ != null) {
       output.writeMessage(1, getResult());
     }
+    if (videoFeature_ != null) {
+      output.writeMessage(2, getVideoFeature());
+    }
     unknownFields.writeTo(output);
   }
 
@@ -149,6 +191,10 @@ private static final long serialVersionUID = 0L;
       size += com.google.protobuf.CodedOutputStream
         .computeMessageSize(1, getResult());
     }
+    if (videoFeature_ != null) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(2, getVideoFeature());
+    }
     size += unknownFields.getSerializedSize();
     memoizedSize = size;
     return size;
@@ -159,16 +205,21 @@ private static final long serialVersionUID = 0L;
     if (obj == this) {
      return true;
     }
-    if (!(obj instanceof com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse)) {
+    if (!(obj instanceof com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse)) {
       return super.equals(obj);
     }
-    com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse other = (com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse) obj;
+    com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse other = (com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse) obj;
 
     if (hasResult() != other.hasResult()) return false;
     if (hasResult()) {
       if (!getResult()
           .equals(other.getResult())) return false;
     }
+    if (hasVideoFeature() != other.hasVideoFeature()) return false;
+    if (hasVideoFeature()) {
+      if (!getVideoFeature()
+          .equals(other.getVideoFeature())) return false;
+    }
     if (!unknownFields.equals(other.unknownFields)) return false;
     return true;
   }
@@ -184,74 +235,78 @@ private static final long serialVersionUID = 0L;
       hash = (37 * hash) + RESULT_FIELD_NUMBER;
       hash = (53 * hash) + getResult().hashCode();
     }
+    if (hasVideoFeature()) {
+      hash = (37 * hash) + VIDEO_FEATURE_FIELD_NUMBER;
+      hash = (53 * hash) + getVideoFeature().hashCode();
+    }
     hash = (29 * hash) + unknownFields.hashCode();
     memoizedHashCode = hash;
     return hash;
   }
 
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse parseFrom(
       java.nio.ByteBuffer data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse 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.feature.GetVideoFeatureResponse parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse parseFrom(
       com.google.protobuf.ByteString data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse 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.feature.GetVideoFeatureResponse parseFrom(byte[] data)
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse parseFrom(byte[] data)
       throws com.google.protobuf.InvalidProtocolBufferException {
     return PARSER.parseFrom(data);
   }
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse 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.feature.GetVideoFeatureResponse parseFrom(java.io.InputStream input)
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse 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.feature.GetVideoFeatureResponse parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse 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.feature.GetVideoFeatureResponse parseDelimitedFrom(java.io.InputStream input)
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse 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.feature.GetVideoFeatureResponse parseDelimitedFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse 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.feature.GetVideoFeatureResponse parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse 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.feature.GetVideoFeatureResponse parseFrom(
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse parseFrom(
       com.google.protobuf.CodedInputStream input,
       com.google.protobuf.ExtensionRegistryLite extensionRegistry)
       throws java.io.IOException {
@@ -264,7 +319,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.feature.GetVideoFeatureResponse prototype) {
+  public static Builder newBuilder(com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse prototype) {
     return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
   }
   @java.lang.Override
@@ -285,21 +340,21 @@ private static final long serialVersionUID = 0L;
   public static final class Builder extends
       com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
       // @@protoc_insertion_point(builder_implements:GetVideoFeatureResponse)
-      com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponseOrBuilder {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponseOrBuilder {
     public static final com.google.protobuf.Descriptors.Descriptor
         getDescriptor() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetVideoFeatureResponse_descriptor;
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureResponse_descriptor;
     }
 
     @java.lang.Override
     protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
         internalGetFieldAccessorTable() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetVideoFeatureResponse_fieldAccessorTable
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureResponse_fieldAccessorTable
           .ensureFieldAccessorsInitialized(
-              com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.class, com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.Builder.class);
+              com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.class, com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.Builder.class);
     }
 
-    // Construct using com.tzld.piaoquan.recommend.feature.gen.feature.GetVideoFeatureResponse.newBuilder()
+    // Construct using com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.newBuilder()
     private Builder() {
       maybeForceBuilderInitialization();
     }
@@ -323,23 +378,29 @@ private static final long serialVersionUID = 0L;
         result_ = null;
         resultBuilder_ = null;
       }
+      if (videoFeatureBuilder_ == null) {
+        videoFeature_ = null;
+      } else {
+        videoFeature_ = null;
+        videoFeatureBuilder_ = null;
+      }
       return this;
     }
 
     @java.lang.Override
     public com.google.protobuf.Descriptors.Descriptor
         getDescriptorForType() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.Feature.internal_static_GetVideoFeatureResponse_descriptor;
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureResponse_descriptor;
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse getDefaultInstanceForType() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.getDefaultInstance();
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.getDefaultInstance();
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse build() {
-      com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse result = buildPartial();
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse build() {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse result = buildPartial();
       if (!result.isInitialized()) {
         throw newUninitializedMessageException(result);
       }
@@ -347,13 +408,18 @@ private static final long serialVersionUID = 0L;
     }
 
     @java.lang.Override
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse buildPartial() {
-      com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse result = new com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse(this);
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse buildPartial() {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse result = new com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse(this);
       if (resultBuilder_ == null) {
         result.result_ = result_;
       } else {
         result.result_ = resultBuilder_.build();
       }
+      if (videoFeatureBuilder_ == null) {
+        result.videoFeature_ = videoFeature_;
+      } else {
+        result.videoFeature_ = videoFeatureBuilder_.build();
+      }
       onBuilt();
       return result;
     }
@@ -392,19 +458,22 @@ 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.feature.GetVideoFeatureResponse) {
-        return mergeFrom((com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse)other);
+      if (other instanceof com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse) {
+        return mergeFrom((com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse)other);
       } else {
         super.mergeFrom(other);
         return this;
       }
     }
 
-    public Builder mergeFrom(com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse other) {
-      if (other == com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.getDefaultInstance()) return this;
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse other) {
+      if (other == com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.getDefaultInstance()) return this;
       if (other.hasResult()) {
         mergeResult(other.getResult());
       }
+      if (other.hasVideoFeature()) {
+        mergeVideoFeature(other.getVideoFeature());
+      }
       this.mergeUnknownFields(other.unknownFields);
       onChanged();
       return this;
@@ -420,11 +489,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.feature.GetVideoFeatureResponse parsedMessage = null;
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse parsedMessage = null;
       try {
         parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
       } catch (com.google.protobuf.InvalidProtocolBufferException e) {
-        parsedMessage = (com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse) e.getUnfinishedMessage();
+        parsedMessage = (com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse) e.getUnfinishedMessage();
         throw e.unwrapIOException();
       } finally {
         if (parsedMessage != null) {
@@ -434,9 +503,9 @@ private static final long serialVersionUID = 0L;
       return this;
     }
 
-    private com.tzld.piaoquan.recommend.server.gen.common.Result result_;
+    private com.tzld.piaoquan.recommend.feature.model.common.Result result_;
     private com.google.protobuf.SingleFieldBuilderV3<
-        com.tzld.piaoquan.recommend.server.gen.common.Result, com.tzld.piaoquan.recommend.server.gen.common.Result.Builder, com.tzld.piaoquan.recommend.server.gen.common.ResultOrBuilder> resultBuilder_;
+        com.tzld.piaoquan.recommend.feature.model.common.Result, com.tzld.piaoquan.recommend.feature.model.common.Result.Builder, com.tzld.piaoquan.recommend.feature.model.common.ResultOrBuilder> resultBuilder_;
     /**
      * <code>.Result result = 1;</code>
      * @return Whether the result field is set.
@@ -448,9 +517,9 @@ private static final long serialVersionUID = 0L;
      * <code>.Result result = 1;</code>
      * @return The result.
      */
-    public com.tzld.piaoquan.recommend.server.gen.common.Result getResult() {
+    public com.tzld.piaoquan.recommend.feature.model.common.Result getResult() {
       if (resultBuilder_ == null) {
-        return result_ == null ? com.tzld.piaoquan.recommend.server.gen.common.Result.getDefaultInstance() : result_;
+        return result_ == null ? com.tzld.piaoquan.recommend.feature.model.common.Result.getDefaultInstance() : result_;
       } else {
         return resultBuilder_.getMessage();
       }
@@ -458,7 +527,7 @@ private static final long serialVersionUID = 0L;
     /**
      * <code>.Result result = 1;</code>
      */
-    public Builder setResult(com.tzld.piaoquan.recommend.server.gen.common.Result value) {
+    public Builder setResult(com.tzld.piaoquan.recommend.feature.model.common.Result value) {
       if (resultBuilder_ == null) {
         if (value == null) {
           throw new NullPointerException();
@@ -475,7 +544,7 @@ private static final long serialVersionUID = 0L;
      * <code>.Result result = 1;</code>
      */
     public Builder setResult(
-        com.tzld.piaoquan.recommend.server.gen.common.Result.Builder builderForValue) {
+        com.tzld.piaoquan.recommend.feature.model.common.Result.Builder builderForValue) {
       if (resultBuilder_ == null) {
         result_ = builderForValue.build();
         onChanged();
@@ -488,11 +557,11 @@ private static final long serialVersionUID = 0L;
     /**
      * <code>.Result result = 1;</code>
      */
-    public Builder mergeResult(com.tzld.piaoquan.recommend.server.gen.common.Result value) {
+    public Builder mergeResult(com.tzld.piaoquan.recommend.feature.model.common.Result value) {
       if (resultBuilder_ == null) {
         if (result_ != null) {
           result_ =
-            com.tzld.piaoquan.recommend.server.gen.common.Result.newBuilder(result_).mergeFrom(value).buildPartial();
+            com.tzld.piaoquan.recommend.feature.model.common.Result.newBuilder(result_).mergeFrom(value).buildPartial();
         } else {
           result_ = value;
         }
@@ -520,7 +589,7 @@ private static final long serialVersionUID = 0L;
     /**
      * <code>.Result result = 1;</code>
      */
-    public com.tzld.piaoquan.recommend.server.gen.common.Result.Builder getResultBuilder() {
+    public com.tzld.piaoquan.recommend.feature.model.common.Result.Builder getResultBuilder() {
       
       onChanged();
       return getResultFieldBuilder().getBuilder();
@@ -528,23 +597,23 @@ private static final long serialVersionUID = 0L;
     /**
      * <code>.Result result = 1;</code>
      */
-    public com.tzld.piaoquan.recommend.server.gen.common.ResultOrBuilder getResultOrBuilder() {
+    public com.tzld.piaoquan.recommend.feature.model.common.ResultOrBuilder getResultOrBuilder() {
       if (resultBuilder_ != null) {
         return resultBuilder_.getMessageOrBuilder();
       } else {
         return result_ == null ?
-            com.tzld.piaoquan.recommend.server.gen.common.Result.getDefaultInstance() : result_;
+            com.tzld.piaoquan.recommend.feature.model.common.Result.getDefaultInstance() : result_;
       }
     }
     /**
      * <code>.Result result = 1;</code>
      */
     private com.google.protobuf.SingleFieldBuilderV3<
-        com.tzld.piaoquan.recommend.server.gen.common.Result, com.tzld.piaoquan.recommend.server.gen.common.Result.Builder, com.tzld.piaoquan.recommend.server.gen.common.ResultOrBuilder>
+        com.tzld.piaoquan.recommend.feature.model.common.Result, com.tzld.piaoquan.recommend.feature.model.common.Result.Builder, com.tzld.piaoquan.recommend.feature.model.common.ResultOrBuilder> 
         getResultFieldBuilder() {
       if (resultBuilder_ == null) {
         resultBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
-            com.tzld.piaoquan.recommend.server.gen.common.Result, com.tzld.piaoquan.recommend.server.gen.common.Result.Builder, com.tzld.piaoquan.recommend.server.gen.common.ResultOrBuilder>(
+            com.tzld.piaoquan.recommend.feature.model.common.Result, com.tzld.piaoquan.recommend.feature.model.common.Result.Builder, com.tzld.piaoquan.recommend.feature.model.common.ResultOrBuilder>(
                 getResult(),
                 getParentForChildren(),
                 isClean());
@@ -552,6 +621,125 @@ private static final long serialVersionUID = 0L;
       }
       return resultBuilder_;
     }
+
+    private com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto videoFeature_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto, com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.Builder, com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProtoOrBuilder> videoFeatureBuilder_;
+    /**
+     * <code>.VideoFeatureProto video_feature = 2;</code>
+     * @return Whether the videoFeature field is set.
+     */
+    public boolean hasVideoFeature() {
+      return videoFeatureBuilder_ != null || videoFeature_ != null;
+    }
+    /**
+     * <code>.VideoFeatureProto video_feature = 2;</code>
+     * @return The videoFeature.
+     */
+    public com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto getVideoFeature() {
+      if (videoFeatureBuilder_ == null) {
+        return videoFeature_ == null ? com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.getDefaultInstance() : videoFeature_;
+      } else {
+        return videoFeatureBuilder_.getMessage();
+      }
+    }
+    /**
+     * <code>.VideoFeatureProto video_feature = 2;</code>
+     */
+    public Builder setVideoFeature(com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto value) {
+      if (videoFeatureBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        videoFeature_ = value;
+        onChanged();
+      } else {
+        videoFeatureBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     * <code>.VideoFeatureProto video_feature = 2;</code>
+     */
+    public Builder setVideoFeature(
+        com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.Builder builderForValue) {
+      if (videoFeatureBuilder_ == null) {
+        videoFeature_ = builderForValue.build();
+        onChanged();
+      } else {
+        videoFeatureBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     * <code>.VideoFeatureProto video_feature = 2;</code>
+     */
+    public Builder mergeVideoFeature(com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto value) {
+      if (videoFeatureBuilder_ == null) {
+        if (videoFeature_ != null) {
+          videoFeature_ =
+            com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.newBuilder(videoFeature_).mergeFrom(value).buildPartial();
+        } else {
+          videoFeature_ = value;
+        }
+        onChanged();
+      } else {
+        videoFeatureBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     * <code>.VideoFeatureProto video_feature = 2;</code>
+     */
+    public Builder clearVideoFeature() {
+      if (videoFeatureBuilder_ == null) {
+        videoFeature_ = null;
+        onChanged();
+      } else {
+        videoFeature_ = null;
+        videoFeatureBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     * <code>.VideoFeatureProto video_feature = 2;</code>
+     */
+    public com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.Builder getVideoFeatureBuilder() {
+      
+      onChanged();
+      return getVideoFeatureFieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.VideoFeatureProto video_feature = 2;</code>
+     */
+    public com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProtoOrBuilder getVideoFeatureOrBuilder() {
+      if (videoFeatureBuilder_ != null) {
+        return videoFeatureBuilder_.getMessageOrBuilder();
+      } else {
+        return videoFeature_ == null ?
+            com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.getDefaultInstance() : videoFeature_;
+      }
+    }
+    /**
+     * <code>.VideoFeatureProto video_feature = 2;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto, com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.Builder, com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProtoOrBuilder> 
+        getVideoFeatureFieldBuilder() {
+      if (videoFeatureBuilder_ == null) {
+        videoFeatureBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto, com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.Builder, com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProtoOrBuilder>(
+                getVideoFeature(),
+                getParentForChildren(),
+                isClean());
+        videoFeature_ = null;
+      }
+      return videoFeatureBuilder_;
+    }
     @java.lang.Override
     public final Builder setUnknownFields(
         final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -569,12 +757,12 @@ private static final long serialVersionUID = 0L;
   }
 
   // @@protoc_insertion_point(class_scope:GetVideoFeatureResponse)
-  private static final com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse DEFAULT_INSTANCE;
+  private static final com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse DEFAULT_INSTANCE;
   static {
-    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse();
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse();
   }
 
-  public static com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse getDefaultInstance() {
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse getDefaultInstance() {
     return DEFAULT_INSTANCE;
   }
 
@@ -599,7 +787,7 @@ private static final long serialVersionUID = 0L;
   }
 
   @java.lang.Override
-  public com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse getDefaultInstanceForType() {
+  public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse getDefaultInstanceForType() {
     return DEFAULT_INSTANCE;
   }
 

+ 39 - 0
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetVideoFeatureResponseOrBuilder.java

@@ -0,0 +1,39 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/feature/feature.proto
+
+package com.tzld.piaoquan.recommend.feature.model.feature;
+
+public interface GetVideoFeatureResponseOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:GetVideoFeatureResponse)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <code>.Result result = 1;</code>
+   * @return Whether the result field is set.
+   */
+  boolean hasResult();
+  /**
+   * <code>.Result result = 1;</code>
+   * @return The result.
+   */
+  com.tzld.piaoquan.recommend.feature.model.common.Result getResult();
+  /**
+   * <code>.Result result = 1;</code>
+   */
+  com.tzld.piaoquan.recommend.feature.model.common.ResultOrBuilder getResultOrBuilder();
+
+  /**
+   * <code>.VideoFeatureProto video_feature = 2;</code>
+   * @return Whether the videoFeature field is set.
+   */
+  boolean hasVideoFeature();
+  /**
+   * <code>.VideoFeatureProto video_feature = 2;</code>
+   * @return The videoFeature.
+   */
+  com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto getVideoFeature();
+  /**
+   * <code>.VideoFeatureProto video_feature = 2;</code>
+   */
+  com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProtoOrBuilder getVideoFeatureOrBuilder();
+}

+ 419 - 0
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/UserFeatureProto.java

@@ -0,0 +1,419 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/feature/feature.proto
+
+package com.tzld.piaoquan.recommend.feature.model.feature;
+
+/**
+ * Protobuf type {@code UserFeatureProto}
+ */
+public final class UserFeatureProto extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:UserFeatureProto)
+    UserFeatureProtoOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use UserFeatureProto.newBuilder() to construct.
+  private UserFeatureProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private UserFeatureProto() {
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new UserFeatureProto();
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet
+  getUnknownFields() {
+    return this.unknownFields;
+  }
+  private UserFeatureProto(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          default: {
+            if (!parseUnknownField(
+                input, unknownFields, extensionRegistry, tag)) {
+              done = true;
+            }
+            break;
+          }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_UserFeatureProto_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_UserFeatureProto_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.class, com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.Builder.class);
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto)) {
+      return super.equals(obj);
+    }
+    com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto other = (com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto) obj;
+
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto 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.feature.model.feature.UserFeatureProto parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto 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.feature.model.feature.UserFeatureProto parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto 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.feature.model.feature.UserFeatureProto parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto 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.feature.model.feature.UserFeatureProto parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * Protobuf type {@code UserFeatureProto}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:UserFeatureProto)
+      com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProtoOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_UserFeatureProto_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_UserFeatureProto_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.class, com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.Builder.class);
+    }
+
+    // Construct using com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3
+              .alwaysUseFieldBuilders) {
+      }
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_UserFeatureProto_descriptor;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto build() {
+      com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto buildPartial() {
+      com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto result = new com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto(this);
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto) {
+        return mergeFrom((com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto other) {
+      if (other == com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto.getDefaultInstance()) return this;
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:UserFeatureProto)
+  }
+
+  // @@protoc_insertion_point(class_scope:UserFeatureProto)
+  private static final com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto();
+  }
+
+  public static com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<UserFeatureProto>
+      PARSER = new com.google.protobuf.AbstractParser<UserFeatureProto>() {
+    @java.lang.Override
+    public UserFeatureProto parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return new UserFeatureProto(input, extensionRegistry);
+    }
+  };
+
+  public static com.google.protobuf.Parser<UserFeatureProto> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<UserFeatureProto> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+

+ 9 - 0
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/UserFeatureProtoOrBuilder.java

@@ -0,0 +1,9 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/feature/feature.proto
+
+package com.tzld.piaoquan.recommend.feature.model.feature;
+
+public interface UserFeatureProtoOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:UserFeatureProto)
+    com.google.protobuf.MessageOrBuilder {
+}

+ 419 - 0
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/VideoFeatureProto.java

@@ -0,0 +1,419 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/feature/feature.proto
+
+package com.tzld.piaoquan.recommend.feature.model.feature;
+
+/**
+ * Protobuf type {@code VideoFeatureProto}
+ */
+public final class VideoFeatureProto extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:VideoFeatureProto)
+    VideoFeatureProtoOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use VideoFeatureProto.newBuilder() to construct.
+  private VideoFeatureProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private VideoFeatureProto() {
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new VideoFeatureProto();
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet
+  getUnknownFields() {
+    return this.unknownFields;
+  }
+  private VideoFeatureProto(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    com.google.protobuf.UnknownFieldSet.Builder unknownFields =
+        com.google.protobuf.UnknownFieldSet.newBuilder();
+    try {
+      boolean done = false;
+      while (!done) {
+        int tag = input.readTag();
+        switch (tag) {
+          case 0:
+            done = true;
+            break;
+          default: {
+            if (!parseUnknownField(
+                input, unknownFields, extensionRegistry, tag)) {
+              done = true;
+            }
+            break;
+          }
+        }
+      }
+    } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+      throw e.setUnfinishedMessage(this);
+    } catch (java.io.IOException e) {
+      throw new com.google.protobuf.InvalidProtocolBufferException(
+          e).setUnfinishedMessage(this);
+    } finally {
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_VideoFeatureProto_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_VideoFeatureProto_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.class, com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.Builder.class);
+  }
+
+  private byte memoizedIsInitialized = -1;
+  @java.lang.Override
+  public final boolean isInitialized() {
+    byte isInitialized = memoizedIsInitialized;
+    if (isInitialized == 1) return true;
+    if (isInitialized == 0) return false;
+
+    memoizedIsInitialized = 1;
+    return true;
+  }
+
+  @java.lang.Override
+  public void writeTo(com.google.protobuf.CodedOutputStream output)
+                      throws java.io.IOException {
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto)) {
+      return super.equals(obj);
+    }
+    com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto other = (com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto) obj;
+
+    if (!unknownFields.equals(other.unknownFields)) return false;
+    return true;
+  }
+
+  @java.lang.Override
+  public int hashCode() {
+    if (memoizedHashCode != 0) {
+      return memoizedHashCode;
+    }
+    int hash = 41;
+    hash = (19 * hash) + getDescriptor().hashCode();
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto 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.feature.model.feature.VideoFeatureProto parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto 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.feature.model.feature.VideoFeatureProto parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto 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.feature.model.feature.VideoFeatureProto parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto 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.feature.model.feature.VideoFeatureProto parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto prototype) {
+    return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype);
+  }
+  @java.lang.Override
+  public Builder toBuilder() {
+    return this == DEFAULT_INSTANCE
+        ? new Builder() : new Builder().mergeFrom(this);
+  }
+
+  @java.lang.Override
+  protected Builder newBuilderForType(
+      com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+    Builder builder = new Builder(parent);
+    return builder;
+  }
+  /**
+   * Protobuf type {@code VideoFeatureProto}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:VideoFeatureProto)
+      com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProtoOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_VideoFeatureProto_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_VideoFeatureProto_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.class, com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.Builder.class);
+    }
+
+    // Construct using com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3
+              .alwaysUseFieldBuilders) {
+      }
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_VideoFeatureProto_descriptor;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto build() {
+      com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto buildPartial() {
+      com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto result = new com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto(this);
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto) {
+        return mergeFrom((com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto other) {
+      if (other == com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto.getDefaultInstance()) return this;
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+    @java.lang.Override
+    public final Builder setUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.setUnknownFields(unknownFields);
+    }
+
+    @java.lang.Override
+    public final Builder mergeUnknownFields(
+        final com.google.protobuf.UnknownFieldSet unknownFields) {
+      return super.mergeUnknownFields(unknownFields);
+    }
+
+
+    // @@protoc_insertion_point(builder_scope:VideoFeatureProto)
+  }
+
+  // @@protoc_insertion_point(class_scope:VideoFeatureProto)
+  private static final com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto();
+  }
+
+  public static com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<VideoFeatureProto>
+      PARSER = new com.google.protobuf.AbstractParser<VideoFeatureProto>() {
+    @java.lang.Override
+    public VideoFeatureProto parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return new VideoFeatureProto(input, extensionRegistry);
+    }
+  };
+
+  public static com.google.protobuf.Parser<VideoFeatureProto> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<VideoFeatureProto> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+

+ 9 - 0
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/VideoFeatureProtoOrBuilder.java

@@ -0,0 +1,9 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/feature/feature.proto
+
+package com.tzld.piaoquan.recommend.feature.model.feature;
+
+public interface VideoFeatureProtoOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:VideoFeatureProto)
+    com.google.protobuf.MessageOrBuilder {
+}

+ 0 - 24
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/GetUserFeatureResponseOrBuilder.java

@@ -1,24 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: com/tzld/piaoquan/recommend/feature/feature.proto
-
-package com.tzld.piaoquan.recommend.server.gen.feature;
-
-public interface GetUserFeatureResponseOrBuilder extends
-    // @@protoc_insertion_point(interface_extends:GetUserFeatureResponse)
-    com.google.protobuf.MessageOrBuilder {
-
-  /**
-   * <code>.Result result = 1;</code>
-   * @return Whether the result field is set.
-   */
-  boolean hasResult();
-  /**
-   * <code>.Result result = 1;</code>
-   * @return The result.
-   */
-  com.tzld.piaoquan.recommend.server.gen.common.Result getResult();
-  /**
-   * <code>.Result result = 1;</code>
-   */
-  com.tzld.piaoquan.recommend.server.gen.common.ResultOrBuilder getResultOrBuilder();
-}

+ 0 - 24
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/GetVideoFeatureResponseOrBuilder.java

@@ -1,24 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: com/tzld/piaoquan/recommend/feature/feature.proto
-
-package com.tzld.piaoquan.recommend.server.gen.feature;
-
-public interface GetVideoFeatureResponseOrBuilder extends
-    // @@protoc_insertion_point(interface_extends:GetVideoFeatureResponse)
-    com.google.protobuf.MessageOrBuilder {
-
-  /**
-   * <code>.Result result = 1;</code>
-   * @return Whether the result field is set.
-   */
-  boolean hasResult();
-  /**
-   * <code>.Result result = 1;</code>
-   * @return The result.
-   */
-  com.tzld.piaoquan.recommend.server.gen.common.Result getResult();
-  /**
-   * <code>.Result result = 1;</code>
-   */
-  com.tzld.piaoquan.recommend.server.gen.common.ResultOrBuilder getResultOrBuilder();
-}

+ 0 - 308
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/RecommendService.java

@@ -1,308 +0,0 @@
-// Generated by the protocol buffer compiler.  DO NOT EDIT!
-// source: com/tzld/piaoquan/recommend/feature/feature.proto
-
-package com.tzld.piaoquan.recommend.server.gen.feature;
-
-/**
- * Protobuf service {@code RecommendService}
- */
-public  abstract class RecommendService
-    implements com.google.protobuf.Service {
-  protected RecommendService() {}
-
-  public interface Interface {
-    /**
-     * <code>rpc GetUserFeature(.GetUserFeatureRequest) returns (.GetUserFeatureResponse);</code>
-     */
-    public abstract void getUserFeature(
-        com.google.protobuf.RpcController controller,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request,
-        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> done);
-
-    /**
-     * <code>rpc GetVideoFeature(.GetVideoFeatureRequest) returns (.GetVideoFeatureResponse);</code>
-     */
-    public abstract void getVideoFeature(
-        com.google.protobuf.RpcController controller,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request,
-        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> done);
-
-  }
-
-  public static com.google.protobuf.Service newReflectiveService(
-      final Interface impl) {
-    return new RecommendService() {
-      @java.lang.Override
-      public  void getUserFeature(
-          com.google.protobuf.RpcController controller,
-          com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request,
-          com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> done) {
-        impl.getUserFeature(controller, request, done);
-      }
-
-      @java.lang.Override
-      public  void getVideoFeature(
-          com.google.protobuf.RpcController controller,
-          com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request,
-          com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> done) {
-        impl.getVideoFeature(controller, request, done);
-      }
-
-    };
-  }
-
-  public static com.google.protobuf.BlockingService
-      newReflectiveBlockingService(final BlockingInterface impl) {
-    return new com.google.protobuf.BlockingService() {
-      public final com.google.protobuf.Descriptors.ServiceDescriptor
-          getDescriptorForType() {
-        return getDescriptor();
-      }
-
-      public final com.google.protobuf.Message callBlockingMethod(
-          com.google.protobuf.Descriptors.MethodDescriptor method,
-          com.google.protobuf.RpcController controller,
-          com.google.protobuf.Message request)
-          throws com.google.protobuf.ServiceException {
-        if (method.getService() != getDescriptor()) {
-          throw new java.lang.IllegalArgumentException(
-            "Service.callBlockingMethod() given method descriptor for " +
-            "wrong service type.");
-        }
-        switch(method.getIndex()) {
-          case 0:
-            return impl.getUserFeature(controller, (com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest)request);
-          case 1:
-            return impl.getVideoFeature(controller, (com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest)request);
-          default:
-            throw new java.lang.AssertionError("Can't get here.");
-        }
-      }
-
-      public final com.google.protobuf.Message
-          getRequestPrototype(
-          com.google.protobuf.Descriptors.MethodDescriptor method) {
-        if (method.getService() != getDescriptor()) {
-          throw new java.lang.IllegalArgumentException(
-            "Service.getRequestPrototype() given method " +
-            "descriptor for wrong service type.");
-        }
-        switch(method.getIndex()) {
-          case 0:
-            return com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest.getDefaultInstance();
-          case 1:
-            return com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest.getDefaultInstance();
-          default:
-            throw new java.lang.AssertionError("Can't get here.");
-        }
-      }
-
-      public final com.google.protobuf.Message
-          getResponsePrototype(
-          com.google.protobuf.Descriptors.MethodDescriptor method) {
-        if (method.getService() != getDescriptor()) {
-          throw new java.lang.IllegalArgumentException(
-            "Service.getResponsePrototype() given method " +
-            "descriptor for wrong service type.");
-        }
-        switch(method.getIndex()) {
-          case 0:
-            return com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.getDefaultInstance();
-          case 1:
-            return com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.getDefaultInstance();
-          default:
-            throw new java.lang.AssertionError("Can't get here.");
-        }
-      }
-
-    };
-  }
-
-  /**
-   * <code>rpc GetUserFeature(.GetUserFeatureRequest) returns (.GetUserFeatureResponse);</code>
-   */
-  public abstract void getUserFeature(
-      com.google.protobuf.RpcController controller,
-      com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request,
-      com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> done);
-
-  /**
-   * <code>rpc GetVideoFeature(.GetVideoFeatureRequest) returns (.GetVideoFeatureResponse);</code>
-   */
-  public abstract void getVideoFeature(
-      com.google.protobuf.RpcController controller,
-      com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request,
-      com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> done);
-
-  public static final
-      com.google.protobuf.Descriptors.ServiceDescriptor
-      getDescriptor() {
-    return com.tzld.piaoquan.recommend.server.gen.feature.Feature.getDescriptor().getServices().get(0);
-  }
-  public final com.google.protobuf.Descriptors.ServiceDescriptor
-      getDescriptorForType() {
-    return getDescriptor();
-  }
-
-  public final void callMethod(
-      com.google.protobuf.Descriptors.MethodDescriptor method,
-      com.google.protobuf.RpcController controller,
-      com.google.protobuf.Message request,
-      com.google.protobuf.RpcCallback<
-        com.google.protobuf.Message> done) {
-    if (method.getService() != getDescriptor()) {
-      throw new java.lang.IllegalArgumentException(
-        "Service.callMethod() given method descriptor for wrong " +
-        "service type.");
-    }
-    switch(method.getIndex()) {
-      case 0:
-        this.getUserFeature(controller, (com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest)request,
-          com.google.protobuf.RpcUtil.<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse>specializeCallback(
-            done));
-        return;
-      case 1:
-        this.getVideoFeature(controller, (com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest)request,
-          com.google.protobuf.RpcUtil.<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse>specializeCallback(
-            done));
-        return;
-      default:
-        throw new java.lang.AssertionError("Can't get here.");
-    }
-  }
-
-  public final com.google.protobuf.Message
-      getRequestPrototype(
-      com.google.protobuf.Descriptors.MethodDescriptor method) {
-    if (method.getService() != getDescriptor()) {
-      throw new java.lang.IllegalArgumentException(
-        "Service.getRequestPrototype() given method " +
-        "descriptor for wrong service type.");
-    }
-    switch(method.getIndex()) {
-      case 0:
-        return com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest.getDefaultInstance();
-      case 1:
-        return com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest.getDefaultInstance();
-      default:
-        throw new java.lang.AssertionError("Can't get here.");
-    }
-  }
-
-  public final com.google.protobuf.Message
-      getResponsePrototype(
-      com.google.protobuf.Descriptors.MethodDescriptor method) {
-    if (method.getService() != getDescriptor()) {
-      throw new java.lang.IllegalArgumentException(
-        "Service.getResponsePrototype() given method " +
-        "descriptor for wrong service type.");
-    }
-    switch(method.getIndex()) {
-      case 0:
-        return com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.getDefaultInstance();
-      case 1:
-        return com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.getDefaultInstance();
-      default:
-        throw new java.lang.AssertionError("Can't get here.");
-    }
-  }
-
-  public static Stub newStub(
-      com.google.protobuf.RpcChannel channel) {
-    return new Stub(channel);
-  }
-
-  public static final class Stub extends com.tzld.piaoquan.recommend.server.gen.feature.RecommendService implements Interface {
-    private Stub(com.google.protobuf.RpcChannel channel) {
-      this.channel = channel;
-    }
-
-    private final com.google.protobuf.RpcChannel channel;
-
-    public com.google.protobuf.RpcChannel getChannel() {
-      return channel;
-    }
-
-    public  void getUserFeature(
-        com.google.protobuf.RpcController controller,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request,
-        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> done) {
-      channel.callMethod(
-        getDescriptor().getMethods().get(0),
-        controller,
-        request,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.getDefaultInstance(),
-        com.google.protobuf.RpcUtil.generalizeCallback(
-          done,
-          com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.class,
-          com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.getDefaultInstance()));
-    }
-
-    public  void getVideoFeature(
-        com.google.protobuf.RpcController controller,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request,
-        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> done) {
-      channel.callMethod(
-        getDescriptor().getMethods().get(1),
-        controller,
-        request,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.getDefaultInstance(),
-        com.google.protobuf.RpcUtil.generalizeCallback(
-          done,
-          com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.class,
-          com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.getDefaultInstance()));
-    }
-  }
-
-  public static BlockingInterface newBlockingStub(
-      com.google.protobuf.BlockingRpcChannel channel) {
-    return new BlockingStub(channel);
-  }
-
-  public interface BlockingInterface {
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse getUserFeature(
-        com.google.protobuf.RpcController controller,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request)
-        throws com.google.protobuf.ServiceException;
-
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse getVideoFeature(
-        com.google.protobuf.RpcController controller,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request)
-        throws com.google.protobuf.ServiceException;
-  }
-
-  private static final class BlockingStub implements BlockingInterface {
-    private BlockingStub(com.google.protobuf.BlockingRpcChannel channel) {
-      this.channel = channel;
-    }
-
-    private final com.google.protobuf.BlockingRpcChannel channel;
-
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse getUserFeature(
-        com.google.protobuf.RpcController controller,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request)
-        throws com.google.protobuf.ServiceException {
-      return (com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse) channel.callBlockingMethod(
-        getDescriptor().getMethods().get(0),
-        controller,
-        request,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.getDefaultInstance());
-    }
-
-
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse getVideoFeature(
-        com.google.protobuf.RpcController controller,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request)
-        throws com.google.protobuf.ServiceException {
-      return (com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse) channel.callBlockingMethod(
-        getDescriptor().getMethods().get(1),
-        controller,
-        request,
-        com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.getDefaultInstance());
-    }
-
-  }
-
-  // @@protoc_insertion_point(class_scope:RecommendService)
-}
-

+ 0 - 355
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/feature/RecommendServiceGrpc.java

@@ -1,355 +0,0 @@
-package com.tzld.piaoquan.recommend.server.gen.feature;
-
-import static io.grpc.MethodDescriptor.generateFullMethodName;
-import static io.grpc.stub.ClientCalls.asyncUnaryCall;
-import static io.grpc.stub.ClientCalls.blockingServerStreamingCall;
-import static io.grpc.stub.ClientCalls.blockingUnaryCall;
-import static io.grpc.stub.ClientCalls.futureUnaryCall;
-import static io.grpc.stub.ServerCalls.asyncUnaryCall;
-import static io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall;
-
-/**
- */
-@javax.annotation.Generated(
-    value = "by gRPC proto compiler (version 1.34.1)",
-    comments = "Source: com/tzld/piaoquan/recommend/feature/feature.proto")
-public final class RecommendServiceGrpc {
-
-  private RecommendServiceGrpc() {}
-
-  public static final String SERVICE_NAME = "RecommendService";
-
-  // Static method descriptors that strictly reflect the proto.
-  private static volatile io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest,
-      com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> getGetUserFeatureMethod;
-
-  @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "GetUserFeature",
-      requestType = com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest.class,
-      responseType = com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.class,
-      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest,
-      com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> getGetUserFeatureMethod() {
-    io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest, com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> getGetUserFeatureMethod;
-    if ((getGetUserFeatureMethod = RecommendServiceGrpc.getGetUserFeatureMethod) == null) {
-      synchronized (RecommendServiceGrpc.class) {
-        if ((getGetUserFeatureMethod = RecommendServiceGrpc.getGetUserFeatureMethod) == null) {
-          RecommendServiceGrpc.getGetUserFeatureMethod = getGetUserFeatureMethod =
-              io.grpc.MethodDescriptor.<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest, com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse>newBuilder()
-              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetUserFeature"))
-              .setSampledToLocalTracing(true)
-              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest.getDefaultInstance()))
-              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse.getDefaultInstance()))
-              .setSchemaDescriptor(new RecommendServiceMethodDescriptorSupplier("GetUserFeature"))
-              .build();
-        }
-      }
-    }
-    return getGetUserFeatureMethod;
-  }
-
-  private static volatile io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest,
-      com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> getGetVideoFeatureMethod;
-
-  @io.grpc.stub.annotations.RpcMethod(
-      fullMethodName = SERVICE_NAME + '/' + "GetVideoFeature",
-      requestType = com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest.class,
-      responseType = com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.class,
-      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
-  public static io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest,
-      com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> getGetVideoFeatureMethod() {
-    io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest, com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> getGetVideoFeatureMethod;
-    if ((getGetVideoFeatureMethod = RecommendServiceGrpc.getGetVideoFeatureMethod) == null) {
-      synchronized (RecommendServiceGrpc.class) {
-        if ((getGetVideoFeatureMethod = RecommendServiceGrpc.getGetVideoFeatureMethod) == null) {
-          RecommendServiceGrpc.getGetVideoFeatureMethod = getGetVideoFeatureMethod =
-              io.grpc.MethodDescriptor.<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest, com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse>newBuilder()
-              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
-              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetVideoFeature"))
-              .setSampledToLocalTracing(true)
-              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest.getDefaultInstance()))
-              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
-                  com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse.getDefaultInstance()))
-              .setSchemaDescriptor(new RecommendServiceMethodDescriptorSupplier("GetVideoFeature"))
-              .build();
-        }
-      }
-    }
-    return getGetVideoFeatureMethod;
-  }
-
-  /**
-   * Creates a new async stub that supports all call types for the service
-   */
-  public static RecommendServiceStub newStub(io.grpc.Channel channel) {
-    io.grpc.stub.AbstractStub.StubFactory<RecommendServiceStub> factory =
-      new io.grpc.stub.AbstractStub.StubFactory<RecommendServiceStub>() {
-        @java.lang.Override
-        public RecommendServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
-          return new RecommendServiceStub(channel, callOptions);
-        }
-      };
-    return RecommendServiceStub.newStub(factory, channel);
-  }
-
-  /**
-   * Creates a new blocking-style stub that supports unary and streaming output calls on the service
-   */
-  public static RecommendServiceBlockingStub newBlockingStub(
-      io.grpc.Channel channel) {
-    io.grpc.stub.AbstractStub.StubFactory<RecommendServiceBlockingStub> factory =
-      new io.grpc.stub.AbstractStub.StubFactory<RecommendServiceBlockingStub>() {
-        @java.lang.Override
-        public RecommendServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
-          return new RecommendServiceBlockingStub(channel, callOptions);
-        }
-      };
-    return RecommendServiceBlockingStub.newStub(factory, channel);
-  }
-
-  /**
-   * Creates a new ListenableFuture-style stub that supports unary calls on the service
-   */
-  public static RecommendServiceFutureStub newFutureStub(
-      io.grpc.Channel channel) {
-    io.grpc.stub.AbstractStub.StubFactory<RecommendServiceFutureStub> factory =
-      new io.grpc.stub.AbstractStub.StubFactory<RecommendServiceFutureStub>() {
-        @java.lang.Override
-        public RecommendServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
-          return new RecommendServiceFutureStub(channel, callOptions);
-        }
-      };
-    return RecommendServiceFutureStub.newStub(factory, channel);
-  }
-
-  /**
-   */
-  public static abstract class RecommendServiceImplBase implements io.grpc.BindableService {
-
-    /**
-     */
-    public void getUserFeature(com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request,
-        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> responseObserver) {
-      asyncUnimplementedUnaryCall(getGetUserFeatureMethod(), responseObserver);
-    }
-
-    /**
-     */
-    public void getVideoFeature(com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request,
-        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> responseObserver) {
-      asyncUnimplementedUnaryCall(getGetVideoFeatureMethod(), responseObserver);
-    }
-
-    @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
-      return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
-          .addMethod(
-            getGetUserFeatureMethod(),
-            asyncUnaryCall(
-              new MethodHandlers<
-                com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest,
-                com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse>(
-                  this, METHODID_GET_USER_FEATURE)))
-          .addMethod(
-            getGetVideoFeatureMethod(),
-            asyncUnaryCall(
-              new MethodHandlers<
-                com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest,
-                com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse>(
-                  this, METHODID_GET_VIDEO_FEATURE)))
-          .build();
-    }
-  }
-
-  /**
-   */
-  public static final class RecommendServiceStub extends io.grpc.stub.AbstractAsyncStub<RecommendServiceStub> {
-    private RecommendServiceStub(
-        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
-      super(channel, callOptions);
-    }
-
-    @java.lang.Override
-    protected RecommendServiceStub build(
-        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
-      return new RecommendServiceStub(channel, callOptions);
-    }
-
-    /**
-     */
-    public void getUserFeature(com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request,
-        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> responseObserver) {
-      asyncUnaryCall(
-          getChannel().newCall(getGetUserFeatureMethod(), getCallOptions()), request, responseObserver);
-    }
-
-    /**
-     */
-    public void getVideoFeature(com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request,
-        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> responseObserver) {
-      asyncUnaryCall(
-          getChannel().newCall(getGetVideoFeatureMethod(), getCallOptions()), request, responseObserver);
-    }
-  }
-
-  /**
-   */
-  public static final class RecommendServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub<RecommendServiceBlockingStub> {
-    private RecommendServiceBlockingStub(
-        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
-      super(channel, callOptions);
-    }
-
-    @java.lang.Override
-    protected RecommendServiceBlockingStub build(
-        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
-      return new RecommendServiceBlockingStub(channel, callOptions);
-    }
-
-    /**
-     */
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse getUserFeature(com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request) {
-      return blockingUnaryCall(
-          getChannel(), getGetUserFeatureMethod(), getCallOptions(), request);
-    }
-
-    /**
-     */
-    public com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse getVideoFeature(com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request) {
-      return blockingUnaryCall(
-          getChannel(), getGetVideoFeatureMethod(), getCallOptions(), request);
-    }
-  }
-
-  /**
-   */
-  public static final class RecommendServiceFutureStub extends io.grpc.stub.AbstractFutureStub<RecommendServiceFutureStub> {
-    private RecommendServiceFutureStub(
-        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
-      super(channel, callOptions);
-    }
-
-    @java.lang.Override
-    protected RecommendServiceFutureStub build(
-        io.grpc.Channel channel, io.grpc.CallOptions callOptions) {
-      return new RecommendServiceFutureStub(channel, callOptions);
-    }
-
-    /**
-     */
-    public com.google.common.util.concurrent.ListenableFuture<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse> getUserFeature(
-        com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest request) {
-      return futureUnaryCall(
-          getChannel().newCall(getGetUserFeatureMethod(), getCallOptions()), request);
-    }
-
-    /**
-     */
-    public com.google.common.util.concurrent.ListenableFuture<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse> getVideoFeature(
-        com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest request) {
-      return futureUnaryCall(
-          getChannel().newCall(getGetVideoFeatureMethod(), getCallOptions()), request);
-    }
-  }
-
-  private static final int METHODID_GET_USER_FEATURE = 0;
-  private static final int METHODID_GET_VIDEO_FEATURE = 1;
-
-  private static final class MethodHandlers<Req, Resp> implements
-      io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
-      io.grpc.stub.ServerCalls.ServerStreamingMethod<Req, Resp>,
-      io.grpc.stub.ServerCalls.ClientStreamingMethod<Req, Resp>,
-      io.grpc.stub.ServerCalls.BidiStreamingMethod<Req, Resp> {
-    private final RecommendServiceImplBase serviceImpl;
-    private final int methodId;
-
-    MethodHandlers(RecommendServiceImplBase serviceImpl, int methodId) {
-      this.serviceImpl = serviceImpl;
-      this.methodId = methodId;
-    }
-
-    @java.lang.Override
-    @java.lang.SuppressWarnings("unchecked")
-    public void invoke(Req request, io.grpc.stub.StreamObserver<Resp> responseObserver) {
-      switch (methodId) {
-        case METHODID_GET_USER_FEATURE:
-          serviceImpl.getUserFeature((com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureRequest) request,
-              (io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.feature.GetUserFeatureResponse>) responseObserver);
-          break;
-        case METHODID_GET_VIDEO_FEATURE:
-          serviceImpl.getVideoFeature((com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureRequest) request,
-              (io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.feature.GetVideoFeatureResponse>) responseObserver);
-          break;
-        default:
-          throw new AssertionError();
-      }
-    }
-
-    @java.lang.Override
-    @java.lang.SuppressWarnings("unchecked")
-    public io.grpc.stub.StreamObserver<Req> invoke(
-        io.grpc.stub.StreamObserver<Resp> responseObserver) {
-      switch (methodId) {
-        default:
-          throw new AssertionError();
-      }
-    }
-  }
-
-  private static abstract class RecommendServiceBaseDescriptorSupplier
-      implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier {
-    RecommendServiceBaseDescriptorSupplier() {}
-
-    @java.lang.Override
-    public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() {
-      return com.tzld.piaoquan.recommend.server.gen.feature.Feature.getDescriptor();
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() {
-      return getFileDescriptor().findServiceByName("RecommendService");
-    }
-  }
-
-  private static final class RecommendServiceFileDescriptorSupplier
-      extends RecommendServiceBaseDescriptorSupplier {
-    RecommendServiceFileDescriptorSupplier() {}
-  }
-
-  private static final class RecommendServiceMethodDescriptorSupplier
-      extends RecommendServiceBaseDescriptorSupplier
-      implements io.grpc.protobuf.ProtoMethodDescriptorSupplier {
-    private final String methodName;
-
-    RecommendServiceMethodDescriptorSupplier(String methodName) {
-      this.methodName = methodName;
-    }
-
-    @java.lang.Override
-    public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() {
-      return getServiceDescriptor().findMethodByName(methodName);
-    }
-  }
-
-  private static volatile io.grpc.ServiceDescriptor serviceDescriptor;
-
-  public static io.grpc.ServiceDescriptor getServiceDescriptor() {
-    io.grpc.ServiceDescriptor result = serviceDescriptor;
-    if (result == null) {
-      synchronized (RecommendServiceGrpc.class) {
-        result = serviceDescriptor;
-        if (result == null) {
-          serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME)
-              .setSchemaDescriptor(new RecommendServiceFileDescriptorSupplier())
-              .addMethod(getGetUserFeatureMethod())
-              .addMethod(getGetVideoFeatureMethod())
-              .build();
-        }
-      }
-    }
-    return result;
-  }
-}

+ 1 - 1
recommend-feature-client/src/main/proto/com/tzld/piaoquan/recommend/feature/common.proto

@@ -1,7 +1,7 @@
 syntax = "proto3";
 
 option java_multiple_files = true;
-option java_package = "com.tzld.piaoquan.recommend.feature.gen.common";
+option java_package = "com.tzld.piaoquan.recommend.feature.model.common";
 
 message Result {
   int32 code = 1; // 1 成功

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

@@ -4,7 +4,7 @@ import "google/protobuf/any.proto";
 import "com/tzld/piaoquan/recommend/feature/common.proto";
 
 option java_multiple_files = true;
-option java_package = "com.tzld.piaoquan.recommend.feature.gen.feature";
+option java_package = "com.tzld.piaoquan.recommend.feature.model.feature";
 option java_generic_services = true;
 
 
@@ -14,14 +14,24 @@ message GetUserFeatureRequest {
 
 message GetUserFeatureResponse {
   Result result = 1;
+  UserFeatureProto user_feature = 2;
+}
+
+message UserFeatureProto {
+
 }
 
 message GetVideoFeatureRequest {
-  string uid = 1;
+  int64 video_id = 1;
 }
 
 message GetVideoFeatureResponse {
   Result result = 1;
+  VideoFeatureProto video_feature = 2;
+}
+
+message VideoFeatureProto {
+
 }
 
 service FeatureService {

+ 7 - 11
recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/config/RedisTemplateConfig.java

@@ -14,36 +14,32 @@ import org.springframework.data.redis.connection.lettuce.LettucePoolingClientCon
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.serializer.StringRedisSerializer;
 
-/**
- * @author supeng
- * @date 2020/11/10
- */
 @Configuration
 public class RedisTemplateConfig {
 
-    @Bean
+    @Bean("redisPool")
     @ConfigurationProperties(prefix = "spring.redis.lettuce.pool")
     public GenericObjectPoolConfig<LettucePoolingClientConfiguration> redisPool() {
         return new GenericObjectPoolConfig<>();
     }
 
-    @Bean
+    @Bean("redisConfig")
     @ConfigurationProperties(prefix = "spring.redis")
-    public RedisStandaloneConfiguration redisConfig() {
+    public RedisStandaloneConfiguration tairConfig() {
         return new RedisStandaloneConfiguration();
     }
 
-    @Bean("factory")
+    @Bean("redisFactory")
     @Primary
-    public LettuceConnectionFactory factory(GenericObjectPoolConfig<LettucePoolingClientConfiguration> config,
+    public LettuceConnectionFactory factory(GenericObjectPoolConfig<LettucePoolingClientConfiguration> redisPool,
                                             RedisStandaloneConfiguration redisConfig) {
         LettuceClientConfiguration lettuceClientConfiguration =
-                LettucePoolingClientConfiguration.builder().poolConfig(config).build();
+                LettucePoolingClientConfiguration.builder().poolConfig(redisPool).build();
         return new LettuceConnectionFactory(redisConfig, lettuceClientConfiguration);
     }
 
     @Bean(name = "redisTemplate")
-    public RedisTemplate<String, String> getRedisTemplate(@Qualifier("factory") RedisConnectionFactory factory) {
+    public RedisTemplate<String, String> getRedisTemplate(@Qualifier("redisFactory") RedisConnectionFactory factory) {
         return buildRedisTemplateByString(factory);
     }
 

+ 57 - 0
recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/config/TairTemplateConfig.java

@@ -0,0 +1,57 @@
+package com.tzld.piaoquan.recommend.feature.config;
+
+import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Primary;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
+import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
+import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
+import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class TairTemplateConfig {
+
+    @Bean("tairPool")
+    @ConfigurationProperties(prefix = "spring.tair.lettuce.pool")
+    public GenericObjectPoolConfig<LettucePoolingClientConfiguration> tairPool() {
+        return new GenericObjectPoolConfig<>();
+    }
+
+    @Bean("tairConfig")
+    @ConfigurationProperties(prefix = "spring.tair")
+    public RedisStandaloneConfiguration tairConfig() {
+        return new RedisStandaloneConfiguration();
+    }
+
+    @Bean("tairFactory")
+    @Primary
+    public LettuceConnectionFactory factory(@Qualifier("tairPool") GenericObjectPoolConfig<LettucePoolingClientConfiguration> tairPool,
+                                            @Qualifier("tairConfig") RedisStandaloneConfiguration tairConfig) {
+        LettuceClientConfiguration lettuceClientConfiguration =
+                LettucePoolingClientConfiguration.builder().poolConfig(tairPool).build();
+        return new LettuceConnectionFactory(tairConfig, lettuceClientConfiguration);
+    }
+
+    @Bean(name = "tairTemplate")
+    public RedisTemplate<String, String> getTairTemplate(@Qualifier("tairFactory") RedisConnectionFactory factory) {
+        return buildTairTemplateByString(factory);
+    }
+
+    public RedisTemplate<String, String> buildTairTemplateByString(RedisConnectionFactory factory) {
+        RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
+        redisTemplate.setConnectionFactory(factory);
+        // key的序列化类型 保证可读性
+        redisTemplate.setKeySerializer(new StringRedisSerializer());
+        redisTemplate.setValueSerializer(new StringRedisSerializer());
+        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+        redisTemplate.setHashValueSerializer(new StringRedisSerializer());
+        return redisTemplate;
+    }
+
+}

+ 10 - 3
recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/grpcservice/FeatureGrpcService.java

@@ -1,18 +1,25 @@
 package com.tzld.piaoquan.recommend.feature.grpcservice;
 
-import com.tzld.piaoquan.recommend.server.gen.feature.*;
+import com.tzld.piaoquan.recommend.feature.model.feature.*;
+import com.tzld.piaoquan.recommend.feature.service.UserFeatureService;
+import com.tzld.piaoquan.recommend.feature.service.VideoFeatureService;
 import io.grpc.stub.StreamObserver;
 import net.devh.boot.grpc.server.service.GrpcService;
+import org.springframework.beans.factory.annotation.Autowired;
 
 /**
  * @author dyp
  */
 @GrpcService
 public class FeatureGrpcService extends FeatureServiceGrpc.FeatureServiceImplBase {
+    @Autowired
+    private UserFeatureService userFeatureService;
+    @Autowired
+    private VideoFeatureService videoFeatureService;
 
     @Override
     public void getUserFeature(GetUserFeatureRequest request, StreamObserver<GetUserFeatureResponse> responseObserver) {
-        GetUserFeatureResponse response = null;
+        GetUserFeatureResponse response = userFeatureService.getUserFeature(request);
         responseObserver.onNext(response);
         responseObserver.onCompleted();
     }
@@ -20,7 +27,7 @@ public class FeatureGrpcService extends FeatureServiceGrpc.FeatureServiceImplBas
     @Override
     public void getVideoFeature(GetVideoFeatureRequest request,
                                 StreamObserver<GetVideoFeatureResponse> responseObserver) {
-        GetVideoFeatureResponse response = null;
+        GetVideoFeatureResponse response = videoFeatureService.getVideoFeature(request);
         responseObserver.onNext(response);
         responseObserver.onCompleted();
     }

+ 30 - 0
recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/grpcservice/GrpcAspect.java

@@ -0,0 +1,30 @@
+package com.tzld.piaoquan.recommend.feature.grpcservice;
+
+import com.tzld.piaoquan.recommend.feature.util.TraceUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author dyp
+ */
+@Aspect
+@Component
+@Slf4j
+public class GrpcAspect {
+
+    @Around("execution(* com.tzld.piaoquan.recommend.feature.grpcservice.*GrpcService.*(..))")
+    public Object around(ProceedingJoinPoint pjp) throws Throwable {
+        TraceUtils.setMDC();
+//
+//        String className = pjp.getTarget().getClass().getSimpleName();
+//        MethodSignature signature = (MethodSignature) pjp.getSignature();
+//        Stopwatch stopwatch = Stopwatch.createStarted();
+        Object result = pjp.proceed();
+
+        TraceUtils.removeMDC();
+        return result;
+    }
+}

+ 8 - 0
recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/model/UserActionFeature.java

@@ -0,0 +1,8 @@
+package com.tzld.piaoquan.recommend.feature.model;
+
+/**
+ * @author dyp
+ */
+public class UserActionFeature {
+    private String uid;
+}

+ 11 - 0
recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/model/UserFeature.java

@@ -0,0 +1,11 @@
+package com.tzld.piaoquan.recommend.feature.model;
+
+import lombok.Data;
+
+/**
+ * @author dyp
+ */
+@Data
+public class UserFeature {
+    private String uid;
+}

+ 11 - 0
recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/model/VideoFeature.java

@@ -0,0 +1,11 @@
+package com.tzld.piaoquan.recommend.feature.model;
+
+import lombok.Data;
+
+/**
+ * @author dyp
+ */
+@Data
+public class VideoFeature {
+    private Long videoId;
+}

+ 137 - 0
recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/service/AbstractFeatureService.java

@@ -0,0 +1,137 @@
+package com.tzld.piaoquan.recommend.feature.service;
+
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.common.reflect.TypeToken;
+import com.tzld.piaoquan.recommend.feature.util.JSONUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.data.redis.core.RedisTemplate;
+
+import java.util.concurrent.TimeUnit;
+import java.util.function.Function;
+
+/**
+ * @author dyp
+ */
+@Slf4j
+public abstract class AbstractFeatureService<K, V> {
+    @Qualifier("redisTemplate")
+    @Autowired
+    private RedisTemplate<String, String> redisTemplate;
+
+    @Qualifier("tairTemplate")
+    @Autowired
+    private RedisTemplate<String, String> tairTemplate;
+
+    protected String emptyData;
+    // 单位秒
+    protected long emptyDataExpire;
+    protected long defaultExpire;
+    protected Function<K, String> keyFunc;
+    protected TypeToken<V> typeToken;
+
+    private int defaultMaximumSize = 10000;
+    // 单位秒
+    private int defaultRefreshAfterWrite = 60;
+    private int defaultExpireAfterWrite = 60;
+    private int defaultExpireAfterAccess = 60;
+    private LoadingCache<K, V> cache;
+
+    public AbstractFeatureService() {
+        this.emptyData = "{}";
+        // 单位秒
+        this.emptyDataExpire = 60;
+        this.defaultExpire = 7200;
+        this.keyFunc = k -> String.valueOf(k);
+        this.typeToken = new TypeToken<V>() {
+        };
+
+        initLocalCache(defaultMaximumSize, defaultRefreshAfterWrite, defaultExpireAfterWrite, defaultExpireAfterAccess);
+    }
+
+    protected void initLocalCache(int maximumSize, int refreshAfterWrite, int expireAfterWrite,
+                                  int expireAfterAccess) {
+        cache = CacheBuilder.newBuilder()
+                .maximumSize(maximumSize)
+                .refreshAfterWrite(refreshAfterWrite, TimeUnit.SECONDS)
+                .expireAfterWrite(expireAfterWrite, TimeUnit.SECONDS)
+                .expireAfterAccess(expireAfterAccess, TimeUnit.SECONDS)
+                .build(new CacheLoader<K, V>() {
+                    @Override
+                    public V load(K key) {
+                        return AbstractFeatureService.this.load(key);
+                    }
+                });
+    }
+
+    protected V get(K key) {
+        assert cache != null;
+        try {
+            return cache.get(key);
+        } catch (Exception e) {
+            log.error("get local cache error", e);
+        }
+        return null;
+    }
+
+
+    private V load(K key) {
+        V feature = getFromCache(key);
+        if (feature == null) {
+            feature = getFromSource(key);
+            // TODO 可异步
+            saveToCache(key, feature);
+        }
+        return feature;
+    }
+
+    private V getFromCache(K key) {
+        String redisKey = keyFunc.apply(key);
+        String value = redisTemplate.opsForValue().get(redisKey);
+        return JSONUtils.fromJson(value, typeToken, null);
+    }
+
+    private V getFromSource(K key) {
+        String sourceKey = cacheKey(key);
+        String value = tairTemplate.opsForValue().get(sourceKey);
+        return JSONUtils.fromJson(value, typeToken, null);
+    }
+
+    private void saveToCache(K key, V value) {
+        String cacheKey = cacheKey(key);
+        String cacheValue = value == null
+                ? emptyData
+                : JSONUtils.toJson(value);
+        long expire = value == null
+                ? emptyDataExpire
+                : defaultExpire;
+        // TODO 评估过期时间
+        redisTemplate.opsForValue().set(cacheKey, cacheValue, expire, TimeUnit.SECONDS);
+    }
+
+
+    private String cacheKey(K key) {
+        return keyFunc.apply(key);
+    }
+
+    protected void save(K key, V value) {
+        saveToSource(key, value);
+        // cache aside
+        deleteFromCache(key);
+    }
+
+    private void saveToSource(K key, V value) {
+        String sourceKey = cacheKey(key);
+        String sourceValue = JSONUtils.toJson(value);
+        tairTemplate.opsForValue().set(sourceKey, sourceValue);
+    }
+
+    private void deleteFromCache(K key) {
+        String cacheKey = cacheKey(key);
+        redisTemplate.delete(cacheKey);
+    }
+
+}

+ 66 - 0
recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/service/UserFeatureService.java

@@ -0,0 +1,66 @@
+package com.tzld.piaoquan.recommend.feature.service;
+
+import com.google.common.reflect.TypeToken;
+import com.tzld.piaoquan.recommend.feature.model.UserFeature;
+import com.tzld.piaoquan.recommend.feature.model.common.Result;
+import com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureRequest;
+import com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureResponse;
+import com.tzld.piaoquan.recommend.feature.model.feature.UserFeatureProto;
+import com.tzld.piaoquan.recommend.feature.util.JSONUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author dyp
+ */
+@Service
+@Slf4j
+public class UserFeatureService extends AbstractFeatureService<String, UserFeature> {
+
+    public UserFeatureService() {
+        super.emptyData = "{}";
+        super.emptyDataExpire = 60;
+        super.defaultExpire = 7200;
+        super.keyFunc = k -> String.format("video:meta:%s", k);
+        super.typeToken = new TypeToken<UserFeature>() {
+        };
+
+        int maximumSize = 10000;
+        int refreshAfterWrite = 60;
+        int expireAfterWrite = 60;
+        int expireAfterAccess = 60;
+        initLocalCache(maximumSize, refreshAfterWrite, expireAfterWrite, expireAfterAccess);
+    }
+
+
+    public GetUserFeatureResponse getUserFeature(GetUserFeatureRequest request) {
+        String uid = request.getUid();
+        if (StringUtils.isBlank(uid)) {
+            return GetUserFeatureResponse.newBuilder()
+                    .setResult(Result.newBuilder().setCode(1))
+                    .build();
+        }
+        UserFeature userFeature = super.get(uid);
+        return GetUserFeatureResponse.newBuilder()
+                .setResult(Result.newBuilder().setCode(1))
+                .setUserFeature(convert(userFeature))
+                .build();
+    }
+
+    private UserFeatureProto convert(UserFeature userFeature) {
+        UserFeatureProto.Builder builder = UserFeatureProto.newBuilder();
+
+        // TODO
+        return builder.build();
+    }
+
+    public void saveUserFeature(String jsonValue) {
+
+        UserFeature userFeature = JSONUtils.fromJson(jsonValue, new TypeToken<UserFeature>() {
+        }, null);
+        super.save(userFeature.getUid(), userFeature);
+    }
+
+
+}

+ 63 - 0
recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/service/VideoFeatureService.java

@@ -0,0 +1,63 @@
+package com.tzld.piaoquan.recommend.feature.service;
+
+import com.google.common.reflect.TypeToken;
+import com.tzld.piaoquan.recommend.feature.model.VideoFeature;
+import com.tzld.piaoquan.recommend.feature.model.common.Result;
+import com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest;
+import com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse;
+import com.tzld.piaoquan.recommend.feature.model.feature.VideoFeatureProto;
+import com.tzld.piaoquan.recommend.feature.util.JSONUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author dyp
+ */
+@Service
+@Slf4j
+public class VideoFeatureService extends AbstractFeatureService<Long, VideoFeature> {
+
+    public VideoFeatureService() {
+        super.emptyData = "{}";
+        super.emptyDataExpire = 60;
+        super.defaultExpire = 7200;
+        super.keyFunc = k -> String.format("video:meta:%s", k);
+        super.typeToken = new TypeToken<VideoFeature>() {
+        };
+
+        int maximumSize = 10000;
+        int refreshAfterWrite = 60;
+        int expireAfterWrite = 60;
+        int expireAfterAccess = 60;
+        initLocalCache(maximumSize, refreshAfterWrite, expireAfterWrite, expireAfterAccess);
+    }
+
+
+    public GetVideoFeatureResponse getVideoFeature(GetVideoFeatureRequest request) {
+        long videoId = request.getVideoId();
+        if (videoId == 0) {
+            return GetVideoFeatureResponse.newBuilder()
+                    .setResult(Result.newBuilder().setCode(1))
+                    .build();
+        }
+        VideoFeature videoFeature = super.get(videoId);
+        return GetVideoFeatureResponse.newBuilder()
+                .setResult(Result.newBuilder().setCode(1))
+                .setVideoFeature(convert(videoFeature))
+                .build();
+    }
+
+    private VideoFeatureProto convert(VideoFeature videoFeature) {
+        VideoFeatureProto.Builder builder = VideoFeatureProto.newBuilder();
+
+        // TODO
+        return builder.build();
+    }
+
+    public void saveVideoFeature(String jsonValue) {
+
+        VideoFeature videoFeature = JSONUtils.fromJson(jsonValue, new TypeToken<VideoFeature>() {
+        }, null);
+        super.save(videoFeature.getVideoId(), videoFeature);
+    }
+}

+ 6 - 0
recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/service/WarmUpService.java

@@ -1,6 +1,7 @@
 package com.tzld.piaoquan.recommend.feature.service;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.core.annotation.Order;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
@@ -14,10 +15,15 @@ import javax.annotation.PostConstruct;
 @Order(1)
 public class WarmUpService {
     @Autowired
+    @Qualifier("redisTemplate")
     private RedisTemplate<String, String> redisTemplate;
+    @Autowired
+    @Qualifier("tairTemplate")
+    private RedisTemplate<String, String> tairTemplate;
 
     @PostConstruct
     public void warmup() {
         redisTemplate.opsForValue().get("");
+        tairTemplate.opsForValue().get("");
     }
 }

+ 0 - 42
recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/web/ControllerAspect.java

@@ -1,42 +0,0 @@
-package com.tzld.piaoquan.recommend.feature.web;
-
-import com.google.common.base.Stopwatch;
-import com.tzld.piaoquan.recommend.feature.util.JSONUtils;
-import com.tzld.piaoquan.recommend.feature.util.TraceUtils;
-import lombok.extern.slf4j.Slf4j;
-import org.aspectj.lang.ProceedingJoinPoint;
-import org.aspectj.lang.annotation.Around;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.springframework.stereotype.Component;
-
-import java.util.concurrent.TimeUnit;
-
-/**
- * @author dyp
- */
-@Aspect
-@Component
-@Slf4j
-public class ControllerAspect {
-
-    @Around("execution(* com.tzld.piaoquan.recommend.server.web.*Controller.*(..))")
-    public Object around(ProceedingJoinPoint pjp) throws Throwable {
-        TraceUtils.setMDC();
-
-        String className = pjp.getTarget().getClass().getSimpleName();
-        MethodSignature signature = (MethodSignature) pjp.getSignature();
-        Stopwatch stopwatch = Stopwatch.createStarted();
-        log.info("request className=[{}], method=[{}], param=[{}]", className, signature.getName(),
-                JSONUtils.toJson(pjp.getArgs()));
-        Object result = pjp.proceed();
-        if (result != null && result instanceof String) {
-            log.info("response result=[{}] cost=[{}]", result, stopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
-        } else {
-            log.info("response result=[{}] cost=[{}]", JSONUtils.toJson(result), stopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
-        }
-
-        TraceUtils.removeMDC();
-        return result;
-    }
-}

+ 0 - 94
recommend-feature-service/src/main/java/com/tzld/piaoquan/recommend/feature/web/RecommendController.java

@@ -1,94 +0,0 @@
-package com.tzld.piaoquan.recommend.feature.web;
-
-import com.google.common.base.Strings;
-import com.google.protobuf.InvalidProtocolBufferException;
-import com.tzld.piaoquan.recommend.feature.service.RecommendService;
-import com.tzld.piaoquan.recommend.server.client.ProtobufUtils;
-import com.tzld.piaoquan.recommend.server.client.RecommendHttpRequest;
-import com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest;
-import com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.collections4.MapUtils;
-import org.slf4j.MDC;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.http.converter.protobuf.ProtobufHttpMessageConverter;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author dyp
- */
-@RestController
-@Slf4j
-public class RecommendController {
-    @Autowired
-    private RecommendService recommendService;
-
-    @Bean
-    public ProtobufHttpMessageConverter protobufHttpMessageConverter() {
-        return new ProtobufHttpMessageConverter();
-    }
-
-    @RequestMapping("/homepage/recommend")
-    public String homepageRecommend(@RequestBody RecommendHttpRequest httpRequest) {
-        MDC.put("appType", String.valueOf(httpRequest.getAppType()));
-        RecommendResponse response = recommendService.homepageRecommend(generate(httpRequest));
-        String result = "";
-        try {
-            result = ProtobufUtils.toJson(response);
-        } catch (InvalidProtocolBufferException e) {
-            log.error("homepageRecommend ProtobufUtils.toJson", e);
-        }
-        return result;
-    }
-
-    @RequestMapping("/relevant/recommend")
-    public String relevantRecommend(@RequestBody RecommendHttpRequest httpRequest) {
-        MDC.put("appType", String.valueOf(httpRequest.getAppType()));
-
-        RecommendResponse response = recommendService.relevantRecommend(generate(httpRequest));
-        String result = "";
-        try {
-            result = ProtobufUtils.toJson(response);
-        } catch (InvalidProtocolBufferException e) {
-            log.error("relevantRecommend ProtobufUtils.toJson", e);
-        }
-        return result;
-    }
-
-    private RecommendRequest generate(RecommendHttpRequest httpRequest) {
-        if (httpRequest == null) {
-            return null;
-        }
-        RecommendRequest.Builder builder = RecommendRequest.newBuilder();
-
-        builder.setRequestId(Strings.nullToEmpty(httpRequest.getRequestId()))
-                .setMid(Strings.nullToEmpty(httpRequest.getMid()))
-                .setUid(Strings.nullToEmpty(httpRequest.getUid()))
-                .setSize(httpRequest.getSize())
-                .setAppType(httpRequest.getAppType())
-                .setCityCode(Strings.nullToEmpty(httpRequest.getCityCode()))
-                .setProvinceCode(Strings.nullToEmpty(httpRequest.getProvinceCode()))
-                .setVersionAuditStatus(httpRequest.getVersionAuditStatus())
-                .setRecommendTraceId(Strings.nullToEmpty(httpRequest.getRecommendTraceId()))
-                .setVideoId(httpRequest.getVideoId());
-
-        if (CollectionUtils.isNotEmpty(httpRequest.getAbExpCodes())) {
-            builder.addAllAbExpCode(httpRequest.getAbExpCodes());
-        }
-        if (MapUtils.isNotEmpty(httpRequest.getEventIdMap())) {
-            builder.putAllEventId(httpRequest.getEventIdMap());
-        }
-
-        return builder.build();
-    }
-
-    @GetMapping("/ok")
-    public String ok() {
-        return "ok";
-    }
-}

+ 12 - 0
recommend-feature-service/src/main/resources/application-dev.yml

@@ -16,6 +16,7 @@ eureka:
     serviceUrl:
       defaultZone: http://deveureka-internal.piaoquantv.com/eureka/
 
+spring:
   redis:
     hostName: r-bp1ps6my7lzg8rdhwx682.redis.rds.aliyuncs.com
     port: 6379
@@ -27,6 +28,17 @@ eureka:
         max-wait: -1
         max-idle: 8
         min-idle: 0
+  tair:
+    hostName: r-bp1ps6my7lzg8rdhwx682.redis.rds.aliyuncs.com
+    port: 6379
+    password: Wqsd@2019
+    timeout: 1000
+    lettuce:
+      pool:
+        max-active: 8
+        max-wait: -1
+        max-idle: 8
+        min-idle: 0
 
 apollo:
   meta: http://devapolloconfig-internal.piaoquantv.com

+ 12 - 0
recommend-feature-service/src/main/resources/application-pre.yml

@@ -12,6 +12,7 @@ eureka:
     serviceUrl:
       defaultZone: http://preeureka-internal.piaoquantv.com/eureka/
 
+spring:
   redis:
     hostName: r-bp1fogs2mflr1ybfot.redis.rds.aliyuncs.com
     port: 6379
@@ -23,6 +24,17 @@ eureka:
         max-wait: -1
         max-idle: 8
         min-idle: 0
+  tair:
+    hostName: r-bp1ps6my7lzg8rdhwx682.redis.rds.aliyuncs.com
+    port: 6379
+    password: Wqsd@2019
+    timeout: 1000
+    lettuce:
+      pool:
+        max-active: 8
+        max-wait: -1
+        max-idle: 8
+        min-idle: 0
 
 apollo:
   meta: http://preapolloconfig-internal.piaoquantv.com

+ 12 - 0
recommend-feature-service/src/main/resources/application-prod.yml

@@ -12,6 +12,7 @@ eureka:
     serviceUrl:
       defaultZone: http://eureka-internal.piaoquantv.com/eureka/
 
+spring:
   redis:
     hostName: r-bp1fogs2mflr1ybfot.redis.rds.aliyuncs.com
     port: 6379
@@ -23,6 +24,17 @@ eureka:
         max-wait: -1
         max-idle: 8
         min-idle: 0
+  tair:
+    hostName: r-bp1ps6my7lzg8rdhwx682.redis.rds.aliyuncs.com
+    port: 6379
+    password: Wqsd@2019
+    timeout: 1000
+    lettuce:
+      pool:
+        max-active: 8
+        max-wait: -1
+        max-idle: 8
+        min-idle: 0
 
 apollo:
   meta: http://apolloconfig-internal.piaoquantv.com

+ 12 - 0
recommend-feature-service/src/main/resources/application-test.yml

@@ -12,6 +12,7 @@ eureka:
     serviceUrl:
       defaultZone: http://testeureka-internal.piaoquantv.com/eureka/
 
+spring:
   redis:
     hostName: r-bp1ps6my7lzg8rdhwx682.redis.rds.aliyuncs.com
     port: 6379
@@ -23,6 +24,17 @@ eureka:
         max-wait: -1
         max-idle: 8
         min-idle: 0
+  tair:
+    hostName: r-bp1ps6my7lzg8rdhwx682.redis.rds.aliyuncs.com
+    port: 6379
+    password: Wqsd@2019
+    timeout: 1000
+    lettuce:
+      pool:
+        max-active: 8
+        max-wait: -1
+        max-idle: 8
+        min-idle: 0
 
 apollo:
   meta: http://testapolloconfig-internal.piaoquantv.com