Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

ZHAOXIAN před 1 rokem
rodič
revize
85040c0a6c
23 změnil soubory, kde provedl 902 přidání a 25 odebrání
  1. 18 12
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/controller/BytedanceController.java
  2. 65 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/controller/BytedanceXingTuController.java
  3. 10 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedanceAdvertiserReportDaily.java
  4. 10 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedanceAdvertiserReportHour.java
  5. 10 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedancePromoterReportDaily.java
  6. 10 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedancePromoterReportHour.java
  7. 56 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedanceXingTuReport.java
  8. 20 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedanceXingTuReportDaily.java
  9. 41 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedanceXingTuTask.java
  10. 2 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/AdminAdvertiserListMapper.java
  11. 28 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/BytedanceXingTuMapper.java
  12. 13 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/xml/AdminAdvertiserListMapper.xml
  13. 8 4
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/xml/BytedanceAccountReportMapper.xml
  14. 8 5
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/xml/BytedancePromoterReportMapper.xml
  15. 138 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/xml/BytedanceXingTuMapper.xml
  16. 2 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IAdminAdvertiserListService.java
  17. 16 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IBytedanceXingTuService.java
  18. 5 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/AdminAdvertiserListServiceImpl.java
  19. 4 1
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceCdpProjectServiceImpl.java
  20. 306 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceXingTuServiceImpl.java
  21. 1 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/utils/FieldsConfig.java
  22. 58 3
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceReportRetryJob.java
  23. 73 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceXingTuJob.java

+ 18 - 12
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/controller/BytedanceController.java

@@ -49,17 +49,19 @@ public class BytedanceController {
     @Autowired
     private IBytedanceMiniAppService bytedanceMiniAppService;
 
+    @Autowired
+    private IBytedanceCdpProjectService cdpProjectService;
 
     @GetMapping("/accountReport")
-    public void getChannel(String param) {
+    public void getChannel() {
+
+        List<JSONObject> infos = adminAdvertiserListService.getAdvertiserInfosByAdminIds();
+
 
-        List<JSONObject> infos = adminAdvertiserListService.getAdvertiserInfos();
-        System.err.println(infos);
-        adminAdvertiserListService.batchUpdateAdvertiserName(infos);
 
-      /*  List<JSONObject> allList = promoterReportService.getAllList();
-        for (int i = 0; i < allList.size(); i++) {
-            JSONObject jsonObject = allList.get(i);
+
+        for (int i = 0; i < infos.size(); i++) {
+            JSONObject jsonObject = infos.get(i);
             Long advertiserId = jsonObject.getLong("advertiserId");
             String accessToken = jsonObject.getString("accessToken");
 
@@ -67,15 +69,19 @@ public class BytedanceController {
                 @Override
                 public void run() {
                     if (!Check.isNull(accessToken)) {
-                        accountReportService.getBytedanceAccountDaily(advertiserId, accessToken, "2025-01-01", "2025-03-25", 1, 1);
-                    //    accountReportService.getBytedanceAccountHour(advertiserId, accessToken, "2025-01-01", "2025-03-25", 1, 1);
-                      //  promoterReportService.getBytedancePromoterHour(advertiserId, accessToken, "2025-01-01", "2025-03-25", 1, 1);
-                        promoterReportService.getBytedancePromoterDaily(advertiserId, accessToken, "2025-01-01", "2025-03-25", 1, 1);
+
+                        /*cdpProjectService.getProjectList(advertiserId, null);
+                        cdpProjectService.getpromotionList(advertiserId, null);*/
+
+                   //     accountReportService.getBytedanceAccountDaily(advertiserId,accessToken,"2025-06-01","2025-06-03",1,1);
+                        promoterReportService.getBytedancePromoterDaily(advertiserId,accessToken,"2025-06-01","2025-06-03",1,1);
+
+
                     }
                 }
             });
 
-        }*/
+        }
 
 
     }

+ 65 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/controller/BytedanceXingTuController.java

@@ -0,0 +1,65 @@
+package cn.com.ctop.job.bytedance.controller;
+
+import cn.com.ctop.job.bytedance.data.service.IBytedanceXingTuService;
+import cn.com.ctop.job.bytedance.data.utils.DateUtils;
+import com.alibaba.fastjson.JSONObject;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/bytedance/bytedanceXingTu")
+@Api(tags = "头条星图")
+@Slf4j
+public class BytedanceXingTuController {
+    @Autowired
+    private IBytedanceXingTuService bytedanceXingTuService;
+
+
+    @GetMapping("/taskList")
+    public void taskList(@RequestParam(required = false) Long advertiserId,
+                         @RequestParam(required = false) String startDate,
+                         @RequestParam(required = false) String endDate) {
+        startDate = startDate == null ? DateUtils.getNowAddDate("yyyy-MM-dd", -1) : startDate;
+        endDate = endDate == null ? DateUtils.getNowDate("yyyy-MM-dd") : endDate;
+        List<JSONObject> xingTuAccount = bytedanceXingTuService.getXingTuAccount(advertiserId);
+        for (JSONObject jsonObject : xingTuAccount) {
+            Long advId = jsonObject.getLong("advertiser_id");
+            String accessToken = jsonObject.getString("access_token");
+            bytedanceXingTuService.getXingTuTaskList(advId, accessToken, startDate, endDate, 1, null, 1, null);
+        }
+
+    }
+
+    @GetMapping("/taskInfo")
+    public void taskInfo() {
+        List<JSONObject> xingTuTasks = bytedanceXingTuService.getXingTuActiveTask(null);
+        for (JSONObject taskJson : xingTuTasks) {
+            Long advId = taskJson.getLong("advertiser_id");
+            Long taskId = taskJson.getLong("task_id");
+            String accessToken = taskJson.getString("access_token");
+            bytedanceXingTuService.getXingTuTaskInfo(advId, taskId, accessToken, null, 1, null);
+        }
+
+    }
+
+    @GetMapping("/taskReport")
+    public void taskReport() {
+        List<JSONObject> xingTuTasks = bytedanceXingTuService.getXingTuReportTask(null);
+        for (JSONObject taskJson : xingTuTasks) {
+            Integer taskStatus = taskJson.getInteger("task_status");
+            Long advId = taskJson.getLong("advertiser_id");
+            Long taskId = taskJson.getLong("task_id");
+            String accessToken = taskJson.getString("access_token");
+            bytedanceXingTuService.getXingTuTaskReport(advId, taskId, accessToken, 1, null, 1, null);
+        }
+
+    }
+
+}

+ 10 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedanceAdvertiserReportDaily.java

@@ -132,6 +132,7 @@ public class BytedanceAdvertiserReportDaily {
      * 3日LTV
      */
     private BigDecimal attributionMicroGame3dLtv;
+    private BigDecimal statMicroGame0dAmount;
 
     public Long getAdvertiserId() {
         return advertiserId;
@@ -325,6 +326,14 @@ public class BytedanceAdvertiserReportDaily {
         this.attributionMicroGame3dLtv = attributionMicroGame3dLtv;
     }
 
+    public BigDecimal getStatMicroGame0dAmount() {
+        return statMicroGame0dAmount;
+    }
+
+    public void setStatMicroGame0dAmount(BigDecimal statMicroGame0dAmount) {
+        this.statMicroGame0dAmount = statMicroGame0dAmount;
+    }
+
     @Override
     public String toString() {
         return "BytedanceAdvertiserReportDaily{" +
@@ -352,6 +361,7 @@ public class BytedanceAdvertiserReportDaily {
                 ", attributionMicroGame0dLtv=" + attributionMicroGame0dLtv +
                 ", attributionMicroGame7dLtv=" + attributionMicroGame7dLtv +
                 ", attributionMicroGame3dLtv=" + attributionMicroGame3dLtv +
+                ", statMicroGame0dAmount=" + statMicroGame0dAmount +
                 '}';
     }
 }

+ 10 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedanceAdvertiserReportHour.java

@@ -136,6 +136,7 @@ public class BytedanceAdvertiserReportHour {
      * 3日LTV
      */
     private BigDecimal attributionMicroGame3dLtv;
+    private BigDecimal statMicroGame0dAmount;
 
     public Long getAdvertiserId() {
         return advertiserId;
@@ -337,6 +338,14 @@ public class BytedanceAdvertiserReportHour {
         this.attributionMicroGame3dLtv = attributionMicroGame3dLtv;
     }
 
+    public BigDecimal getStatMicroGame0dAmount() {
+        return statMicroGame0dAmount;
+    }
+
+    public void setStatMicroGame0dAmount(BigDecimal statMicroGame0dAmount) {
+        this.statMicroGame0dAmount = statMicroGame0dAmount;
+    }
+
     @Override
     public String toString() {
         return "BytedanceAdvertiserReportHour{" +
@@ -365,6 +374,7 @@ public class BytedanceAdvertiserReportHour {
                 ", attributionMicroGame0dLtv=" + attributionMicroGame0dLtv +
                 ", attributionMicroGame7dLtv=" + attributionMicroGame7dLtv +
                 ", attributionMicroGame3dLtv=" + attributionMicroGame3dLtv +
+                ", statMicroGame0dAmount=" + statMicroGame0dAmount +
                 '}';
     }
 }

+ 10 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedancePromoterReportDaily.java

@@ -142,6 +142,7 @@ public class BytedancePromoterReportDaily {
     private BigDecimal attributionMicroGame0dLtv;
     private BigDecimal attributionMicroGame3dLtv;
     private BigDecimal attributionMicroGame7dLtv;
+    private BigDecimal statMicroGame0dAmount;
 
     public Long getAdvertiserId() {
         return advertiserId;
@@ -367,6 +368,14 @@ public class BytedancePromoterReportDaily {
         this.attributionMicroGame7dLtv = attributionMicroGame7dLtv;
     }
 
+    public BigDecimal getStatMicroGame0dAmount() {
+        return statMicroGame0dAmount;
+    }
+
+    public void setStatMicroGame0dAmount(BigDecimal statMicroGame0dAmount) {
+        this.statMicroGame0dAmount = statMicroGame0dAmount;
+    }
+
     @Override
     public String toString() {
         return "BytedancePromoterReportDaily{" +
@@ -398,6 +407,7 @@ public class BytedancePromoterReportDaily {
                 ", attributionMicroGame0dLtv=" + attributionMicroGame0dLtv +
                 ", attributionMicroGame3dLtv=" + attributionMicroGame3dLtv +
                 ", attributionMicroGame7dLtv=" + attributionMicroGame7dLtv +
+                ", statMicroGame0dAmount=" + statMicroGame0dAmount +
                 '}';
     }
 }

+ 10 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedancePromoterReportHour.java

@@ -148,6 +148,7 @@ public class BytedancePromoterReportHour {
     private BigDecimal attributionMicroGame0dLtv;
     private BigDecimal attributionMicroGame3dLtv;
     private BigDecimal attributionMicroGame7dLtv;
+    private BigDecimal statMicroGame0dAmount;
 
 
     public Long getAdvertiserId() {
@@ -382,6 +383,14 @@ public class BytedancePromoterReportHour {
         this.attributionMicroGame7dLtv = attributionMicroGame7dLtv;
     }
 
+    public BigDecimal getStatMicroGame0dAmount() {
+        return statMicroGame0dAmount;
+    }
+
+    public void setStatMicroGame0dAmount(BigDecimal statMicroGame0dAmount) {
+        this.statMicroGame0dAmount = statMicroGame0dAmount;
+    }
+
     @Override
     public String toString() {
         return "BytedancePromoterReportHour{" +
@@ -414,6 +423,7 @@ public class BytedancePromoterReportHour {
                 ", attributionMicroGame0dLtv=" + attributionMicroGame0dLtv +
                 ", attributionMicroGame3dLtv=" + attributionMicroGame3dLtv +
                 ", attributionMicroGame7dLtv=" + attributionMicroGame7dLtv +
+                ", statMicroGame0dAmount=" + statMicroGame0dAmount +
                 '}';
     }
 }

+ 56 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedanceXingTuReport.java

@@ -0,0 +1,56 @@
+package cn.com.ctop.job.bytedance.data.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BytedanceXingTuReport {
+    private Long challengeTaskId;
+    private Long advertiserId;
+    private Long authorId;
+    private Long itemId;
+
+    private Long androidActivateCnt;
+    private String authorNickname;
+    private Long commentCnt;
+    private Long componentClickCnt;
+    private Long estAdCostValue;
+    private Long estAdCostTime;
+    private Long estSalesValue;
+    private Long estSalesTime;
+    private Long iaaCostHour;
+    private Long iapCostHour;
+    private Long iosActivateCnt;
+    private Long likeCnt;
+    private String link;
+
+    private Long playValue;
+    private Long playTime;
+
+    private Long playVv;
+    private Long promoteCnt;
+    private Long providerId;
+    private Long releaseTime;
+    private Long relevanceAuditResult;
+    private Long rewardAmount;
+    private Long rewardLevel;
+
+    private Long settleAdShareValue;
+    private Long settleAdShareTime;
+
+    private Long settleCpsValue;
+    private Long settleCpsTime;
+
+    private Long shareCnt;
+    private String title;
+    private Long uid;
+    private Long validLikeCnt;
+    private Long validPlayVv;
+
+    private List<BytedanceXingTuReportDaily> itemInfoDailyList;
+}

+ 20 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedanceXingTuReportDaily.java

@@ -0,0 +1,20 @@
+package cn.com.ctop.job.bytedance.data.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BytedanceXingTuReportDaily {
+    private Long challengeTaskId;
+    private Long advertiserId;
+    private Long authorId;
+    private Long itemId;
+    private Integer pDate;
+    private Long estSales;
+    private Long settleCps;
+    private Long estAdCost;
+    private Long settleAdShare;
+}

+ 41 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedanceXingTuTask.java

@@ -0,0 +1,41 @@
+package cn.com.ctop.job.bytedance.data.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class BytedanceXingTuTask {
+    private Long challengeTaskId;
+    private Long advertiserId;
+    // challenge_info fields
+    private Integer accountDivideDay;
+    private String anchorTitle;
+    private String authorList; // JSON string
+    private Integer authorScope;
+    private String authorTaskName;
+    private Integer budget;
+    private String commissionInfo; // JSON string
+    private Integer commissionRate;
+    private Integer commissionType;
+    private String demandDesc;
+    private Long endTime;
+    private Integer maxUploadItemCnt;
+    private String microAppId;
+    private Integer omTaskStatus;
+    private String omTaskTag; // JSON string (array)
+    private String participateAuthorRange; // JSON string
+    private Integer providerScope;
+    private Integer sampleDelivery;
+    private String settlementInfo; // JSON string
+    private String startPage;
+    private Long startTime;
+    private String taskHeadImage;
+    private String taskIcon;
+
+    // demand_info fields
+    private String demandName;
+    private String attachments; // JSON string
+}

+ 2 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/AdminAdvertiserListMapper.java

@@ -12,4 +12,6 @@ public interface AdminAdvertiserListMapper {
     List<JSONObject> getAdvertiserInfos();
 
     void batchUpdateAdvertiserName(@Param("infos") List<JSONObject> infos);
+
+    List<JSONObject> getAdvertiserInfosByAdminIds();
 }

+ 28 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/BytedanceXingTuMapper.java

@@ -0,0 +1,28 @@
+package cn.com.ctop.job.bytedance.data.mapper;
+
+
+import cn.com.ctop.job.bytedance.data.entity.BytedanceXingTuReport;
+import cn.com.ctop.job.bytedance.data.entity.BytedanceXingTuReportDaily;
+import cn.com.ctop.job.bytedance.data.entity.BytedanceXingTuTask;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface BytedanceXingTuMapper {
+    List<JSONObject> queryXingTuAccount(@Param("advertiserId") Long advertiserId);
+
+    List<JSONObject> queryXingTuActiveTask(@Param("advertiserId") Long advertiserId);
+
+    List<JSONObject> queryXingTuReportTask(@Param("advertiserId") Long advertiserId);
+
+    List<JSONObject> queryXingTuRetryJob();
+
+    void insertTaskId(List<BytedanceXingTuTask> tasks);
+
+    void updateTaskInfo(BytedanceXingTuTask task);
+
+    void insertReport(List<BytedanceXingTuReport> reports);
+
+    void insertReportDaily(List<BytedanceXingTuReportDaily> dailyReports);
+}

+ 13 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/xml/AdminAdvertiserListMapper.xml

@@ -39,4 +39,17 @@
         WHERE t1.media_type = 1
           AND t1.advertiser_name != t2.advertiser_name
     </select>
+    <select id="getAdvertiserInfosByAdminIds" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT *
+        FROM (SELECT t1.advertiser_id AS 'advertiserId', t3.access_token AS 'accessToken'
+              FROM (SELECT advertiser_id
+                    FROM media_api.bytedance_advertiser_report_hour
+                    WHERE stat_time_day >= 20250601
+                      AND stat_time_day &lt;= 20250603
+                    GROUP BY advertiser_id) t1
+                       LEFT JOIN deepthink.bytedance_advertiser_list t2 ON t1.advertiser_id = t2.advertiser_id
+                       LEFT JOIN deepthink.bytedance_auth_list t3 ON t2.admin_advertiser_id = t3.admin_advertiser_id) t
+        WHERE t.advertiserId IS NOT NULL
+
+    </select>
 </mapper>

+ 8 - 4
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/xml/BytedanceAccountReportMapper.xml

@@ -28,7 +28,8 @@
         attribution_billing_game_in_app_ltv_1day,
         attribution_micro_game_0d_ltv,
         attribution_micro_game_3d_ltv,
-        attribution_micro_game_7d_ltv
+        attribution_micro_game_7d_ltv,
+        stat_micro_game_0d_amount
         )
         values
         <foreach collection="list" item="item" separator=",">
@@ -57,7 +58,8 @@
             #{item.attributionBillingGameInAppLtv1day},
             #{item.attributionMicroGame0dLtv},
             #{item.attributionMicroGame3dLtv},
-            #{item.attributionMicroGame7dLtv}
+            #{item.attributionMicroGame7dLtv},
+            #{item.statMicroGame0dAmount}
             )
         </foreach>
     </insert>
@@ -86,7 +88,8 @@
         attribution_billing_game_in_app_ltv_1day,
         attribution_micro_game_0d_ltv,
         attribution_micro_game_3d_ltv,
-        attribution_micro_game_7d_ltv
+        attribution_micro_game_7d_ltv,
+        stat_micro_game_0d_amount
         )
         values
         <foreach collection="list" item="item" separator=",">
@@ -114,7 +117,8 @@
             #{item.attributionBillingGameInAppLtv1day},
             #{item.attributionMicroGame0dLtv},
             #{item.attributionMicroGame3dLtv},
-            #{item.attributionMicroGame7dLtv}
+            #{item.attributionMicroGame7dLtv},
+            #{item.statMicroGame0dAmount}
             )
         </foreach>
 

+ 8 - 5
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/xml/BytedancePromoterReportMapper.xml

@@ -63,8 +63,8 @@
         attribution_billing_game_in_app_ltv_1day,
         attribution_micro_game_0d_ltv,
         attribution_micro_game_3d_ltv,
-        attribution_micro_game_7d_ltv
-
+        attribution_micro_game_7d_ltv,
+        stat_micro_game_0d_amount
         )
         values
         <foreach collection="list" item="item" separator=",">
@@ -97,7 +97,8 @@
             #{item.attributionBillingGameInAppLtv1day},
             #{item.attributionMicroGame0dLtv},
             #{item.attributionMicroGame3dLtv},
-            #{item.attributionMicroGame7dLtv}
+            #{item.attributionMicroGame7dLtv},
+            #{item.statMicroGame0dAmount}
             )
         </foreach>
     </insert>
@@ -132,7 +133,8 @@
         attribution_billing_game_in_app_ltv_1day,
         attribution_micro_game_0d_ltv,
         attribution_micro_game_3d_ltv,
-        attribution_micro_game_7d_ltv
+        attribution_micro_game_7d_ltv,
+        stat_micro_game_0d_amount
         )
         values
         <foreach collection="list" item="item" separator=",">
@@ -164,7 +166,8 @@
             #{item.attributionBillingGameInAppLtv1day},
             #{item.attributionMicroGame0dLtv},
             #{item.attributionMicroGame3dLtv},
-            #{item.attributionMicroGame7dLtv}
+            #{item.attributionMicroGame7dLtv},
+            #{item.statMicroGame0dAmount}
             )
         </foreach>
     </insert>

+ 138 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/xml/BytedanceXingTuMapper.xml

@@ -0,0 +1,138 @@
+<?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="cn.com.ctop.job.bytedance.data.mapper.BytedanceXingTuMapper">
+    <insert id="insertTaskId" parameterType="java.util.List">
+        INSERT ignore INTO media_api.bytedance_xingtu_task_list (challenge_task_id,advertiser_id)
+        VALUES
+        <foreach collection="list" item="item" separator=",">
+            (#{item.challengeTaskId},#{item.advertiserId})
+        </foreach>
+    </insert>
+
+    <insert id="insertReport"  parameterType="java.util.List">
+        replace INTO media_api.bytedance_xingtu_task_report (
+        challenge_task_id,advertiser_id,
+        android_activate_cnt, author_id, author_nickname, comment_cnt, component_click_cnt,
+        est_ad_cost_value, est_ad_cost_time, est_sales_value, est_sales_time,
+        iaa_cost_hour, iap_cost_hour, ios_activate_cnt, item_id,
+        like_cnt, link, play_value, play_time, play_vv, promote_cnt,
+        provider_id, release_time, relevance_audit_result, reward_amount, reward_level,
+        settle_ad_share_value, settle_ad_share_time, settle_cps_value, settle_cps_time,
+        share_cnt, title, uid, valid_like_cnt, valid_play_vv
+        )
+        VALUES
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.challengeTaskId}, #{item.advertiserId},
+            #{item.androidActivateCnt}, #{item.authorId}, #{item.authorNickname},
+            #{item.commentCnt}, #{item.componentClickCnt},
+            #{item.estAdCostValue}, #{item.estAdCostTime},
+            #{item.estSalesValue}, #{item.estSalesTime},
+            #{item.iaaCostHour}, #{item.iapCostHour}, #{item.iosActivateCnt}, #{item.itemId},
+            #{item.likeCnt}, #{item.link}, #{item.playValue}, #{item.playTime}, #{item.playVv},
+            #{item.promoteCnt}, #{item.providerId}, #{item.releaseTime}, #{item.relevanceAuditResult},
+            #{item.rewardAmount}, #{item.rewardLevel},
+            #{item.settleAdShareValue}, #{item.settleAdShareTime},
+            #{item.settleCpsValue}, #{item.settleCpsTime},
+            #{item.shareCnt}, #{item.title}, #{item.uid},
+            #{item.validLikeCnt}, #{item.validPlayVv}
+            )
+        </foreach>
+    </insert>
+
+    <insert id="insertReportDaily" parameterType="java.util.List">
+        replace INTO media_api.bytedance_xingtu_task_report_daily (
+        challenge_task_id,advertiser_id,author_id,
+        item_id, p_date, est_sales, settle_cps, est_ad_cost, settle_ad_share
+        )
+        VALUES
+        <foreach collection="list" item="daily" separator=",">
+            (
+            #{daily.challengeTaskId}, #{daily.advertiserId}, #{daily.authorId},
+            #{daily.itemId}, #{daily.pDate}, #{daily.estSales},
+            #{daily.settleCps}, #{daily.estAdCost}, #{daily.settleAdShare}
+            )
+        </foreach>
+    </insert>
+
+    <update id="updateTaskInfo" parameterType="cn.com.ctop.job.bytedance.data.entity.BytedanceXingTuTask">
+        UPDATE media_api.bytedance_xingtu_task_list
+        <set>
+            <if test="accountDivideDay != null">account_divide_day = #{accountDivideDay},</if>
+            <if test="anchorTitle != null">anchor_title = #{anchorTitle},</if>
+            <if test="authorList != null">author_list = #{authorList},</if>
+            <if test="authorScope != null">author_scope = #{authorScope},</if>
+            <if test="authorTaskName != null">author_task_name = #{authorTaskName},</if>
+            <if test="budget != null">budget = #{budget},</if>
+            <if test="commissionInfo != null">commission_info = #{commissionInfo},</if>
+            <if test="commissionRate != null">commission_rate = #{commissionRate},</if>
+            <if test="commissionType != null">commission_type = #{commissionType},</if>
+            <if test="demandDesc != null">demand_desc = #{demandDesc},</if>
+            <if test="endTime != null">end_time = #{endTime},</if>
+            <if test="maxUploadItemCnt != null">max_upload_item_cnt = #{maxUploadItemCnt},</if>
+            <if test="microAppId != null">micro_app_id = #{microAppId},</if>
+            <if test="omTaskStatus != null">om_task_status = #{omTaskStatus},</if>
+            <if test="omTaskTag != null">om_task_tag = #{omTaskTag},</if>
+            <if test="participateAuthorRange != null">participate_author_range = #{participateAuthorRange},</if>
+            <if test="providerScope != null">provider_scope = #{providerScope},</if>
+            <if test="sampleDelivery != null">sample_delivery = #{sampleDelivery},</if>
+            <if test="settlementInfo != null">settlement_info = #{settlementInfo},</if>
+            <if test="startPage != null">start_page = #{startPage},</if>
+            <if test="startTime != null">start_time = #{startTime},</if>
+            <if test="taskHeadImage != null">task_head_image = #{taskHeadImage},</if>
+            <if test="taskIcon != null">task_icon = #{taskIcon},</if>
+            <if test="demandName != null">demand_name = #{demandName},</if>
+            <if test="attachments != null">attachments = #{attachments},</if>
+        </set>
+        WHERE challenge_task_id = #{challengeTaskId}
+        and advertiser_id = #{advertiserId}
+    </update>
+
+    <select id="queryXingTuAccount" resultType="com.alibaba.fastjson.JSONObject">
+        select x.advertiser_id, access_token
+        from deepthink.bytedance_xingtu_advertiser_list x
+        join deepthink.bytedance_auth_list a on x.admin_advertiser_id = a.admin_advertiser_id
+        <if test="advertiserId != null">
+            where x.advertiser_id = ${advertiserId}
+        </if>
+    </select>
+
+    <select id="queryXingTuActiveTask" resultType="com.alibaba.fastjson.JSONObject">
+        select t.advertiser_id,challenge_task_id task_id,access_token
+        from media_api.bytedance_xingtu_task_list t
+        join deepthink.bytedance_xingtu_advertiser_list x
+        on t.advertiser_id = x.advertiser_id
+        join deepthink.bytedance_auth_list a
+        on x.admin_advertiser_id = a.admin_advertiser_id
+        where (t.om_task_status is null or t.om_task_status not in (6,7,8))
+        <if test="advertiserId != null">
+            and t.advertiser_id = ${advertiserId}
+        </if>
+    </select>
+
+    <select id="queryXingTuReportTask" resultType="com.alibaba.fastjson.JSONObject">
+        select t.advertiser_id,challenge_task_id task_id,access_token
+        from media_api.bytedance_xingtu_task_list t
+        join deepthink.bytedance_xingtu_advertiser_list x
+        on t.advertiser_id = x.advertiser_id
+        join deepthink.bytedance_auth_list a
+        on x.admin_advertiser_id = a.admin_advertiser_id
+        where (t.om_task_status not in (1,2,4) or t.om_task_status is null)
+        and (t.end_time is null or t.end_time >= unix_timestamp(date_add(now(),Interval -65 day)))
+        <if test="advertiserId != null">
+            and t.advertiser_id = ${advertiserId}
+        </if>
+    </select>
+
+
+    <select id="queryXingTuRetryJob" resultType="com.alibaba.fastjson.JSONObject">
+        select is_send AS 'isSend', id AS 'id', start_date AS 'startDate', end_date AS 'endDate',l.msg,
+                l.advertiser_id AS 'advertiserId',data_dimension AS 'dataDimension', data_type AS 'dataType',access_token AS 'accessToken'
+        from media_api.bytedance_error_log l
+         join deepthink.bytedance_xingtu_advertiser_list x
+              on l.advertiser_id = x.advertiser_id
+         join deepthink.bytedance_auth_list a
+              on x.admin_advertiser_id = a.admin_advertiser_id
+        where data_dimension like 'xingtu_task_%'
+    </select>
+</mapper>

+ 2 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IAdminAdvertiserListService.java

@@ -12,4 +12,6 @@ public interface IAdminAdvertiserListService {
     List<JSONObject> getAdvertiserInfos();
 
     void batchUpdateAdvertiserName(List<JSONObject> infos);
+
+    List<JSONObject> getAdvertiserInfosByAdminIds();
 }

+ 16 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IBytedanceXingTuService.java

@@ -0,0 +1,16 @@
+package cn.com.ctop.job.bytedance.data.service;
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.List;
+
+public interface IBytedanceXingTuService {
+    List<JSONObject> getXingTuAccount(Long advertiserId);
+    List<JSONObject> getXingTuActiveTask(Long advertiserId);
+    List<JSONObject> getXingTuReportTask(Long advertiserId);
+    List<JSONObject> getXingTuRetryJob();
+    void getXingTuTaskList(Long advertiserId, String accessToken, String startDate, String endDate, Integer page,
+                           Long errorId, Integer isLog, Integer isSend);
+    void getXingTuTaskInfo(Long advertiserId, Long taskId, String accessToken, Long errorId, Integer isLog, Integer isSend);
+    void getXingTuTaskReport(Long advertiserId, Long taskId, String accessToken, Integer page, Long errorId, Integer isLog, Integer isSend);
+}

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

@@ -111,6 +111,11 @@ public class AdminAdvertiserListServiceImpl implements IAdminAdvertiserListServi
         adminAdvertiserListMapper.batchUpdateAdvertiserName(infos);
     }
 
+    @Override
+    public List<JSONObject> getAdvertiserInfosByAdminIds() {
+        return adminAdvertiserListMapper.getAdvertiserInfosByAdminIds();
+    }
+
     // 分页结果包装类
     static class PageResult {
         private final int pageNumber;

+ 4 - 1
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceCdpProjectServiceImpl.java

@@ -173,7 +173,10 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
                 //不传默认返回不限(不含已删除)
                 filtering.put("status_first", "PROJECT_STATUS_DELETE");
             }
-            filtering.put("project_modify_time", date);
+            if(!Check.isNull(date)){
+                filtering.put("project_modify_time", date);
+            }
+
             params.put("filtering", filtering);
             params.put("page", page);
             params.put("page_size", 100);//最大100

+ 306 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceXingTuServiceImpl.java

@@ -0,0 +1,306 @@
+package cn.com.ctop.job.bytedance.data.service.impl;
+
+import cn.com.ctop.job.bytedance.data.entity.BytedanceErrorLog;
+import cn.com.ctop.job.bytedance.data.entity.BytedanceXingTuReport;
+import cn.com.ctop.job.bytedance.data.entity.BytedanceXingTuReportDaily;
+import cn.com.ctop.job.bytedance.data.entity.BytedanceXingTuTask;
+import cn.com.ctop.job.bytedance.data.mapper.BytedancePromoterReportMapper;
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceXingTuMapper;
+import cn.com.ctop.job.bytedance.data.service.IBytedanceXingTuService;
+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.DateUtils;
+import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * https://bytedance.larkoffice.com/docx/Jr8bdA6yvocOqRxRL1LcBDi8nJb
+ */
+@Service
+@Slf4j
+public class BytedanceXingTuServiceImpl implements IBytedanceXingTuService {
+    @Autowired
+    private BytedanceXingTuMapper bytedanceXingTuMapper;
+
+    @Autowired
+    private BytedancePromoterReportMapper promoterReportMapper;
+
+    @Override
+    public List<JSONObject> getXingTuAccount(Long advertiserId) {
+        return bytedanceXingTuMapper.queryXingTuAccount(advertiserId);
+    }
+
+    public List<JSONObject> getXingTuActiveTask(Long advertiserId) {
+        return bytedanceXingTuMapper.queryXingTuActiveTask(advertiserId);
+    }
+
+    public List<JSONObject> getXingTuReportTask(Long advertiserId) {
+        return bytedanceXingTuMapper.queryXingTuReportTask(advertiserId);
+    }
+
+    public List<JSONObject> getXingTuRetryJob() {
+        return bytedanceXingTuMapper.queryXingTuRetryJob();
+    }
+
+    public void getXingTuTaskList(Long advertiserId, String accessToken, String startDate, String endDate, Integer page,
+                                  Long errorId, Integer isLog, Integer isSend) {
+        try {
+            String url = "https://api.oceanengine.com/open_api/2/star/demand/om_get_demand_list/";
+            Map<String, Object> paramsMap = new HashMap<>();
+            paramsMap.put("star_id", advertiserId);
+            paramsMap.put("page_no", page);
+            int pageSize = 100;
+            paramsMap.put("page_size", pageSize);
+            Long startT = DateUtils.getTimestampFormat("yyyy-MM-dd HH:mm:ss", startDate + " 00:00:00");
+            Long endT = DateUtils.getTimestampFormat("yyyy-MM-dd HH:mm:ss", endDate + " 23:59:59");
+            paramsMap.put("create_start_time", startT);
+            paramsMap.put("create_end_time", endT);
+            Map<String, String> headers = new HashMap<>();
+            headers.put("Access-Token", accessToken);
+            headers.put("Content-Type", "application/json");
+            String s = HttpUtils.httpGet(url, paramsMap, headers);
+            JSONObject result = JSONObject.parseObject(s);
+            if (Check.isNull(result)) {
+                log.info("账户id:{},星图任务列表请求结果返回为空", advertiserId);
+                insertErrorLog(isLog, advertiserId, startDate, endDate, "xingtu_task_list", "请求结果返回为空");
+                return;
+            }
+            List<BytedanceXingTuTask> tasks = new ArrayList<>();
+            Integer code = result.getInteger("code");
+            boolean hasMore = false;
+            if (code == 0) {
+                JSONObject data = result.getJSONObject("data");
+                if (!Check.isNull(data)) {
+                    JSONArray rows = data.getJSONArray("demands");
+                    if (!Check.isNull(rows)) {
+                        hasMore = rows.size() == pageSize;
+                        for (int i = 0; i < rows.size(); i++) {
+                            JSONObject rowJson = rows.getJSONObject(i);
+                            Long demandId = rowJson.getLong("demand_id");
+                            BytedanceXingTuTask task = new BytedanceXingTuTask();
+                            task.setChallengeTaskId(demandId);
+                            task.setAdvertiserId(advertiserId);
+                            tasks.add(task);
+                        }
+                    }
+                }
+            } else {
+                log.info("账户id:{},日期:{}星图任务列表请求结果失败,返回数据:{}", advertiserId, startDate, result);
+                insertErrorLog(isLog, advertiserId, startDate, endDate, "xingtu_task_list", result.getString("message"));
+                return;
+            }
+            if (!Check.isNull(tasks)) {
+                bytedanceXingTuMapper.insertTaskId(tasks);
+                log.info("账户ID:{},星图任务列表请求成功,开始日期:{},结束日期:{},page:{}", advertiserId, startDate, endDate, page);
+            }
+            if (hasMore) {
+                getXingTuTaskList(advertiserId, accessToken, startDate, endDate, page + 1, errorId, isLog, isSend);
+            } else {
+                log.info("账户ID:{},日期:{}~{},星图任务列表请求成功", advertiserId, startDate, endDate);
+                if (errorId != null) {
+                    promoterReportMapper.deleteInfoByErrorId(errorId);
+                }
+                if (isSend != null && 1 == isSend) {
+                    AlertUtils.sendMessage(advertiserId, startDate, endDate, 1, "xingtu_task_list", 1, null);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public void getXingTuTaskInfo(Long advertiserId, Long taskId, String accessToken, Long errorId, Integer isLog, Integer isSend) {
+        try {
+            String url = "https://api.oceanengine.com/open_api/2/star/demand/om_get_challenge/";
+            Map<String, Object> paramsMap = new HashMap<>();
+            paramsMap.put("star_id", advertiserId);
+            paramsMap.put("challenge_task_id", taskId);
+            Map<String, String> headers = new HashMap<>();
+            headers.put("Access-Token", accessToken);
+            headers.put("Content-Type", "application/json");
+            String s = HttpUtils.httpGet(url, paramsMap, headers);
+            JSONObject result = JSONObject.parseObject(s);
+            if (Check.isNull(result)) {
+                log.info("账户id:{} {},星图任务详情请求结果返回为空", advertiserId, taskId);
+                insertErrorLog(isLog, advertiserId, DateUtils.getNowDate("yyyy-MM-dd"), DateUtils.getNowDate("yyyy-MM-dd"), "xingtu_task_info",
+                        new JSONObject().fluentPut("msg", "请求结果返回为空").fluentPut("taskId", taskId).toJSONString());
+                return;
+            }
+            Integer code = result.getInteger("code");
+            if (code == 0) {
+                JSONObject data = result.getJSONObject("data");
+                if (!Check.isNull(data)) {
+                    JSONObject taskInfo = data.getJSONObject("task_info");
+                    if (!Check.isNull(taskInfo)) {
+                        JSONObject challengeInfo = taskInfo.getJSONObject("challenge_info");
+                        JSONObject demandInfo = taskInfo.getJSONObject("demand_info");
+                        String challengeTaskId = taskInfo.getString("challenge_task_id");
+                        JSONObject taskJson = new JSONObject();
+                        taskJson.put("challenge_task_id", challengeTaskId);
+                        taskJson.put("advertiser_id", advertiserId);
+                        taskJson.putAll(challengeInfo);
+                        taskJson.putAll(demandInfo);
+                        BytedanceXingTuTask task = taskJson.toJavaObject(BytedanceXingTuTask.class);
+                        bytedanceXingTuMapper.updateTaskInfo(task);
+                    }
+                }
+            } else {
+                log.info("账户id:{} {},星图任务详情请求结果失败,返回数据:{}", advertiserId, taskId, result);
+                insertErrorLog(isLog, advertiserId, DateUtils.getNowDate("yyyy-MM-dd"), DateUtils.getNowDate("yyyy-MM-dd"), "xingtu_task_info",
+                        new JSONObject().fluentPut("msg", result.getString("message")).fluentPut("taskId", taskId).toJSONString()
+                );
+                return;
+            }
+
+            log.info("账户ID:{} {},星图任务详情请求成功", advertiserId, taskId);
+            if (errorId != null) {
+                promoterReportMapper.deleteInfoByErrorId(errorId);
+            }
+            if (isSend != null && 1 == isSend) {
+                AlertUtils.sendMessage(advertiserId, DateUtils.getNowDate("yyyy-MM-dd"), DateUtils.getNowDate("yyyy-MM-dd"), 1, "xingtu_task_info", 1, null);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    public void getXingTuTaskReport(Long advertiserId, Long taskId, String accessToken, Integer page, Long errorId, Integer isLog, Integer isSend) {
+        try {
+            String url = "https://api.oceanengine.com/open_api/2/star/demand/om_get_challenge_items_data/";
+            Map<String, Object> paramsMap = new HashMap<>();
+            paramsMap.put("star_id", advertiserId);
+            paramsMap.put("challenge_task_id", taskId);
+            paramsMap.put("page", page);
+            int limit = 30;
+            paramsMap.put("limit", limit);
+            Map<String, String> headers = new HashMap<>();
+            headers.put("Access-Token", accessToken);
+            headers.put("Content-Type", "application/json");
+            String s = HttpUtils.httpGet(url, paramsMap, headers);
+            JSONObject result = JSONObject.parseObject(s);
+            if (Check.isNull(result)) {
+                log.info("账户id:{} {},星图任务结算数据请求结果返回为空", advertiserId, taskId);
+                insertErrorLog(isLog, advertiserId, DateUtils.getNowDate("yyyy-MM-dd"), DateUtils.getNowDate("yyyy-MM-dd"), "xingtu_task_report",
+                        new JSONObject().fluentPut("msg", "请求结果返回为空").fluentPut("taskId", taskId).toJSONString());
+                return;
+            }
+            Integer code = result.getInteger("code");
+            boolean hasMore = false;
+            List<BytedanceXingTuReport> reports = new ArrayList<>();
+            List<BytedanceXingTuReportDaily> dailyReports = new ArrayList<>();
+            if (code == 0) {
+                JSONObject data = result.getJSONObject("data");
+                if (!Check.isNull(data)) {
+                    JSONArray dataList = data.getJSONArray("data_list");
+                    JSONObject pageInfo = data.getJSONObject("page_info");
+                    if (!Check.isNull(pageInfo)) {
+                        hasMore = pageInfo.getBoolean("has_more");
+                    }
+                    if (!Check.isNull(dataList)) {
+                        for (Object o : dataList) {
+                            JSONObject item = (JSONObject) o;
+                            item.put("challenge_task_id", taskId);
+                            item.put("advertiser_id", advertiserId);
+                            BytedanceXingTuReport report = item.toJavaObject(BytedanceXingTuReport.class);
+                            JSONObject estAdCost = item.getJSONObject("est_ad_cost");
+                            if (!Check.isNull(estAdCost)) {
+                                Long value = estAdCost.getLong("value");
+                                Long time = estAdCost.getLong("time");
+                                report.setEstAdCostValue(value);
+                                report.setEstAdCostTime(time);
+                            }
+                            JSONObject estSales = item.getJSONObject("est_sales");
+                            if (!Check.isNull(estSales)) {
+                                Long value = estSales.getLong("value");
+                                Long time = estSales.getLong("time");
+                                report.setEstSalesValue(value);
+                                report.setEstSalesTime(time);
+                            }
+                            JSONObject play = item.getJSONObject("play");
+                            if (!Check.isNull(play)) {
+                                Long value = play.getLong("value");
+                                Long time = play.getLong("time");
+                                report.setPlayValue(value);
+                                report.setPlayTime(time);
+                            }
+                            JSONObject settleAdShare = item.getJSONObject("settle_ad_share");
+                            if (!Check.isNull(settleAdShare)) {
+                                Long value = settleAdShare.getLong("value");
+                                Long time = settleAdShare.getLong("time");
+                                report.setSettleAdShareValue(value);
+                                report.setSettleAdShareTime(time);
+                            }
+                            JSONObject settleCps = item.getJSONObject("settle_cps");
+                            if (!Check.isNull(settleCps)) {
+                                Long value = settleCps.getLong("value");
+                                Long time = settleCps.getLong("time");
+                                report.setSettleCpsValue(value);
+                                report.setSettleCpsTime(time);
+                            }
+                            List<BytedanceXingTuReportDaily> itemInfoDailyList = report.getItemInfoDailyList();
+                            if (!Check.isNull(itemInfoDailyList)) {
+                                itemInfoDailyList.forEach(daily -> {
+                                    daily.setAdvertiserId(advertiserId);
+                                    daily.setChallengeTaskId(taskId);
+                                    daily.setAuthorId(report.getAuthorId());
+                                    daily.setItemId(report.getItemId());
+                                });
+                                dailyReports.addAll(itemInfoDailyList);
+                            }
+                            reports.add(report);
+                        }
+                    }
+                }
+            } else {
+                log.info("账户id:{} {},星图任务结算数据请求结果失败,返回数据:{}", advertiserId, taskId, result);
+                insertErrorLog(isLog, advertiserId, DateUtils.getNowDate("yyyy-MM-dd"), DateUtils.getNowDate("yyyy-MM-dd"), "xingtu_task_report",
+                        new JSONObject().fluentPut("msg", result.getString("message")).fluentPut("taskId", taskId).toJSONString()
+                );
+                return;
+            }
+
+            if (!Check.isNull(reports)) {
+                bytedanceXingTuMapper.insertReport(reports);
+            }
+            if (!Check.isNull(dailyReports)) {
+                bytedanceXingTuMapper.insertReportDaily(dailyReports);
+            }
+
+            if (hasMore) {
+                getXingTuTaskReport(advertiserId, taskId, accessToken, page + 1, errorId, isLog, isSend);
+            }
+
+            log.info("账户ID:{} {},星图任务结算数据请求成功", advertiserId, taskId);
+            if (errorId != null) {
+                promoterReportMapper.deleteInfoByErrorId(errorId);
+            }
+            if (isSend != null && 1 == isSend) {
+                AlertUtils.sendMessage(advertiserId, DateUtils.getNowDate("yyyy-MM-dd"), DateUtils.getNowDate("yyyy-MM-dd"), 1, "xingtu_task_report", 1, null);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    private void insertErrorLog(Integer isLog, Long advertiserId, String startDate, String endDate, String dataDimension, String msg) {
+        if (isLog != null && 1 == isLog) {
+            BytedanceErrorLog errorInfo = new BytedanceErrorLog();
+            errorInfo.setAdvertiserId(advertiserId);
+            errorInfo.setStartDate(startDate);
+            errorInfo.setEndDate(endDate);
+            errorInfo.setMsg(msg);
+            errorInfo.setDataDimension(dataDimension);
+            errorInfo.setDataType("daily");
+            promoterReportMapper.replaceErrorInfo(errorInfo);
+        }
+    }
+}

+ 1 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/utils/FieldsConfig.java

@@ -67,6 +67,7 @@ public class FieldsConfig {
         metricslds.add("attribution_micro_game_0d_ltv");
         metricslds.add("attribution_micro_game_3d_ltv");
         metricslds.add("attribution_micro_game_7d_ltv");
+        metricslds.add("stat_micro_game_0d_amount");
         return metricslds;
 
     }

+ 58 - 3
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceReportRetryJob.java

@@ -1,7 +1,6 @@
 package cn.com.ctop.job.bytedance.handler;
 
 
-import cn.com.ctop.job.bytedance.data.service.*;
 import cn.com.ctop.job.bytedance.data.enums.AccountTypeEnum;
 import cn.com.ctop.job.bytedance.data.service.*;
 import cn.com.ctop.job.bytedance.data.utils.Check;
@@ -42,6 +41,9 @@ public class BytedanceReportRetryJob {
     @Autowired
     private IByteDanceFlowDetailsReportService byteDanceFlowDetailsReportService;
 
+    @Autowired
+    private IBytedanceXingTuService bytedanceXingTuService;
+
 
     private static ExecutorService hourAccountRetrExecutorService = Executors.newFixedThreadPool(2);
     private static ExecutorService dailyAccountRetrExecutorService = Executors.newFixedThreadPool(2);
@@ -142,6 +144,7 @@ public class BytedanceReportRetryJob {
 
         List<JSONObject> changDuRetry = channelService.getChangDuRetry();
         if (!Check.isNull(changDuRetry)) {
+            ExecutorService executorService = Executors.newFixedThreadPool(2);
             for (int i = 0; i < changDuRetry.size(); i++) {
                 JSONObject jsonObject = changDuRetry.get(i);
                 Long id = jsonObject.getLong("id");
@@ -155,7 +158,12 @@ public class BytedanceReportRetryJob {
                 String appId = jsonObject.getString("channelAppId");
                 String appName = jsonObject.getString("channelAppName");
                 if ("changdu_order".equals(dataDimension)) {
-                    channelService.getOrderList(startDate, endDate, appId, appName, channelAccountId, secretKey, 1, id, isSend);
+                    executorService.submit(new Runnable() {
+                        @Override
+                        public void run() {
+                            channelService.getOrderList(startDate, endDate, appId, appName, channelAccountId, secretKey, 1, id, isSend);
+                        }
+                    });
                 }
             }
         } else {
@@ -164,6 +172,7 @@ public class BytedanceReportRetryJob {
 
         List<JSONObject> maEcpmRetryJob = miniAppService.getMaEcpmRetryJob();
         if (!Check.isNull(maEcpmRetryJob)) {
+            ExecutorService executorService = Executors.newFixedThreadPool(2);
             for (int i = 0; i < maEcpmRetryJob.size(); i++) {
                 JSONObject jsonObject = maEcpmRetryJob.get(i);
                 Long id = jsonObject.getLong("id");
@@ -173,13 +182,59 @@ public class BytedanceReportRetryJob {
                 Integer isSend = jsonObject.getInteger("isSend");
                 if (dataDimension != null && dataDimension.startsWith("ma_ecpm:")) {
                     String appId = dataDimension.split(":")[1];
-                    miniAppService.getMaEcpm(startDate, endDate, appId, 1, id, isSend);
+                    executorService.submit(new Runnable() {
+                        @Override
+                        public void run() {
+                            miniAppService.getMaEcpm(startDate, endDate, appId, 1, id, isSend);
+                        }
+                    });
                 }
             }
         } else {
             log.info("抖小IAA重试列表为空");
         }
 
+        List<JSONObject> xingTuRetryJob = bytedanceXingTuService.getXingTuRetryJob();
+        if (!Check.isNull(xingTuRetryJob)) {
+            ExecutorService executorService = Executors.newFixedThreadPool(2);
+            for (int i = 0; i < xingTuRetryJob.size(); i++) {
+                JSONObject jsonObject = xingTuRetryJob.get(i);
+                Long id = jsonObject.getLong("id");
+                Long advertiserId = jsonObject.getLong("advertiserId");
+                String startDate = jsonObject.getString("startDate");
+                String endDate = jsonObject.getString("endDate");
+                String dataDimension = jsonObject.getString("dataDimension");
+                Integer isSend = jsonObject.getInteger("isSend");
+                String accessToken = jsonObject.getString("accessToken");
+                Long taskId = jsonObject.getJSONObject("msg").getLong("taskId");
+
+                if ("xingtu_task_list".equalsIgnoreCase(dataDimension)) {
+                    executorService.submit(new Runnable() {
+                        @Override
+                        public void run() {
+                            bytedanceXingTuService.getXingTuTaskList(advertiserId, accessToken, startDate, endDate, 1, id, null, isSend);
+                        }
+                    });
+                } else if ("xingtu_task_info".equalsIgnoreCase(dataDimension)) {
+                    executorService.submit(new Runnable() {
+                        @Override
+                        public void run() {
+                            bytedanceXingTuService.getXingTuTaskInfo(advertiserId, taskId, accessToken, id, null, isSend);
+                        }
+                    });
+                } else if ("xingtu_task_report".equalsIgnoreCase(dataDimension)) {
+                    executorService.submit(new Runnable() {
+                        @Override
+                        public void run() {
+                            bytedanceXingTuService.getXingTuTaskReport(advertiserId, taskId, accessToken, 1, id, null, isSend);
+                        }
+                    });
+                }
+            }
+        } else {
+            log.info("巨量星图重试列表为空");
+        }
+
     }
 
 

+ 73 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceXingTuJob.java

@@ -0,0 +1,73 @@
+package cn.com.ctop.job.bytedance.handler;
+
+
+import cn.com.ctop.job.bytedance.data.service.IBytedanceXingTuService;
+import cn.com.ctop.job.bytedance.data.utils.DateUtils;
+import com.alibaba.fastjson.JSONObject;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+
+@Slf4j
+@Component
+public class BytedanceXingTuJob {
+    @Autowired
+    private IBytedanceXingTuService bytedanceXingTuService;
+
+    @XxlJob("xingTuTaskList")
+    public void taskList() {
+        String startDate = DateUtils.getNowAddDate("yyyy-MM-dd", -1);
+        String endDate = DateUtils.getNowDate("yyyy-MM-dd");
+        List<JSONObject> xingTuAccount = bytedanceXingTuService.getXingTuAccount(null);
+        for (JSONObject jsonObject : xingTuAccount) {
+            Long advId = jsonObject.getLong("advertiser_id");
+            String accessToken = jsonObject.getString("access_token");
+            bytedanceXingTuService.getXingTuTaskList(advId, accessToken, startDate, endDate, 1, null, 1, null);
+        }
+
+    }
+
+    @XxlJob("xingTuTaskInfo")
+    public void taskInfo() {
+        ExecutorService executorService = Executors.newFixedThreadPool(4);
+        List<JSONObject> xingTuTasks = bytedanceXingTuService.getXingTuActiveTask(null);
+        for (JSONObject taskJson : xingTuTasks) {
+            Long advId = taskJson.getLong("advertiser_id");
+            Long taskId = taskJson.getLong("task_id");
+            String accessToken = taskJson.getString("access_token");
+            executorService.submit(new Runnable() {
+                @Override
+                public void run() {
+                    bytedanceXingTuService.getXingTuTaskInfo(advId, taskId, accessToken, null, 1, null);
+                }
+            });
+        }
+
+    }
+
+    @XxlJob("xingTuTaskReport")
+    public void taskReport() {
+        ExecutorService executorService = Executors.newFixedThreadPool(4);
+        List<JSONObject> xingTuTasks = bytedanceXingTuService.getXingTuReportTask(null);
+        for (JSONObject taskJson : xingTuTasks) {
+            Long advId = taskJson.getLong("advertiser_id");
+            Long taskId = taskJson.getLong("task_id");
+            String accessToken = taskJson.getString("access_token");
+            executorService.submit(new Runnable() {
+                @Override
+                public void run() {
+                    bytedanceXingTuService.getXingTuTaskReport(advId, taskId, accessToken, 1, null, 1, null);
+                }
+            });
+        }
+
+    }
+
+
+}