Просмотр исходного кода

Merge branch 'refs/heads/master' into zhaotx

zhaotx 1 год назад
Родитель
Сommit
df972a8597

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

@@ -140,7 +140,7 @@ public class BytedanceController {
     IBytedanceCdpProjectService bytedanceCdpProjectService;
     @GetMapping("/testB")
     public void testB(Long id) {
-        bytedanceCdpProjectService.getByteAppLinkInfo(id);
+        bytedanceCdpProjectService.getAdqCreatives(id, "2025-02-15");
     }
 
 }

+ 6 - 1
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/BytedanceCdpProjectMapper.java

@@ -2,7 +2,6 @@ package cn.com.ctop.job.bytedance.data.mapper;
 
 import cn.com.ctop.job.bytedance.data.entity.BytedanceCdpProject;
 import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -17,6 +16,8 @@ public interface BytedanceCdpProjectMapper {
 
     int replaceBytedanceCdpProjectList(@Param("projectList") List<BytedanceCdpProject> projectList);
 
+    int replaceBytedancePromotionList(@Param("list") JSONArray array);
+
     void insertErrorAdvertiserId(@Param("advertiserId") Long advertiserId, @Param("type") String type);
 
     List<Long> queryAllAdverIdList(@Param("mediaType") String mediaType);
@@ -25,6 +26,8 @@ public interface BytedanceCdpProjectMapper {
 
     List<Long> queryTTErrApps();
 
+    List<Long> queryPageAdvertiserIds();
+
     boolean delErrApps(@Param("type") String type);
 
     boolean delTTErrApps();
@@ -41,6 +44,8 @@ public interface BytedanceCdpProjectMapper {
 
     int replaceAdqDynamicCreateives(@Param("list") JSONArray list, @Param("advertiserId") Long advertiserId);
 
+    int replaceAdqDynamicPages(@Param("list") JSONArray list, @Param("advertiserId") Long advertiserId);
+
     List<Long> queryADQAdverIds(String date);
 
     List<String> queryAppInstanceIdList(@Param("advertiserId") Long advertiserId);

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

@@ -67,6 +67,35 @@
     </insert>
 
 
+
+    <insert id="replaceBytedancePromotionList">
+        replace into media_api.bytedance_promotion_list (
+        advertiser_id,
+        project_id,
+        promotion_id,
+        promotion_name,
+        app_id,
+        params,
+        url,
+        promotion_create_time,
+        promotion_modify_time
+        )
+        values
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.advertiser_id},
+            #{item.project_id},
+            #{item.promotion_id},
+            #{item.promotion_name},
+            #{item.app_id},
+            #{item.params},
+            #{item.url},
+            #{item.promotion_create_time},
+            #{item.promotion_modify_time}
+            )
+        </foreach>
+    </insert>
+
     <insert id="replaceBytedanceByteAppInfo">
         replace into media_api.bytedance_byte_app_info (
         advertiser_id,
@@ -156,8 +185,8 @@
     </insert>
 
     <select id="queryAllAdverIdList" resultType="Long">
-        SELECT DISTINCT advertiser_id
-        FROM media_api.bytedance_byte_app_info
+        SELECT advertiser_id
+        FROM deepthink.bytedance_advertiser_list
     </select>
 
     <select id="queryErrApps" resultType="Long">
@@ -167,6 +196,15 @@
         order by create_time
     </select>
 
+    <select id="queryPageAdvertiserIds" resultType="Long">
+        SELECT DISTINCT advertiser_id
+        FROM media_api.adq_dynamic_createive_list
+        where page_type = 'PAGE_TYPE_WECHAT_CANVAS'
+          and mini_program_id is null
+          and advertiser_id not in (SELECT DISTINCT advertiser_id
+                                    FROM media_api.adq_dynamic_page_list)
+    </select>
+
     <select id="queryTTErrApps" resultType="Long">
         SELECT advertiser_id
         FROM media_api.error_advertiser_tt
@@ -208,7 +246,9 @@
         adgroup_id,
         dynamic_creative_id,
         mini_program_id,
-        page_type
+        page_type,
+        page_id,
+        mini_program_path
         )
         values
         <foreach collection="list" item="item" separator=",">
@@ -217,7 +257,29 @@
             #{item.adgroup_id},
             #{item.dynamic_creative_id},
             #{item.mini_program_id},
-            #{item.page_type}
+            #{item.page_type},
+            #{item.page_id},
+            #{item.mini_program_path}
+            )
+        </foreach>
+    </insert>
+
+    <insert id="replaceAdqDynamicPages">
+        replace into media_api.adq_dynamic_page_list(
+        advertiser_id,
+        page_id,
+        page_type,
+        mini_program_id,
+        mini_program_path
+        )
+        values
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{advertiserId},
+            #{item.page_id},
+            #{item.page_type},
+            #{item.mini_program_id},
+            #{item.mini_program_path}
             )
         </foreach>
     </insert>
@@ -233,5 +295,4 @@
         where advertiser_id = #{advertiserId}
     </select>
 
-
 </mapper>

+ 6 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IBytedanceCdpProjectService.java

@@ -9,6 +9,9 @@ import java.util.List;
  * @date 2025-04-23
  */
 public interface IBytedanceCdpProjectService {
+
+    void getpromotionList(Long advertiserId, String date);
+
     void getProjectList(Long advertiserId, String date);
 
     List<Long> queryAllAdverIdList(String type);
@@ -33,6 +36,9 @@ public interface IBytedanceCdpProjectService {
 
     void getAdqCreatives(Long advertiserId, String date);
 
+    void getAdqWechatPages(Long advertiserId);
+
     List<Long> queryTTErrApps();
 
+    List<Long> queryPageAdvertiserIds();
 }

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

@@ -7,4 +7,6 @@ public interface IDateReportsPushService {
      * 零点15执行的 比上一天多了个描述
      */
     void preSend();
+
+    public void send12hour();
 }

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

@@ -17,7 +17,6 @@ import org.springframework.stereotype.Service;
 
 import java.time.Instant;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -58,6 +57,11 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
     }
 
     @Override
+    public List<Long> queryPageAdvertiserIds() {
+        return bytedanceCdpProjectMapper.queryPageAdvertiserIds();
+    }
+
+    @Override
     public boolean delErrApps(String type) {
         return bytedanceCdpProjectMapper.delErrApps(type);
     }
@@ -73,6 +77,79 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
     }
 
     @Override
+    public void getpromotionList(Long advertiserId, String date) {
+        this.getpromotionListVo(advertiserId, date, 1, 1);
+    }
+
+    private void getpromotionListVo(Long advertiserId, String date, Integer page, int count) {
+        try {
+            log.info("执行id:{}", advertiserId);
+            boolean nextPage = false;
+            String accessToken = tokenMapper.onlyGetToken(advertiserId);
+            if (Check.isNull(accessToken)) {
+                log.error("账户({})查询token失败", advertiserId);
+                return;
+            }
+            Map<String, Object> params = new HashMap<>();
+            params.put("advertiser_id", advertiserId);
+            JSONObject filtering = new JSONObject();
+            filtering.put("promotion_modify_time", date);
+            filtering.put("status_first", "PROMOTION_STATUS_ALL");
+
+            params.put("filtering", filtering);
+            params.put("page", page);
+            params.put("page_size", 20);//最大20
+            String url = "https://api.oceanengine.com/open_api/v3.0/promotion/list/";
+            String results = HttpUtils.httpGet(url, params, HttpUtils.postMHeaders(accessToken));
+            JSONObject obj = JSONObject.parseObject(results);
+            if (!Check.isNull(obj)) {
+                Integer code = obj.getInteger("code");
+                if (code == 0) {
+                    JSONObject data = obj.getJSONObject("data");
+                    Integer totalPage = data.getJSONObject("page_info").getInteger("total_page");
+                    if (totalPage != 0 && totalPage > data.getJSONObject("page_info").getInteger("page")) {
+                        nextPage = true;
+                    }
+                    JSONArray array = data.getJSONArray("list");
+                    for (int i = 0; i < array.size(); i++) {
+                        checkPromotionInfo(array.getJSONObject(i));
+                    }
+
+                    if (!Check.isNull(array))
+                        if (bytedanceCdpProjectMapper.replaceBytedancePromotionList(array) > 0)
+                            log.info("---账户({})广告更新成功", advertiserId);
+                } else {
+                    //40100请求超频
+                    if (40100 == code && count <= 5) {
+                        Thread.sleep(800);
+                        getpromotionListVo(advertiserId, date, page, count + 1);
+                    } else {
+                        log.error("获取广告列表失败(url:{}),入参:{}\n结果:{}", url, JSONObject.toJSONString(params), obj);
+                    }
+                }
+            }
+            if (nextPage) {
+                getpromotionListVo(advertiserId, date, page + 1, 1);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error(e.getMessage());
+        }
+    }
+
+    private void checkPromotionInfo(JSONObject entity) {
+        JSONObject promotionMaterials = entity.getJSONObject("promotion_materials");
+        if (!Check.isNull(promotionMaterials)) {
+            JSONObject miniProgramInfo = promotionMaterials.getJSONObject("mini_program_info");
+            if (!Check.isNull(miniProgramInfo)) {
+                entity.put("params", miniProgramInfo.getString("params"));
+                entity.put("app_id", miniProgramInfo.getString("app_id"));
+                entity.put("url", miniProgramInfo.getString("url"));
+            }
+        }
+    }
+
+    @Override
     public void getProjectList(Long advertiserId, String date) {
         this.getProjectListVo(advertiserId, null, date, 1, 1);
 //        this.getProjectListVo(advertiserId, "del", date, 1, 1);
@@ -140,7 +217,6 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
     public void getByteAppInfo(Long advertiserId) {
         this.getByteAppInfoVo(advertiserId, "CREATE_ONLY", 1, 1);
         this.getByteAppInfoVo(advertiserId, "SHARE_ONLY", 1, 1);
-        this.getByteAppLinkInfo(advertiserId);
     }
 
     private void getByteAppInfoVo(Long advertiserId, String searchType, Integer page, int count) {
@@ -412,6 +488,92 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
         }
     }
 
+    @Override
+    public void getAdqWechatPages(Long advertiserId) {
+        try {
+            String accessToken = tokenMapper.onlyGetADQToken(advertiserId);
+            if (Check.isNull(accessToken)) {
+                log.error("账户({})accessToken is null", advertiserId);
+                return;
+            }
+            this.getAdqWechatPagesVo(advertiserId, accessToken, 1, true, 1);
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error("账户({})获取原生落地页异常", e.getMessage());
+        }
+    }
+
+
+    private void getAdqWechatPagesVo(Long accountId, String accessToken, Integer page, Boolean isDeleted, int count) throws Exception {
+        boolean nextPage = false;
+        JSONObject returnJson = new JSONObject();
+        Map<String, Object> param = new HashMap<>();
+        long timestamp = Instant.now().getEpochSecond();
+        param.put("timestamp", String.valueOf(timestamp));
+        param.put("nonce", RandomStringGenerator.generateRandomString(32));
+        param.put("access_token", accessToken);
+        param.put("account_id", accountId);
+        param.put("page", page);
+        param.put("page_size", 100);
+        JSONArray filtering = new JSONArray();
+        JSONObject greObj = new JSONObject();
+        greObj.put("field", "page_type");
+        greObj.put("operator", "EQUALS");
+        greObj.put("values", "PAGE_TYPE_WECHAT_CANVAS");
+        filtering.add(greObj);
+
+//        param.put("filtering", filtering);
+        String result = HttpUtils.httpGet("https://api.e.qq.com/v3.0/wechat_pages/get", param, new HashMap<>());
+        JSONObject obj = JSONObject.parseObject(result);
+        if (!Check.isNull(obj)) {
+            if (0 == obj.getInteger("code")) {
+                JSONObject data = obj.getJSONObject("data");
+                if (!Check.isNull(data)) {
+                    JSONObject pageInfo = data.getJSONObject("page_info");
+                    Integer totalPage = pageInfo.getInteger("total_page");
+                    if (totalPage != 0 && totalPage > pageInfo.getInteger("page")) {
+                        nextPage = true;
+                    }
+                    JSONArray array = data.getJSONArray("list");
+                    for (int i = 0; i < array.size(); i++) {
+                        JSONObject object = array.getJSONObject(i);
+                        getPageAppId(object);
+                    }
+                    if (!Check.isNull(array))
+                        if (bytedanceCdpProjectMapper.replaceAdqDynamicPages(array, accountId) > 0)
+                            log.info("---账户({})广点通落地页更新成功", accountId);
+                }
+            } else {
+                if (count <= 4) {
+                    Thread.sleep(500);
+                    getAdqWechatPagesVo(accountId, accessToken, page, isDeleted, count + 1);
+                } else {
+                    log.error("账户({})获取动态创意失败,入参:{}\n,结果:{}", accountId, JSONObject.toJSONString(param), obj);
+                }
+            }
+        }
+        if (nextPage) {
+            getAdqWechatPagesVo(accountId, accessToken, page + 1, isDeleted, 1);
+        }
+    }
+
+    private void getPageAppId(JSONObject object) {
+        JSONArray pageElementsSpecList = object.getJSONArray("page_elements_spec_list");
+        if (!Check.isNull(pageElementsSpecList)) {
+            for (int i = 0; i < pageElementsSpecList.size(); i++) {
+                JSONObject obj = pageElementsSpecList.getJSONObject(i);
+                JSONObject buttonSpec = obj.getJSONObject("button_spec");
+                if (buttonSpec != null) {
+                    JSONObject miniProgramSpec = buttonSpec.getJSONObject("mini_program_spec");
+                    if (!Check.isNull(miniProgramSpec)) {
+                        object.put("mini_program_id", miniProgramSpec.getString("mini_program_id"));
+                        object.put("mini_program_path", miniProgramSpec.getString("mini_program_path"));
+                    }
+                }
+            }
+        }
+    }
+
     private void getAppId(JSONObject object) {
         JSONObject creativeComponents = object.getJSONObject("creative_components");
         if (!Check.isNull(creativeComponents)) {
@@ -427,6 +589,7 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
                             JSONObject wechatMiniProgramSpec = pageSpec.getJSONObject("wechat_mini_program_spec");
                             if (!Check.isNull(wechatMiniProgramSpec)) {
                                 object.put("mini_program_id", wechatMiniProgramSpec.getString("mini_program_id"));
+                                object.put("mini_program_path", wechatMiniProgramSpec.getString("mini_program_path"));
                             }
                         }
                     }
@@ -445,6 +608,11 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
                         JSONObject wechatMiniProgramSpec = pageSpec.getJSONObject("wechat_mini_program_spec");
                         if (!Check.isNull(wechatMiniProgramSpec)) {
                             object.put("mini_program_id", wechatMiniProgramSpec.getString("mini_program_id"));
+                            object.put("mini_program_path", wechatMiniProgramSpec.getString("mini_program_path"));
+                        }
+                        JSONObject officialSpec = pageSpec.getJSONObject("wechat_canvas_spec");
+                        if (!Check.isNull(officialSpec)) {
+                            object.put("page_id", officialSpec.getLong("page_id"));
                         }
                     }
                 }
@@ -462,6 +630,11 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
                         JSONObject wechatMiniProgramSpec = pageSpec.getJSONObject("wechat_mini_program_spec");
                         if (!Check.isNull(wechatMiniProgramSpec)) {
                             object.put("mini_program_id", wechatMiniProgramSpec.getString("mini_program_id"));
+                            object.put("mini_program_path", wechatMiniProgramSpec.getString("mini_program_path"));
+                        }
+                        JSONObject officialSpec = pageSpec.getJSONObject("wechat_canvas_spec");
+                        if (!Check.isNull(officialSpec)) {
+                            object.put("page_id", officialSpec.getLong("page_id"));
                         }
                     }
                 }

+ 53 - 16
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/DateReportsPushServiceImpl.java

@@ -35,18 +35,67 @@ public class DateReportsPushServiceImpl implements IDateReportsPushService {
 
     private static final String TEMPLATE_VERSION = "1.0.3";
     private static final String TEMPLATE_ID = "AAqRhJzMBoO0E";
+
+    /**
+     * 10点正式推送
+     */
     @Override
     public void send() {
-        sendParam("");
+        List<String> userIds = Arrays.asList(
+                "44fbaed6" //zhaotx
+//                ,"ebeeced9" //yumeng
+//                ,"265g9ef1" //wangshu
+//                ,"ee518161" //zhaozhicheng
+//                ,"c5f6b59d" //yuyang
+//                ,"d834552b" //hemenghao
+//                ,"a3235a61" //louzijun
+//                ,"58e7a98a"  //xsq
+        );
+        List<String> chatid = Arrays.asList(
+                "oc_275f17aa4bf8fae649ef281a2b9250f6"
+        );
+        sendParam("", userIds, chatid);
+    }
+
+    /**
+     * 12点推送
+     */
+    public void send12hour(){
+        List<String> userIds = Arrays.asList(
+                "44fbaed6" //zhaotx
+//                ,"ebeeced9" //yumeng
+//                ,"265g9ef1" //wangshu
+//                ,"ee518161" //zhaozhicheng
+//                ,"c5f6b59d" //yuyang
+//                ,"d834552b" //hemenghao
+//                ,"a3235a61" //louzijun
+//                ,"58e7a98a"  //xsq
+        );
+        List<String> chatid = Arrays.asList(
+                "oc_275f17aa4bf8fae649ef281a2b9250f6"
+        );
+        sendParam("注:当天ROI数据有微小1%-2%差异,以次日10点推送为准,番茄ROI数据需要次日9点左右获取", userIds, chatid);
     }
 
+    /**
+     * 9点预推送给开发人员
+     */
     @Override
     public void preSend() {
-        sendParam("注:当天ROI数据有微小1%-2%差异,以次日9点推送为准");
+        List<String> userIds = Arrays.asList(
+                "44fbaed6" //zhaotx
+                ,"ebeeced9" //yumeng
+                ,"58e7a98a"  //xsq
+                ,"2ga9669f" //angaoqi
+                ,"43gb7fbc" //huangpingkang
+        );
+        List<String> chatid = Arrays.asList(
+        );
+        sendParam("", userIds, chatid);
     }
 
 
-    private void sendParam(String description){
+    private void sendParam(String description, List<String> userIds, List<String> chatid){
         String token;
         try {
             token = FeishuRobotUtil.getTenantToken(APP_ID, APP_KEY);
@@ -142,23 +191,11 @@ public class DateReportsPushServiceImpl implements IDateReportsPushService {
         template_variable.put("deptRank", deptRank);
         template_variable.put("description", description);
 
-        List<String> userIds = Arrays.asList(
-                "44fbaed6" //zhaotx
-//                ,"ebeeced9" //yumeng
-//                ,"265g9ef1" //wangshu
-//                ,"ee518161" //zhaozhicheng
-//                ,"c5f6b59d" //yuyang
-//                ,"d834552b" //hemenghao
-//                ,"a3235a61" //louzijun
-//                ,"58e7a98a"  //xsq
-        );
+
         for (String userId : userIds) {
             sendToFeishu(token, template_variable, userId);
         }
 
-        List<String> chatid = Arrays.asList(
-                "oc_275f17aa4bf8fae649ef281a2b9250f6"
-        );
         for (String chat : chatid) {
             sendToChatGroup(token, template_variable, chat);
         }

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

@@ -125,7 +125,9 @@ public class TotalRankPushServiceImpl implements ITotalRankPushService {
         sendToFeishu(token, sb.toString(), "59g6d358");//陈秋灵
         sendToFeishu(token, sb.toString(), "13dfc1gg");//刘恩麟
         sendToFeishu(token, sb.toString(), "58e7a98a");//xsq
-        sendToFeishu(token, sb.toString(), "2ga9669f");//xsq
+        sendToFeishu(token, sb.toString(), "2ga9669f");//angaoqi
+        sendToFeishu(token, sb.toString(), "b9e2ac3e");//wangdan
+        sendToFeishu(token, sb.toString(), "bg5dcf61");//wangxuedi
 
     }
 

+ 17 - 10
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceCdpProjectJob.java

@@ -24,21 +24,26 @@ public class BytedanceCdpProjectJob {
     @Autowired
     private IBytedanceCdpProjectService cdpProjectService;
 
+    private static ExecutorService allService = Executors.newFixedThreadPool(6);
     private static ExecutorService allttService = Executors.newFixedThreadPool(2);
     private static ExecutorService allwxService = Executors.newFixedThreadPool(2);
     private static ExecutorService allt2Service = Executors.newFixedThreadPool(2);
 
     private static ExecutorService projectExecutorService = Executors.newFixedThreadPool(3);
+    private static ExecutorService promExecutorService = Executors.newFixedThreadPool(3);
     private static ExecutorService ttAppsExecutorService = Executors.newFixedThreadPool(3);
     private static ExecutorService wxAppsExecutorService = Executors.newFixedThreadPool(3);
     private static ExecutorService createiveAppsExecutorService = Executors.newFixedThreadPool(3);
+    private static ExecutorService pageAppsExecutorService = Executors.newFixedThreadPool(3);
 
     @XxlJob("getAll")
     public void getAll() {
         log.info("[getAll] 任务启动...");
-        List<Long> wxlist = cdpProjectService.queryAllAdverIdList("WECHAT_APP");
-        if (!Check.isNull(wxlist)) {
-            wxlist.forEach(id -> allwxService.submit(() -> cdpProjectService.getByteAppLinkInfo(id)));
+        List<Long> ids = cdpProjectService.queryAllAdverIdList("");
+        if (!Check.isNull(ids)) {
+            log.info("总数:{}", ids.size());
+            ids.forEach(id -> allService.submit(() -> cdpProjectService.getpromotionList(id, null)
+            ));
         }
     }
 
@@ -58,13 +63,6 @@ public class BytedanceCdpProjectJob {
                 log.info("[errAppAgain] ---移除微小失败记录");
             wxlist.forEach(id -> allwxService.submit(() -> cdpProjectService.getWxAppInfo(id)));
         }
-
-        List<Long> tt2list = cdpProjectService.queryTTErrApps();
-        if (!Check.isNull(tt2list)) {
-            if (cdpProjectService.delTTErrApps())
-                log.info("[errAppAgain] ---移除抖小详情失败记录");
-            tt2list.forEach(id -> allt2Service.submit(() -> cdpProjectService.getByteAppLinkInfo(id)));
-        }
     }
 
     @XxlJob("nowProjects")
@@ -76,6 +74,7 @@ public class BytedanceCdpProjectJob {
             List<Long> nowAdIds = cdpProjectService.queryAdvertiserIds("bytedance_advertiser_report_hour", DateUtils.getYYMMDDTime(today));
             if (!Check.isNull(nowAdIds)) {
                 nowAdIds.forEach(id -> projectExecutorService.submit(() -> cdpProjectService.getProjectList(id, today)));
+                nowAdIds.forEach(id -> promExecutorService.submit(() -> cdpProjectService.getpromotionList(id, today)));
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -92,12 +91,14 @@ public class BytedanceCdpProjectJob {
             List<Long> adIds = cdpProjectService.queryAdvertiserIds("bytedance_advertiser_report_daily", DateUtils.getYYMMDDTime(yesterday));
             if (!Check.isNull(adIds)) {
                 adIds.forEach(id -> projectExecutorService.submit(() -> cdpProjectService.getProjectList(id, yesterday)));
+                adIds.forEach(id -> promExecutorService.submit(() -> cdpProjectService.getpromotionList(id, yesterday)));
             }
             //拉取前天数据
             String yesterday2 = DateUtils.getNowAddDate("yyyy-MM-dd", -2);
             List<Long> adIds2 = cdpProjectService.queryAdvertiserIds("bytedance_advertiser_report_daily", DateUtils.getYYMMDDTime(yesterday2));
             if (!Check.isNull(adIds2)) {
                 adIds2.forEach(id -> projectExecutorService.submit(() -> cdpProjectService.getProjectList(id, yesterday2)));
+                adIds2.forEach(id -> promExecutorService.submit(() -> cdpProjectService.getpromotionList(id, yesterday2)));
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -157,6 +158,12 @@ public class BytedanceCdpProjectJob {
             if (!Check.isNull(ids)) {
                 ids.forEach(id -> createiveAppsExecutorService.submit(() -> cdpProjectService.getAdqCreatives(id, today)));
             }
+
+            List<Long> iids = cdpProjectService.queryPageAdvertiserIds();
+            if (!Check.isNull(iids)) {
+                iids.forEach(id -> pageAppsExecutorService.submit(() -> cdpProjectService.getAdqWechatPages(id)));
+            }
+
         } catch (Exception e) {
             e.printStackTrace();
             log.error("[nowDynamicCreateives]" + e.getMessage());

+ 5 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/FeishuPushJob.java

@@ -56,6 +56,11 @@ public class FeishuPushJob {
 
     @XxlJob("preDateReportsPush")
     public void preDataReportsPush(){
+        dateReportsPushService.send12hour();
+    }
+
+    @XxlJob("dataReportsToDeveloper")
+    public void dataReportsToDeveloper(){
         dateReportsPushService.preSend();
     }
 }