瀏覽代碼

头条报表(bytedance_cdp_project_report_daily bytedance_cdp_project_report_hourly)项目级别

zhaoxian 2 年之前
父節點
當前提交
bf24e1cfaf

+ 2 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/constant/BytedanceConstant.java

@@ -30,5 +30,7 @@ public class BytedanceConstant {
 
     public static final String BYTEDANCE_V3_REPORT_INTEGRATED_GET = "/v3.0/report/custom/get/";
 
+    public static final String BYTEDANCE_V3_CONFIG_ADVERTISER_GET = "/v3.0/report/custom/config/get/";
+
     public static final String BYTEDANCE_V3_PROMOTION_LIST_GET = "/v3.0/promotion/list/";
 }

+ 3 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/constant/CtopAdConstant.java

@@ -28,6 +28,9 @@ public class CtopAdConstant {
     public static final String BYTEDANCE_REPORT_TYPE_DAILY = "STAT_TIME_GRANULARITY_DAILY";
     public static final String BYTEDANCE_REPORT_TYPE_HOURLY = "STAT_TIME_GRANULARITY_HOURLY";
 
+    public static final String BYTEDANCE_REPORT_V3_TYPE_DAILY = "stat_time_day";
+    public static final String BYTEDANCE_REPORT_V3_TYPE_HOURLY = "stat_time_hour";
+
     public static final String UREPORT_PREVIEW_URL_PREFIX = "/jeecg-boot/ureport/designer?_u=mysql:";
 
 

+ 304 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/ByteDanceV3AdvertiserReportDTO.java

@@ -0,0 +1,304 @@
+package cn.com.ctop.job.bytedance.data.entity;
+
+import com.alibaba.fastjson.JSONObject;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+@Data
+public class ByteDanceV3AdvertiserReportDTO implements Serializable {
+
+    private static final long serialVersionUID = 3674054148513217865L;
+
+    private Long advertiserId;
+    private String dimensions;
+    private String metrics;
+    private String startTime;
+    private String endTime;
+    private Integer pageSize;
+    private Integer page;
+    private String orderBy;
+    private String filters;
+
+    public ByteDanceV3AdvertiserReportDTO() {
+    }
+
+    private static final ObjectMapper mapper = new ObjectMapper();
+
+    public ByteDanceV3AdvertiserReportDTO(Long advertiserId, String type, String startTime, String endTime, Integer pageSize) {
+        try {
+            this.advertiserId = advertiserId;
+            List<String> dimensions = new ArrayList<>();
+            dimensions.add(type);
+            /**
+             *stat_time_hour 小时
+             *stat_time_day 每天
+             *cdp_project_id 项目ID
+             *cdp_project_name 项目名称
+             */
+            dimensions.add("cdp_project_id");
+            dimensions.add("cdp_project_name");
+            this.dimensions = mapper.writeValueAsString(dimensions);
+            this.metrics = mapper.writeValueAsString(getParamsFields());
+            this.startTime = startTime;
+            this.endTime = endTime;
+            this.pageSize = pageSize;
+            List<JSONObject> orderBy = new ArrayList<>();
+            JSONObject ord = new JSONObject();
+            ord.put("field", "stat_cost");
+            ord.put("type", "ASC");
+            orderBy.add(ord);
+            this.orderBy = mapper.writeValueAsString(orderBy);
+
+            List<JSONObject> filters = new ArrayList<>();
+            JSONObject filter = new JSONObject();
+            filter.put("field", "stat_cost");
+            filter.put("type", 3);
+            filter.put("operator", 4);
+            filter.put("values", Arrays.asList("0"));
+            filters.add(filter);
+            this.filters = mapper.writeValueAsString(filters);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public static List<String> getParamsFields() {
+        List<String> fields = new ArrayList<>();
+        fields.add("stat_cost");
+        fields.add("show_cnt");
+        fields.add("cpm_platform");
+        fields.add("click_cnt");
+        fields.add("ctr");
+        fields.add("cpc_platform");
+        fields.add("attribution_convert_cnt");
+        fields.add("attribution_convert_cost");
+        fields.add("attribution_conversion_rate");
+        fields.add("attribution_deep_convert_cnt");
+        fields.add("attribution_deep_convert_cost");
+        fields.add("attribution_deep_convert_rate");
+        fields.add("convert_cnt");
+        fields.add("conversion_cost");
+        fields.add("conversion_rate");
+        fields.add("deep_convert_cnt");
+        fields.add("deep_convert_cost");
+        fields.add("deep_convert_rate");
+        fields.add("click_start_cnt");
+        fields.add("click_start_cost");
+        fields.add("click_start_rate");
+        fields.add("download_finish_cnt");
+        fields.add("download_finish_cost");
+        fields.add("download_finish_rate");
+        fields.add("install_finish_cnt");
+        fields.add("install_finish_cost");
+        fields.add("install_finish_rate");
+        fields.add("active");
+        fields.add("active_cost");
+        fields.add("active_rate");
+        fields.add("active_register");
+        fields.add("active_register_cost");
+        fields.add("active_register_rate");
+        fields.add("game_addiction");
+        fields.add("game_addiction_cost");
+        fields.add("game_addiction_rate");
+        fields.add("attribution_next_day_open_cnt");
+        fields.add("attribution_next_day_open_cost");
+        fields.add("attribution_next_day_open_rate");
+        fields.add("next_day_open");
+        fields.add("active_pay");
+        fields.add("active_pay_cost");
+        fields.add("active_pay_rate");
+        fields.add("game_pay_count");
+        fields.add("game_pay_cost");
+        fields.add("attribution_game_pay_7d_count");
+        fields.add("attribution_game_pay_7d_cost");
+        fields.add("attribution_active_pay_7d_per_count");
+        fields.add("in_app_uv");
+        fields.add("in_app_detail_uv");
+        fields.add("in_app_cart");
+        fields.add("in_app_pay");
+        fields.add("in_app_order");
+        fields.add("attribution_retention_2d_cnt");
+        fields.add("attribution_retention_2d_cost");
+        fields.add("attribution_retention_2d_rate");
+        fields.add("attribution_retention_3d_cnt");
+        fields.add("attribution_retention_3d_cost");
+        fields.add("attribution_retention_3d_rate");
+        fields.add("attribution_retention_4d_cnt");
+        fields.add("attribution_retention_4d_cost");
+        fields.add("attribution_retention_4d_rate");
+        fields.add("attribution_retention_5d_cnt");
+        fields.add("attribution_retention_5d_cost");
+        fields.add("attribution_retention_5d_rate");
+        fields.add("attribution_retention_6d_cnt");
+        fields.add("attribution_retention_6d_cost");
+        fields.add("attribution_retention_6d_rate");
+        fields.add("attribution_retention_7d_cnt");
+        fields.add("attribution_retention_7d_cost");
+        fields.add("attribution_retention_7d_rate");
+        fields.add("attribution_retention_7d_sum_cnt");
+        fields.add("attribution_retention_7d_total_cost");
+        fields.add("attribution_billing_game_pay_7d_count");
+        fields.add("attribution_billing_game_pay_7d_cost");
+        fields.add("attribution_billing_game_in_app_ltv_1day");
+        fields.add("attribution_billing_game_in_app_ltv_2days");
+        fields.add("attribution_billing_game_in_app_ltv_3days");
+        fields.add("attribution_billing_game_in_app_ltv_4days");
+        fields.add("attribution_billing_game_in_app_ltv_5days");
+        fields.add("attribution_billing_game_in_app_ltv_6days");
+        fields.add("attribution_billing_game_in_app_ltv_7days");
+        fields.add("attribution_billing_game_in_app_roi_1day");
+        fields.add("attribution_billing_game_in_app_roi_2days");
+        fields.add("attribution_billing_game_in_app_roi_3days");
+        fields.add("attribution_billing_game_in_app_roi_4days");
+        fields.add("attribution_billing_game_in_app_roi_5days");
+        fields.add("attribution_billing_game_in_app_roi_6days");
+        fields.add("attribution_billing_game_in_app_roi_7days");
+        fields.add("attribution_active_pay");
+        fields.add("attribution_active_pay_cost");
+        fields.add("attribution_active_pay_rate");
+        fields.add("stat_pay_amount");
+        fields.add("pay_amount_roi");
+        fields.add("phone");
+        fields.add("form");
+        fields.add("form_submit");
+        fields.add("map");
+        fields.add("button");
+        fields.add("view");
+        fields.add("download_start");
+        fields.add("qq");
+        fields.add("lottery");
+        fields.add("vote");
+        fields.add("message");
+        fields.add("redirect");
+        fields.add("shopping");
+        fields.add("consult");
+        fields.add("consult_effective");
+        fields.add("phone_confirm");
+        fields.add("phone_connect");
+        fields.add("phone_effective");
+        fields.add("coupon");
+        fields.add("coupon_single_page");
+        fields.add("redirect_to_shop");
+        fields.add("poi_address_click");
+        fields.add("poi_collect");
+        fields.add("customer_effective");
+        fields.add("attribution_customer_effective");
+        fields.add("attribution_customer_effective_cost");
+        fields.add("attribution_clue_pay_succeed");
+        fields.add("attribution_clue_pay_succeed_cost");
+        fields.add("attribution_clue_interflow");
+        fields.add("attribution_clue_interflow_cost");
+        fields.add("attribution_clue_high_intention");
+        fields.add("attribution_clue_high_intention_cost");
+        fields.add("attribution_clue_confirm");
+        fields.add("attribution_clue_confirm_cost");
+        fields.add("consult_clue");
+        fields.add("attribution_work_wechat_added_count");
+        fields.add("attribution_work_wechat_unfriend_count");
+        fields.add("attribution_game_in_app_ltv_1day");
+        fields.add("attribution_game_in_app_ltv_2days");
+        fields.add("attribution_game_in_app_ltv_3days");
+        fields.add("attribution_game_in_app_ltv_4days");
+        fields.add("attribution_game_in_app_ltv_5days");
+        fields.add("attribution_game_in_app_ltv_6days");
+        fields.add("attribution_game_in_app_ltv_7days");
+        fields.add("attribution_game_in_app_ltv_8days");
+        fields.add("attribution_game_in_app_roi_1day");
+        fields.add("attribution_game_in_app_roi_2days");
+        fields.add("attribution_game_in_app_roi_3days");
+        fields.add("attribution_game_in_app_roi_4days");
+        fields.add("attribution_game_in_app_roi_5days");
+        fields.add("attribution_game_in_app_roi_6days");
+        fields.add("attribution_game_in_app_roi_7days");
+        fields.add("attribution_game_in_app_roi_8days");
+        fields.add("attribution_day_active_pay_count");
+        fields.add("attribution_day_active_pay_cost");
+        fields.add("attribution_day_active_pay_rate");
+        fields.add("active_pay_intra_day_count");
+        fields.add("active_pay_intra_day_cost");
+        fields.add("active_pay_intra_day_rate");
+        fields.add("attribution_micro_game_0d_ltv");
+        fields.add("attribution_micro_game_3d_ltv");
+        fields.add("attribution_micro_game_7d_ltv");
+        fields.add("attribution_micro_game_0d_roi");
+        fields.add("attribution_micro_game_3d_roi");
+        fields.add("attribution_micro_game_7d_roi");
+        fields.add("loan_completion");
+        fields.add("loan_completion_cost");
+        fields.add("loan_completion_rate");
+        fields.add("pre_loan_credit");
+        fields.add("pre_loan_credit_cost");
+        fields.add("loan_credit");
+        fields.add("loan_credit_cost");
+        fields.add("loan_credit_rate");
+        fields.add("loan");
+        fields.add("loan_cost");
+        fields.add("loan_rate");
+        fields.add("premium_payment_count");
+        fields.add("premium_payment_cost");
+        fields.add("insurance_lt_roi");
+        fields.add("bankcard_information_count");
+        fields.add("personal_information_count");
+        fields.add("certification_information_count");
+        fields.add("open_account_count");
+        fields.add("first_class_count");
+        fields.add("second_class_count");
+        fields.add("unfollow_in_wechat_count");
+        fields.add("in_wechat_pay_count");
+        fields.add("attribution_work_wechat_dialog_count");
+        fields.add("low_loan_credit_count");
+        fields.add("high_loan_credit_count");
+        fields.add("withdraw_m2_count");
+        fields.add("attribution_conversion_class_count");
+        fields.add("in_app_order_gmv");
+        fields.add("in_app_order_roi");
+        fields.add("in_app_pay_gmv");
+        fields.add("in_app_pay_roi");
+        fields.add("total_play");
+        fields.add("play_duration_3s");
+        fields.add("valid_play");
+        fields.add("valid_play_cost");
+        fields.add("valid_play_rate");
+        fields.add("valid_play_of_mille");
+        fields.add("valid_play_cost_of_mille");
+        fields.add("play_25_feed_break");
+        fields.add("play_50_feed_break");
+        fields.add("play_75_feed_break");
+        fields.add("play_99_feed_break");
+        fields.add("average_play_time_per_play");
+        fields.add("play_over_rate");
+        fields.add("wifi_play_rate");
+        fields.add("card_show");
+        fields.add("dy_like");
+        fields.add("dy_comment");
+        fields.add("dy_share");
+        fields.add("ad_dislike_cnt");
+        fields.add("ad_report_cnt");
+        fields.add("ies_challenge_click");
+        fields.add("ies_music_click");
+        fields.add("location_click");
+        fields.add("dy_home_visited");
+        fields.add("dy_follow");
+        fields.add("message_action");
+        fields.add("click_landing_page");
+        fields.add("click_shopwindow");
+        fields.add("click_website");
+        fields.add("click_call_dy");
+        fields.add("click_download");
+        fields.add("luban_live_enter_cnt");
+        fields.add("live_watch_one_minute_count");
+        fields.add("luban_live_follow_cnt");
+        fields.add("luban_live_share_cnt");
+        fields.add("luban_live_comment_cnt");
+        fields.add("live_component_click_count");
+        fields.add("live_component_click_cost");
+        fields.add("live_component_click_rate");
+        return fields;
+    }
+}

文件差異過大導致無法顯示
+ 1427 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedanceV3ProjectReportDaily.java


文件差異過大導致無法顯示
+ 1433 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/BytedanceV3ProjectReportHourly.java


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

@@ -2,6 +2,7 @@ package cn.com.ctop.job.bytedance.data.mapper;
 
 
 import cn.com.ctop.job.bytedance.data.entity.BytedanceAdvertiserReportDaily;
+import cn.com.ctop.job.bytedance.data.entity.BytedanceV3ProjectReportDaily;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -11,4 +12,5 @@ public interface BytedanceAdvertiserReportDailyMapper {
 
     int insert(@Param("list") List<BytedanceAdvertiserReportDaily> list);
 
+    void insertV3Project(@Param("list") List<BytedanceV3ProjectReportDaily> dailyList);
 }

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

@@ -2,6 +2,7 @@ package cn.com.ctop.job.bytedance.data.mapper;
 
 
 import cn.com.ctop.job.bytedance.data.entity.BytedanceAdvertiserReportHourly;
+import cn.com.ctop.job.bytedance.data.entity.BytedanceV3ProjectReportHourly;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -10,4 +11,5 @@ public interface BytedanceAdvertiserReportHourlyMapper {
 
     int insert(@Param("list") List<BytedanceAdvertiserReportHourly> list);
 
+    int insertV3Project(@Param("list") List<BytedanceV3ProjectReportHourly> hourlyList);
 }

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

@@ -366,4 +366,481 @@
         </foreach>
     </insert>
 
+
+    <insert id="insertV3Project" parameterType="cn.com.ctop.job.bytedance.data.entity.BytedanceV3ProjectReportDaily">
+        replace into media_api.bytedance_cdp_project_report_daily (
+        advertiser_id,
+        cdp_project_id,
+        cdp_project_name,
+        stat_time_day,
+        active,
+        active_cost,
+        active_pay,
+        active_pay_cost,
+        active_pay_intra_day_cost,
+        active_pay_intra_day_count,
+        active_pay_intra_day_rate,
+        active_pay_rate,
+        active_rate,
+        active_register,
+        active_register_cost,
+        active_register_rate,
+        ad_dislike_cnt,
+        ad_report_cnt,
+        attribution_active_pay,
+        attribution_active_pay_7d_per_count,
+        attribution_active_pay_cost,
+        attribution_active_pay_rate,
+        attribution_billing_game_in_app_ltv_1day,
+        attribution_billing_game_in_app_ltv_2days,
+        attribution_billing_game_in_app_ltv_3days,
+        attribution_billing_game_in_app_ltv_4days,
+        attribution_billing_game_in_app_ltv_5days,
+        attribution_billing_game_in_app_ltv_6days,
+        attribution_billing_game_in_app_ltv_7days,
+        attribution_billing_game_in_app_roi_1day,
+        attribution_billing_game_in_app_roi_2days,
+        attribution_billing_game_in_app_roi_3days,
+        attribution_billing_game_in_app_roi_4days,
+        attribution_billing_game_in_app_roi_5days,
+        attribution_billing_game_in_app_roi_6days,
+        attribution_billing_game_in_app_roi_7days,
+        attribution_billing_game_pay_7d_cost,
+        attribution_billing_game_pay_7d_count,
+        attribution_clue_confirm,
+        attribution_clue_confirm_cost,
+        attribution_clue_high_intention,
+        attribution_clue_high_intention_cost,
+        attribution_clue_interflow,
+        attribution_clue_interflow_cost,
+        attribution_clue_pay_succeed,
+        attribution_clue_pay_succeed_cost,
+        attribution_conversion_class_count,
+        attribution_conversion_rate,
+        attribution_convert_cnt,
+        attribution_convert_cost,
+        attribution_customer_effective,
+        attribution_customer_effective_cost,
+        attribution_day_active_pay_cost,
+        attribution_day_active_pay_count,
+        attribution_day_active_pay_rate,
+        attribution_deep_convert_cnt,
+        attribution_deep_convert_cost,
+        attribution_deep_convert_rate,
+        attribution_game_in_app_ltv_1day,
+        attribution_game_in_app_ltv_2days,
+        attribution_game_in_app_ltv_3days,
+        attribution_game_in_app_ltv_4days,
+        attribution_game_in_app_ltv_5days,
+        attribution_game_in_app_ltv_6days,
+        attribution_game_in_app_ltv_7days,
+        attribution_game_in_app_ltv_8days,
+        attribution_game_in_app_roi_1day,
+        attribution_game_in_app_roi_2days,
+        attribution_game_in_app_roi_3days,
+        attribution_game_in_app_roi_4days,
+        attribution_game_in_app_roi_5days,
+        attribution_game_in_app_roi_6days,
+        attribution_game_in_app_roi_7days,
+        attribution_game_in_app_roi_8days,
+        attribution_game_pay_7d_cost,
+        attribution_game_pay_7d_count,
+        attribution_micro_game_0d_ltv,
+        attribution_micro_game_0d_roi,
+        attribution_micro_game_3d_ltv,
+        attribution_micro_game_3d_roi,
+        attribution_micro_game_7d_ltv,
+        attribution_micro_game_7d_roi,
+        attribution_next_day_open_cnt,
+        attribution_next_day_open_cost,
+        attribution_next_day_open_rate,
+        attribution_retention_2d_cnt,
+        attribution_retention_2d_cost,
+        attribution_retention_2d_rate,
+        attribution_retention_3d_cnt,
+        attribution_retention_3d_cost,
+        attribution_retention_3d_rate,
+        attribution_retention_4d_cnt,
+        attribution_retention_4d_cost,
+        attribution_retention_4d_rate,
+        attribution_retention_5d_cnt,
+        attribution_retention_5d_cost,
+        attribution_retention_5d_rate,
+        attribution_retention_6d_cnt,
+        attribution_retention_6d_cost,
+        attribution_retention_6d_rate,
+        attribution_retention_7d_cnt,
+        attribution_retention_7d_cost,
+        attribution_retention_7d_rate,
+        attribution_retention_7d_sum_cnt,
+        attribution_retention_7d_total_cost,
+        attribution_work_wechat_added_count,
+        attribution_work_wechat_dialog_count,
+        attribution_work_wechat_unfriend_count,
+        average_play_time_per_play,
+        bankcard_information_count,
+        button,
+        card_show,
+        certification_information_count,
+        click_call_dy,
+        click_cnt,
+        click_download,
+        click_landing_page,
+        click_shopwindow,
+        click_start_cnt,
+        click_start_cost,
+        click_start_rate,
+        click_website,
+        consult,
+        consult_clue,
+        consult_effective,
+        conversion_cost,
+        conversion_rate,
+        convert_cnt,
+        coupon,
+        coupon_single_page,
+        cpc_platform,
+        cpm_platform,
+        ctr,
+        customer_effective,
+        deep_convert_cnt,
+        deep_convert_cost,
+        deep_convert_rate,
+        download_finish_cnt,
+        download_finish_cost,
+        download_finish_rate,
+        download_start,
+        dy_comment,
+        dy_follow,
+        dy_home_visited,
+        dy_like,
+        dy_share,
+        first_class_count,
+        form,
+        form_submit,
+        game_addiction,
+        game_addiction_cost,
+        game_addiction_rate,
+        game_pay_cost,
+        game_pay_count,
+        high_loan_credit_count,
+        ies_challenge_click,
+        ies_music_click,
+        in_app_cart,
+        in_app_detail_uv,
+        in_app_order,
+        in_app_order_gmv,
+        in_app_order_roi,
+        in_app_pay,
+        in_app_pay_gmv,
+        in_app_pay_roi,
+        in_app_uv,
+        in_wechat_pay_count,
+        install_finish_cnt,
+        install_finish_cost,
+        install_finish_rate,
+        insurance_lt_roi,
+        live_component_click_cost,
+        live_component_click_count,
+        live_component_click_rate,
+        live_watch_one_minute_count,
+        loan,
+        loan_completion,
+        loan_completion_cost,
+        loan_completion_rate,
+        loan_cost,
+        loan_credit,
+        loan_credit_cost,
+        loan_credit_rate,
+        loan_rate,
+        location_click,
+        lottery,
+        low_loan_credit_count,
+        luban_live_comment_cnt,
+        luban_live_enter_cnt,
+        luban_live_follow_cnt,
+        luban_live_share_cnt,
+        map,
+        message,
+        message_action,
+        next_day_open,
+        open_account_count,
+        pay_amount_roi,
+        personal_information_count,
+        phone,
+        phone_confirm,
+        phone_connect,
+        phone_effective,
+        play_25_feed_break,
+        play_50_feed_break,
+        play_75_feed_break,
+        play_99_feed_break,
+        play_duration_3s,
+        play_over_rate,
+        poi_address_click,
+        poi_collect,
+        pre_loan_credit,
+        pre_loan_credit_cost,
+        premium_payment_cost,
+        premium_payment_count,
+        qq,
+        redirect,
+        redirect_to_shop,
+        second_class_count,
+        shopping,
+        show_cnt,
+        stat_cost,
+        stat_pay_amount,
+        total_play,
+        unfollow_in_wechat_count,
+        valid_play,
+        valid_play_cost,
+        valid_play_cost_of_mille,
+        valid_play_of_mille,
+        valid_play_rate,
+        view,
+        vote,
+        wifi_play_rate,
+        withdraw_m2_count
+        )
+        values
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.advertiserId},
+            #{item.cdpProjectId},
+            #{item.cdpProjectName},
+            #{item.statTimeDay},
+            #{item.active},
+            #{item.activeCost},
+            #{item.activePay},
+            #{item.activePayCost},
+            #{item.activePayIntraDayCost},
+            #{item.activePayIntraDayCount},
+            #{item.activePayIntraDayRate},
+            #{item.activePayRate},
+            #{item.activeRate},
+            #{item.activeRegister},
+            #{item.activeRegisterCost},
+            #{item.activeRegisterRate},
+            #{item.adDislikeCnt},
+            #{item.adReportCnt},
+            #{item.attributionActivePay},
+            #{item.attributionActivePay7dPerCount},
+            #{item.attributionActivePayCost},
+            #{item.attributionActivePayRate},
+            #{item.attributionBillingGameInAppLtv1day},
+            #{item.attributionBillingGameInAppLtv2days},
+            #{item.attributionBillingGameInAppLtv3days},
+            #{item.attributionBillingGameInAppLtv4days},
+            #{item.attributionBillingGameInAppLtv5days},
+            #{item.attributionBillingGameInAppLtv6days},
+            #{item.attributionBillingGameInAppLtv7days},
+            #{item.attributionBillingGameInAppRoi1day},
+            #{item.attributionBillingGameInAppRoi2days},
+            #{item.attributionBillingGameInAppRoi3days},
+            #{item.attributionBillingGameInAppRoi4days},
+            #{item.attributionBillingGameInAppRoi5days},
+            #{item.attributionBillingGameInAppRoi6days},
+            #{item.attributionBillingGameInAppRoi7days},
+            #{item.attributionBillingGamePay7dCost},
+            #{item.attributionBillingGamePay7dCount},
+            #{item.attributionClueConfirm},
+            #{item.attributionClueConfirmCost},
+            #{item.attributionClueHighIntention},
+            #{item.attributionClueHighIntentionCost},
+            #{item.attributionClueInterflow},
+            #{item.attributionClueInterflowCost},
+            #{item.attributionCluePaySucceed},
+            #{item.attributionCluePaySucceedCost},
+            #{item.attributionConversionClassCount},
+            #{item.attributionConversionRate},
+            #{item.attributionConvertCnt},
+            #{item.attributionConvertCost},
+            #{item.attributionCustomerEffective},
+            #{item.attributionCustomerEffectiveCost},
+            #{item.attributionDayActivePayCost},
+            #{item.attributionDayActivePayCount},
+            #{item.attributionDayActivePayRate},
+            #{item.attributionDeepConvertCnt},
+            #{item.attributionDeepConvertCost},
+            #{item.attributionDeepConvertRate},
+            #{item.attributionGameInAppLtv1day},
+            #{item.attributionGameInAppLtv2days},
+            #{item.attributionGameInAppLtv3days},
+            #{item.attributionGameInAppLtv4days},
+            #{item.attributionGameInAppLtv5days},
+            #{item.attributionGameInAppLtv6days},
+            #{item.attributionGameInAppLtv7days},
+            #{item.attributionGameInAppLtv8days},
+            #{item.attributionGameInAppRoi1day},
+            #{item.attributionGameInAppRoi2days},
+            #{item.attributionGameInAppRoi3days},
+            #{item.attributionGameInAppRoi4days},
+            #{item.attributionGameInAppRoi5days},
+            #{item.attributionGameInAppRoi6days},
+            #{item.attributionGameInAppRoi7days},
+            #{item.attributionGameInAppRoi8days},
+            #{item.attributionGamePay7dCost},
+            #{item.attributionGamePay7dCount},
+            #{item.attributionMicroGame0dLtv},
+            #{item.attributionMicroGame0dRoi},
+            #{item.attributionMicroGame3dLtv},
+            #{item.attributionMicroGame3dRoi},
+            #{item.attributionMicroGame7dLtv},
+            #{item.attributionMicroGame7dRoi},
+            #{item.attributionNextDayOpenCnt},
+            #{item.attributionNextDayOpenCost},
+            #{item.attributionNextDayOpenRate},
+            #{item.attributionRetention2dCnt},
+            #{item.attributionRetention2dCost},
+            #{item.attributionRetention2dRate},
+            #{item.attributionRetention3dCnt},
+            #{item.attributionRetention3dCost},
+            #{item.attributionRetention3dRate},
+            #{item.attributionRetention4dCnt},
+            #{item.attributionRetention4dCost},
+            #{item.attributionRetention4dRate},
+            #{item.attributionRetention5dCnt},
+            #{item.attributionRetention5dCost},
+            #{item.attributionRetention5dRate},
+            #{item.attributionRetention6dCnt},
+            #{item.attributionRetention6dCost},
+            #{item.attributionRetention6dRate},
+            #{item.attributionRetention7dCnt},
+            #{item.attributionRetention7dCost},
+            #{item.attributionRetention7dRate},
+            #{item.attributionRetention7dSumCnt},
+            #{item.attributionRetention7dTotalCost},
+            #{item.attributionWorkWechatAddedCount},
+            #{item.attributionWorkWechatDialogCount},
+            #{item.attributionWorkWechatUnfriendCount},
+            #{item.averagePlayTimePerPlay},
+            #{item.bankcardInformationCount},
+            #{item.button},
+            #{item.cardShow},
+            #{item.certificationInformationCount},
+            #{item.clickCallDy},
+            #{item.clickCnt},
+            #{item.clickDownload},
+            #{item.clickLandingPage},
+            #{item.clickShopwindow},
+            #{item.clickStartCnt},
+            #{item.clickStartCost},
+            #{item.clickStartRate},
+            #{item.clickWebsite},
+            #{item.consult},
+            #{item.consultClue},
+            #{item.consultEffective},
+            #{item.conversionCost},
+            #{item.conversionRate},
+            #{item.convertCnt},
+            #{item.coupon},
+            #{item.couponSinglePage},
+            #{item.cpcPlatform},
+            #{item.cpmPlatform},
+            #{item.ctr},
+            #{item.customerEffective},
+            #{item.deepConvertCnt},
+            #{item.deepConvertCost},
+            #{item.deepConvertRate},
+            #{item.downloadFinishCnt},
+            #{item.downloadFinishCost},
+            #{item.downloadFinishRate},
+            #{item.downloadStart},
+            #{item.dyComment},
+            #{item.dyFollow},
+            #{item.dyHomeVisited},
+            #{item.dyLike},
+            #{item.dyShare},
+            #{item.firstClassCount},
+            #{item.form},
+            #{item.formSubmit},
+            #{item.gameAddiction},
+            #{item.gameAddictionCost},
+            #{item.gameAddictionRate},
+            #{item.gamePayCost},
+            #{item.gamePayCount},
+            #{item.highLoanCreditCount},
+            #{item.iesChallengeClick},
+            #{item.iesMusicClick},
+            #{item.inAppCart},
+            #{item.inAppDetailUv},
+            #{item.inAppOrder},
+            #{item.inAppOrderGmv},
+            #{item.inAppOrderRoi},
+            #{item.inAppPay},
+            #{item.inAppPayGmv},
+            #{item.inAppPayRoi},
+            #{item.inAppUv},
+            #{item.inWechatPayCount},
+            #{item.installFinishCnt},
+            #{item.installFinishCost},
+            #{item.installFinishRate},
+            #{item.insuranceLtRoi},
+            #{item.liveComponentClickCost},
+            #{item.liveComponentClickCount},
+            #{item.liveComponentClickRate},
+            #{item.liveWatchOneMinuteCount},
+            #{item.loan},
+            #{item.loanCompletion},
+            #{item.loanCompletionCost},
+            #{item.loanCompletionRate},
+            #{item.loanCost},
+            #{item.loanCredit},
+            #{item.loanCreditCost},
+            #{item.loanCreditRate},
+            #{item.loanRate},
+            #{item.locationClick},
+            #{item.lottery},
+            #{item.lowLoanCreditCount},
+            #{item.lubanLiveCommentCnt},
+            #{item.lubanLiveEnterCnt},
+            #{item.lubanLiveFollowCnt},
+            #{item.lubanLiveShareCnt},
+            #{item.map},
+            #{item.message},
+            #{item.messageAction},
+            #{item.nextDayOpen},
+            #{item.openAccountCount},
+            #{item.payAmountRoi},
+            #{item.personalInformationCount},
+            #{item.phone},
+            #{item.phoneConfirm},
+            #{item.phoneConnect},
+            #{item.phoneEffective},
+            #{item.play25FeedBreak},
+            #{item.play50FeedBreak},
+            #{item.play75FeedBreak},
+            #{item.play99FeedBreak},
+            #{item.playDuration3s},
+            #{item.playOverRate},
+            #{item.poiAddressClick},
+            #{item.poiCollect},
+            #{item.preLoanCredit},
+            #{item.preLoanCreditCost},
+            #{item.premiumPaymentCost},
+            #{item.premiumPaymentCount},
+            #{item.qq},
+            #{item.redirect},
+            #{item.redirectToShop},
+            #{item.secondClassCount},
+            #{item.shopping},
+            #{item.showCnt},
+            #{item.statCost},
+            #{item.statPayAmount},
+            #{item.totalPlay},
+            #{item.unfollowInWechatCount},
+            #{item.validPlay},
+            #{item.validPlayCost},
+            #{item.validPlayCostOfMille},
+            #{item.validPlayOfMille},
+            #{item.validPlayRate},
+            #{item.view},
+            #{item.vote},
+            #{item.wifiPlayRate},
+            #{item.withdrawM2Count}
+            )
+        </foreach>
+    </insert>
+
 </mapper>

+ 481 - 2
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/xml/BytedanceAdvertiserReportHourlyMapper.xml

@@ -167,7 +167,8 @@
     </resultMap>
 
     <sql id="Base_Column_List">
-    advertiser_id, stat_datetime, hour, cost, show, avg_show_cost, click, avg_click_cost, 
+        advertiser_id
+        , stat_datetime, hour, cost, show, avg_show_cost, click, avg_click_cost,
     ctr, convert, convert_cost, convert_rate, deep_convert, deep_convert_cost, deep_convert_rate, 
     attribution_convert, attribution_convert_cost, attribution_deep_convert, attribution_deep_convert_cost, 
     download_start, download_start_cost, download_start_rate, download_finish, download_finish_cost, 
@@ -200,7 +201,7 @@
     message_action, click_landing_page, click_shopwindow, click_website, click_download, 
     click_call_dy, submit_certification_count, approval_count, first_rental_order_count, 
     first_order_count, commute_first_pay_count
-  </sql>
+    </sql>
 
     <insert id="insert" parameterType="cn.com.ctop.job.bytedance.data.entity.BytedanceAdvertiserReportHourly">
         replace into bytedance_advertiser_report_hourly (advertiser_id, stat_datetime, `hour`,
@@ -367,4 +368,482 @@
         </foreach>
     </insert>
 
+    <insert id="insertV3Project" parameterType="cn.com.ctop.job.bytedance.data.entity.BytedanceAdvertiserReportHourly">
+        replace into media_api.bytedance_cdp_project_report_hourly (
+        advertiser_id,
+        cdp_project_id,
+        cdp_project_name,
+        stat_time_day,
+        stat_hour,
+        active,
+        active_cost,
+        active_pay,
+        active_pay_cost,
+        active_pay_intra_day_cost,
+        active_pay_intra_day_count,
+        active_pay_intra_day_rate,
+        active_pay_rate,
+        active_rate,
+        active_register,
+        active_register_cost,
+        active_register_rate,
+        ad_dislike_cnt,
+        ad_report_cnt,
+        attribution_active_pay,
+        attribution_active_pay_7d_per_count,
+        attribution_active_pay_cost,
+        attribution_active_pay_rate,
+        attribution_billing_game_in_app_ltv_1day,
+        attribution_billing_game_in_app_ltv_2days,
+        attribution_billing_game_in_app_ltv_3days,
+        attribution_billing_game_in_app_ltv_4days,
+        attribution_billing_game_in_app_ltv_5days,
+        attribution_billing_game_in_app_ltv_6days,
+        attribution_billing_game_in_app_ltv_7days,
+        attribution_billing_game_in_app_roi_1day,
+        attribution_billing_game_in_app_roi_2days,
+        attribution_billing_game_in_app_roi_3days,
+        attribution_billing_game_in_app_roi_4days,
+        attribution_billing_game_in_app_roi_5days,
+        attribution_billing_game_in_app_roi_6days,
+        attribution_billing_game_in_app_roi_7days,
+        attribution_billing_game_pay_7d_cost,
+        attribution_billing_game_pay_7d_count,
+        attribution_clue_confirm,
+        attribution_clue_confirm_cost,
+        attribution_clue_high_intention,
+        attribution_clue_high_intention_cost,
+        attribution_clue_interflow,
+        attribution_clue_interflow_cost,
+        attribution_clue_pay_succeed,
+        attribution_clue_pay_succeed_cost,
+        attribution_conversion_class_count,
+        attribution_conversion_rate,
+        attribution_convert_cnt,
+        attribution_convert_cost,
+        attribution_customer_effective,
+        attribution_customer_effective_cost,
+        attribution_day_active_pay_cost,
+        attribution_day_active_pay_count,
+        attribution_day_active_pay_rate,
+        attribution_deep_convert_cnt,
+        attribution_deep_convert_cost,
+        attribution_deep_convert_rate,
+        attribution_game_in_app_ltv_1day,
+        attribution_game_in_app_ltv_2days,
+        attribution_game_in_app_ltv_3days,
+        attribution_game_in_app_ltv_4days,
+        attribution_game_in_app_ltv_5days,
+        attribution_game_in_app_ltv_6days,
+        attribution_game_in_app_ltv_7days,
+        attribution_game_in_app_ltv_8days,
+        attribution_game_in_app_roi_1day,
+        attribution_game_in_app_roi_2days,
+        attribution_game_in_app_roi_3days,
+        attribution_game_in_app_roi_4days,
+        attribution_game_in_app_roi_5days,
+        attribution_game_in_app_roi_6days,
+        attribution_game_in_app_roi_7days,
+        attribution_game_in_app_roi_8days,
+        attribution_game_pay_7d_cost,
+        attribution_game_pay_7d_count,
+        attribution_micro_game_0d_ltv,
+        attribution_micro_game_0d_roi,
+        attribution_micro_game_3d_ltv,
+        attribution_micro_game_3d_roi,
+        attribution_micro_game_7d_ltv,
+        attribution_micro_game_7d_roi,
+        attribution_next_day_open_cnt,
+        attribution_next_day_open_cost,
+        attribution_next_day_open_rate,
+        attribution_retention_2d_cnt,
+        attribution_retention_2d_cost,
+        attribution_retention_2d_rate,
+        attribution_retention_3d_cnt,
+        attribution_retention_3d_cost,
+        attribution_retention_3d_rate,
+        attribution_retention_4d_cnt,
+        attribution_retention_4d_cost,
+        attribution_retention_4d_rate,
+        attribution_retention_5d_cnt,
+        attribution_retention_5d_cost,
+        attribution_retention_5d_rate,
+        attribution_retention_6d_cnt,
+        attribution_retention_6d_cost,
+        attribution_retention_6d_rate,
+        attribution_retention_7d_cnt,
+        attribution_retention_7d_cost,
+        attribution_retention_7d_rate,
+        attribution_retention_7d_sum_cnt,
+        attribution_retention_7d_total_cost,
+        attribution_work_wechat_added_count,
+        attribution_work_wechat_dialog_count,
+        attribution_work_wechat_unfriend_count,
+        average_play_time_per_play,
+        bankcard_information_count,
+        button,
+        card_show,
+        certification_information_count,
+        click_call_dy,
+        click_cnt,
+        click_download,
+        click_landing_page,
+        click_shopwindow,
+        click_start_cnt,
+        click_start_cost,
+        click_start_rate,
+        click_website,
+        consult,
+        consult_clue,
+        consult_effective,
+        conversion_cost,
+        conversion_rate,
+        convert_cnt,
+        coupon,
+        coupon_single_page,
+        cpc_platform,
+        cpm_platform,
+        ctr,
+        customer_effective,
+        deep_convert_cnt,
+        deep_convert_cost,
+        deep_convert_rate,
+        download_finish_cnt,
+        download_finish_cost,
+        download_finish_rate,
+        download_start,
+        dy_comment,
+        dy_follow,
+        dy_home_visited,
+        dy_like,
+        dy_share,
+        first_class_count,
+        form,
+        form_submit,
+        game_addiction,
+        game_addiction_cost,
+        game_addiction_rate,
+        game_pay_cost,
+        game_pay_count,
+        high_loan_credit_count,
+        ies_challenge_click,
+        ies_music_click,
+        in_app_cart,
+        in_app_detail_uv,
+        in_app_order,
+        in_app_order_gmv,
+        in_app_order_roi,
+        in_app_pay,
+        in_app_pay_gmv,
+        in_app_pay_roi,
+        in_app_uv,
+        in_wechat_pay_count,
+        install_finish_cnt,
+        install_finish_cost,
+        install_finish_rate,
+        insurance_lt_roi,
+        live_component_click_cost,
+        live_component_click_count,
+        live_component_click_rate,
+        live_watch_one_minute_count,
+        loan,
+        loan_completion,
+        loan_completion_cost,
+        loan_completion_rate,
+        loan_cost,
+        loan_credit,
+        loan_credit_cost,
+        loan_credit_rate,
+        loan_rate,
+        location_click,
+        lottery,
+        low_loan_credit_count,
+        luban_live_comment_cnt,
+        luban_live_enter_cnt,
+        luban_live_follow_cnt,
+        luban_live_share_cnt,
+        map,
+        message,
+        message_action,
+        next_day_open,
+        open_account_count,
+        pay_amount_roi,
+        personal_information_count,
+        phone,
+        phone_confirm,
+        phone_connect,
+        phone_effective,
+        play_25_feed_break,
+        play_50_feed_break,
+        play_75_feed_break,
+        play_99_feed_break,
+        play_duration_3s,
+        play_over_rate,
+        poi_address_click,
+        poi_collect,
+        pre_loan_credit,
+        pre_loan_credit_cost,
+        premium_payment_cost,
+        premium_payment_count,
+        qq,
+        redirect,
+        redirect_to_shop,
+        second_class_count,
+        shopping,
+        show_cnt,
+        stat_cost,
+        stat_pay_amount,
+        total_play,
+        unfollow_in_wechat_count,
+        valid_play,
+        valid_play_cost,
+        valid_play_cost_of_mille,
+        valid_play_of_mille,
+        valid_play_rate,
+        view,
+        vote,
+        wifi_play_rate,
+        withdraw_m2_count
+        )
+        values
+        <foreach collection="list" item="item" separator=",">
+            (
+            #{item.advertiserId},
+            #{item.cdpProjectId},
+            #{item.cdpProjectName},
+            #{item.statTimeDay},
+            #{item.statHour},
+            #{item.active},
+            #{item.activeCost},
+            #{item.activePay},
+            #{item.activePayCost},
+            #{item.activePayIntraDayCost},
+            #{item.activePayIntraDayCount},
+            #{item.activePayIntraDayRate},
+            #{item.activePayRate},
+            #{item.activeRate},
+            #{item.activeRegister},
+            #{item.activeRegisterCost},
+            #{item.activeRegisterRate},
+            #{item.adDislikeCnt},
+            #{item.adReportCnt},
+            #{item.attributionActivePay},
+            #{item.attributionActivePay7dPerCount},
+            #{item.attributionActivePayCost},
+            #{item.attributionActivePayRate},
+            #{item.attributionBillingGameInAppLtv1day},
+            #{item.attributionBillingGameInAppLtv2days},
+            #{item.attributionBillingGameInAppLtv3days},
+            #{item.attributionBillingGameInAppLtv4days},
+            #{item.attributionBillingGameInAppLtv5days},
+            #{item.attributionBillingGameInAppLtv6days},
+            #{item.attributionBillingGameInAppLtv7days},
+            #{item.attributionBillingGameInAppRoi1day},
+            #{item.attributionBillingGameInAppRoi2days},
+            #{item.attributionBillingGameInAppRoi3days},
+            #{item.attributionBillingGameInAppRoi4days},
+            #{item.attributionBillingGameInAppRoi5days},
+            #{item.attributionBillingGameInAppRoi6days},
+            #{item.attributionBillingGameInAppRoi7days},
+            #{item.attributionBillingGamePay7dCost},
+            #{item.attributionBillingGamePay7dCount},
+            #{item.attributionClueConfirm},
+            #{item.attributionClueConfirmCost},
+            #{item.attributionClueHighIntention},
+            #{item.attributionClueHighIntentionCost},
+            #{item.attributionClueInterflow},
+            #{item.attributionClueInterflowCost},
+            #{item.attributionCluePaySucceed},
+            #{item.attributionCluePaySucceedCost},
+            #{item.attributionConversionClassCount},
+            #{item.attributionConversionRate},
+            #{item.attributionConvertCnt},
+            #{item.attributionConvertCost},
+            #{item.attributionCustomerEffective},
+            #{item.attributionCustomerEffectiveCost},
+            #{item.attributionDayActivePayCost},
+            #{item.attributionDayActivePayCount},
+            #{item.attributionDayActivePayRate},
+            #{item.attributionDeepConvertCnt},
+            #{item.attributionDeepConvertCost},
+            #{item.attributionDeepConvertRate},
+            #{item.attributionGameInAppLtv1day},
+            #{item.attributionGameInAppLtv2days},
+            #{item.attributionGameInAppLtv3days},
+            #{item.attributionGameInAppLtv4days},
+            #{item.attributionGameInAppLtv5days},
+            #{item.attributionGameInAppLtv6days},
+            #{item.attributionGameInAppLtv7days},
+            #{item.attributionGameInAppLtv8days},
+            #{item.attributionGameInAppRoi1day},
+            #{item.attributionGameInAppRoi2days},
+            #{item.attributionGameInAppRoi3days},
+            #{item.attributionGameInAppRoi4days},
+            #{item.attributionGameInAppRoi5days},
+            #{item.attributionGameInAppRoi6days},
+            #{item.attributionGameInAppRoi7days},
+            #{item.attributionGameInAppRoi8days},
+            #{item.attributionGamePay7dCost},
+            #{item.attributionGamePay7dCount},
+            #{item.attributionMicroGame0dLtv},
+            #{item.attributionMicroGame0dRoi},
+            #{item.attributionMicroGame3dLtv},
+            #{item.attributionMicroGame3dRoi},
+            #{item.attributionMicroGame7dLtv},
+            #{item.attributionMicroGame7dRoi},
+            #{item.attributionNextDayOpenCnt},
+            #{item.attributionNextDayOpenCost},
+            #{item.attributionNextDayOpenRate},
+            #{item.attributionRetention2dCnt},
+            #{item.attributionRetention2dCost},
+            #{item.attributionRetention2dRate},
+            #{item.attributionRetention3dCnt},
+            #{item.attributionRetention3dCost},
+            #{item.attributionRetention3dRate},
+            #{item.attributionRetention4dCnt},
+            #{item.attributionRetention4dCost},
+            #{item.attributionRetention4dRate},
+            #{item.attributionRetention5dCnt},
+            #{item.attributionRetention5dCost},
+            #{item.attributionRetention5dRate},
+            #{item.attributionRetention6dCnt},
+            #{item.attributionRetention6dCost},
+            #{item.attributionRetention6dRate},
+            #{item.attributionRetention7dCnt},
+            #{item.attributionRetention7dCost},
+            #{item.attributionRetention7dRate},
+            #{item.attributionRetention7dSumCnt},
+            #{item.attributionRetention7dTotalCost},
+            #{item.attributionWorkWechatAddedCount},
+            #{item.attributionWorkWechatDialogCount},
+            #{item.attributionWorkWechatUnfriendCount},
+            #{item.averagePlayTimePerPlay},
+            #{item.bankcardInformationCount},
+            #{item.button},
+            #{item.cardShow},
+            #{item.certificationInformationCount},
+            #{item.clickCallDy},
+            #{item.clickCnt},
+            #{item.clickDownload},
+            #{item.clickLandingPage},
+            #{item.clickShopwindow},
+            #{item.clickStartCnt},
+            #{item.clickStartCost},
+            #{item.clickStartRate},
+            #{item.clickWebsite},
+            #{item.consult},
+            #{item.consultClue},
+            #{item.consultEffective},
+            #{item.conversionCost},
+            #{item.conversionRate},
+            #{item.convertCnt},
+            #{item.coupon},
+            #{item.couponSinglePage},
+            #{item.cpcPlatform},
+            #{item.cpmPlatform},
+            #{item.ctr},
+            #{item.customerEffective},
+            #{item.deepConvertCnt},
+            #{item.deepConvertCost},
+            #{item.deepConvertRate},
+            #{item.downloadFinishCnt},
+            #{item.downloadFinishCost},
+            #{item.downloadFinishRate},
+            #{item.downloadStart},
+            #{item.dyComment},
+            #{item.dyFollow},
+            #{item.dyHomeVisited},
+            #{item.dyLike},
+            #{item.dyShare},
+            #{item.firstClassCount},
+            #{item.form},
+            #{item.formSubmit},
+            #{item.gameAddiction},
+            #{item.gameAddictionCost},
+            #{item.gameAddictionRate},
+            #{item.gamePayCost},
+            #{item.gamePayCount},
+            #{item.highLoanCreditCount},
+            #{item.iesChallengeClick},
+            #{item.iesMusicClick},
+            #{item.inAppCart},
+            #{item.inAppDetailUv},
+            #{item.inAppOrder},
+            #{item.inAppOrderGmv},
+            #{item.inAppOrderRoi},
+            #{item.inAppPay},
+            #{item.inAppPayGmv},
+            #{item.inAppPayRoi},
+            #{item.inAppUv},
+            #{item.inWechatPayCount},
+            #{item.installFinishCnt},
+            #{item.installFinishCost},
+            #{item.installFinishRate},
+            #{item.insuranceLtRoi},
+            #{item.liveComponentClickCost},
+            #{item.liveComponentClickCount},
+            #{item.liveComponentClickRate},
+            #{item.liveWatchOneMinuteCount},
+            #{item.loan},
+            #{item.loanCompletion},
+            #{item.loanCompletionCost},
+            #{item.loanCompletionRate},
+            #{item.loanCost},
+            #{item.loanCredit},
+            #{item.loanCreditCost},
+            #{item.loanCreditRate},
+            #{item.loanRate},
+            #{item.locationClick},
+            #{item.lottery},
+            #{item.lowLoanCreditCount},
+            #{item.lubanLiveCommentCnt},
+            #{item.lubanLiveEnterCnt},
+            #{item.lubanLiveFollowCnt},
+            #{item.lubanLiveShareCnt},
+            #{item.map},
+            #{item.message},
+            #{item.messageAction},
+            #{item.nextDayOpen},
+            #{item.openAccountCount},
+            #{item.payAmountRoi},
+            #{item.personalInformationCount},
+            #{item.phone},
+            #{item.phoneConfirm},
+            #{item.phoneConnect},
+            #{item.phoneEffective},
+            #{item.play25FeedBreak},
+            #{item.play50FeedBreak},
+            #{item.play75FeedBreak},
+            #{item.play99FeedBreak},
+            #{item.playDuration3s},
+            #{item.playOverRate},
+            #{item.poiAddressClick},
+            #{item.poiCollect},
+            #{item.preLoanCredit},
+            #{item.preLoanCreditCost},
+            #{item.premiumPaymentCost},
+            #{item.premiumPaymentCount},
+            #{item.qq},
+            #{item.redirect},
+            #{item.redirectToShop},
+            #{item.secondClassCount},
+            #{item.shopping},
+            #{item.showCnt},
+            #{item.statCost},
+            #{item.statPayAmount},
+            #{item.totalPlay},
+            #{item.unfollowInWechatCount},
+            #{item.validPlay},
+            #{item.validPlayCost},
+            #{item.validPlayCostOfMille},
+            #{item.validPlayOfMille},
+            #{item.validPlayRate},
+            #{item.view},
+            #{item.vote},
+            #{item.wifiPlayRate},
+            #{item.withdrawM2Count}
+            )
+        </foreach>
+    </insert>
+
 </mapper>

+ 5 - 2
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IByteDanceAdvertiserDataService.java

@@ -2,13 +2,12 @@ package cn.com.ctop.job.bytedance.data.service;
 
 import cn.com.ctop.job.bytedance.data.entity.OauthToken;
 
-import java.util.Date;
 import java.util.Map;
 
 /**
  * @author jeecg-boot
  */
-public interface IByteDanceAdvertiserDataService  {
+public interface IByteDanceAdvertiserDataService {
 
 
     Map<String, Object> getAdvertiserPlan(OauthToken token, String ids, String date, String updateDate);
@@ -18,4 +17,8 @@ public interface IByteDanceAdvertiserDataService  {
     void getAdvertiserReport(OauthToken oauthToken, String yesterda, String yesterda1, String bytedanceReportTypeDaily);
 
     void getAgentReport(OauthToken oauthToken, String yesterda, String yesterda1, String bytedanceReportTypeDaily);
+
+    void getV3AdvertiserConfig(OauthToken oauthToken);
+
+    void getV3AdvertiserReport(OauthToken oauthToken, String yesterda, String yesterda1, String bytedanceReportTypeHourly);
 }

+ 203 - 35
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/ByteDanceAdvertiserDataServiceImpl.java

@@ -2,8 +2,25 @@ package cn.com.ctop.job.bytedance.data.service.impl;
 
 import cn.com.ctop.job.bytedance.data.constant.BytedanceConstant;
 import cn.com.ctop.job.bytedance.data.constant.CtopAdConstant;
-import cn.com.ctop.job.bytedance.data.entity.*;
-import cn.com.ctop.job.bytedance.data.mapper.*;
+import cn.com.ctop.job.bytedance.data.entity.ByteDanceAdvertiserReportDTO;
+import cn.com.ctop.job.bytedance.data.entity.ByteDanceV3AdvertiserReportDTO;
+import cn.com.ctop.job.bytedance.data.entity.BytedanceAdGet;
+import cn.com.ctop.job.bytedance.data.entity.BytedanceAdReportDaily;
+import cn.com.ctop.job.bytedance.data.entity.BytedanceAdReportHourly;
+import cn.com.ctop.job.bytedance.data.entity.BytedanceAdvertiserReportDaily;
+import cn.com.ctop.job.bytedance.data.entity.BytedanceAdvertiserReportHourly;
+import cn.com.ctop.job.bytedance.data.entity.BytedanceAgentReportDaily;
+import cn.com.ctop.job.bytedance.data.entity.BytedanceAgentReportHourly;
+import cn.com.ctop.job.bytedance.data.entity.BytedanceV3ProjectReportDaily;
+import cn.com.ctop.job.bytedance.data.entity.BytedanceV3ProjectReportHourly;
+import cn.com.ctop.job.bytedance.data.entity.OauthToken;
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceAdGetMapper;
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceAdReportDailyMapper;
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceAdReportHourlyMapper;
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceAdvertiserReportDailyMapper;
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceAdvertiserReportHourlyMapper;
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceAgentReportDailyMapper;
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceAgentReportHourlyMapper;
 import cn.com.ctop.job.bytedance.data.service.IByteDanceAdvertiserDataService;
 import cn.com.ctop.job.bytedance.data.service.IBytedanceAgentReportDailyService;
 import cn.com.ctop.job.bytedance.data.service.IBytedanceAgentReportHourlyService;
@@ -16,6 +33,8 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.PropertyNamingStrategy;
 import com.alibaba.fastjson.serializer.SerializeConfig;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.xxl.job.core.context.XxlJobHelper;
 import lombok.extern.slf4j.Slf4j;
 import lombok.var;
@@ -26,7 +45,12 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -76,9 +100,9 @@ public class ByteDanceAdvertiserDataServiceImpl implements IByteDanceAdvertiserD
      */
 
     public void getAd(OauthToken token, int pageNum, String ids, String date, String updateDate) {
-        log.info("开始获取广告计划信息 accountID:{},日期{},page:{}", token.getAccountId(), updateDate,pageNum);
+        log.info("开始获取广告计划信息 accountID:{},日期{},page:{}", token.getAccountId(), updateDate, pageNum);
 
-        List<Object> adAccountList = redisUtil.getList("AD"+updateDate,null);
+        List<Object> adAccountList = redisUtil.getList("AD" + updateDate, null);
 
         JSONArray getIds = null;
         if (null != ids && !"".equals(ids)) {
@@ -117,30 +141,30 @@ public class ByteDanceAdvertiserDataServiceImpl implements IByteDanceAdvertiserD
             log.error(
                     "获取广告计划信息接口异常==》accountId:{},message:{},code{}",
                     token.getAccountId(),
-                    resultObject.getString("message"),code);
+                    resultObject.getString("message"), code);
             //请求过于频繁
-            if (40100 == code){
-                log.info("广告计划请求频繁,code:{},准备重试,accountId:{},错误消息:{}",code,token.getAccountId(),resultObject.getString("message"));
+            if (40100 == code) {
+                log.info("广告计划请求频繁,code:{},准备重试,accountId:{},错误消息:{}", code, token.getAccountId(), resultObject.getString("message"));
                 //添加重试
-                if (Check.isNull(adAccountList)){
-                    redisUtil.add("AD"+updateDate,Arrays.asList(token.getAccountId()), 1, TimeUnit.HOURS);
-                }else {
+                if (Check.isNull(adAccountList)) {
+                    redisUtil.add("AD" + updateDate, Arrays.asList(token.getAccountId()), 1, TimeUnit.HOURS);
+                } else {
                     adAccountList.add(token.getAccountId());
-                    redisUtil.add("AD"+updateDate,adAccountList, 1, TimeUnit.HOURS);
+                    redisUtil.add("AD" + updateDate, adAccountList, 1, TimeUnit.HOURS);
                 }
-            }else {
-                if (adAccountList.contains(token.getAccountId())){
+            } else {
+                if (adAccountList.contains(token.getAccountId())) {
                     adAccountList.remove(token.getAccountId());
-                    redisUtil.add("AD"+updateDate,adAccountList, 1, TimeUnit.HOURS);
+                    redisUtil.add("AD" + updateDate, adAccountList, 1, TimeUnit.HOURS);
                 }
 
             }
             return;
         }
         JSONArray data = resultObject.getJSONObject("data").getJSONArray("list");
-        if (adAccountList.contains(token.getAccountId())){
+        if (adAccountList.contains(token.getAccountId())) {
             adAccountList.remove(token.getAccountId());
-            redisUtil.add("AD"+updateDate,adAccountList, 1, TimeUnit.HOURS);
+            redisUtil.add("AD" + updateDate, adAccountList, 1, TimeUnit.HOURS);
         }
         if (null == data || data.isEmpty()) {
             //log.info("广告计划,accountId:{}暂无数据",token.getAccountId());
@@ -240,7 +264,7 @@ public class ByteDanceAdvertiserDataServiceImpl implements IByteDanceAdvertiserD
         conditions.setPageSize(1000);
         conditions.setTimeGranularity(bytedanceReportTypePl);
         conditions.setFields(conditions.getFieldsList());
-        log.info("账户--{}正在执行广告主{}数据",conditions.getAdvertiserId(),bytedanceReportTypePl);
+        log.info("账户--{}正在执行广告主{}数据", conditions.getAdvertiserId(), bytedanceReportTypePl);
         return conditions;
     }
 
@@ -280,7 +304,7 @@ public class ByteDanceAdvertiserDataServiceImpl implements IByteDanceAdvertiserD
                             JSONObject.parseObject(data.toJSONString(), BytedanceAdReportHourly.class);
                     hourlyReport.setAdvertiserId(conditions.getAdvertiserId());
                     String hour = hourlyReport.getStatDatetime().substring(11, 13);
-                    hourlyReport.setStatDatetime(hourlyReport.getStatDatetime().substring(0,10).replace("-", ""));
+                    hourlyReport.setStatDatetime(hourlyReport.getStatDatetime().substring(0, 10).replace("-", ""));
                     hourlyReport.setHour(Integer.parseInt(hour));
                     hourlyReports.add(hourlyReport);
 
@@ -290,7 +314,7 @@ public class ByteDanceAdvertiserDataServiceImpl implements IByteDanceAdvertiserD
                         BytedanceAdReportDaily dailyReport =
                                 JSONObject.parseObject(data.toJSONString(), BytedanceAdReportDaily.class);
                         dailyReport.setAdvertiserId(conditions.getAdvertiserId());
-                        dailyReport.setStatDatetime(dailyReport.getStatDatetime().substring(0,10).replace("-", ""));
+                        dailyReport.setStatDatetime(dailyReport.getStatDatetime().substring(0, 10).replace("-", ""));
                         dailyReports.add(dailyReport);
                     }
                 }
@@ -352,47 +376,48 @@ public class ByteDanceAdvertiserDataServiceImpl implements IByteDanceAdvertiserD
     private void getAdvertiserReportByPage(
             OauthToken token, ByteDanceAdvertiserReportDTO conditions, Integer page) {
 
-        List<Object> advertiserAccountList = redisUtil.getList("ADVERTISER"+conditions.getStartDate(),null);
+        List<Object> advertiserAccountList = redisUtil.getList("ADVERTISER" + conditions.getStartDate(), null);
 
-        log.info("开始获取广告主账户报表,账户id:{}--时间---{},page:{}", token.getAccountId(),conditions.getStartDate(),page);
+        log.info("开始获取广告主账户报表,账户id:{}--时间---{},page:{}", token.getAccountId(), conditions.getStartDate(), page);
         conditions.setPage(page);
         SerializeConfig config = new SerializeConfig();
         config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
         JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(conditions, config));
         JSONObject getObject = getAdvertiserStat(token, jsonObject);
+        System.out.println("返回结果:" + getObject);
         if (null == getObject) {
             XxlJobHelper.log("头条广告主数据获取异常");
-            log.error("头条广告主数据获取信息为空==》accountId:{}",token.getAccountId());
+            log.error("头条广告主数据获取信息为空==》accountId:{}", token.getAccountId());
             return;
         }
         Integer code = getObject.getInteger("code");
         String message = getObject.getString("message");
         if (null == code || code != 0) {
-            log.error("头条广告主数据获取异常:{}---code--{}", message,code);
+            log.error("头条广告主数据获取异常:{}---code--{}", message, code);
 
             //请求过于频繁
-            if (40100 == code){
-                log.info("广告主日报请求频繁,code:{},准备重试,accountId:{},错误消息:{}",code,token.getAccountId(),message);
+            if (40100 == code) {
+                log.info("广告主日报请求频繁,code:{},准备重试,accountId:{},错误消息:{}", code, token.getAccountId(), message);
                 //添加重试
-                if (Check.isNull(advertiserAccountList)){
-                    redisUtil.add("ADVERTISER"+conditions.getStartDate(),Arrays.asList(token.getAccountId()), 1, TimeUnit.HOURS);
-                }else {
+                if (Check.isNull(advertiserAccountList)) {
+                    redisUtil.add("ADVERTISER" + conditions.getStartDate(), Arrays.asList(token.getAccountId()), 1, TimeUnit.HOURS);
+                } else {
                     advertiserAccountList.add(token.getAccountId());
-                    redisUtil.add("ADVERTISER"+conditions.getStartDate(),advertiserAccountList, 1, TimeUnit.HOURS);
+                    redisUtil.add("ADVERTISER" + conditions.getStartDate(), advertiserAccountList, 1, TimeUnit.HOURS);
                 }
-            }else {
-                if (advertiserAccountList.contains(token.getAccountId())){
+            } else {
+                if (advertiserAccountList.contains(token.getAccountId())) {
                     advertiserAccountList.remove(token.getAccountId());
-                    redisUtil.add("ADVERTISER"+conditions.getStartDate(),advertiserAccountList, 1, TimeUnit.HOURS);
+                    redisUtil.add("ADVERTISER" + conditions.getStartDate(), advertiserAccountList, 1, TimeUnit.HOURS);
                 }
             }
 
             return;
         }
         JSONArray dataArray = getObject.getJSONObject("data").getJSONArray("list");
-        if (advertiserAccountList.contains(token.getAccountId())){
+        if (advertiserAccountList.contains(token.getAccountId())) {
             advertiserAccountList.remove(token.getAccountId());
-            redisUtil.add("ADVERTISER"+conditions.getStartDate(),advertiserAccountList, 1, TimeUnit.HOURS);
+            redisUtil.add("ADVERTISER" + conditions.getStartDate(), advertiserAccountList, 1, TimeUnit.HOURS);
         }
         if (null == dataArray || dataArray.isEmpty()) {
 
@@ -467,6 +492,7 @@ public class ByteDanceAdvertiserDataServiceImpl implements IByteDanceAdvertiserD
         groupBy.add("STAT_GROUP_BY_FIELD_ID");
         groupBy.add("STAT_GROUP_BY_FIELD_STAT_TIME");
         conditions.put("group_by", groupBy);
+        System.out.println("入参:" + conditions);
         return HttpUtils.bytedanceGetRequest(token.getAccessToken(), url, conditions);
     }
 
@@ -574,4 +600,146 @@ public class ByteDanceAdvertiserDataServiceImpl implements IByteDanceAdvertiserD
         String url = bytedanceApiUrl + BytedanceConstant.BYTEDANCE_V2_REPORT_AGENT_GET_V2;
         return HttpUtils.bytedanceGetRequest(token.getAccessToken(), url, conditions);
     }
+
+
+    private static final ObjectMapper mapper = new ObjectMapper();
+
+    /**
+     * 获取自定义报表可用指标和维度
+     */
+    @Override
+    public void getV3AdvertiserConfig(OauthToken oauthToken) {
+        try {
+            // 请求地址
+            String url = bytedanceApiUrl + BytedanceConstant.BYTEDANCE_V3_CONFIG_ADVERTISER_GET;
+            Map<String, Object> param = new HashMap<>();
+            param.put("advertiser_id", oauthToken.getAccountId());
+
+            List<String> data_topics_list = new ArrayList<>();
+            data_topics_list.add("BASIC_DATA");//广告基础数据
+//            data_topics_list.add("QUERY_DATA");//搜索词数据、
+//            data_topics_list.add("BIDWORD_DATA");//关键词数据
+//            data_topics_list.add("MATERIAL_DATA");//素材数据、
+            data_topics_list.add("PRODUCT_DATA");//产品数据、
+//            data_topics_list.add("ONE_KEY_BOOST_DATA");//一键起量(巨量广告升级版)
+            String data_topics = mapper.writeValueAsString(data_topics_list);
+            param.put("data_topics", data_topics);
+
+            Map<String, String> header = new HashMap<>();
+            header.put("Access-Token", oauthToken.getAccessToken());
+            JSONObject resultObject = JSONObject.parseObject(HttpUtils.httpGet(url, param, header));
+            System.out.println("指标参数:\n" + resultObject);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void getV3AdvertiserReport(OauthToken token, String startDate, String endDate, String bytedanceReportTypePl) {
+        var conditions = new ByteDanceV3AdvertiserReportDTO(token.getAccountId(), bytedanceReportTypePl, startDate, endDate, 100);
+        getV3AdvertiserReportByPage(token, conditions, 1);
+    }
+
+    /**
+     * 获取V3广告主
+     */
+    private void getV3AdvertiserReportByPage(OauthToken token, ByteDanceV3AdvertiserReportDTO conditions, Integer page) {
+        List<Object> advertiserAccountList = redisUtil.getList("V3_ADVERTISER" + conditions.getStartTime(), null);
+        conditions.setPage(page);
+        SerializeConfig config = new SerializeConfig();
+        config.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
+        JSONObject params = JSONObject.parseObject(JSON.toJSONString(conditions, config));
+        // 请求地址
+        String url = bytedanceApiUrl + BytedanceConstant.BYTEDANCE_V3_REPORT_INTEGRATED_GET;
+
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Access-Token", token.getAccessToken());
+
+        String info = HttpUtils.httpGet(url, params, headers);
+        JSONObject result = JSONObject.parseObject(info, JSONObject.class);
+//        System.out.println("【请求参数】:" + params + "\n【返回信息】:" + result);
+
+        if (Check.isNull(result)) {
+            XxlJobHelper.log("V3项目报表获取异常");
+            return;
+        }
+        Integer code = result.getInteger("code");
+        String message = result.getString("message");
+        if (code != 0) {
+            if (40100 == code) {
+                //请求过于频繁
+                log.info("V3项目报表请求频繁,准备重试,accountId:{}\n【错误信息】:{}", token.getAccountId(), message);
+                //添加重试
+                if (Check.isNull(advertiserAccountList)) {
+                    redisUtil.add("V3_ADVERTISER" + conditions.getStartTime(), Arrays.asList(token.getAccountId()), 1, TimeUnit.HOURS);
+                } else {
+                    advertiserAccountList.add(token.getAccountId());
+                    redisUtil.add("V3_ADVERTISER" + conditions.getStartTime(), advertiserAccountList, 1, TimeUnit.HOURS);
+                }
+            } else {
+                log.error("V3项目报表调取失败,账户ID:{}\n【请求地址】: {}\n【请求参数】:{}\n【错误信息】:{}", token.getAccountId(), url, JSONObject.toJSON(params), message);
+                if (advertiserAccountList.contains(token.getAccountId())) {
+                    advertiserAccountList.remove(token.getAccountId());
+                    redisUtil.add("V3_ADVERTISER" + conditions.getStartTime(), advertiserAccountList, 1, TimeUnit.HOURS);
+                }
+            }
+            return;
+        }
+
+        JSONArray rows = result.getJSONObject("data").getJSONArray("rows");
+        if (advertiserAccountList.contains(token.getAccountId())) {
+            advertiserAccountList.remove(token.getAccountId());
+            redisUtil.add("V3_ADVERTISER" + conditions.getStartTime(), advertiserAccountList, 1, TimeUnit.HOURS);
+        }
+        if (Check.isNull(rows)) {
+            return;
+        }
+        List<BytedanceV3ProjectReportHourly> hourlyList = new ArrayList<>();
+        List<BytedanceV3ProjectReportDaily> dailyList = new ArrayList<>();
+        try {
+            for (int i = 0; i < rows.size(); i++) {
+                JSONObject data = rows.getJSONObject(i);
+                JSONObject metrics = data.getJSONObject("metrics");
+                JSONObject dimensions = data.getJSONObject("dimensions");
+                Long projectId = dimensions.getLong("cdp_project_id");
+                String projectName = dimensions.getString("cdp_project_name");
+
+                if (conditions.getDimensions().contains(CtopAdConstant.BYTEDANCE_REPORT_V3_TYPE_HOURLY)) {
+                    String hour = dimensions.getString("stat_time_hour").substring(11, 13);
+                    // 时报
+                    BytedanceV3ProjectReportHourly hourlyReport = JSONObject.parseObject(metrics.toJSONString(), BytedanceV3ProjectReportHourly.class);
+                    hourlyReport.setAdvertiserId(token.getAccountId());
+                    hourlyReport.setStatTimeDay(dimensions.getString("stat_time_hour").substring(0, 10).replace("-", ""));
+                    hourlyReport.setStatHour(Integer.parseInt(hour));
+                    hourlyReport.setCdpProjectId(projectId);
+                    hourlyReport.setCdpProjectName(projectName);
+                    hourlyList.add(hourlyReport);
+
+                } else {
+                    // 日报
+                    BytedanceV3ProjectReportDaily dailyReport = JSONObject.parseObject(metrics.toJSONString(), BytedanceV3ProjectReportDaily.class);
+                    dailyReport.setAdvertiserId(token.getAccountId());
+                    dailyReport.setStatTimeDay(dimensions.getString("stat_time_day").substring(0, 10).replace("-", ""));
+                    dailyReport.setCdpProjectId(projectId);
+                    dailyReport.setCdpProjectName(projectName);
+                    dailyList.add(dailyReport);
+                }
+            }
+            if (hourlyList.size() > 0) {
+                bytedanceAdvertiserReportHourlyMapper.insertV3Project(hourlyList);
+            }
+            if (dailyList.size() > 0) {
+                bytedanceAdvertiserReportDailyMapper.insertV3Project(dailyList);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.info("获取广告主数据错误:", e.toString());
+        }
+        page++;
+
+        int totalPage = result.getJSONObject("data").getJSONObject("page_info").getInteger("total_page");
+        if (page <= totalPage) {
+            getV3AdvertiserReportByPage(token, conditions, page);
+        }
+    }
 }

+ 83 - 18
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceAdvertiseLoadJob.java

@@ -38,9 +38,6 @@ public class BytedanceAdvertiseLoadJob {
     private IByteDanceAdvertiserDataService advertiserDataService;
 
 
-
-
-
     @Autowired
     private RedisUtil redisUtil;
 
@@ -56,7 +53,7 @@ public class BytedanceAdvertiseLoadJob {
 
         //获取广告主信息异常的key
         Set<String> set = redisUtil.kesy("ADVERTISER*");
-        if (Check.isNull(set)){
+        if (Check.isNull(set)) {
             return;
         }
 
@@ -66,11 +63,11 @@ public class BytedanceAdvertiseLoadJob {
 
             //添加重试
             List<Object> adAccountList;
-            adAccountList = redisUtil.getList(key,null);
+            adAccountList = redisUtil.getList(key, null);
             //遍历key下的所有信息
             for (Object accountId : adAccountList) {
 
-               // log.info("广告主遗漏数据补充,日期:{},accountId:{}",key,adAccountList.toString());
+                // log.info("广告主遗漏数据补充,日期:{},accountId:{}",key,adAccountList.toString());
                 String token = tokenService.getByAccountId(Long.valueOf(String.valueOf(accountId)));
                 if (Check.isNull(token)) {
                     log.error("此账户未获取到相关token,accountId:{}", accountId);
@@ -81,16 +78,16 @@ public class BytedanceAdvertiseLoadJob {
                 oauthToken.setAccessToken(token);
                 oauthToken.setAccountId(Long.valueOf(String.valueOf(accountId)));
 
-                advertiserDataService.getAdvertiserReport(oauthToken, key.replaceAll("ADVERTISER",""), key.replaceAll("ADVERTISER",""), CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
+                advertiserDataService.getAdvertiserReport(oauthToken, key.replaceAll("ADVERTISER", ""), key.replaceAll("ADVERTISER", ""), CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
 
-                adAccountList = redisUtil.getList(key,null);
+                adAccountList = redisUtil.getList(key, null);
 
-                if (adAccountList.size() == 0){
+                if (adAccountList.size() == 0) {
                     redisUtil.delete(key);
                 }
 
                 try {
-                    Thread.sleep(1000*2);
+                    Thread.sleep(1000 * 2);
                 } catch (InterruptedException e) {
                     e.printStackTrace();
                 }
@@ -100,15 +97,9 @@ public class BytedanceAdvertiseLoadJob {
         }
 
 
-
-
     }
 
 
-
-
-
-
     /**
      * 广告主日报
      *
@@ -186,10 +177,85 @@ public class BytedanceAdvertiseLoadJob {
 
 
     /**
+     * 广告主日报
+     *
+     * @throws Exception
+     */
+    @XxlJob("bytedanceAdvertiserV3DailyReport")
+    public void bytedanceAdvertiserV3DailyReport() throws Exception {
+        String param = XxlJobHelper.getJobParam(); // 执行参数
+        if (Check.isNull(param)) {
+            log.error("入参为空");
+            return;
+        }
+        String token = tokenService.getByAccountId(Long.valueOf(param));
+        if (Check.isNull(token)) {
+            log.error("此账户未获取到相关token,accountId:{}", param);
+            return;
+        }
+        OauthToken oauthToken = new OauthToken();
+        oauthToken.setAccessToken(token);
+        oauthToken.setAccountId(Long.parseLong(param));
+        String nowDate = DateUtils.getNowDate("yyyy-MM-dd");
+        String yesterda = DateUtils.getAnotherDay("yyyy-MM-dd", nowDate, -1);
+        String yesterda2 = DateUtils.getAnotherDay("yyyy-MM-dd", nowDate, -2);
+        dailyExecutorService.submit(
+                new Runnable() {
+                    @Override
+                    public void run() {
+                        advertiserDataService.getV3AdvertiserReport(oauthToken, yesterda, yesterda, CtopAdConstant.BYTEDANCE_REPORT_V3_TYPE_DAILY);
+                        advertiserDataService.getV3AdvertiserReport(oauthToken, yesterda2, yesterda2, CtopAdConstant.BYTEDANCE_REPORT_V3_TYPE_DAILY);
+                    }
+                });
+    }
+
+    /**
+     * 广告主时报
+     *
+     * @throws Exception
+     */
+    @XxlJob("bytedanceAdvertiserV3HourlyReport")
+    public void bytedanceAdvertiserV3HourlyReport() throws Exception {
+        String param = XxlJobHelper.getJobParam(); // 执行参数
+        if (Check.isNull(param)) {
+            log.error("入参为空");
+            return;
+        }
+        String token = tokenService.getByAccountId(Long.valueOf(param));
+        if (Check.isNull(token)) {
+            log.error("此账户未获取到相关token,accountId:{}", param);
+            return;
+        }
+        OauthToken oauthToken = new OauthToken();
+        oauthToken.setAccessToken(token);
+        oauthToken.setAccountId(Long.parseLong(param));
+
+        Date getDate = new Date();
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
+        String hour = simpleDateFormat.format(getDate);
+
+        String nowDate = DateUtils.getNowDate("yyyy-MM-dd");
+        String yesterda = DateUtils.getAnotherDay("yyyy-MM-dd", nowDate, -1);
+
+        hourExecutorService.submit(
+                new Runnable() {
+                    @Override
+                    public void run() {
+                        if ("00".equals(hour)) {
+                            advertiserDataService.getV3AdvertiserReport(oauthToken, yesterda, yesterda, CtopAdConstant.BYTEDANCE_REPORT_V3_TYPE_HOURLY);
+                        }
+                        advertiserDataService.getV3AdvertiserReport(oauthToken, nowDate, nowDate, CtopAdConstant.BYTEDANCE_REPORT_V3_TYPE_HOURLY);
+                        advertiserDataService.getV3AdvertiserReport(oauthToken, yesterda, yesterda, CtopAdConstant.BYTEDANCE_REPORT_V3_TYPE_HOURLY);
+
+                    }
+                });
+    }
+
+    /**
      * master
      */
     @XxlJob("bytedanceAdvertiserHourlyReport2")
-    public void bytedanceAdvertiserHourlyReport2(){
+    public void bytedanceAdvertiserHourlyReport2() {
         String token = tokenService.getByAccountId(1714136819636232L);
         OauthToken oauthToken = new OauthToken();
         oauthToken.setAccessToken(token);
@@ -201,5 +267,4 @@ public class BytedanceAdvertiseLoadJob {
     }
 
 
-
 }