|
@@ -6,13 +6,24 @@ import jakarta.annotation.PostConstruct;
|
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
+import org.apache.commons.compress.utils.Lists;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.commons.lang3.reflect.TypeUtils;
|
|
|
+import org.jeecg.common.util.DateUtils;
|
|
|
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.OrderByType;
|
|
|
+import org.jeecg.modules.adweb.dmp.dto.google.analytics.report.ReportConstant;
|
|
|
+import org.jeecg.modules.adweb.dmp.dto.google.analytics.report.ReportType;
|
|
|
+import org.jeecg.modules.adweb.dmp.dto.google.analytics.report.data.CustomReportData;
|
|
|
import org.jeecg.modules.adweb.dmp.dto.google.analytics.report.data.GAReportDataDTO;
|
|
|
+import org.jeecg.modules.adweb.dmp.entity.GACountryReport;
|
|
|
+import org.jeecg.modules.adweb.dmp.entity.GoogleGTM;
|
|
|
+import org.jeecg.modules.adweb.dmp.service.IGACountryReportService;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.core.ParameterizedTypeReference;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -37,6 +48,8 @@ public class GAReportService {
|
|
|
@Value("${data-bridge.api.token}")
|
|
|
private String dataBridgeApiToken;
|
|
|
|
|
|
+ @Autowired private IGACountryReportService gaCountryReportService;
|
|
|
+
|
|
|
private RestTemplate restTemplate;
|
|
|
|
|
|
@PostConstruct
|
|
@@ -44,13 +57,48 @@ public class GAReportService {
|
|
|
this.restTemplate = RestTemplateUtil.getRestTemplate(60, 60, dataBridgeApiToken);
|
|
|
}
|
|
|
|
|
|
- // /**
|
|
|
- // * 拉取Google Analytics国家报表
|
|
|
- // *
|
|
|
- // * @param googleGTM
|
|
|
- // */
|
|
|
- // private void queryGARegionReport(GoogleGTM googleGTM) {}
|
|
|
- //
|
|
|
+ /**
|
|
|
+ * 拉取Google Analytics 国家按日报表
|
|
|
+ *
|
|
|
+ * @param googleGTM
|
|
|
+ */
|
|
|
+ void queryGACountryDailyReport(GoogleGTM googleGTM) {
|
|
|
+ // 1. 构建报表请求参数
|
|
|
+ // 使用ADWEB_CUSTOM_REPORT而不是ADWEB_COUNTRY_CHART,因为需要date作为dimension
|
|
|
+ GAReportRequestDTO gaReportRequest = new GAReportRequestDTO();
|
|
|
+ gaReportRequest.setPropertyResourceName(
|
|
|
+ toGAPropertyResourceName(googleGTM.getGaPropertyId()));
|
|
|
+ gaReportRequest.setReportType(ReportType.ADWEB_CUSTOM_REPORT);
|
|
|
+ gaReportRequest.setStartDate("2024-01-01");
|
|
|
+ gaReportRequest.setEndDate("2024-10-11");
|
|
|
+ gaReportRequest.setMetrics(List.of(ReportConstant.METRIC_TOTAL_USERS));
|
|
|
+ gaReportRequest.setDimensions(
|
|
|
+ List.of(ReportConstant.DIMENSION_DATE, ReportConstant.DIMENSION_COUNTRY));
|
|
|
+ gaReportRequest.setOrderByType(OrderByType.DIMENSIONS);
|
|
|
+ gaReportRequest.setOrderBy(ReportConstant.DIMENSION_DATE);
|
|
|
+ List<CustomReportData> reportDataList =
|
|
|
+ runGAReport(gaReportRequest, CustomReportData.class);
|
|
|
+
|
|
|
+ // 2. 转化为DB entity
|
|
|
+ List<GACountryReport> countryReport = Lists.newArrayList();
|
|
|
+ for (CustomReportData reportData : reportDataList) {
|
|
|
+ GACountryReport reportRow = new GACountryReport();
|
|
|
+ reportRow.setSiteId(googleGTM.getSiteId());
|
|
|
+ reportRow.setDate(
|
|
|
+ DateUtils.str2Date(
|
|
|
+ reportData.get(ReportConstant.DIMENSION_DATE),
|
|
|
+ DateUtils.date_sdf.get()));
|
|
|
+ reportRow.setCountry(reportData.get(ReportConstant.DIMENSION_COUNTRY));
|
|
|
+ reportRow.setTotalUsers(
|
|
|
+ Integer.parseInt(reportData.get(ReportConstant.METRIC_TOTAL_USERS)));
|
|
|
+
|
|
|
+ countryReport.add(reportRow);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 3. 保存数据库
|
|
|
+ // TODO - 重复数据
|
|
|
+ gaCountryReportService.saveOrUpdateBatch(countryReport);
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 请求Google Analytics报表,http://data-bridge.v3.adwebcloud.com:9002/swagger-ui/index.html
|
|
@@ -88,4 +136,8 @@ public class GAReportService {
|
|
|
FastJsonUtil.toJSONString(openAPIResponse.getData()));
|
|
|
return openAPIResponse.getData();
|
|
|
}
|
|
|
+
|
|
|
+ private final String toGAPropertyResourceName(String gaPropertyId) {
|
|
|
+ return StringUtils.isNumeric(gaPropertyId) ? "properties/" + gaPropertyId : gaPropertyId;
|
|
|
+ }
|
|
|
}
|