Procházet zdrojové kódy

feature client install

丁云鹏 před 1 rokem
rodič
revize
de7d682577
11 změnil soubory, kde provedl 9672 přidání a 26 odebrání
  1. 122 26
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/Feature.java
  2. 142 0
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/FeatureService.java
  3. 148 0
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/FeatureServiceGrpc.java
  4. 614 0
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetUserFeatureInfoRequest.java
  5. 34 0
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetUserFeatureInfoRequestOrBuilder.java
  6. 3821 0
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetUserFeatureInfoResponse.java
  7. 325 0
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetUserFeatureInfoResponseOrBuilder.java
  8. 599 0
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetVideoFeatureInfoRequest.java
  9. 26 0
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetVideoFeatureInfoRequestOrBuilder.java
  10. 3532 0
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetVideoFeatureInfoResponse.java
  11. 309 0
      recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetVideoFeatureInfoResponseOrBuilder.java

+ 122 - 26
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/Feature.java

@@ -84,6 +84,26 @@ public final class Feature {
   static final 
     com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
       internal_static_AdItemFeatureProto_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_GetUserFeatureInfoRequest_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_GetUserFeatureInfoRequest_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_GetUserFeatureInfoResponse_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_GetUserFeatureInfoResponse_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_GetVideoFeatureInfoRequest_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_GetVideoFeatureInfoRequest_fieldAccessorTable;
+  static final com.google.protobuf.Descriptors.Descriptor
+    internal_static_GetVideoFeatureInfoResponse_descriptor;
+  static final 
+    com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internal_static_GetVideoFeatureInfoResponse_fieldAccessorTable;
   static final com.google.protobuf.Descriptors.Descriptor
     internal_static_GetAdItemFeatureRequest_descriptor;
   static final 
@@ -181,28 +201,80 @@ public final class Feature {
       "\022 \001(\0132\025.AdActionFeatureProto\022;\n\034advertis" +
       "er_7day_cnt_features\030\023 \001(\0132\025.AdActionFea" +
       "tureProto\022=\n\036advertiser_3month_cnt_featu" +
-      "res\030\024 \001(\0132\025.AdActionFeatureProto\"(\n\027GetA" +
-      "dItemFeatureRequest\022\r\n\005ad_id\030\001 \001(\t\"a\n\030Ge" +
-      "tAdItemFeatureResponse\022\027\n\006result\030\001 \001(\0132\007" +
-      ".Result\022,\n\017ad_item_feature\030\002 \001(\0132\023.AdIte" +
-      "mFeatureProto\"+\n\032GetAllAdItemFeatureRequ" +
-      "est\022\r\n\005ad_id\030\001 \003(\t\"d\n\033GetAllAdItemFeatur" +
-      "eResponse\022\027\n\006result\030\001 \001(\0132\007.Result\022,\n\017ad" +
-      "_item_feature\030\002 \003(\0132\023.AdItemFeatureProto" +
-      "2\314\003\n\016FeatureService\022G\n\020GetUserAdFeature\022" +
-      "\030.GetUserAdFeatureRequest\032\031.GetUserAdFea" +
-      "tureResponse\022G\n\020GetAdItemFeature\022\030.GetAd" +
-      "ItemFeatureRequest\032\031.GetAdItemFeatureRes" +
-      "ponse\022P\n\023GetAllAdItemFeature\022\033.GetAllAdI" +
-      "temFeatureRequest\032\034.GetAllAdItemFeatureR" +
-      "esponse\022A\n\016GetUserFeature\022\026.GetUserFeatu" +
-      "reRequest\032\027.GetUserFeatureResponse\022D\n\017Ge" +
-      "tVideoFeature\022\027.GetVideoFeatureRequest\032\030" +
-      ".GetVideoFeatureResponse\022M\n\022GetAllVideoF" +
-      "eature\022\032.GetAllVideoFeatureRequest\032\033.Get" +
-      "AllVideoFeatureResponseB8\n1com.tzld.piao" +
-      "quan.recommend.feature.model.featureP\001\210\001" +
-      "\001b\006proto3"
+      "res\030\024 \001(\0132\025.AdActionFeatureProto\")\n\031GetU" +
+      "serFeatureInfoRequest\022\014\n\004mids\030\001 \003(\t\"\362\006\n\032" +
+      "GetUserFeatureInfoResponse\022\024\n\014u1hourExpC" +
+      "nt\030\001 \001(\003\022\026\n\016u1hourClickCnt\030\002 \001(\003\022\026\n\016u1ho" +
+      "urShareCnt\030\003 \001(\003\022\027\n\017u1hourReturnCnt\030\004 \001(" +
+      "\003\022\021\n\tuCtr1hour\030\005 \001(\001\022\021\n\tuStr1hour\030\006 \001(\001\022" +
+      "\021\n\tuRov1hour\030\007 \001(\001\022\021\n\tuRos1hour\030\010 \001(\001\022\024\n" +
+      "\014uTodayExpCnt\030\t \001(\003\022\026\n\016uTodayClickCnt\030\n " +
+      "\001(\003\022\026\n\016uTodayShareCnt\030\013 \001(\003\022\027\n\017uTodayRet" +
+      "urnCnt\030\014 \001(\003\022\021\n\tuCtrToday\030\r \001(\001\022\021\n\tuStrT" +
+      "oday\030\016 \001(\001\022\021\n\tuRovToday\030\017 \001(\001\022\021\n\tuRosTod" +
+      "ay\030\020 \001(\001\022\023\n\013u1dayExpCnt\030\021 \001(\003\022\025\n\ru1dayCl" +
+      "ickCnt\030\022 \001(\003\022\025\n\ru1dayShareCnt\030\023 \001(\003\022\026\n\016u" +
+      "1dayReturnCnt\030\024 \001(\003\022\020\n\010uCtr1day\030\025 \001(\001\022\020\n" +
+      "\010uStr1day\030\026 \001(\001\022\020\n\010uRov1day\030\027 \001(\001\022\020\n\010uRo" +
+      "s1day\030\030 \001(\001\022\023\n\013u3dayExpCnt\030\031 \001(\003\022\025\n\ru3da" +
+      "yClickCnt\030\032 \001(\003\022\025\n\ru3dayShareCnt\030\033 \001(\003\022\026" +
+      "\n\016u3dayReturnCnt\030\034 \001(\003\022\020\n\010uCtr3day\030\035 \001(\001" +
+      "\022\020\n\010uStr3day\030\036 \001(\001\022\020\n\010uRov3day\030\037 \001(\001\022\020\n\010" +
+      "uRos3day\030  \001(\001\022\013\n\003mid\030! \001(\t\022\030\n\020machinein" +
+      "foBrand\030\" \001(\t\022\030\n\020machineinfoModel\030# \001(\t\022" +
+      "\031\n\021machineinfoSystem\030$ \001(\t\022\033\n\023machineinf" +
+      "oPlatform\030% \001(\t\022\016\n\006gender\030& \001(\t\022\017\n\007count" +
+      "ry\030\' \001(\t\022\020\n\010province\030( \001(\t\022\014\n\004city\030) \001(\t" +
+      "\".\n\032GetVideoFeatureInfoRequest\022\020\n\010videoI" +
+      "ds\030\001 \003(\003\"\300\007\n\033GetVideoFeatureInfoResponse" +
+      "\022\017\n\007videoId\030\001 \001(\003\022\026\n\016playCountTotal\030\002 \001(" +
+      "\003\022\021\n\ttotalTime\030\003 \001(\005\022\021\n\tgmtCreate\030\004 \001(\t\022" +
+      "\013\n\003uid\030\005 \001(\003\022\024\n\014i15minExpCnt\030\006 \001(\003\022\026\n\016i1" +
+      "5minClickCnt\030\007 \001(\003\022\026\n\016i15minShareCnt\030\010 \001" +
+      "(\003\022\027\n\017i15minReturnCnt\030\t \001(\003\022\021\n\tiCtr15min" +
+      "\030\n \001(\001\022\021\n\tiStr15min\030\013 \001(\001\022\021\n\tiRov15min\030\014" +
+      " \001(\001\022\021\n\tiRos15min\030\r \001(\001\022\024\n\014i1hourExpCnt\030" +
+      "\016 \001(\003\022\026\n\016i1hourClickCnt\030\017 \001(\003\022\026\n\016i1hourS" +
+      "hareCnt\030\020 \001(\003\022\027\n\017i1hourReturnCnt\030\021 \001(\003\022\021" +
+      "\n\tiCtr1hour\030\022 \001(\001\022\021\n\tiStr1hour\030\023 \001(\001\022\021\n\t" +
+      "iRov1hour\030\024 \001(\001\022\021\n\tiRos1hour\030\025 \001(\001\022\024\n\014iT" +
+      "odayExpCnt\030\026 \001(\003\022\026\n\016iTodayClickCnt\030\027 \001(\003" +
+      "\022\026\n\016iTodayShareCnt\030\030 \001(\003\022\027\n\017iTodayReturn" +
+      "Cnt\030\031 \001(\003\022\021\n\tiCtrToday\030\032 \001(\001\022\021\n\tiStrToda" +
+      "y\030\033 \001(\001\022\021\n\tiRovToday\030\034 \001(\001\022\021\n\tiRosToday\030" +
+      "\035 \001(\001\022\023\n\013i1dayExpCnt\030\036 \001(\003\022\025\n\ri1dayClick" +
+      "Cnt\030\037 \001(\003\022\025\n\ri1dayShareCnt\030  \001(\003\022\026\n\016i1da" +
+      "yReturnCnt\030! \001(\003\022\020\n\010iCtr1day\030\" \001(\001\022\020\n\010iS" +
+      "tr1day\030# \001(\001\022\020\n\010iRov1day\030$ \001(\001\022\020\n\010iRos1d" +
+      "ay\030% \001(\001\022\023\n\013i3dayExpCnt\030& \001(\003\022\025\n\ri3dayCl" +
+      "ickCnt\030\' \001(\003\022\025\n\ri3dayShareCnt\030( \001(\003\022\026\n\016i" +
+      "3dayReturnCnt\030) \001(\003\022\020\n\010iCtr3day\030* \001(\001\022\020\n" +
+      "\010iStr3day\030+ \001(\001\022\020\n\010iRov3day\030, \001(\001\022\020\n\010iRo" +
+      "s3day\030- \001(\001\"(\n\027GetAdItemFeatureRequest\022\r" +
+      "\n\005ad_id\030\001 \001(\t\"a\n\030GetAdItemFeatureRespons" +
+      "e\022\027\n\006result\030\001 \001(\0132\007.Result\022,\n\017ad_item_fe" +
+      "ature\030\002 \001(\0132\023.AdItemFeatureProto\"+\n\032GetA" +
+      "llAdItemFeatureRequest\022\r\n\005ad_id\030\001 \003(\t\"d\n" +
+      "\033GetAllAdItemFeatureResponse\022\027\n\006result\030\001" +
+      " \001(\0132\007.Result\022,\n\017ad_item_feature\030\002 \003(\0132\023" +
+      ".AdItemFeatureProto2\355\004\n\016FeatureService\022G" +
+      "\n\020GetUserAdFeature\022\030.GetUserAdFeatureReq" +
+      "uest\032\031.GetUserAdFeatureResponse\022G\n\020GetAd" +
+      "ItemFeature\022\030.GetAdItemFeatureRequest\032\031." +
+      "GetAdItemFeatureResponse\022P\n\023GetAllAdItem" +
+      "Feature\022\033.GetAllAdItemFeatureRequest\032\034.G" +
+      "etAllAdItemFeatureResponse\022A\n\016GetUserFea" +
+      "ture\022\026.GetUserFeatureRequest\032\027.GetUserFe" +
+      "atureResponse\022D\n\017GetVideoFeature\022\027.GetVi" +
+      "deoFeatureRequest\032\030.GetVideoFeatureRespo" +
+      "nse\022M\n\022GetAllVideoFeature\022\032.GetAllVideoF" +
+      "eatureRequest\032\033.GetAllVideoFeatureRespon" +
+      "se\022M\n\022GetUserFeatureInfo\022\032.GetUserFeatur" +
+      "eInfoRequest\032\033.GetUserFeatureInfoRespons" +
+      "e\022P\n\023GetVideoFeatureInfo\022\033.GetVideoFeatu" +
+      "reInfoRequest\032\034.GetVideoFeatureInfoRespo" +
+      "nseB8\n1com.tzld.piaoquan.recommend.featu" +
+      "re.model.featureP\001\210\001\001b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
@@ -294,26 +366,50 @@ public final class Feature {
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_AdItemFeatureProto_descriptor,
         new java.lang.String[] { "AdId", "AdCode", "AdvertiserId", "AdvertiserCode", "CampaignId", "CampaignCode", "CreativeId", "CreativeCode", "Day1CntFeatures", "Day3CntFeatures", "Day7CntFeatures", "Month3CntFeatures", "Creative1DayCntFeatures", "Creative3DayCntFeatures", "Creative7DayCntFeatures", "Creative3MonthCntFeatures", "Advertiser1DayCntFeatures", "Advertiser3DayCntFeatures", "Advertiser7DayCntFeatures", "Advertiser3MonthCntFeatures", });
-    internal_static_GetAdItemFeatureRequest_descriptor =
+    internal_static_GetUserFeatureInfoRequest_descriptor =
       getDescriptor().getMessageTypes().get(14);
+    internal_static_GetUserFeatureInfoRequest_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_GetUserFeatureInfoRequest_descriptor,
+        new java.lang.String[] { "Mids", });
+    internal_static_GetUserFeatureInfoResponse_descriptor =
+      getDescriptor().getMessageTypes().get(15);
+    internal_static_GetUserFeatureInfoResponse_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_GetUserFeatureInfoResponse_descriptor,
+        new java.lang.String[] { "U1HourExpCnt", "U1HourClickCnt", "U1HourShareCnt", "U1HourReturnCnt", "UCtr1Hour", "UStr1Hour", "URov1Hour", "URos1Hour", "UTodayExpCnt", "UTodayClickCnt", "UTodayShareCnt", "UTodayReturnCnt", "UCtrToday", "UStrToday", "URovToday", "URosToday", "U1DayExpCnt", "U1DayClickCnt", "U1DayShareCnt", "U1DayReturnCnt", "UCtr1Day", "UStr1Day", "URov1Day", "URos1Day", "U3DayExpCnt", "U3DayClickCnt", "U3DayShareCnt", "U3DayReturnCnt", "UCtr3Day", "UStr3Day", "URov3Day", "URos3Day", "Mid", "MachineinfoBrand", "MachineinfoModel", "MachineinfoSystem", "MachineinfoPlatform", "Gender", "Country", "Province", "City", });
+    internal_static_GetVideoFeatureInfoRequest_descriptor =
+      getDescriptor().getMessageTypes().get(16);
+    internal_static_GetVideoFeatureInfoRequest_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_GetVideoFeatureInfoRequest_descriptor,
+        new java.lang.String[] { "VideoIds", });
+    internal_static_GetVideoFeatureInfoResponse_descriptor =
+      getDescriptor().getMessageTypes().get(17);
+    internal_static_GetVideoFeatureInfoResponse_fieldAccessorTable = new
+      com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
+        internal_static_GetVideoFeatureInfoResponse_descriptor,
+        new java.lang.String[] { "VideoId", "PlayCountTotal", "TotalTime", "GmtCreate", "Uid", "I15MinExpCnt", "I15MinClickCnt", "I15MinShareCnt", "I15MinReturnCnt", "ICtr15Min", "IStr15Min", "IRov15Min", "IRos15Min", "I1HourExpCnt", "I1HourClickCnt", "I1HourShareCnt", "I1HourReturnCnt", "ICtr1Hour", "IStr1Hour", "IRov1Hour", "IRos1Hour", "ITodayExpCnt", "ITodayClickCnt", "ITodayShareCnt", "ITodayReturnCnt", "ICtrToday", "IStrToday", "IRovToday", "IRosToday", "I1DayExpCnt", "I1DayClickCnt", "I1DayShareCnt", "I1DayReturnCnt", "ICtr1Day", "IStr1Day", "IRov1Day", "IRos1Day", "I3DayExpCnt", "I3DayClickCnt", "I3DayShareCnt", "I3DayReturnCnt", "ICtr3Day", "IStr3Day", "IRov3Day", "IRos3Day", });
+    internal_static_GetAdItemFeatureRequest_descriptor =
+      getDescriptor().getMessageTypes().get(18);
     internal_static_GetAdItemFeatureRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_GetAdItemFeatureRequest_descriptor,
         new java.lang.String[] { "AdId", });
     internal_static_GetAdItemFeatureResponse_descriptor =
-      getDescriptor().getMessageTypes().get(15);
+      getDescriptor().getMessageTypes().get(19);
     internal_static_GetAdItemFeatureResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_GetAdItemFeatureResponse_descriptor,
         new java.lang.String[] { "Result", "AdItemFeature", });
     internal_static_GetAllAdItemFeatureRequest_descriptor =
-      getDescriptor().getMessageTypes().get(16);
+      getDescriptor().getMessageTypes().get(20);
     internal_static_GetAllAdItemFeatureRequest_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_GetAllAdItemFeatureRequest_descriptor,
         new java.lang.String[] { "AdId", });
     internal_static_GetAllAdItemFeatureResponse_descriptor =
-      getDescriptor().getMessageTypes().get(17);
+      getDescriptor().getMessageTypes().get(21);
     internal_static_GetAllAdItemFeatureResponse_fieldAccessorTable = new
       com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
         internal_static_GetAllAdItemFeatureResponse_descriptor,

+ 142 - 0
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/FeatureService.java

@@ -59,6 +59,22 @@ public  abstract class FeatureService
         com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureRequest request,
         com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureResponse> done);
 
+    /**
+     * <code>rpc GetUserFeatureInfo(.GetUserFeatureInfoRequest) returns (.GetUserFeatureInfoResponse);</code>
+     */
+    public abstract void getUserFeatureInfo(
+        com.google.protobuf.RpcController controller,
+        com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest request,
+        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse> done);
+
+    /**
+     * <code>rpc GetVideoFeatureInfo(.GetVideoFeatureInfoRequest) returns (.GetVideoFeatureInfoResponse);</code>
+     */
+    public abstract void getVideoFeatureInfo(
+        com.google.protobuf.RpcController controller,
+        com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest request,
+        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse> done);
+
   }
 
   public static com.google.protobuf.Service newReflectiveService(
@@ -112,6 +128,22 @@ public  abstract class FeatureService
         impl.getAllVideoFeature(controller, request, done);
       }
 
+      @java.lang.Override
+      public  void getUserFeatureInfo(
+          com.google.protobuf.RpcController controller,
+          com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest request,
+          com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse> done) {
+        impl.getUserFeatureInfo(controller, request, done);
+      }
+
+      @java.lang.Override
+      public  void getVideoFeatureInfo(
+          com.google.protobuf.RpcController controller,
+          com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest request,
+          com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse> done) {
+        impl.getVideoFeatureInfo(controller, request, done);
+      }
+
     };
   }
 
@@ -146,6 +178,10 @@ public  abstract class FeatureService
             return impl.getVideoFeature(controller, (com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest)request);
           case 5:
             return impl.getAllVideoFeature(controller, (com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureRequest)request);
+          case 6:
+            return impl.getUserFeatureInfo(controller, (com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest)request);
+          case 7:
+            return impl.getVideoFeatureInfo(controller, (com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest)request);
           default:
             throw new java.lang.AssertionError("Can't get here.");
         }
@@ -172,6 +208,10 @@ public  abstract class FeatureService
             return com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest.getDefaultInstance();
           case 5:
             return com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureRequest.getDefaultInstance();
+          case 6:
+            return com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest.getDefaultInstance();
+          case 7:
+            return com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest.getDefaultInstance();
           default:
             throw new java.lang.AssertionError("Can't get here.");
         }
@@ -198,6 +238,10 @@ public  abstract class FeatureService
             return com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.getDefaultInstance();
           case 5:
             return com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureResponse.getDefaultInstance();
+          case 6:
+            return com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse.getDefaultInstance();
+          case 7:
+            return com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse.getDefaultInstance();
           default:
             throw new java.lang.AssertionError("Can't get here.");
         }
@@ -254,6 +298,22 @@ public  abstract class FeatureService
       com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureRequest request,
       com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureResponse> done);
 
+  /**
+   * <code>rpc GetUserFeatureInfo(.GetUserFeatureInfoRequest) returns (.GetUserFeatureInfoResponse);</code>
+   */
+  public abstract void getUserFeatureInfo(
+      com.google.protobuf.RpcController controller,
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest request,
+      com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse> done);
+
+  /**
+   * <code>rpc GetVideoFeatureInfo(.GetVideoFeatureInfoRequest) returns (.GetVideoFeatureInfoResponse);</code>
+   */
+  public abstract void getVideoFeatureInfo(
+      com.google.protobuf.RpcController controller,
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest request,
+      com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse> done);
+
   public static final
       com.google.protobuf.Descriptors.ServiceDescriptor
       getDescriptor() {
@@ -306,6 +366,16 @@ public  abstract class FeatureService
           com.google.protobuf.RpcUtil.<com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureResponse>specializeCallback(
             done));
         return;
+      case 6:
+        this.getUserFeatureInfo(controller, (com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest)request,
+          com.google.protobuf.RpcUtil.<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse>specializeCallback(
+            done));
+        return;
+      case 7:
+        this.getVideoFeatureInfo(controller, (com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest)request,
+          com.google.protobuf.RpcUtil.<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse>specializeCallback(
+            done));
+        return;
       default:
         throw new java.lang.AssertionError("Can't get here.");
     }
@@ -332,6 +402,10 @@ public  abstract class FeatureService
         return com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureRequest.getDefaultInstance();
       case 5:
         return com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureRequest.getDefaultInstance();
+      case 6:
+        return com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest.getDefaultInstance();
+      case 7:
+        return com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest.getDefaultInstance();
       default:
         throw new java.lang.AssertionError("Can't get here.");
     }
@@ -358,6 +432,10 @@ public  abstract class FeatureService
         return com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureResponse.getDefaultInstance();
       case 5:
         return com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureResponse.getDefaultInstance();
+      case 6:
+        return com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse.getDefaultInstance();
+      case 7:
+        return com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse.getDefaultInstance();
       default:
         throw new java.lang.AssertionError("Can't get here.");
     }
@@ -468,6 +546,36 @@ public  abstract class FeatureService
           com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureResponse.class,
           com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureResponse.getDefaultInstance()));
     }
+
+    public  void getUserFeatureInfo(
+        com.google.protobuf.RpcController controller,
+        com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest request,
+        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse> done) {
+      channel.callMethod(
+        getDescriptor().getMethods().get(6),
+        controller,
+        request,
+        com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse.getDefaultInstance(),
+        com.google.protobuf.RpcUtil.generalizeCallback(
+          done,
+          com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse.class,
+          com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse.getDefaultInstance()));
+    }
+
+    public  void getVideoFeatureInfo(
+        com.google.protobuf.RpcController controller,
+        com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest request,
+        com.google.protobuf.RpcCallback<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse> done) {
+      channel.callMethod(
+        getDescriptor().getMethods().get(7),
+        controller,
+        request,
+        com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse.getDefaultInstance(),
+        com.google.protobuf.RpcUtil.generalizeCallback(
+          done,
+          com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse.class,
+          com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse.getDefaultInstance()));
+    }
   }
 
   public static BlockingInterface newBlockingStub(
@@ -505,6 +613,16 @@ public  abstract class FeatureService
         com.google.protobuf.RpcController controller,
         com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureRequest request)
         throws com.google.protobuf.ServiceException;
+
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse getUserFeatureInfo(
+        com.google.protobuf.RpcController controller,
+        com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest request)
+        throws com.google.protobuf.ServiceException;
+
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse getVideoFeatureInfo(
+        com.google.protobuf.RpcController controller,
+        com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest request)
+        throws com.google.protobuf.ServiceException;
   }
 
   private static final class BlockingStub implements BlockingInterface {
@@ -585,6 +703,30 @@ public  abstract class FeatureService
         com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureResponse.getDefaultInstance());
     }
 
+
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse getUserFeatureInfo(
+        com.google.protobuf.RpcController controller,
+        com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest request)
+        throws com.google.protobuf.ServiceException {
+      return (com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse) channel.callBlockingMethod(
+        getDescriptor().getMethods().get(6),
+        controller,
+        request,
+        com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse.getDefaultInstance());
+    }
+
+
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse getVideoFeatureInfo(
+        com.google.protobuf.RpcController controller,
+        com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest request)
+        throws com.google.protobuf.ServiceException {
+      return (com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse) channel.callBlockingMethod(
+        getDescriptor().getMethods().get(7),
+        controller,
+        request,
+        com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse.getDefaultInstance());
+    }
+
   }
 
   // @@protoc_insertion_point(class_scope:FeatureService)

+ 148 - 0
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/FeatureServiceGrpc.java

@@ -213,6 +213,68 @@ public final class FeatureServiceGrpc {
     return getGetAllVideoFeatureMethod;
   }
 
+  private static volatile io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest,
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse> getGetUserFeatureInfoMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetUserFeatureInfo",
+      requestType = com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest.class,
+      responseType = com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest,
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse> getGetUserFeatureInfoMethod() {
+    io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest, com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse> getGetUserFeatureInfoMethod;
+    if ((getGetUserFeatureInfoMethod = FeatureServiceGrpc.getGetUserFeatureInfoMethod) == null) {
+      synchronized (FeatureServiceGrpc.class) {
+        if ((getGetUserFeatureInfoMethod = FeatureServiceGrpc.getGetUserFeatureInfoMethod) == null) {
+          FeatureServiceGrpc.getGetUserFeatureInfoMethod = getGetUserFeatureInfoMethod =
+              io.grpc.MethodDescriptor.<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest, com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetUserFeatureInfo"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse.getDefaultInstance()))
+              .setSchemaDescriptor(new FeatureServiceMethodDescriptorSupplier("GetUserFeatureInfo"))
+              .build();
+        }
+      }
+    }
+    return getGetUserFeatureInfoMethod;
+  }
+
+  private static volatile io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest,
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse> getGetVideoFeatureInfoMethod;
+
+  @io.grpc.stub.annotations.RpcMethod(
+      fullMethodName = SERVICE_NAME + '/' + "GetVideoFeatureInfo",
+      requestType = com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest.class,
+      responseType = com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse.class,
+      methodType = io.grpc.MethodDescriptor.MethodType.UNARY)
+  public static io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest,
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse> getGetVideoFeatureInfoMethod() {
+    io.grpc.MethodDescriptor<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest, com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse> getGetVideoFeatureInfoMethod;
+    if ((getGetVideoFeatureInfoMethod = FeatureServiceGrpc.getGetVideoFeatureInfoMethod) == null) {
+      synchronized (FeatureServiceGrpc.class) {
+        if ((getGetVideoFeatureInfoMethod = FeatureServiceGrpc.getGetVideoFeatureInfoMethod) == null) {
+          FeatureServiceGrpc.getGetVideoFeatureInfoMethod = getGetVideoFeatureInfoMethod =
+              io.grpc.MethodDescriptor.<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest, com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse>newBuilder()
+              .setType(io.grpc.MethodDescriptor.MethodType.UNARY)
+              .setFullMethodName(generateFullMethodName(SERVICE_NAME, "GetVideoFeatureInfo"))
+              .setSampledToLocalTracing(true)
+              .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest.getDefaultInstance()))
+              .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller(
+                  com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse.getDefaultInstance()))
+              .setSchemaDescriptor(new FeatureServiceMethodDescriptorSupplier("GetVideoFeatureInfo"))
+              .build();
+        }
+      }
+    }
+    return getGetVideoFeatureInfoMethod;
+  }
+
   /**
    * Creates a new async stub that supports all call types for the service
    */
@@ -303,6 +365,20 @@ public final class FeatureServiceGrpc {
       asyncUnimplementedUnaryCall(getGetAllVideoFeatureMethod(), responseObserver);
     }
 
+    /**
+     */
+    public void getUserFeatureInfo(com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest request,
+        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse> responseObserver) {
+      asyncUnimplementedUnaryCall(getGetUserFeatureInfoMethod(), responseObserver);
+    }
+
+    /**
+     */
+    public void getVideoFeatureInfo(com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest request,
+        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse> responseObserver) {
+      asyncUnimplementedUnaryCall(getGetVideoFeatureInfoMethod(), responseObserver);
+    }
+
     @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() {
       return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor())
           .addMethod(
@@ -347,6 +423,20 @@ public final class FeatureServiceGrpc {
                 com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureRequest,
                 com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureResponse>(
                   this, METHODID_GET_ALL_VIDEO_FEATURE)))
+          .addMethod(
+            getGetUserFeatureInfoMethod(),
+            asyncUnaryCall(
+              new MethodHandlers<
+                com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest,
+                com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse>(
+                  this, METHODID_GET_USER_FEATURE_INFO)))
+          .addMethod(
+            getGetVideoFeatureInfoMethod(),
+            asyncUnaryCall(
+              new MethodHandlers<
+                com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest,
+                com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse>(
+                  this, METHODID_GET_VIDEO_FEATURE_INFO)))
           .build();
     }
   }
@@ -412,6 +502,22 @@ public final class FeatureServiceGrpc {
       asyncUnaryCall(
           getChannel().newCall(getGetAllVideoFeatureMethod(), getCallOptions()), request, responseObserver);
     }
+
+    /**
+     */
+    public void getUserFeatureInfo(com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest request,
+        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse> responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(getGetUserFeatureInfoMethod(), getCallOptions()), request, responseObserver);
+    }
+
+    /**
+     */
+    public void getVideoFeatureInfo(com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest request,
+        io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse> responseObserver) {
+      asyncUnaryCall(
+          getChannel().newCall(getGetVideoFeatureInfoMethod(), getCallOptions()), request, responseObserver);
+    }
   }
 
   /**
@@ -469,6 +575,20 @@ public final class FeatureServiceGrpc {
       return blockingUnaryCall(
           getChannel(), getGetAllVideoFeatureMethod(), getCallOptions(), request);
     }
+
+    /**
+     */
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse getUserFeatureInfo(com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest request) {
+      return blockingUnaryCall(
+          getChannel(), getGetUserFeatureInfoMethod(), getCallOptions(), request);
+    }
+
+    /**
+     */
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse getVideoFeatureInfo(com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest request) {
+      return blockingUnaryCall(
+          getChannel(), getGetVideoFeatureInfoMethod(), getCallOptions(), request);
+    }
   }
 
   /**
@@ -532,6 +652,22 @@ public final class FeatureServiceGrpc {
       return futureUnaryCall(
           getChannel().newCall(getGetAllVideoFeatureMethod(), getCallOptions()), request);
     }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse> getUserFeatureInfo(
+        com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest request) {
+      return futureUnaryCall(
+          getChannel().newCall(getGetUserFeatureInfoMethod(), getCallOptions()), request);
+    }
+
+    /**
+     */
+    public com.google.common.util.concurrent.ListenableFuture<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse> getVideoFeatureInfo(
+        com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest request) {
+      return futureUnaryCall(
+          getChannel().newCall(getGetVideoFeatureInfoMethod(), getCallOptions()), request);
+    }
   }
 
   private static final int METHODID_GET_USER_AD_FEATURE = 0;
@@ -540,6 +676,8 @@ public final class FeatureServiceGrpc {
   private static final int METHODID_GET_USER_FEATURE = 3;
   private static final int METHODID_GET_VIDEO_FEATURE = 4;
   private static final int METHODID_GET_ALL_VIDEO_FEATURE = 5;
+  private static final int METHODID_GET_USER_FEATURE_INFO = 6;
+  private static final int METHODID_GET_VIDEO_FEATURE_INFO = 7;
 
   private static final class MethodHandlers<Req, Resp> implements
       io.grpc.stub.ServerCalls.UnaryMethod<Req, Resp>,
@@ -582,6 +720,14 @@ public final class FeatureServiceGrpc {
           serviceImpl.getAllVideoFeature((com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureRequest) request,
               (io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.feature.model.feature.GetAllVideoFeatureResponse>) responseObserver);
           break;
+        case METHODID_GET_USER_FEATURE_INFO:
+          serviceImpl.getUserFeatureInfo((com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest) request,
+              (io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse>) responseObserver);
+          break;
+        case METHODID_GET_VIDEO_FEATURE_INFO:
+          serviceImpl.getVideoFeatureInfo((com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest) request,
+              (io.grpc.stub.StreamObserver<com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse>) responseObserver);
+          break;
         default:
           throw new AssertionError();
       }
@@ -649,6 +795,8 @@ public final class FeatureServiceGrpc {
               .addMethod(getGetUserFeatureMethod())
               .addMethod(getGetVideoFeatureMethod())
               .addMethod(getGetAllVideoFeatureMethod())
+              .addMethod(getGetUserFeatureInfoMethod())
+              .addMethod(getGetVideoFeatureInfoMethod())
               .build();
         }
       }

+ 614 - 0
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetUserFeatureInfoRequest.java

@@ -0,0 +1,614 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/feature/feature.proto
+
+package com.tzld.piaoquan.recommend.feature.model.feature;
+
+/**
+ * Protobuf type {@code GetUserFeatureInfoRequest}
+ */
+public final class GetUserFeatureInfoRequest extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:GetUserFeatureInfoRequest)
+    GetUserFeatureInfoRequestOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use GetUserFeatureInfoRequest.newBuilder() to construct.
+  private GetUserFeatureInfoRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private GetUserFeatureInfoRequest() {
+    mids_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new GetUserFeatureInfoRequest();
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet
+  getUnknownFields() {
+    return this.unknownFields;
+  }
+  private GetUserFeatureInfoRequest(
+      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();
+            if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+              mids_ = new com.google.protobuf.LazyStringArrayList();
+              mutable_bitField0_ |= 0x00000001;
+            }
+            mids_.add(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 {
+      if (((mutable_bitField0_ & 0x00000001) != 0)) {
+        mids_ = mids_.getUnmodifiableView();
+      }
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureInfoRequest_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureInfoRequest_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest.class, com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest.Builder.class);
+  }
+
+  public static final int MIDS_FIELD_NUMBER = 1;
+  private com.google.protobuf.LazyStringList mids_;
+  /**
+   * <code>repeated string mids = 1;</code>
+   * @return A list containing the mids.
+   */
+  public com.google.protobuf.ProtocolStringList
+      getMidsList() {
+    return mids_;
+  }
+  /**
+   * <code>repeated string mids = 1;</code>
+   * @return The count of mids.
+   */
+  public int getMidsCount() {
+    return mids_.size();
+  }
+  /**
+   * <code>repeated string mids = 1;</code>
+   * @param index The index of the element to return.
+   * @return The mids at the given index.
+   */
+  public java.lang.String getMids(int index) {
+    return mids_.get(index);
+  }
+  /**
+   * <code>repeated string mids = 1;</code>
+   * @param index The index of the value to return.
+   * @return The bytes of the mids at the given index.
+   */
+  public com.google.protobuf.ByteString
+      getMidsBytes(int index) {
+    return mids_.getByteString(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 {
+    for (int i = 0; i < mids_.size(); i++) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 1, mids_.getRaw(i));
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    {
+      int dataSize = 0;
+      for (int i = 0; i < mids_.size(); i++) {
+        dataSize += computeStringSizeNoTag(mids_.getRaw(i));
+      }
+      size += dataSize;
+      size += 1 * getMidsList().size();
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest)) {
+      return super.equals(obj);
+    }
+    com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest other = (com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest) obj;
+
+    if (!getMidsList()
+        .equals(other.getMidsList())) 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 (getMidsCount() > 0) {
+      hash = (37 * hash) + MIDS_FIELD_NUMBER;
+      hash = (53 * hash) + getMidsList().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest 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 GetUserFeatureInfoRequest}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:GetUserFeatureInfoRequest)
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequestOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureInfoRequest_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureInfoRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest.class, com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest.Builder.class);
+    }
+
+    // Construct using com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest.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();
+      mids_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000001);
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureInfoRequest_descriptor;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest build() {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest buildPartial() {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest result = new com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest(this);
+      int from_bitField0_ = bitField0_;
+      if (((bitField0_ & 0x00000001) != 0)) {
+        mids_ = mids_.getUnmodifiableView();
+        bitField0_ = (bitField0_ & ~0x00000001);
+      }
+      result.mids_ = mids_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest) {
+        return mergeFrom((com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest other) {
+      if (other == com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest.getDefaultInstance()) return this;
+      if (!other.mids_.isEmpty()) {
+        if (mids_.isEmpty()) {
+          mids_ = other.mids_;
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          ensureMidsIsMutable();
+          mids_.addAll(other.mids_);
+        }
+        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.feature.model.feature.GetUserFeatureInfoRequest parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+    private int bitField0_;
+
+    private com.google.protobuf.LazyStringList mids_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+    private void ensureMidsIsMutable() {
+      if (!((bitField0_ & 0x00000001) != 0)) {
+        mids_ = new com.google.protobuf.LazyStringArrayList(mids_);
+        bitField0_ |= 0x00000001;
+       }
+    }
+    /**
+     * <code>repeated string mids = 1;</code>
+     * @return A list containing the mids.
+     */
+    public com.google.protobuf.ProtocolStringList
+        getMidsList() {
+      return mids_.getUnmodifiableView();
+    }
+    /**
+     * <code>repeated string mids = 1;</code>
+     * @return The count of mids.
+     */
+    public int getMidsCount() {
+      return mids_.size();
+    }
+    /**
+     * <code>repeated string mids = 1;</code>
+     * @param index The index of the element to return.
+     * @return The mids at the given index.
+     */
+    public java.lang.String getMids(int index) {
+      return mids_.get(index);
+    }
+    /**
+     * <code>repeated string mids = 1;</code>
+     * @param index The index of the value to return.
+     * @return The bytes of the mids at the given index.
+     */
+    public com.google.protobuf.ByteString
+        getMidsBytes(int index) {
+      return mids_.getByteString(index);
+    }
+    /**
+     * <code>repeated string mids = 1;</code>
+     * @param index The index to set the value at.
+     * @param value The mids to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMids(
+        int index, java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureMidsIsMutable();
+      mids_.set(index, value);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>repeated string mids = 1;</code>
+     * @param value The mids to add.
+     * @return This builder for chaining.
+     */
+    public Builder addMids(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  ensureMidsIsMutable();
+      mids_.add(value);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>repeated string mids = 1;</code>
+     * @param values The mids to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllMids(
+        java.lang.Iterable<java.lang.String> values) {
+      ensureMidsIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, mids_);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>repeated string mids = 1;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMids() {
+      mids_ = com.google.protobuf.LazyStringArrayList.EMPTY;
+      bitField0_ = (bitField0_ & ~0x00000001);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>repeated string mids = 1;</code>
+     * @param value The bytes of the mids to add.
+     * @return This builder for chaining.
+     */
+    public Builder addMidsBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      ensureMidsIsMutable();
+      mids_.add(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:GetUserFeatureInfoRequest)
+  }
+
+  // @@protoc_insertion_point(class_scope:GetUserFeatureInfoRequest)
+  private static final com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest();
+  }
+
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<GetUserFeatureInfoRequest>
+      PARSER = new com.google.protobuf.AbstractParser<GetUserFeatureInfoRequest>() {
+    @java.lang.Override
+    public GetUserFeatureInfoRequest parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return new GetUserFeatureInfoRequest(input, extensionRegistry);
+    }
+  };
+
+  public static com.google.protobuf.Parser<GetUserFeatureInfoRequest> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<GetUserFeatureInfoRequest> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoRequest getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+

+ 34 - 0
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetUserFeatureInfoRequestOrBuilder.java

@@ -0,0 +1,34 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/feature/feature.proto
+
+package com.tzld.piaoquan.recommend.feature.model.feature;
+
+public interface GetUserFeatureInfoRequestOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:GetUserFeatureInfoRequest)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <code>repeated string mids = 1;</code>
+   * @return A list containing the mids.
+   */
+  java.util.List<java.lang.String>
+      getMidsList();
+  /**
+   * <code>repeated string mids = 1;</code>
+   * @return The count of mids.
+   */
+  int getMidsCount();
+  /**
+   * <code>repeated string mids = 1;</code>
+   * @param index The index of the element to return.
+   * @return The mids at the given index.
+   */
+  java.lang.String getMids(int index);
+  /**
+   * <code>repeated string mids = 1;</code>
+   * @param index The index of the value to return.
+   * @return The bytes of the mids at the given index.
+   */
+  com.google.protobuf.ByteString
+      getMidsBytes(int index);
+}

+ 3821 - 0
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetUserFeatureInfoResponse.java

@@ -0,0 +1,3821 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/feature/feature.proto
+
+package com.tzld.piaoquan.recommend.feature.model.feature;
+
+/**
+ * Protobuf type {@code GetUserFeatureInfoResponse}
+ */
+public final class GetUserFeatureInfoResponse extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:GetUserFeatureInfoResponse)
+    GetUserFeatureInfoResponseOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use GetUserFeatureInfoResponse.newBuilder() to construct.
+  private GetUserFeatureInfoResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private GetUserFeatureInfoResponse() {
+    mid_ = "";
+    machineinfoBrand_ = "";
+    machineinfoModel_ = "";
+    machineinfoSystem_ = "";
+    machineinfoPlatform_ = "";
+    gender_ = "";
+    country_ = "";
+    province_ = "";
+    city_ = "";
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new GetUserFeatureInfoResponse();
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet
+  getUnknownFields() {
+    return this.unknownFields;
+  }
+  private GetUserFeatureInfoResponse(
+      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: {
+
+            u1HourExpCnt_ = input.readInt64();
+            break;
+          }
+          case 16: {
+
+            u1HourClickCnt_ = input.readInt64();
+            break;
+          }
+          case 24: {
+
+            u1HourShareCnt_ = input.readInt64();
+            break;
+          }
+          case 32: {
+
+            u1HourReturnCnt_ = input.readInt64();
+            break;
+          }
+          case 41: {
+
+            uCtr1Hour_ = input.readDouble();
+            break;
+          }
+          case 49: {
+
+            uStr1Hour_ = input.readDouble();
+            break;
+          }
+          case 57: {
+
+            uRov1Hour_ = input.readDouble();
+            break;
+          }
+          case 65: {
+
+            uRos1Hour_ = input.readDouble();
+            break;
+          }
+          case 72: {
+
+            uTodayExpCnt_ = input.readInt64();
+            break;
+          }
+          case 80: {
+
+            uTodayClickCnt_ = input.readInt64();
+            break;
+          }
+          case 88: {
+
+            uTodayShareCnt_ = input.readInt64();
+            break;
+          }
+          case 96: {
+
+            uTodayReturnCnt_ = input.readInt64();
+            break;
+          }
+          case 105: {
+
+            uCtrToday_ = input.readDouble();
+            break;
+          }
+          case 113: {
+
+            uStrToday_ = input.readDouble();
+            break;
+          }
+          case 121: {
+
+            uRovToday_ = input.readDouble();
+            break;
+          }
+          case 129: {
+
+            uRosToday_ = input.readDouble();
+            break;
+          }
+          case 136: {
+
+            u1DayExpCnt_ = input.readInt64();
+            break;
+          }
+          case 144: {
+
+            u1DayClickCnt_ = input.readInt64();
+            break;
+          }
+          case 152: {
+
+            u1DayShareCnt_ = input.readInt64();
+            break;
+          }
+          case 160: {
+
+            u1DayReturnCnt_ = input.readInt64();
+            break;
+          }
+          case 169: {
+
+            uCtr1Day_ = input.readDouble();
+            break;
+          }
+          case 177: {
+
+            uStr1Day_ = input.readDouble();
+            break;
+          }
+          case 185: {
+
+            uRov1Day_ = input.readDouble();
+            break;
+          }
+          case 193: {
+
+            uRos1Day_ = input.readDouble();
+            break;
+          }
+          case 200: {
+
+            u3DayExpCnt_ = input.readInt64();
+            break;
+          }
+          case 208: {
+
+            u3DayClickCnt_ = input.readInt64();
+            break;
+          }
+          case 216: {
+
+            u3DayShareCnt_ = input.readInt64();
+            break;
+          }
+          case 224: {
+
+            u3DayReturnCnt_ = input.readInt64();
+            break;
+          }
+          case 233: {
+
+            uCtr3Day_ = input.readDouble();
+            break;
+          }
+          case 241: {
+
+            uStr3Day_ = input.readDouble();
+            break;
+          }
+          case 249: {
+
+            uRov3Day_ = input.readDouble();
+            break;
+          }
+          case 257: {
+
+            uRos3Day_ = input.readDouble();
+            break;
+          }
+          case 266: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            mid_ = s;
+            break;
+          }
+          case 274: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            machineinfoBrand_ = s;
+            break;
+          }
+          case 282: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            machineinfoModel_ = s;
+            break;
+          }
+          case 290: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            machineinfoSystem_ = s;
+            break;
+          }
+          case 298: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            machineinfoPlatform_ = s;
+            break;
+          }
+          case 306: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            gender_ = s;
+            break;
+          }
+          case 314: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            country_ = s;
+            break;
+          }
+          case 322: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            province_ = s;
+            break;
+          }
+          case 330: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            city_ = 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.feature.model.feature.Feature.internal_static_GetUserFeatureInfoResponse_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureInfoResponse_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse.class, com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse.Builder.class);
+  }
+
+  public static final int U1HOUREXPCNT_FIELD_NUMBER = 1;
+  private long u1HourExpCnt_;
+  /**
+   * <pre>
+   *过去一小时
+   * </pre>
+   *
+   * <code>int64 u1hourExpCnt = 1;</code>
+   * @return The u1hourExpCnt.
+   */
+  @java.lang.Override
+  public long getU1HourExpCnt() {
+    return u1HourExpCnt_;
+  }
+
+  public static final int U1HOURCLICKCNT_FIELD_NUMBER = 2;
+  private long u1HourClickCnt_;
+  /**
+   * <code>int64 u1hourClickCnt = 2;</code>
+   * @return The u1hourClickCnt.
+   */
+  @java.lang.Override
+  public long getU1HourClickCnt() {
+    return u1HourClickCnt_;
+  }
+
+  public static final int U1HOURSHARECNT_FIELD_NUMBER = 3;
+  private long u1HourShareCnt_;
+  /**
+   * <code>int64 u1hourShareCnt = 3;</code>
+   * @return The u1hourShareCnt.
+   */
+  @java.lang.Override
+  public long getU1HourShareCnt() {
+    return u1HourShareCnt_;
+  }
+
+  public static final int U1HOURRETURNCNT_FIELD_NUMBER = 4;
+  private long u1HourReturnCnt_;
+  /**
+   * <code>int64 u1hourReturnCnt = 4;</code>
+   * @return The u1hourReturnCnt.
+   */
+  @java.lang.Override
+  public long getU1HourReturnCnt() {
+    return u1HourReturnCnt_;
+  }
+
+  public static final int UCTR1HOUR_FIELD_NUMBER = 5;
+  private double uCtr1Hour_;
+  /**
+   * <code>double uCtr1hour = 5;</code>
+   * @return The uCtr1hour.
+   */
+  @java.lang.Override
+  public double getUCtr1Hour() {
+    return uCtr1Hour_;
+  }
+
+  public static final int USTR1HOUR_FIELD_NUMBER = 6;
+  private double uStr1Hour_;
+  /**
+   * <code>double uStr1hour = 6;</code>
+   * @return The uStr1hour.
+   */
+  @java.lang.Override
+  public double getUStr1Hour() {
+    return uStr1Hour_;
+  }
+
+  public static final int UROV1HOUR_FIELD_NUMBER = 7;
+  private double uRov1Hour_;
+  /**
+   * <code>double uRov1hour = 7;</code>
+   * @return The uRov1hour.
+   */
+  @java.lang.Override
+  public double getURov1Hour() {
+    return uRov1Hour_;
+  }
+
+  public static final int UROS1HOUR_FIELD_NUMBER = 8;
+  private double uRos1Hour_;
+  /**
+   * <code>double uRos1hour = 8;</code>
+   * @return The uRos1hour.
+   */
+  @java.lang.Override
+  public double getURos1Hour() {
+    return uRos1Hour_;
+  }
+
+  public static final int UTODAYEXPCNT_FIELD_NUMBER = 9;
+  private long uTodayExpCnt_;
+  /**
+   * <pre>
+   *今天
+   * </pre>
+   *
+   * <code>int64 uTodayExpCnt = 9;</code>
+   * @return The uTodayExpCnt.
+   */
+  @java.lang.Override
+  public long getUTodayExpCnt() {
+    return uTodayExpCnt_;
+  }
+
+  public static final int UTODAYCLICKCNT_FIELD_NUMBER = 10;
+  private long uTodayClickCnt_;
+  /**
+   * <code>int64 uTodayClickCnt = 10;</code>
+   * @return The uTodayClickCnt.
+   */
+  @java.lang.Override
+  public long getUTodayClickCnt() {
+    return uTodayClickCnt_;
+  }
+
+  public static final int UTODAYSHARECNT_FIELD_NUMBER = 11;
+  private long uTodayShareCnt_;
+  /**
+   * <code>int64 uTodayShareCnt = 11;</code>
+   * @return The uTodayShareCnt.
+   */
+  @java.lang.Override
+  public long getUTodayShareCnt() {
+    return uTodayShareCnt_;
+  }
+
+  public static final int UTODAYRETURNCNT_FIELD_NUMBER = 12;
+  private long uTodayReturnCnt_;
+  /**
+   * <code>int64 uTodayReturnCnt = 12;</code>
+   * @return The uTodayReturnCnt.
+   */
+  @java.lang.Override
+  public long getUTodayReturnCnt() {
+    return uTodayReturnCnt_;
+  }
+
+  public static final int UCTRTODAY_FIELD_NUMBER = 13;
+  private double uCtrToday_;
+  /**
+   * <code>double uCtrToday = 13;</code>
+   * @return The uCtrToday.
+   */
+  @java.lang.Override
+  public double getUCtrToday() {
+    return uCtrToday_;
+  }
+
+  public static final int USTRTODAY_FIELD_NUMBER = 14;
+  private double uStrToday_;
+  /**
+   * <code>double uStrToday = 14;</code>
+   * @return The uStrToday.
+   */
+  @java.lang.Override
+  public double getUStrToday() {
+    return uStrToday_;
+  }
+
+  public static final int UROVTODAY_FIELD_NUMBER = 15;
+  private double uRovToday_;
+  /**
+   * <code>double uRovToday = 15;</code>
+   * @return The uRovToday.
+   */
+  @java.lang.Override
+  public double getURovToday() {
+    return uRovToday_;
+  }
+
+  public static final int UROSTODAY_FIELD_NUMBER = 16;
+  private double uRosToday_;
+  /**
+   * <code>double uRosToday = 16;</code>
+   * @return The uRosToday.
+   */
+  @java.lang.Override
+  public double getURosToday() {
+    return uRosToday_;
+  }
+
+  public static final int U1DAYEXPCNT_FIELD_NUMBER = 17;
+  private long u1DayExpCnt_;
+  /**
+   * <pre>
+   *过去一天
+   * </pre>
+   *
+   * <code>int64 u1dayExpCnt = 17;</code>
+   * @return The u1dayExpCnt.
+   */
+  @java.lang.Override
+  public long getU1DayExpCnt() {
+    return u1DayExpCnt_;
+  }
+
+  public static final int U1DAYCLICKCNT_FIELD_NUMBER = 18;
+  private long u1DayClickCnt_;
+  /**
+   * <code>int64 u1dayClickCnt = 18;</code>
+   * @return The u1dayClickCnt.
+   */
+  @java.lang.Override
+  public long getU1DayClickCnt() {
+    return u1DayClickCnt_;
+  }
+
+  public static final int U1DAYSHARECNT_FIELD_NUMBER = 19;
+  private long u1DayShareCnt_;
+  /**
+   * <code>int64 u1dayShareCnt = 19;</code>
+   * @return The u1dayShareCnt.
+   */
+  @java.lang.Override
+  public long getU1DayShareCnt() {
+    return u1DayShareCnt_;
+  }
+
+  public static final int U1DAYRETURNCNT_FIELD_NUMBER = 20;
+  private long u1DayReturnCnt_;
+  /**
+   * <code>int64 u1dayReturnCnt = 20;</code>
+   * @return The u1dayReturnCnt.
+   */
+  @java.lang.Override
+  public long getU1DayReturnCnt() {
+    return u1DayReturnCnt_;
+  }
+
+  public static final int UCTR1DAY_FIELD_NUMBER = 21;
+  private double uCtr1Day_;
+  /**
+   * <code>double uCtr1day = 21;</code>
+   * @return The uCtr1day.
+   */
+  @java.lang.Override
+  public double getUCtr1Day() {
+    return uCtr1Day_;
+  }
+
+  public static final int USTR1DAY_FIELD_NUMBER = 22;
+  private double uStr1Day_;
+  /**
+   * <code>double uStr1day = 22;</code>
+   * @return The uStr1day.
+   */
+  @java.lang.Override
+  public double getUStr1Day() {
+    return uStr1Day_;
+  }
+
+  public static final int UROV1DAY_FIELD_NUMBER = 23;
+  private double uRov1Day_;
+  /**
+   * <code>double uRov1day = 23;</code>
+   * @return The uRov1day.
+   */
+  @java.lang.Override
+  public double getURov1Day() {
+    return uRov1Day_;
+  }
+
+  public static final int UROS1DAY_FIELD_NUMBER = 24;
+  private double uRos1Day_;
+  /**
+   * <code>double uRos1day = 24;</code>
+   * @return The uRos1day.
+   */
+  @java.lang.Override
+  public double getURos1Day() {
+    return uRos1Day_;
+  }
+
+  public static final int U3DAYEXPCNT_FIELD_NUMBER = 25;
+  private long u3DayExpCnt_;
+  /**
+   * <pre>
+   *过去三天
+   * </pre>
+   *
+   * <code>int64 u3dayExpCnt = 25;</code>
+   * @return The u3dayExpCnt.
+   */
+  @java.lang.Override
+  public long getU3DayExpCnt() {
+    return u3DayExpCnt_;
+  }
+
+  public static final int U3DAYCLICKCNT_FIELD_NUMBER = 26;
+  private long u3DayClickCnt_;
+  /**
+   * <code>int64 u3dayClickCnt = 26;</code>
+   * @return The u3dayClickCnt.
+   */
+  @java.lang.Override
+  public long getU3DayClickCnt() {
+    return u3DayClickCnt_;
+  }
+
+  public static final int U3DAYSHARECNT_FIELD_NUMBER = 27;
+  private long u3DayShareCnt_;
+  /**
+   * <code>int64 u3dayShareCnt = 27;</code>
+   * @return The u3dayShareCnt.
+   */
+  @java.lang.Override
+  public long getU3DayShareCnt() {
+    return u3DayShareCnt_;
+  }
+
+  public static final int U3DAYRETURNCNT_FIELD_NUMBER = 28;
+  private long u3DayReturnCnt_;
+  /**
+   * <code>int64 u3dayReturnCnt = 28;</code>
+   * @return The u3dayReturnCnt.
+   */
+  @java.lang.Override
+  public long getU3DayReturnCnt() {
+    return u3DayReturnCnt_;
+  }
+
+  public static final int UCTR3DAY_FIELD_NUMBER = 29;
+  private double uCtr3Day_;
+  /**
+   * <code>double uCtr3day = 29;</code>
+   * @return The uCtr3day.
+   */
+  @java.lang.Override
+  public double getUCtr3Day() {
+    return uCtr3Day_;
+  }
+
+  public static final int USTR3DAY_FIELD_NUMBER = 30;
+  private double uStr3Day_;
+  /**
+   * <code>double uStr3day = 30;</code>
+   * @return The uStr3day.
+   */
+  @java.lang.Override
+  public double getUStr3Day() {
+    return uStr3Day_;
+  }
+
+  public static final int UROV3DAY_FIELD_NUMBER = 31;
+  private double uRov3Day_;
+  /**
+   * <code>double uRov3day = 31;</code>
+   * @return The uRov3day.
+   */
+  @java.lang.Override
+  public double getURov3Day() {
+    return uRov3Day_;
+  }
+
+  public static final int UROS3DAY_FIELD_NUMBER = 32;
+  private double uRos3Day_;
+  /**
+   * <code>double uRos3day = 32;</code>
+   * @return The uRos3day.
+   */
+  @java.lang.Override
+  public double getURos3Day() {
+    return uRos3Day_;
+  }
+
+  public static final int MID_FIELD_NUMBER = 33;
+  private volatile java.lang.Object mid_;
+  /**
+   * <code>string mid = 33;</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 = 33;</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 MACHINEINFOBRAND_FIELD_NUMBER = 34;
+  private volatile java.lang.Object machineinfoBrand_;
+  /**
+   * <code>string machineinfoBrand = 34;</code>
+   * @return The machineinfoBrand.
+   */
+  @java.lang.Override
+  public java.lang.String getMachineinfoBrand() {
+    java.lang.Object ref = machineinfoBrand_;
+    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();
+      machineinfoBrand_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string machineinfoBrand = 34;</code>
+   * @return The bytes for machineinfoBrand.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getMachineinfoBrandBytes() {
+    java.lang.Object ref = machineinfoBrand_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      machineinfoBrand_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int MACHINEINFOMODEL_FIELD_NUMBER = 35;
+  private volatile java.lang.Object machineinfoModel_;
+  /**
+   * <code>string machineinfoModel = 35;</code>
+   * @return The machineinfoModel.
+   */
+  @java.lang.Override
+  public java.lang.String getMachineinfoModel() {
+    java.lang.Object ref = machineinfoModel_;
+    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();
+      machineinfoModel_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string machineinfoModel = 35;</code>
+   * @return The bytes for machineinfoModel.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getMachineinfoModelBytes() {
+    java.lang.Object ref = machineinfoModel_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      machineinfoModel_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int MACHINEINFOSYSTEM_FIELD_NUMBER = 36;
+  private volatile java.lang.Object machineinfoSystem_;
+  /**
+   * <code>string machineinfoSystem = 36;</code>
+   * @return The machineinfoSystem.
+   */
+  @java.lang.Override
+  public java.lang.String getMachineinfoSystem() {
+    java.lang.Object ref = machineinfoSystem_;
+    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();
+      machineinfoSystem_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string machineinfoSystem = 36;</code>
+   * @return The bytes for machineinfoSystem.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getMachineinfoSystemBytes() {
+    java.lang.Object ref = machineinfoSystem_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      machineinfoSystem_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int MACHINEINFOPLATFORM_FIELD_NUMBER = 37;
+  private volatile java.lang.Object machineinfoPlatform_;
+  /**
+   * <code>string machineinfoPlatform = 37;</code>
+   * @return The machineinfoPlatform.
+   */
+  @java.lang.Override
+  public java.lang.String getMachineinfoPlatform() {
+    java.lang.Object ref = machineinfoPlatform_;
+    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();
+      machineinfoPlatform_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string machineinfoPlatform = 37;</code>
+   * @return The bytes for machineinfoPlatform.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getMachineinfoPlatformBytes() {
+    java.lang.Object ref = machineinfoPlatform_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      machineinfoPlatform_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int GENDER_FIELD_NUMBER = 38;
+  private volatile java.lang.Object gender_;
+  /**
+   * <code>string gender = 38;</code>
+   * @return The gender.
+   */
+  @java.lang.Override
+  public java.lang.String getGender() {
+    java.lang.Object ref = gender_;
+    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();
+      gender_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string gender = 38;</code>
+   * @return The bytes for gender.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getGenderBytes() {
+    java.lang.Object ref = gender_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      gender_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int COUNTRY_FIELD_NUMBER = 39;
+  private volatile java.lang.Object country_;
+  /**
+   * <code>string country = 39;</code>
+   * @return The country.
+   */
+  @java.lang.Override
+  public java.lang.String getCountry() {
+    java.lang.Object ref = country_;
+    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();
+      country_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string country = 39;</code>
+   * @return The bytes for country.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getCountryBytes() {
+    java.lang.Object ref = country_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      country_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int PROVINCE_FIELD_NUMBER = 40;
+  private volatile java.lang.Object province_;
+  /**
+   * <code>string province = 40;</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 = 40;</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 CITY_FIELD_NUMBER = 41;
+  private volatile java.lang.Object city_;
+  /**
+   * <code>string city = 41;</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 = 41;</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;
+    }
+  }
+
+  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 (u1HourExpCnt_ != 0L) {
+      output.writeInt64(1, u1HourExpCnt_);
+    }
+    if (u1HourClickCnt_ != 0L) {
+      output.writeInt64(2, u1HourClickCnt_);
+    }
+    if (u1HourShareCnt_ != 0L) {
+      output.writeInt64(3, u1HourShareCnt_);
+    }
+    if (u1HourReturnCnt_ != 0L) {
+      output.writeInt64(4, u1HourReturnCnt_);
+    }
+    if (uCtr1Hour_ != 0D) {
+      output.writeDouble(5, uCtr1Hour_);
+    }
+    if (uStr1Hour_ != 0D) {
+      output.writeDouble(6, uStr1Hour_);
+    }
+    if (uRov1Hour_ != 0D) {
+      output.writeDouble(7, uRov1Hour_);
+    }
+    if (uRos1Hour_ != 0D) {
+      output.writeDouble(8, uRos1Hour_);
+    }
+    if (uTodayExpCnt_ != 0L) {
+      output.writeInt64(9, uTodayExpCnt_);
+    }
+    if (uTodayClickCnt_ != 0L) {
+      output.writeInt64(10, uTodayClickCnt_);
+    }
+    if (uTodayShareCnt_ != 0L) {
+      output.writeInt64(11, uTodayShareCnt_);
+    }
+    if (uTodayReturnCnt_ != 0L) {
+      output.writeInt64(12, uTodayReturnCnt_);
+    }
+    if (uCtrToday_ != 0D) {
+      output.writeDouble(13, uCtrToday_);
+    }
+    if (uStrToday_ != 0D) {
+      output.writeDouble(14, uStrToday_);
+    }
+    if (uRovToday_ != 0D) {
+      output.writeDouble(15, uRovToday_);
+    }
+    if (uRosToday_ != 0D) {
+      output.writeDouble(16, uRosToday_);
+    }
+    if (u1DayExpCnt_ != 0L) {
+      output.writeInt64(17, u1DayExpCnt_);
+    }
+    if (u1DayClickCnt_ != 0L) {
+      output.writeInt64(18, u1DayClickCnt_);
+    }
+    if (u1DayShareCnt_ != 0L) {
+      output.writeInt64(19, u1DayShareCnt_);
+    }
+    if (u1DayReturnCnt_ != 0L) {
+      output.writeInt64(20, u1DayReturnCnt_);
+    }
+    if (uCtr1Day_ != 0D) {
+      output.writeDouble(21, uCtr1Day_);
+    }
+    if (uStr1Day_ != 0D) {
+      output.writeDouble(22, uStr1Day_);
+    }
+    if (uRov1Day_ != 0D) {
+      output.writeDouble(23, uRov1Day_);
+    }
+    if (uRos1Day_ != 0D) {
+      output.writeDouble(24, uRos1Day_);
+    }
+    if (u3DayExpCnt_ != 0L) {
+      output.writeInt64(25, u3DayExpCnt_);
+    }
+    if (u3DayClickCnt_ != 0L) {
+      output.writeInt64(26, u3DayClickCnt_);
+    }
+    if (u3DayShareCnt_ != 0L) {
+      output.writeInt64(27, u3DayShareCnt_);
+    }
+    if (u3DayReturnCnt_ != 0L) {
+      output.writeInt64(28, u3DayReturnCnt_);
+    }
+    if (uCtr3Day_ != 0D) {
+      output.writeDouble(29, uCtr3Day_);
+    }
+    if (uStr3Day_ != 0D) {
+      output.writeDouble(30, uStr3Day_);
+    }
+    if (uRov3Day_ != 0D) {
+      output.writeDouble(31, uRov3Day_);
+    }
+    if (uRos3Day_ != 0D) {
+      output.writeDouble(32, uRos3Day_);
+    }
+    if (!getMidBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 33, mid_);
+    }
+    if (!getMachineinfoBrandBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 34, machineinfoBrand_);
+    }
+    if (!getMachineinfoModelBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 35, machineinfoModel_);
+    }
+    if (!getMachineinfoSystemBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 36, machineinfoSystem_);
+    }
+    if (!getMachineinfoPlatformBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 37, machineinfoPlatform_);
+    }
+    if (!getGenderBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 38, gender_);
+    }
+    if (!getCountryBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 39, country_);
+    }
+    if (!getProvinceBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 40, province_);
+    }
+    if (!getCityBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 41, city_);
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    if (u1HourExpCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(1, u1HourExpCnt_);
+    }
+    if (u1HourClickCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(2, u1HourClickCnt_);
+    }
+    if (u1HourShareCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(3, u1HourShareCnt_);
+    }
+    if (u1HourReturnCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(4, u1HourReturnCnt_);
+    }
+    if (uCtr1Hour_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(5, uCtr1Hour_);
+    }
+    if (uStr1Hour_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(6, uStr1Hour_);
+    }
+    if (uRov1Hour_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(7, uRov1Hour_);
+    }
+    if (uRos1Hour_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(8, uRos1Hour_);
+    }
+    if (uTodayExpCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(9, uTodayExpCnt_);
+    }
+    if (uTodayClickCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(10, uTodayClickCnt_);
+    }
+    if (uTodayShareCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(11, uTodayShareCnt_);
+    }
+    if (uTodayReturnCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(12, uTodayReturnCnt_);
+    }
+    if (uCtrToday_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(13, uCtrToday_);
+    }
+    if (uStrToday_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(14, uStrToday_);
+    }
+    if (uRovToday_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(15, uRovToday_);
+    }
+    if (uRosToday_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(16, uRosToday_);
+    }
+    if (u1DayExpCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(17, u1DayExpCnt_);
+    }
+    if (u1DayClickCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(18, u1DayClickCnt_);
+    }
+    if (u1DayShareCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(19, u1DayShareCnt_);
+    }
+    if (u1DayReturnCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(20, u1DayReturnCnt_);
+    }
+    if (uCtr1Day_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(21, uCtr1Day_);
+    }
+    if (uStr1Day_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(22, uStr1Day_);
+    }
+    if (uRov1Day_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(23, uRov1Day_);
+    }
+    if (uRos1Day_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(24, uRos1Day_);
+    }
+    if (u3DayExpCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(25, u3DayExpCnt_);
+    }
+    if (u3DayClickCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(26, u3DayClickCnt_);
+    }
+    if (u3DayShareCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(27, u3DayShareCnt_);
+    }
+    if (u3DayReturnCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(28, u3DayReturnCnt_);
+    }
+    if (uCtr3Day_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(29, uCtr3Day_);
+    }
+    if (uStr3Day_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(30, uStr3Day_);
+    }
+    if (uRov3Day_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(31, uRov3Day_);
+    }
+    if (uRos3Day_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(32, uRos3Day_);
+    }
+    if (!getMidBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(33, mid_);
+    }
+    if (!getMachineinfoBrandBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(34, machineinfoBrand_);
+    }
+    if (!getMachineinfoModelBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(35, machineinfoModel_);
+    }
+    if (!getMachineinfoSystemBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(36, machineinfoSystem_);
+    }
+    if (!getMachineinfoPlatformBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(37, machineinfoPlatform_);
+    }
+    if (!getGenderBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(38, gender_);
+    }
+    if (!getCountryBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(39, country_);
+    }
+    if (!getProvinceBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(40, province_);
+    }
+    if (!getCityBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(41, city_);
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse)) {
+      return super.equals(obj);
+    }
+    com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse other = (com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse) obj;
+
+    if (getU1HourExpCnt()
+        != other.getU1HourExpCnt()) return false;
+    if (getU1HourClickCnt()
+        != other.getU1HourClickCnt()) return false;
+    if (getU1HourShareCnt()
+        != other.getU1HourShareCnt()) return false;
+    if (getU1HourReturnCnt()
+        != other.getU1HourReturnCnt()) return false;
+    if (java.lang.Double.doubleToLongBits(getUCtr1Hour())
+        != java.lang.Double.doubleToLongBits(
+            other.getUCtr1Hour())) return false;
+    if (java.lang.Double.doubleToLongBits(getUStr1Hour())
+        != java.lang.Double.doubleToLongBits(
+            other.getUStr1Hour())) return false;
+    if (java.lang.Double.doubleToLongBits(getURov1Hour())
+        != java.lang.Double.doubleToLongBits(
+            other.getURov1Hour())) return false;
+    if (java.lang.Double.doubleToLongBits(getURos1Hour())
+        != java.lang.Double.doubleToLongBits(
+            other.getURos1Hour())) return false;
+    if (getUTodayExpCnt()
+        != other.getUTodayExpCnt()) return false;
+    if (getUTodayClickCnt()
+        != other.getUTodayClickCnt()) return false;
+    if (getUTodayShareCnt()
+        != other.getUTodayShareCnt()) return false;
+    if (getUTodayReturnCnt()
+        != other.getUTodayReturnCnt()) return false;
+    if (java.lang.Double.doubleToLongBits(getUCtrToday())
+        != java.lang.Double.doubleToLongBits(
+            other.getUCtrToday())) return false;
+    if (java.lang.Double.doubleToLongBits(getUStrToday())
+        != java.lang.Double.doubleToLongBits(
+            other.getUStrToday())) return false;
+    if (java.lang.Double.doubleToLongBits(getURovToday())
+        != java.lang.Double.doubleToLongBits(
+            other.getURovToday())) return false;
+    if (java.lang.Double.doubleToLongBits(getURosToday())
+        != java.lang.Double.doubleToLongBits(
+            other.getURosToday())) return false;
+    if (getU1DayExpCnt()
+        != other.getU1DayExpCnt()) return false;
+    if (getU1DayClickCnt()
+        != other.getU1DayClickCnt()) return false;
+    if (getU1DayShareCnt()
+        != other.getU1DayShareCnt()) return false;
+    if (getU1DayReturnCnt()
+        != other.getU1DayReturnCnt()) return false;
+    if (java.lang.Double.doubleToLongBits(getUCtr1Day())
+        != java.lang.Double.doubleToLongBits(
+            other.getUCtr1Day())) return false;
+    if (java.lang.Double.doubleToLongBits(getUStr1Day())
+        != java.lang.Double.doubleToLongBits(
+            other.getUStr1Day())) return false;
+    if (java.lang.Double.doubleToLongBits(getURov1Day())
+        != java.lang.Double.doubleToLongBits(
+            other.getURov1Day())) return false;
+    if (java.lang.Double.doubleToLongBits(getURos1Day())
+        != java.lang.Double.doubleToLongBits(
+            other.getURos1Day())) return false;
+    if (getU3DayExpCnt()
+        != other.getU3DayExpCnt()) return false;
+    if (getU3DayClickCnt()
+        != other.getU3DayClickCnt()) return false;
+    if (getU3DayShareCnt()
+        != other.getU3DayShareCnt()) return false;
+    if (getU3DayReturnCnt()
+        != other.getU3DayReturnCnt()) return false;
+    if (java.lang.Double.doubleToLongBits(getUCtr3Day())
+        != java.lang.Double.doubleToLongBits(
+            other.getUCtr3Day())) return false;
+    if (java.lang.Double.doubleToLongBits(getUStr3Day())
+        != java.lang.Double.doubleToLongBits(
+            other.getUStr3Day())) return false;
+    if (java.lang.Double.doubleToLongBits(getURov3Day())
+        != java.lang.Double.doubleToLongBits(
+            other.getURov3Day())) return false;
+    if (java.lang.Double.doubleToLongBits(getURos3Day())
+        != java.lang.Double.doubleToLongBits(
+            other.getURos3Day())) return false;
+    if (!getMid()
+        .equals(other.getMid())) return false;
+    if (!getMachineinfoBrand()
+        .equals(other.getMachineinfoBrand())) return false;
+    if (!getMachineinfoModel()
+        .equals(other.getMachineinfoModel())) return false;
+    if (!getMachineinfoSystem()
+        .equals(other.getMachineinfoSystem())) return false;
+    if (!getMachineinfoPlatform()
+        .equals(other.getMachineinfoPlatform())) return false;
+    if (!getGender()
+        .equals(other.getGender())) return false;
+    if (!getCountry()
+        .equals(other.getCountry())) return false;
+    if (!getProvince()
+        .equals(other.getProvince())) return false;
+    if (!getCity()
+        .equals(other.getCity())) 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) + U1HOUREXPCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getU1HourExpCnt());
+    hash = (37 * hash) + U1HOURCLICKCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getU1HourClickCnt());
+    hash = (37 * hash) + U1HOURSHARECNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getU1HourShareCnt());
+    hash = (37 * hash) + U1HOURRETURNCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getU1HourReturnCnt());
+    hash = (37 * hash) + UCTR1HOUR_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getUCtr1Hour()));
+    hash = (37 * hash) + USTR1HOUR_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getUStr1Hour()));
+    hash = (37 * hash) + UROV1HOUR_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getURov1Hour()));
+    hash = (37 * hash) + UROS1HOUR_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getURos1Hour()));
+    hash = (37 * hash) + UTODAYEXPCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getUTodayExpCnt());
+    hash = (37 * hash) + UTODAYCLICKCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getUTodayClickCnt());
+    hash = (37 * hash) + UTODAYSHARECNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getUTodayShareCnt());
+    hash = (37 * hash) + UTODAYRETURNCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getUTodayReturnCnt());
+    hash = (37 * hash) + UCTRTODAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getUCtrToday()));
+    hash = (37 * hash) + USTRTODAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getUStrToday()));
+    hash = (37 * hash) + UROVTODAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getURovToday()));
+    hash = (37 * hash) + UROSTODAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getURosToday()));
+    hash = (37 * hash) + U1DAYEXPCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getU1DayExpCnt());
+    hash = (37 * hash) + U1DAYCLICKCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getU1DayClickCnt());
+    hash = (37 * hash) + U1DAYSHARECNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getU1DayShareCnt());
+    hash = (37 * hash) + U1DAYRETURNCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getU1DayReturnCnt());
+    hash = (37 * hash) + UCTR1DAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getUCtr1Day()));
+    hash = (37 * hash) + USTR1DAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getUStr1Day()));
+    hash = (37 * hash) + UROV1DAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getURov1Day()));
+    hash = (37 * hash) + UROS1DAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getURos1Day()));
+    hash = (37 * hash) + U3DAYEXPCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getU3DayExpCnt());
+    hash = (37 * hash) + U3DAYCLICKCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getU3DayClickCnt());
+    hash = (37 * hash) + U3DAYSHARECNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getU3DayShareCnt());
+    hash = (37 * hash) + U3DAYRETURNCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getU3DayReturnCnt());
+    hash = (37 * hash) + UCTR3DAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getUCtr3Day()));
+    hash = (37 * hash) + USTR3DAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getUStr3Day()));
+    hash = (37 * hash) + UROV3DAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getURov3Day()));
+    hash = (37 * hash) + UROS3DAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getURos3Day()));
+    hash = (37 * hash) + MID_FIELD_NUMBER;
+    hash = (53 * hash) + getMid().hashCode();
+    hash = (37 * hash) + MACHINEINFOBRAND_FIELD_NUMBER;
+    hash = (53 * hash) + getMachineinfoBrand().hashCode();
+    hash = (37 * hash) + MACHINEINFOMODEL_FIELD_NUMBER;
+    hash = (53 * hash) + getMachineinfoModel().hashCode();
+    hash = (37 * hash) + MACHINEINFOSYSTEM_FIELD_NUMBER;
+    hash = (53 * hash) + getMachineinfoSystem().hashCode();
+    hash = (37 * hash) + MACHINEINFOPLATFORM_FIELD_NUMBER;
+    hash = (53 * hash) + getMachineinfoPlatform().hashCode();
+    hash = (37 * hash) + GENDER_FIELD_NUMBER;
+    hash = (53 * hash) + getGender().hashCode();
+    hash = (37 * hash) + COUNTRY_FIELD_NUMBER;
+    hash = (53 * hash) + getCountry().hashCode();
+    hash = (37 * hash) + PROVINCE_FIELD_NUMBER;
+    hash = (53 * hash) + getProvince().hashCode();
+    hash = (37 * hash) + CITY_FIELD_NUMBER;
+    hash = (53 * hash) + getCity().hashCode();
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse 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 GetUserFeatureInfoResponse}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:GetUserFeatureInfoResponse)
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponseOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureInfoResponse_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureInfoResponse_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse.class, com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse.Builder.class);
+    }
+
+    // Construct using com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse.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();
+      u1HourExpCnt_ = 0L;
+
+      u1HourClickCnt_ = 0L;
+
+      u1HourShareCnt_ = 0L;
+
+      u1HourReturnCnt_ = 0L;
+
+      uCtr1Hour_ = 0D;
+
+      uStr1Hour_ = 0D;
+
+      uRov1Hour_ = 0D;
+
+      uRos1Hour_ = 0D;
+
+      uTodayExpCnt_ = 0L;
+
+      uTodayClickCnt_ = 0L;
+
+      uTodayShareCnt_ = 0L;
+
+      uTodayReturnCnt_ = 0L;
+
+      uCtrToday_ = 0D;
+
+      uStrToday_ = 0D;
+
+      uRovToday_ = 0D;
+
+      uRosToday_ = 0D;
+
+      u1DayExpCnt_ = 0L;
+
+      u1DayClickCnt_ = 0L;
+
+      u1DayShareCnt_ = 0L;
+
+      u1DayReturnCnt_ = 0L;
+
+      uCtr1Day_ = 0D;
+
+      uStr1Day_ = 0D;
+
+      uRov1Day_ = 0D;
+
+      uRos1Day_ = 0D;
+
+      u3DayExpCnt_ = 0L;
+
+      u3DayClickCnt_ = 0L;
+
+      u3DayShareCnt_ = 0L;
+
+      u3DayReturnCnt_ = 0L;
+
+      uCtr3Day_ = 0D;
+
+      uStr3Day_ = 0D;
+
+      uRov3Day_ = 0D;
+
+      uRos3Day_ = 0D;
+
+      mid_ = "";
+
+      machineinfoBrand_ = "";
+
+      machineinfoModel_ = "";
+
+      machineinfoSystem_ = "";
+
+      machineinfoPlatform_ = "";
+
+      gender_ = "";
+
+      country_ = "";
+
+      province_ = "";
+
+      city_ = "";
+
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetUserFeatureInfoResponse_descriptor;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse build() {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse buildPartial() {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse result = new com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse(this);
+      result.u1HourExpCnt_ = u1HourExpCnt_;
+      result.u1HourClickCnt_ = u1HourClickCnt_;
+      result.u1HourShareCnt_ = u1HourShareCnt_;
+      result.u1HourReturnCnt_ = u1HourReturnCnt_;
+      result.uCtr1Hour_ = uCtr1Hour_;
+      result.uStr1Hour_ = uStr1Hour_;
+      result.uRov1Hour_ = uRov1Hour_;
+      result.uRos1Hour_ = uRos1Hour_;
+      result.uTodayExpCnt_ = uTodayExpCnt_;
+      result.uTodayClickCnt_ = uTodayClickCnt_;
+      result.uTodayShareCnt_ = uTodayShareCnt_;
+      result.uTodayReturnCnt_ = uTodayReturnCnt_;
+      result.uCtrToday_ = uCtrToday_;
+      result.uStrToday_ = uStrToday_;
+      result.uRovToday_ = uRovToday_;
+      result.uRosToday_ = uRosToday_;
+      result.u1DayExpCnt_ = u1DayExpCnt_;
+      result.u1DayClickCnt_ = u1DayClickCnt_;
+      result.u1DayShareCnt_ = u1DayShareCnt_;
+      result.u1DayReturnCnt_ = u1DayReturnCnt_;
+      result.uCtr1Day_ = uCtr1Day_;
+      result.uStr1Day_ = uStr1Day_;
+      result.uRov1Day_ = uRov1Day_;
+      result.uRos1Day_ = uRos1Day_;
+      result.u3DayExpCnt_ = u3DayExpCnt_;
+      result.u3DayClickCnt_ = u3DayClickCnt_;
+      result.u3DayShareCnt_ = u3DayShareCnt_;
+      result.u3DayReturnCnt_ = u3DayReturnCnt_;
+      result.uCtr3Day_ = uCtr3Day_;
+      result.uStr3Day_ = uStr3Day_;
+      result.uRov3Day_ = uRov3Day_;
+      result.uRos3Day_ = uRos3Day_;
+      result.mid_ = mid_;
+      result.machineinfoBrand_ = machineinfoBrand_;
+      result.machineinfoModel_ = machineinfoModel_;
+      result.machineinfoSystem_ = machineinfoSystem_;
+      result.machineinfoPlatform_ = machineinfoPlatform_;
+      result.gender_ = gender_;
+      result.country_ = country_;
+      result.province_ = province_;
+      result.city_ = city_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse) {
+        return mergeFrom((com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse other) {
+      if (other == com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse.getDefaultInstance()) return this;
+      if (other.getU1HourExpCnt() != 0L) {
+        setU1HourExpCnt(other.getU1HourExpCnt());
+      }
+      if (other.getU1HourClickCnt() != 0L) {
+        setU1HourClickCnt(other.getU1HourClickCnt());
+      }
+      if (other.getU1HourShareCnt() != 0L) {
+        setU1HourShareCnt(other.getU1HourShareCnt());
+      }
+      if (other.getU1HourReturnCnt() != 0L) {
+        setU1HourReturnCnt(other.getU1HourReturnCnt());
+      }
+      if (other.getUCtr1Hour() != 0D) {
+        setUCtr1Hour(other.getUCtr1Hour());
+      }
+      if (other.getUStr1Hour() != 0D) {
+        setUStr1Hour(other.getUStr1Hour());
+      }
+      if (other.getURov1Hour() != 0D) {
+        setURov1Hour(other.getURov1Hour());
+      }
+      if (other.getURos1Hour() != 0D) {
+        setURos1Hour(other.getURos1Hour());
+      }
+      if (other.getUTodayExpCnt() != 0L) {
+        setUTodayExpCnt(other.getUTodayExpCnt());
+      }
+      if (other.getUTodayClickCnt() != 0L) {
+        setUTodayClickCnt(other.getUTodayClickCnt());
+      }
+      if (other.getUTodayShareCnt() != 0L) {
+        setUTodayShareCnt(other.getUTodayShareCnt());
+      }
+      if (other.getUTodayReturnCnt() != 0L) {
+        setUTodayReturnCnt(other.getUTodayReturnCnt());
+      }
+      if (other.getUCtrToday() != 0D) {
+        setUCtrToday(other.getUCtrToday());
+      }
+      if (other.getUStrToday() != 0D) {
+        setUStrToday(other.getUStrToday());
+      }
+      if (other.getURovToday() != 0D) {
+        setURovToday(other.getURovToday());
+      }
+      if (other.getURosToday() != 0D) {
+        setURosToday(other.getURosToday());
+      }
+      if (other.getU1DayExpCnt() != 0L) {
+        setU1DayExpCnt(other.getU1DayExpCnt());
+      }
+      if (other.getU1DayClickCnt() != 0L) {
+        setU1DayClickCnt(other.getU1DayClickCnt());
+      }
+      if (other.getU1DayShareCnt() != 0L) {
+        setU1DayShareCnt(other.getU1DayShareCnt());
+      }
+      if (other.getU1DayReturnCnt() != 0L) {
+        setU1DayReturnCnt(other.getU1DayReturnCnt());
+      }
+      if (other.getUCtr1Day() != 0D) {
+        setUCtr1Day(other.getUCtr1Day());
+      }
+      if (other.getUStr1Day() != 0D) {
+        setUStr1Day(other.getUStr1Day());
+      }
+      if (other.getURov1Day() != 0D) {
+        setURov1Day(other.getURov1Day());
+      }
+      if (other.getURos1Day() != 0D) {
+        setURos1Day(other.getURos1Day());
+      }
+      if (other.getU3DayExpCnt() != 0L) {
+        setU3DayExpCnt(other.getU3DayExpCnt());
+      }
+      if (other.getU3DayClickCnt() != 0L) {
+        setU3DayClickCnt(other.getU3DayClickCnt());
+      }
+      if (other.getU3DayShareCnt() != 0L) {
+        setU3DayShareCnt(other.getU3DayShareCnt());
+      }
+      if (other.getU3DayReturnCnt() != 0L) {
+        setU3DayReturnCnt(other.getU3DayReturnCnt());
+      }
+      if (other.getUCtr3Day() != 0D) {
+        setUCtr3Day(other.getUCtr3Day());
+      }
+      if (other.getUStr3Day() != 0D) {
+        setUStr3Day(other.getUStr3Day());
+      }
+      if (other.getURov3Day() != 0D) {
+        setURov3Day(other.getURov3Day());
+      }
+      if (other.getURos3Day() != 0D) {
+        setURos3Day(other.getURos3Day());
+      }
+      if (!other.getMid().isEmpty()) {
+        mid_ = other.mid_;
+        onChanged();
+      }
+      if (!other.getMachineinfoBrand().isEmpty()) {
+        machineinfoBrand_ = other.machineinfoBrand_;
+        onChanged();
+      }
+      if (!other.getMachineinfoModel().isEmpty()) {
+        machineinfoModel_ = other.machineinfoModel_;
+        onChanged();
+      }
+      if (!other.getMachineinfoSystem().isEmpty()) {
+        machineinfoSystem_ = other.machineinfoSystem_;
+        onChanged();
+      }
+      if (!other.getMachineinfoPlatform().isEmpty()) {
+        machineinfoPlatform_ = other.machineinfoPlatform_;
+        onChanged();
+      }
+      if (!other.getGender().isEmpty()) {
+        gender_ = other.gender_;
+        onChanged();
+      }
+      if (!other.getCountry().isEmpty()) {
+        country_ = other.country_;
+        onChanged();
+      }
+      if (!other.getProvince().isEmpty()) {
+        province_ = other.province_;
+        onChanged();
+      }
+      if (!other.getCity().isEmpty()) {
+        city_ = other.city_;
+        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.feature.model.feature.GetUserFeatureInfoResponse parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private long u1HourExpCnt_ ;
+    /**
+     * <pre>
+     *过去一小时
+     * </pre>
+     *
+     * <code>int64 u1hourExpCnt = 1;</code>
+     * @return The u1hourExpCnt.
+     */
+    @java.lang.Override
+    public long getU1HourExpCnt() {
+      return u1HourExpCnt_;
+    }
+    /**
+     * <pre>
+     *过去一小时
+     * </pre>
+     *
+     * <code>int64 u1hourExpCnt = 1;</code>
+     * @param value The u1hourExpCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setU1HourExpCnt(long value) {
+      
+      u1HourExpCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     *过去一小时
+     * </pre>
+     *
+     * <code>int64 u1hourExpCnt = 1;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearU1HourExpCnt() {
+      
+      u1HourExpCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long u1HourClickCnt_ ;
+    /**
+     * <code>int64 u1hourClickCnt = 2;</code>
+     * @return The u1hourClickCnt.
+     */
+    @java.lang.Override
+    public long getU1HourClickCnt() {
+      return u1HourClickCnt_;
+    }
+    /**
+     * <code>int64 u1hourClickCnt = 2;</code>
+     * @param value The u1hourClickCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setU1HourClickCnt(long value) {
+      
+      u1HourClickCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 u1hourClickCnt = 2;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearU1HourClickCnt() {
+      
+      u1HourClickCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long u1HourShareCnt_ ;
+    /**
+     * <code>int64 u1hourShareCnt = 3;</code>
+     * @return The u1hourShareCnt.
+     */
+    @java.lang.Override
+    public long getU1HourShareCnt() {
+      return u1HourShareCnt_;
+    }
+    /**
+     * <code>int64 u1hourShareCnt = 3;</code>
+     * @param value The u1hourShareCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setU1HourShareCnt(long value) {
+      
+      u1HourShareCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 u1hourShareCnt = 3;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearU1HourShareCnt() {
+      
+      u1HourShareCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long u1HourReturnCnt_ ;
+    /**
+     * <code>int64 u1hourReturnCnt = 4;</code>
+     * @return The u1hourReturnCnt.
+     */
+    @java.lang.Override
+    public long getU1HourReturnCnt() {
+      return u1HourReturnCnt_;
+    }
+    /**
+     * <code>int64 u1hourReturnCnt = 4;</code>
+     * @param value The u1hourReturnCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setU1HourReturnCnt(long value) {
+      
+      u1HourReturnCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 u1hourReturnCnt = 4;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearU1HourReturnCnt() {
+      
+      u1HourReturnCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private double uCtr1Hour_ ;
+    /**
+     * <code>double uCtr1hour = 5;</code>
+     * @return The uCtr1hour.
+     */
+    @java.lang.Override
+    public double getUCtr1Hour() {
+      return uCtr1Hour_;
+    }
+    /**
+     * <code>double uCtr1hour = 5;</code>
+     * @param value The uCtr1hour to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUCtr1Hour(double value) {
+      
+      uCtr1Hour_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double uCtr1hour = 5;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUCtr1Hour() {
+      
+      uCtr1Hour_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double uStr1Hour_ ;
+    /**
+     * <code>double uStr1hour = 6;</code>
+     * @return The uStr1hour.
+     */
+    @java.lang.Override
+    public double getUStr1Hour() {
+      return uStr1Hour_;
+    }
+    /**
+     * <code>double uStr1hour = 6;</code>
+     * @param value The uStr1hour to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUStr1Hour(double value) {
+      
+      uStr1Hour_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double uStr1hour = 6;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUStr1Hour() {
+      
+      uStr1Hour_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double uRov1Hour_ ;
+    /**
+     * <code>double uRov1hour = 7;</code>
+     * @return The uRov1hour.
+     */
+    @java.lang.Override
+    public double getURov1Hour() {
+      return uRov1Hour_;
+    }
+    /**
+     * <code>double uRov1hour = 7;</code>
+     * @param value The uRov1hour to set.
+     * @return This builder for chaining.
+     */
+    public Builder setURov1Hour(double value) {
+      
+      uRov1Hour_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double uRov1hour = 7;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearURov1Hour() {
+      
+      uRov1Hour_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double uRos1Hour_ ;
+    /**
+     * <code>double uRos1hour = 8;</code>
+     * @return The uRos1hour.
+     */
+    @java.lang.Override
+    public double getURos1Hour() {
+      return uRos1Hour_;
+    }
+    /**
+     * <code>double uRos1hour = 8;</code>
+     * @param value The uRos1hour to set.
+     * @return This builder for chaining.
+     */
+    public Builder setURos1Hour(double value) {
+      
+      uRos1Hour_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double uRos1hour = 8;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearURos1Hour() {
+      
+      uRos1Hour_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private long uTodayExpCnt_ ;
+    /**
+     * <pre>
+     *今天
+     * </pre>
+     *
+     * <code>int64 uTodayExpCnt = 9;</code>
+     * @return The uTodayExpCnt.
+     */
+    @java.lang.Override
+    public long getUTodayExpCnt() {
+      return uTodayExpCnt_;
+    }
+    /**
+     * <pre>
+     *今天
+     * </pre>
+     *
+     * <code>int64 uTodayExpCnt = 9;</code>
+     * @param value The uTodayExpCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUTodayExpCnt(long value) {
+      
+      uTodayExpCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     *今天
+     * </pre>
+     *
+     * <code>int64 uTodayExpCnt = 9;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUTodayExpCnt() {
+      
+      uTodayExpCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long uTodayClickCnt_ ;
+    /**
+     * <code>int64 uTodayClickCnt = 10;</code>
+     * @return The uTodayClickCnt.
+     */
+    @java.lang.Override
+    public long getUTodayClickCnt() {
+      return uTodayClickCnt_;
+    }
+    /**
+     * <code>int64 uTodayClickCnt = 10;</code>
+     * @param value The uTodayClickCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUTodayClickCnt(long value) {
+      
+      uTodayClickCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 uTodayClickCnt = 10;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUTodayClickCnt() {
+      
+      uTodayClickCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long uTodayShareCnt_ ;
+    /**
+     * <code>int64 uTodayShareCnt = 11;</code>
+     * @return The uTodayShareCnt.
+     */
+    @java.lang.Override
+    public long getUTodayShareCnt() {
+      return uTodayShareCnt_;
+    }
+    /**
+     * <code>int64 uTodayShareCnt = 11;</code>
+     * @param value The uTodayShareCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUTodayShareCnt(long value) {
+      
+      uTodayShareCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 uTodayShareCnt = 11;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUTodayShareCnt() {
+      
+      uTodayShareCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long uTodayReturnCnt_ ;
+    /**
+     * <code>int64 uTodayReturnCnt = 12;</code>
+     * @return The uTodayReturnCnt.
+     */
+    @java.lang.Override
+    public long getUTodayReturnCnt() {
+      return uTodayReturnCnt_;
+    }
+    /**
+     * <code>int64 uTodayReturnCnt = 12;</code>
+     * @param value The uTodayReturnCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUTodayReturnCnt(long value) {
+      
+      uTodayReturnCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 uTodayReturnCnt = 12;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUTodayReturnCnt() {
+      
+      uTodayReturnCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private double uCtrToday_ ;
+    /**
+     * <code>double uCtrToday = 13;</code>
+     * @return The uCtrToday.
+     */
+    @java.lang.Override
+    public double getUCtrToday() {
+      return uCtrToday_;
+    }
+    /**
+     * <code>double uCtrToday = 13;</code>
+     * @param value The uCtrToday to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUCtrToday(double value) {
+      
+      uCtrToday_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double uCtrToday = 13;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUCtrToday() {
+      
+      uCtrToday_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double uStrToday_ ;
+    /**
+     * <code>double uStrToday = 14;</code>
+     * @return The uStrToday.
+     */
+    @java.lang.Override
+    public double getUStrToday() {
+      return uStrToday_;
+    }
+    /**
+     * <code>double uStrToday = 14;</code>
+     * @param value The uStrToday to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUStrToday(double value) {
+      
+      uStrToday_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double uStrToday = 14;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUStrToday() {
+      
+      uStrToday_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double uRovToday_ ;
+    /**
+     * <code>double uRovToday = 15;</code>
+     * @return The uRovToday.
+     */
+    @java.lang.Override
+    public double getURovToday() {
+      return uRovToday_;
+    }
+    /**
+     * <code>double uRovToday = 15;</code>
+     * @param value The uRovToday to set.
+     * @return This builder for chaining.
+     */
+    public Builder setURovToday(double value) {
+      
+      uRovToday_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double uRovToday = 15;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearURovToday() {
+      
+      uRovToday_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double uRosToday_ ;
+    /**
+     * <code>double uRosToday = 16;</code>
+     * @return The uRosToday.
+     */
+    @java.lang.Override
+    public double getURosToday() {
+      return uRosToday_;
+    }
+    /**
+     * <code>double uRosToday = 16;</code>
+     * @param value The uRosToday to set.
+     * @return This builder for chaining.
+     */
+    public Builder setURosToday(double value) {
+      
+      uRosToday_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double uRosToday = 16;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearURosToday() {
+      
+      uRosToday_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private long u1DayExpCnt_ ;
+    /**
+     * <pre>
+     *过去一天
+     * </pre>
+     *
+     * <code>int64 u1dayExpCnt = 17;</code>
+     * @return The u1dayExpCnt.
+     */
+    @java.lang.Override
+    public long getU1DayExpCnt() {
+      return u1DayExpCnt_;
+    }
+    /**
+     * <pre>
+     *过去一天
+     * </pre>
+     *
+     * <code>int64 u1dayExpCnt = 17;</code>
+     * @param value The u1dayExpCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setU1DayExpCnt(long value) {
+      
+      u1DayExpCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     *过去一天
+     * </pre>
+     *
+     * <code>int64 u1dayExpCnt = 17;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearU1DayExpCnt() {
+      
+      u1DayExpCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long u1DayClickCnt_ ;
+    /**
+     * <code>int64 u1dayClickCnt = 18;</code>
+     * @return The u1dayClickCnt.
+     */
+    @java.lang.Override
+    public long getU1DayClickCnt() {
+      return u1DayClickCnt_;
+    }
+    /**
+     * <code>int64 u1dayClickCnt = 18;</code>
+     * @param value The u1dayClickCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setU1DayClickCnt(long value) {
+      
+      u1DayClickCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 u1dayClickCnt = 18;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearU1DayClickCnt() {
+      
+      u1DayClickCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long u1DayShareCnt_ ;
+    /**
+     * <code>int64 u1dayShareCnt = 19;</code>
+     * @return The u1dayShareCnt.
+     */
+    @java.lang.Override
+    public long getU1DayShareCnt() {
+      return u1DayShareCnt_;
+    }
+    /**
+     * <code>int64 u1dayShareCnt = 19;</code>
+     * @param value The u1dayShareCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setU1DayShareCnt(long value) {
+      
+      u1DayShareCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 u1dayShareCnt = 19;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearU1DayShareCnt() {
+      
+      u1DayShareCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long u1DayReturnCnt_ ;
+    /**
+     * <code>int64 u1dayReturnCnt = 20;</code>
+     * @return The u1dayReturnCnt.
+     */
+    @java.lang.Override
+    public long getU1DayReturnCnt() {
+      return u1DayReturnCnt_;
+    }
+    /**
+     * <code>int64 u1dayReturnCnt = 20;</code>
+     * @param value The u1dayReturnCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setU1DayReturnCnt(long value) {
+      
+      u1DayReturnCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 u1dayReturnCnt = 20;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearU1DayReturnCnt() {
+      
+      u1DayReturnCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private double uCtr1Day_ ;
+    /**
+     * <code>double uCtr1day = 21;</code>
+     * @return The uCtr1day.
+     */
+    @java.lang.Override
+    public double getUCtr1Day() {
+      return uCtr1Day_;
+    }
+    /**
+     * <code>double uCtr1day = 21;</code>
+     * @param value The uCtr1day to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUCtr1Day(double value) {
+      
+      uCtr1Day_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double uCtr1day = 21;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUCtr1Day() {
+      
+      uCtr1Day_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double uStr1Day_ ;
+    /**
+     * <code>double uStr1day = 22;</code>
+     * @return The uStr1day.
+     */
+    @java.lang.Override
+    public double getUStr1Day() {
+      return uStr1Day_;
+    }
+    /**
+     * <code>double uStr1day = 22;</code>
+     * @param value The uStr1day to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUStr1Day(double value) {
+      
+      uStr1Day_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double uStr1day = 22;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUStr1Day() {
+      
+      uStr1Day_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double uRov1Day_ ;
+    /**
+     * <code>double uRov1day = 23;</code>
+     * @return The uRov1day.
+     */
+    @java.lang.Override
+    public double getURov1Day() {
+      return uRov1Day_;
+    }
+    /**
+     * <code>double uRov1day = 23;</code>
+     * @param value The uRov1day to set.
+     * @return This builder for chaining.
+     */
+    public Builder setURov1Day(double value) {
+      
+      uRov1Day_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double uRov1day = 23;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearURov1Day() {
+      
+      uRov1Day_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double uRos1Day_ ;
+    /**
+     * <code>double uRos1day = 24;</code>
+     * @return The uRos1day.
+     */
+    @java.lang.Override
+    public double getURos1Day() {
+      return uRos1Day_;
+    }
+    /**
+     * <code>double uRos1day = 24;</code>
+     * @param value The uRos1day to set.
+     * @return This builder for chaining.
+     */
+    public Builder setURos1Day(double value) {
+      
+      uRos1Day_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double uRos1day = 24;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearURos1Day() {
+      
+      uRos1Day_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private long u3DayExpCnt_ ;
+    /**
+     * <pre>
+     *过去三天
+     * </pre>
+     *
+     * <code>int64 u3dayExpCnt = 25;</code>
+     * @return The u3dayExpCnt.
+     */
+    @java.lang.Override
+    public long getU3DayExpCnt() {
+      return u3DayExpCnt_;
+    }
+    /**
+     * <pre>
+     *过去三天
+     * </pre>
+     *
+     * <code>int64 u3dayExpCnt = 25;</code>
+     * @param value The u3dayExpCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setU3DayExpCnt(long value) {
+      
+      u3DayExpCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     *过去三天
+     * </pre>
+     *
+     * <code>int64 u3dayExpCnt = 25;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearU3DayExpCnt() {
+      
+      u3DayExpCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long u3DayClickCnt_ ;
+    /**
+     * <code>int64 u3dayClickCnt = 26;</code>
+     * @return The u3dayClickCnt.
+     */
+    @java.lang.Override
+    public long getU3DayClickCnt() {
+      return u3DayClickCnt_;
+    }
+    /**
+     * <code>int64 u3dayClickCnt = 26;</code>
+     * @param value The u3dayClickCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setU3DayClickCnt(long value) {
+      
+      u3DayClickCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 u3dayClickCnt = 26;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearU3DayClickCnt() {
+      
+      u3DayClickCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long u3DayShareCnt_ ;
+    /**
+     * <code>int64 u3dayShareCnt = 27;</code>
+     * @return The u3dayShareCnt.
+     */
+    @java.lang.Override
+    public long getU3DayShareCnt() {
+      return u3DayShareCnt_;
+    }
+    /**
+     * <code>int64 u3dayShareCnt = 27;</code>
+     * @param value The u3dayShareCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setU3DayShareCnt(long value) {
+      
+      u3DayShareCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 u3dayShareCnt = 27;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearU3DayShareCnt() {
+      
+      u3DayShareCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long u3DayReturnCnt_ ;
+    /**
+     * <code>int64 u3dayReturnCnt = 28;</code>
+     * @return The u3dayReturnCnt.
+     */
+    @java.lang.Override
+    public long getU3DayReturnCnt() {
+      return u3DayReturnCnt_;
+    }
+    /**
+     * <code>int64 u3dayReturnCnt = 28;</code>
+     * @param value The u3dayReturnCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setU3DayReturnCnt(long value) {
+      
+      u3DayReturnCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 u3dayReturnCnt = 28;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearU3DayReturnCnt() {
+      
+      u3DayReturnCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private double uCtr3Day_ ;
+    /**
+     * <code>double uCtr3day = 29;</code>
+     * @return The uCtr3day.
+     */
+    @java.lang.Override
+    public double getUCtr3Day() {
+      return uCtr3Day_;
+    }
+    /**
+     * <code>double uCtr3day = 29;</code>
+     * @param value The uCtr3day to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUCtr3Day(double value) {
+      
+      uCtr3Day_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double uCtr3day = 29;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUCtr3Day() {
+      
+      uCtr3Day_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double uStr3Day_ ;
+    /**
+     * <code>double uStr3day = 30;</code>
+     * @return The uStr3day.
+     */
+    @java.lang.Override
+    public double getUStr3Day() {
+      return uStr3Day_;
+    }
+    /**
+     * <code>double uStr3day = 30;</code>
+     * @param value The uStr3day to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUStr3Day(double value) {
+      
+      uStr3Day_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double uStr3day = 30;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUStr3Day() {
+      
+      uStr3Day_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double uRov3Day_ ;
+    /**
+     * <code>double uRov3day = 31;</code>
+     * @return The uRov3day.
+     */
+    @java.lang.Override
+    public double getURov3Day() {
+      return uRov3Day_;
+    }
+    /**
+     * <code>double uRov3day = 31;</code>
+     * @param value The uRov3day to set.
+     * @return This builder for chaining.
+     */
+    public Builder setURov3Day(double value) {
+      
+      uRov3Day_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double uRov3day = 31;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearURov3Day() {
+      
+      uRov3Day_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double uRos3Day_ ;
+    /**
+     * <code>double uRos3day = 32;</code>
+     * @return The uRos3day.
+     */
+    @java.lang.Override
+    public double getURos3Day() {
+      return uRos3Day_;
+    }
+    /**
+     * <code>double uRos3day = 32;</code>
+     * @param value The uRos3day to set.
+     * @return This builder for chaining.
+     */
+    public Builder setURos3Day(double value) {
+      
+      uRos3Day_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double uRos3day = 32;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearURos3Day() {
+      
+      uRos3Day_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object mid_ = "";
+    /**
+     * <code>string mid = 33;</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 = 33;</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 = 33;</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 = 33;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMid() {
+      
+      mid_ = getDefaultInstance().getMid();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string mid = 33;</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 machineinfoBrand_ = "";
+    /**
+     * <code>string machineinfoBrand = 34;</code>
+     * @return The machineinfoBrand.
+     */
+    public java.lang.String getMachineinfoBrand() {
+      java.lang.Object ref = machineinfoBrand_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        machineinfoBrand_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string machineinfoBrand = 34;</code>
+     * @return The bytes for machineinfoBrand.
+     */
+    public com.google.protobuf.ByteString
+        getMachineinfoBrandBytes() {
+      java.lang.Object ref = machineinfoBrand_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        machineinfoBrand_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string machineinfoBrand = 34;</code>
+     * @param value The machineinfoBrand to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMachineinfoBrand(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      machineinfoBrand_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string machineinfoBrand = 34;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMachineinfoBrand() {
+      
+      machineinfoBrand_ = getDefaultInstance().getMachineinfoBrand();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string machineinfoBrand = 34;</code>
+     * @param value The bytes for machineinfoBrand to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMachineinfoBrandBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      machineinfoBrand_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object machineinfoModel_ = "";
+    /**
+     * <code>string machineinfoModel = 35;</code>
+     * @return The machineinfoModel.
+     */
+    public java.lang.String getMachineinfoModel() {
+      java.lang.Object ref = machineinfoModel_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        machineinfoModel_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string machineinfoModel = 35;</code>
+     * @return The bytes for machineinfoModel.
+     */
+    public com.google.protobuf.ByteString
+        getMachineinfoModelBytes() {
+      java.lang.Object ref = machineinfoModel_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        machineinfoModel_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string machineinfoModel = 35;</code>
+     * @param value The machineinfoModel to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMachineinfoModel(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      machineinfoModel_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string machineinfoModel = 35;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMachineinfoModel() {
+      
+      machineinfoModel_ = getDefaultInstance().getMachineinfoModel();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string machineinfoModel = 35;</code>
+     * @param value The bytes for machineinfoModel to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMachineinfoModelBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      machineinfoModel_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object machineinfoSystem_ = "";
+    /**
+     * <code>string machineinfoSystem = 36;</code>
+     * @return The machineinfoSystem.
+     */
+    public java.lang.String getMachineinfoSystem() {
+      java.lang.Object ref = machineinfoSystem_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        machineinfoSystem_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string machineinfoSystem = 36;</code>
+     * @return The bytes for machineinfoSystem.
+     */
+    public com.google.protobuf.ByteString
+        getMachineinfoSystemBytes() {
+      java.lang.Object ref = machineinfoSystem_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        machineinfoSystem_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string machineinfoSystem = 36;</code>
+     * @param value The machineinfoSystem to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMachineinfoSystem(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      machineinfoSystem_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string machineinfoSystem = 36;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMachineinfoSystem() {
+      
+      machineinfoSystem_ = getDefaultInstance().getMachineinfoSystem();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string machineinfoSystem = 36;</code>
+     * @param value The bytes for machineinfoSystem to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMachineinfoSystemBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      machineinfoSystem_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object machineinfoPlatform_ = "";
+    /**
+     * <code>string machineinfoPlatform = 37;</code>
+     * @return The machineinfoPlatform.
+     */
+    public java.lang.String getMachineinfoPlatform() {
+      java.lang.Object ref = machineinfoPlatform_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        machineinfoPlatform_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string machineinfoPlatform = 37;</code>
+     * @return The bytes for machineinfoPlatform.
+     */
+    public com.google.protobuf.ByteString
+        getMachineinfoPlatformBytes() {
+      java.lang.Object ref = machineinfoPlatform_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        machineinfoPlatform_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string machineinfoPlatform = 37;</code>
+     * @param value The machineinfoPlatform to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMachineinfoPlatform(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      machineinfoPlatform_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string machineinfoPlatform = 37;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearMachineinfoPlatform() {
+      
+      machineinfoPlatform_ = getDefaultInstance().getMachineinfoPlatform();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string machineinfoPlatform = 37;</code>
+     * @param value The bytes for machineinfoPlatform to set.
+     * @return This builder for chaining.
+     */
+    public Builder setMachineinfoPlatformBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      machineinfoPlatform_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object gender_ = "";
+    /**
+     * <code>string gender = 38;</code>
+     * @return The gender.
+     */
+    public java.lang.String getGender() {
+      java.lang.Object ref = gender_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        gender_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string gender = 38;</code>
+     * @return The bytes for gender.
+     */
+    public com.google.protobuf.ByteString
+        getGenderBytes() {
+      java.lang.Object ref = gender_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        gender_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string gender = 38;</code>
+     * @param value The gender to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGender(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      gender_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string gender = 38;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGender() {
+      
+      gender_ = getDefaultInstance().getGender();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string gender = 38;</code>
+     * @param value The bytes for gender to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGenderBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      gender_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object country_ = "";
+    /**
+     * <code>string country = 39;</code>
+     * @return The country.
+     */
+    public java.lang.String getCountry() {
+      java.lang.Object ref = country_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        country_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string country = 39;</code>
+     * @return The bytes for country.
+     */
+    public com.google.protobuf.ByteString
+        getCountryBytes() {
+      java.lang.Object ref = country_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        country_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string country = 39;</code>
+     * @param value The country to set.
+     * @return This builder for chaining.
+     */
+    public Builder setCountry(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      country_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string country = 39;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearCountry() {
+      
+      country_ = getDefaultInstance().getCountry();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string country = 39;</code>
+     * @param value The bytes for country to set.
+     * @return This builder for chaining.
+     */
+    public Builder setCountryBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      country_ = value;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object province_ = "";
+    /**
+     * <code>string province = 40;</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 = 40;</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 = 40;</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 = 40;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearProvince() {
+      
+      province_ = getDefaultInstance().getProvince();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string province = 40;</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 java.lang.Object city_ = "";
+    /**
+     * <code>string city = 41;</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 = 41;</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 = 41;</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 = 41;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearCity() {
+      
+      city_ = getDefaultInstance().getCity();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string city = 41;</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;
+    }
+    @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:GetUserFeatureInfoResponse)
+  }
+
+  // @@protoc_insertion_point(class_scope:GetUserFeatureInfoResponse)
+  private static final com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse();
+  }
+
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<GetUserFeatureInfoResponse>
+      PARSER = new com.google.protobuf.AbstractParser<GetUserFeatureInfoResponse>() {
+    @java.lang.Override
+    public GetUserFeatureInfoResponse parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return new GetUserFeatureInfoResponse(input, extensionRegistry);
+    }
+  };
+
+  public static com.google.protobuf.Parser<GetUserFeatureInfoResponse> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<GetUserFeatureInfoResponse> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.feature.model.feature.GetUserFeatureInfoResponse getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+

+ 325 - 0
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetUserFeatureInfoResponseOrBuilder.java

@@ -0,0 +1,325 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/feature/feature.proto
+
+package com.tzld.piaoquan.recommend.feature.model.feature;
+
+public interface GetUserFeatureInfoResponseOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:GetUserFeatureInfoResponse)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <pre>
+   *过去一小时
+   * </pre>
+   *
+   * <code>int64 u1hourExpCnt = 1;</code>
+   * @return The u1hourExpCnt.
+   */
+  long getU1HourExpCnt();
+
+  /**
+   * <code>int64 u1hourClickCnt = 2;</code>
+   * @return The u1hourClickCnt.
+   */
+  long getU1HourClickCnt();
+
+  /**
+   * <code>int64 u1hourShareCnt = 3;</code>
+   * @return The u1hourShareCnt.
+   */
+  long getU1HourShareCnt();
+
+  /**
+   * <code>int64 u1hourReturnCnt = 4;</code>
+   * @return The u1hourReturnCnt.
+   */
+  long getU1HourReturnCnt();
+
+  /**
+   * <code>double uCtr1hour = 5;</code>
+   * @return The uCtr1hour.
+   */
+  double getUCtr1Hour();
+
+  /**
+   * <code>double uStr1hour = 6;</code>
+   * @return The uStr1hour.
+   */
+  double getUStr1Hour();
+
+  /**
+   * <code>double uRov1hour = 7;</code>
+   * @return The uRov1hour.
+   */
+  double getURov1Hour();
+
+  /**
+   * <code>double uRos1hour = 8;</code>
+   * @return The uRos1hour.
+   */
+  double getURos1Hour();
+
+  /**
+   * <pre>
+   *今天
+   * </pre>
+   *
+   * <code>int64 uTodayExpCnt = 9;</code>
+   * @return The uTodayExpCnt.
+   */
+  long getUTodayExpCnt();
+
+  /**
+   * <code>int64 uTodayClickCnt = 10;</code>
+   * @return The uTodayClickCnt.
+   */
+  long getUTodayClickCnt();
+
+  /**
+   * <code>int64 uTodayShareCnt = 11;</code>
+   * @return The uTodayShareCnt.
+   */
+  long getUTodayShareCnt();
+
+  /**
+   * <code>int64 uTodayReturnCnt = 12;</code>
+   * @return The uTodayReturnCnt.
+   */
+  long getUTodayReturnCnt();
+
+  /**
+   * <code>double uCtrToday = 13;</code>
+   * @return The uCtrToday.
+   */
+  double getUCtrToday();
+
+  /**
+   * <code>double uStrToday = 14;</code>
+   * @return The uStrToday.
+   */
+  double getUStrToday();
+
+  /**
+   * <code>double uRovToday = 15;</code>
+   * @return The uRovToday.
+   */
+  double getURovToday();
+
+  /**
+   * <code>double uRosToday = 16;</code>
+   * @return The uRosToday.
+   */
+  double getURosToday();
+
+  /**
+   * <pre>
+   *过去一天
+   * </pre>
+   *
+   * <code>int64 u1dayExpCnt = 17;</code>
+   * @return The u1dayExpCnt.
+   */
+  long getU1DayExpCnt();
+
+  /**
+   * <code>int64 u1dayClickCnt = 18;</code>
+   * @return The u1dayClickCnt.
+   */
+  long getU1DayClickCnt();
+
+  /**
+   * <code>int64 u1dayShareCnt = 19;</code>
+   * @return The u1dayShareCnt.
+   */
+  long getU1DayShareCnt();
+
+  /**
+   * <code>int64 u1dayReturnCnt = 20;</code>
+   * @return The u1dayReturnCnt.
+   */
+  long getU1DayReturnCnt();
+
+  /**
+   * <code>double uCtr1day = 21;</code>
+   * @return The uCtr1day.
+   */
+  double getUCtr1Day();
+
+  /**
+   * <code>double uStr1day = 22;</code>
+   * @return The uStr1day.
+   */
+  double getUStr1Day();
+
+  /**
+   * <code>double uRov1day = 23;</code>
+   * @return The uRov1day.
+   */
+  double getURov1Day();
+
+  /**
+   * <code>double uRos1day = 24;</code>
+   * @return The uRos1day.
+   */
+  double getURos1Day();
+
+  /**
+   * <pre>
+   *过去三天
+   * </pre>
+   *
+   * <code>int64 u3dayExpCnt = 25;</code>
+   * @return The u3dayExpCnt.
+   */
+  long getU3DayExpCnt();
+
+  /**
+   * <code>int64 u3dayClickCnt = 26;</code>
+   * @return The u3dayClickCnt.
+   */
+  long getU3DayClickCnt();
+
+  /**
+   * <code>int64 u3dayShareCnt = 27;</code>
+   * @return The u3dayShareCnt.
+   */
+  long getU3DayShareCnt();
+
+  /**
+   * <code>int64 u3dayReturnCnt = 28;</code>
+   * @return The u3dayReturnCnt.
+   */
+  long getU3DayReturnCnt();
+
+  /**
+   * <code>double uCtr3day = 29;</code>
+   * @return The uCtr3day.
+   */
+  double getUCtr3Day();
+
+  /**
+   * <code>double uStr3day = 30;</code>
+   * @return The uStr3day.
+   */
+  double getUStr3Day();
+
+  /**
+   * <code>double uRov3day = 31;</code>
+   * @return The uRov3day.
+   */
+  double getURov3Day();
+
+  /**
+   * <code>double uRos3day = 32;</code>
+   * @return The uRos3day.
+   */
+  double getURos3Day();
+
+  /**
+   * <code>string mid = 33;</code>
+   * @return The mid.
+   */
+  java.lang.String getMid();
+  /**
+   * <code>string mid = 33;</code>
+   * @return The bytes for mid.
+   */
+  com.google.protobuf.ByteString
+      getMidBytes();
+
+  /**
+   * <code>string machineinfoBrand = 34;</code>
+   * @return The machineinfoBrand.
+   */
+  java.lang.String getMachineinfoBrand();
+  /**
+   * <code>string machineinfoBrand = 34;</code>
+   * @return The bytes for machineinfoBrand.
+   */
+  com.google.protobuf.ByteString
+      getMachineinfoBrandBytes();
+
+  /**
+   * <code>string machineinfoModel = 35;</code>
+   * @return The machineinfoModel.
+   */
+  java.lang.String getMachineinfoModel();
+  /**
+   * <code>string machineinfoModel = 35;</code>
+   * @return The bytes for machineinfoModel.
+   */
+  com.google.protobuf.ByteString
+      getMachineinfoModelBytes();
+
+  /**
+   * <code>string machineinfoSystem = 36;</code>
+   * @return The machineinfoSystem.
+   */
+  java.lang.String getMachineinfoSystem();
+  /**
+   * <code>string machineinfoSystem = 36;</code>
+   * @return The bytes for machineinfoSystem.
+   */
+  com.google.protobuf.ByteString
+      getMachineinfoSystemBytes();
+
+  /**
+   * <code>string machineinfoPlatform = 37;</code>
+   * @return The machineinfoPlatform.
+   */
+  java.lang.String getMachineinfoPlatform();
+  /**
+   * <code>string machineinfoPlatform = 37;</code>
+   * @return The bytes for machineinfoPlatform.
+   */
+  com.google.protobuf.ByteString
+      getMachineinfoPlatformBytes();
+
+  /**
+   * <code>string gender = 38;</code>
+   * @return The gender.
+   */
+  java.lang.String getGender();
+  /**
+   * <code>string gender = 38;</code>
+   * @return The bytes for gender.
+   */
+  com.google.protobuf.ByteString
+      getGenderBytes();
+
+  /**
+   * <code>string country = 39;</code>
+   * @return The country.
+   */
+  java.lang.String getCountry();
+  /**
+   * <code>string country = 39;</code>
+   * @return The bytes for country.
+   */
+  com.google.protobuf.ByteString
+      getCountryBytes();
+
+  /**
+   * <code>string province = 40;</code>
+   * @return The province.
+   */
+  java.lang.String getProvince();
+  /**
+   * <code>string province = 40;</code>
+   * @return The bytes for province.
+   */
+  com.google.protobuf.ByteString
+      getProvinceBytes();
+
+  /**
+   * <code>string city = 41;</code>
+   * @return The city.
+   */
+  java.lang.String getCity();
+  /**
+   * <code>string city = 41;</code>
+   * @return The bytes for city.
+   */
+  com.google.protobuf.ByteString
+      getCityBytes();
+}

+ 599 - 0
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetVideoFeatureInfoRequest.java

@@ -0,0 +1,599 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/feature/feature.proto
+
+package com.tzld.piaoquan.recommend.feature.model.feature;
+
+/**
+ * Protobuf type {@code GetVideoFeatureInfoRequest}
+ */
+public final class GetVideoFeatureInfoRequest extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:GetVideoFeatureInfoRequest)
+    GetVideoFeatureInfoRequestOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use GetVideoFeatureInfoRequest.newBuilder() to construct.
+  private GetVideoFeatureInfoRequest(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private GetVideoFeatureInfoRequest() {
+    videoIds_ = emptyLongList();
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new GetVideoFeatureInfoRequest();
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet
+  getUnknownFields() {
+    return this.unknownFields;
+  }
+  private GetVideoFeatureInfoRequest(
+      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 8: {
+            if (!((mutable_bitField0_ & 0x00000001) != 0)) {
+              videoIds_ = newLongList();
+              mutable_bitField0_ |= 0x00000001;
+            }
+            videoIds_.addLong(input.readInt64());
+            break;
+          }
+          case 10: {
+            int length = input.readRawVarint32();
+            int limit = input.pushLimit(length);
+            if (!((mutable_bitField0_ & 0x00000001) != 0) && input.getBytesUntilLimit() > 0) {
+              videoIds_ = newLongList();
+              mutable_bitField0_ |= 0x00000001;
+            }
+            while (input.getBytesUntilLimit() > 0) {
+              videoIds_.addLong(input.readInt64());
+            }
+            input.popLimit(limit);
+            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)) {
+        videoIds_.makeImmutable(); // C
+      }
+      this.unknownFields = unknownFields.build();
+      makeExtensionsImmutable();
+    }
+  }
+  public static final com.google.protobuf.Descriptors.Descriptor
+      getDescriptor() {
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureInfoRequest_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureInfoRequest_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest.class, com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest.Builder.class);
+  }
+
+  public static final int VIDEOIDS_FIELD_NUMBER = 1;
+  private com.google.protobuf.Internal.LongList videoIds_;
+  /**
+   * <code>repeated int64 videoIds = 1;</code>
+   * @return A list containing the videoIds.
+   */
+  @java.lang.Override
+  public java.util.List<java.lang.Long>
+      getVideoIdsList() {
+    return videoIds_;
+  }
+  /**
+   * <code>repeated int64 videoIds = 1;</code>
+   * @return The count of videoIds.
+   */
+  public int getVideoIdsCount() {
+    return videoIds_.size();
+  }
+  /**
+   * <code>repeated int64 videoIds = 1;</code>
+   * @param index The index of the element to return.
+   * @return The videoIds at the given index.
+   */
+  public long getVideoIds(int index) {
+    return videoIds_.getLong(index);
+  }
+  private int videoIdsMemoizedSerializedSize = -1;
+
+  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 {
+    getSerializedSize();
+    if (getVideoIdsList().size() > 0) {
+      output.writeUInt32NoTag(10);
+      output.writeUInt32NoTag(videoIdsMemoizedSerializedSize);
+    }
+    for (int i = 0; i < videoIds_.size(); i++) {
+      output.writeInt64NoTag(videoIds_.getLong(i));
+    }
+    unknownFields.writeTo(output);
+  }
+
+  @java.lang.Override
+  public int getSerializedSize() {
+    int size = memoizedSize;
+    if (size != -1) return size;
+
+    size = 0;
+    {
+      int dataSize = 0;
+      for (int i = 0; i < videoIds_.size(); i++) {
+        dataSize += com.google.protobuf.CodedOutputStream
+          .computeInt64SizeNoTag(videoIds_.getLong(i));
+      }
+      size += dataSize;
+      if (!getVideoIdsList().isEmpty()) {
+        size += 1;
+        size += com.google.protobuf.CodedOutputStream
+            .computeInt32SizeNoTag(dataSize);
+      }
+      videoIdsMemoizedSerializedSize = dataSize;
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest)) {
+      return super.equals(obj);
+    }
+    com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest other = (com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest) obj;
+
+    if (!getVideoIdsList()
+        .equals(other.getVideoIdsList())) 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 (getVideoIdsCount() > 0) {
+      hash = (37 * hash) + VIDEOIDS_FIELD_NUMBER;
+      hash = (53 * hash) + getVideoIdsList().hashCode();
+    }
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest 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 GetVideoFeatureInfoRequest}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:GetVideoFeatureInfoRequest)
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequestOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureInfoRequest_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureInfoRequest_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest.class, com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest.Builder.class);
+    }
+
+    // Construct using com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest.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();
+      videoIds_ = emptyLongList();
+      bitField0_ = (bitField0_ & ~0x00000001);
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureInfoRequest_descriptor;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest build() {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest buildPartial() {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest result = new com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest(this);
+      int from_bitField0_ = bitField0_;
+      if (((bitField0_ & 0x00000001) != 0)) {
+        videoIds_.makeImmutable();
+        bitField0_ = (bitField0_ & ~0x00000001);
+      }
+      result.videoIds_ = videoIds_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest) {
+        return mergeFrom((com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest other) {
+      if (other == com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest.getDefaultInstance()) return this;
+      if (!other.videoIds_.isEmpty()) {
+        if (videoIds_.isEmpty()) {
+          videoIds_ = other.videoIds_;
+          bitField0_ = (bitField0_ & ~0x00000001);
+        } else {
+          ensureVideoIdsIsMutable();
+          videoIds_.addAll(other.videoIds_);
+        }
+        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.feature.model.feature.GetVideoFeatureInfoRequest parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+    private int bitField0_;
+
+    private com.google.protobuf.Internal.LongList videoIds_ = emptyLongList();
+    private void ensureVideoIdsIsMutable() {
+      if (!((bitField0_ & 0x00000001) != 0)) {
+        videoIds_ = mutableCopy(videoIds_);
+        bitField0_ |= 0x00000001;
+       }
+    }
+    /**
+     * <code>repeated int64 videoIds = 1;</code>
+     * @return A list containing the videoIds.
+     */
+    public java.util.List<java.lang.Long>
+        getVideoIdsList() {
+      return ((bitField0_ & 0x00000001) != 0) ?
+               java.util.Collections.unmodifiableList(videoIds_) : videoIds_;
+    }
+    /**
+     * <code>repeated int64 videoIds = 1;</code>
+     * @return The count of videoIds.
+     */
+    public int getVideoIdsCount() {
+      return videoIds_.size();
+    }
+    /**
+     * <code>repeated int64 videoIds = 1;</code>
+     * @param index The index of the element to return.
+     * @return The videoIds at the given index.
+     */
+    public long getVideoIds(int index) {
+      return videoIds_.getLong(index);
+    }
+    /**
+     * <code>repeated int64 videoIds = 1;</code>
+     * @param index The index to set the value at.
+     * @param value The videoIds to set.
+     * @return This builder for chaining.
+     */
+    public Builder setVideoIds(
+        int index, long value) {
+      ensureVideoIdsIsMutable();
+      videoIds_.setLong(index, value);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>repeated int64 videoIds = 1;</code>
+     * @param value The videoIds to add.
+     * @return This builder for chaining.
+     */
+    public Builder addVideoIds(long value) {
+      ensureVideoIdsIsMutable();
+      videoIds_.addLong(value);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>repeated int64 videoIds = 1;</code>
+     * @param values The videoIds to add.
+     * @return This builder for chaining.
+     */
+    public Builder addAllVideoIds(
+        java.lang.Iterable<? extends java.lang.Long> values) {
+      ensureVideoIdsIsMutable();
+      com.google.protobuf.AbstractMessageLite.Builder.addAll(
+          values, videoIds_);
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>repeated int64 videoIds = 1;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearVideoIds() {
+      videoIds_ = emptyLongList();
+      bitField0_ = (bitField0_ & ~0x00000001);
+      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:GetVideoFeatureInfoRequest)
+  }
+
+  // @@protoc_insertion_point(class_scope:GetVideoFeatureInfoRequest)
+  private static final com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest();
+  }
+
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<GetVideoFeatureInfoRequest>
+      PARSER = new com.google.protobuf.AbstractParser<GetVideoFeatureInfoRequest>() {
+    @java.lang.Override
+    public GetVideoFeatureInfoRequest parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return new GetVideoFeatureInfoRequest(input, extensionRegistry);
+    }
+  };
+
+  public static com.google.protobuf.Parser<GetVideoFeatureInfoRequest> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<GetVideoFeatureInfoRequest> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoRequest getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+

+ 26 - 0
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetVideoFeatureInfoRequestOrBuilder.java

@@ -0,0 +1,26 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/feature/feature.proto
+
+package com.tzld.piaoquan.recommend.feature.model.feature;
+
+public interface GetVideoFeatureInfoRequestOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:GetVideoFeatureInfoRequest)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <code>repeated int64 videoIds = 1;</code>
+   * @return A list containing the videoIds.
+   */
+  java.util.List<java.lang.Long> getVideoIdsList();
+  /**
+   * <code>repeated int64 videoIds = 1;</code>
+   * @return The count of videoIds.
+   */
+  int getVideoIdsCount();
+  /**
+   * <code>repeated int64 videoIds = 1;</code>
+   * @param index The index of the element to return.
+   * @return The videoIds at the given index.
+   */
+  long getVideoIds(int index);
+}

+ 3532 - 0
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetVideoFeatureInfoResponse.java

@@ -0,0 +1,3532 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/feature/feature.proto
+
+package com.tzld.piaoquan.recommend.feature.model.feature;
+
+/**
+ * Protobuf type {@code GetVideoFeatureInfoResponse}
+ */
+public final class GetVideoFeatureInfoResponse extends
+    com.google.protobuf.GeneratedMessageV3 implements
+    // @@protoc_insertion_point(message_implements:GetVideoFeatureInfoResponse)
+    GetVideoFeatureInfoResponseOrBuilder {
+private static final long serialVersionUID = 0L;
+  // Use GetVideoFeatureInfoResponse.newBuilder() to construct.
+  private GetVideoFeatureInfoResponse(com.google.protobuf.GeneratedMessageV3.Builder<?> builder) {
+    super(builder);
+  }
+  private GetVideoFeatureInfoResponse() {
+    gmtCreate_ = "";
+  }
+
+  @java.lang.Override
+  @SuppressWarnings({"unused"})
+  protected java.lang.Object newInstance(
+      UnusedPrivateParameter unused) {
+    return new GetVideoFeatureInfoResponse();
+  }
+
+  @java.lang.Override
+  public final com.google.protobuf.UnknownFieldSet
+  getUnknownFields() {
+    return this.unknownFields;
+  }
+  private GetVideoFeatureInfoResponse(
+      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 16: {
+
+            playCountTotal_ = input.readInt64();
+            break;
+          }
+          case 24: {
+
+            totalTime_ = input.readInt32();
+            break;
+          }
+          case 34: {
+            java.lang.String s = input.readStringRequireUtf8();
+
+            gmtCreate_ = s;
+            break;
+          }
+          case 40: {
+
+            uid_ = input.readInt64();
+            break;
+          }
+          case 48: {
+
+            i15MinExpCnt_ = input.readInt64();
+            break;
+          }
+          case 56: {
+
+            i15MinClickCnt_ = input.readInt64();
+            break;
+          }
+          case 64: {
+
+            i15MinShareCnt_ = input.readInt64();
+            break;
+          }
+          case 72: {
+
+            i15MinReturnCnt_ = input.readInt64();
+            break;
+          }
+          case 81: {
+
+            iCtr15Min_ = input.readDouble();
+            break;
+          }
+          case 89: {
+
+            iStr15Min_ = input.readDouble();
+            break;
+          }
+          case 97: {
+
+            iRov15Min_ = input.readDouble();
+            break;
+          }
+          case 105: {
+
+            iRos15Min_ = input.readDouble();
+            break;
+          }
+          case 112: {
+
+            i1HourExpCnt_ = input.readInt64();
+            break;
+          }
+          case 120: {
+
+            i1HourClickCnt_ = input.readInt64();
+            break;
+          }
+          case 128: {
+
+            i1HourShareCnt_ = input.readInt64();
+            break;
+          }
+          case 136: {
+
+            i1HourReturnCnt_ = input.readInt64();
+            break;
+          }
+          case 145: {
+
+            iCtr1Hour_ = input.readDouble();
+            break;
+          }
+          case 153: {
+
+            iStr1Hour_ = input.readDouble();
+            break;
+          }
+          case 161: {
+
+            iRov1Hour_ = input.readDouble();
+            break;
+          }
+          case 169: {
+
+            iRos1Hour_ = input.readDouble();
+            break;
+          }
+          case 176: {
+
+            iTodayExpCnt_ = input.readInt64();
+            break;
+          }
+          case 184: {
+
+            iTodayClickCnt_ = input.readInt64();
+            break;
+          }
+          case 192: {
+
+            iTodayShareCnt_ = input.readInt64();
+            break;
+          }
+          case 200: {
+
+            iTodayReturnCnt_ = input.readInt64();
+            break;
+          }
+          case 209: {
+
+            iCtrToday_ = input.readDouble();
+            break;
+          }
+          case 217: {
+
+            iStrToday_ = input.readDouble();
+            break;
+          }
+          case 225: {
+
+            iRovToday_ = input.readDouble();
+            break;
+          }
+          case 233: {
+
+            iRosToday_ = input.readDouble();
+            break;
+          }
+          case 240: {
+
+            i1DayExpCnt_ = input.readInt64();
+            break;
+          }
+          case 248: {
+
+            i1DayClickCnt_ = input.readInt64();
+            break;
+          }
+          case 256: {
+
+            i1DayShareCnt_ = input.readInt64();
+            break;
+          }
+          case 264: {
+
+            i1DayReturnCnt_ = input.readInt64();
+            break;
+          }
+          case 273: {
+
+            iCtr1Day_ = input.readDouble();
+            break;
+          }
+          case 281: {
+
+            iStr1Day_ = input.readDouble();
+            break;
+          }
+          case 289: {
+
+            iRov1Day_ = input.readDouble();
+            break;
+          }
+          case 297: {
+
+            iRos1Day_ = input.readDouble();
+            break;
+          }
+          case 304: {
+
+            i3DayExpCnt_ = input.readInt64();
+            break;
+          }
+          case 312: {
+
+            i3DayClickCnt_ = input.readInt64();
+            break;
+          }
+          case 320: {
+
+            i3DayShareCnt_ = input.readInt64();
+            break;
+          }
+          case 328: {
+
+            i3DayReturnCnt_ = input.readInt64();
+            break;
+          }
+          case 337: {
+
+            iCtr3Day_ = input.readDouble();
+            break;
+          }
+          case 345: {
+
+            iStr3Day_ = input.readDouble();
+            break;
+          }
+          case 353: {
+
+            iRov3Day_ = input.readDouble();
+            break;
+          }
+          case 361: {
+
+            iRos3Day_ = 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.feature.model.feature.Feature.internal_static_GetVideoFeatureInfoResponse_descriptor;
+  }
+
+  @java.lang.Override
+  protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+      internalGetFieldAccessorTable() {
+    return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureInfoResponse_fieldAccessorTable
+        .ensureFieldAccessorsInitialized(
+            com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse.class, com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse.Builder.class);
+  }
+
+  public static final int VIDEOID_FIELD_NUMBER = 1;
+  private long videoId_;
+  /**
+   * <code>int64 videoId = 1;</code>
+   * @return The videoId.
+   */
+  @java.lang.Override
+  public long getVideoId() {
+    return videoId_;
+  }
+
+  public static final int PLAYCOUNTTOTAL_FIELD_NUMBER = 2;
+  private long playCountTotal_;
+  /**
+   * <code>int64 playCountTotal = 2;</code>
+   * @return The playCountTotal.
+   */
+  @java.lang.Override
+  public long getPlayCountTotal() {
+    return playCountTotal_;
+  }
+
+  public static final int TOTALTIME_FIELD_NUMBER = 3;
+  private int totalTime_;
+  /**
+   * <code>int32 totalTime = 3;</code>
+   * @return The totalTime.
+   */
+  @java.lang.Override
+  public int getTotalTime() {
+    return totalTime_;
+  }
+
+  public static final int GMTCREATE_FIELD_NUMBER = 4;
+  private volatile java.lang.Object gmtCreate_;
+  /**
+   * <code>string gmtCreate = 4;</code>
+   * @return The gmtCreate.
+   */
+  @java.lang.Override
+  public java.lang.String getGmtCreate() {
+    java.lang.Object ref = gmtCreate_;
+    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();
+      gmtCreate_ = s;
+      return s;
+    }
+  }
+  /**
+   * <code>string gmtCreate = 4;</code>
+   * @return The bytes for gmtCreate.
+   */
+  @java.lang.Override
+  public com.google.protobuf.ByteString
+      getGmtCreateBytes() {
+    java.lang.Object ref = gmtCreate_;
+    if (ref instanceof java.lang.String) {
+      com.google.protobuf.ByteString b = 
+          com.google.protobuf.ByteString.copyFromUtf8(
+              (java.lang.String) ref);
+      gmtCreate_ = b;
+      return b;
+    } else {
+      return (com.google.protobuf.ByteString) ref;
+    }
+  }
+
+  public static final int UID_FIELD_NUMBER = 5;
+  private long uid_;
+  /**
+   * <pre>
+   * 上传者
+   * </pre>
+   *
+   * <code>int64 uid = 5;</code>
+   * @return The uid.
+   */
+  @java.lang.Override
+  public long getUid() {
+    return uid_;
+  }
+
+  public static final int I15MINEXPCNT_FIELD_NUMBER = 6;
+  private long i15MinExpCnt_;
+  /**
+   * <pre>
+   * 过去十五分钟
+   * </pre>
+   *
+   * <code>int64 i15minExpCnt = 6;</code>
+   * @return The i15minExpCnt.
+   */
+  @java.lang.Override
+  public long getI15MinExpCnt() {
+    return i15MinExpCnt_;
+  }
+
+  public static final int I15MINCLICKCNT_FIELD_NUMBER = 7;
+  private long i15MinClickCnt_;
+  /**
+   * <code>int64 i15minClickCnt = 7;</code>
+   * @return The i15minClickCnt.
+   */
+  @java.lang.Override
+  public long getI15MinClickCnt() {
+    return i15MinClickCnt_;
+  }
+
+  public static final int I15MINSHARECNT_FIELD_NUMBER = 8;
+  private long i15MinShareCnt_;
+  /**
+   * <code>int64 i15minShareCnt = 8;</code>
+   * @return The i15minShareCnt.
+   */
+  @java.lang.Override
+  public long getI15MinShareCnt() {
+    return i15MinShareCnt_;
+  }
+
+  public static final int I15MINRETURNCNT_FIELD_NUMBER = 9;
+  private long i15MinReturnCnt_;
+  /**
+   * <code>int64 i15minReturnCnt = 9;</code>
+   * @return The i15minReturnCnt.
+   */
+  @java.lang.Override
+  public long getI15MinReturnCnt() {
+    return i15MinReturnCnt_;
+  }
+
+  public static final int ICTR15MIN_FIELD_NUMBER = 10;
+  private double iCtr15Min_;
+  /**
+   * <code>double iCtr15min = 10;</code>
+   * @return The iCtr15min.
+   */
+  @java.lang.Override
+  public double getICtr15Min() {
+    return iCtr15Min_;
+  }
+
+  public static final int ISTR15MIN_FIELD_NUMBER = 11;
+  private double iStr15Min_;
+  /**
+   * <code>double iStr15min = 11;</code>
+   * @return The iStr15min.
+   */
+  @java.lang.Override
+  public double getIStr15Min() {
+    return iStr15Min_;
+  }
+
+  public static final int IROV15MIN_FIELD_NUMBER = 12;
+  private double iRov15Min_;
+  /**
+   * <code>double iRov15min = 12;</code>
+   * @return The iRov15min.
+   */
+  @java.lang.Override
+  public double getIRov15Min() {
+    return iRov15Min_;
+  }
+
+  public static final int IROS15MIN_FIELD_NUMBER = 13;
+  private double iRos15Min_;
+  /**
+   * <code>double iRos15min = 13;</code>
+   * @return The iRos15min.
+   */
+  @java.lang.Override
+  public double getIRos15Min() {
+    return iRos15Min_;
+  }
+
+  public static final int I1HOUREXPCNT_FIELD_NUMBER = 14;
+  private long i1HourExpCnt_;
+  /**
+   * <pre>
+   * 过去一小时
+   * </pre>
+   *
+   * <code>int64 i1hourExpCnt = 14;</code>
+   * @return The i1hourExpCnt.
+   */
+  @java.lang.Override
+  public long getI1HourExpCnt() {
+    return i1HourExpCnt_;
+  }
+
+  public static final int I1HOURCLICKCNT_FIELD_NUMBER = 15;
+  private long i1HourClickCnt_;
+  /**
+   * <code>int64 i1hourClickCnt = 15;</code>
+   * @return The i1hourClickCnt.
+   */
+  @java.lang.Override
+  public long getI1HourClickCnt() {
+    return i1HourClickCnt_;
+  }
+
+  public static final int I1HOURSHARECNT_FIELD_NUMBER = 16;
+  private long i1HourShareCnt_;
+  /**
+   * <code>int64 i1hourShareCnt = 16;</code>
+   * @return The i1hourShareCnt.
+   */
+  @java.lang.Override
+  public long getI1HourShareCnt() {
+    return i1HourShareCnt_;
+  }
+
+  public static final int I1HOURRETURNCNT_FIELD_NUMBER = 17;
+  private long i1HourReturnCnt_;
+  /**
+   * <code>int64 i1hourReturnCnt = 17;</code>
+   * @return The i1hourReturnCnt.
+   */
+  @java.lang.Override
+  public long getI1HourReturnCnt() {
+    return i1HourReturnCnt_;
+  }
+
+  public static final int ICTR1HOUR_FIELD_NUMBER = 18;
+  private double iCtr1Hour_;
+  /**
+   * <code>double iCtr1hour = 18;</code>
+   * @return The iCtr1hour.
+   */
+  @java.lang.Override
+  public double getICtr1Hour() {
+    return iCtr1Hour_;
+  }
+
+  public static final int ISTR1HOUR_FIELD_NUMBER = 19;
+  private double iStr1Hour_;
+  /**
+   * <code>double iStr1hour = 19;</code>
+   * @return The iStr1hour.
+   */
+  @java.lang.Override
+  public double getIStr1Hour() {
+    return iStr1Hour_;
+  }
+
+  public static final int IROV1HOUR_FIELD_NUMBER = 20;
+  private double iRov1Hour_;
+  /**
+   * <code>double iRov1hour = 20;</code>
+   * @return The iRov1hour.
+   */
+  @java.lang.Override
+  public double getIRov1Hour() {
+    return iRov1Hour_;
+  }
+
+  public static final int IROS1HOUR_FIELD_NUMBER = 21;
+  private double iRos1Hour_;
+  /**
+   * <code>double iRos1hour = 21;</code>
+   * @return The iRos1hour.
+   */
+  @java.lang.Override
+  public double getIRos1Hour() {
+    return iRos1Hour_;
+  }
+
+  public static final int ITODAYEXPCNT_FIELD_NUMBER = 22;
+  private long iTodayExpCnt_;
+  /**
+   * <pre>
+   * 今天
+   * </pre>
+   *
+   * <code>int64 iTodayExpCnt = 22;</code>
+   * @return The iTodayExpCnt.
+   */
+  @java.lang.Override
+  public long getITodayExpCnt() {
+    return iTodayExpCnt_;
+  }
+
+  public static final int ITODAYCLICKCNT_FIELD_NUMBER = 23;
+  private long iTodayClickCnt_;
+  /**
+   * <code>int64 iTodayClickCnt = 23;</code>
+   * @return The iTodayClickCnt.
+   */
+  @java.lang.Override
+  public long getITodayClickCnt() {
+    return iTodayClickCnt_;
+  }
+
+  public static final int ITODAYSHARECNT_FIELD_NUMBER = 24;
+  private long iTodayShareCnt_;
+  /**
+   * <code>int64 iTodayShareCnt = 24;</code>
+   * @return The iTodayShareCnt.
+   */
+  @java.lang.Override
+  public long getITodayShareCnt() {
+    return iTodayShareCnt_;
+  }
+
+  public static final int ITODAYRETURNCNT_FIELD_NUMBER = 25;
+  private long iTodayReturnCnt_;
+  /**
+   * <code>int64 iTodayReturnCnt = 25;</code>
+   * @return The iTodayReturnCnt.
+   */
+  @java.lang.Override
+  public long getITodayReturnCnt() {
+    return iTodayReturnCnt_;
+  }
+
+  public static final int ICTRTODAY_FIELD_NUMBER = 26;
+  private double iCtrToday_;
+  /**
+   * <code>double iCtrToday = 26;</code>
+   * @return The iCtrToday.
+   */
+  @java.lang.Override
+  public double getICtrToday() {
+    return iCtrToday_;
+  }
+
+  public static final int ISTRTODAY_FIELD_NUMBER = 27;
+  private double iStrToday_;
+  /**
+   * <code>double iStrToday = 27;</code>
+   * @return The iStrToday.
+   */
+  @java.lang.Override
+  public double getIStrToday() {
+    return iStrToday_;
+  }
+
+  public static final int IROVTODAY_FIELD_NUMBER = 28;
+  private double iRovToday_;
+  /**
+   * <code>double iRovToday = 28;</code>
+   * @return The iRovToday.
+   */
+  @java.lang.Override
+  public double getIRovToday() {
+    return iRovToday_;
+  }
+
+  public static final int IROSTODAY_FIELD_NUMBER = 29;
+  private double iRosToday_;
+  /**
+   * <code>double iRosToday = 29;</code>
+   * @return The iRosToday.
+   */
+  @java.lang.Override
+  public double getIRosToday() {
+    return iRosToday_;
+  }
+
+  public static final int I1DAYEXPCNT_FIELD_NUMBER = 30;
+  private long i1DayExpCnt_;
+  /**
+   * <pre>
+   * 过去一天
+   * </pre>
+   *
+   * <code>int64 i1dayExpCnt = 30;</code>
+   * @return The i1dayExpCnt.
+   */
+  @java.lang.Override
+  public long getI1DayExpCnt() {
+    return i1DayExpCnt_;
+  }
+
+  public static final int I1DAYCLICKCNT_FIELD_NUMBER = 31;
+  private long i1DayClickCnt_;
+  /**
+   * <code>int64 i1dayClickCnt = 31;</code>
+   * @return The i1dayClickCnt.
+   */
+  @java.lang.Override
+  public long getI1DayClickCnt() {
+    return i1DayClickCnt_;
+  }
+
+  public static final int I1DAYSHARECNT_FIELD_NUMBER = 32;
+  private long i1DayShareCnt_;
+  /**
+   * <code>int64 i1dayShareCnt = 32;</code>
+   * @return The i1dayShareCnt.
+   */
+  @java.lang.Override
+  public long getI1DayShareCnt() {
+    return i1DayShareCnt_;
+  }
+
+  public static final int I1DAYRETURNCNT_FIELD_NUMBER = 33;
+  private long i1DayReturnCnt_;
+  /**
+   * <code>int64 i1dayReturnCnt = 33;</code>
+   * @return The i1dayReturnCnt.
+   */
+  @java.lang.Override
+  public long getI1DayReturnCnt() {
+    return i1DayReturnCnt_;
+  }
+
+  public static final int ICTR1DAY_FIELD_NUMBER = 34;
+  private double iCtr1Day_;
+  /**
+   * <code>double iCtr1day = 34;</code>
+   * @return The iCtr1day.
+   */
+  @java.lang.Override
+  public double getICtr1Day() {
+    return iCtr1Day_;
+  }
+
+  public static final int ISTR1DAY_FIELD_NUMBER = 35;
+  private double iStr1Day_;
+  /**
+   * <code>double iStr1day = 35;</code>
+   * @return The iStr1day.
+   */
+  @java.lang.Override
+  public double getIStr1Day() {
+    return iStr1Day_;
+  }
+
+  public static final int IROV1DAY_FIELD_NUMBER = 36;
+  private double iRov1Day_;
+  /**
+   * <code>double iRov1day = 36;</code>
+   * @return The iRov1day.
+   */
+  @java.lang.Override
+  public double getIRov1Day() {
+    return iRov1Day_;
+  }
+
+  public static final int IROS1DAY_FIELD_NUMBER = 37;
+  private double iRos1Day_;
+  /**
+   * <code>double iRos1day = 37;</code>
+   * @return The iRos1day.
+   */
+  @java.lang.Override
+  public double getIRos1Day() {
+    return iRos1Day_;
+  }
+
+  public static final int I3DAYEXPCNT_FIELD_NUMBER = 38;
+  private long i3DayExpCnt_;
+  /**
+   * <pre>
+   * 过去三天
+   * </pre>
+   *
+   * <code>int64 i3dayExpCnt = 38;</code>
+   * @return The i3dayExpCnt.
+   */
+  @java.lang.Override
+  public long getI3DayExpCnt() {
+    return i3DayExpCnt_;
+  }
+
+  public static final int I3DAYCLICKCNT_FIELD_NUMBER = 39;
+  private long i3DayClickCnt_;
+  /**
+   * <code>int64 i3dayClickCnt = 39;</code>
+   * @return The i3dayClickCnt.
+   */
+  @java.lang.Override
+  public long getI3DayClickCnt() {
+    return i3DayClickCnt_;
+  }
+
+  public static final int I3DAYSHARECNT_FIELD_NUMBER = 40;
+  private long i3DayShareCnt_;
+  /**
+   * <code>int64 i3dayShareCnt = 40;</code>
+   * @return The i3dayShareCnt.
+   */
+  @java.lang.Override
+  public long getI3DayShareCnt() {
+    return i3DayShareCnt_;
+  }
+
+  public static final int I3DAYRETURNCNT_FIELD_NUMBER = 41;
+  private long i3DayReturnCnt_;
+  /**
+   * <code>int64 i3dayReturnCnt = 41;</code>
+   * @return The i3dayReturnCnt.
+   */
+  @java.lang.Override
+  public long getI3DayReturnCnt() {
+    return i3DayReturnCnt_;
+  }
+
+  public static final int ICTR3DAY_FIELD_NUMBER = 42;
+  private double iCtr3Day_;
+  /**
+   * <code>double iCtr3day = 42;</code>
+   * @return The iCtr3day.
+   */
+  @java.lang.Override
+  public double getICtr3Day() {
+    return iCtr3Day_;
+  }
+
+  public static final int ISTR3DAY_FIELD_NUMBER = 43;
+  private double iStr3Day_;
+  /**
+   * <code>double iStr3day = 43;</code>
+   * @return The iStr3day.
+   */
+  @java.lang.Override
+  public double getIStr3Day() {
+    return iStr3Day_;
+  }
+
+  public static final int IROV3DAY_FIELD_NUMBER = 44;
+  private double iRov3Day_;
+  /**
+   * <code>double iRov3day = 44;</code>
+   * @return The iRov3day.
+   */
+  @java.lang.Override
+  public double getIRov3Day() {
+    return iRov3Day_;
+  }
+
+  public static final int IROS3DAY_FIELD_NUMBER = 45;
+  private double iRos3Day_;
+  /**
+   * <code>double iRos3day = 45;</code>
+   * @return The iRos3day.
+   */
+  @java.lang.Override
+  public double getIRos3Day() {
+    return iRos3Day_;
+  }
+
+  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 (playCountTotal_ != 0L) {
+      output.writeInt64(2, playCountTotal_);
+    }
+    if (totalTime_ != 0) {
+      output.writeInt32(3, totalTime_);
+    }
+    if (!getGmtCreateBytes().isEmpty()) {
+      com.google.protobuf.GeneratedMessageV3.writeString(output, 4, gmtCreate_);
+    }
+    if (uid_ != 0L) {
+      output.writeInt64(5, uid_);
+    }
+    if (i15MinExpCnt_ != 0L) {
+      output.writeInt64(6, i15MinExpCnt_);
+    }
+    if (i15MinClickCnt_ != 0L) {
+      output.writeInt64(7, i15MinClickCnt_);
+    }
+    if (i15MinShareCnt_ != 0L) {
+      output.writeInt64(8, i15MinShareCnt_);
+    }
+    if (i15MinReturnCnt_ != 0L) {
+      output.writeInt64(9, i15MinReturnCnt_);
+    }
+    if (iCtr15Min_ != 0D) {
+      output.writeDouble(10, iCtr15Min_);
+    }
+    if (iStr15Min_ != 0D) {
+      output.writeDouble(11, iStr15Min_);
+    }
+    if (iRov15Min_ != 0D) {
+      output.writeDouble(12, iRov15Min_);
+    }
+    if (iRos15Min_ != 0D) {
+      output.writeDouble(13, iRos15Min_);
+    }
+    if (i1HourExpCnt_ != 0L) {
+      output.writeInt64(14, i1HourExpCnt_);
+    }
+    if (i1HourClickCnt_ != 0L) {
+      output.writeInt64(15, i1HourClickCnt_);
+    }
+    if (i1HourShareCnt_ != 0L) {
+      output.writeInt64(16, i1HourShareCnt_);
+    }
+    if (i1HourReturnCnt_ != 0L) {
+      output.writeInt64(17, i1HourReturnCnt_);
+    }
+    if (iCtr1Hour_ != 0D) {
+      output.writeDouble(18, iCtr1Hour_);
+    }
+    if (iStr1Hour_ != 0D) {
+      output.writeDouble(19, iStr1Hour_);
+    }
+    if (iRov1Hour_ != 0D) {
+      output.writeDouble(20, iRov1Hour_);
+    }
+    if (iRos1Hour_ != 0D) {
+      output.writeDouble(21, iRos1Hour_);
+    }
+    if (iTodayExpCnt_ != 0L) {
+      output.writeInt64(22, iTodayExpCnt_);
+    }
+    if (iTodayClickCnt_ != 0L) {
+      output.writeInt64(23, iTodayClickCnt_);
+    }
+    if (iTodayShareCnt_ != 0L) {
+      output.writeInt64(24, iTodayShareCnt_);
+    }
+    if (iTodayReturnCnt_ != 0L) {
+      output.writeInt64(25, iTodayReturnCnt_);
+    }
+    if (iCtrToday_ != 0D) {
+      output.writeDouble(26, iCtrToday_);
+    }
+    if (iStrToday_ != 0D) {
+      output.writeDouble(27, iStrToday_);
+    }
+    if (iRovToday_ != 0D) {
+      output.writeDouble(28, iRovToday_);
+    }
+    if (iRosToday_ != 0D) {
+      output.writeDouble(29, iRosToday_);
+    }
+    if (i1DayExpCnt_ != 0L) {
+      output.writeInt64(30, i1DayExpCnt_);
+    }
+    if (i1DayClickCnt_ != 0L) {
+      output.writeInt64(31, i1DayClickCnt_);
+    }
+    if (i1DayShareCnt_ != 0L) {
+      output.writeInt64(32, i1DayShareCnt_);
+    }
+    if (i1DayReturnCnt_ != 0L) {
+      output.writeInt64(33, i1DayReturnCnt_);
+    }
+    if (iCtr1Day_ != 0D) {
+      output.writeDouble(34, iCtr1Day_);
+    }
+    if (iStr1Day_ != 0D) {
+      output.writeDouble(35, iStr1Day_);
+    }
+    if (iRov1Day_ != 0D) {
+      output.writeDouble(36, iRov1Day_);
+    }
+    if (iRos1Day_ != 0D) {
+      output.writeDouble(37, iRos1Day_);
+    }
+    if (i3DayExpCnt_ != 0L) {
+      output.writeInt64(38, i3DayExpCnt_);
+    }
+    if (i3DayClickCnt_ != 0L) {
+      output.writeInt64(39, i3DayClickCnt_);
+    }
+    if (i3DayShareCnt_ != 0L) {
+      output.writeInt64(40, i3DayShareCnt_);
+    }
+    if (i3DayReturnCnt_ != 0L) {
+      output.writeInt64(41, i3DayReturnCnt_);
+    }
+    if (iCtr3Day_ != 0D) {
+      output.writeDouble(42, iCtr3Day_);
+    }
+    if (iStr3Day_ != 0D) {
+      output.writeDouble(43, iStr3Day_);
+    }
+    if (iRov3Day_ != 0D) {
+      output.writeDouble(44, iRov3Day_);
+    }
+    if (iRos3Day_ != 0D) {
+      output.writeDouble(45, iRos3Day_);
+    }
+    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 (playCountTotal_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(2, playCountTotal_);
+    }
+    if (totalTime_ != 0) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt32Size(3, totalTime_);
+    }
+    if (!getGmtCreateBytes().isEmpty()) {
+      size += com.google.protobuf.GeneratedMessageV3.computeStringSize(4, gmtCreate_);
+    }
+    if (uid_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(5, uid_);
+    }
+    if (i15MinExpCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(6, i15MinExpCnt_);
+    }
+    if (i15MinClickCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(7, i15MinClickCnt_);
+    }
+    if (i15MinShareCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(8, i15MinShareCnt_);
+    }
+    if (i15MinReturnCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(9, i15MinReturnCnt_);
+    }
+    if (iCtr15Min_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(10, iCtr15Min_);
+    }
+    if (iStr15Min_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(11, iStr15Min_);
+    }
+    if (iRov15Min_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(12, iRov15Min_);
+    }
+    if (iRos15Min_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(13, iRos15Min_);
+    }
+    if (i1HourExpCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(14, i1HourExpCnt_);
+    }
+    if (i1HourClickCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(15, i1HourClickCnt_);
+    }
+    if (i1HourShareCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(16, i1HourShareCnt_);
+    }
+    if (i1HourReturnCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(17, i1HourReturnCnt_);
+    }
+    if (iCtr1Hour_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(18, iCtr1Hour_);
+    }
+    if (iStr1Hour_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(19, iStr1Hour_);
+    }
+    if (iRov1Hour_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(20, iRov1Hour_);
+    }
+    if (iRos1Hour_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(21, iRos1Hour_);
+    }
+    if (iTodayExpCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(22, iTodayExpCnt_);
+    }
+    if (iTodayClickCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(23, iTodayClickCnt_);
+    }
+    if (iTodayShareCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(24, iTodayShareCnt_);
+    }
+    if (iTodayReturnCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(25, iTodayReturnCnt_);
+    }
+    if (iCtrToday_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(26, iCtrToday_);
+    }
+    if (iStrToday_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(27, iStrToday_);
+    }
+    if (iRovToday_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(28, iRovToday_);
+    }
+    if (iRosToday_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(29, iRosToday_);
+    }
+    if (i1DayExpCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(30, i1DayExpCnt_);
+    }
+    if (i1DayClickCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(31, i1DayClickCnt_);
+    }
+    if (i1DayShareCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(32, i1DayShareCnt_);
+    }
+    if (i1DayReturnCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(33, i1DayReturnCnt_);
+    }
+    if (iCtr1Day_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(34, iCtr1Day_);
+    }
+    if (iStr1Day_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(35, iStr1Day_);
+    }
+    if (iRov1Day_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(36, iRov1Day_);
+    }
+    if (iRos1Day_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(37, iRos1Day_);
+    }
+    if (i3DayExpCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(38, i3DayExpCnt_);
+    }
+    if (i3DayClickCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(39, i3DayClickCnt_);
+    }
+    if (i3DayShareCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(40, i3DayShareCnt_);
+    }
+    if (i3DayReturnCnt_ != 0L) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeInt64Size(41, i3DayReturnCnt_);
+    }
+    if (iCtr3Day_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(42, iCtr3Day_);
+    }
+    if (iStr3Day_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(43, iStr3Day_);
+    }
+    if (iRov3Day_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(44, iRov3Day_);
+    }
+    if (iRos3Day_ != 0D) {
+      size += com.google.protobuf.CodedOutputStream
+        .computeDoubleSize(45, iRos3Day_);
+    }
+    size += unknownFields.getSerializedSize();
+    memoizedSize = size;
+    return size;
+  }
+
+  @java.lang.Override
+  public boolean equals(final java.lang.Object obj) {
+    if (obj == this) {
+     return true;
+    }
+    if (!(obj instanceof com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse)) {
+      return super.equals(obj);
+    }
+    com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse other = (com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse) obj;
+
+    if (getVideoId()
+        != other.getVideoId()) return false;
+    if (getPlayCountTotal()
+        != other.getPlayCountTotal()) return false;
+    if (getTotalTime()
+        != other.getTotalTime()) return false;
+    if (!getGmtCreate()
+        .equals(other.getGmtCreate())) return false;
+    if (getUid()
+        != other.getUid()) return false;
+    if (getI15MinExpCnt()
+        != other.getI15MinExpCnt()) return false;
+    if (getI15MinClickCnt()
+        != other.getI15MinClickCnt()) return false;
+    if (getI15MinShareCnt()
+        != other.getI15MinShareCnt()) return false;
+    if (getI15MinReturnCnt()
+        != other.getI15MinReturnCnt()) return false;
+    if (java.lang.Double.doubleToLongBits(getICtr15Min())
+        != java.lang.Double.doubleToLongBits(
+            other.getICtr15Min())) return false;
+    if (java.lang.Double.doubleToLongBits(getIStr15Min())
+        != java.lang.Double.doubleToLongBits(
+            other.getIStr15Min())) return false;
+    if (java.lang.Double.doubleToLongBits(getIRov15Min())
+        != java.lang.Double.doubleToLongBits(
+            other.getIRov15Min())) return false;
+    if (java.lang.Double.doubleToLongBits(getIRos15Min())
+        != java.lang.Double.doubleToLongBits(
+            other.getIRos15Min())) return false;
+    if (getI1HourExpCnt()
+        != other.getI1HourExpCnt()) return false;
+    if (getI1HourClickCnt()
+        != other.getI1HourClickCnt()) return false;
+    if (getI1HourShareCnt()
+        != other.getI1HourShareCnt()) return false;
+    if (getI1HourReturnCnt()
+        != other.getI1HourReturnCnt()) return false;
+    if (java.lang.Double.doubleToLongBits(getICtr1Hour())
+        != java.lang.Double.doubleToLongBits(
+            other.getICtr1Hour())) return false;
+    if (java.lang.Double.doubleToLongBits(getIStr1Hour())
+        != java.lang.Double.doubleToLongBits(
+            other.getIStr1Hour())) return false;
+    if (java.lang.Double.doubleToLongBits(getIRov1Hour())
+        != java.lang.Double.doubleToLongBits(
+            other.getIRov1Hour())) return false;
+    if (java.lang.Double.doubleToLongBits(getIRos1Hour())
+        != java.lang.Double.doubleToLongBits(
+            other.getIRos1Hour())) return false;
+    if (getITodayExpCnt()
+        != other.getITodayExpCnt()) return false;
+    if (getITodayClickCnt()
+        != other.getITodayClickCnt()) return false;
+    if (getITodayShareCnt()
+        != other.getITodayShareCnt()) return false;
+    if (getITodayReturnCnt()
+        != other.getITodayReturnCnt()) return false;
+    if (java.lang.Double.doubleToLongBits(getICtrToday())
+        != java.lang.Double.doubleToLongBits(
+            other.getICtrToday())) return false;
+    if (java.lang.Double.doubleToLongBits(getIStrToday())
+        != java.lang.Double.doubleToLongBits(
+            other.getIStrToday())) return false;
+    if (java.lang.Double.doubleToLongBits(getIRovToday())
+        != java.lang.Double.doubleToLongBits(
+            other.getIRovToday())) return false;
+    if (java.lang.Double.doubleToLongBits(getIRosToday())
+        != java.lang.Double.doubleToLongBits(
+            other.getIRosToday())) return false;
+    if (getI1DayExpCnt()
+        != other.getI1DayExpCnt()) return false;
+    if (getI1DayClickCnt()
+        != other.getI1DayClickCnt()) return false;
+    if (getI1DayShareCnt()
+        != other.getI1DayShareCnt()) return false;
+    if (getI1DayReturnCnt()
+        != other.getI1DayReturnCnt()) return false;
+    if (java.lang.Double.doubleToLongBits(getICtr1Day())
+        != java.lang.Double.doubleToLongBits(
+            other.getICtr1Day())) return false;
+    if (java.lang.Double.doubleToLongBits(getIStr1Day())
+        != java.lang.Double.doubleToLongBits(
+            other.getIStr1Day())) return false;
+    if (java.lang.Double.doubleToLongBits(getIRov1Day())
+        != java.lang.Double.doubleToLongBits(
+            other.getIRov1Day())) return false;
+    if (java.lang.Double.doubleToLongBits(getIRos1Day())
+        != java.lang.Double.doubleToLongBits(
+            other.getIRos1Day())) return false;
+    if (getI3DayExpCnt()
+        != other.getI3DayExpCnt()) return false;
+    if (getI3DayClickCnt()
+        != other.getI3DayClickCnt()) return false;
+    if (getI3DayShareCnt()
+        != other.getI3DayShareCnt()) return false;
+    if (getI3DayReturnCnt()
+        != other.getI3DayReturnCnt()) return false;
+    if (java.lang.Double.doubleToLongBits(getICtr3Day())
+        != java.lang.Double.doubleToLongBits(
+            other.getICtr3Day())) return false;
+    if (java.lang.Double.doubleToLongBits(getIStr3Day())
+        != java.lang.Double.doubleToLongBits(
+            other.getIStr3Day())) return false;
+    if (java.lang.Double.doubleToLongBits(getIRov3Day())
+        != java.lang.Double.doubleToLongBits(
+            other.getIRov3Day())) return false;
+    if (java.lang.Double.doubleToLongBits(getIRos3Day())
+        != java.lang.Double.doubleToLongBits(
+            other.getIRos3Day())) 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) + VIDEOID_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getVideoId());
+    hash = (37 * hash) + PLAYCOUNTTOTAL_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getPlayCountTotal());
+    hash = (37 * hash) + TOTALTIME_FIELD_NUMBER;
+    hash = (53 * hash) + getTotalTime();
+    hash = (37 * hash) + GMTCREATE_FIELD_NUMBER;
+    hash = (53 * hash) + getGmtCreate().hashCode();
+    hash = (37 * hash) + UID_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getUid());
+    hash = (37 * hash) + I15MINEXPCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getI15MinExpCnt());
+    hash = (37 * hash) + I15MINCLICKCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getI15MinClickCnt());
+    hash = (37 * hash) + I15MINSHARECNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getI15MinShareCnt());
+    hash = (37 * hash) + I15MINRETURNCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getI15MinReturnCnt());
+    hash = (37 * hash) + ICTR15MIN_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getICtr15Min()));
+    hash = (37 * hash) + ISTR15MIN_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getIStr15Min()));
+    hash = (37 * hash) + IROV15MIN_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getIRov15Min()));
+    hash = (37 * hash) + IROS15MIN_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getIRos15Min()));
+    hash = (37 * hash) + I1HOUREXPCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getI1HourExpCnt());
+    hash = (37 * hash) + I1HOURCLICKCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getI1HourClickCnt());
+    hash = (37 * hash) + I1HOURSHARECNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getI1HourShareCnt());
+    hash = (37 * hash) + I1HOURRETURNCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getI1HourReturnCnt());
+    hash = (37 * hash) + ICTR1HOUR_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getICtr1Hour()));
+    hash = (37 * hash) + ISTR1HOUR_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getIStr1Hour()));
+    hash = (37 * hash) + IROV1HOUR_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getIRov1Hour()));
+    hash = (37 * hash) + IROS1HOUR_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getIRos1Hour()));
+    hash = (37 * hash) + ITODAYEXPCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getITodayExpCnt());
+    hash = (37 * hash) + ITODAYCLICKCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getITodayClickCnt());
+    hash = (37 * hash) + ITODAYSHARECNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getITodayShareCnt());
+    hash = (37 * hash) + ITODAYRETURNCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getITodayReturnCnt());
+    hash = (37 * hash) + ICTRTODAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getICtrToday()));
+    hash = (37 * hash) + ISTRTODAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getIStrToday()));
+    hash = (37 * hash) + IROVTODAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getIRovToday()));
+    hash = (37 * hash) + IROSTODAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getIRosToday()));
+    hash = (37 * hash) + I1DAYEXPCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getI1DayExpCnt());
+    hash = (37 * hash) + I1DAYCLICKCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getI1DayClickCnt());
+    hash = (37 * hash) + I1DAYSHARECNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getI1DayShareCnt());
+    hash = (37 * hash) + I1DAYRETURNCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getI1DayReturnCnt());
+    hash = (37 * hash) + ICTR1DAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getICtr1Day()));
+    hash = (37 * hash) + ISTR1DAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getIStr1Day()));
+    hash = (37 * hash) + IROV1DAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getIRov1Day()));
+    hash = (37 * hash) + IROS1DAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getIRos1Day()));
+    hash = (37 * hash) + I3DAYEXPCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getI3DayExpCnt());
+    hash = (37 * hash) + I3DAYCLICKCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getI3DayClickCnt());
+    hash = (37 * hash) + I3DAYSHARECNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getI3DayShareCnt());
+    hash = (37 * hash) + I3DAYRETURNCNT_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        getI3DayReturnCnt());
+    hash = (37 * hash) + ICTR3DAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getICtr3Day()));
+    hash = (37 * hash) + ISTR3DAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getIStr3Day()));
+    hash = (37 * hash) + IROV3DAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getIRov3Day()));
+    hash = (37 * hash) + IROS3DAY_FIELD_NUMBER;
+    hash = (53 * hash) + com.google.protobuf.Internal.hashLong(
+        java.lang.Double.doubleToLongBits(getIRos3Day()));
+    hash = (29 * hash) + unknownFields.hashCode();
+    memoizedHashCode = hash;
+    return hash;
+  }
+
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse parseFrom(
+      java.nio.ByteBuffer data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse parseFrom(
+      java.nio.ByteBuffer data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse parseFrom(
+      com.google.protobuf.ByteString data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse parseFrom(
+      com.google.protobuf.ByteString data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse parseFrom(byte[] data)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse parseFrom(
+      byte[] data,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws com.google.protobuf.InvalidProtocolBufferException {
+    return PARSER.parseFrom(data, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse parseFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse parseFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse parseDelimitedFrom(java.io.InputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse parseDelimitedFrom(
+      java.io.InputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseDelimitedWithIOException(PARSER, input, extensionRegistry);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse parseFrom(
+      com.google.protobuf.CodedInputStream input)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input);
+  }
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse parseFrom(
+      com.google.protobuf.CodedInputStream input,
+      com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+      throws java.io.IOException {
+    return com.google.protobuf.GeneratedMessageV3
+        .parseWithIOException(PARSER, input, extensionRegistry);
+  }
+
+  @java.lang.Override
+  public Builder newBuilderForType() { return newBuilder(); }
+  public static Builder newBuilder() {
+    return DEFAULT_INSTANCE.toBuilder();
+  }
+  public static Builder newBuilder(com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse 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 GetVideoFeatureInfoResponse}
+   */
+  public static final class Builder extends
+      com.google.protobuf.GeneratedMessageV3.Builder<Builder> implements
+      // @@protoc_insertion_point(builder_implements:GetVideoFeatureInfoResponse)
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponseOrBuilder {
+    public static final com.google.protobuf.Descriptors.Descriptor
+        getDescriptor() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureInfoResponse_descriptor;
+    }
+
+    @java.lang.Override
+    protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable
+        internalGetFieldAccessorTable() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureInfoResponse_fieldAccessorTable
+          .ensureFieldAccessorsInitialized(
+              com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse.class, com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse.Builder.class);
+    }
+
+    // Construct using com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse.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;
+
+      playCountTotal_ = 0L;
+
+      totalTime_ = 0;
+
+      gmtCreate_ = "";
+
+      uid_ = 0L;
+
+      i15MinExpCnt_ = 0L;
+
+      i15MinClickCnt_ = 0L;
+
+      i15MinShareCnt_ = 0L;
+
+      i15MinReturnCnt_ = 0L;
+
+      iCtr15Min_ = 0D;
+
+      iStr15Min_ = 0D;
+
+      iRov15Min_ = 0D;
+
+      iRos15Min_ = 0D;
+
+      i1HourExpCnt_ = 0L;
+
+      i1HourClickCnt_ = 0L;
+
+      i1HourShareCnt_ = 0L;
+
+      i1HourReturnCnt_ = 0L;
+
+      iCtr1Hour_ = 0D;
+
+      iStr1Hour_ = 0D;
+
+      iRov1Hour_ = 0D;
+
+      iRos1Hour_ = 0D;
+
+      iTodayExpCnt_ = 0L;
+
+      iTodayClickCnt_ = 0L;
+
+      iTodayShareCnt_ = 0L;
+
+      iTodayReturnCnt_ = 0L;
+
+      iCtrToday_ = 0D;
+
+      iStrToday_ = 0D;
+
+      iRovToday_ = 0D;
+
+      iRosToday_ = 0D;
+
+      i1DayExpCnt_ = 0L;
+
+      i1DayClickCnt_ = 0L;
+
+      i1DayShareCnt_ = 0L;
+
+      i1DayReturnCnt_ = 0L;
+
+      iCtr1Day_ = 0D;
+
+      iStr1Day_ = 0D;
+
+      iRov1Day_ = 0D;
+
+      iRos1Day_ = 0D;
+
+      i3DayExpCnt_ = 0L;
+
+      i3DayClickCnt_ = 0L;
+
+      i3DayShareCnt_ = 0L;
+
+      i3DayReturnCnt_ = 0L;
+
+      iCtr3Day_ = 0D;
+
+      iStr3Day_ = 0D;
+
+      iRov3Day_ = 0D;
+
+      iRos3Day_ = 0D;
+
+      return this;
+    }
+
+    @java.lang.Override
+    public com.google.protobuf.Descriptors.Descriptor
+        getDescriptorForType() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.Feature.internal_static_GetVideoFeatureInfoResponse_descriptor;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse getDefaultInstanceForType() {
+      return com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse.getDefaultInstance();
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse build() {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse result = buildPartial();
+      if (!result.isInitialized()) {
+        throw newUninitializedMessageException(result);
+      }
+      return result;
+    }
+
+    @java.lang.Override
+    public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse buildPartial() {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse result = new com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse(this);
+      result.videoId_ = videoId_;
+      result.playCountTotal_ = playCountTotal_;
+      result.totalTime_ = totalTime_;
+      result.gmtCreate_ = gmtCreate_;
+      result.uid_ = uid_;
+      result.i15MinExpCnt_ = i15MinExpCnt_;
+      result.i15MinClickCnt_ = i15MinClickCnt_;
+      result.i15MinShareCnt_ = i15MinShareCnt_;
+      result.i15MinReturnCnt_ = i15MinReturnCnt_;
+      result.iCtr15Min_ = iCtr15Min_;
+      result.iStr15Min_ = iStr15Min_;
+      result.iRov15Min_ = iRov15Min_;
+      result.iRos15Min_ = iRos15Min_;
+      result.i1HourExpCnt_ = i1HourExpCnt_;
+      result.i1HourClickCnt_ = i1HourClickCnt_;
+      result.i1HourShareCnt_ = i1HourShareCnt_;
+      result.i1HourReturnCnt_ = i1HourReturnCnt_;
+      result.iCtr1Hour_ = iCtr1Hour_;
+      result.iStr1Hour_ = iStr1Hour_;
+      result.iRov1Hour_ = iRov1Hour_;
+      result.iRos1Hour_ = iRos1Hour_;
+      result.iTodayExpCnt_ = iTodayExpCnt_;
+      result.iTodayClickCnt_ = iTodayClickCnt_;
+      result.iTodayShareCnt_ = iTodayShareCnt_;
+      result.iTodayReturnCnt_ = iTodayReturnCnt_;
+      result.iCtrToday_ = iCtrToday_;
+      result.iStrToday_ = iStrToday_;
+      result.iRovToday_ = iRovToday_;
+      result.iRosToday_ = iRosToday_;
+      result.i1DayExpCnt_ = i1DayExpCnt_;
+      result.i1DayClickCnt_ = i1DayClickCnt_;
+      result.i1DayShareCnt_ = i1DayShareCnt_;
+      result.i1DayReturnCnt_ = i1DayReturnCnt_;
+      result.iCtr1Day_ = iCtr1Day_;
+      result.iStr1Day_ = iStr1Day_;
+      result.iRov1Day_ = iRov1Day_;
+      result.iRos1Day_ = iRos1Day_;
+      result.i3DayExpCnt_ = i3DayExpCnt_;
+      result.i3DayClickCnt_ = i3DayClickCnt_;
+      result.i3DayShareCnt_ = i3DayShareCnt_;
+      result.i3DayReturnCnt_ = i3DayReturnCnt_;
+      result.iCtr3Day_ = iCtr3Day_;
+      result.iStr3Day_ = iStr3Day_;
+      result.iRov3Day_ = iRov3Day_;
+      result.iRos3Day_ = iRos3Day_;
+      onBuilt();
+      return result;
+    }
+
+    @java.lang.Override
+    public Builder clone() {
+      return super.clone();
+    }
+    @java.lang.Override
+    public Builder setField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.setField(field, value);
+    }
+    @java.lang.Override
+    public Builder clearField(
+        com.google.protobuf.Descriptors.FieldDescriptor field) {
+      return super.clearField(field);
+    }
+    @java.lang.Override
+    public Builder clearOneof(
+        com.google.protobuf.Descriptors.OneofDescriptor oneof) {
+      return super.clearOneof(oneof);
+    }
+    @java.lang.Override
+    public Builder setRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        int index, java.lang.Object value) {
+      return super.setRepeatedField(field, index, value);
+    }
+    @java.lang.Override
+    public Builder addRepeatedField(
+        com.google.protobuf.Descriptors.FieldDescriptor field,
+        java.lang.Object value) {
+      return super.addRepeatedField(field, value);
+    }
+    @java.lang.Override
+    public Builder mergeFrom(com.google.protobuf.Message other) {
+      if (other instanceof com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse) {
+        return mergeFrom((com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse)other);
+      } else {
+        super.mergeFrom(other);
+        return this;
+      }
+    }
+
+    public Builder mergeFrom(com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse other) {
+      if (other == com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse.getDefaultInstance()) return this;
+      if (other.getVideoId() != 0L) {
+        setVideoId(other.getVideoId());
+      }
+      if (other.getPlayCountTotal() != 0L) {
+        setPlayCountTotal(other.getPlayCountTotal());
+      }
+      if (other.getTotalTime() != 0) {
+        setTotalTime(other.getTotalTime());
+      }
+      if (!other.getGmtCreate().isEmpty()) {
+        gmtCreate_ = other.gmtCreate_;
+        onChanged();
+      }
+      if (other.getUid() != 0L) {
+        setUid(other.getUid());
+      }
+      if (other.getI15MinExpCnt() != 0L) {
+        setI15MinExpCnt(other.getI15MinExpCnt());
+      }
+      if (other.getI15MinClickCnt() != 0L) {
+        setI15MinClickCnt(other.getI15MinClickCnt());
+      }
+      if (other.getI15MinShareCnt() != 0L) {
+        setI15MinShareCnt(other.getI15MinShareCnt());
+      }
+      if (other.getI15MinReturnCnt() != 0L) {
+        setI15MinReturnCnt(other.getI15MinReturnCnt());
+      }
+      if (other.getICtr15Min() != 0D) {
+        setICtr15Min(other.getICtr15Min());
+      }
+      if (other.getIStr15Min() != 0D) {
+        setIStr15Min(other.getIStr15Min());
+      }
+      if (other.getIRov15Min() != 0D) {
+        setIRov15Min(other.getIRov15Min());
+      }
+      if (other.getIRos15Min() != 0D) {
+        setIRos15Min(other.getIRos15Min());
+      }
+      if (other.getI1HourExpCnt() != 0L) {
+        setI1HourExpCnt(other.getI1HourExpCnt());
+      }
+      if (other.getI1HourClickCnt() != 0L) {
+        setI1HourClickCnt(other.getI1HourClickCnt());
+      }
+      if (other.getI1HourShareCnt() != 0L) {
+        setI1HourShareCnt(other.getI1HourShareCnt());
+      }
+      if (other.getI1HourReturnCnt() != 0L) {
+        setI1HourReturnCnt(other.getI1HourReturnCnt());
+      }
+      if (other.getICtr1Hour() != 0D) {
+        setICtr1Hour(other.getICtr1Hour());
+      }
+      if (other.getIStr1Hour() != 0D) {
+        setIStr1Hour(other.getIStr1Hour());
+      }
+      if (other.getIRov1Hour() != 0D) {
+        setIRov1Hour(other.getIRov1Hour());
+      }
+      if (other.getIRos1Hour() != 0D) {
+        setIRos1Hour(other.getIRos1Hour());
+      }
+      if (other.getITodayExpCnt() != 0L) {
+        setITodayExpCnt(other.getITodayExpCnt());
+      }
+      if (other.getITodayClickCnt() != 0L) {
+        setITodayClickCnt(other.getITodayClickCnt());
+      }
+      if (other.getITodayShareCnt() != 0L) {
+        setITodayShareCnt(other.getITodayShareCnt());
+      }
+      if (other.getITodayReturnCnt() != 0L) {
+        setITodayReturnCnt(other.getITodayReturnCnt());
+      }
+      if (other.getICtrToday() != 0D) {
+        setICtrToday(other.getICtrToday());
+      }
+      if (other.getIStrToday() != 0D) {
+        setIStrToday(other.getIStrToday());
+      }
+      if (other.getIRovToday() != 0D) {
+        setIRovToday(other.getIRovToday());
+      }
+      if (other.getIRosToday() != 0D) {
+        setIRosToday(other.getIRosToday());
+      }
+      if (other.getI1DayExpCnt() != 0L) {
+        setI1DayExpCnt(other.getI1DayExpCnt());
+      }
+      if (other.getI1DayClickCnt() != 0L) {
+        setI1DayClickCnt(other.getI1DayClickCnt());
+      }
+      if (other.getI1DayShareCnt() != 0L) {
+        setI1DayShareCnt(other.getI1DayShareCnt());
+      }
+      if (other.getI1DayReturnCnt() != 0L) {
+        setI1DayReturnCnt(other.getI1DayReturnCnt());
+      }
+      if (other.getICtr1Day() != 0D) {
+        setICtr1Day(other.getICtr1Day());
+      }
+      if (other.getIStr1Day() != 0D) {
+        setIStr1Day(other.getIStr1Day());
+      }
+      if (other.getIRov1Day() != 0D) {
+        setIRov1Day(other.getIRov1Day());
+      }
+      if (other.getIRos1Day() != 0D) {
+        setIRos1Day(other.getIRos1Day());
+      }
+      if (other.getI3DayExpCnt() != 0L) {
+        setI3DayExpCnt(other.getI3DayExpCnt());
+      }
+      if (other.getI3DayClickCnt() != 0L) {
+        setI3DayClickCnt(other.getI3DayClickCnt());
+      }
+      if (other.getI3DayShareCnt() != 0L) {
+        setI3DayShareCnt(other.getI3DayShareCnt());
+      }
+      if (other.getI3DayReturnCnt() != 0L) {
+        setI3DayReturnCnt(other.getI3DayReturnCnt());
+      }
+      if (other.getICtr3Day() != 0D) {
+        setICtr3Day(other.getICtr3Day());
+      }
+      if (other.getIStr3Day() != 0D) {
+        setIStr3Day(other.getIStr3Day());
+      }
+      if (other.getIRov3Day() != 0D) {
+        setIRov3Day(other.getIRov3Day());
+      }
+      if (other.getIRos3Day() != 0D) {
+        setIRos3Day(other.getIRos3Day());
+      }
+      this.mergeUnknownFields(other.unknownFields);
+      onChanged();
+      return this;
+    }
+
+    @java.lang.Override
+    public final boolean isInitialized() {
+      return true;
+    }
+
+    @java.lang.Override
+    public Builder mergeFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws java.io.IOException {
+      com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse parsedMessage = null;
+      try {
+        parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry);
+      } catch (com.google.protobuf.InvalidProtocolBufferException e) {
+        parsedMessage = (com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse) e.getUnfinishedMessage();
+        throw e.unwrapIOException();
+      } finally {
+        if (parsedMessage != null) {
+          mergeFrom(parsedMessage);
+        }
+      }
+      return this;
+    }
+
+    private long videoId_ ;
+    /**
+     * <code>int64 videoId = 1;</code>
+     * @return The videoId.
+     */
+    @java.lang.Override
+    public long getVideoId() {
+      return videoId_;
+    }
+    /**
+     * <code>int64 videoId = 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 videoId = 1;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearVideoId() {
+      
+      videoId_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long playCountTotal_ ;
+    /**
+     * <code>int64 playCountTotal = 2;</code>
+     * @return The playCountTotal.
+     */
+    @java.lang.Override
+    public long getPlayCountTotal() {
+      return playCountTotal_;
+    }
+    /**
+     * <code>int64 playCountTotal = 2;</code>
+     * @param value The playCountTotal to set.
+     * @return This builder for chaining.
+     */
+    public Builder setPlayCountTotal(long value) {
+      
+      playCountTotal_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 playCountTotal = 2;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearPlayCountTotal() {
+      
+      playCountTotal_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private int totalTime_ ;
+    /**
+     * <code>int32 totalTime = 3;</code>
+     * @return The totalTime.
+     */
+    @java.lang.Override
+    public int getTotalTime() {
+      return totalTime_;
+    }
+    /**
+     * <code>int32 totalTime = 3;</code>
+     * @param value The totalTime to set.
+     * @return This builder for chaining.
+     */
+    public Builder setTotalTime(int value) {
+      
+      totalTime_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int32 totalTime = 3;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearTotalTime() {
+      
+      totalTime_ = 0;
+      onChanged();
+      return this;
+    }
+
+    private java.lang.Object gmtCreate_ = "";
+    /**
+     * <code>string gmtCreate = 4;</code>
+     * @return The gmtCreate.
+     */
+    public java.lang.String getGmtCreate() {
+      java.lang.Object ref = gmtCreate_;
+      if (!(ref instanceof java.lang.String)) {
+        com.google.protobuf.ByteString bs =
+            (com.google.protobuf.ByteString) ref;
+        java.lang.String s = bs.toStringUtf8();
+        gmtCreate_ = s;
+        return s;
+      } else {
+        return (java.lang.String) ref;
+      }
+    }
+    /**
+     * <code>string gmtCreate = 4;</code>
+     * @return The bytes for gmtCreate.
+     */
+    public com.google.protobuf.ByteString
+        getGmtCreateBytes() {
+      java.lang.Object ref = gmtCreate_;
+      if (ref instanceof String) {
+        com.google.protobuf.ByteString b = 
+            com.google.protobuf.ByteString.copyFromUtf8(
+                (java.lang.String) ref);
+        gmtCreate_ = b;
+        return b;
+      } else {
+        return (com.google.protobuf.ByteString) ref;
+      }
+    }
+    /**
+     * <code>string gmtCreate = 4;</code>
+     * @param value The gmtCreate to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGmtCreate(
+        java.lang.String value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  
+      gmtCreate_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string gmtCreate = 4;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearGmtCreate() {
+      
+      gmtCreate_ = getDefaultInstance().getGmtCreate();
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>string gmtCreate = 4;</code>
+     * @param value The bytes for gmtCreate to set.
+     * @return This builder for chaining.
+     */
+    public Builder setGmtCreateBytes(
+        com.google.protobuf.ByteString value) {
+      if (value == null) {
+    throw new NullPointerException();
+  }
+  checkByteStringIsUtf8(value);
+      
+      gmtCreate_ = value;
+      onChanged();
+      return this;
+    }
+
+    private long uid_ ;
+    /**
+     * <pre>
+     * 上传者
+     * </pre>
+     *
+     * <code>int64 uid = 5;</code>
+     * @return The uid.
+     */
+    @java.lang.Override
+    public long getUid() {
+      return uid_;
+    }
+    /**
+     * <pre>
+     * 上传者
+     * </pre>
+     *
+     * <code>int64 uid = 5;</code>
+     * @param value The uid to set.
+     * @return This builder for chaining.
+     */
+    public Builder setUid(long value) {
+      
+      uid_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * 上传者
+     * </pre>
+     *
+     * <code>int64 uid = 5;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearUid() {
+      
+      uid_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long i15MinExpCnt_ ;
+    /**
+     * <pre>
+     * 过去十五分钟
+     * </pre>
+     *
+     * <code>int64 i15minExpCnt = 6;</code>
+     * @return The i15minExpCnt.
+     */
+    @java.lang.Override
+    public long getI15MinExpCnt() {
+      return i15MinExpCnt_;
+    }
+    /**
+     * <pre>
+     * 过去十五分钟
+     * </pre>
+     *
+     * <code>int64 i15minExpCnt = 6;</code>
+     * @param value The i15minExpCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setI15MinExpCnt(long value) {
+      
+      i15MinExpCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * 过去十五分钟
+     * </pre>
+     *
+     * <code>int64 i15minExpCnt = 6;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearI15MinExpCnt() {
+      
+      i15MinExpCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long i15MinClickCnt_ ;
+    /**
+     * <code>int64 i15minClickCnt = 7;</code>
+     * @return The i15minClickCnt.
+     */
+    @java.lang.Override
+    public long getI15MinClickCnt() {
+      return i15MinClickCnt_;
+    }
+    /**
+     * <code>int64 i15minClickCnt = 7;</code>
+     * @param value The i15minClickCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setI15MinClickCnt(long value) {
+      
+      i15MinClickCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 i15minClickCnt = 7;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearI15MinClickCnt() {
+      
+      i15MinClickCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long i15MinShareCnt_ ;
+    /**
+     * <code>int64 i15minShareCnt = 8;</code>
+     * @return The i15minShareCnt.
+     */
+    @java.lang.Override
+    public long getI15MinShareCnt() {
+      return i15MinShareCnt_;
+    }
+    /**
+     * <code>int64 i15minShareCnt = 8;</code>
+     * @param value The i15minShareCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setI15MinShareCnt(long value) {
+      
+      i15MinShareCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 i15minShareCnt = 8;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearI15MinShareCnt() {
+      
+      i15MinShareCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long i15MinReturnCnt_ ;
+    /**
+     * <code>int64 i15minReturnCnt = 9;</code>
+     * @return The i15minReturnCnt.
+     */
+    @java.lang.Override
+    public long getI15MinReturnCnt() {
+      return i15MinReturnCnt_;
+    }
+    /**
+     * <code>int64 i15minReturnCnt = 9;</code>
+     * @param value The i15minReturnCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setI15MinReturnCnt(long value) {
+      
+      i15MinReturnCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 i15minReturnCnt = 9;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearI15MinReturnCnt() {
+      
+      i15MinReturnCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private double iCtr15Min_ ;
+    /**
+     * <code>double iCtr15min = 10;</code>
+     * @return The iCtr15min.
+     */
+    @java.lang.Override
+    public double getICtr15Min() {
+      return iCtr15Min_;
+    }
+    /**
+     * <code>double iCtr15min = 10;</code>
+     * @param value The iCtr15min to set.
+     * @return This builder for chaining.
+     */
+    public Builder setICtr15Min(double value) {
+      
+      iCtr15Min_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iCtr15min = 10;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearICtr15Min() {
+      
+      iCtr15Min_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double iStr15Min_ ;
+    /**
+     * <code>double iStr15min = 11;</code>
+     * @return The iStr15min.
+     */
+    @java.lang.Override
+    public double getIStr15Min() {
+      return iStr15Min_;
+    }
+    /**
+     * <code>double iStr15min = 11;</code>
+     * @param value The iStr15min to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIStr15Min(double value) {
+      
+      iStr15Min_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iStr15min = 11;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIStr15Min() {
+      
+      iStr15Min_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double iRov15Min_ ;
+    /**
+     * <code>double iRov15min = 12;</code>
+     * @return The iRov15min.
+     */
+    @java.lang.Override
+    public double getIRov15Min() {
+      return iRov15Min_;
+    }
+    /**
+     * <code>double iRov15min = 12;</code>
+     * @param value The iRov15min to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIRov15Min(double value) {
+      
+      iRov15Min_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iRov15min = 12;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIRov15Min() {
+      
+      iRov15Min_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double iRos15Min_ ;
+    /**
+     * <code>double iRos15min = 13;</code>
+     * @return The iRos15min.
+     */
+    @java.lang.Override
+    public double getIRos15Min() {
+      return iRos15Min_;
+    }
+    /**
+     * <code>double iRos15min = 13;</code>
+     * @param value The iRos15min to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIRos15Min(double value) {
+      
+      iRos15Min_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iRos15min = 13;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIRos15Min() {
+      
+      iRos15Min_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private long i1HourExpCnt_ ;
+    /**
+     * <pre>
+     * 过去一小时
+     * </pre>
+     *
+     * <code>int64 i1hourExpCnt = 14;</code>
+     * @return The i1hourExpCnt.
+     */
+    @java.lang.Override
+    public long getI1HourExpCnt() {
+      return i1HourExpCnt_;
+    }
+    /**
+     * <pre>
+     * 过去一小时
+     * </pre>
+     *
+     * <code>int64 i1hourExpCnt = 14;</code>
+     * @param value The i1hourExpCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setI1HourExpCnt(long value) {
+      
+      i1HourExpCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * 过去一小时
+     * </pre>
+     *
+     * <code>int64 i1hourExpCnt = 14;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearI1HourExpCnt() {
+      
+      i1HourExpCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long i1HourClickCnt_ ;
+    /**
+     * <code>int64 i1hourClickCnt = 15;</code>
+     * @return The i1hourClickCnt.
+     */
+    @java.lang.Override
+    public long getI1HourClickCnt() {
+      return i1HourClickCnt_;
+    }
+    /**
+     * <code>int64 i1hourClickCnt = 15;</code>
+     * @param value The i1hourClickCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setI1HourClickCnt(long value) {
+      
+      i1HourClickCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 i1hourClickCnt = 15;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearI1HourClickCnt() {
+      
+      i1HourClickCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long i1HourShareCnt_ ;
+    /**
+     * <code>int64 i1hourShareCnt = 16;</code>
+     * @return The i1hourShareCnt.
+     */
+    @java.lang.Override
+    public long getI1HourShareCnt() {
+      return i1HourShareCnt_;
+    }
+    /**
+     * <code>int64 i1hourShareCnt = 16;</code>
+     * @param value The i1hourShareCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setI1HourShareCnt(long value) {
+      
+      i1HourShareCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 i1hourShareCnt = 16;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearI1HourShareCnt() {
+      
+      i1HourShareCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long i1HourReturnCnt_ ;
+    /**
+     * <code>int64 i1hourReturnCnt = 17;</code>
+     * @return The i1hourReturnCnt.
+     */
+    @java.lang.Override
+    public long getI1HourReturnCnt() {
+      return i1HourReturnCnt_;
+    }
+    /**
+     * <code>int64 i1hourReturnCnt = 17;</code>
+     * @param value The i1hourReturnCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setI1HourReturnCnt(long value) {
+      
+      i1HourReturnCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 i1hourReturnCnt = 17;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearI1HourReturnCnt() {
+      
+      i1HourReturnCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private double iCtr1Hour_ ;
+    /**
+     * <code>double iCtr1hour = 18;</code>
+     * @return The iCtr1hour.
+     */
+    @java.lang.Override
+    public double getICtr1Hour() {
+      return iCtr1Hour_;
+    }
+    /**
+     * <code>double iCtr1hour = 18;</code>
+     * @param value The iCtr1hour to set.
+     * @return This builder for chaining.
+     */
+    public Builder setICtr1Hour(double value) {
+      
+      iCtr1Hour_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iCtr1hour = 18;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearICtr1Hour() {
+      
+      iCtr1Hour_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double iStr1Hour_ ;
+    /**
+     * <code>double iStr1hour = 19;</code>
+     * @return The iStr1hour.
+     */
+    @java.lang.Override
+    public double getIStr1Hour() {
+      return iStr1Hour_;
+    }
+    /**
+     * <code>double iStr1hour = 19;</code>
+     * @param value The iStr1hour to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIStr1Hour(double value) {
+      
+      iStr1Hour_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iStr1hour = 19;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIStr1Hour() {
+      
+      iStr1Hour_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double iRov1Hour_ ;
+    /**
+     * <code>double iRov1hour = 20;</code>
+     * @return The iRov1hour.
+     */
+    @java.lang.Override
+    public double getIRov1Hour() {
+      return iRov1Hour_;
+    }
+    /**
+     * <code>double iRov1hour = 20;</code>
+     * @param value The iRov1hour to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIRov1Hour(double value) {
+      
+      iRov1Hour_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iRov1hour = 20;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIRov1Hour() {
+      
+      iRov1Hour_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double iRos1Hour_ ;
+    /**
+     * <code>double iRos1hour = 21;</code>
+     * @return The iRos1hour.
+     */
+    @java.lang.Override
+    public double getIRos1Hour() {
+      return iRos1Hour_;
+    }
+    /**
+     * <code>double iRos1hour = 21;</code>
+     * @param value The iRos1hour to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIRos1Hour(double value) {
+      
+      iRos1Hour_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iRos1hour = 21;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIRos1Hour() {
+      
+      iRos1Hour_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private long iTodayExpCnt_ ;
+    /**
+     * <pre>
+     * 今天
+     * </pre>
+     *
+     * <code>int64 iTodayExpCnt = 22;</code>
+     * @return The iTodayExpCnt.
+     */
+    @java.lang.Override
+    public long getITodayExpCnt() {
+      return iTodayExpCnt_;
+    }
+    /**
+     * <pre>
+     * 今天
+     * </pre>
+     *
+     * <code>int64 iTodayExpCnt = 22;</code>
+     * @param value The iTodayExpCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setITodayExpCnt(long value) {
+      
+      iTodayExpCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * 今天
+     * </pre>
+     *
+     * <code>int64 iTodayExpCnt = 22;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearITodayExpCnt() {
+      
+      iTodayExpCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long iTodayClickCnt_ ;
+    /**
+     * <code>int64 iTodayClickCnt = 23;</code>
+     * @return The iTodayClickCnt.
+     */
+    @java.lang.Override
+    public long getITodayClickCnt() {
+      return iTodayClickCnt_;
+    }
+    /**
+     * <code>int64 iTodayClickCnt = 23;</code>
+     * @param value The iTodayClickCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setITodayClickCnt(long value) {
+      
+      iTodayClickCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 iTodayClickCnt = 23;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearITodayClickCnt() {
+      
+      iTodayClickCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long iTodayShareCnt_ ;
+    /**
+     * <code>int64 iTodayShareCnt = 24;</code>
+     * @return The iTodayShareCnt.
+     */
+    @java.lang.Override
+    public long getITodayShareCnt() {
+      return iTodayShareCnt_;
+    }
+    /**
+     * <code>int64 iTodayShareCnt = 24;</code>
+     * @param value The iTodayShareCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setITodayShareCnt(long value) {
+      
+      iTodayShareCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 iTodayShareCnt = 24;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearITodayShareCnt() {
+      
+      iTodayShareCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long iTodayReturnCnt_ ;
+    /**
+     * <code>int64 iTodayReturnCnt = 25;</code>
+     * @return The iTodayReturnCnt.
+     */
+    @java.lang.Override
+    public long getITodayReturnCnt() {
+      return iTodayReturnCnt_;
+    }
+    /**
+     * <code>int64 iTodayReturnCnt = 25;</code>
+     * @param value The iTodayReturnCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setITodayReturnCnt(long value) {
+      
+      iTodayReturnCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 iTodayReturnCnt = 25;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearITodayReturnCnt() {
+      
+      iTodayReturnCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private double iCtrToday_ ;
+    /**
+     * <code>double iCtrToday = 26;</code>
+     * @return The iCtrToday.
+     */
+    @java.lang.Override
+    public double getICtrToday() {
+      return iCtrToday_;
+    }
+    /**
+     * <code>double iCtrToday = 26;</code>
+     * @param value The iCtrToday to set.
+     * @return This builder for chaining.
+     */
+    public Builder setICtrToday(double value) {
+      
+      iCtrToday_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iCtrToday = 26;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearICtrToday() {
+      
+      iCtrToday_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double iStrToday_ ;
+    /**
+     * <code>double iStrToday = 27;</code>
+     * @return The iStrToday.
+     */
+    @java.lang.Override
+    public double getIStrToday() {
+      return iStrToday_;
+    }
+    /**
+     * <code>double iStrToday = 27;</code>
+     * @param value The iStrToday to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIStrToday(double value) {
+      
+      iStrToday_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iStrToday = 27;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIStrToday() {
+      
+      iStrToday_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double iRovToday_ ;
+    /**
+     * <code>double iRovToday = 28;</code>
+     * @return The iRovToday.
+     */
+    @java.lang.Override
+    public double getIRovToday() {
+      return iRovToday_;
+    }
+    /**
+     * <code>double iRovToday = 28;</code>
+     * @param value The iRovToday to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIRovToday(double value) {
+      
+      iRovToday_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iRovToday = 28;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIRovToday() {
+      
+      iRovToday_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double iRosToday_ ;
+    /**
+     * <code>double iRosToday = 29;</code>
+     * @return The iRosToday.
+     */
+    @java.lang.Override
+    public double getIRosToday() {
+      return iRosToday_;
+    }
+    /**
+     * <code>double iRosToday = 29;</code>
+     * @param value The iRosToday to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIRosToday(double value) {
+      
+      iRosToday_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iRosToday = 29;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIRosToday() {
+      
+      iRosToday_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private long i1DayExpCnt_ ;
+    /**
+     * <pre>
+     * 过去一天
+     * </pre>
+     *
+     * <code>int64 i1dayExpCnt = 30;</code>
+     * @return The i1dayExpCnt.
+     */
+    @java.lang.Override
+    public long getI1DayExpCnt() {
+      return i1DayExpCnt_;
+    }
+    /**
+     * <pre>
+     * 过去一天
+     * </pre>
+     *
+     * <code>int64 i1dayExpCnt = 30;</code>
+     * @param value The i1dayExpCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setI1DayExpCnt(long value) {
+      
+      i1DayExpCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * 过去一天
+     * </pre>
+     *
+     * <code>int64 i1dayExpCnt = 30;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearI1DayExpCnt() {
+      
+      i1DayExpCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long i1DayClickCnt_ ;
+    /**
+     * <code>int64 i1dayClickCnt = 31;</code>
+     * @return The i1dayClickCnt.
+     */
+    @java.lang.Override
+    public long getI1DayClickCnt() {
+      return i1DayClickCnt_;
+    }
+    /**
+     * <code>int64 i1dayClickCnt = 31;</code>
+     * @param value The i1dayClickCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setI1DayClickCnt(long value) {
+      
+      i1DayClickCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 i1dayClickCnt = 31;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearI1DayClickCnt() {
+      
+      i1DayClickCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long i1DayShareCnt_ ;
+    /**
+     * <code>int64 i1dayShareCnt = 32;</code>
+     * @return The i1dayShareCnt.
+     */
+    @java.lang.Override
+    public long getI1DayShareCnt() {
+      return i1DayShareCnt_;
+    }
+    /**
+     * <code>int64 i1dayShareCnt = 32;</code>
+     * @param value The i1dayShareCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setI1DayShareCnt(long value) {
+      
+      i1DayShareCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 i1dayShareCnt = 32;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearI1DayShareCnt() {
+      
+      i1DayShareCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long i1DayReturnCnt_ ;
+    /**
+     * <code>int64 i1dayReturnCnt = 33;</code>
+     * @return The i1dayReturnCnt.
+     */
+    @java.lang.Override
+    public long getI1DayReturnCnt() {
+      return i1DayReturnCnt_;
+    }
+    /**
+     * <code>int64 i1dayReturnCnt = 33;</code>
+     * @param value The i1dayReturnCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setI1DayReturnCnt(long value) {
+      
+      i1DayReturnCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 i1dayReturnCnt = 33;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearI1DayReturnCnt() {
+      
+      i1DayReturnCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private double iCtr1Day_ ;
+    /**
+     * <code>double iCtr1day = 34;</code>
+     * @return The iCtr1day.
+     */
+    @java.lang.Override
+    public double getICtr1Day() {
+      return iCtr1Day_;
+    }
+    /**
+     * <code>double iCtr1day = 34;</code>
+     * @param value The iCtr1day to set.
+     * @return This builder for chaining.
+     */
+    public Builder setICtr1Day(double value) {
+      
+      iCtr1Day_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iCtr1day = 34;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearICtr1Day() {
+      
+      iCtr1Day_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double iStr1Day_ ;
+    /**
+     * <code>double iStr1day = 35;</code>
+     * @return The iStr1day.
+     */
+    @java.lang.Override
+    public double getIStr1Day() {
+      return iStr1Day_;
+    }
+    /**
+     * <code>double iStr1day = 35;</code>
+     * @param value The iStr1day to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIStr1Day(double value) {
+      
+      iStr1Day_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iStr1day = 35;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIStr1Day() {
+      
+      iStr1Day_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double iRov1Day_ ;
+    /**
+     * <code>double iRov1day = 36;</code>
+     * @return The iRov1day.
+     */
+    @java.lang.Override
+    public double getIRov1Day() {
+      return iRov1Day_;
+    }
+    /**
+     * <code>double iRov1day = 36;</code>
+     * @param value The iRov1day to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIRov1Day(double value) {
+      
+      iRov1Day_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iRov1day = 36;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIRov1Day() {
+      
+      iRov1Day_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double iRos1Day_ ;
+    /**
+     * <code>double iRos1day = 37;</code>
+     * @return The iRos1day.
+     */
+    @java.lang.Override
+    public double getIRos1Day() {
+      return iRos1Day_;
+    }
+    /**
+     * <code>double iRos1day = 37;</code>
+     * @param value The iRos1day to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIRos1Day(double value) {
+      
+      iRos1Day_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iRos1day = 37;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIRos1Day() {
+      
+      iRos1Day_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private long i3DayExpCnt_ ;
+    /**
+     * <pre>
+     * 过去三天
+     * </pre>
+     *
+     * <code>int64 i3dayExpCnt = 38;</code>
+     * @return The i3dayExpCnt.
+     */
+    @java.lang.Override
+    public long getI3DayExpCnt() {
+      return i3DayExpCnt_;
+    }
+    /**
+     * <pre>
+     * 过去三天
+     * </pre>
+     *
+     * <code>int64 i3dayExpCnt = 38;</code>
+     * @param value The i3dayExpCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setI3DayExpCnt(long value) {
+      
+      i3DayExpCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <pre>
+     * 过去三天
+     * </pre>
+     *
+     * <code>int64 i3dayExpCnt = 38;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearI3DayExpCnt() {
+      
+      i3DayExpCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long i3DayClickCnt_ ;
+    /**
+     * <code>int64 i3dayClickCnt = 39;</code>
+     * @return The i3dayClickCnt.
+     */
+    @java.lang.Override
+    public long getI3DayClickCnt() {
+      return i3DayClickCnt_;
+    }
+    /**
+     * <code>int64 i3dayClickCnt = 39;</code>
+     * @param value The i3dayClickCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setI3DayClickCnt(long value) {
+      
+      i3DayClickCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 i3dayClickCnt = 39;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearI3DayClickCnt() {
+      
+      i3DayClickCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long i3DayShareCnt_ ;
+    /**
+     * <code>int64 i3dayShareCnt = 40;</code>
+     * @return The i3dayShareCnt.
+     */
+    @java.lang.Override
+    public long getI3DayShareCnt() {
+      return i3DayShareCnt_;
+    }
+    /**
+     * <code>int64 i3dayShareCnt = 40;</code>
+     * @param value The i3dayShareCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setI3DayShareCnt(long value) {
+      
+      i3DayShareCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 i3dayShareCnt = 40;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearI3DayShareCnt() {
+      
+      i3DayShareCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private long i3DayReturnCnt_ ;
+    /**
+     * <code>int64 i3dayReturnCnt = 41;</code>
+     * @return The i3dayReturnCnt.
+     */
+    @java.lang.Override
+    public long getI3DayReturnCnt() {
+      return i3DayReturnCnt_;
+    }
+    /**
+     * <code>int64 i3dayReturnCnt = 41;</code>
+     * @param value The i3dayReturnCnt to set.
+     * @return This builder for chaining.
+     */
+    public Builder setI3DayReturnCnt(long value) {
+      
+      i3DayReturnCnt_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>int64 i3dayReturnCnt = 41;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearI3DayReturnCnt() {
+      
+      i3DayReturnCnt_ = 0L;
+      onChanged();
+      return this;
+    }
+
+    private double iCtr3Day_ ;
+    /**
+     * <code>double iCtr3day = 42;</code>
+     * @return The iCtr3day.
+     */
+    @java.lang.Override
+    public double getICtr3Day() {
+      return iCtr3Day_;
+    }
+    /**
+     * <code>double iCtr3day = 42;</code>
+     * @param value The iCtr3day to set.
+     * @return This builder for chaining.
+     */
+    public Builder setICtr3Day(double value) {
+      
+      iCtr3Day_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iCtr3day = 42;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearICtr3Day() {
+      
+      iCtr3Day_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double iStr3Day_ ;
+    /**
+     * <code>double iStr3day = 43;</code>
+     * @return The iStr3day.
+     */
+    @java.lang.Override
+    public double getIStr3Day() {
+      return iStr3Day_;
+    }
+    /**
+     * <code>double iStr3day = 43;</code>
+     * @param value The iStr3day to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIStr3Day(double value) {
+      
+      iStr3Day_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iStr3day = 43;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIStr3Day() {
+      
+      iStr3Day_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double iRov3Day_ ;
+    /**
+     * <code>double iRov3day = 44;</code>
+     * @return The iRov3day.
+     */
+    @java.lang.Override
+    public double getIRov3Day() {
+      return iRov3Day_;
+    }
+    /**
+     * <code>double iRov3day = 44;</code>
+     * @param value The iRov3day to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIRov3Day(double value) {
+      
+      iRov3Day_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iRov3day = 44;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIRov3Day() {
+      
+      iRov3Day_ = 0D;
+      onChanged();
+      return this;
+    }
+
+    private double iRos3Day_ ;
+    /**
+     * <code>double iRos3day = 45;</code>
+     * @return The iRos3day.
+     */
+    @java.lang.Override
+    public double getIRos3Day() {
+      return iRos3Day_;
+    }
+    /**
+     * <code>double iRos3day = 45;</code>
+     * @param value The iRos3day to set.
+     * @return This builder for chaining.
+     */
+    public Builder setIRos3Day(double value) {
+      
+      iRos3Day_ = value;
+      onChanged();
+      return this;
+    }
+    /**
+     * <code>double iRos3day = 45;</code>
+     * @return This builder for chaining.
+     */
+    public Builder clearIRos3Day() {
+      
+      iRos3Day_ = 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:GetVideoFeatureInfoResponse)
+  }
+
+  // @@protoc_insertion_point(class_scope:GetVideoFeatureInfoResponse)
+  private static final com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse DEFAULT_INSTANCE;
+  static {
+    DEFAULT_INSTANCE = new com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse();
+  }
+
+  public static com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse getDefaultInstance() {
+    return DEFAULT_INSTANCE;
+  }
+
+  private static final com.google.protobuf.Parser<GetVideoFeatureInfoResponse>
+      PARSER = new com.google.protobuf.AbstractParser<GetVideoFeatureInfoResponse>() {
+    @java.lang.Override
+    public GetVideoFeatureInfoResponse parsePartialFrom(
+        com.google.protobuf.CodedInputStream input,
+        com.google.protobuf.ExtensionRegistryLite extensionRegistry)
+        throws com.google.protobuf.InvalidProtocolBufferException {
+      return new GetVideoFeatureInfoResponse(input, extensionRegistry);
+    }
+  };
+
+  public static com.google.protobuf.Parser<GetVideoFeatureInfoResponse> parser() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.google.protobuf.Parser<GetVideoFeatureInfoResponse> getParserForType() {
+    return PARSER;
+  }
+
+  @java.lang.Override
+  public com.tzld.piaoquan.recommend.feature.model.feature.GetVideoFeatureInfoResponse getDefaultInstanceForType() {
+    return DEFAULT_INSTANCE;
+  }
+
+}
+

+ 309 - 0
recommend-feature-client/src/main/java/com/tzld/piaoquan/recommend/feature/model/feature/GetVideoFeatureInfoResponseOrBuilder.java

@@ -0,0 +1,309 @@
+// Generated by the protocol buffer compiler.  DO NOT EDIT!
+// source: com/tzld/piaoquan/recommend/feature/feature.proto
+
+package com.tzld.piaoquan.recommend.feature.model.feature;
+
+public interface GetVideoFeatureInfoResponseOrBuilder extends
+    // @@protoc_insertion_point(interface_extends:GetVideoFeatureInfoResponse)
+    com.google.protobuf.MessageOrBuilder {
+
+  /**
+   * <code>int64 videoId = 1;</code>
+   * @return The videoId.
+   */
+  long getVideoId();
+
+  /**
+   * <code>int64 playCountTotal = 2;</code>
+   * @return The playCountTotal.
+   */
+  long getPlayCountTotal();
+
+  /**
+   * <code>int32 totalTime = 3;</code>
+   * @return The totalTime.
+   */
+  int getTotalTime();
+
+  /**
+   * <code>string gmtCreate = 4;</code>
+   * @return The gmtCreate.
+   */
+  java.lang.String getGmtCreate();
+  /**
+   * <code>string gmtCreate = 4;</code>
+   * @return The bytes for gmtCreate.
+   */
+  com.google.protobuf.ByteString
+      getGmtCreateBytes();
+
+  /**
+   * <pre>
+   * 上传者
+   * </pre>
+   *
+   * <code>int64 uid = 5;</code>
+   * @return The uid.
+   */
+  long getUid();
+
+  /**
+   * <pre>
+   * 过去十五分钟
+   * </pre>
+   *
+   * <code>int64 i15minExpCnt = 6;</code>
+   * @return The i15minExpCnt.
+   */
+  long getI15MinExpCnt();
+
+  /**
+   * <code>int64 i15minClickCnt = 7;</code>
+   * @return The i15minClickCnt.
+   */
+  long getI15MinClickCnt();
+
+  /**
+   * <code>int64 i15minShareCnt = 8;</code>
+   * @return The i15minShareCnt.
+   */
+  long getI15MinShareCnt();
+
+  /**
+   * <code>int64 i15minReturnCnt = 9;</code>
+   * @return The i15minReturnCnt.
+   */
+  long getI15MinReturnCnt();
+
+  /**
+   * <code>double iCtr15min = 10;</code>
+   * @return The iCtr15min.
+   */
+  double getICtr15Min();
+
+  /**
+   * <code>double iStr15min = 11;</code>
+   * @return The iStr15min.
+   */
+  double getIStr15Min();
+
+  /**
+   * <code>double iRov15min = 12;</code>
+   * @return The iRov15min.
+   */
+  double getIRov15Min();
+
+  /**
+   * <code>double iRos15min = 13;</code>
+   * @return The iRos15min.
+   */
+  double getIRos15Min();
+
+  /**
+   * <pre>
+   * 过去一小时
+   * </pre>
+   *
+   * <code>int64 i1hourExpCnt = 14;</code>
+   * @return The i1hourExpCnt.
+   */
+  long getI1HourExpCnt();
+
+  /**
+   * <code>int64 i1hourClickCnt = 15;</code>
+   * @return The i1hourClickCnt.
+   */
+  long getI1HourClickCnt();
+
+  /**
+   * <code>int64 i1hourShareCnt = 16;</code>
+   * @return The i1hourShareCnt.
+   */
+  long getI1HourShareCnt();
+
+  /**
+   * <code>int64 i1hourReturnCnt = 17;</code>
+   * @return The i1hourReturnCnt.
+   */
+  long getI1HourReturnCnt();
+
+  /**
+   * <code>double iCtr1hour = 18;</code>
+   * @return The iCtr1hour.
+   */
+  double getICtr1Hour();
+
+  /**
+   * <code>double iStr1hour = 19;</code>
+   * @return The iStr1hour.
+   */
+  double getIStr1Hour();
+
+  /**
+   * <code>double iRov1hour = 20;</code>
+   * @return The iRov1hour.
+   */
+  double getIRov1Hour();
+
+  /**
+   * <code>double iRos1hour = 21;</code>
+   * @return The iRos1hour.
+   */
+  double getIRos1Hour();
+
+  /**
+   * <pre>
+   * 今天
+   * </pre>
+   *
+   * <code>int64 iTodayExpCnt = 22;</code>
+   * @return The iTodayExpCnt.
+   */
+  long getITodayExpCnt();
+
+  /**
+   * <code>int64 iTodayClickCnt = 23;</code>
+   * @return The iTodayClickCnt.
+   */
+  long getITodayClickCnt();
+
+  /**
+   * <code>int64 iTodayShareCnt = 24;</code>
+   * @return The iTodayShareCnt.
+   */
+  long getITodayShareCnt();
+
+  /**
+   * <code>int64 iTodayReturnCnt = 25;</code>
+   * @return The iTodayReturnCnt.
+   */
+  long getITodayReturnCnt();
+
+  /**
+   * <code>double iCtrToday = 26;</code>
+   * @return The iCtrToday.
+   */
+  double getICtrToday();
+
+  /**
+   * <code>double iStrToday = 27;</code>
+   * @return The iStrToday.
+   */
+  double getIStrToday();
+
+  /**
+   * <code>double iRovToday = 28;</code>
+   * @return The iRovToday.
+   */
+  double getIRovToday();
+
+  /**
+   * <code>double iRosToday = 29;</code>
+   * @return The iRosToday.
+   */
+  double getIRosToday();
+
+  /**
+   * <pre>
+   * 过去一天
+   * </pre>
+   *
+   * <code>int64 i1dayExpCnt = 30;</code>
+   * @return The i1dayExpCnt.
+   */
+  long getI1DayExpCnt();
+
+  /**
+   * <code>int64 i1dayClickCnt = 31;</code>
+   * @return The i1dayClickCnt.
+   */
+  long getI1DayClickCnt();
+
+  /**
+   * <code>int64 i1dayShareCnt = 32;</code>
+   * @return The i1dayShareCnt.
+   */
+  long getI1DayShareCnt();
+
+  /**
+   * <code>int64 i1dayReturnCnt = 33;</code>
+   * @return The i1dayReturnCnt.
+   */
+  long getI1DayReturnCnt();
+
+  /**
+   * <code>double iCtr1day = 34;</code>
+   * @return The iCtr1day.
+   */
+  double getICtr1Day();
+
+  /**
+   * <code>double iStr1day = 35;</code>
+   * @return The iStr1day.
+   */
+  double getIStr1Day();
+
+  /**
+   * <code>double iRov1day = 36;</code>
+   * @return The iRov1day.
+   */
+  double getIRov1Day();
+
+  /**
+   * <code>double iRos1day = 37;</code>
+   * @return The iRos1day.
+   */
+  double getIRos1Day();
+
+  /**
+   * <pre>
+   * 过去三天
+   * </pre>
+   *
+   * <code>int64 i3dayExpCnt = 38;</code>
+   * @return The i3dayExpCnt.
+   */
+  long getI3DayExpCnt();
+
+  /**
+   * <code>int64 i3dayClickCnt = 39;</code>
+   * @return The i3dayClickCnt.
+   */
+  long getI3DayClickCnt();
+
+  /**
+   * <code>int64 i3dayShareCnt = 40;</code>
+   * @return The i3dayShareCnt.
+   */
+  long getI3DayShareCnt();
+
+  /**
+   * <code>int64 i3dayReturnCnt = 41;</code>
+   * @return The i3dayReturnCnt.
+   */
+  long getI3DayReturnCnt();
+
+  /**
+   * <code>double iCtr3day = 42;</code>
+   * @return The iCtr3day.
+   */
+  double getICtr3Day();
+
+  /**
+   * <code>double iStr3day = 43;</code>
+   * @return The iStr3day.
+   */
+  double getIStr3Day();
+
+  /**
+   * <code>double iRov3day = 44;</code>
+   * @return The iRov3day.
+   */
+  double getIRov3Day();
+
+  /**
+   * <code>double iRos3day = 45;</code>
+   * @return The iRos3day.
+   */
+  double getIRos3Day();
+}