Browse Source

Merge branch 'ga-sync' of wangfan/adweb3-server into master

wangfan 5 months ago
parent
commit
203cd94b3a
35 changed files with 581 additions and 55 deletions
  1. 0 19
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/databridge/dto/OpenAPIResponse.java
  2. 1 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/APIStatus.java
  3. 1 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/OpenAPIRequest.java
  4. 16 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/OpenAPIResponse.java
  5. 1 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/ResourceDTO.java
  6. 1 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/CreatePropertyRequestDTO.java
  7. 2 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/GAAccountDTO.java
  8. 2 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/GADataStreamDTO.java
  9. 2 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/GAPropertyDTO.java
  10. 35 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/GAReportRequestDTO.java
  11. 9 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/OrderByType.java
  12. 23 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/ReportConstant.java
  13. 80 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/ReportType.java
  14. 13 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/data/CountryChartData.java
  15. 34 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/data/CustomReportData.java
  16. 29 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/data/DateViewData.java
  17. 6 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/data/GAReportDataDTO.java
  18. 20 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/data/PagePathViewData.java
  19. 26 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/data/SourceMediaViewData.java
  20. 1 1
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/gtm/CreateContainerRequestDTO.java
  21. 2 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/gtm/GTMAccountDTO.java
  22. 2 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/gtm/GTMContainerDTO.java
  23. 2 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/gtm/GTMTriggerDTO.java
  24. 2 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/gtm/GTMVersionDTO.java
  25. 2 2
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/gtm/GTMWorkspaceDTO.java
  26. 84 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/entity/GoogleGTM.java
  27. 16 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/mapper/GoogleGTMMapper.java
  28. 5 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/mapper/xml/GoogleGTMMapper.xml
  29. 15 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/service/IGoogleGTMService.java
  30. 87 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/service/google/GAReportService.java
  31. 19 0
      jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/service/impl/GoogleGTMServiceImpl.java
  32. 3 4
      jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml
  33. 3 4
      jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml
  34. 6 7
      jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml
  35. 31 0
      jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/modules/adweb/dmp/service/google/GoogleServiceTest.java

+ 0 - 19
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/databridge/dto/OpenAPIResponse.java

@@ -1,19 +0,0 @@
-package org.jeecg.modules.adweb.databridge.dto;
-
-import lombok.Builder;
-import lombok.Data;
-
-/**
- * @author wfansh
- */
-@Data
-@Builder
-public class OpenAPIResponse<T> {
-
-    @Builder.Default
-    private APIStatus status = APIStatus.SUCCESS;
-
-    private String message;
-
-    private T data;
-}

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/databridge/dto/APIStatus.java → jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/APIStatus.java

@@ -1,4 +1,4 @@
-package org.jeecg.modules.adweb.databridge.dto;
+package org.jeecg.modules.adweb.dmp.dto;
 
 import com.fasterxml.jackson.annotation.JsonValue;
 

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/databridge/dto/OpenAPIRequest.java → jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/OpenAPIRequest.java

@@ -1,4 +1,4 @@
-package org.jeecg.modules.adweb.databridge.dto;
+package org.jeecg.modules.adweb.dmp.dto;
 
 import lombok.Data;
 

+ 16 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/OpenAPIResponse.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.adweb.dmp.dto;
+
+import lombok.Data;
+
+/**
+ * @author wfansh
+ */
+@Data
+public class OpenAPIResponse<T> {
+
+    private APIStatus status;
+
+    private String message;
+
+    private T data;
+}

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/databridge/dto/google/ResourceDTO.java → jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/ResourceDTO.java

@@ -1,4 +1,4 @@
-package org.jeecg.modules.adweb.databridge.dto.google;
+package org.jeecg.modules.adweb.dmp.dto.google;
 
 import com.google.common.base.Splitter;
 import com.google.common.collect.Iterables;

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/databridge/dto/google/analytics/CreatePropertyRequestDTO.java → jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/CreatePropertyRequestDTO.java

@@ -1,4 +1,4 @@
-package org.jeecg.modules.adweb.databridge.dto.google.analytics;
+package org.jeecg.modules.adweb.dmp.dto.google.analytics;
 
 import lombok.Data;
 

+ 2 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/databridge/dto/google/analytics/GAAccountDTO.java → jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/GAAccountDTO.java

@@ -1,4 +1,4 @@
-package org.jeecg.modules.adweb.databridge.dto.google.analytics;
+package org.jeecg.modules.adweb.dmp.dto.google.analytics;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -7,7 +7,7 @@ import lombok.ToString;
 import lombok.experimental.SuperBuilder;
 
 import org.apache.commons.lang3.StringUtils;
-import org.jeecg.modules.adweb.databridge.dto.google.ResourceDTO;
+import org.jeecg.modules.adweb.dmp.dto.google.ResourceDTO;
 
 /**
  * @author wfansh

+ 2 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/databridge/dto/google/analytics/GADataStreamDTO.java → jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/GADataStreamDTO.java

@@ -1,4 +1,4 @@
-package org.jeecg.modules.adweb.databridge.dto.google.analytics;
+package org.jeecg.modules.adweb.dmp.dto.google.analytics;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -6,7 +6,7 @@ import lombok.NoArgsConstructor;
 import lombok.ToString;
 import lombok.experimental.SuperBuilder;
 
-import org.jeecg.modules.adweb.databridge.dto.google.ResourceDTO;
+import org.jeecg.modules.adweb.dmp.dto.google.ResourceDTO;
 
 /**
  * @author wfansh

+ 2 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/databridge/dto/google/analytics/GAPropertyDTO.java → jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/GAPropertyDTO.java

@@ -1,4 +1,4 @@
-package org.jeecg.modules.adweb.databridge.dto.google.analytics;
+package org.jeecg.modules.adweb.dmp.dto.google.analytics;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -7,7 +7,7 @@ import lombok.ToString;
 import lombok.experimental.SuperBuilder;
 
 import org.apache.commons.lang3.StringUtils;
-import org.jeecg.modules.adweb.databridge.dto.google.ResourceDTO;
+import org.jeecg.modules.adweb.dmp.dto.google.ResourceDTO;
 
 import java.util.List;
 

+ 35 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/GAReportRequestDTO.java

@@ -0,0 +1,35 @@
+package org.jeecg.modules.adweb.dmp.dto.google.analytics.report;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author wfansh
+ */
+@Data
+public class GAReportRequestDTO {
+
+    private String propertyResourceName;
+
+    private ReportType reportType;
+
+    private String startDate;
+
+    private String endDate;
+
+    /** Use default values in {@link ReportType} instead. */
+    @Deprecated private List<String> metrics;
+
+    /** Use default values in {@link ReportType} instead. */
+    @Deprecated private List<String> dimensions;
+
+    /** Use default values in {@link ReportType} instead. */
+    @Deprecated private String orderBy;
+
+    /** Use default values in {@link ReportType} instead. */
+    @Deprecated private OrderByType orderByType;
+
+    /** Use default values in {@link ReportType} instead. */
+    @Deprecated private Boolean orderByDesc;
+}

+ 9 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/OrderByType.java

@@ -0,0 +1,9 @@
+package org.jeecg.modules.adweb.dmp.dto.google.analytics.report;
+
+/**
+ * @author wfansh
+ */
+public enum OrderByType {
+    METRICS,
+    DIMENSIONS
+}

+ 23 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/ReportConstant.java

@@ -0,0 +1,23 @@
+package org.jeecg.modules.adweb.dmp.dto.google.analytics.report;
+
+/**
+ * @author wfansh
+ */
+public class ReportConstant {
+
+    public static final String METRIC_TOTAL_USERS = "totalUsers";
+    public static final String METRIC_NEW_USERS = "newUsers";
+    public static final String METRIC_ACTIVE_USERS = "activeUsers";
+    public static final String METRIC_SESSIONS = "sessions";
+    public static final String METRIC_AVG_SESSION_DURATION = "averageSessionDuration";
+    public static final String METRIC_SCREEN_PAGE_VIEWS = "screenPageViews";
+    public static final String METRIC_SCREEN_PAGE_VIEWS_PER_SESSION = "screenPageViewsPerSession";
+    public static final String METRIC_BOUNCE_RATE = "bounceRate";
+    public static final String METRIC_ENGAGEMENT_RATE = "engagementRate";
+    public static final String METRIC_USER_ENGAGEMENT_DURATION = "userEngagementDuration";
+
+    public static final String DIMENSION_COUNTRY = "country";
+    public static final String DIMENSION_SESSION_SOURCE_MEDIUM = "sessionSourceMedium";
+    public static final String DIMENSION_PAGE_PATH = "pagePath";
+    public static final String DIMENSION_DATE = "date";
+}

+ 80 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/ReportType.java

@@ -0,0 +1,80 @@
+package org.jeecg.modules.adweb.dmp.dto.google.analytics.report;
+
+import static org.jeecg.modules.adweb.dmp.dto.google.analytics.report.OrderByType.*;
+import static org.jeecg.modules.adweb.dmp.dto.google.analytics.report.ReportConstant.*;
+
+import lombok.Getter;
+
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author wfansh
+ */
+@Getter
+public enum ReportType {
+    // V2 - adweb:country:chart
+    ADWEB_COUNTRY_CHART(List.of(METRIC_TOTAL_USERS), List.of(DIMENSION_COUNTRY)),
+    // v2 - adweb:sourceMedium:list
+    ADWEB_SESSION_SOURCE_MEDIUM_VIEW(
+            List.of(
+                    METRIC_TOTAL_USERS,
+                    METRIC_NEW_USERS,
+                    METRIC_SESSIONS,
+                    METRIC_BOUNCE_RATE,
+                    METRIC_AVG_SESSION_DURATION,
+                    METRIC_SCREEN_PAGE_VIEWS_PER_SESSION),
+            List.of(DIMENSION_SESSION_SOURCE_MEDIUM)),
+    // V2 - adweb:pagePath:list
+    ADWEB_PAGE_PATH_VIEW(
+            List.of(
+                    METRIC_ENGAGEMENT_RATE,
+                    METRIC_SCREEN_PAGE_VIEWS,
+                    METRIC_USER_ENGAGEMENT_DURATION),
+            List.of(DIMENSION_PAGE_PATH),
+            METRIC_SCREEN_PAGE_VIEWS,
+            METRICS,
+            true),
+    // V2 - adwebV2:customer:api, pageviews, uniqueuser, bounce, AvgSessionDuration,
+    // adweb:active:user
+    ADWEB_DATE_VIEW(
+            List.of(
+                    METRIC_TOTAL_USERS,
+                    METRIC_ACTIVE_USERS,
+                    METRIC_SCREEN_PAGE_VIEWS,
+                    METRIC_BOUNCE_RATE,
+                    METRIC_AVG_SESSION_DURATION),
+            List.of(DIMENSION_DATE),
+            DIMENSION_DATE,
+            DIMENSIONS,
+            false),
+    // For flexible query.
+    ADWEB_CUSTOM_REPORT(Collections.EMPTY_LIST, Collections.EMPTY_LIST);
+
+    ReportType(List<String> defaultMetrics, List<String> defaultDimensions) {
+        this.defaultMetrics = defaultMetrics;
+        this.defaultDimensions = defaultDimensions;
+        this.defaultOrderBy = null;
+        this.defaultOrderByType = null;
+        this.defaultOrderByDesc = false;
+    }
+
+    ReportType(
+            List<String> defaultMetrics,
+            List<String> defaultDimensions,
+            String defaultOrderBy,
+            OrderByType defaultOrderByType,
+            boolean defaultOrderByDesc) {
+        this.defaultMetrics = defaultMetrics;
+        this.defaultDimensions = defaultDimensions;
+        this.defaultOrderBy = defaultOrderBy;
+        this.defaultOrderByType = defaultOrderByType;
+        this.defaultOrderByDesc = defaultOrderByDesc;
+    }
+
+    private final List<String> defaultMetrics;
+    private final List<String> defaultDimensions;
+    private final String defaultOrderBy;
+    private final OrderByType defaultOrderByType;
+    private final Boolean defaultOrderByDesc;
+}

+ 13 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/data/CountryChartData.java

@@ -0,0 +1,13 @@
+package org.jeecg.modules.adweb.dmp.dto.google.analytics.report.data;
+
+import lombok.Data;
+
+/**
+ * @author wfansh
+ */
+@Data
+public class CountryChartData implements GAReportDataDTO {
+
+    private String country;
+    private int totalUsers;
+}

+ 34 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/data/CustomReportData.java

@@ -0,0 +1,34 @@
+package org.jeecg.modules.adweb.dmp.dto.google.analytics.report.data;
+
+import org.jeecg.modules.adweb.dmp.dto.google.analytics.report.ReportType;
+
+import java.util.*;
+
+/**
+ * Represents a flexible GA report for {@link ReportType#ADWEB_CUSTOM_REPORT}, structured as a
+ * {@link Map} collection.
+ *
+ * <p>This {@link Map} contains two types of key-value pairs:
+ *
+ * <ul>
+ *   <li><strong>Dimensions:</strong>
+ *       <ul>
+ *         <li><strong>Key:</strong> the name of the dimension.
+ *         <li><strong>Value:</strong> the value of the dimension.
+ *       </ul>
+ *   <li><strong>Metrics:</strong>
+ *       <ul>
+ *         <li><strong>Key:</strong> the name of the metric.
+ *         <li><strong>Value:</strong> the value of the metric.
+ *       </ul>
+ * </ul>
+ *
+ * <p>This structure allows for flexible representation of both dimensions and metrics in custom GA
+ * reports.
+ *
+ * @author wfansh
+ */
+public class CustomReportData extends LinkedHashMap<String, String> implements GAReportDataDTO {
+
+    private CustomReportData() {}
+}

+ 29 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/data/DateViewData.java

@@ -0,0 +1,29 @@
+package org.jeecg.modules.adweb.dmp.dto.google.analytics.report.data;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * @author wfansh
+ */
+@Data
+public class DateViewData implements GAReportDataDTO {
+
+    /**
+     * Formatted as {@link DateTimeFormatter#ISO_LOCAL_DATE}, originated from {@link
+     * DateTimeFormatter#BASIC_ISO_DATE}
+     */
+    private String date;
+
+    private int totalUsers;
+
+    private int activeUsers;
+
+    private int pageViews;
+
+    private BigDecimal bounceRate;
+
+    private BigDecimal avgSessionDuration;
+}

+ 6 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/data/GAReportDataDTO.java

@@ -0,0 +1,6 @@
+package org.jeecg.modules.adweb.dmp.dto.google.analytics.report.data;
+
+/**
+ * @author wfansh
+ */
+public interface GAReportDataDTO {}

+ 20 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/data/PagePathViewData.java

@@ -0,0 +1,20 @@
+package org.jeecg.modules.adweb.dmp.dto.google.analytics.report.data;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author wfansh
+ */
+@Data
+public class PagePathViewData implements GAReportDataDTO {
+
+    private String pagePath;
+
+    private BigDecimal engagementRate;
+
+    private int pageViews;
+
+    private BigDecimal avgTimeOnPage;
+}

+ 26 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/analytics/report/data/SourceMediaViewData.java

@@ -0,0 +1,26 @@
+package org.jeecg.modules.adweb.dmp.dto.google.analytics.report.data;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @author wfansh
+ */
+@Data
+public class SourceMediaViewData implements GAReportDataDTO {
+
+    private String type;
+
+    private int totalUsers;
+
+    private int newUsers;
+
+    private int sessions;
+
+    private BigDecimal bounceRate;
+
+    private BigDecimal avgSessionDuration;
+
+    private BigDecimal pageViewsPerSession;
+}

+ 1 - 1
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/databridge/dto/google/gtm/CreateContainerRequestDTO.java → jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/gtm/CreateContainerRequestDTO.java

@@ -1,4 +1,4 @@
-package org.jeecg.modules.adweb.databridge.dto.google.gtm;
+package org.jeecg.modules.adweb.dmp.dto.google.gtm;
 
 import lombok.Data;
 

+ 2 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/databridge/dto/google/gtm/GTMAccountDTO.java → jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/gtm/GTMAccountDTO.java

@@ -1,10 +1,10 @@
-package org.jeecg.modules.adweb.databridge.dto.google.gtm;
+package org.jeecg.modules.adweb.dmp.dto.google.gtm;
 
 import lombok.*;
 import lombok.experimental.SuperBuilder;
 
 import org.apache.commons.lang3.StringUtils;
-import org.jeecg.modules.adweb.databridge.dto.google.ResourceDTO;
+import org.jeecg.modules.adweb.dmp.dto.google.ResourceDTO;
 
 /**
  * @author wfansh

+ 2 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/databridge/dto/google/gtm/GTMContainerDTO.java → jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/gtm/GTMContainerDTO.java

@@ -1,4 +1,4 @@
-package org.jeecg.modules.adweb.databridge.dto.google.gtm;
+package org.jeecg.modules.adweb.dmp.dto.google.gtm;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -7,7 +7,7 @@ import lombok.ToString;
 import lombok.experimental.SuperBuilder;
 
 import org.apache.commons.lang3.StringUtils;
-import org.jeecg.modules.adweb.databridge.dto.google.ResourceDTO;
+import org.jeecg.modules.adweb.dmp.dto.google.ResourceDTO;
 
 import java.util.List;
 

+ 2 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/databridge/dto/google/gtm/GTMTriggerDTO.java → jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/gtm/GTMTriggerDTO.java

@@ -1,4 +1,4 @@
-package org.jeecg.modules.adweb.databridge.dto.google.gtm;
+package org.jeecg.modules.adweb.dmp.dto.google.gtm;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -6,7 +6,7 @@ import lombok.NoArgsConstructor;
 import lombok.ToString;
 import lombok.experimental.SuperBuilder;
 
-import org.jeecg.modules.adweb.databridge.dto.google.ResourceDTO;
+import org.jeecg.modules.adweb.dmp.dto.google.ResourceDTO;
 
 /**
  * @author wfansh

+ 2 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/databridge/dto/google/gtm/GTMVersionDTO.java → jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/gtm/GTMVersionDTO.java

@@ -1,4 +1,4 @@
-package org.jeecg.modules.adweb.databridge.dto.google.gtm;
+package org.jeecg.modules.adweb.dmp.dto.google.gtm;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -6,7 +6,7 @@ import lombok.NoArgsConstructor;
 import lombok.ToString;
 import lombok.experimental.SuperBuilder;
 
-import org.jeecg.modules.adweb.databridge.dto.google.ResourceDTO;
+import org.jeecg.modules.adweb.dmp.dto.google.ResourceDTO;
 
 /**
  * @author wfansh

+ 2 - 2
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/databridge/dto/google/gtm/GTMWorkspaceDTO.java → jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/dto/google/gtm/GTMWorkspaceDTO.java

@@ -1,4 +1,4 @@
-package org.jeecg.modules.adweb.databridge.dto.google.gtm;
+package org.jeecg.modules.adweb.dmp.dto.google.gtm;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -6,7 +6,7 @@ import lombok.NoArgsConstructor;
 import lombok.ToString;
 import lombok.experimental.SuperBuilder;
 
-import org.jeecg.modules.adweb.databridge.dto.google.ResourceDTO;
+import org.jeecg.modules.adweb.dmp.dto.google.ResourceDTO;
 
 /**
  * @author wfansh

+ 84 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/entity/GoogleGTM.java

@@ -0,0 +1,84 @@
+package org.jeecg.modules.adweb.dmp.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @Description: dmp_google_gtm
+ * @Author: jeecg-boot
+ * @Date:   2024-10-10
+ * @Version: V1.0
+ */
+@Data
+@TableName("dmp_google_gtm")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description="dmp_google_gtm")
+public class GoogleGTM implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**id*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @Schema(description = "id")
+    private Integer id;
+	/**siteId*/
+	@Excel(name = "siteId", width = 15)
+    @Schema(description = "siteId")
+    private Integer siteId;
+	/**uid*/
+	@Excel(name = "uid", width = 15)
+    @Schema(description = "uid")
+    private String uid;
+	/**gtmAccountId*/
+	@Excel(name = "gtmAccountId", width = 15)
+    @Schema(description = "gtmAccountId")
+    private String gtmAccountId;
+	/**gtmContainerId*/
+	@Excel(name = "gtmContainerId", width = 15)
+    @Schema(description = "gtmContainerId")
+    private String gtmContainerId;
+	/**gtmTagId*/
+	@Excel(name = "gtmTagId", width = 15)
+    @Schema(description = "gtmTagId")
+    private String gtmTagId;
+	/**gaAccountId*/
+	@Excel(name = "gaAccountId", width = 15)
+    @Schema(description = "gaAccountId")
+    private String gaAccountId;
+	/**gaPropertyId*/
+	@Excel(name = "gaPropertyId", width = 15)
+    @Schema(description = "gaPropertyId")
+    private String gaPropertyId;
+	/**GA数据版本,V3,V4*/
+	@Excel(name = "GA数据版本,V3,V4", width = 15)
+    @Schema(description = "GA数据版本,V3,V4")
+    private String gaVersion;
+	/**gaSiteUrl*/
+	@Excel(name = "gaSiteUrl", width = 15)
+    @Schema(description = "gaSiteUrl")
+    private String gaSiteUrl;
+	/**gaTagId*/
+	@Excel(name = "gaTagId", width = 15)
+    @Schema(description = "gaTagId")
+    private String gaTagId;
+	/**ctime*/
+	@Excel(name = "ctime", width = 20, format = "yyyy-MM-dd HH:mm:ss")
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @Schema(description = "ctime")
+    private Date ctime;
+}

+ 16 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/mapper/GoogleGTMMapper.java

@@ -0,0 +1,16 @@
+package org.jeecg.modules.adweb.dmp.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import org.jeecg.modules.adweb.dmp.entity.GoogleGTM;
+
+/**
+ * @Description: dmp_google_gtm
+ * @Author: jeecg-boot
+ * @Date:   2024-10-10
+ * @Version: V1.0
+ */
+public interface GoogleGTMMapper extends BaseMapper<GoogleGTM> {
+
+}

+ 5 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/mapper/xml/GoogleGTMMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.dmp.mapper.GoogleGTMMapper">
+
+</mapper>

+ 15 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/service/IGoogleGTMService.java

@@ -0,0 +1,15 @@
+package org.jeecg.modules.adweb.dmp.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import org.jeecg.modules.adweb.dmp.entity.GoogleGTM;
+
+/**
+ * @Description: dmp_google_gtm
+ * @Author: jeecg-boot
+ * @Date:   2024-10-10
+ * @Version: V1.0
+ */
+public interface IGoogleGTMService extends IService<GoogleGTM> {
+
+}

+ 87 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/service/google/GAReportService.java

@@ -0,0 +1,87 @@
+package org.jeecg.modules.adweb.dmp.service.google;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import jakarta.annotation.PostConstruct;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.apache.commons.lang3.reflect.TypeUtils;
+import org.jeecg.common.util.FastJsonUtil;
+import org.jeecg.modules.adweb.common.util.RestTemplateUtil;
+import org.jeecg.modules.adweb.dmp.dto.OpenAPIRequest;
+import org.jeecg.modules.adweb.dmp.dto.OpenAPIResponse;
+import org.jeecg.modules.adweb.dmp.dto.google.analytics.report.GAReportRequestDTO;
+import org.jeecg.modules.adweb.dmp.dto.google.analytics.report.data.GAReportDataDTO;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.List;
+
+/**
+ * Google Analytics数据同步 - http://data-bridge.v3.adwebcloud.com:9002/swagger-ui/index.html
+ *
+ * @author wfansh
+ */
+@Slf4j
+@Service
+public class GAReportService {
+
+    private static final String DATA_BRIDGE_GA_REPORT_PATH = "/api/google/ga/report";
+
+    private RestTemplate restTemplate;
+
+    @Value("${data-bridge.api.host}")
+    private String dataBridgeApiHost;
+
+    @Value("${data-bridge.api.token}")
+    private String dataBridgeApiToken;
+
+    @PostConstruct
+    private void init() {
+        this.restTemplate = RestTemplateUtil.getRestTemplate(30, 30, dataBridgeApiToken);
+    }
+
+    //    /**
+    //     * 拉取Google Analytics国家报表
+    //     *
+    //     * @param googleGTM
+    //     */
+    //    private void queryGARegionReport(GoogleGTM googleGTM) {}
+    //
+
+    /**
+     * 请求Google Analytics报表,http://data-bridge.v3.adwebcloud.com:9002/swagger-ui/index.html
+     *
+     * @param gaReportRequest
+     * @param reportDataType
+     * @return
+     * @param <T>
+     */
+    @VisibleForTesting
+    <T extends GAReportDataDTO> List<T> runGAReport(
+            GAReportRequestDTO gaReportRequest, Class<T> reportDataType) {
+        log.info("runGAReport: {}", FastJsonUtil.toJSONString(gaReportRequest));
+
+        // 1. 创建API request
+        OpenAPIRequest<GAReportRequestDTO> openAPIRequest = new OpenAPIRequest<>();
+        openAPIRequest.setRequestServer(this.getClass().getSimpleName());
+        openAPIRequest.setRequestTime(System.currentTimeMillis());
+        openAPIRequest.setData(gaReportRequest);
+
+        // 2. 请求API接口
+        OpenAPIResponse<List<T>> openAPIResponse =
+                RestTemplateUtil.postForObject(
+                        restTemplate,
+                        dataBridgeApiHost + DATA_BRIDGE_GA_REPORT_PATH,
+                        openAPIRequest,
+                        ParameterizedTypeReference.forType(
+                                TypeUtils.parameterize(
+                                        OpenAPIResponse.class,
+                                        TypeUtils.parameterize(List.class, reportDataType))));
+
+        return openAPIResponse.getData();
+    }
+}

+ 19 - 0
jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/adweb/dmp/service/impl/GoogleGTMServiceImpl.java

@@ -0,0 +1,19 @@
+package org.jeecg.modules.adweb.dmp.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import org.jeecg.modules.adweb.dmp.entity.GoogleGTM;
+import org.jeecg.modules.adweb.dmp.mapper.GoogleGTMMapper;
+import org.jeecg.modules.adweb.dmp.service.IGoogleGTMService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @Description: dmp_google_gtm
+ * @Author: jeecg-boot
+ * @Date:   2024-10-10
+ * @Version: V1.0
+ */
+@Service
+public class GoogleGTMServiceImpl extends ServiceImpl<GoogleGTMMapper, GoogleGTM> implements IGoogleGTMService {
+
+}

+ 3 - 4
jeecg-module-system/jeecg-system-start/src/main/resources/application-dev.yml

@@ -339,7 +339,6 @@ security:
 ### 自定义
 ### GA,GTM,Ads等数据交换中心
 data-bridge:
-  open:
-    api:
-      host: http://data-bridge.v3.adwebcloud.com:9002
-      token: lgoXX9APqgPLGMPECiNoxaPx
+  api:
+    host: http://data-bridge.v3.adwebcloud.com:9002
+    token: lgoXX9APqgPLGMPECiNoxaPx

+ 3 - 4
jeecg-module-system/jeecg-system-start/src/main/resources/application-prod.yml

@@ -327,7 +327,6 @@ security:
 ### 自定义
 ### GA,GTM,Ads等数据交换中心
 data-bridge:
-  open:
-    api:
-      host: http://data-bridge.v3.adwebcloud.com:9002
-      token: lgoXX9APqgPLGMPECiNoxaPx
+  api:
+    host: http://data-bridge.v3.adwebcloud.com:9002
+    token: lgoXX9APqgPLGMPECiNoxaPx

+ 6 - 7
jeecg-module-system/jeecg-system-start/src/main/resources/application-test.yml

@@ -166,9 +166,9 @@ spring:
           slow-sql-millis: 5000
       datasource:
         master:
-          url: jdbc:mysql://127.0.0.1:3306/adweb3?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
-          username: root
-          password: root
+          url: jdbc:mysql://52.83.163.165:3306/adweb3_dev?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
+          username: adweb3_dev
+          password: Advich@2024,.
           driver-class-name: com.mysql.cj.jdbc.Driver
           # 多数据源配置
           #multi-datasource1:
@@ -325,7 +325,6 @@ security:
 ### 自定义
 ### GA,GTM,Ads等数据交换中心
 data-bridge:
-  open:
-    api:
-      host: http://data-bridge.v3.adwebcloud.com:9002
-      token: lgoXX9APqgPLGMPECiNoxaPx
+  api:
+    host: http://data-bridge.v3.adwebcloud.com:9002
+    token: lgoXX9APqgPLGMPECiNoxaPx

+ 31 - 0
jeecg-module-system/jeecg-system-start/src/test/java/org/jeecg/modules/adweb/dmp/service/google/GoogleServiceTest.java

@@ -0,0 +1,31 @@
+package org.jeecg.modules.adweb.dmp.service.google;
+
+import org.jeecg.common.util.FastJsonUtil;
+import org.jeecg.modules.adweb.dmp.dto.google.analytics.report.GAReportRequestDTO;
+import org.jeecg.modules.adweb.dmp.dto.google.analytics.report.ReportType;
+import org.jeecg.modules.adweb.dmp.dto.google.analytics.report.data.CountryChartData;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.util.List;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class GoogleServiceTest {
+
+    @Autowired GAReportService gaReportService;
+
+    @Test
+    public void testGAReport() {
+        GAReportRequestDTO gaReportRequest = new GAReportRequestDTO();
+        gaReportRequest.setPropertyResourceName("properties/457183952");
+        gaReportRequest.setReportType(ReportType.ADWEB_COUNTRY_CHART);
+        gaReportRequest.setStartDate("2023-10-01");
+        gaReportRequest.setEndDate("2024-10-01");
+
+        List<CountryChartData> countryReport =
+                gaReportService.runGAReport(gaReportRequest, CountryChartData.class);
+
+        System.out.println(FastJsonUtil.toJSONString(countryReport));
+    }
+}