丁云鹏 преди 1 година
родител
ревизия
bb1d5394b3

+ 1 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/AbstractFilterService.java

@@ -273,6 +273,7 @@ public abstract class AbstractFilterService {
         strategies.add(ServiceBeanFactory.getBean(PreViewedStrategy.class));
         strategies.add(ServiceBeanFactory.getBean(ViewedStrategy.class));
         strategies.add(ServiceBeanFactory.getBean(RecommendStatusStrategy.class));
+        strategies.add(ServiceBeanFactory.getBean(SupplyExpStrategy.class));
         switch (param.getAppType()) {
             case 0:
             case 4:

+ 65 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/strategy/SupplyExpStrategy.java

@@ -0,0 +1,65 @@
+package com.tzld.piaoquan.recommend.server.service.filter.strategy;
+
+import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
+import com.google.common.collect.Lists;
+import com.tzld.piaoquan.recommend.server.service.filter.FilterParam;
+import com.tzld.piaoquan.recommend.server.service.filter.FilterStrategy;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.lang.math.NumberUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @author dyp
+ */
+@Component
+public class SupplyExpStrategy implements FilterStrategy {
+    @ApolloJsonValue("${supply.exp.list:[6]}")
+    private Set<Integer> supplyExps;
+
+    @Value("${supply.exp.id:666}")
+    private int supplyExpId;
+
+    @ApolloJsonValue("${supply.exp.video.list:[]}")
+    private Set<Long> supplyExpVideos;
+    @ApolloJsonValue("${not.supply.exp.video.list:[]}")
+    private Set<Long> notSupplyExpVideos;
+
+    @Override
+    public List<Long> filter(FilterParam param) {
+
+        if (param == null) {
+            return Collections.emptyList();
+        }
+        if (StringUtils.isBlank(param.getMid())
+                || CollectionUtils.isEmpty(param.getVideoIds())) {
+            return param.getVideoIds();
+        }
+
+        if (!supplyExps.contains(param.getAppType())) {
+            return Lists.newArrayList(param.getVideoIds());
+        }
+        if (MapUtils.isEmpty(param.getExpIdMap())) {
+            return Lists.newArrayList(param.getVideoIds());
+        }
+        // 供给实验
+        if (supplyExpId == NumberUtils.toInt(param.getExpIdMap().get("supply"), -1)) {
+            // 对照组视频只在对照组出
+            return param.getVideoIds().stream()
+                    .filter(l -> !notSupplyExpVideos.contains(l))
+                    .collect(Collectors.toList());
+        } else {
+            // 实验组视频只在实验组出
+            return param.getVideoIds().stream()
+                    .filter(l -> !supplyExpVideos.contains(l))
+                    .collect(Collectors.toList());
+        }
+    }
+}