Forráskód Böngészése

feat(bytedance): 新增全域项目相关接口及任务调度

- 添加全域项目相关的MyBatis查询接口,包括查询广告主ID和项目ID列表
- 在控制器中调用全域项目列表及其他任务提交,提高并发处理能力
- 新增BytedanceUniProjectJob定时任务,定期获取全域项目日报和物料数据
- 通过线程池异步执行全域项目相关数据抓取任务,提升任务执行效率
- 使用注解指定数据源,确保查询脚本从正确数据库执行
hpk 3 hónapja
szülő
commit
2d9fbe220b

+ 7 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/controller/BytedanceController.java

@@ -287,6 +287,13 @@ public class BytedanceController {
             }
             cdpProjectService.getProjectList(advertiserId, ids, null, null, null, 1);
             cdpProjectService.getProjectList(advertiserId, ids, "del", null, null, 1);
+
+            //全域
+            cdpProjectService.getUniProjectList(advertiserId, ids, null, null, null, null, 1);
+            for (int i = 0; i < ids.size(); i++) {
+                Long projectId = ids.getLong(i);
+                executor10Service1.submit(() -> cdpProjectService.getOcProjectMaterial("OTHER", advertiserId, projectId, null, 1));
+            }
         }
     }
 

+ 8 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/BytedanceCdpProjectMapper.java

@@ -69,4 +69,12 @@ public interface BytedanceCdpProjectMapper {
 
     void insertTTErrorAdvertiserId(Long advertiserId);
 
+
+    @DS("selectdb")
+    List<JSONObject> queryUniCostAdvertiserIds(@Param("startDate") String startDate,@Param("endDate") String endDate);
+    @DS("selectdb")
+    List<JSONObject> queryUniCostProjectIds(@Param("startDate") String startDate,@Param("endDate") String endDate);
+    @DS("selectdb")
+    List<JSONObject> queryUniCostNotListProjectIds(@Param("startDate") String startDate,@Param("endDate") String endDate);
+
 }

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

@@ -492,4 +492,34 @@
         where advertiser_id = #{advertiserId}
     </select>
 
+    <select id="queryUniCostAdvertiserIds" resultType="com.alibaba.fastjson.JSONObject">
+        select r.advertiser_id,c.access_token
+        from media_api.bytedance_uni_project_report_hour r
+        join tidb.deepthink.bytedance_advertiser_list a on r.advertiser_id = a.advertiser_id
+        join tidb.deepthink.bytedance_auth_list c on a.admin_advertiser_id = c.admin_advertiser_id
+        where r.stat_time_day >= ${startDate} and r.stat_time_day &lt;= ${endDate}
+        group by 1,2
+    </select>
+
+    <select id="queryUniCostProjectIds" resultType="com.alibaba.fastjson.JSONObject">
+        select r.advertiser_id,r.cdp_project_id,c.access_token
+        from media_api.bytedance_uni_project_report_hour r
+        join tidb.deepthink.bytedance_advertiser_list a on r.advertiser_id = a.advertiser_id
+        join tidb.deepthink.bytedance_auth_list c on a.admin_advertiser_id = c.admin_advertiser_id
+        where r.stat_time_day >= ${startDate} and r.stat_time_day &lt;= ${endDate}
+        group by 1,2,3
+    </select>
+
+    <select id="queryUniCostNotListProjectIds" resultType="com.alibaba.fastjson.JSONObject">
+        select r.advertiser_id,r.cdp_project_id,c.access_token
+        from media_api.bytedance_uni_project_report_hour r
+        left join media_api.bytedance_uni_project_list l
+        on r.advertiser_id = l.advertiser_id and r.cdp_project_id = l.project_id
+        join tidb.deepthink.bytedance_advertiser_list a on r.advertiser_id = a.advertiser_id
+        join tidb.deepthink.bytedance_auth_list c on a.admin_advertiser_id = c.admin_advertiser_id
+        where r.stat_time_day >= ${startDate} and r.stat_time_day &lt;= ${endDate}
+        and l.project_id is null
+        group by 1,2,3;
+    </select>
+
 </mapper>

+ 79 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceUniProjectJob.java

@@ -0,0 +1,79 @@
+package cn.com.ctop.job.bytedance.handler;
+
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceCdpProjectMapper;
+import cn.com.ctop.job.bytedance.data.service.IBytedanceCdpProjectService;
+import cn.com.ctop.job.bytedance.data.service.ICustomReportService;
+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.HashSet;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * 全域
+ */
+@Slf4j
+@Component
+public class BytedanceUniProjectJob {
+    @Autowired
+    private BytedanceCdpProjectMapper bytedanceCdpProjectMapper;
+    @Autowired
+    private ICustomReportService customReportService;
+    @Autowired
+    private IBytedanceCdpProjectService cdpProjectService;
+    private static final ExecutorService projectExecutorService = Executors.newFixedThreadPool(6);
+
+    @XxlJob("yesterdayUniReportDaily")
+    public void getYesterdayUniReportDaily() {
+        String yesterday = DateUtils.getNowAddDate("yyyy-MM-dd", -1);
+        List<JSONObject> jsonObjects = bytedanceCdpProjectMapper.queryUniCostAdvertiserIds(yesterday.replace("-", ""), yesterday.replace("-", ""));
+        for (JSONObject jsonObject : jsonObjects) {
+            Long advertiserId = jsonObject.getLong("advertiser_id");
+            String access_token = jsonObject.getString("access_token");
+            projectExecutorService.submit(() -> customReportService.getCustomReport("uni_project_daily", advertiserId, access_token, yesterday, yesterday, 1, null));
+            projectExecutorService.submit(() -> customReportService.getCustomReport("uni_project_material_daily", advertiserId, access_token, yesterday, yesterday, 1, null));
+        }
+
+    }
+
+    @XxlJob("yesterdayUniProjectList")
+    public void getYesterdayUniProjectList() {
+        String yesterday = DateUtils.getNowAddDate("yyyy-MM-dd", -1);
+        List<JSONObject> jsonObjects = bytedanceCdpProjectMapper.queryUniCostProjectIds(yesterday.replace("-", ""), yesterday.replace("-", ""));
+        HashSet<Long> submitAdvertiserIds = new HashSet<>();
+        for (JSONObject jsonObject : jsonObjects) {
+            Long advertiserId = jsonObject.getLong("advertiser_id");
+            Long projectId = jsonObject.getLong("cdp_project_id");
+            projectExecutorService.submit(() -> cdpProjectService.getOcProjectMaterial("OTHER", advertiserId, projectId, null, 1));
+            if (!submitAdvertiserIds.contains(advertiserId)) {
+                submitAdvertiserIds.add(advertiserId);
+                projectExecutorService.submit(() -> cdpProjectService.getUniProjectList(advertiserId, null, null, null, null, null, 1));
+            }
+        }
+
+    }
+
+    @XxlJob("todayUniProjectList")
+    public void getTodayUniProjectList() {
+        String today = DateUtils.getToday();
+        List<JSONObject> jsonObjects = bytedanceCdpProjectMapper.queryUniCostProjectIds(today.replace("-", ""), today.replace("-", ""));
+        HashSet<Long> submitAdvertiserIds = new HashSet<>();
+        for (JSONObject jsonObject : jsonObjects) {
+            Long advertiserId = jsonObject.getLong("advertiser_id");
+            Long projectId = jsonObject.getLong("cdp_project_id");
+            projectExecutorService.submit(() -> cdpProjectService.getOcProjectMaterial("OTHER", advertiserId, projectId, null, 1));
+            if (!submitAdvertiserIds.contains(advertiserId)) {
+                submitAdvertiserIds.add(advertiserId);
+                projectExecutorService.submit(() -> cdpProjectService.getUniProjectList(advertiserId, null, null, null, null, null, 1));
+            }
+        }
+
+    }
+
+}