فهرست منبع

调整rta逻辑

yumeng 1 ماه پیش
والد
کامیت
f0989812a5

+ 25 - 3
src/main/java/com/adx/tencent/honor/controller/HonorTrackingController.java

@@ -104,7 +104,7 @@ public class HonorTrackingController {
             return Map.of("qk", blocked.getQk(), "traceId", traceId, "tagId", tagId, "rtaCode", safeInt(blocked.getRtaCode()));
         }
 
-        NormalizedBidResponse response = adxClient.requestBid("honor", traceId, buildBidRequest(request, traceId, params));
+        NormalizedBidResponse response = adxClient.requestBid("honor", traceId, buildBidRequest(request, traceId, params, rtaDecision));
 
         if (response == null) {
             log.warn("[荣耀][曝光][百度结果] traceId={} empty=true", traceId);
@@ -154,7 +154,7 @@ public class HonorTrackingController {
                 saveBlockedBid(blocked);
                 return responseBody(params, blocked.getQk(), traceId, tagId, rtaDecision);
             }
-            NormalizedBidResponse bidResponse = adxClient.requestBid("honor", traceId, buildBidRequest(request, traceId, params));
+            NormalizedBidResponse bidResponse = adxClient.requestBid("honor", traceId, buildBidRequest(request, traceId, params, rtaDecision));
             if (bidResponse == null) {
                 log.warn("[荣耀][点击][百度结果] traceId={} empty=true", traceId);
                 throw new ResponseStatusException(HttpStatus.BAD_GATEWAY, "empty baidu ADX response");
@@ -194,7 +194,10 @@ public class HonorTrackingController {
         return responseBody(params, record.getQk(), traceId, tagId, rtaDecision);
     }
 
-    private Map<String, Object> buildBidRequest(HttpServletRequest request, String traceId, Map<String, String> params) {
+    private Map<String, Object> buildBidRequest(HttpServletRequest request,
+                                                String traceId,
+                                                Map<String, String> params,
+                                                BaiduRtaDecision rtaDecision) {
         HonorPlacement.Resolved resolved = placement.resolve(params);
         applyResolvedPlacement(params, resolved);
 
@@ -218,6 +221,7 @@ public class HonorTrackingController {
                 : placement.getActionTypes());
         imp.put("maxCount", 1);
         if (placement.getBidFloor() > 0) imp.put("bidFloor", placement.getBidFloor());
+        addRtaExtTransData(imp, rtaDecision);
 
         Map<String, Object> device = new LinkedHashMap<>();
         putDeviceIp(device, firstParam(params, "ip", "m6a"), firstParam(params, "ipv6"), clientIp(request));
@@ -264,6 +268,24 @@ public class HonorTrackingController {
         return bidReq;
     }
 
+    private static void addRtaExtTransData(Map<String, Object> imp, BaiduRtaDecision decision) {
+        String orderId = rtaOrderId(decision);
+        if (orderId == null) {
+            return;
+        }
+        Map<String, Object> extTransData = new LinkedHashMap<>();
+        extTransData.put("key", "order_id");
+        extTransData.put("value", orderId);
+        imp.put("ext_trans_data", extTransData);
+    }
+
+    private static String rtaOrderId(BaiduRtaDecision decision) {
+        if (decision == null || !decision.isApplied() || !decision.isMatched()) {
+            return null;
+        }
+        return firstNonBlank(decision.getOrderIds(), decision.getRequestOrderIds());
+    }
+
     private static void applyResolvedPlacement(Map<String, String> params, HonorPlacement.Resolved resolved) {
         params.put("baidu_app_id", resolved.appId());
         params.put("baidu_tag_id", resolved.tagId());

+ 25 - 3
src/main/java/com/adx/tencent/oppo/controller/OppoTrackingController.java

@@ -72,7 +72,7 @@ public class OppoTrackingController {
             saveBlockedBid(blocked);
             return responseBody(rtaParams, blocked.getQk(), trace, blocked.getTagId(), rtaDecision);
         }
-        NormalizedBidResponse response = adx.requestBid("oppo", trace, buildBidRequest(request, trace, rtaParams));
+        NormalizedBidResponse response = adx.requestBid("oppo", trace, buildBidRequest(request, trace, rtaParams, rtaDecision));
         if (response == null) throw bad("empty baidu response");
         OppoBidRecord record = record(response, trace, "impression", rtaParams);
         record.setRtaCode(rtaDecision.getCode());
@@ -96,7 +96,7 @@ public class OppoTrackingController {
                 saveBlockedBid(blocked);
                 return responseBody(rtaParams, blocked.getQk(), trace, blocked.getTagId(), rtaDecision);
             }
-            NormalizedBidResponse bid = adx.requestBid("oppo", trace, buildBidRequest(request, trace, rtaParams));
+            NormalizedBidResponse bid = adx.requestBid("oppo", trace, buildBidRequest(request, trace, rtaParams, rtaDecision));
             if (bid == null) throw bad("empty baidu response");
             record = record(bid, trace, "click", rtaParams);
             record.setRtaCode(rtaDecision.getCode());
@@ -227,7 +227,10 @@ public class OppoTrackingController {
         return body;
     }
 
-    private Map<String, Object> buildBidRequest(HttpServletRequest req, String trace, Map<String, String> p) {
+    private Map<String, Object> buildBidRequest(HttpServletRequest req,
+                                                String trace,
+                                                Map<String, String> p,
+                                                BaiduRtaDecision rtaDecision) {
         String app = resolveBaiduAppId(p);
         String tag = resolveTagId(p);
         Map<String, Object> imp = new LinkedHashMap<>();
@@ -238,6 +241,7 @@ public class OppoTrackingController {
         imp.put("adType", 0);
         imp.put("maxCount", 1);
         imp.put("assets", List.of(Map.of("type", 1)));
+        addRtaExtTransData(imp, rtaDecision);
         Map<String, Object> device = new LinkedHashMap<>();
         device.put("ua", firstValue(first(p, "ua", "user_agent"), req.getHeader("User-Agent")));
         device.put("deviceType", 1);
@@ -251,6 +255,24 @@ public class OppoTrackingController {
         return body;
     }
 
+    private static void addRtaExtTransData(Map<String, Object> imp, BaiduRtaDecision decision) {
+        String orderId = rtaOrderId(decision);
+        if (orderId == null) {
+            return;
+        }
+        Map<String, Object> extTransData = new LinkedHashMap<>();
+        extTransData.put("key", "order_id");
+        extTransData.put("value", orderId);
+        imp.put("ext_trans_data", extTransData);
+    }
+
+    private static String rtaOrderId(BaiduRtaDecision decision) {
+        if (decision == null || !decision.isApplied() || !decision.isMatched()) {
+            return null;
+        }
+        return firstValue(decision.getOrderIds(), decision.getRequestOrderIds());
+    }
+
     private static String clientIp(HttpServletRequest request, Map<String, String> params) {
         String parameterIp = first(params, "ip", "clientIp", "client_ip");
         if (parameterIp != null) return parameterIp;

+ 25 - 3
src/main/java/com/adx/tencent/vivo/controller/VivoTrackingController.java

@@ -156,7 +156,7 @@ public class VivoTrackingController {
             return Map.of("qk", blocked.getQk(), "traceId", traceId, "tagId", blocked.getTagId(), "rtaCode", safeInt(blocked.getRtaCode()));
         }
 
-        Map<String, Object> bidRequest = buildBidRequest(request, traceId, params);
+        Map<String, Object> bidRequest = buildBidRequest(request, traceId, params, rtaDecision);
         NormalizedBidResponse response = adxClient.requestBid("vivo", traceId, bidRequest);
         if (response == null) {
             log.warn("[Vivo][曝光][百度结果] traceId={} empty=true", traceId);
@@ -204,7 +204,7 @@ public class VivoTrackingController {
                 saveBlockedBid(blocked);
                 return responseBody(params, blocked.getQk(), traceId, blocked.getTagId(), rtaDecision);
             }
-            NormalizedBidResponse bidResponse = adxClient.requestBid("vivo", traceId, buildBidRequest(request, traceId, params));
+            NormalizedBidResponse bidResponse = adxClient.requestBid("vivo", traceId, buildBidRequest(request, traceId, params, rtaDecision));
             if (bidResponse == null) {
                 log.warn("[Vivo][点击][百度结果] traceId={} empty=true", traceId);
                 throw new ResponseStatusException(HttpStatus.BAD_GATEWAY, "empty baidu ADX response");
@@ -290,7 +290,10 @@ public class VivoTrackingController {
         return params;
     }
 
-    private Map<String, Object> buildBidRequest(HttpServletRequest request, String traceId, Map<String, String> params) {
+    private Map<String, Object> buildBidRequest(HttpServletRequest request,
+                                                String traceId,
+                                                Map<String, String> params,
+                                                BaiduRtaDecision rtaDecision) {
         VivoPlacement.Resolved resolved = placement.resolve(params);
         applyResolvedPlacement(params, resolved);
 
@@ -308,6 +311,7 @@ public class VivoTrackingController {
         if (placement.getBidFloor() > 0) {
             imp.put("bidFloor", placement.getBidFloor());
         }
+        addRtaExtTransData(imp, rtaDecision);
 
         Map<String, Object> device = new LinkedHashMap<>();
         putDeviceIp(device, firstParam(params, "ip"), firstParam(params, "ipv6"), clientIp(request));
@@ -329,6 +333,24 @@ public class VivoTrackingController {
         return bidReq;
     }
 
+    private static void addRtaExtTransData(Map<String, Object> imp, BaiduRtaDecision decision) {
+        String orderId = rtaOrderId(decision);
+        if (orderId == null) {
+            return;
+        }
+        Map<String, Object> extTransData = new LinkedHashMap<>();
+        extTransData.put("key", "order_id");
+        extTransData.put("value", orderId);
+        imp.put("ext_trans_data", extTransData);
+    }
+
+    private static String rtaOrderId(BaiduRtaDecision decision) {
+        if (decision == null || !decision.isApplied() || !decision.isMatched()) {
+            return null;
+        }
+        return firstNonBlank(decision.getOrderIds(), decision.getRequestOrderIds());
+    }
+
     private static void applyResolvedPlacement(Map<String, String> params, VivoPlacement.Resolved resolved) {
         params.put("baidu_app_id", resolved.appId());
         params.put("baidu_tag_id", resolved.tagId());