Jelajahi Sumber

调整荣耀扣量

yumeng 1 Minggu lalu
induk
melakukan
a07fd23d7a

+ 6 - 1
src/main/java/com/adx/tencent/conversionsync/ConversionSyncService.java

@@ -1138,6 +1138,10 @@ public class ConversionSyncService {
             return DeductionHandling.SEND;
         }
         int deductionRate = resolveDeductionRate(task.tencentBid, task.payment.getAct());
+        log.info("[ConversionSync] 腾讯转化扣量配置 | qk={} | act={} | accountId={} | version={} | rate={} | mediaParamKeys={}",
+                task.payment.getQk(), task.payment.getAct(), safe(task.tencentBid.getAccountId()),
+                resolveTrackingVersion(task.tencentBid), deductionRate,
+                task.tencentBid.getMediaParams() != null ? task.tencentBid.getMediaParams().keySet() : Set.of());
         if (deductionRate <= 0) {
             return DeductionHandling.SEND;
         }
@@ -1179,7 +1183,8 @@ public class ConversionSyncService {
         record.setAttempt(1);
         record.setErrorMessage("deducted_by_rate");
         record.setDispatchStatus(MediaCallbackRecord.DISPATCH_STATUS_DEDUCTED);
-        record.setTrackingVersion(resolveTrackingVersion(task.tencentBid));
+        record.setTrackingVersion(String.valueOf(
+                resolveDeductionRate(task.tencentBid, task.payment.getAct())));
         record.setCreatedAt(now);
         int deductionRate = resolveDeductionRate(task.tencentBid, task.payment.getAct());
         log.info("[ConversionSync] 腾讯转化扣量 | qk={} | act={} | rate={} | tagId={} | accountId={} | callbackKey={}",

+ 0 - 4
src/main/java/com/adx/tencent/conversionsync/ManualTencentCallbackService.java

@@ -134,10 +134,6 @@ public class ManualTencentCallbackService {
                 && original.getCallbackUrl() != null && !original.getCallbackUrl().isBlank()) {
             params.put("callback", original.getCallbackUrl());
         }
-        if ((params.get(BidRecord.TRACKING_VERSION_KEY) == null || params.get(BidRecord.TRACKING_VERSION_KEY).isBlank())
-                && original.getTrackingVersion() != null && !original.getTrackingVersion().isBlank()) {
-            params.put(BidRecord.TRACKING_VERSION_KEY, original.getTrackingVersion());
-        }
     }
 
     private static MediaCallbackRecord copyForFailure(MediaCallbackRecord original) {

+ 32 - 0
src/main/java/com/adx/tencent/honor/controller/HonorTrackingController.java

@@ -175,6 +175,9 @@ public class HonorTrackingController {
                         bidResponse.getBid().getShowUrls(), bidResponse.getBid().getPrice());
                 recordTracking(record.getQk(), tagId, "impression", impressionTracking);
             }
+        } else {
+            mergeClickParams(record, params);
+            hotStore.recordBid(record);
         }
 
         List<TrackingResult> tracking = adxClient.reportClick(
@@ -450,6 +453,35 @@ public class HonorTrackingController {
         if (act2001Rate != null) {
             params.put(HonorBidRecord.ACT_2001_DEDUCTION_RATE_KEY, String.valueOf(parseDeductionRate(act2001Rate)));
         }
+        removeDeductionAliases(params);
+    }
+
+    private static void removeDeductionAliases(Map<String, String> params) {
+        params.remove("deductionRate");
+        params.remove("rate");
+        params.remove("act2001DeductionRate");
+        params.remove("deductionRate2001");
+        params.remove("deduction_rate_2001");
+    }
+
+    private void mergeClickParams(HonorBidRecord record, Map<String, String> params) {
+        if (record == null || params == null || params.isEmpty()) {
+            return;
+        }
+        Map<String, String> merged = new LinkedHashMap<>();
+        if (record.getMediaParams() != null) {
+            merged.putAll(record.getMediaParams());
+        }
+        merged.putAll(params);
+        removeDeductionAliases(merged);
+        record.setMediaParams(merged);
+        if ((record.getAccountId() == null || record.getAccountId().isBlank())
+                && params.get("advertiserId") != null && !params.get("advertiserId").isBlank()) {
+            record.setAccountId(params.get("advertiserId"));
+        }
+        if (params.get("creativeId") != null && !params.get("creativeId").isBlank()) {
+            record.setAdId(params.get("creativeId"));
+        }
     }
 
     private static int parseDeductionRate(String value) {

+ 0 - 4
src/main/java/com/adx/tencent/honor/model/HonorBidRecord.java

@@ -135,10 +135,6 @@ public class HonorBidRecord {
                 "muid",
                 DEDUCTION_RATE_KEY,
                 ACT_2001_DEDUCTION_RATE_KEY,
-                "deductionRate",
-                "act2001DeductionRate",
-                "deductionRate2001",
-                "deduction_rate_2001",
                 "rta_tu",
                 "rta_order_id",
                 "rta_request_order_id",

+ 4 - 0
src/main/java/com/adx/tencent/honor/service/HonorConversionSyncService.java

@@ -140,6 +140,10 @@ public class HonorConversionSyncService {
     }
 
     private boolean handleDeduction(CallbackWork work, int deductionRate) {
+        log.info("[HonorConversionSync] 转化扣量配置 | qk={} | act={} | accountId={} | tagId={} | rate={} | mediaParamKeys={}",
+                work.payment.getQk(), work.payment.getAct(), safe(work.bid.getAccountId()),
+                safe(work.bid.getTagId()), deductionRate,
+                work.bid.getMediaParams() != null ? work.bid.getMediaParams().keySet() : Set.of());
         if (deductionRate <= 0) {
             return false;
         }

+ 2 - 1
src/main/java/com/adx/tencent/tencent/TencentClient.java

@@ -87,7 +87,8 @@ public class TencentClient {
         record.setPurchase(payment.getPayment());
         record.setAttempt(1);
         record.setDispatchStatus(MediaCallbackRecord.DISPATCH_STATUS_SENT);
-        record.setTrackingVersion(resolveTrackingVersion(bid));
+        // 历史字段名虽为 tracking_version,回传表中实际保存本次生效的扣量比例。
+        record.setTrackingVersion(String.valueOf(resolveDeductionRate(bid, payment.getAct())));
         record.setCreatedAt(Instant.now());
 
         // 取 callback URL