|
@@ -24,6 +24,9 @@ import com.tzld.piaoquan.recommend.server.service.flowpool.FlowPoolService;
|
|
|
import com.tzld.piaoquan.recommend.server.service.rank.RankParam;
|
|
import com.tzld.piaoquan.recommend.server.service.rank.RankParam;
|
|
|
import com.tzld.piaoquan.recommend.server.service.rank.RankResult;
|
|
import com.tzld.piaoquan.recommend.server.service.rank.RankResult;
|
|
|
import com.tzld.piaoquan.recommend.server.service.rank.RankRouter;
|
|
import com.tzld.piaoquan.recommend.server.service.rank.RankRouter;
|
|
|
|
|
+import com.tzld.piaoquan.recommend.server.service.funnel.FunnelAggregator;
|
|
|
|
|
+import com.tzld.piaoquan.recommend.server.service.funnel.FunnelLogService;
|
|
|
|
|
+import com.tzld.piaoquan.recommend.server.service.funnel.FunnelRawItem;
|
|
|
import com.tzld.piaoquan.recommend.server.service.rank.bo.UserSRBO;
|
|
import com.tzld.piaoquan.recommend.server.service.rank.bo.UserSRBO;
|
|
|
import com.tzld.piaoquan.recommend.server.service.rank.bo.UserShareReturnProfile;
|
|
import com.tzld.piaoquan.recommend.server.service.rank.bo.UserShareReturnProfile;
|
|
|
import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
|
|
import com.tzld.piaoquan.recommend.server.service.recall.RecallParam;
|
|
@@ -50,6 +53,8 @@ import java.time.Duration;
|
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
|
import java.time.ZoneId;
|
|
import java.time.ZoneId;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
+import java.util.concurrent.ConcurrentMap;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.function.Consumer;
|
|
import java.util.function.Consumer;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
@@ -81,6 +86,8 @@ public class RecommendService {
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private TimerLogService timerLogService;
|
|
private TimerLogService timerLogService;
|
|
|
@Autowired
|
|
@Autowired
|
|
|
|
|
+ private FunnelLogService funnelLogService;
|
|
|
|
|
+ @Autowired
|
|
|
private FeatureService featureService;
|
|
private FeatureService featureService;
|
|
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
@@ -187,7 +194,7 @@ public class RecommendService {
|
|
|
timerLogMapTL.get().put("genRecommendParamTime", genRecommendParamTime);
|
|
timerLogMapTL.get().put("genRecommendParamTime", genRecommendParamTime);
|
|
|
// log.info("genRecommendParam={},genRecommendParam cost={}", JSONUtils.toJson(param),
|
|
// log.info("genRecommendParam={},genRecommendParam cost={}", JSONUtils.toJson(param),
|
|
|
// genRecommendParamTime);
|
|
// genRecommendParamTime);
|
|
|
- List<Video> videos = videoRecommend(param);
|
|
|
|
|
|
|
+ List<Video> videos = videoRecommend(param, request);
|
|
|
stopwatch.reset().start();
|
|
stopwatch.reset().start();
|
|
|
updateCache(request, param, videos);
|
|
updateCache(request, param, videos);
|
|
|
long updateCacheTime = stopwatch.elapsed(TimeUnit.MILLISECONDS);
|
|
long updateCacheTime = stopwatch.elapsed(TimeUnit.MILLISECONDS);
|
|
@@ -525,7 +532,7 @@ public class RecommendService {
|
|
|
return null;
|
|
return null;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private List<Video> videoRecommend(RecommendParam param) {
|
|
|
|
|
|
|
+ private List<Video> videoRecommend(RecommendParam param, RecommendRequest request) {
|
|
|
Stopwatch stopwatch = Stopwatch.createStarted();
|
|
Stopwatch stopwatch = Stopwatch.createStarted();
|
|
|
String vid = String.valueOf(param.getVideoId());
|
|
String vid = String.valueOf(param.getVideoId());
|
|
|
UserShareReturnProfile userProfile = featureService.getUserProfile(param.getUid(), param.getMid());
|
|
UserShareReturnProfile userProfile = featureService.getUserProfile(param.getUid(), param.getMid());
|
|
@@ -574,6 +581,8 @@ public class RecommendService {
|
|
|
recallParam.setUserSocialRecallInfo(userSocialRecallInfo);
|
|
recallParam.setUserSocialRecallInfo(userSocialRecallInfo);
|
|
|
recallParam.setUserNetworkSeqFeature(userNetworkSeqFeature);
|
|
recallParam.setUserNetworkSeqFeature(userNetworkSeqFeature);
|
|
|
recallParam.setUserNetworkSeqVideoInfoMap(userNetworkSeqVideoInfoMap);
|
|
recallParam.setUserNetworkSeqVideoInfoMap(userNetworkSeqVideoInfoMap);
|
|
|
|
|
+ ConcurrentMap<String, List<FunnelRawItem>> funnelSink = new ConcurrentHashMap<>();
|
|
|
|
|
+ recallParam.setFunnelSink(funnelSink);
|
|
|
RecallResult recallResult = recallService.recall(recallParam);
|
|
RecallResult recallResult = recallService.recall(recallParam);
|
|
|
|
|
|
|
|
long recallTime = stopwatch.elapsed(TimeUnit.MILLISECONDS);
|
|
long recallTime = stopwatch.elapsed(TimeUnit.MILLISECONDS);
|
|
@@ -594,6 +603,7 @@ public class RecommendService {
|
|
|
|
|
|
|
|
|
|
|
|
|
if (rankResult == null || CollectionUtils.isEmpty(rankResult.getVideos())) {
|
|
if (rankResult == null || CollectionUtils.isEmpty(rankResult.getVideos())) {
|
|
|
|
|
+ logFunnel(request, param, recallParam, recallResult, rankResult, Collections.emptyList());
|
|
|
return Collections.emptyList();
|
|
return Collections.emptyList();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -602,9 +612,23 @@ public class RecommendService {
|
|
|
if (param.getSize() < rankResult.getVideos().size()) {
|
|
if (param.getSize() < rankResult.getVideos().size()) {
|
|
|
videos = rankResult.getVideos().subList(0, param.getSize());
|
|
videos = rankResult.getVideos().subList(0, param.getSize());
|
|
|
}
|
|
}
|
|
|
|
|
+ logFunnel(request, param, recallParam, recallResult, rankResult, videos);
|
|
|
return videos;
|
|
return videos;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private void logFunnel(RecommendRequest request, RecommendParam param, RecallParam recallParam,
|
|
|
|
|
+ RecallResult recallResult, RankResult rankResult, List<Video> returnedVideos) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ String traceId = String.valueOf(TraceUtils.currentTraceId());
|
|
|
|
|
+ List<Map<String, String>> rows = FunnelAggregator.build(
|
|
|
|
|
+ traceId, request, param, recallParam.getFunnelSink(),
|
|
|
|
|
+ recallResult, rankResult, returnedVideos);
|
|
|
|
|
+ funnelLogService.log(rows);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.error("logFunnel error", e);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
public RecallParam convertToRecallParam(RecommendParam param) {
|
|
public RecallParam convertToRecallParam(RecommendParam param) {
|
|
|
RecallParam recallParam = new RecallParam();
|
|
RecallParam recallParam = new RecallParam();
|
|
|
recallParam.setAppType(param.getAppType());
|
|
recallParam.setAppType(param.getAppType());
|