| 
					
				 | 
			
			
				@@ -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()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |