Browse Source

Merge branch 'dev-xym-add-filter-config' of algorithm/ad-engine into master

xueyiming 5 days ago
parent
commit
8e76aded4c

+ 23 - 0
ad-engine-commons/src/main/java/com/tzld/piaoquan/ad/engine/commons/enums/FilterTypeEnum.java

@@ -0,0 +1,23 @@
+package com.tzld.piaoquan.ad.engine.commons.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum FilterTypeEnum {
+    CREATIVE("创意", 1),
+    AD("广告", 2),
+    ADVERTISER("广告", 3),
+    PROFESSION("行业", 4),
+    CUSTOMER("客户", 5);
+
+    FilterTypeEnum(String name, Integer code) {
+        this.name = name;
+        this.code = code;
+    }
+
+    private final String name;
+
+    private final Integer code;
+
+
+}

+ 14 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/entity/FilterConfig.java

@@ -0,0 +1,14 @@
+package com.tzld.piaoquan.ad.engine.service.entity;
+
+import lombok.Data;
+import lombok.ToString;
+
+@Data
+@ToString
+public class FilterConfig {
+    private String layer;
+    private String clazz;
+    private Integer type;
+    private String value;
+    private String expId;
+}

+ 49 - 21
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBasic.java

@@ -1,11 +1,13 @@
 package com.tzld.piaoquan.ad.engine.service.score.strategy;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.TypeReference;
 import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
 import com.tzld.piaoquan.ad.engine.commons.dto.AdPlatformCreativeDTO;
 import com.tzld.piaoquan.ad.engine.commons.enums.CrowdLayerEnum;
+import com.tzld.piaoquan.ad.engine.commons.enums.FilterTypeEnum;
 import com.tzld.piaoquan.ad.engine.commons.enums.RedisPrefixEnum;
 import com.tzld.piaoquan.ad.engine.commons.param.RankRecommendRequestParam;
 import com.tzld.piaoquan.ad.engine.commons.redis.AdRedisHelper;
@@ -13,10 +15,7 @@ import com.tzld.piaoquan.ad.engine.commons.redis.AlgorithmRedisHelper;
 import com.tzld.piaoquan.ad.engine.commons.score.ScoreParam;
 import com.tzld.piaoquan.ad.engine.commons.util.DateUtils;
 import com.tzld.piaoquan.ad.engine.commons.util.ObjUtil;
-import com.tzld.piaoquan.ad.engine.service.entity.CalibrationModelCtcvrData;
-import com.tzld.piaoquan.ad.engine.service.entity.CorrectCpaParam;
-import com.tzld.piaoquan.ad.engine.service.entity.CorrectCtcvrScoreParam;
-import com.tzld.piaoquan.ad.engine.service.entity.GuaranteeView;
+import com.tzld.piaoquan.ad.engine.service.entity.*;
 import com.tzld.piaoquan.ad.engine.service.feature.Feature;
 import com.tzld.piaoquan.ad.engine.service.feature.FeatureService;
 import com.tzld.piaoquan.recommend.feature.domain.ad.base.AdRankItem;
@@ -111,6 +110,9 @@ public abstract class RankStrategyBasic implements RankStrategy {
     @Value("${checkout.layer:false}")
     protected Boolean checkoutLayer;
 
+    @Value("${filter.config.value:[]}")
+    protected String filterConfigValue;
+
     @Autowired
     private FeatureService featureService;
     @Autowired
@@ -307,25 +309,51 @@ public abstract class RankStrategyBasic implements RankStrategy {
             log.info("excludeExp filtered request={}", JSONObject.toJSONString(request));
         }
 
-        if (!checkoutLayer) {
-            // 有曝光无转化-其他 过滤德瑞骅客户 客户id 26
-            if (Objects.equals(layer, "有曝光无转化") && Objects.equals(clazz, "其他") && scoreParam.getExpCodeSet().contains(targetCrowdExcludeExp)) {
-                List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
-                List<AdPlatformCreativeDTO> filteredAdList = adIdList.stream().filter(e -> e.getCustomerId() == null || e.getCustomerId() != 26L).collect(Collectors.toList());
-                if (CollectionUtils.isNotEmpty(filteredAdList)) {
-                    request.setAdIdList(filteredAdList);
+        List<FilterConfig> filterConfigs = JSONArray.parseArray(filterConfigValue).toJavaList(FilterConfig.class);
+        if (!CollectionUtils.isEmpty(filterConfigs)) {
+            for (FilterConfig filterConfig : filterConfigs) {
+                if (filterConfig.getExpId() == null || !scoreParam.getExpCodeSet().contains(filterConfig.getExpId())) {
+                    continue;
                 }
-                log.info("targetCrowdExcludeExp filtered request={}", JSONObject.toJSONString(request));
-            }
-        } else {
-            // 有曝光无点击-其他 过滤德瑞骅客户 客户id 26
-            if (Objects.equals(layer, "有曝光无点击") && Objects.equals(clazz, "其他") && scoreParam.getExpCodeSet().contains(targetCrowdExcludeExp)) {
-                List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
-                List<AdPlatformCreativeDTO> filteredAdList = adIdList.stream().filter(e -> e.getCustomerId() == null || e.getCustomerId() != 26L).collect(Collectors.toList());
-                if (CollectionUtils.isNotEmpty(filteredAdList)) {
-                    request.setAdIdList(filteredAdList);
+                if (!Objects.equals(layer, filterConfig.getLayer()) || !Objects.equals(clazz, filterConfig.getClazz())) {
+                    continue;
+                }
+                if (Objects.equals(FilterTypeEnum.CREATIVE.getCode(), filterConfig.getType())) {
+                    List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
+                    List<AdPlatformCreativeDTO> filteredAdList = adIdList.stream().filter(e -> e.getCreativeId() == null || !e.getCreativeId().equals(Long.valueOf(filterConfig.getValue()))).collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(filteredAdList)) {
+                        request.setAdIdList(filteredAdList);
+                    }
+                }
+                if (Objects.equals(FilterTypeEnum.AD.getCode(), filterConfig.getType())) {
+                    List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
+                    List<AdPlatformCreativeDTO> filteredAdList = adIdList.stream().filter(e -> e.getAdId() == null || !e.getAdId().equals(Long.valueOf(filterConfig.getValue()))).collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(filteredAdList)) {
+                        request.setAdIdList(filteredAdList);
+                    }
+                }
+                if (Objects.equals(FilterTypeEnum.ADVERTISER.getCode(), filterConfig.getType())) {
+                    List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
+                    List<AdPlatformCreativeDTO> filteredAdList = adIdList.stream().filter(e -> e.getAdVerId() == null || !e.getAdVerId().equals(filterConfig.getValue())).collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(filteredAdList)) {
+                        request.setAdIdList(filteredAdList);
+                    }
+                }
+                if (Objects.equals(FilterTypeEnum.PROFESSION.getCode(), filterConfig.getType())) {
+                    List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
+                    List<AdPlatformCreativeDTO> filteredAdList = adIdList.stream().filter(e -> e.getProfession() == null || !e.getProfession().equals(filterConfig.getValue())).collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(filteredAdList)) {
+                        request.setAdIdList(filteredAdList);
+                    }
+                }
+                if (Objects.equals(FilterTypeEnum.CUSTOMER.getCode(), filterConfig.getType())) {
+                    List<AdPlatformCreativeDTO> adIdList = request.getAdIdList();
+                    List<AdPlatformCreativeDTO> filteredAdList = adIdList.stream().filter(e -> e.getCustomerId() == null || !e.getCustomerId().equals(Long.valueOf(filterConfig.getValue()))).collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(filteredAdList)) {
+                        request.setAdIdList(filteredAdList);
+                    }
                 }
-                log.info("targetCrowdExcludeExp filtered request={}", JSONObject.toJSONString(request));
+                log.info("targetCrowdExcludeExp filtered filterConfig={} request={}", filterConfig, JSONObject.toJSONString(request));
             }
         }
     }