瀏覽代碼

MOD:优化预曝光过滤

sunxy 1 年之前
父節點
當前提交
0af1977b84

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

@@ -167,16 +167,16 @@ public class RecommendService {
                 map.put("traceId", String.valueOf(TraceUtils.currentTraceId()));
 
                 // TODO user
-                map.put("sessionId", String.valueOf(request.getSessionId()));
-                map.put("subsessionid", String.valueOf(request.getSubSessionId()));
+                map.put("sessionId", request.getSessionId());
+                map.put("subsessionid", request.getSubSessionId());
                 map.put("mid", param.getMid());
 
                 // ab
-                map.put("newexpgroup", String.valueOf(request.getNewExpGroup()));
+                map.put("newexpgroup", request.getNewExpGroup());
 
                 // scene
                 map.put("apptype", String.valueOf(request.getAppType()));
-                map.put("pagesource", String.valueOf(request.getPageSource()));
+                map.put("pagesource", request.getPageSource());
 
                 // video
                 map.put("videoId", String.valueOf(v.getVideoId()));
@@ -205,7 +205,7 @@ public class RecommendService {
         }
     }
 
-    private RecommendResponse specialMidRecommend(RecommendRequest request) {
+    public RecommendResponse specialMidRecommend(RecommendRequest request) {
         log.info("hit special mid recommend request={}", JSONUtils.toJson(request));
         if (request == null) {
             return RecommendResponse.newBuilder()

+ 60 - 9
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/VideoRecommendService.java

@@ -15,14 +15,19 @@ import com.tzld.piaoquan.recommend.server.model.Video;
 import com.tzld.piaoquan.recommend.server.service.rank.RankParam;
 import com.tzld.piaoquan.recommend.server.service.rank.RankResult;
 import com.tzld.piaoquan.recommend.server.service.rank.strategy.RankStrategy4RegionMergeModelV2;
+import com.tzld.piaoquan.recommend.server.util.JSONUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 /**
  * @author sunxy
@@ -41,6 +46,9 @@ public class VideoRecommendService {
     private FlowPoolRecommendPipeline flowPoolRecommendPipeline;
     @Resource
     private RankStrategy4RegionMergeModelV2 rankStrategy4RegionMergeModelV2;
+    @Autowired
+    @Qualifier("redisTemplate")
+    private RedisTemplate<String, String> redisTemplate;
 
     public RecommendResponse homepageRecommend(RecommendRequest request) {
         RecommendParam recommendParam = recommendService.genRecommendParam(request, 0);
@@ -59,7 +67,53 @@ public class VideoRecommendService {
         return recommend(request, 1);
     }
 
-    private RecommendResponse recommendNew(RecommendRequest request, RecommendParam recommendParam, int recommendType) {
+    private RecommendResponse recommendNew(RecommendRequest request, RecommendParam param, int recommendType) {
+        if (request == null) {
+            return RecommendResponse.newBuilder()
+                    .setResult(Result.newBuilder().setCode(1).setMessage("success"))
+                    .build();
+        }
+        if (request.getVersionAuditStatus() == 1) {
+            return recommendService.specialMidRecommend(request);
+        }
+        Stopwatch stopwatch = Stopwatch.createStarted();
+        if (StringUtils.isNotBlank(request.getMid())
+                && redisTemplate.opsForSet().isMember("special:mid", request.getMid())) {
+            return recommendService.specialMidRecommend(request);
+        }
+        stopwatch.reset().start();
+
+        log.info("genRecommendParam={},genRecommendParam cost={}", JSONUtils.toJson(param),
+                stopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
+        stopwatch.reset().start();
+        List<Video> videos = videoRecommend(request, param, recommendType);
+        // log.info("videoRecommend={}, videoRecommend cost={}", JSONUtils.toJson(videos),
+//        stopwatch.stop().elapsed(TimeUnit.MILLISECONDS));
+        recommendService.updateCache(request, param, videos);
+
+        // 更新position
+        List<VideoProto> vps = new ArrayList<>();
+        for (int i = 0; i < videos.size(); i++) {
+            vps.add(VideoProto.newBuilder()
+                    .setPosition(i + 1)
+                    .setPushFrom(Strings.nullToEmpty(videos.get(i).getPushFrom()))
+                    .setAbCode(Strings.nullToEmpty(videos.get(i).getAbCode()))
+                    .setVideoId(videos.get(i).getVideoId())
+                    .setRovScore(videos.get(i).getRovScore())
+                    .setSortScore(videos.get(i).getSortScore())
+                    .setFlowPool(Strings.nullToEmpty(videos.get(i).getFlowPool()))
+                    .setIsInFlowPool(videos.get(i).isInFlowPool() ? 1 : 0)
+                    .setRand(videos.get(i).getRand())
+                    .build());
+        }
+
+        return RecommendResponse.newBuilder()
+                .setResult(Result.newBuilder().setCode(1).setMessage("success"))
+                .addAllVideo(vps)
+                .build();
+    }
+
+    private List<Video> videoRecommend(RecommendRequest request, RecommendParam param, int recommendType) {
         Stopwatch stopwatch = Stopwatch.createStarted();
         User user = getUser(request);
         List<Video> topRecommendVideoList = new ArrayList<>();
@@ -86,7 +140,7 @@ public class VideoRecommendService {
         }
 
         stopwatch.reset().start();
-        RankParam rankParam = recommendService.convertToRankParam(recommendParam, null);
+        RankParam rankParam = recommendService.convertToRankParam(param, null);
         RankResult rankResult = rankStrategy4RegionMergeModelV2.mergeAndSort(rankParam, topRecommendVideoList,
                 flowPoolRecommendVideoList);
         if (newLogPrint) {
@@ -96,8 +150,8 @@ public class VideoRecommendService {
 
         // 只返回size条数据
         List<Video> videos = rankResult.getVideos();
-        if (recommendParam.getSize() < rankResult.getVideos().size()) {
-            videos = rankResult.getVideos().subList(0, recommendParam.getSize());
+        if (param.getSize() < rankResult.getVideos().size()) {
+            videos = rankResult.getVideos().subList(0, param.getSize());
         }
 
         // 更新position
@@ -115,13 +169,10 @@ public class VideoRecommendService {
                     .setRand(videos.get(i).getRand())
                     .build());
         }
-
-        return RecommendResponse.newBuilder()
-                .setResult(Result.newBuilder().setCode(1).setMessage("success"))
-                .addAllVideo(vps)
-                .build();
+        return videos;
     }
 
+
     private User getUser(RecommendRequest request) {
         User user = new User();
         user.setMid(request.getMid());