Bladeren bron

refactor(utils): 优化Json处理逻辑,统一指标字段归一化

- 引入JsonUtils.normalizeMetrics方法,统一处理指标中“-”字符串转为null
- 替换BytedanceAccountReportServiceImpl中metricsJson解析为使用归一化方法
- 替换BytedancePromoterReportServiceImpl中metricsJson解析为使用归一化方法
- 优化多处JSON解析逻辑,提高代码一致性和健壮性
- 调整相关导入语句,集中导入utils包中工具类
hpk 2 maanden geleden
bovenliggende
commit
1fa24696d0

+ 5 - 8
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceAccountReportServiceImpl.java

@@ -4,10 +4,7 @@ import cn.com.ctop.job.bytedance.data.entity.*;
 import cn.com.ctop.job.bytedance.data.mapper.BytedanceAccountReportMapper;
 import cn.com.ctop.job.bytedance.data.mapper.BytedanceRefreshTokenMapper;
 import cn.com.ctop.job.bytedance.data.service.IBytedanceAccountReportService;
-import cn.com.ctop.job.bytedance.data.utils.AlertUtils;
-import cn.com.ctop.job.bytedance.data.utils.Check;
-import cn.com.ctop.job.bytedance.data.utils.FieldsConfig;
-import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
+import cn.com.ctop.job.bytedance.data.utils.*;
 import cn.com.ctop.job.bytedance.utils.RateLimitUtil;
 import cn.com.ctop.job.bytedance.utils.doris.sink.DorisMultiTableStreamLoadManager;
 import com.alibaba.fastjson.JSONArray;
@@ -77,7 +74,7 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
                             JSONObject dimensionsJson = rowJson.getJSONObject("dimensions");
                             Integer statTimeDay = Integer.valueOf(dimensionsJson.getString("stat_time_day").replace("-", ""));
                             Integer hour = Integer.valueOf(dimensionsJson.getString("stat_time_hour").substring(11, 13));
-                            BytedanceAdvertiserReportHour advertiserReportHour = JSONObject.parseObject(metricsJson.toJSONString(), BytedanceAdvertiserReportHour.class);
+                            BytedanceAdvertiserReportHour advertiserReportHour = JSONObject.parseObject(JsonUtils.normalizeMetrics(metricsJson).toJSONString(), BytedanceAdvertiserReportHour.class);
                             advertiserReportHour.setAdvertiserId(advertiserId);
                             advertiserReportHour.setStatTimeDay(statTimeDay);
                             advertiserReportHour.setHour(hour);
@@ -157,7 +154,7 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
                             JSONObject metricsJson = rowJson.getJSONObject("metrics");
                             JSONObject dimensionsJson = rowJson.getJSONObject("dimensions");
                             Integer statTimeDay = Integer.valueOf(dimensionsJson.getString("stat_time_day").replace("-", ""));
-                            BytedanceAdvertiserReportDaily advertiserReportDaily = JSONObject.parseObject(metricsJson.toJSONString(), BytedanceAdvertiserReportDaily.class);
+                            BytedanceAdvertiserReportDaily advertiserReportDaily = JSONObject.parseObject(JsonUtils.normalizeMetrics(metricsJson).toJSONString(), BytedanceAdvertiserReportDaily.class);
                             advertiserReportDaily.setAdvertiserId(advertiserId);
                             advertiserReportDaily.setStatTimeDay(statTimeDay);
                             dailyList.add(advertiserReportDaily);
@@ -244,7 +241,7 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
                             JSONObject dimensionsJson = rowJson.getJSONObject("dimensions");
                             Integer statTimeDay = Integer.valueOf(dimensionsJson.getString("stat_time_day").replace("-", ""));
                             Integer hour = Integer.valueOf(dimensionsJson.getString("stat_time_hour").substring(11, 13));
-                            BytedanceAdvertiserReportHour advertiserReportHour = JSONObject.parseObject(metricsJson.toJSONString(), BytedanceAdvertiserReportHour.class);
+                            BytedanceAdvertiserReportHour advertiserReportHour = JSONObject.parseObject(JsonUtils.normalizeMetrics(metricsJson).toJSONString(), BytedanceAdvertiserReportHour.class);
                             advertiserReportHour.setAdvertiserId(advertiserId);
                             advertiserReportHour.setStatTimeDay(statTimeDay);
                             advertiserReportHour.setHour(hour);
@@ -339,7 +336,7 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
                             JSONObject metricsJson = rowJson.getJSONObject("metrics");
                             JSONObject dimensionsJson = rowJson.getJSONObject("dimensions");
                             Integer statTimeDay = Integer.valueOf(dimensionsJson.getString("stat_time_day").replace("-", ""));
-                            BytedanceAdvertiserReportDaily advertiserReportDaily = JSONObject.parseObject(metricsJson.toJSONString(), BytedanceAdvertiserReportDaily.class);
+                            BytedanceAdvertiserReportDaily advertiserReportDaily = JSONObject.parseObject(JsonUtils.normalizeMetrics(metricsJson).toJSONString(), BytedanceAdvertiserReportDaily.class);
                             advertiserReportDaily.setAdvertiserId(advertiserId);
                             advertiserReportDaily.setStatTimeDay(statTimeDay);
                             dailyList.add(advertiserReportDaily);

+ 5 - 8
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedancePromoterReportServiceImpl.java

@@ -6,10 +6,7 @@ import cn.com.ctop.job.bytedance.data.entity.BytedancePromoterReportHour;
 import cn.com.ctop.job.bytedance.data.mapper.BytedancePromoterReportMapper;
 import cn.com.ctop.job.bytedance.data.mapper.BytedanceRefreshTokenMapper;
 import cn.com.ctop.job.bytedance.data.service.IBytedancePromoterReportService;
-import cn.com.ctop.job.bytedance.data.utils.Check;
-import cn.com.ctop.job.bytedance.data.utils.FieldsConfig;
-import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
-import cn.com.ctop.job.bytedance.data.utils.AlertUtils;
+import cn.com.ctop.job.bytedance.data.utils.*;
 import cn.com.ctop.job.bytedance.utils.RateLimitUtil;
 import cn.com.ctop.job.bytedance.utils.doris.sink.DorisMultiTableStreamLoadManager;
 import com.alibaba.fastjson.JSONArray;
@@ -93,7 +90,7 @@ public class BytedancePromoterReportServiceImpl implements IBytedancePromoterRep
                             String awemeNickName = dimensionsJson.getString("aweme_nick_name");
                             Integer statTimeDay = Integer.valueOf(dimensionsJson.getString("stat_time_day").replace("-", ""));
                             Integer hour = Integer.valueOf(dimensionsJson.getString("stat_time_hour").substring(11, 13));
-                            BytedancePromoterReportHour bytedancePromoterReportHour = JSONObject.parseObject(metricsJson.toJSONString(), BytedancePromoterReportHour.class);
+                            BytedancePromoterReportHour bytedancePromoterReportHour = JSONObject.parseObject(JsonUtils.normalizeMetrics(metricsJson).toJSONString(), BytedancePromoterReportHour.class);
                             bytedancePromoterReportHour.setAdvertiserId(advertiserId);
                             bytedancePromoterReportHour.setCdpProjectId(cdpProjectId);
                             bytedancePromoterReportHour.setCdpProjectName(cdpProjectName);
@@ -185,7 +182,7 @@ public class BytedancePromoterReportServiceImpl implements IBytedancePromoterRep
                             String awemeId = dimensionsJson.getString("aweme_id");
                             String awemeNickName = dimensionsJson.getString("aweme_nick_name");
                             Integer statTimeDay = Integer.valueOf(dimensionsJson.getString("stat_time_day").replace("-", ""));
-                            BytedancePromoterReportDaily promoterReportDaily = JSONObject.parseObject(metricsJson.toJSONString(), BytedancePromoterReportDaily.class);
+                            BytedancePromoterReportDaily promoterReportDaily = JSONObject.parseObject(JsonUtils.normalizeMetrics(metricsJson).toJSONString(), BytedancePromoterReportDaily.class);
                             promoterReportDaily.setAdvertiserId(advertiserId);
                             promoterReportDaily.setCdpProjectId(cdpProjectId);
                             promoterReportDaily.setCdpProjectName(cdpProjectName);
@@ -287,7 +284,7 @@ public class BytedancePromoterReportServiceImpl implements IBytedancePromoterRep
                             String awemeNickName = dimensionsJson.getString("aweme_nick_name");
                             Integer statTimeDay = Integer.valueOf(dimensionsJson.getString("stat_time_day").replace("-", ""));
                             Integer hour = Integer.valueOf(dimensionsJson.getString("stat_time_hour").substring(11, 13));
-                            BytedancePromoterReportHour bytedancePromoterReportHour = JSONObject.parseObject(metricsJson.toJSONString(), BytedancePromoterReportHour.class);
+                            BytedancePromoterReportHour bytedancePromoterReportHour = JSONObject.parseObject(JsonUtils.normalizeMetrics(metricsJson).toJSONString(), BytedancePromoterReportHour.class);
                             bytedancePromoterReportHour.setAdvertiserId(advertiserId);
                             bytedancePromoterReportHour.setCdpProjectId(cdpProjectId);
                             bytedancePromoterReportHour.setCdpProjectName(cdpProjectName);
@@ -391,7 +388,7 @@ public class BytedancePromoterReportServiceImpl implements IBytedancePromoterRep
                             String awemeId = dimensionsJson.getString("aweme_id");
                             String awemeNickName = dimensionsJson.getString("aweme_nick_name");
                             Integer statTimeDay = Integer.valueOf(dimensionsJson.getString("stat_time_day").replace("-", ""));
-                            BytedancePromoterReportDaily promoterReportDaily = JSONObject.parseObject(metricsJson.toJSONString(), BytedancePromoterReportDaily.class);
+                            BytedancePromoterReportDaily promoterReportDaily = JSONObject.parseObject(JsonUtils.normalizeMetrics(metricsJson).toJSONString(), BytedancePromoterReportDaily.class);
                             promoterReportDaily.setAdvertiserId(advertiserId);
                             promoterReportDaily.setCdpProjectId(cdpProjectId);
                             promoterReportDaily.setCdpProjectName(cdpProjectName);

+ 15 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/utils/JsonUtils.java

@@ -1,11 +1,13 @@
 package cn.com.ctop.job.bytedance.data.utils;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.PropertyNamingStrategy;
 import com.alibaba.fastjson.serializer.NameFilter;
 import com.alibaba.fastjson.serializer.SerializeConfig;
 import com.alibaba.fastjson.serializer.SerializerFeature;
 
+import java.util.Map;
 import java.util.regex.Pattern;
 
 public class JsonUtils {
@@ -53,4 +55,17 @@ public class JsonUtils {
     public static String toFilterJSON(Object obj) {
         return JSON.toJSONString(obj, CAMEL_TO_SNAKE_FILTER, SerializerFeature.WriteMapNullValue, SerializerFeature.MapSortField);
     }
+
+    public static JSONObject normalizeMetrics(JSONObject metricsJson) {
+        JSONObject normalized = new JSONObject();
+        if (metricsJson == null) {
+            return normalized;
+        }
+        for (Map.Entry<String, Object> entry : metricsJson.entrySet()) {
+            Object value = entry.getValue();
+            normalized.put(entry.getKey(), value instanceof String && "-".equals(((String) value).trim()) ? null : value);
+        }
+        return normalized;
+    }
+
 }