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