丁云鹏 1 рік тому
батько
коміт
8b00d9173d
15 змінених файлів з 7361 додано та 14 видалено
  1. 1387 0
      recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/MachineInfoProto.java
  2. 121 0
      recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/MachineInfoProtoOrBuilder.java
  3. 122 0
      recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/Recommend.java
  4. 2494 0
      recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/RecommendRequest.java
  5. 215 0
      recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/RecommendRequestOrBuilder.java
  6. 966 0
      recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/RecommendResponse.java
  7. 48 0
      recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/RecommendResponseOrBuilder.java
  8. 316 0
      recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/RecommendService.java
  9. 374 0
      recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/RecommendServiceGrpc.java
  10. 1232 0
      recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/VideoProto.java
  11. 81 0
      recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/VideoProtoOrBuilder.java
  12. 1 10
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/Application.java
  13. 2 2
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/dataloader/OfflineAdOutSamplesLoader.java
  14. 1 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/VlogShareLRScorer.java
  15. 1 1
      recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/model/LRModel.java

+ 1387 - 0
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/MachineInfoProto.java

@@ -0,0 +1,1387 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/server/recommend.proto
+
+package com.tzld.piaoquan.recommend.server.gen.recommend;
+
+/**
+ * Protobuf type {@code MachineInfoProto}
+ */
+public final class MachineInfoProto extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:MachineInfoProto)
+    MachineInfoProtoOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use MachineInfoProto.newBuilder() to construct.
+  private MachineInfoProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private MachineInfoProto() {
+    brand_ = "";
+    model_ = "";
+    platform_ = "";
+    sdkVersion_ = "";
+    system_ = "";
+    wechatVersion_ = "";
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new MachineInfoProto();
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet
+  getUnknownFields() {
+    return this.unknownFields;
+  }
+  private MachineInfoProto(
+      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;
+          case 10: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            brand_ = s;
+            break;
+          }
+          case 18: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            model_ = s;
+            break;
+          }
+          case 26: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            platform_ = s;
+            break;
+          }
+          case 34: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            sdkVersion_ = s;
+            break;
+          }
+          case 42: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            system_ = s;
+            break;
+          }
+          case 50: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            wechatVersion_ = s;
+            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.server.gen.recommend.Recommend.internal_static_MachineInfoProto_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_MachineInfoProto_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.class, com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.Builder.class);
+  }
+
+  public static final int BRAND_FIELD_NUMBER = 1;
+  private volatile java.lang.Object brand_;
+  /**
+   * <code>string brand = 1;</code>
+   * @return The brand.
+   */
+  @java.lang.Override
+  public java.lang.String getBrand() {
+    java.lang.Object ref = brand_;
+    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();
+      brand_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string brand = 1;</code>
+   * @return The bytes for brand.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getBrandBytes() {
+    java.lang.Object ref = brand_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      brand_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int MODEL_FIELD_NUMBER = 2;
+  private volatile java.lang.Object model_;
+  /**
+   * <pre>
+   * NZA-AL00
+   * </pre>
+   *
+   * <code>string model = 2;</code>
+   * @return The model.
+   */
+  @java.lang.Override
+  public java.lang.String getModel() {
+    java.lang.Object ref = model_;
+    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();
+      model_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * NZA-AL00
+   * </pre>
+   *
+   * <code>string model = 2;</code>
+   * @return The bytes for model.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getModelBytes() {
+    java.lang.Object ref = model_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      model_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int PLATFORM_FIELD_NUMBER = 3;
+  private volatile java.lang.Object platform_;
+  /**
+   * <pre>
+   * android
+   * </pre>
+   *
+   * <code>string platform = 3;</code>
+   * @return The platform.
+   */
+  @java.lang.Override
+  public java.lang.String getPlatform() {
+    java.lang.Object ref = platform_;
+    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();
+      platform_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * android
+   * </pre>
+   *
+   * <code>string platform = 3;</code>
+   * @return The bytes for platform.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getPlatformBytes() {
+    java.lang.Object ref = platform_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      platform_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int SDK_VERSION_FIELD_NUMBER = 4;
+  private volatile java.lang.Object sdkVersion_;
+  /**
+   * <pre>
+   * 3.2.4
+   * </pre>
+   *
+   * <code>string sdk_version = 4;</code>
+   * @return The sdkVersion.
+   */
+  @java.lang.Override
+  public java.lang.String getSdkVersion() {
+    java.lang.Object ref = sdkVersion_;
+    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();
+      sdkVersion_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * 3.2.4
+   * </pre>
+   *
+   * <code>string sdk_version = 4;</code>
+   * @return The bytes for sdkVersion.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getSdkVersionBytes() {
+    java.lang.Object ref = sdkVersion_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      sdkVersion_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int SYSTEM_FIELD_NUMBER = 5;
+  private volatile java.lang.Object system_;
+  /**
+   * <pre>
+   * Android 10
+   * </pre>
+   *
+   * <code>string system = 5;</code>
+   * @return The system.
+   */
+  @java.lang.Override
+  public java.lang.String getSystem() {
+    java.lang.Object ref = system_;
+    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();
+      system_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * Android 10
+   * </pre>
+   *
+   * <code>string system = 5;</code>
+   * @return The bytes for system.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getSystemBytes() {
+    java.lang.Object ref = system_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      system_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int WECHAT_VERSION_FIELD_NUMBER = 6;
+  private volatile java.lang.Object wechatVersion_;
+  /**
+   * <pre>
+   * 8.0.43
+   * </pre>
+   *
+   * <code>string wechat_version = 6;</code>
+   * @return The wechatVersion.
+   */
+  @java.lang.Override
+  public java.lang.String getWechatVersion() {
+    java.lang.Object ref = wechatVersion_;
+    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();
+      wechatVersion_ = s;
+      return s;
+    }
+  }
+  /**
+   * <pre>
+   * 8.0.43
+   * </pre>
+   *
+   * <code>string wechat_version = 6;</code>
+   * @return The bytes for wechatVersion.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getWechatVersionBytes() {
+    java.lang.Object ref = wechatVersion_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      wechatVersion_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  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 {
+    if (!getBrandBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, brand_);
+    }
+    if (!getModelBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, model_);
+    }
+    if (!getPlatformBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 3, platform_);
+    }
+    if (!getSdkVersionBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 4, sdkVersion_);
+    }
+    if (!getSystemBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 5, system_);
+    }
+    if (!getWechatVersionBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 6, wechatVersion_);
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!getBrandBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, brand_);
+    }
+    if (!getModelBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, model_);
+    }
+    if (!getPlatformBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, platform_);
+    }
+    if (!getSdkVersionBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, sdkVersion_);
+    }
+    if (!getSystemBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(5, system_);
+    }
+    if (!getWechatVersionBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, wechatVersion_);
+    }
+    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.server.gen.recommend.MachineInfoProto)) {
+      return super.equals(obj);
+    }
+    com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto other = (com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto) obj;
+
+    if (!getBrand()
+        .equals(other.getBrand())) return false;
+    if (!getModel()
+        .equals(other.getModel())) return false;
+    if (!getPlatform()
+        .equals(other.getPlatform())) return false;
+    if (!getSdkVersion()
+        .equals(other.getSdkVersion())) return false;
+    if (!getSystem()
+        .equals(other.getSystem())) return false;
+    if (!getWechatVersion()
+        .equals(other.getWechatVersion())) return false;
+    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 = (37 * hash) + BRAND_FIELD_NUMBER;
+    hash = (53 * hash) + getBrand().hashCode();
+    hash = (37 * hash) + MODEL_FIELD_NUMBER;
+    hash = (53 * hash) + getModel().hashCode();
+    hash = (37 * hash) + PLATFORM_FIELD_NUMBER;
+    hash = (53 * hash) + getPlatform().hashCode();
+    hash = (37 * hash) + SDK_VERSION_FIELD_NUMBER;
+    hash = (53 * hash) + getSdkVersion().hashCode();
+    hash = (37 * hash) + SYSTEM_FIELD_NUMBER;
+    hash = (53 * hash) + getSystem().hashCode();
+    hash = (37 * hash) + WECHAT_VERSION_FIELD_NUMBER;
+    hash = (53 * hash) + getWechatVersion().hashCode();
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto 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.server.gen.recommend.MachineInfoProto 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 MachineInfoProto}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:MachineInfoProto)
+      com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProtoOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_MachineInfoProto_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_MachineInfoProto_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.class, com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.Builder.class);
+    }
+
+    // Construct using com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.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();
+      brand_ = "";
+
+      model_ = "";
+
+      platform_ = "";
+
+      sdkVersion_ = "";
+
+      system_ = "";
+
+      wechatVersion_ = "";
+
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_MachineInfoProto_descriptor;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto build() {
+      com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto buildPartial() {
+      com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto result = new com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto(this);
+      result.brand_ = brand_;
+      result.model_ = model_;
+      result.platform_ = platform_;
+      result.sdkVersion_ = sdkVersion_;
+      result.system_ = system_;
+      result.wechatVersion_ = wechatVersion_;
+      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.server.gen.recommend.MachineInfoProto) {
+        return mergeFrom((com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto other) {
+      if (other == com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.getDefaultInstance()) return this;
+      if (!other.getBrand().isEmpty()) {
+        brand_ = other.brand_;
+        onChanged();
+      }
+      if (!other.getModel().isEmpty()) {
+        model_ = other.model_;
+        onChanged();
+      }
+      if (!other.getPlatform().isEmpty()) {
+        platform_ = other.platform_;
+        onChanged();
+      }
+      if (!other.getSdkVersion().isEmpty()) {
+        sdkVersion_ = other.sdkVersion_;
+        onChanged();
+      }
+      if (!other.getSystem().isEmpty()) {
+        system_ = other.system_;
+        onChanged();
+      }
+      if (!other.getWechatVersion().isEmpty()) {
+        wechatVersion_ = other.wechatVersion_;
+        onChanged();
+      }
+      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.server.gen.recommend.MachineInfoProto parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private java.lang.Object brand_ = "";
+    /**
+     * <code>string brand = 1;</code>
+     * @return The brand.
+     */
+    public java.lang.String getBrand() {
+      java.lang.Object ref = brand_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        brand_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string brand = 1;</code>
+     * @return The bytes for brand.
+     */
+    public com.google.protobuf.ByteString
+        getBrandBytes() {
+      java.lang.Object ref = brand_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        brand_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string brand = 1;</code>
+     * @param value The brand to set.
+     * @return This builder for chaining.
+     */
+    public Builder setBrand(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      brand_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string brand = 1;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearBrand() {
+      
+      brand_ = getDefaultInstance().getBrand();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string brand = 1;</code>
+     * @param value The bytes for brand to set.
+     * @return This builder for chaining.
+     */
+    public Builder setBrandBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      brand_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object model_ = "";
+    /**
+     * <pre>
+     * NZA-AL00
+     * </pre>
+     *
+     * <code>string model = 2;</code>
+     * @return The model.
+     */
+    public java.lang.String getModel() {
+      java.lang.Object ref = model_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        model_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * NZA-AL00
+     * </pre>
+     *
+     * <code>string model = 2;</code>
+     * @return The bytes for model.
+     */
+    public com.google.protobuf.ByteString
+        getModelBytes() {
+      java.lang.Object ref = model_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        model_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * NZA-AL00
+     * </pre>
+     *
+     * <code>string model = 2;</code>
+     * @param value The model to set.
+     * @return This builder for chaining.
+     */
+    public Builder setModel(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      model_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * NZA-AL00
+     * </pre>
+     *
+     * <code>string model = 2;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearModel() {
+      
+      model_ = getDefaultInstance().getModel();
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * NZA-AL00
+     * </pre>
+     *
+     * <code>string model = 2;</code>
+     * @param value The bytes for model to set.
+     * @return This builder for chaining.
+     */
+    public Builder setModelBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      model_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object platform_ = "";
+    /**
+     * <pre>
+     * android
+     * </pre>
+     *
+     * <code>string platform = 3;</code>
+     * @return The platform.
+     */
+    public java.lang.String getPlatform() {
+      java.lang.Object ref = platform_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        platform_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * android
+     * </pre>
+     *
+     * <code>string platform = 3;</code>
+     * @return The bytes for platform.
+     */
+    public com.google.protobuf.ByteString
+        getPlatformBytes() {
+      java.lang.Object ref = platform_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        platform_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * android
+     * </pre>
+     *
+     * <code>string platform = 3;</code>
+     * @param value The platform to set.
+     * @return This builder for chaining.
+     */
+    public Builder setPlatform(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      platform_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * android
+     * </pre>
+     *
+     * <code>string platform = 3;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearPlatform() {
+      
+      platform_ = getDefaultInstance().getPlatform();
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * android
+     * </pre>
+     *
+     * <code>string platform = 3;</code>
+     * @param value The bytes for platform to set.
+     * @return This builder for chaining.
+     */
+    public Builder setPlatformBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      platform_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object sdkVersion_ = "";
+    /**
+     * <pre>
+     * 3.2.4
+     * </pre>
+     *
+     * <code>string sdk_version = 4;</code>
+     * @return The sdkVersion.
+     */
+    public java.lang.String getSdkVersion() {
+      java.lang.Object ref = sdkVersion_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        sdkVersion_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * 3.2.4
+     * </pre>
+     *
+     * <code>string sdk_version = 4;</code>
+     * @return The bytes for sdkVersion.
+     */
+    public com.google.protobuf.ByteString
+        getSdkVersionBytes() {
+      java.lang.Object ref = sdkVersion_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        sdkVersion_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * 3.2.4
+     * </pre>
+     *
+     * <code>string sdk_version = 4;</code>
+     * @param value The sdkVersion to set.
+     * @return This builder for chaining.
+     */
+    public Builder setSdkVersion(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      sdkVersion_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * 3.2.4
+     * </pre>
+     *
+     * <code>string sdk_version = 4;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearSdkVersion() {
+      
+      sdkVersion_ = getDefaultInstance().getSdkVersion();
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * 3.2.4
+     * </pre>
+     *
+     * <code>string sdk_version = 4;</code>
+     * @param value The bytes for sdkVersion to set.
+     * @return This builder for chaining.
+     */
+    public Builder setSdkVersionBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      sdkVersion_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object system_ = "";
+    /**
+     * <pre>
+     * Android 10
+     * </pre>
+     *
+     * <code>string system = 5;</code>
+     * @return The system.
+     */
+    public java.lang.String getSystem() {
+      java.lang.Object ref = system_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        system_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * Android 10
+     * </pre>
+     *
+     * <code>string system = 5;</code>
+     * @return The bytes for system.
+     */
+    public com.google.protobuf.ByteString
+        getSystemBytes() {
+      java.lang.Object ref = system_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        system_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * Android 10
+     * </pre>
+     *
+     * <code>string system = 5;</code>
+     * @param value The system to set.
+     * @return This builder for chaining.
+     */
+    public Builder setSystem(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      system_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * Android 10
+     * </pre>
+     *
+     * <code>string system = 5;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearSystem() {
+      
+      system_ = getDefaultInstance().getSystem();
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * Android 10
+     * </pre>
+     *
+     * <code>string system = 5;</code>
+     * @param value The bytes for system to set.
+     * @return This builder for chaining.
+     */
+    public Builder setSystemBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      system_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object wechatVersion_ = "";
+    /**
+     * <pre>
+     * 8.0.43
+     * </pre>
+     *
+     * <code>string wechat_version = 6;</code>
+     * @return The wechatVersion.
+     */
+    public java.lang.String getWechatVersion() {
+      java.lang.Object ref = wechatVersion_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        wechatVersion_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <pre>
+     * 8.0.43
+     * </pre>
+     *
+     * <code>string wechat_version = 6;</code>
+     * @return The bytes for wechatVersion.
+     */
+    public com.google.protobuf.ByteString
+        getWechatVersionBytes() {
+      java.lang.Object ref = wechatVersion_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        wechatVersion_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <pre>
+     * 8.0.43
+     * </pre>
+     *
+     * <code>string wechat_version = 6;</code>
+     * @param value The wechatVersion to set.
+     * @return This builder for chaining.
+     */
+    public Builder setWechatVersion(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      wechatVersion_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * 8.0.43
+     * </pre>
+     *
+     * <code>string wechat_version = 6;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearWechatVersion() {
+      
+      wechatVersion_ = getDefaultInstance().getWechatVersion();
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * 8.0.43
+     * </pre>
+     *
+     * <code>string wechat_version = 6;</code>
+     * @param value The bytes for wechatVersion to set.
+     * @return This builder for chaining.
+     */
+    public Builder setWechatVersionBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      wechatVersion_ = value;
+      onChanged();
+      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:MachineInfoProto)
+  }
+
+  // @@protoc_insertion_point(class_scope:MachineInfoProto)
+  private static final com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto();
+  }
+
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<MachineInfoProto>
+      PARSER = new com.google.protobuf.AbstractParser<MachineInfoProto>() {
+    @java.lang.Override
+    public MachineInfoProto parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return new MachineInfoProto(input, extensionRegistry);
+    }
+  };
+
+  public static com.google.protobuf.Parser<MachineInfoProto> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<MachineInfoProto> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+

+ 121 - 0
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/MachineInfoProtoOrBuilder.java

@@ -0,0 +1,121 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/server/recommend.proto
+
+package com.tzld.piaoquan.recommend.server.gen.recommend;
+
+public interface MachineInfoProtoOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:MachineInfoProto)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <code>string brand = 1;</code>
+   * @return The brand.
+   */
+  java.lang.String getBrand();
+  /**
+   * <code>string brand = 1;</code>
+   * @return The bytes for brand.
+   */
+  com.google.protobuf.ByteString
+      getBrandBytes();
+
+  /**
+   * <pre>
+   * NZA-AL00
+   * </pre>
+   *
+   * <code>string model = 2;</code>
+   * @return The model.
+   */
+  java.lang.String getModel();
+  /**
+   * <pre>
+   * NZA-AL00
+   * </pre>
+   *
+   * <code>string model = 2;</code>
+   * @return The bytes for model.
+   */
+  com.google.protobuf.ByteString
+      getModelBytes();
+
+  /**
+   * <pre>
+   * android
+   * </pre>
+   *
+   * <code>string platform = 3;</code>
+   * @return The platform.
+   */
+  java.lang.String getPlatform();
+  /**
+   * <pre>
+   * android
+   * </pre>
+   *
+   * <code>string platform = 3;</code>
+   * @return The bytes for platform.
+   */
+  com.google.protobuf.ByteString
+      getPlatformBytes();
+
+  /**
+   * <pre>
+   * 3.2.4
+   * </pre>
+   *
+   * <code>string sdk_version = 4;</code>
+   * @return The sdkVersion.
+   */
+  java.lang.String getSdkVersion();
+  /**
+   * <pre>
+   * 3.2.4
+   * </pre>
+   *
+   * <code>string sdk_version = 4;</code>
+   * @return The bytes for sdkVersion.
+   */
+  com.google.protobuf.ByteString
+      getSdkVersionBytes();
+
+  /**
+   * <pre>
+   * Android 10
+   * </pre>
+   *
+   * <code>string system = 5;</code>
+   * @return The system.
+   */
+  java.lang.String getSystem();
+  /**
+   * <pre>
+   * Android 10
+   * </pre>
+   *
+   * <code>string system = 5;</code>
+   * @return The bytes for system.
+   */
+  com.google.protobuf.ByteString
+      getSystemBytes();
+
+  /**
+   * <pre>
+   * 8.0.43
+   * </pre>
+   *
+   * <code>string wechat_version = 6;</code>
+   * @return The wechatVersion.
+   */
+  java.lang.String getWechatVersion();
+  /**
+   * <pre>
+   * 8.0.43
+   * </pre>
+   *
+   * <code>string wechat_version = 6;</code>
+   * @return The bytes for wechatVersion.
+   */
+  com.google.protobuf.ByteString
+      getWechatVersionBytes();
+}

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

@@ -0,0 +1,122 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/server/recommend.proto
+
+package com.tzld.piaoquan.recommend.server.gen.recommend;
+
+public final class Recommend {
+  private Recommend() {}
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistryLite registry) {
+  }
+
+  public static void registerAllExtensions(
+      com.google.protobuf.ExtensionRegistry registry) {
+    registerAllExtensions(
+        (com.google.protobuf.ExtensionRegistryLite) registry);
+  }
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_RecommendRequest_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_RecommendRequest_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_RecommendRequest_EventIdEntry_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_RecommendRequest_EventIdEntry_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_MachineInfoProto_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_MachineInfoProto_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_RecommendResponse_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_RecommendResponse_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_VideoProto_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_VideoProto_fieldAccessorTable;
+
+  public static com.google.protobuf.Descriptors.FileDescriptor
+      getDescriptor() {
+    return descriptor;
+  }
+  private static  com.google.protobuf.Descriptors.FileDescriptor
+      descriptor;
+  static {
+    java.lang.String[] descriptorData = {
+      "\n2com/tzld/piaoquan/recommend/server/rec" +
+      "ommend.proto\032\031google/protobuf/any.proto\032" +
+      "/com/tzld/piaoquan/recommend/server/comm" +
+      "on.proto\"\226\003\n\020RecommendRequest\022\022\n\nrequest" +
+      "_id\030\001 \001(\t\022\013\n\003mid\030\002 \001(\t\022\013\n\003uid\030\003 \001(\t\022\014\n\004s" +
+      "ize\030\004 \001(\005\022\020\n\010app_type\030\005 \001(\005\022\021\n\tcity_code" +
+      "\030\006 \001(\t\022\025\n\rprovince_code\030\007 \001(\t\022\023\n\013ab_exp_" +
+      "code\030\010 \003(\t\0220\n\010event_id\030\t \003(\0132\036.Recommend" +
+      "Request.EventIdEntry\022\034\n\024version_audit_st" +
+      "atus\030\n \001(\005\022\032\n\022recommend_trace_id\030\013 \001(\t\022\020" +
+      "\n\010video_id\030\014 \001(\003\022\014\n\004city\030\r \001(\t\022\020\n\010provin" +
+      "ce\030\016 \001(\t\022\'\n\014machine_info\030\017 \001(\0132\021.Machine" +
+      "InfoProto\032.\n\014EventIdEntry\022\013\n\003key\030\001 \001(\t\022\r" +
+      "\n\005value\030\002 \001(\t:\0028\001\"\177\n\020MachineInfoProto\022\r\n" +
+      "\005brand\030\001 \001(\t\022\r\n\005model\030\002 \001(\t\022\020\n\010platform\030" +
+      "\003 \001(\t\022\023\n\013sdk_version\030\004 \001(\t\022\016\n\006system\030\005 \001" +
+      "(\t\022\026\n\016wechat_version\030\006 \001(\t\"H\n\021RecommendR" +
+      "esponse\022\027\n\006result\030\001 \001(\0132\007.Result\022\032\n\005vide" +
+      "o\030\002 \003(\0132\013.VideoProto\"\265\001\n\nVideoProto\022\020\n\010v" +
+      "ideo_id\030\001 \001(\003\022\021\n\trov_score\030\002 \001(\001\022\021\n\tpush" +
+      "_from\030\003 \001(\t\022\017\n\007ab_code\030\004 \001(\t\022\022\n\nsort_sco" +
+      "re\030\005 \001(\001\022\020\n\010position\030\006 \001(\005\022\021\n\tflow_pool\030" +
+      "\007 \001(\t\022\027\n\017is_in_flow_pool\030\010 \001(\005\022\014\n\004rand\030\t" +
+      " \001(\0012\212\001\n\020RecommendService\022:\n\021HomepageRec" +
+      "ommend\022\021.RecommendRequest\032\022.RecommendRes" +
+      "ponse\022:\n\021RelevantRecommend\022\021.RecommendRe" +
+      "quest\032\022.RecommendResponseB7\n0com.tzld.pi" +
+      "aoquan.recommend.server.gen.recommendP\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(),
+        });
+    internal_static_RecommendRequest_descriptor =
+      getDescriptor().getMessageTypes().get(0);
+    internal_static_RecommendRequest_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_RecommendRequest_descriptor,
+        new java.lang.String[] { "RequestId", "Mid", "Uid", "Size", "AppType", "CityCode", "ProvinceCode", "AbExpCode", "EventId", "VersionAuditStatus", "RecommendTraceId", "VideoId", "City", "Province", "MachineInfo", });
+    internal_static_RecommendRequest_EventIdEntry_descriptor =
+      internal_static_RecommendRequest_descriptor.getNestedTypes().get(0);
+    internal_static_RecommendRequest_EventIdEntry_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_RecommendRequest_EventIdEntry_descriptor,
+        new java.lang.String[] { "Key", "Value", });
+    internal_static_MachineInfoProto_descriptor =
+      getDescriptor().getMessageTypes().get(1);
+    internal_static_MachineInfoProto_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_MachineInfoProto_descriptor,
+        new java.lang.String[] { "Brand", "Model", "Platform", "SdkVersion", "System", "WechatVersion", });
+    internal_static_RecommendResponse_descriptor =
+      getDescriptor().getMessageTypes().get(2);
+    internal_static_RecommendResponse_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_RecommendResponse_descriptor,
+        new java.lang.String[] { "Result", "Video", });
+    internal_static_VideoProto_descriptor =
+      getDescriptor().getMessageTypes().get(3);
+    internal_static_VideoProto_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_VideoProto_descriptor,
+        new java.lang.String[] { "VideoId", "RovScore", "PushFrom", "AbCode", "SortScore", "Position", "FlowPool", "IsInFlowPool", "Rand", });
+    com.google.protobuf.AnyProto.getDescriptor();
+    com.tzld.piaoquan.recommend.server.gen.common.Common.getDescriptor();
+  }
+
+  // @@protoc_insertion_point(outer_class_scope)
+}

+ 2494 - 0
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/RecommendRequest.java

@@ -0,0 +1,2494 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/server/recommend.proto
+
+package com.tzld.piaoquan.recommend.server.gen.recommend;
+
+/**
+ * Protobuf type {@code RecommendRequest}
+ */
+public final class RecommendRequest extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:RecommendRequest)
+    RecommendRequestOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use RecommendRequest.newBuilder() to construct.
+  private RecommendRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private RecommendRequest() {
+    requestId_ = "";
+    mid_ = "";
+    uid_ = "";
+    cityCode_ = "";
+    provinceCode_ = "";
+    abExpCode_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+    recommendTraceId_ = "";
+    city_ = "";
+    province_ = "";
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new RecommendRequest();
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet
+  getUnknownFields() {
+    return this.unknownFields;
+  }
+  private RecommendRequest(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    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;
+          case 10: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            requestId_ = s;
+            break;
+          }
+          case 18: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            mid_ = s;
+            break;
+          }
+          case 26: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            uid_ = s;
+            break;
+          }
+          case 32: {
+
+            size_ = input.readInt32();
+            break;
+          }
+          case 40: {
+
+            appType_ = input.readInt32();
+            break;
+          }
+          case 50: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            cityCode_ = s;
+            break;
+          }
+          case 58: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            provinceCode_ = s;
+            break;
+          }
+          case 66: {
+            java.lang.String s = input.readStringRequireUtf8();
+            if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+              abExpCode_ = new com.google.protobuf.LazyStringArrayList();
+              mutable_bitField0_ |= 0x00000001;
+            }
+            abExpCode_.add(s);
+            break;
+          }
+          case 74: {
+            if (!((mutable_bitField0_ & 0x00000002) != 0)) {
+              eventId_ = com.google.protobuf.MapField.newMapField(
+                  EventIdDefaultEntryHolder.defaultEntry);
+              mutable_bitField0_ |= 0x00000002;
+            }
+            com.google.protobuf.MapEntry<java.lang.String, java.lang.String>
+            eventId__ = input.readMessage(
+                EventIdDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry);
+            eventId_.getMutableMap().put(
+                eventId__.getKey(), eventId__.getValue());
+            break;
+          }
+          case 80: {
+
+            versionAuditStatus_ = input.readInt32();
+            break;
+          }
+          case 90: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            recommendTraceId_ = s;
+            break;
+          }
+          case 96: {
+
+            videoId_ = input.readInt64();
+            break;
+          }
+          case 106: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            city_ = s;
+            break;
+          }
+          case 114: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            province_ = s;
+            break;
+          }
+          case 122: {
+            com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.Builder subBuilder = null;
+            if (machineInfo_ != null) {
+              subBuilder = machineInfo_.toBuilder();
+            }
+            machineInfo_ = input.readMessage(com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.parser(), extensionRegistry);
+            if (subBuilder != null) {
+              subBuilder.mergeFrom(machineInfo_);
+              machineInfo_ = subBuilder.buildPartial();
+            }
+
+            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 {
+      if (((mutable_bitField0_ & 0x00000001) != 0)) {
+        abExpCode_ = abExpCode_.getUnmodifiableView();
+      }
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_RecommendRequest_descriptor;
+  }
+
+  @SuppressWarnings({"rawtypes"})
+  @java.lang.Override
+  protected com.google.protobuf.MapField internalGetMapField(
+      int number) {
+    switch (number) {
+      case 9:
+        return internalGetEventId();
+      default:
+        throw new RuntimeException(
+            "Invalid map field number: " + number);
+    }
+  }
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_RecommendRequest_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest.class, com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest.Builder.class);
+  }
+
+  public static final int REQUEST_ID_FIELD_NUMBER = 1;
+  private volatile java.lang.Object requestId_;
+  /**
+   * <code>string request_id = 1;</code>
+   * @return The requestId.
+   */
+  @java.lang.Override
+  public java.lang.String getRequestId() {
+    java.lang.Object ref = requestId_;
+    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();
+      requestId_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string request_id = 1;</code>
+   * @return The bytes for requestId.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getRequestIdBytes() {
+    java.lang.Object ref = requestId_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      requestId_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int MID_FIELD_NUMBER = 2;
+  private volatile java.lang.Object mid_;
+  /**
+   * <code>string mid = 2;</code>
+   * @return The mid.
+   */
+  @java.lang.Override
+  public java.lang.String getMid() {
+    java.lang.Object ref = mid_;
+    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();
+      mid_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string mid = 2;</code>
+   * @return The bytes for mid.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getMidBytes() {
+    java.lang.Object ref = mid_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      mid_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int UID_FIELD_NUMBER = 3;
+  private volatile java.lang.Object uid_;
+  /**
+   * <code>string uid = 3;</code>
+   * @return The uid.
+   */
+  @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 = 3;</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 static final int SIZE_FIELD_NUMBER = 4;
+  private int size_;
+  /**
+   * <pre>
+   * default 4
+   * </pre>
+   *
+   * <code>int32 size = 4;</code>
+   * @return The size.
+   */
+  @java.lang.Override
+  public int getSize() {
+    return size_;
+  }
+
+  public static final int APP_TYPE_FIELD_NUMBER = 5;
+  private int appType_;
+  /**
+   * <pre>
+   * default 4
+   * </pre>
+   *
+   * <code>int32 app_type = 5;</code>
+   * @return The appType.
+   */
+  @java.lang.Override
+  public int getAppType() {
+    return appType_;
+  }
+
+  public static final int CITY_CODE_FIELD_NUMBER = 6;
+  private volatile java.lang.Object cityCode_;
+  /**
+   * <code>string city_code = 6;</code>
+   * @return The cityCode.
+   */
+  @java.lang.Override
+  public java.lang.String getCityCode() {
+    java.lang.Object ref = cityCode_;
+    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();
+      cityCode_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string city_code = 6;</code>
+   * @return The bytes for cityCode.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getCityCodeBytes() {
+    java.lang.Object ref = cityCode_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      cityCode_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int PROVINCE_CODE_FIELD_NUMBER = 7;
+  private volatile java.lang.Object provinceCode_;
+  /**
+   * <code>string province_code = 7;</code>
+   * @return The provinceCode.
+   */
+  @java.lang.Override
+  public java.lang.String getProvinceCode() {
+    java.lang.Object ref = provinceCode_;
+    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();
+      provinceCode_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string province_code = 7;</code>
+   * @return The bytes for provinceCode.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getProvinceCodeBytes() {
+    java.lang.Object ref = provinceCode_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      provinceCode_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int AB_EXP_CODE_FIELD_NUMBER = 8;
+  private com.google.protobuf.LazyStringList abExpCode_;
+  /**
+   * <code>repeated string ab_exp_code = 8;</code>
+   * @return A list containing the abExpCode.
+   */
+  public com.google.protobuf.ProtocolStringList
+      getAbExpCodeList() {
+    return abExpCode_;
+  }
+  /**
+   * <code>repeated string ab_exp_code = 8;</code>
+   * @return The count of abExpCode.
+   */
+  public int getAbExpCodeCount() {
+    return abExpCode_.size();
+  }
+  /**
+   * <code>repeated string ab_exp_code = 8;</code>
+   * @param index The index of the element to return.
+   * @return The abExpCode at the given index.
+   */
+  public java.lang.String getAbExpCode(int index) {
+    return abExpCode_.get(index);
+  }
+  /**
+   * <code>repeated string ab_exp_code = 8;</code>
+   * @param index The index of the value to return.
+   * @return The bytes of the abExpCode at the given index.
+   */
+  public com.google.protobuf.ByteString
+      getAbExpCodeBytes(int index) {
+    return abExpCode_.getByteString(index);
+  }
+
+  public static final int EVENT_ID_FIELD_NUMBER = 9;
+  private static final class EventIdDefaultEntryHolder {
+    static final com.google.protobuf.MapEntry<
+        java.lang.String, java.lang.String> defaultEntry =
+            com.google.protobuf.MapEntry
+            .<java.lang.String, java.lang.String>newDefaultInstance(
+                com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_RecommendRequest_EventIdEntry_descriptor, 
+                com.google.protobuf.WireFormat.FieldType.STRING,
+                "",
+                com.google.protobuf.WireFormat.FieldType.STRING,
+                "");
+  }
+  private com.google.protobuf.MapField<
+      java.lang.String, java.lang.String> eventId_;
+  private com.google.protobuf.MapField<java.lang.String, java.lang.String>
+  internalGetEventId() {
+    if (eventId_ == null) {
+      return com.google.protobuf.MapField.emptyMapField(
+          EventIdDefaultEntryHolder.defaultEntry);
+    }
+    return eventId_;
+  }
+
+  public int getEventIdCount() {
+    return internalGetEventId().getMap().size();
+  }
+  /**
+   * <code>map&lt;string, string&gt; event_id = 9;</code>
+   */
+
+  @java.lang.Override
+  public boolean containsEventId(
+      java.lang.String key) {
+    if (key == null) { throw new java.lang.NullPointerException(); }
+    return internalGetEventId().getMap().containsKey(key);
+  }
+  /**
+   * Use {@link #getEventIdMap()} instead.
+   */
+  @java.lang.Override
+  @java.lang.Deprecated
+  public java.util.Map<java.lang.String, java.lang.String> getEventId() {
+    return getEventIdMap();
+  }
+  /**
+   * <code>map&lt;string, string&gt; event_id = 9;</code>
+   */
+  @java.lang.Override
+
+  public java.util.Map<java.lang.String, java.lang.String> getEventIdMap() {
+    return internalGetEventId().getMap();
+  }
+  /**
+   * <code>map&lt;string, string&gt; event_id = 9;</code>
+   */
+  @java.lang.Override
+
+  public java.lang.String getEventIdOrDefault(
+      java.lang.String key,
+      java.lang.String defaultValue) {
+    if (key == null) { throw new java.lang.NullPointerException(); }
+    java.util.Map<java.lang.String, java.lang.String> map =
+        internalGetEventId().getMap();
+    return map.containsKey(key) ? map.get(key) : defaultValue;
+  }
+  /**
+   * <code>map&lt;string, string&gt; event_id = 9;</code>
+   */
+  @java.lang.Override
+
+  public java.lang.String getEventIdOrThrow(
+      java.lang.String key) {
+    if (key == null) { throw new java.lang.NullPointerException(); }
+    java.util.Map<java.lang.String, java.lang.String> map =
+        internalGetEventId().getMap();
+    if (!map.containsKey(key)) {
+      throw new java.lang.IllegalArgumentException();
+    }
+    return map.get(key);
+  }
+
+  public static final int VERSION_AUDIT_STATUS_FIELD_NUMBER = 10;
+  private int versionAuditStatus_;
+  /**
+   * <pre>
+   * default 2
+   * </pre>
+   *
+   * <code>int32 version_audit_status = 10;</code>
+   * @return The versionAuditStatus.
+   */
+  @java.lang.Override
+  public int getVersionAuditStatus() {
+    return versionAuditStatus_;
+  }
+
+  public static final int RECOMMEND_TRACE_ID_FIELD_NUMBER = 11;
+  private volatile java.lang.Object recommendTraceId_;
+  /**
+   * <code>string recommend_trace_id = 11;</code>
+   * @return The recommendTraceId.
+   */
+  @java.lang.Override
+  public java.lang.String getRecommendTraceId() {
+    java.lang.Object ref = recommendTraceId_;
+    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();
+      recommendTraceId_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string recommend_trace_id = 11;</code>
+   * @return The bytes for recommendTraceId.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getRecommendTraceIdBytes() {
+    java.lang.Object ref = recommendTraceId_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      recommendTraceId_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int VIDEO_ID_FIELD_NUMBER = 12;
+  private long videoId_;
+  /**
+   * <code>int64 video_id = 12;</code>
+   * @return The videoId.
+   */
+  @java.lang.Override
+  public long getVideoId() {
+    return videoId_;
+  }
+
+  public static final int CITY_FIELD_NUMBER = 13;
+  private volatile java.lang.Object city_;
+  /**
+   * <code>string city = 13;</code>
+   * @return The city.
+   */
+  @java.lang.Override
+  public java.lang.String getCity() {
+    java.lang.Object ref = city_;
+    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();
+      city_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string city = 13;</code>
+   * @return The bytes for city.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getCityBytes() {
+    java.lang.Object ref = city_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      city_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int PROVINCE_FIELD_NUMBER = 14;
+  private volatile java.lang.Object province_;
+  /**
+   * <code>string province = 14;</code>
+   * @return The province.
+   */
+  @java.lang.Override
+  public java.lang.String getProvince() {
+    java.lang.Object ref = province_;
+    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();
+      province_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string province = 14;</code>
+   * @return The bytes for province.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getProvinceBytes() {
+    java.lang.Object ref = province_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      province_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int MACHINE_INFO_FIELD_NUMBER = 15;
+  private com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto machineInfo_;
+  /**
+   * <code>.MachineInfoProto machine_info = 15;</code>
+   * @return Whether the machineInfo field is set.
+   */
+  @java.lang.Override
+  public boolean hasMachineInfo() {
+    return machineInfo_ != null;
+  }
+  /**
+   * <code>.MachineInfoProto machine_info = 15;</code>
+   * @return The machineInfo.
+   */
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto getMachineInfo() {
+    return machineInfo_ == null ? com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.getDefaultInstance() : machineInfo_;
+  }
+  /**
+   * <code>.MachineInfoProto machine_info = 15;</code>
+   */
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProtoOrBuilder getMachineInfoOrBuilder() {
+    return getMachineInfo();
+  }
+
+  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 {
+    if (!getRequestIdBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, requestId_);
+    }
+    if (!getMidBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 2, mid_);
+    }
+    if (!getUidBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 3, uid_);
+    }
+    if (size_ != 0) {
+      output.writeInt32(4, size_);
+    }
+    if (appType_ != 0) {
+      output.writeInt32(5, appType_);
+    }
+    if (!getCityCodeBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 6, cityCode_);
+    }
+    if (!getProvinceCodeBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 7, provinceCode_);
+    }
+    for (int i = 0; i < abExpCode_.size(); i++) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 8, abExpCode_.getRaw(i));
+    }
+    com.google.protobuf.GeneratedMessageV3
+      .serializeStringMapTo(
+        output,
+        internalGetEventId(),
+        EventIdDefaultEntryHolder.defaultEntry,
+        9);
+    if (versionAuditStatus_ != 0) {
+      output.writeInt32(10, versionAuditStatus_);
+    }
+    if (!getRecommendTraceIdBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 11, recommendTraceId_);
+    }
+    if (videoId_ != 0L) {
+      output.writeInt64(12, videoId_);
+    }
+    if (!getCityBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 13, city_);
+    }
+    if (!getProvinceBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 14, province_);
+    }
+    if (machineInfo_ != null) {
+      output.writeMessage(15, getMachineInfo());
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (!getRequestIdBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, requestId_);
+    }
+    if (!getMidBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, mid_);
+    }
+    if (!getUidBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, uid_);
+    }
+    if (size_ != 0) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt32Size(4, size_);
+    }
+    if (appType_ != 0) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt32Size(5, appType_);
+    }
+    if (!getCityCodeBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(6, cityCode_);
+    }
+    if (!getProvinceCodeBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, provinceCode_);
+    }
+    {
+      int dataSize = 0;
+      for (int i = 0; i < abExpCode_.size(); i++) {
+        dataSize += computeStringSizeNoTag(abExpCode_.getRaw(i));
+      }
+      size += dataSize;
+      size += 1 * getAbExpCodeList().size();
+    }
+    for (java.util.Map.Entry<java.lang.String, java.lang.String> entry
+         : internalGetEventId().getMap().entrySet()) {
+      com.google.protobuf.MapEntry<java.lang.String, java.lang.String>
+      eventId__ = EventIdDefaultEntryHolder.defaultEntry.newBuilderForType()
+          .setKey(entry.getKey())
+          .setValue(entry.getValue())
+          .build();
+      size += com.google.protobuf.CodedOutputStream
+          .computeMessageSize(9, eventId__);
+    }
+    if (versionAuditStatus_ != 0) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt32Size(10, versionAuditStatus_);
+    }
+    if (!getRecommendTraceIdBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(11, recommendTraceId_);
+    }
+    if (videoId_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(12, videoId_);
+    }
+    if (!getCityBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(13, city_);
+    }
+    if (!getProvinceBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(14, province_);
+    }
+    if (machineInfo_ != null) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(15, getMachineInfo());
+    }
+    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.server.gen.recommend.RecommendRequest)) {
+      return super.equals(obj);
+    }
+    com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest other = (com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest) obj;
+
+    if (!getRequestId()
+        .equals(other.getRequestId())) return false;
+    if (!getMid()
+        .equals(other.getMid())) return false;
+    if (!getUid()
+        .equals(other.getUid())) return false;
+    if (getSize()
+        != other.getSize()) return false;
+    if (getAppType()
+        != other.getAppType()) return false;
+    if (!getCityCode()
+        .equals(other.getCityCode())) return false;
+    if (!getProvinceCode()
+        .equals(other.getProvinceCode())) return false;
+    if (!getAbExpCodeList()
+        .equals(other.getAbExpCodeList())) return false;
+    if (!internalGetEventId().equals(
+        other.internalGetEventId())) return false;
+    if (getVersionAuditStatus()
+        != other.getVersionAuditStatus()) return false;
+    if (!getRecommendTraceId()
+        .equals(other.getRecommendTraceId())) return false;
+    if (getVideoId()
+        != other.getVideoId()) return false;
+    if (!getCity()
+        .equals(other.getCity())) return false;
+    if (!getProvince()
+        .equals(other.getProvince())) return false;
+    if (hasMachineInfo() != other.hasMachineInfo()) return false;
+    if (hasMachineInfo()) {
+      if (!getMachineInfo()
+          .equals(other.getMachineInfo())) return false;
+    }
+    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 = (37 * hash) + REQUEST_ID_FIELD_NUMBER;
+    hash = (53 * hash) + getRequestId().hashCode();
+    hash = (37 * hash) + MID_FIELD_NUMBER;
+    hash = (53 * hash) + getMid().hashCode();
+    hash = (37 * hash) + UID_FIELD_NUMBER;
+    hash = (53 * hash) + getUid().hashCode();
+    hash = (37 * hash) + SIZE_FIELD_NUMBER;
+    hash = (53 * hash) + getSize();
+    hash = (37 * hash) + APP_TYPE_FIELD_NUMBER;
+    hash = (53 * hash) + getAppType();
+    hash = (37 * hash) + CITY_CODE_FIELD_NUMBER;
+    hash = (53 * hash) + getCityCode().hashCode();
+    hash = (37 * hash) + PROVINCE_CODE_FIELD_NUMBER;
+    hash = (53 * hash) + getProvinceCode().hashCode();
+    if (getAbExpCodeCount() > 0) {
+      hash = (37 * hash) + AB_EXP_CODE_FIELD_NUMBER;
+      hash = (53 * hash) + getAbExpCodeList().hashCode();
+    }
+    if (!internalGetEventId().getMap().isEmpty()) {
+      hash = (37 * hash) + EVENT_ID_FIELD_NUMBER;
+      hash = (53 * hash) + internalGetEventId().hashCode();
+    }
+    hash = (37 * hash) + VERSION_AUDIT_STATUS_FIELD_NUMBER;
+    hash = (53 * hash) + getVersionAuditStatus();
+    hash = (37 * hash) + RECOMMEND_TRACE_ID_FIELD_NUMBER;
+    hash = (53 * hash) + getRecommendTraceId().hashCode();
+    hash = (37 * hash) + VIDEO_ID_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getVideoId());
+    hash = (37 * hash) + CITY_FIELD_NUMBER;
+    hash = (53 * hash) + getCity().hashCode();
+    hash = (37 * hash) + PROVINCE_FIELD_NUMBER;
+    hash = (53 * hash) + getProvince().hashCode();
+    if (hasMachineInfo()) {
+      hash = (37 * hash) + MACHINE_INFO_FIELD_NUMBER;
+      hash = (53 * hash) + getMachineInfo().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest 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.server.gen.recommend.RecommendRequest 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 RecommendRequest}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:RecommendRequest)
+      com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequestOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_RecommendRequest_descriptor;
+    }
+
+    @SuppressWarnings({"rawtypes"})
+    protected com.google.protobuf.MapField internalGetMapField(
+        int number) {
+      switch (number) {
+        case 9:
+          return internalGetEventId();
+        default:
+          throw new RuntimeException(
+              "Invalid map field number: " + number);
+      }
+    }
+    @SuppressWarnings({"rawtypes"})
+    protected com.google.protobuf.MapField internalGetMutableMapField(
+        int number) {
+      switch (number) {
+        case 9:
+          return internalGetMutableEventId();
+        default:
+          throw new RuntimeException(
+              "Invalid map field number: " + number);
+      }
+    }
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_RecommendRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest.class, com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest.Builder.class);
+    }
+
+    // Construct using com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest.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();
+      requestId_ = "";
+
+      mid_ = "";
+
+      uid_ = "";
+
+      size_ = 0;
+
+      appType_ = 0;
+
+      cityCode_ = "";
+
+      provinceCode_ = "";
+
+      abExpCode_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000001);
+      internalGetMutableEventId().clear();
+      versionAuditStatus_ = 0;
+
+      recommendTraceId_ = "";
+
+      videoId_ = 0L;
+
+      city_ = "";
+
+      province_ = "";
+
+      if (machineInfoBuilder_ == null) {
+        machineInfo_ = null;
+      } else {
+        machineInfo_ = null;
+        machineInfoBuilder_ = null;
+      }
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_RecommendRequest_descriptor;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest build() {
+      com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest buildPartial() {
+      com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest result = new com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest(this);
+      int from_bitField0_ = bitField0_;
+      result.requestId_ = requestId_;
+      result.mid_ = mid_;
+      result.uid_ = uid_;
+      result.size_ = size_;
+      result.appType_ = appType_;
+      result.cityCode_ = cityCode_;
+      result.provinceCode_ = provinceCode_;
+      if (((bitField0_ & 0x00000001) != 0)) {
+        abExpCode_ = abExpCode_.getUnmodifiableView();
+        bitField0_ = (bitField0_ & ~0x00000001);
+      }
+      result.abExpCode_ = abExpCode_;
+      result.eventId_ = internalGetEventId();
+      result.eventId_.makeImmutable();
+      result.versionAuditStatus_ = versionAuditStatus_;
+      result.recommendTraceId_ = recommendTraceId_;
+      result.videoId_ = videoId_;
+      result.city_ = city_;
+      result.province_ = province_;
+      if (machineInfoBuilder_ == null) {
+        result.machineInfo_ = machineInfo_;
+      } else {
+        result.machineInfo_ = machineInfoBuilder_.build();
+      }
+      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.server.gen.recommend.RecommendRequest) {
+        return mergeFrom((com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest other) {
+      if (other == com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest.getDefaultInstance()) return this;
+      if (!other.getRequestId().isEmpty()) {
+        requestId_ = other.requestId_;
+        onChanged();
+      }
+      if (!other.getMid().isEmpty()) {
+        mid_ = other.mid_;
+        onChanged();
+      }
+      if (!other.getUid().isEmpty()) {
+        uid_ = other.uid_;
+        onChanged();
+      }
+      if (other.getSize() != 0) {
+        setSize(other.getSize());
+      }
+      if (other.getAppType() != 0) {
+        setAppType(other.getAppType());
+      }
+      if (!other.getCityCode().isEmpty()) {
+        cityCode_ = other.cityCode_;
+        onChanged();
+      }
+      if (!other.getProvinceCode().isEmpty()) {
+        provinceCode_ = other.provinceCode_;
+        onChanged();
+      }
+      if (!other.abExpCode_.isEmpty()) {
+        if (abExpCode_.isEmpty()) {
+          abExpCode_ = other.abExpCode_;
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          ensureAbExpCodeIsMutable();
+          abExpCode_.addAll(other.abExpCode_);
+        }
+        onChanged();
+      }
+      internalGetMutableEventId().mergeFrom(
+          other.internalGetEventId());
+      if (other.getVersionAuditStatus() != 0) {
+        setVersionAuditStatus(other.getVersionAuditStatus());
+      }
+      if (!other.getRecommendTraceId().isEmpty()) {
+        recommendTraceId_ = other.recommendTraceId_;
+        onChanged();
+      }
+      if (other.getVideoId() != 0L) {
+        setVideoId(other.getVideoId());
+      }
+      if (!other.getCity().isEmpty()) {
+        city_ = other.city_;
+        onChanged();
+      }
+      if (!other.getProvince().isEmpty()) {
+        province_ = other.province_;
+        onChanged();
+      }
+      if (other.hasMachineInfo()) {
+        mergeMachineInfo(other.getMachineInfo());
+      }
+      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.server.gen.recommend.RecommendRequest parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+    private int bitField0_;
+
+    private java.lang.Object requestId_ = "";
+    /**
+     * <code>string request_id = 1;</code>
+     * @return The requestId.
+     */
+    public java.lang.String getRequestId() {
+      java.lang.Object ref = requestId_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        requestId_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string request_id = 1;</code>
+     * @return The bytes for requestId.
+     */
+    public com.google.protobuf.ByteString
+        getRequestIdBytes() {
+      java.lang.Object ref = requestId_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        requestId_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string request_id = 1;</code>
+     * @param value The requestId to set.
+     * @return This builder for chaining.
+     */
+    public Builder setRequestId(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      requestId_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string request_id = 1;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearRequestId() {
+      
+      requestId_ = getDefaultInstance().getRequestId();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string request_id = 1;</code>
+     * @param value The bytes for requestId to set.
+     * @return This builder for chaining.
+     */
+    public Builder setRequestIdBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      requestId_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object mid_ = "";
+    /**
+     * <code>string mid = 2;</code>
+     * @return The mid.
+     */
+    public java.lang.String getMid() {
+      java.lang.Object ref = mid_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        mid_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string mid = 2;</code>
+     * @return The bytes for mid.
+     */
+    public com.google.protobuf.ByteString
+        getMidBytes() {
+      java.lang.Object ref = mid_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        mid_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string mid = 2;</code>
+     * @param value The mid to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMid(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      mid_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string mid = 2;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMid() {
+      
+      mid_ = getDefaultInstance().getMid();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string mid = 2;</code>
+     * @param value The bytes for mid to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMidBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      mid_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object uid_ = "";
+    /**
+     * <code>string uid = 3;</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;
+      }
+    }
+    /**
+     * <code>string uid = 3;</code>
+     * @return The bytes for uid.
+     */
+    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 = 3;</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;
+    }
+    /**
+     * <code>string uid = 3;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUid() {
+      
+      uid_ = getDefaultInstance().getUid();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string uid = 3;</code>
+     * @param value The bytes for uid to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUidBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      uid_ = value;
+      onChanged();
+      return this;
+    }
+
+    private int size_ ;
+    /**
+     * <pre>
+     * default 4
+     * </pre>
+     *
+     * <code>int32 size = 4;</code>
+     * @return The size.
+     */
+    @java.lang.Override
+    public int getSize() {
+      return size_;
+    }
+    /**
+     * <pre>
+     * default 4
+     * </pre>
+     *
+     * <code>int32 size = 4;</code>
+     * @param value The size to set.
+     * @return This builder for chaining.
+     */
+    public Builder setSize(int value) {
+      
+      size_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * default 4
+     * </pre>
+     *
+     * <code>int32 size = 4;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearSize() {
+      
+      size_ = 0;
+      onChanged();
+      return this;
+    }
+
+    private int appType_ ;
+    /**
+     * <pre>
+     * default 4
+     * </pre>
+     *
+     * <code>int32 app_type = 5;</code>
+     * @return The appType.
+     */
+    @java.lang.Override
+    public int getAppType() {
+      return appType_;
+    }
+    /**
+     * <pre>
+     * default 4
+     * </pre>
+     *
+     * <code>int32 app_type = 5;</code>
+     * @param value The appType to set.
+     * @return This builder for chaining.
+     */
+    public Builder setAppType(int value) {
+      
+      appType_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * default 4
+     * </pre>
+     *
+     * <code>int32 app_type = 5;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearAppType() {
+      
+      appType_ = 0;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object cityCode_ = "";
+    /**
+     * <code>string city_code = 6;</code>
+     * @return The cityCode.
+     */
+    public java.lang.String getCityCode() {
+      java.lang.Object ref = cityCode_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        cityCode_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string city_code = 6;</code>
+     * @return The bytes for cityCode.
+     */
+    public com.google.protobuf.ByteString
+        getCityCodeBytes() {
+      java.lang.Object ref = cityCode_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        cityCode_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string city_code = 6;</code>
+     * @param value The cityCode to set.
+     * @return This builder for chaining.
+     */
+    public Builder setCityCode(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      cityCode_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string city_code = 6;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearCityCode() {
+      
+      cityCode_ = getDefaultInstance().getCityCode();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string city_code = 6;</code>
+     * @param value The bytes for cityCode to set.
+     * @return This builder for chaining.
+     */
+    public Builder setCityCodeBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      cityCode_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object provinceCode_ = "";
+    /**
+     * <code>string province_code = 7;</code>
+     * @return The provinceCode.
+     */
+    public java.lang.String getProvinceCode() {
+      java.lang.Object ref = provinceCode_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        provinceCode_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string province_code = 7;</code>
+     * @return The bytes for provinceCode.
+     */
+    public com.google.protobuf.ByteString
+        getProvinceCodeBytes() {
+      java.lang.Object ref = provinceCode_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        provinceCode_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string province_code = 7;</code>
+     * @param value The provinceCode to set.
+     * @return This builder for chaining.
+     */
+    public Builder setProvinceCode(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      provinceCode_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string province_code = 7;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearProvinceCode() {
+      
+      provinceCode_ = getDefaultInstance().getProvinceCode();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string province_code = 7;</code>
+     * @param value The bytes for provinceCode to set.
+     * @return This builder for chaining.
+     */
+    public Builder setProvinceCodeBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      provinceCode_ = value;
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.LazyStringList abExpCode_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+    private void ensureAbExpCodeIsMutable() {
+      if (!((bitField0_ & 0x00000001) != 0)) {
+        abExpCode_ = new com.google.protobuf.LazyStringArrayList(abExpCode_);
+        bitField0_ |= 0x00000001;
+       }
+    }
+    /**
+     * <code>repeated string ab_exp_code = 8;</code>
+     * @return A list containing the abExpCode.
+     */
+    public com.google.protobuf.ProtocolStringList
+        getAbExpCodeList() {
+      return abExpCode_.getUnmodifiableView();
+    }
+    /**
+     * <code>repeated string ab_exp_code = 8;</code>
+     * @return The count of abExpCode.
+     */
+    public int getAbExpCodeCount() {
+      return abExpCode_.size();
+    }
+    /**
+     * <code>repeated string ab_exp_code = 8;</code>
+     * @param index The index of the element to return.
+     * @return The abExpCode at the given index.
+     */
+    public java.lang.String getAbExpCode(int index) {
+      return abExpCode_.get(index);
+    }
+    /**
+     * <code>repeated string ab_exp_code = 8;</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the abExpCode at the given index.
+     */
+    public com.google.protobuf.ByteString
+        getAbExpCodeBytes(int index) {
+      return abExpCode_.getByteString(index);
+    }
+    /**
+     * <code>repeated string ab_exp_code = 8;</code>
+     * @param index The index to set the value at.
+     * @param value The abExpCode to set.
+     * @return This builder for chaining.
+     */
+    public Builder setAbExpCode(
+        int index, java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureAbExpCodeIsMutable();
+      abExpCode_.set(index, value);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>repeated string ab_exp_code = 8;</code>
+     * @param value The abExpCode to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAbExpCode(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureAbExpCodeIsMutable();
+      abExpCode_.add(value);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>repeated string ab_exp_code = 8;</code>
+     * @param values The abExpCode to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllAbExpCode(
+        java.lang.Iterable<java.lang.String> values) {
+      ensureAbExpCodeIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, abExpCode_);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>repeated string ab_exp_code = 8;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearAbExpCode() {
+      abExpCode_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000001);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>repeated string ab_exp_code = 8;</code>
+     * @param value The bytes of the abExpCode to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAbExpCodeBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      ensureAbExpCodeIsMutable();
+      abExpCode_.add(value);
+      onChanged();
+      return this;
+    }
+
+    private com.google.protobuf.MapField<
+        java.lang.String, java.lang.String> eventId_;
+    private com.google.protobuf.MapField<java.lang.String, java.lang.String>
+    internalGetEventId() {
+      if (eventId_ == null) {
+        return com.google.protobuf.MapField.emptyMapField(
+            EventIdDefaultEntryHolder.defaultEntry);
+      }
+      return eventId_;
+    }
+    private com.google.protobuf.MapField<java.lang.String, java.lang.String>
+    internalGetMutableEventId() {
+      onChanged();;
+      if (eventId_ == null) {
+        eventId_ = com.google.protobuf.MapField.newMapField(
+            EventIdDefaultEntryHolder.defaultEntry);
+      }
+      if (!eventId_.isMutable()) {
+        eventId_ = eventId_.copy();
+      }
+      return eventId_;
+    }
+
+    public int getEventIdCount() {
+      return internalGetEventId().getMap().size();
+    }
+    /**
+     * <code>map&lt;string, string&gt; event_id = 9;</code>
+     */
+
+    @java.lang.Override
+    public boolean containsEventId(
+        java.lang.String key) {
+      if (key == null) { throw new java.lang.NullPointerException(); }
+      return internalGetEventId().getMap().containsKey(key);
+    }
+    /**
+     * Use {@link #getEventIdMap()} instead.
+     */
+    @java.lang.Override
+    @java.lang.Deprecated
+    public java.util.Map<java.lang.String, java.lang.String> getEventId() {
+      return getEventIdMap();
+    }
+    /**
+     * <code>map&lt;string, string&gt; event_id = 9;</code>
+     */
+    @java.lang.Override
+
+    public java.util.Map<java.lang.String, java.lang.String> getEventIdMap() {
+      return internalGetEventId().getMap();
+    }
+    /**
+     * <code>map&lt;string, string&gt; event_id = 9;</code>
+     */
+    @java.lang.Override
+
+    public java.lang.String getEventIdOrDefault(
+        java.lang.String key,
+        java.lang.String defaultValue) {
+      if (key == null) { throw new java.lang.NullPointerException(); }
+      java.util.Map<java.lang.String, java.lang.String> map =
+          internalGetEventId().getMap();
+      return map.containsKey(key) ? map.get(key) : defaultValue;
+    }
+    /**
+     * <code>map&lt;string, string&gt; event_id = 9;</code>
+     */
+    @java.lang.Override
+
+    public java.lang.String getEventIdOrThrow(
+        java.lang.String key) {
+      if (key == null) { throw new java.lang.NullPointerException(); }
+      java.util.Map<java.lang.String, java.lang.String> map =
+          internalGetEventId().getMap();
+      if (!map.containsKey(key)) {
+        throw new java.lang.IllegalArgumentException();
+      }
+      return map.get(key);
+    }
+
+    public Builder clearEventId() {
+      internalGetMutableEventId().getMutableMap()
+          .clear();
+      return this;
+    }
+    /**
+     * <code>map&lt;string, string&gt; event_id = 9;</code>
+     */
+
+    public Builder removeEventId(
+        java.lang.String key) {
+      if (key == null) { throw new java.lang.NullPointerException(); }
+      internalGetMutableEventId().getMutableMap()
+          .remove(key);
+      return this;
+    }
+    /**
+     * Use alternate mutation accessors instead.
+     */
+    @java.lang.Deprecated
+    public java.util.Map<java.lang.String, java.lang.String>
+    getMutableEventId() {
+      return internalGetMutableEventId().getMutableMap();
+    }
+    /**
+     * <code>map&lt;string, string&gt; event_id = 9;</code>
+     */
+    public Builder putEventId(
+        java.lang.String key,
+        java.lang.String value) {
+      if (key == null) { throw new java.lang.NullPointerException(); }
+      if (value == null) { throw new java.lang.NullPointerException(); }
+      internalGetMutableEventId().getMutableMap()
+          .put(key, value);
+      return this;
+    }
+    /**
+     * <code>map&lt;string, string&gt; event_id = 9;</code>
+     */
+
+    public Builder putAllEventId(
+        java.util.Map<java.lang.String, java.lang.String> values) {
+      internalGetMutableEventId().getMutableMap()
+          .putAll(values);
+      return this;
+    }
+
+    private int versionAuditStatus_ ;
+    /**
+     * <pre>
+     * default 2
+     * </pre>
+     *
+     * <code>int32 version_audit_status = 10;</code>
+     * @return The versionAuditStatus.
+     */
+    @java.lang.Override
+    public int getVersionAuditStatus() {
+      return versionAuditStatus_;
+    }
+    /**
+     * <pre>
+     * default 2
+     * </pre>
+     *
+     * <code>int32 version_audit_status = 10;</code>
+     * @param value The versionAuditStatus to set.
+     * @return This builder for chaining.
+     */
+    public Builder setVersionAuditStatus(int value) {
+      
+      versionAuditStatus_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * default 2
+     * </pre>
+     *
+     * <code>int32 version_audit_status = 10;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearVersionAuditStatus() {
+      
+      versionAuditStatus_ = 0;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object recommendTraceId_ = "";
+    /**
+     * <code>string recommend_trace_id = 11;</code>
+     * @return The recommendTraceId.
+     */
+    public java.lang.String getRecommendTraceId() {
+      java.lang.Object ref = recommendTraceId_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        recommendTraceId_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string recommend_trace_id = 11;</code>
+     * @return The bytes for recommendTraceId.
+     */
+    public com.google.protobuf.ByteString
+        getRecommendTraceIdBytes() {
+      java.lang.Object ref = recommendTraceId_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        recommendTraceId_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string recommend_trace_id = 11;</code>
+     * @param value The recommendTraceId to set.
+     * @return This builder for chaining.
+     */
+    public Builder setRecommendTraceId(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      recommendTraceId_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string recommend_trace_id = 11;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearRecommendTraceId() {
+      
+      recommendTraceId_ = getDefaultInstance().getRecommendTraceId();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string recommend_trace_id = 11;</code>
+     * @param value The bytes for recommendTraceId to set.
+     * @return This builder for chaining.
+     */
+    public Builder setRecommendTraceIdBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      recommendTraceId_ = value;
+      onChanged();
+      return this;
+    }
+
+    private long videoId_ ;
+    /**
+     * <code>int64 video_id = 12;</code>
+     * @return The videoId.
+     */
+    @java.lang.Override
+    public long getVideoId() {
+      return videoId_;
+    }
+    /**
+     * <code>int64 video_id = 12;</code>
+     * @param value The videoId to set.
+     * @return This builder for chaining.
+     */
+    public Builder setVideoId(long value) {
+      
+      videoId_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 video_id = 12;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearVideoId() {
+      
+      videoId_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object city_ = "";
+    /**
+     * <code>string city = 13;</code>
+     * @return The city.
+     */
+    public java.lang.String getCity() {
+      java.lang.Object ref = city_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        city_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string city = 13;</code>
+     * @return The bytes for city.
+     */
+    public com.google.protobuf.ByteString
+        getCityBytes() {
+      java.lang.Object ref = city_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        city_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string city = 13;</code>
+     * @param value The city to set.
+     * @return This builder for chaining.
+     */
+    public Builder setCity(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      city_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string city = 13;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearCity() {
+      
+      city_ = getDefaultInstance().getCity();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string city = 13;</code>
+     * @param value The bytes for city to set.
+     * @return This builder for chaining.
+     */
+    public Builder setCityBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      city_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object province_ = "";
+    /**
+     * <code>string province = 14;</code>
+     * @return The province.
+     */
+    public java.lang.String getProvince() {
+      java.lang.Object ref = province_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        province_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string province = 14;</code>
+     * @return The bytes for province.
+     */
+    public com.google.protobuf.ByteString
+        getProvinceBytes() {
+      java.lang.Object ref = province_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        province_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string province = 14;</code>
+     * @param value The province to set.
+     * @return This builder for chaining.
+     */
+    public Builder setProvince(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      province_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string province = 14;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearProvince() {
+      
+      province_ = getDefaultInstance().getProvince();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string province = 14;</code>
+     * @param value The bytes for province to set.
+     * @return This builder for chaining.
+     */
+    public Builder setProvinceBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      province_ = value;
+      onChanged();
+      return this;
+    }
+
+    private com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto machineInfo_;
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto, com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.Builder, com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProtoOrBuilder> machineInfoBuilder_;
+    /**
+     * <code>.MachineInfoProto machine_info = 15;</code>
+     * @return Whether the machineInfo field is set.
+     */
+    public boolean hasMachineInfo() {
+      return machineInfoBuilder_ != null || machineInfo_ != null;
+    }
+    /**
+     * <code>.MachineInfoProto machine_info = 15;</code>
+     * @return The machineInfo.
+     */
+    public com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto getMachineInfo() {
+      if (machineInfoBuilder_ == null) {
+        return machineInfo_ == null ? com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.getDefaultInstance() : machineInfo_;
+      } else {
+        return machineInfoBuilder_.getMessage();
+      }
+    }
+    /**
+     * <code>.MachineInfoProto machine_info = 15;</code>
+     */
+    public Builder setMachineInfo(com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto value) {
+      if (machineInfoBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        machineInfo_ = value;
+        onChanged();
+      } else {
+        machineInfoBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     * <code>.MachineInfoProto machine_info = 15;</code>
+     */
+    public Builder setMachineInfo(
+        com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.Builder builderForValue) {
+      if (machineInfoBuilder_ == null) {
+        machineInfo_ = builderForValue.build();
+        onChanged();
+      } else {
+        machineInfoBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     * <code>.MachineInfoProto machine_info = 15;</code>
+     */
+    public Builder mergeMachineInfo(com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto value) {
+      if (machineInfoBuilder_ == null) {
+        if (machineInfo_ != null) {
+          machineInfo_ =
+            com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.newBuilder(machineInfo_).mergeFrom(value).buildPartial();
+        } else {
+          machineInfo_ = value;
+        }
+        onChanged();
+      } else {
+        machineInfoBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     * <code>.MachineInfoProto machine_info = 15;</code>
+     */
+    public Builder clearMachineInfo() {
+      if (machineInfoBuilder_ == null) {
+        machineInfo_ = null;
+        onChanged();
+      } else {
+        machineInfo_ = null;
+        machineInfoBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     * <code>.MachineInfoProto machine_info = 15;</code>
+     */
+    public com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.Builder getMachineInfoBuilder() {
+      
+      onChanged();
+      return getMachineInfoFieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.MachineInfoProto machine_info = 15;</code>
+     */
+    public com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProtoOrBuilder getMachineInfoOrBuilder() {
+      if (machineInfoBuilder_ != null) {
+        return machineInfoBuilder_.getMessageOrBuilder();
+      } else {
+        return machineInfo_ == null ?
+            com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.getDefaultInstance() : machineInfo_;
+      }
+    }
+    /**
+     * <code>.MachineInfoProto machine_info = 15;</code>
+     */
+    private com.google.protobuf.SingleFieldBuilderV3<
+        com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto, com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.Builder, com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProtoOrBuilder> 
+        getMachineInfoFieldBuilder() {
+      if (machineInfoBuilder_ == null) {
+        machineInfoBuilder_ = new com.google.protobuf.SingleFieldBuilderV3<
+            com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto, com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto.Builder, com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProtoOrBuilder>(
+                getMachineInfo(),
+                getParentForChildren(),
+                isClean());
+        machineInfo_ = null;
+      }
+      return machineInfoBuilder_;
+    }
+    @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:RecommendRequest)
+  }
+
+  // @@protoc_insertion_point(class_scope:RecommendRequest)
+  private static final com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest();
+  }
+
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<RecommendRequest>
+      PARSER = new com.google.protobuf.AbstractParser<RecommendRequest>() {
+    @java.lang.Override
+    public RecommendRequest parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return new RecommendRequest(input, extensionRegistry);
+    }
+  };
+
+  public static com.google.protobuf.Parser<RecommendRequest> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<RecommendRequest> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+

+ 215 - 0
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/RecommendRequestOrBuilder.java

@@ -0,0 +1,215 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/server/recommend.proto
+
+package com.tzld.piaoquan.recommend.server.gen.recommend;
+
+public interface RecommendRequestOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:RecommendRequest)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <code>string request_id = 1;</code>
+   * @return The requestId.
+   */
+  java.lang.String getRequestId();
+  /**
+   * <code>string request_id = 1;</code>
+   * @return The bytes for requestId.
+   */
+  com.google.protobuf.ByteString
+      getRequestIdBytes();
+
+  /**
+   * <code>string mid = 2;</code>
+   * @return The mid.
+   */
+  java.lang.String getMid();
+  /**
+   * <code>string mid = 2;</code>
+   * @return The bytes for mid.
+   */
+  com.google.protobuf.ByteString
+      getMidBytes();
+
+  /**
+   * <code>string uid = 3;</code>
+   * @return The uid.
+   */
+  java.lang.String getUid();
+  /**
+   * <code>string uid = 3;</code>
+   * @return The bytes for uid.
+   */
+  com.google.protobuf.ByteString
+      getUidBytes();
+
+  /**
+   * <pre>
+   * default 4
+   * </pre>
+   *
+   * <code>int32 size = 4;</code>
+   * @return The size.
+   */
+  int getSize();
+
+  /**
+   * <pre>
+   * default 4
+   * </pre>
+   *
+   * <code>int32 app_type = 5;</code>
+   * @return The appType.
+   */
+  int getAppType();
+
+  /**
+   * <code>string city_code = 6;</code>
+   * @return The cityCode.
+   */
+  java.lang.String getCityCode();
+  /**
+   * <code>string city_code = 6;</code>
+   * @return The bytes for cityCode.
+   */
+  com.google.protobuf.ByteString
+      getCityCodeBytes();
+
+  /**
+   * <code>string province_code = 7;</code>
+   * @return The provinceCode.
+   */
+  java.lang.String getProvinceCode();
+  /**
+   * <code>string province_code = 7;</code>
+   * @return The bytes for provinceCode.
+   */
+  com.google.protobuf.ByteString
+      getProvinceCodeBytes();
+
+  /**
+   * <code>repeated string ab_exp_code = 8;</code>
+   * @return A list containing the abExpCode.
+   */
+  java.util.List<java.lang.String>
+      getAbExpCodeList();
+  /**
+   * <code>repeated string ab_exp_code = 8;</code>
+   * @return The count of abExpCode.
+   */
+  int getAbExpCodeCount();
+  /**
+   * <code>repeated string ab_exp_code = 8;</code>
+   * @param index The index of the element to return.
+   * @return The abExpCode at the given index.
+   */
+  java.lang.String getAbExpCode(int index);
+  /**
+   * <code>repeated string ab_exp_code = 8;</code>
+   * @param index The index of the value to return.
+   * @return The bytes of the abExpCode at the given index.
+   */
+  com.google.protobuf.ByteString
+      getAbExpCodeBytes(int index);
+
+  /**
+   * <code>map&lt;string, string&gt; event_id = 9;</code>
+   */
+  int getEventIdCount();
+  /**
+   * <code>map&lt;string, string&gt; event_id = 9;</code>
+   */
+  boolean containsEventId(
+      java.lang.String key);
+  /**
+   * Use {@link #getEventIdMap()} instead.
+   */
+  @java.lang.Deprecated
+  java.util.Map<java.lang.String, java.lang.String>
+  getEventId();
+  /**
+   * <code>map&lt;string, string&gt; event_id = 9;</code>
+   */
+  java.util.Map<java.lang.String, java.lang.String>
+  getEventIdMap();
+  /**
+   * <code>map&lt;string, string&gt; event_id = 9;</code>
+   */
+
+  java.lang.String getEventIdOrDefault(
+      java.lang.String key,
+      java.lang.String defaultValue);
+  /**
+   * <code>map&lt;string, string&gt; event_id = 9;</code>
+   */
+
+  java.lang.String getEventIdOrThrow(
+      java.lang.String key);
+
+  /**
+   * <pre>
+   * default 2
+   * </pre>
+   *
+   * <code>int32 version_audit_status = 10;</code>
+   * @return The versionAuditStatus.
+   */
+  int getVersionAuditStatus();
+
+  /**
+   * <code>string recommend_trace_id = 11;</code>
+   * @return The recommendTraceId.
+   */
+  java.lang.String getRecommendTraceId();
+  /**
+   * <code>string recommend_trace_id = 11;</code>
+   * @return The bytes for recommendTraceId.
+   */
+  com.google.protobuf.ByteString
+      getRecommendTraceIdBytes();
+
+  /**
+   * <code>int64 video_id = 12;</code>
+   * @return The videoId.
+   */
+  long getVideoId();
+
+  /**
+   * <code>string city = 13;</code>
+   * @return The city.
+   */
+  java.lang.String getCity();
+  /**
+   * <code>string city = 13;</code>
+   * @return The bytes for city.
+   */
+  com.google.protobuf.ByteString
+      getCityBytes();
+
+  /**
+   * <code>string province = 14;</code>
+   * @return The province.
+   */
+  java.lang.String getProvince();
+  /**
+   * <code>string province = 14;</code>
+   * @return The bytes for province.
+   */
+  com.google.protobuf.ByteString
+      getProvinceBytes();
+
+  /**
+   * <code>.MachineInfoProto machine_info = 15;</code>
+   * @return Whether the machineInfo field is set.
+   */
+  boolean hasMachineInfo();
+  /**
+   * <code>.MachineInfoProto machine_info = 15;</code>
+   * @return The machineInfo.
+   */
+  com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProto getMachineInfo();
+  /**
+   * <code>.MachineInfoProto machine_info = 15;</code>
+   */
+  com.tzld.piaoquan.recommend.server.gen.recommend.MachineInfoProtoOrBuilder getMachineInfoOrBuilder();
+}

+ 966 - 0
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/RecommendResponse.java

@@ -0,0 +1,966 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/server/recommend.proto
+
+package com.tzld.piaoquan.recommend.server.gen.recommend;
+
+/**
+ * <pre>
+ * https://sls.console.aliyun.com/lognext/project/rov-server/logsearch/info
+ * </pre>
+ *
+ * Protobuf type {@code RecommendResponse}
+ */
+public final class RecommendResponse extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:RecommendResponse)
+    RecommendResponseOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use RecommendResponse.newBuilder() to construct.
+  private RecommendResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private RecommendResponse() {
+    video_ = java.util.Collections.emptyList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new RecommendResponse();
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet
+  getUnknownFields() {
+    return this.unknownFields;
+  }
+  private RecommendResponse(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    this();
+    if (extensionRegistry == null) {
+      throw new java.lang.NullPointerException();
+    }
+    int mutable_bitField0_ = 0;
+    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;
+          case 10: {
+            com.tzld.piaoquan.recommend.server.gen.common.Result.Builder subBuilder = null;
+            if (result_ != null) {
+              subBuilder = result_.toBuilder();
+            }
+            result_ = input.readMessage(com.tzld.piaoquan.recommend.server.gen.common.Result.parser(), extensionRegistry);
+            if (subBuilder != null) {
+              subBuilder.mergeFrom(result_);
+              result_ = subBuilder.buildPartial();
+            }
+
+            break;
+          }
+          case 18: {
+            if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+              video_ = new java.util.ArrayList<com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto>();
+              mutable_bitField0_ |= 0x00000001;
+            }
+            video_.add(
+                input.readMessage(com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.parser(), extensionRegistry));
+            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 {
+      if (((mutable_bitField0_ & 0x00000001) != 0)) {
+        video_ = java.util.Collections.unmodifiableList(video_);
+      }
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_RecommendResponse_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_RecommendResponse_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.class, com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.Builder.class);
+  }
+
+  public static final int RESULT_FIELD_NUMBER = 1;
+  private com.tzld.piaoquan.recommend.server.gen.common.Result result_;
+  /**
+   * <code>.Result result = 1;</code>
+   * @return Whether the result field is set.
+   */
+  @java.lang.Override
+  public boolean hasResult() {
+    return result_ != null;
+  }
+  /**
+   * <code>.Result result = 1;</code>
+   * @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_;
+  }
+  /**
+   * <code>.Result result = 1;</code>
+   */
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.server.gen.common.ResultOrBuilder getResultOrBuilder() {
+    return getResult();
+  }
+
+  public static final int VIDEO_FIELD_NUMBER = 2;
+  private java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto> video_;
+  /**
+   * <code>repeated .VideoProto video = 2;</code>
+   */
+  @java.lang.Override
+  public java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto> getVideoList() {
+    return video_;
+  }
+  /**
+   * <code>repeated .VideoProto video = 2;</code>
+   */
+  @java.lang.Override
+  public java.util.List<? extends com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder> 
+      getVideoOrBuilderList() {
+    return video_;
+  }
+  /**
+   * <code>repeated .VideoProto video = 2;</code>
+   */
+  @java.lang.Override
+  public int getVideoCount() {
+    return video_.size();
+  }
+  /**
+   * <code>repeated .VideoProto video = 2;</code>
+   */
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto getVideo(int index) {
+    return video_.get(index);
+  }
+  /**
+   * <code>repeated .VideoProto video = 2;</code>
+   */
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder getVideoOrBuilder(
+      int index) {
+    return video_.get(index);
+  }
+
+  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 {
+    if (result_ != null) {
+      output.writeMessage(1, getResult());
+    }
+    for (int i = 0; i < video_.size(); i++) {
+      output.writeMessage(2, video_.get(i));
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (result_ != null) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(1, getResult());
+    }
+    for (int i = 0; i < video_.size(); i++) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeMessageSize(2, video_.get(i));
+    }
+    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.server.gen.recommend.RecommendResponse)) {
+      return super.equals(obj);
+    }
+    com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse other = (com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse) obj;
+
+    if (hasResult() != other.hasResult()) return false;
+    if (hasResult()) {
+      if (!getResult()
+          .equals(other.getResult())) return false;
+    }
+    if (!getVideoList()
+        .equals(other.getVideoList())) return false;
+    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();
+    if (hasResult()) {
+      hash = (37 * hash) + RESULT_FIELD_NUMBER;
+      hash = (53 * hash) + getResult().hashCode();
+    }
+    if (getVideoCount() > 0) {
+      hash = (37 * hash) + VIDEO_FIELD_NUMBER;
+      hash = (53 * hash) + getVideoList().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse 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.server.gen.recommend.RecommendResponse 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;
+  }
+  /**
+   * <pre>
+   * https://sls.console.aliyun.com/lognext/project/rov-server/logsearch/info
+   * </pre>
+   *
+   * Protobuf type {@code RecommendResponse}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:RecommendResponse)
+      com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponseOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_RecommendResponse_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_RecommendResponse_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.class, com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.Builder.class);
+    }
+
+    // Construct using com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.newBuilder()
+    private Builder() {
+      maybeForceBuilderInitialization();
+    }
+
+    private Builder(
+        com.google.protobuf.GeneratedMessageV3.BuilderParent parent) {
+      super(parent);
+      maybeForceBuilderInitialization();
+    }
+    private void maybeForceBuilderInitialization() {
+      if (com.google.protobuf.GeneratedMessageV3
+              .alwaysUseFieldBuilders) {
+        getVideoFieldBuilder();
+      }
+    }
+    @java.lang.Override
+    public Builder clear() {
+      super.clear();
+      if (resultBuilder_ == null) {
+        result_ = null;
+      } else {
+        result_ = null;
+        resultBuilder_ = null;
+      }
+      if (videoBuilder_ == null) {
+        video_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+      } else {
+        videoBuilder_.clear();
+      }
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_RecommendResponse_descriptor;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse build() {
+      com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse buildPartial() {
+      com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse result = new com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse(this);
+      int from_bitField0_ = bitField0_;
+      if (resultBuilder_ == null) {
+        result.result_ = result_;
+      } else {
+        result.result_ = resultBuilder_.build();
+      }
+      if (videoBuilder_ == null) {
+        if (((bitField0_ & 0x00000001) != 0)) {
+          video_ = java.util.Collections.unmodifiableList(video_);
+          bitField0_ = (bitField0_ & ~0x00000001);
+        }
+        result.video_ = video_;
+      } else {
+        result.video_ = videoBuilder_.build();
+      }
+      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.server.gen.recommend.RecommendResponse) {
+        return mergeFrom((com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse other) {
+      if (other == com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.getDefaultInstance()) return this;
+      if (other.hasResult()) {
+        mergeResult(other.getResult());
+      }
+      if (videoBuilder_ == null) {
+        if (!other.video_.isEmpty()) {
+          if (video_.isEmpty()) {
+            video_ = other.video_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+          } else {
+            ensureVideoIsMutable();
+            video_.addAll(other.video_);
+          }
+          onChanged();
+        }
+      } else {
+        if (!other.video_.isEmpty()) {
+          if (videoBuilder_.isEmpty()) {
+            videoBuilder_.dispose();
+            videoBuilder_ = null;
+            video_ = other.video_;
+            bitField0_ = (bitField0_ & ~0x00000001);
+            videoBuilder_ = 
+              com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ?
+                 getVideoFieldBuilder() : null;
+          } else {
+            videoBuilder_.addAllMessages(other.video_);
+          }
+        }
+      }
+      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.server.gen.recommend.RecommendResponse parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+    private int bitField0_;
+
+    private com.tzld.piaoquan.recommend.server.gen.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_;
+    /**
+     * <code>.Result result = 1;</code>
+     * @return Whether the result field is set.
+     */
+    public boolean hasResult() {
+      return resultBuilder_ != null || result_ != null;
+    }
+    /**
+     * <code>.Result result = 1;</code>
+     * @return The result.
+     */
+    public com.tzld.piaoquan.recommend.server.gen.common.Result getResult() {
+      if (resultBuilder_ == null) {
+        return result_ == null ? com.tzld.piaoquan.recommend.server.gen.common.Result.getDefaultInstance() : result_;
+      } else {
+        return resultBuilder_.getMessage();
+      }
+    }
+    /**
+     * <code>.Result result = 1;</code>
+     */
+    public Builder setResult(com.tzld.piaoquan.recommend.server.gen.common.Result value) {
+      if (resultBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        result_ = value;
+        onChanged();
+      } else {
+        resultBuilder_.setMessage(value);
+      }
+
+      return this;
+    }
+    /**
+     * <code>.Result result = 1;</code>
+     */
+    public Builder setResult(
+        com.tzld.piaoquan.recommend.server.gen.common.Result.Builder builderForValue) {
+      if (resultBuilder_ == null) {
+        result_ = builderForValue.build();
+        onChanged();
+      } else {
+        resultBuilder_.setMessage(builderForValue.build());
+      }
+
+      return this;
+    }
+    /**
+     * <code>.Result result = 1;</code>
+     */
+    public Builder mergeResult(com.tzld.piaoquan.recommend.server.gen.common.Result value) {
+      if (resultBuilder_ == null) {
+        if (result_ != null) {
+          result_ =
+            com.tzld.piaoquan.recommend.server.gen.common.Result.newBuilder(result_).mergeFrom(value).buildPartial();
+        } else {
+          result_ = value;
+        }
+        onChanged();
+      } else {
+        resultBuilder_.mergeFrom(value);
+      }
+
+      return this;
+    }
+    /**
+     * <code>.Result result = 1;</code>
+     */
+    public Builder clearResult() {
+      if (resultBuilder_ == null) {
+        result_ = null;
+        onChanged();
+      } else {
+        result_ = null;
+        resultBuilder_ = null;
+      }
+
+      return this;
+    }
+    /**
+     * <code>.Result result = 1;</code>
+     */
+    public com.tzld.piaoquan.recommend.server.gen.common.Result.Builder getResultBuilder() {
+      
+      onChanged();
+      return getResultFieldBuilder().getBuilder();
+    }
+    /**
+     * <code>.Result result = 1;</code>
+     */
+    public com.tzld.piaoquan.recommend.server.gen.common.ResultOrBuilder getResultOrBuilder() {
+      if (resultBuilder_ != null) {
+        return resultBuilder_.getMessageOrBuilder();
+      } else {
+        return result_ == null ?
+            com.tzld.piaoquan.recommend.server.gen.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> 
+        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>(
+                getResult(),
+                getParentForChildren(),
+                isClean());
+        result_ = null;
+      }
+      return resultBuilder_;
+    }
+
+    private java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto> video_ =
+      java.util.Collections.emptyList();
+    private void ensureVideoIsMutable() {
+      if (!((bitField0_ & 0x00000001) != 0)) {
+        video_ = new java.util.ArrayList<com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto>(video_);
+        bitField0_ |= 0x00000001;
+       }
+    }
+
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+        com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder> videoBuilder_;
+
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto> getVideoList() {
+      if (videoBuilder_ == null) {
+        return java.util.Collections.unmodifiableList(video_);
+      } else {
+        return videoBuilder_.getMessageList();
+      }
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public int getVideoCount() {
+      if (videoBuilder_ == null) {
+        return video_.size();
+      } else {
+        return videoBuilder_.getCount();
+      }
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto getVideo(int index) {
+      if (videoBuilder_ == null) {
+        return video_.get(index);
+      } else {
+        return videoBuilder_.getMessage(index);
+      }
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public Builder setVideo(
+        int index, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto value) {
+      if (videoBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureVideoIsMutable();
+        video_.set(index, value);
+        onChanged();
+      } else {
+        videoBuilder_.setMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public Builder setVideo(
+        int index, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder builderForValue) {
+      if (videoBuilder_ == null) {
+        ensureVideoIsMutable();
+        video_.set(index, builderForValue.build());
+        onChanged();
+      } else {
+        videoBuilder_.setMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public Builder addVideo(com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto value) {
+      if (videoBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureVideoIsMutable();
+        video_.add(value);
+        onChanged();
+      } else {
+        videoBuilder_.addMessage(value);
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public Builder addVideo(
+        int index, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto value) {
+      if (videoBuilder_ == null) {
+        if (value == null) {
+          throw new NullPointerException();
+        }
+        ensureVideoIsMutable();
+        video_.add(index, value);
+        onChanged();
+      } else {
+        videoBuilder_.addMessage(index, value);
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public Builder addVideo(
+        com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder builderForValue) {
+      if (videoBuilder_ == null) {
+        ensureVideoIsMutable();
+        video_.add(builderForValue.build());
+        onChanged();
+      } else {
+        videoBuilder_.addMessage(builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public Builder addVideo(
+        int index, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder builderForValue) {
+      if (videoBuilder_ == null) {
+        ensureVideoIsMutable();
+        video_.add(index, builderForValue.build());
+        onChanged();
+      } else {
+        videoBuilder_.addMessage(index, builderForValue.build());
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public Builder addAllVideo(
+        java.lang.Iterable<? extends com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto> values) {
+      if (videoBuilder_ == null) {
+        ensureVideoIsMutable();
+        com.google.protobuf.AbstractMessageLite.Builder.addAll(
+            values, video_);
+        onChanged();
+      } else {
+        videoBuilder_.addAllMessages(values);
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public Builder clearVideo() {
+      if (videoBuilder_ == null) {
+        video_ = java.util.Collections.emptyList();
+        bitField0_ = (bitField0_ & ~0x00000001);
+        onChanged();
+      } else {
+        videoBuilder_.clear();
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public Builder removeVideo(int index) {
+      if (videoBuilder_ == null) {
+        ensureVideoIsMutable();
+        video_.remove(index);
+        onChanged();
+      } else {
+        videoBuilder_.remove(index);
+      }
+      return this;
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder getVideoBuilder(
+        int index) {
+      return getVideoFieldBuilder().getBuilder(index);
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder getVideoOrBuilder(
+        int index) {
+      if (videoBuilder_ == null) {
+        return video_.get(index);  } else {
+        return videoBuilder_.getMessageOrBuilder(index);
+      }
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public java.util.List<? extends com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder> 
+         getVideoOrBuilderList() {
+      if (videoBuilder_ != null) {
+        return videoBuilder_.getMessageOrBuilderList();
+      } else {
+        return java.util.Collections.unmodifiableList(video_);
+      }
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder addVideoBuilder() {
+      return getVideoFieldBuilder().addBuilder(
+          com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.getDefaultInstance());
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder addVideoBuilder(
+        int index) {
+      return getVideoFieldBuilder().addBuilder(
+          index, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.getDefaultInstance());
+    }
+    /**
+     * <code>repeated .VideoProto video = 2;</code>
+     */
+    public java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder> 
+         getVideoBuilderList() {
+      return getVideoFieldBuilder().getBuilderList();
+    }
+    private com.google.protobuf.RepeatedFieldBuilderV3<
+        com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder> 
+        getVideoFieldBuilder() {
+      if (videoBuilder_ == null) {
+        videoBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3<
+            com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder>(
+                video_,
+                ((bitField0_ & 0x00000001) != 0),
+                getParentForChildren(),
+                isClean());
+        video_ = null;
+      }
+      return videoBuilder_;
+    }
+    @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:RecommendResponse)
+  }
+
+  // @@protoc_insertion_point(class_scope:RecommendResponse)
+  private static final com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse();
+  }
+
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<RecommendResponse>
+      PARSER = new com.google.protobuf.AbstractParser<RecommendResponse>() {
+    @java.lang.Override
+    public RecommendResponse parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return new RecommendResponse(input, extensionRegistry);
+    }
+  };
+
+  public static com.google.protobuf.Parser<RecommendResponse> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<RecommendResponse> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+

+ 48 - 0
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/RecommendResponseOrBuilder.java

@@ -0,0 +1,48 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/server/recommend.proto
+
+package com.tzld.piaoquan.recommend.server.gen.recommend;
+
+public interface RecommendResponseOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:RecommendResponse)
+    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();
+
+  /**
+   * <code>repeated .VideoProto video = 2;</code>
+   */
+  java.util.List<com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto> 
+      getVideoList();
+  /**
+   * <code>repeated .VideoProto video = 2;</code>
+   */
+  com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto getVideo(int index);
+  /**
+   * <code>repeated .VideoProto video = 2;</code>
+   */
+  int getVideoCount();
+  /**
+   * <code>repeated .VideoProto video = 2;</code>
+   */
+  java.util.List<? extends com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder> 
+      getVideoOrBuilderList();
+  /**
+   * <code>repeated .VideoProto video = 2;</code>
+   */
+  com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder getVideoOrBuilder(
+      int index);
+}

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

@@ -0,0 +1,316 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/server/recommend.proto
+
+package com.tzld.piaoquan.recommend.server.gen.recommend;
+
+/**
+ * Protobuf service {@code RecommendService}
+ */
+public  abstract class RecommendService
+    implements com.google.protobuf.Service {
+  protected RecommendService() {}
+
+  public interface Interface {
+    /**
+     * <pre>
+     * 首页推荐和tab分类 /applet/video/homepage/recommend
+     * </pre>
+     *
+     * <code>rpc HomepageRecommend(.RecommendRequest) returns (.RecommendResponse);</code>
+     */
+    public abstract void homepageRecommend(
+        com.google.protobuf.RpcController controller,
+        com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request,
+        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> done);
+
+    /**
+     * <code>rpc RelevantRecommend(.RecommendRequest) returns (.RecommendResponse);</code>
+     */
+    public abstract void relevantRecommend(
+        com.google.protobuf.RpcController controller,
+        com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request,
+        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> done);
+
+  }
+
+  public static com.google.protobuf.Service newReflectiveService(
+      final Interface impl) {
+    return new RecommendService() {
+      @java.lang.Override
+      public  void homepageRecommend(
+          com.google.protobuf.RpcController controller,
+          com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request,
+          com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> done) {
+        impl.homepageRecommend(controller, request, done);
+      }
+
+      @java.lang.Override
+      public  void relevantRecommend(
+          com.google.protobuf.RpcController controller,
+          com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request,
+          com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> done) {
+        impl.relevantRecommend(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.homepageRecommend(controller, (com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest)request);
+          case 1:
+            return impl.relevantRecommend(controller, (com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest)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.recommend.RecommendRequest.getDefaultInstance();
+          case 1:
+            return com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest.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.recommend.RecommendResponse.getDefaultInstance();
+          case 1:
+            return com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.getDefaultInstance();
+          default:
+            throw new java.lang.AssertionError("Can't get here.");
+        }
+      }
+
+    };
+  }
+
+  /**
+   * <pre>
+   * 首页推荐和tab分类 /applet/video/homepage/recommend
+   * </pre>
+   *
+   * <code>rpc HomepageRecommend(.RecommendRequest) returns (.RecommendResponse);</code>
+   */
+  public abstract void homepageRecommend(
+      com.google.protobuf.RpcController controller,
+      com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request,
+      com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> done);
+
+  /**
+   * <code>rpc RelevantRecommend(.RecommendRequest) returns (.RecommendResponse);</code>
+   */
+  public abstract void relevantRecommend(
+      com.google.protobuf.RpcController controller,
+      com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request,
+      com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> done);
+
+  public static final
+      com.google.protobuf.Descriptors.ServiceDescriptor
+      getDescriptor() {
+    return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.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.homepageRecommend(controller, (com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest)request,
+          com.google.protobuf.RpcUtil.<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse>specializeCallback(
+            done));
+        return;
+      case 1:
+        this.relevantRecommend(controller, (com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest)request,
+          com.google.protobuf.RpcUtil.<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse>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.recommend.RecommendRequest.getDefaultInstance();
+      case 1:
+        return com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest.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.recommend.RecommendResponse.getDefaultInstance();
+      case 1:
+        return com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.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.recommend.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 homepageRecommend(
+        com.google.protobuf.RpcController controller,
+        com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request,
+        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> done) {
+      channel.callMethod(
+        getDescriptor().getMethods().get(0),
+        controller,
+        request,
+        com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.getDefaultInstance(),
+        com.google.protobuf.RpcUtil.generalizeCallback(
+          done,
+          com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.class,
+          com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.getDefaultInstance()));
+    }
+
+    public  void relevantRecommend(
+        com.google.protobuf.RpcController controller,
+        com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request,
+        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> done) {
+      channel.callMethod(
+        getDescriptor().getMethods().get(1),
+        controller,
+        request,
+        com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.getDefaultInstance(),
+        com.google.protobuf.RpcUtil.generalizeCallback(
+          done,
+          com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.class,
+          com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.getDefaultInstance()));
+    }
+  }
+
+  public static BlockingInterface newBlockingStub(
+      com.google.protobuf.BlockingRpcChannel channel) {
+    return new BlockingStub(channel);
+  }
+
+  public interface BlockingInterface {
+    public com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse homepageRecommend(
+        com.google.protobuf.RpcController controller,
+        com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request)
+        throws com.google.protobuf.ServiceException;
+
+    public com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse relevantRecommend(
+        com.google.protobuf.RpcController controller,
+        com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest 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.recommend.RecommendResponse homepageRecommend(
+        com.google.protobuf.RpcController controller,
+        com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request)
+        throws com.google.protobuf.ServiceException {
+      return (com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse) channel.callBlockingMethod(
+        getDescriptor().getMethods().get(0),
+        controller,
+        request,
+        com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.getDefaultInstance());
+    }
+
+
+    public com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse relevantRecommend(
+        com.google.protobuf.RpcController controller,
+        com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request)
+        throws com.google.protobuf.ServiceException {
+      return (com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse) channel.callBlockingMethod(
+        getDescriptor().getMethods().get(1),
+        controller,
+        request,
+        com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.getDefaultInstance());
+    }
+
+  }
+
+  // @@protoc_insertion_point(class_scope:RecommendService)
+}
+

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

@@ -0,0 +1,374 @@
+package com.tzld.piaoquan.recommend.server.gen.recommend;
+
+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;
+
+/**
+ */
+@javax.annotation.Generated(
+    value = "by gRPC proto compiler (version 1.34.1)",
+    comments = "Source: com/tzld/piaoquan/recommend/server/recommend.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.recommend.RecommendRequest,
+      com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> getHomepageRecommendMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "HomepageRecommend",
+      requestType = com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest.class,
+      responseType = com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest,
+      com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> getHomepageRecommendMethod() {
+    io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest, com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> getHomepageRecommendMethod;
+    if ((getHomepageRecommendMethod = RecommendServiceGrpc.getHomepageRecommendMethod) == null) {
+      synchronized (RecommendServiceGrpc.class) {
+        if ((getHomepageRecommendMethod = RecommendServiceGrpc.getHomepageRecommendMethod) == null) {
+          RecommendServiceGrpc.getHomepageRecommendMethod = getHomepageRecommendMethod =
+              io.grpc.MethodDescriptor.<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest, com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "HomepageRecommend"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.getDefaultInstance()))
+              .setSchemaDescriptor(new RecommendServiceMethodDescriptorSupplier("HomepageRecommend"))
+              .build();
+        }
+      }
+    }
+    return getHomepageRecommendMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest,
+      com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> getRelevantRecommendMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "RelevantRecommend",
+      requestType = com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest.class,
+      responseType = com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest,
+      com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> getRelevantRecommendMethod() {
+    io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest, com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> getRelevantRecommendMethod;
+    if ((getRelevantRecommendMethod = RecommendServiceGrpc.getRelevantRecommendMethod) == null) {
+      synchronized (RecommendServiceGrpc.class) {
+        if ((getRelevantRecommendMethod = RecommendServiceGrpc.getRelevantRecommendMethod) == null) {
+          RecommendServiceGrpc.getRelevantRecommendMethod = getRelevantRecommendMethod =
+              io.grpc.MethodDescriptor.<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest, com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "RelevantRecommend"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse.getDefaultInstance()))
+              .setSchemaDescriptor(new RecommendServiceMethodDescriptorSupplier("RelevantRecommend"))
+              .build();
+        }
+      }
+    }
+    return getRelevantRecommendMethod;
+  }
+
+  /**
+   * 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 {
+
+    /**
+     * <pre>
+     * 首页推荐和tab分类 /applet/video/homepage/recommend
+     * </pre>
+     */
+    public void homepageRecommend(com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request,
+        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> responseObserver) {
+      asyncUnimplementedUnaryCall(getHomepageRecommendMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void relevantRecommend(com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request,
+        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> responseObserver) {
+      asyncUnimplementedUnaryCall(getRelevantRecommendMethod(), responseObserver);
+    }
+
+    @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
+      return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
+          .addMethod(
+            getHomepageRecommendMethod(),
+            asyncUnaryCall(
+              new MethodHandlers<
+                com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest,
+                com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse>(
+                  this, METHODID_HOMEPAGE_RECOMMEND)))
+          .addMethod(
+            getRelevantRecommendMethod(),
+            asyncUnaryCall(
+              new MethodHandlers<
+                com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest,
+                com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse>(
+                  this, METHODID_RELEVANT_RECOMMEND)))
+          .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);
+    }
+
+    /**
+     * <pre>
+     * 首页推荐和tab分类 /applet/video/homepage/recommend
+     * </pre>
+     */
+    public void homepageRecommend(com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request,
+        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(getHomepageRecommendMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void relevantRecommend(com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request,
+        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(getRelevantRecommendMethod(), 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);
+    }
+
+    /**
+     * <pre>
+     * 首页推荐和tab分类 /applet/video/homepage/recommend
+     * </pre>
+     */
+    public com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse homepageRecommend(com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request) {
+      return blockingUnaryCall(
+          getChannel(), getHomepageRecommendMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse relevantRecommend(com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request) {
+      return blockingUnaryCall(
+          getChannel(), getRelevantRecommendMethod(), 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);
+    }
+
+    /**
+     * <pre>
+     * 首页推荐和tab分类 /applet/video/homepage/recommend
+     * </pre>
+     */
+    public com.google.common.util.concurrent.ListenableFuture<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> homepageRecommend(
+        com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request) {
+      return futureUnaryCall(
+          getChannel().newCall(getHomepageRecommendMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse> relevantRecommend(
+        com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest request) {
+      return futureUnaryCall(
+          getChannel().newCall(getRelevantRecommendMethod(), getCallOptions()), request);
+    }
+  }
+
+  private static final int METHODID_HOMEPAGE_RECOMMEND = 0;
+  private static final int METHODID_RELEVANT_RECOMMEND = 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_HOMEPAGE_RECOMMEND:
+          serviceImpl.homepageRecommend((com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest) request,
+              (io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse>) responseObserver);
+          break;
+        case METHODID_RELEVANT_RECOMMEND:
+          serviceImpl.relevantRecommend((com.tzld.piaoquan.recommend.server.gen.recommend.RecommendRequest) request,
+              (io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.server.gen.recommend.RecommendResponse>) 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.recommend.Recommend.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(getHomepageRecommendMethod())
+              .addMethod(getRelevantRecommendMethod())
+              .build();
+        }
+      }
+    }
+    return result;
+  }
+}

+ 1232 - 0
recommend-server-client/src/main/java/com/tzld/piaoquan/recommend/server/gen/recommend/VideoProto.java

@@ -0,0 +1,1232 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/server/recommend.proto
+
+package com.tzld.piaoquan.recommend.server.gen.recommend;
+
+/**
+ * <pre>
+ * RecommendRovVideoDTO
+ * </pre>
+ *
+ * Protobuf type {@code VideoProto}
+ */
+public final class VideoProto extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:VideoProto)
+    VideoProtoOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use VideoProto.newBuilder() to construct.
+  private VideoProto(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private VideoProto() {
+    pushFrom_ = "";
+    abCode_ = "";
+    flowPool_ = "";
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new VideoProto();
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet
+  getUnknownFields() {
+    return this.unknownFields;
+  }
+  private VideoProto(
+      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;
+          case 8: {
+
+            videoId_ = input.readInt64();
+            break;
+          }
+          case 17: {
+
+            rovScore_ = input.readDouble();
+            break;
+          }
+          case 26: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            pushFrom_ = s;
+            break;
+          }
+          case 34: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            abCode_ = s;
+            break;
+          }
+          case 41: {
+
+            sortScore_ = input.readDouble();
+            break;
+          }
+          case 48: {
+
+            position_ = input.readInt32();
+            break;
+          }
+          case 58: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            flowPool_ = s;
+            break;
+          }
+          case 64: {
+
+            isInFlowPool_ = input.readInt32();
+            break;
+          }
+          case 73: {
+
+            rand_ = input.readDouble();
+            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.server.gen.recommend.Recommend.internal_static_VideoProto_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_VideoProto_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.class, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder.class);
+  }
+
+  public static final int VIDEO_ID_FIELD_NUMBER = 1;
+  private long videoId_;
+  /**
+   * <code>int64 video_id = 1;</code>
+   * @return The videoId.
+   */
+  @java.lang.Override
+  public long getVideoId() {
+    return videoId_;
+  }
+
+  public static final int ROV_SCORE_FIELD_NUMBER = 2;
+  private double rovScore_;
+  /**
+   * <code>double rov_score = 2;</code>
+   * @return The rovScore.
+   */
+  @java.lang.Override
+  public double getRovScore() {
+    return rovScore_;
+  }
+
+  public static final int PUSH_FROM_FIELD_NUMBER = 3;
+  private volatile java.lang.Object pushFrom_;
+  /**
+   * <code>string push_from = 3;</code>
+   * @return The pushFrom.
+   */
+  @java.lang.Override
+  public java.lang.String getPushFrom() {
+    java.lang.Object ref = pushFrom_;
+    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();
+      pushFrom_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string push_from = 3;</code>
+   * @return The bytes for pushFrom.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getPushFromBytes() {
+    java.lang.Object ref = pushFrom_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      pushFrom_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int AB_CODE_FIELD_NUMBER = 4;
+  private volatile java.lang.Object abCode_;
+  /**
+   * <code>string ab_code = 4;</code>
+   * @return The abCode.
+   */
+  @java.lang.Override
+  public java.lang.String getAbCode() {
+    java.lang.Object ref = abCode_;
+    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();
+      abCode_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string ab_code = 4;</code>
+   * @return The bytes for abCode.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getAbCodeBytes() {
+    java.lang.Object ref = abCode_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      abCode_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int SORT_SCORE_FIELD_NUMBER = 5;
+  private double sortScore_;
+  /**
+   * <code>double sort_score = 5;</code>
+   * @return The sortScore.
+   */
+  @java.lang.Override
+  public double getSortScore() {
+    return sortScore_;
+  }
+
+  public static final int POSITION_FIELD_NUMBER = 6;
+  private int position_;
+  /**
+   * <code>int32 position = 6;</code>
+   * @return The position.
+   */
+  @java.lang.Override
+  public int getPosition() {
+    return position_;
+  }
+
+  public static final int FLOW_POOL_FIELD_NUMBER = 7;
+  private volatile java.lang.Object flowPool_;
+  /**
+   * <code>string flow_pool = 7;</code>
+   * @return The flowPool.
+   */
+  @java.lang.Override
+  public java.lang.String getFlowPool() {
+    java.lang.Object ref = flowPool_;
+    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();
+      flowPool_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string flow_pool = 7;</code>
+   * @return The bytes for flowPool.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getFlowPoolBytes() {
+    java.lang.Object ref = flowPool_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      flowPool_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int IS_IN_FLOW_POOL_FIELD_NUMBER = 8;
+  private int isInFlowPool_;
+  /**
+   * <code>int32 is_in_flow_pool = 8;</code>
+   * @return The isInFlowPool.
+   */
+  @java.lang.Override
+  public int getIsInFlowPool() {
+    return isInFlowPool_;
+  }
+
+  public static final int RAND_FIELD_NUMBER = 9;
+  private double rand_;
+  /**
+   * <code>double rand = 9;</code>
+   * @return The rand.
+   */
+  @java.lang.Override
+  public double getRand() {
+    return rand_;
+  }
+
+  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 {
+    if (videoId_ != 0L) {
+      output.writeInt64(1, videoId_);
+    }
+    if (rovScore_ != 0D) {
+      output.writeDouble(2, rovScore_);
+    }
+    if (!getPushFromBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 3, pushFrom_);
+    }
+    if (!getAbCodeBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 4, abCode_);
+    }
+    if (sortScore_ != 0D) {
+      output.writeDouble(5, sortScore_);
+    }
+    if (position_ != 0) {
+      output.writeInt32(6, position_);
+    }
+    if (!getFlowPoolBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 7, flowPool_);
+    }
+    if (isInFlowPool_ != 0) {
+      output.writeInt32(8, isInFlowPool_);
+    }
+    if (rand_ != 0D) {
+      output.writeDouble(9, rand_);
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (videoId_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(1, videoId_);
+    }
+    if (rovScore_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(2, rovScore_);
+    }
+    if (!getPushFromBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, pushFrom_);
+    }
+    if (!getAbCodeBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, abCode_);
+    }
+    if (sortScore_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(5, sortScore_);
+    }
+    if (position_ != 0) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt32Size(6, position_);
+    }
+    if (!getFlowPoolBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(7, flowPool_);
+    }
+    if (isInFlowPool_ != 0) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt32Size(8, isInFlowPool_);
+    }
+    if (rand_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(9, rand_);
+    }
+    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.server.gen.recommend.VideoProto)) {
+      return super.equals(obj);
+    }
+    com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto other = (com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto) obj;
+
+    if (getVideoId()
+        != other.getVideoId()) return false;
+    if (java.lang.Double.doubleToLongBits(getRovScore())
+        != java.lang.Double.doubleToLongBits(
+            other.getRovScore())) return false;
+    if (!getPushFrom()
+        .equals(other.getPushFrom())) return false;
+    if (!getAbCode()
+        .equals(other.getAbCode())) return false;
+    if (java.lang.Double.doubleToLongBits(getSortScore())
+        != java.lang.Double.doubleToLongBits(
+            other.getSortScore())) return false;
+    if (getPosition()
+        != other.getPosition()) return false;
+    if (!getFlowPool()
+        .equals(other.getFlowPool())) return false;
+    if (getIsInFlowPool()
+        != other.getIsInFlowPool()) return false;
+    if (java.lang.Double.doubleToLongBits(getRand())
+        != java.lang.Double.doubleToLongBits(
+            other.getRand())) return false;
+    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 = (37 * hash) + VIDEO_ID_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getVideoId());
+    hash = (37 * hash) + ROV_SCORE_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getRovScore()));
+    hash = (37 * hash) + PUSH_FROM_FIELD_NUMBER;
+    hash = (53 * hash) + getPushFrom().hashCode();
+    hash = (37 * hash) + AB_CODE_FIELD_NUMBER;
+    hash = (53 * hash) + getAbCode().hashCode();
+    hash = (37 * hash) + SORT_SCORE_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getSortScore()));
+    hash = (37 * hash) + POSITION_FIELD_NUMBER;
+    hash = (53 * hash) + getPosition();
+    hash = (37 * hash) + FLOW_POOL_FIELD_NUMBER;
+    hash = (53 * hash) + getFlowPool().hashCode();
+    hash = (37 * hash) + IS_IN_FLOW_POOL_FIELD_NUMBER;
+    hash = (53 * hash) + getIsInFlowPool();
+    hash = (37 * hash) + RAND_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getRand()));
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto 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.server.gen.recommend.VideoProto 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;
+  }
+  /**
+   * <pre>
+   * RecommendRovVideoDTO
+   * </pre>
+   *
+   * Protobuf type {@code VideoProto}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:VideoProto)
+      com.tzld.piaoquan.recommend.server.gen.recommend.VideoProtoOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_VideoProto_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_VideoProto_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.class, com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.Builder.class);
+    }
+
+    // Construct using com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.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();
+      videoId_ = 0L;
+
+      rovScore_ = 0D;
+
+      pushFrom_ = "";
+
+      abCode_ = "";
+
+      sortScore_ = 0D;
+
+      position_ = 0;
+
+      flowPool_ = "";
+
+      isInFlowPool_ = 0;
+
+      rand_ = 0D;
+
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.Recommend.internal_static_VideoProto_descriptor;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto build() {
+      com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto buildPartial() {
+      com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto result = new com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto(this);
+      result.videoId_ = videoId_;
+      result.rovScore_ = rovScore_;
+      result.pushFrom_ = pushFrom_;
+      result.abCode_ = abCode_;
+      result.sortScore_ = sortScore_;
+      result.position_ = position_;
+      result.flowPool_ = flowPool_;
+      result.isInFlowPool_ = isInFlowPool_;
+      result.rand_ = rand_;
+      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.server.gen.recommend.VideoProto) {
+        return mergeFrom((com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto other) {
+      if (other == com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto.getDefaultInstance()) return this;
+      if (other.getVideoId() != 0L) {
+        setVideoId(other.getVideoId());
+      }
+      if (other.getRovScore() != 0D) {
+        setRovScore(other.getRovScore());
+      }
+      if (!other.getPushFrom().isEmpty()) {
+        pushFrom_ = other.pushFrom_;
+        onChanged();
+      }
+      if (!other.getAbCode().isEmpty()) {
+        abCode_ = other.abCode_;
+        onChanged();
+      }
+      if (other.getSortScore() != 0D) {
+        setSortScore(other.getSortScore());
+      }
+      if (other.getPosition() != 0) {
+        setPosition(other.getPosition());
+      }
+      if (!other.getFlowPool().isEmpty()) {
+        flowPool_ = other.flowPool_;
+        onChanged();
+      }
+      if (other.getIsInFlowPool() != 0) {
+        setIsInFlowPool(other.getIsInFlowPool());
+      }
+      if (other.getRand() != 0D) {
+        setRand(other.getRand());
+      }
+      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.server.gen.recommend.VideoProto parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private long videoId_ ;
+    /**
+     * <code>int64 video_id = 1;</code>
+     * @return The videoId.
+     */
+    @java.lang.Override
+    public long getVideoId() {
+      return videoId_;
+    }
+    /**
+     * <code>int64 video_id = 1;</code>
+     * @param value The videoId to set.
+     * @return This builder for chaining.
+     */
+    public Builder setVideoId(long value) {
+      
+      videoId_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 video_id = 1;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearVideoId() {
+      
+      videoId_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private double rovScore_ ;
+    /**
+     * <code>double rov_score = 2;</code>
+     * @return The rovScore.
+     */
+    @java.lang.Override
+    public double getRovScore() {
+      return rovScore_;
+    }
+    /**
+     * <code>double rov_score = 2;</code>
+     * @param value The rovScore to set.
+     * @return This builder for chaining.
+     */
+    public Builder setRovScore(double value) {
+      
+      rovScore_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double rov_score = 2;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearRovScore() {
+      
+      rovScore_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object pushFrom_ = "";
+    /**
+     * <code>string push_from = 3;</code>
+     * @return The pushFrom.
+     */
+    public java.lang.String getPushFrom() {
+      java.lang.Object ref = pushFrom_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        pushFrom_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string push_from = 3;</code>
+     * @return The bytes for pushFrom.
+     */
+    public com.google.protobuf.ByteString
+        getPushFromBytes() {
+      java.lang.Object ref = pushFrom_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        pushFrom_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string push_from = 3;</code>
+     * @param value The pushFrom to set.
+     * @return This builder for chaining.
+     */
+    public Builder setPushFrom(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      pushFrom_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string push_from = 3;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearPushFrom() {
+      
+      pushFrom_ = getDefaultInstance().getPushFrom();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string push_from = 3;</code>
+     * @param value The bytes for pushFrom to set.
+     * @return This builder for chaining.
+     */
+    public Builder setPushFromBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      pushFrom_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object abCode_ = "";
+    /**
+     * <code>string ab_code = 4;</code>
+     * @return The abCode.
+     */
+    public java.lang.String getAbCode() {
+      java.lang.Object ref = abCode_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        abCode_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string ab_code = 4;</code>
+     * @return The bytes for abCode.
+     */
+    public com.google.protobuf.ByteString
+        getAbCodeBytes() {
+      java.lang.Object ref = abCode_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        abCode_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string ab_code = 4;</code>
+     * @param value The abCode to set.
+     * @return This builder for chaining.
+     */
+    public Builder setAbCode(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      abCode_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string ab_code = 4;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearAbCode() {
+      
+      abCode_ = getDefaultInstance().getAbCode();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string ab_code = 4;</code>
+     * @param value The bytes for abCode to set.
+     * @return This builder for chaining.
+     */
+    public Builder setAbCodeBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      abCode_ = value;
+      onChanged();
+      return this;
+    }
+
+    private double sortScore_ ;
+    /**
+     * <code>double sort_score = 5;</code>
+     * @return The sortScore.
+     */
+    @java.lang.Override
+    public double getSortScore() {
+      return sortScore_;
+    }
+    /**
+     * <code>double sort_score = 5;</code>
+     * @param value The sortScore to set.
+     * @return This builder for chaining.
+     */
+    public Builder setSortScore(double value) {
+      
+      sortScore_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double sort_score = 5;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearSortScore() {
+      
+      sortScore_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private int position_ ;
+    /**
+     * <code>int32 position = 6;</code>
+     * @return The position.
+     */
+    @java.lang.Override
+    public int getPosition() {
+      return position_;
+    }
+    /**
+     * <code>int32 position = 6;</code>
+     * @param value The position to set.
+     * @return This builder for chaining.
+     */
+    public Builder setPosition(int value) {
+      
+      position_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int32 position = 6;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearPosition() {
+      
+      position_ = 0;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object flowPool_ = "";
+    /**
+     * <code>string flow_pool = 7;</code>
+     * @return The flowPool.
+     */
+    public java.lang.String getFlowPool() {
+      java.lang.Object ref = flowPool_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        flowPool_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string flow_pool = 7;</code>
+     * @return The bytes for flowPool.
+     */
+    public com.google.protobuf.ByteString
+        getFlowPoolBytes() {
+      java.lang.Object ref = flowPool_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        flowPool_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string flow_pool = 7;</code>
+     * @param value The flowPool to set.
+     * @return This builder for chaining.
+     */
+    public Builder setFlowPool(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      flowPool_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string flow_pool = 7;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearFlowPool() {
+      
+      flowPool_ = getDefaultInstance().getFlowPool();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string flow_pool = 7;</code>
+     * @param value The bytes for flowPool to set.
+     * @return This builder for chaining.
+     */
+    public Builder setFlowPoolBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      flowPool_ = value;
+      onChanged();
+      return this;
+    }
+
+    private int isInFlowPool_ ;
+    /**
+     * <code>int32 is_in_flow_pool = 8;</code>
+     * @return The isInFlowPool.
+     */
+    @java.lang.Override
+    public int getIsInFlowPool() {
+      return isInFlowPool_;
+    }
+    /**
+     * <code>int32 is_in_flow_pool = 8;</code>
+     * @param value The isInFlowPool to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIsInFlowPool(int value) {
+      
+      isInFlowPool_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int32 is_in_flow_pool = 8;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIsInFlowPool() {
+      
+      isInFlowPool_ = 0;
+      onChanged();
+      return this;
+    }
+
+    private double rand_ ;
+    /**
+     * <code>double rand = 9;</code>
+     * @return The rand.
+     */
+    @java.lang.Override
+    public double getRand() {
+      return rand_;
+    }
+    /**
+     * <code>double rand = 9;</code>
+     * @param value The rand to set.
+     * @return This builder for chaining.
+     */
+    public Builder setRand(double value) {
+      
+      rand_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double rand = 9;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearRand() {
+      
+      rand_ = 0D;
+      onChanged();
+      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:VideoProto)
+  }
+
+  // @@protoc_insertion_point(class_scope:VideoProto)
+  private static final com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto();
+  }
+
+  public static com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<VideoProto>
+      PARSER = new com.google.protobuf.AbstractParser<VideoProto>() {
+    @java.lang.Override
+    public VideoProto parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return new VideoProto(input, extensionRegistry);
+    }
+  };
+
+  public static com.google.protobuf.Parser<VideoProto> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<VideoProto> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.server.gen.recommend.VideoProto getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+

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

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

+ 1 - 10
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/Application.java

@@ -1,10 +1,8 @@
 package com.tzld.piaoquan.recommend.server;
 
 // import com.tzld.piaoquan.recommend.feature.client.FeatureClient;
+
 import com.tzld.piaoquan.recommend.feature.client.FeatureClient;
-import com.tzld.piaoquan.recommend.server.dataloader.ItemFeatureToRedisLoader;
-import com.tzld.piaoquan.recommend.server.dataloader.OfflineAdOutSamplesLoader;
-import com.tzld.piaoquan.recommend.server.dataloader.UserFeatureToRedisLoader;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@@ -29,13 +27,6 @@ import org.springframework.context.annotation.EnableAspectJAutoProxy;
 public class Application {
     public static void main(String[] args) {
         SpringApplication.run(Application.class, args);
-
-        // OfflineAdOutSamplesLoader.mutiplyParser("alg_recsys_video_info", "20231207", "20231207");
-
-//        UserFeatureToRedisLoader userFeatureToRedisLoader = new UserFeatureToRedisLoader();
-//        userFeatureToRedisLoader.loadFeatureToRedis("alg_recsys_user_info", "20231207");
-
-
     }
 
 

+ 2 - 2
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/dataloader/OfflineAdOutSamplesLoader.java

@@ -3,10 +3,10 @@ package com.tzld.piaoquan.recommend.server.dataloader;
 import com.aliyun.odps.tunnel.io.TunnelRecordReader;
 import com.google.common.collect.ListMultimap;
 import com.tzld.piaoquan.recommend.feature.domain.video.base.*;
-import com.tzld.piaoquan.recommend.server.gen.recommend.BaseFeature;
-import com.tzld.piaoquan.recommend.server.gen.recommend.FeatureGroup;
 import com.tzld.piaoquan.recommend.feature.domain.video.feature.VlogShareLRFeatureExtractor;
 import com.aliyun.odps.data.Record;
+import com.tzld.piaoquan.recommend.feature.model.sample.BaseFeature;
+import com.tzld.piaoquan.recommend.feature.model.sample.FeatureGroup;
 
 import java.io.IOException;
 import java.util.*;

+ 1 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/VlogShareLRScorer.java

@@ -3,7 +3,7 @@ package com.tzld.piaoquan.recommend.server.service.score;
 
 import com.tzld.piaoquan.recommend.feature.domain.video.base.*;
 import com.tzld.piaoquan.recommend.server.common.base.*;
-import com.tzld.piaoquan.recommend.feature.gen.recommend.*;
+import com.tzld.piaoquan.recommend.feature.model.sample.*;
 import com.tzld.piaoquan.recommend.feature.domain.video.feature.VlogShareLRFeatureExtractor;
 import com.tzld.piaoquan.recommend.server.service.score.model.LRModel;
 

+ 1 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/score/model/LRModel.java

@@ -1,7 +1,7 @@
 package com.tzld.piaoquan.recommend.server.service.score.model;
 
 
-import com.tzld.piaoquan.recommend.feature.gen.recommend.*;
+import com.tzld.piaoquan.recommend.feature.model.sample.*;
 import it.unimi.dsi.fastutil.longs.Long2FloatMap;
 import it.unimi.dsi.fastutil.longs.Long2FloatOpenHashMap;
 import org.slf4j.Logger;