yumeng 3 weeks ago
parent
commit
96e5d1bfbf

+ 2 - 2
src/main/java/com/adx/tencent/baidu/ConversionClient.java

@@ -90,9 +90,9 @@ public class ConversionClient {
                 .build();
 
         HttpResponse<byte[]> response = httpClient.send(request, HttpResponse.BodyHandlers.ofByteArray());
-/*        log.info("[BaiduConversion] queryPayments response: status={}, body={}",
+        log.info("[BaiduConversion] queryPayments response: status={}, body={}",
                 response.statusCode(),
-                new String(response.body(), java.nio.charset.StandardCharsets.UTF_8));*/
+                new String(response.body(), java.nio.charset.StandardCharsets.UTF_8));
         if (response.statusCode() < 200 || response.statusCode() >= 300) {
             throw new IOException("Baidu conversion HTTP status: " + response.statusCode());
         }

+ 26 - 1
src/main/java/com/adx/tencent/baidu/model/PaymentInfo.java

@@ -1,10 +1,14 @@
 package com.adx.tencent.baidu.model;
 
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import java.util.List;
 
 /** 对应 Go baidu.PaymentInfo */
 public class PaymentInfo {
+    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
+
     @JsonProperty("date")         private String date;
     @JsonProperty("appsid")       private String appSid;
     @JsonProperty("customerName") private String customerName;
@@ -15,6 +19,7 @@ public class PaymentInfo {
     @JsonProperty("tu")           private String tu;
     @JsonProperty("qk")           private String qk;
     @JsonProperty("clkTime")      private String clkTime;
+    private double gmv;
 
     public String getDate() { return date; }
     public void setDate(String v) { this.date = v; }
@@ -36,4 +41,24 @@ public class PaymentInfo {
     public void setQk(String v) { this.qk = v; }
     public String getClkTime() { return clkTime; }
     public void setClkTime(String v) { this.clkTime = v; }
+    public double getGmv() { return gmv; }
+    public void setGmv(double v) { this.gmv = v; }
+
+    @JsonProperty("extInfo")
+    public void setExtInfo(String extInfo) {
+        this.gmv = parseGmv(extInfo);
+    }
+
+    private static double parseGmv(String extInfo) {
+        if (extInfo == null || extInfo.isBlank()) {
+            return 0D;
+        }
+        try {
+            JsonNode root = OBJECT_MAPPER.readTree(extInfo);
+            JsonNode gmvNode = root.get("gmv");
+            return gmvNode != null && gmvNode.isNumber() ? gmvNode.asDouble() : 0D;
+        } catch (JsonProcessingException e) {
+            return 0D;
+        }
+    }
 }

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

@@ -23,7 +23,7 @@ public class ConversionSyncRunner {
     private final List<Integer> acts;
 
     public ConversionSyncRunner(ConversionSyncService syncer,
-                                 int dateOffsetDays, int pageSize, List<Integer> acts) {
+                                int dateOffsetDays, int pageSize, List<Integer> acts) {
         this.syncer = syncer;
         this.dateOffsetDays = dateOffsetDays;
         this.pageSize = pageSize > 0 ? pageSize : 1;

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

@@ -206,6 +206,7 @@ public class ConversionSyncService {
         r.setDeviceId(p.getDeviceId());
         r.setConv(p.getConv());
         r.setPayment(p.getPayment());
+        r.setGmv(p.getGmv());
         r.setAct(p.getAct());
         r.setTu(p.getTu());
         r.setClkTime(p.getClkTime());

+ 5 - 1
src/main/java/com/adx/tencent/storage/TiDBColdStore.java

@@ -84,6 +84,7 @@ public class TiDBColdStore {
                 device_id VARCHAR(255),
                 conv DOUBLE,
                 payment DOUBLE,
+                gmv DOUBLE,
                 act INT,
                 tu VARCHAR(128),
                 clk_time VARCHAR(32),
@@ -137,6 +138,9 @@ public class TiDBColdStore {
             try {
                 stmt.execute("ALTER TABLE tencent_ad_bid_events ADD KEY idx_tencent_ad_bid_events_platform_tag (platform, tag_id)");
             } catch (Exception ignored) {}
+            try {
+                stmt.execute("ALTER TABLE tencent_baidu_conversions ADD COLUMN gmv DOUBLE AFTER payment");
+            } catch (Exception ignored) {}
             stmt.close();
         } catch (Exception e) {
             throw new RuntimeException("migrate failed", e);
@@ -193,7 +197,7 @@ public class TiDBColdStore {
             mapper.insertOrUpdate(
                 record.getDedupeKey(), record.getQk(), record.getMedia(),
                 record.getDate(), record.getAppSid(), record.getCustomerName(),
-                record.getDeviceId(), record.getConv(), record.getPayment(),
+                record.getDeviceId(), record.getConv(), record.getPayment(), record.getGmv(),
                 record.getAct(), record.getTu(), record.getClkTime(),
                 Timestamp.from(record.getCreatedAt())
             );

+ 1 - 0
src/main/java/com/adx/tencent/storage/mapper/ConversionMapper.java

@@ -14,6 +14,7 @@ public interface ConversionMapper {
                         @Param("deviceId") String deviceId,
                         @Param("conv") double conv,
                         @Param("payment") double payment,
+                        @Param("gmv") double gmv,
                         @Param("act") int act,
                         @Param("tu") String tu,
                         @Param("clkTime") String clkTime,

+ 3 - 0
src/main/java/com/adx/tencent/storage/model/ConversionRecord.java

@@ -13,6 +13,7 @@ public class ConversionRecord {
     @JsonProperty("deviceid")     private String deviceId;
     @JsonProperty("conv")         private double conv;
     @JsonProperty("payment")      private double payment;
+    @JsonProperty("gmv")          private double gmv;
     @JsonProperty("act")          private int act;
     @JsonProperty("tu")           private String tu;
     @JsonProperty("clkTime")      private String clkTime;
@@ -36,6 +37,8 @@ public class ConversionRecord {
     public void setConv(double v) { this.conv = v; }
     public double getPayment() { return payment; }
     public void setPayment(double v) { this.payment = v; }
+    public double getGmv() { return gmv; }
+    public void setGmv(double v) { this.gmv = v; }
     public int getAct() { return act; }
     public void setAct(int v) { this.act = v; }
     public String getTu() { return tu; }

+ 3 - 2
src/main/resources/mapper/ConversionMapper.xml

@@ -5,15 +5,16 @@
     <insert id="insertOrUpdate">
         INSERT INTO tencent_baidu_conversions (
             dedupe_key, qk, media, date_value, appsid, customer_name, device_id, conv,
-            payment, act, tu, clk_time, created_at
+            payment, gmv, act, tu, clk_time, created_at
         ) VALUES (
             #{dedupeKey}, #{qk}, #{media}, #{dateValue}, #{appsid}, #{customerName},
-            #{deviceId}, #{conv}, #{payment}, #{act}, #{tu}, #{clkTime}, #{createdAt}
+            #{deviceId}, #{conv}, #{payment}, #{gmv}, #{act}, #{tu}, #{clkTime}, #{createdAt}
         )
         ON DUPLICATE KEY UPDATE
             media = VALUES(media),
             conv = VALUES(conv),
             payment = VALUES(payment),
+            gmv = VALUES(gmv),
             clk_time = VALUES(clk_time)
     </insert>
 </mapper>