Browse Source

头条-体验版素材-视频和图片

yangzian 2 years ago
parent
commit
5674a648f6

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

@@ -27,4 +27,6 @@ public class BytedanceConstant {
     public static final String BYTEDANCE_V2_FILE_VIDEO_GET = "/2/file/video/get/";
     public static final String BYTEDANCE_V2_FILE_VIDEO_GET = "/2/file/video/get/";
 
 
     public static final String BYTEDANCE_V2_REPORT_INTEGRATED_GET = "/2/report/integrated/get/";
     public static final String BYTEDANCE_V2_REPORT_INTEGRATED_GET = "/2/report/integrated/get/";
+
+    public static final String BYTEDANCE_V3_REPORT_INTEGRATED_GET = "/v3.0/report/material/get/";
 }
 }

+ 191 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/ByteDanceNewMaterialReport.java

@@ -0,0 +1,191 @@
+package cn.com.ctop.job.bytedance.data.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class ByteDanceNewMaterialReport implements Serializable {
+    private Long advertiserId;
+    private BigDecimal statCost;
+    private Long materialId;
+    private Integer statDatetime;
+    //private Integer promotionId;
+    //private Integer projectId;
+    private Integer showCnt;
+    private Integer cpmPlatform;
+    private Integer clickCnt;
+    private BigDecimal ctr;
+    private BigDecimal cpcPlatform;
+    private Integer convertCnt;
+    private BigDecimal conversionCost;
+    private BigDecimal conversionRate;
+    private Integer deepConvertCnt;
+    private BigDecimal deepConvertCost;
+    private BigDecimal deepConvertRate;
+    private Integer clickStartCnt;
+    private BigDecimal clickStartCost;
+    private BigDecimal clickStartRate;
+    private Integer downloadFinishCnt;
+    private BigDecimal downloadFinishCost;
+    private BigDecimal downloadFinishRate;
+    private Integer installFinishCnt;
+    private BigDecimal installFinishCost;
+    private BigDecimal installFinishRate;
+    private Integer active;
+    private BigDecimal activeCost;
+    private BigDecimal activeRate;
+    private Integer activeRegister;
+    private BigDecimal activeRegisterCost;
+    private BigDecimal activeRegisterRate;
+    private Integer gameAddiction;
+    private BigDecimal gameAddictionCost;
+    private BigDecimal gameAddictionRate;
+    private Integer attributionNextDayOpenCnt;
+    private BigDecimal attributionNextDayOpenCost;
+    private BigDecimal attributionNextDayOpenRate;
+    private Integer nextDayOpen;
+    private Integer activePay;
+    private BigDecimal activePayCost;
+    private BigDecimal activePayRate;
+    private Integer gamePayCount;
+    private BigDecimal gamePayCost;
+    private Integer attributionGamePay7dCount;
+    private BigDecimal attributionGamePay7dCost;
+    //private Integer attributionGamePay7dPerCount;
+    private Integer inAppUv;
+    private Integer inAppDetailUv;
+    private Integer inAppCart;
+    private Integer inAppPay;
+    private Integer inAppOrder;
+    private BigDecimal attributionGameInAppLtv1day;
+    private BigDecimal attributionGameInAppLtv2days;
+    private BigDecimal attributionGameInAppLtv3days;
+    private BigDecimal attributionGameInAppLtv4days;
+    private BigDecimal attributionGameInAppLtv5days;
+    private BigDecimal attributionGameInAppLtv6days;
+    private BigDecimal attributionGameInAppLtv7days;
+    private BigDecimal attributionGameInAppLtv8days;
+    private BigDecimal attributionGameInAppRoi1day;
+    private BigDecimal attributionGameInAppRoi2days;
+    private BigDecimal attributionGameInAppRoi3days;
+    private BigDecimal attributionGameInAppRoi4days;
+    private BigDecimal attributionGameInAppRoi5days;
+    private BigDecimal attributionGameInAppRoi6days;
+    private BigDecimal attributionGameInAppRoi7days;
+    private BigDecimal attributionGameInAppRoi8days;
+    //private Integer attributionDayActivePayCount;
+    //private Integer attributionDayActivePayCost;
+    //private Integer attributionDayActivePayRate;
+    private Integer activePayIntraDayCount;
+    private BigDecimal activePayIntraDayCost;
+    private BigDecimal activePayIntraDayRate;
+    private String deliveryMode;
+
+
+
+
+    public static String getParamsFields(){
+        StringBuilder stringBuilder = new StringBuilder();
+        stringBuilder.append("[");
+        stringBuilder.append("\"stat_cost\"").append(",");
+//        stringBuilder.append("\"material_id\"").append(",");
+//        stringBuilder.append("\"stat_datetime\"").append(",");
+//        stringBuilder.append("\"promotion_id\"");
+//        stringBuilder.append("\"project_id\"");
+        stringBuilder.append("\"show_cnt\"").append(",");
+        stringBuilder.append("\"cpm_platform\"").append(",");
+        stringBuilder.append("\"click_cnt\"").append(",");
+        stringBuilder.append("\"ctr\"").append(",");
+        stringBuilder.append("\"cpc_platform\"").append(",");
+        stringBuilder.append("\"convert_cnt\"").append(",");
+        stringBuilder.append("\"conversion_cost\"").append(",");
+        stringBuilder.append("\"conversion_rate\"").append(",");
+        stringBuilder.append("\"deep_convert_cnt\"").append(",");
+
+        stringBuilder.append("\"deep_convert_cost\"").append(",");
+        stringBuilder.append("\"deep_convert_rate\"").append(",");
+        stringBuilder.append("\"click_start_cnt\"").append(",");
+
+        stringBuilder.append("\"click_start_cost\"").append(",");
+        stringBuilder.append("\"click_start_rate\"").append(",");
+        stringBuilder.append("\"download_finish_cnt\"").append(",");
+        stringBuilder.append("\"download_finish_cost\"").append(",");
+        stringBuilder.append("\"download_finish_rate\"").append(",");
+
+        stringBuilder.append("\"install_finish_cnt\"").append(",");
+        stringBuilder.append("\"install_finish_cost\"").append(",");
+        stringBuilder.append("\"install_finish_rate\"").append(",");
+        stringBuilder.append("\"active\"").append(",");
+        stringBuilder.append("\"active_cost\"").append(",");
+        stringBuilder.append("\"active_rate\"").append(",");
+
+
+        stringBuilder.append("\"active_register\"").append(",");
+        stringBuilder.append("\"active_register_cost\"").append(",");
+        stringBuilder.append("\"active_register_rate\"").append(",");
+        stringBuilder.append("\"game_addiction\"").append(",");
+        stringBuilder.append("\"game_addiction_cost\"").append(",");
+        stringBuilder.append("\"game_addiction_rate\"").append(",");
+
+        stringBuilder.append("\"attribution_next_day_open_cnt\"").append(",");
+        stringBuilder.append("\"attribution_next_day_open_cost\"").append(",");
+        stringBuilder.append("\"attribution_next_day_open_rate\"").append(",");
+        stringBuilder.append("\"next_day_open\"").append(",");
+        stringBuilder.append("\"active_pay\"").append(",");
+        stringBuilder.append("\"active_pay_cost\"").append(",");
+
+        stringBuilder.append("\"active_pay_rate\"").append(",");
+        stringBuilder.append("\"game_pay_count\"").append(",");
+        stringBuilder.append("\"game_pay_cost\"").append(",");
+
+        stringBuilder.append("\"attribution_game_pay_7d_count\"").append(",");
+        stringBuilder.append("\"attribution_game_pay_7d_cost\"").append(",");
+
+//         stringBuilder.append("\"attribution_game_pay_7d_per_count\"").append(",");
+
+        stringBuilder.append("\"in_app_uv\"").append(",");
+        stringBuilder.append("\"in_app_detail_uv\"").append(",");
+        stringBuilder.append("\"in_app_cart\"").append(",");
+        stringBuilder.append("\"in_app_pay\"").append(",");
+        stringBuilder.append("\"in_app_order\"").append(",");
+        stringBuilder.append("\"attribution_game_in_app_ltv_1day\"").append(",");
+
+        stringBuilder.append("\"attribution_game_in_app_ltv_2days\"").append(",");
+        stringBuilder.append("\"attribution_game_in_app_ltv_3days\"").append(",");
+        stringBuilder.append("\"attribution_game_in_app_ltv_4days\"").append(",");
+        stringBuilder.append("\"attribution_game_in_app_ltv_5days\"").append(",");
+        stringBuilder.append("\"attribution_game_in_app_ltv_6days\"").append(",");
+        stringBuilder.append("\"attribution_game_in_app_ltv_7days\"").append(",");
+        stringBuilder.append("\"attribution_game_in_app_ltv_8days\"").append(",");
+        stringBuilder.append("\"attribution_game_in_app_roi_1day\"").append(",");
+        stringBuilder.append("\"attribution_game_in_app_roi_2days\"").append(",");
+        stringBuilder.append("\"attribution_game_in_app_roi_3days\"").append(",");
+        stringBuilder.append("\"attribution_game_in_app_roi_4days\"").append(",");
+        stringBuilder.append("\"attribution_game_in_app_roi_5days\"").append(",");
+        stringBuilder.append("\"attribution_game_in_app_roi_6days\"").append(",");
+        stringBuilder.append("\"attribution_game_in_app_roi_7days\"").append(",");
+        stringBuilder.append("\"attribution_game_in_app_roi_8days\"").append(",");
+
+        //stringBuilder.append("\"attribution_day_active_pay_count\"");
+        //stringBuilder.append("\"attribution_day_active_pay_cost\"");
+//        stringBuilder.append("\"attribution_day_active_pay_rate\"");
+
+        stringBuilder.append("\"active_pay_intra_day_count\"").append(",");
+        stringBuilder.append("\"active_pay_intra_day_cost\"").append(",");
+        stringBuilder.append("\"active_pay_intra_day_rate\"").append(",");
+        stringBuilder.append("\"delivery_mode\"");
+
+        stringBuilder.append("]");
+        return stringBuilder.toString();
+    }
+
+
+
+
+
+
+}

+ 20 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/mapper/BytedanceNewMaterialReportMapper.java

@@ -0,0 +1,20 @@
+package cn.com.ctop.job.bytedance.data.mapper;
+
+
+import cn.com.ctop.job.bytedance.data.entity.ByteDanceNewMaterialReport;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface BytedanceNewMaterialReportMapper {
+
+    /**
+     * 头条-新增体验版素材日报 -视频和图片
+     * @param list
+     * @return
+     */
+    int replaceBytedanceNewMaterialVideoDaily(@Param("list") List<ByteDanceNewMaterialReport> list);
+    int replaceBytedanceNewMaterialImageDaily(@Param("list") List<ByteDanceNewMaterialReport> list);
+
+
+}

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

@@ -0,0 +1,300 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="cn.com.ctop.job.bytedance.data.mapper.BytedanceNewMaterialReportMapper">
+
+
+    <!-- 头条-新增体验版素材日报 视频-->
+    <insert id="replaceBytedanceNewMaterialVideoDaily" parameterType="cn.com.ctop.job.bytedance.data.entity.ByteDanceNewMaterialReport">
+        REPLACE bytedance_material_video_daily (
+        advertiser_id,
+        material_id,
+        stat_cost,
+        stat_datetime,
+        show_cnt,
+        cpm_platform,
+        click_cnt,
+        ctr,
+        cpc_platform,
+        convert_cnt,
+        conversion_cost,
+        conversion_rate,
+        deep_convert_cnt,
+        deep_convert_cost,
+        deep_convert_rate,
+        click_start_cnt,
+        click_start_cost,
+        click_start_rate,
+        download_finish_cnt,
+        download_finish_cost,
+        download_finish_rate,
+        install_finish_cnt,
+        install_finish_cost,
+        install_finish_rate,
+        active,
+        active_cost,
+        active_rate,
+        active_register,
+        active_register_cost,
+        active_register_rate,
+        game_addiction,
+        game_addiction_cost,
+        game_addiction_rate,
+        attribution_next_day_open_cnt,
+        attribution_next_day_open_cost,
+        attribution_next_day_open_rate,
+        next_day_open,
+        active_pay,
+        active_pay_cost,
+        active_pay_rate,
+        game_pay_count,
+        game_pay_cost,
+        attribution_game_pay_7d_count,
+        attribution_game_pay_7d_cost,
+        in_app_uv,
+        in_app_detail_uv,
+        in_app_cart,
+        in_app_pay,
+        in_app_order,
+        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,
+        active_pay_intra_day_count,
+        active_pay_intra_day_cost,
+        active_pay_intra_day_rate
+        )
+        VALUES
+        <foreach collection= "list" item = "item" separator = "," >
+        (
+        #{item.advertiserId},
+        #{item.materialId},
+        #{item.statCost},
+        #{item.statDatetime},
+        #{item.showCnt},
+        #{item.cpmPlatform},
+        #{item.clickCnt},
+        #{item.ctr},
+        #{item.cpcPlatform},
+        #{item.convertCnt},
+        #{item.conversionCost},
+        #{item.conversionRate},
+        #{item.deepConvertCnt},
+        #{item.deepConvertCost},
+        #{item.deepConvertRate},
+        #{item.clickStartCnt},
+        #{item.clickStartCost},
+        #{item.clickStartRate},
+        #{item.downloadFinishCnt},
+        #{item.downloadFinishCost},
+        #{item.downloadFinishRate},
+        #{item.installFinishCnt},
+        #{item.installFinishCost},
+        #{item.installFinishRate},
+        #{item.active},
+        #{item.activeCost},
+        #{item.activeRate},
+        #{item.activeRegister},
+        #{item.activeRegisterCost},
+        #{item.activeRegisterRate},
+        #{item.gameAddiction},
+        #{item.gameAddictionCost},
+        #{item.gameAddictionRate},
+        #{item.attributionNextDayOpenCnt},
+        #{item.attributionNextDayOpenCost},
+        #{item.attributionNextDayOpenRate},
+        #{item.nextDayOpen},
+        #{item.activePay},
+        #{item.activePayCost},
+        #{item.activePayRate},
+        #{item.gamePayCount},
+        #{item.gamePayCost},
+        #{item.attributionGamePay7dCount},
+        #{item.attributionGamePay7dCost},
+        #{item.inAppUv},
+        #{item.inAppDetailUv},
+        #{item.inAppCart},
+        #{item.inAppPay},
+        #{item.inAppOrder},
+        #{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.activePayIntraDayCount},
+        #{item.activePayIntraDayCost},
+        #{item.activePayIntraDayRate}
+
+        )
+         </foreach>
+    </insert>
+
+    <!-- 头条-新增体验版素材日报 图片-->
+    <insert id="replaceBytedanceNewMaterialImageDaily" parameterType="cn.com.ctop.job.bytedance.data.entity.ByteDanceNewMaterialReport">
+        REPLACE bytedance_material_image_daily (
+        advertiser_id,
+        material_id,
+        stat_cost,
+        stat_datetime,
+        show_cnt,
+        cpm_platform,
+        click_cnt,
+        ctr,
+        cpc_platform,
+        convert_cnt,
+        conversion_cost,
+        conversion_rate,
+        deep_convert_cnt,
+        deep_convert_cost,
+        deep_convert_rate,
+        click_start_cnt,
+        click_start_cost,
+        click_start_rate,
+        download_finish_cnt,
+        download_finish_cost,
+        download_finish_rate,
+        install_finish_cnt,
+        install_finish_cost,
+        install_finish_rate,
+        active,
+        active_cost,
+        active_rate,
+        active_register,
+        active_register_cost,
+        active_register_rate,
+        game_addiction,
+        game_addiction_cost,
+        game_addiction_rate,
+        attribution_next_day_open_cnt,
+        attribution_next_day_open_cost,
+        attribution_next_day_open_rate,
+        next_day_open,
+        active_pay,
+        active_pay_cost,
+        active_pay_rate,
+        game_pay_count,
+        game_pay_cost,
+        attribution_game_pay_7d_count,
+        attribution_game_pay_7d_cost,
+        in_app_uv,
+        in_app_detail_uv,
+        in_app_cart,
+        in_app_pay,
+        in_app_order,
+        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,
+        active_pay_intra_day_count,
+        active_pay_intra_day_cost,
+        active_pay_intra_day_rate
+        )
+        VALUES
+        <foreach collection= "list" item = "item" separator = "," >
+        (
+        #{item.advertiserId},
+        #{item.materialId},
+        #{item.statCost},
+        #{item.statDatetime},
+        #{item.showCnt},
+        #{item.cpmPlatform},
+        #{item.clickCnt},
+        #{item.ctr},
+        #{item.cpcPlatform},
+        #{item.convertCnt},
+        #{item.conversionCost},
+        #{item.conversionRate},
+        #{item.deepConvertCnt},
+        #{item.deepConvertCost},
+        #{item.deepConvertRate},
+        #{item.clickStartCnt},
+        #{item.clickStartCost},
+        #{item.clickStartRate},
+        #{item.downloadFinishCnt},
+        #{item.downloadFinishCost},
+        #{item.downloadFinishRate},
+        #{item.installFinishCnt},
+        #{item.installFinishCost},
+        #{item.installFinishRate},
+        #{item.active},
+        #{item.activeCost},
+        #{item.activeRate},
+        #{item.activeRegister},
+        #{item.activeRegisterCost},
+        #{item.activeRegisterRate},
+        #{item.gameAddiction},
+        #{item.gameAddictionCost},
+        #{item.gameAddictionRate},
+        #{item.attributionNextDayOpenCnt},
+        #{item.attributionNextDayOpenCost},
+        #{item.attributionNextDayOpenRate},
+        #{item.nextDayOpen},
+        #{item.activePay},
+        #{item.activePayCost},
+        #{item.activePayRate},
+        #{item.gamePayCount},
+        #{item.gamePayCost},
+        #{item.attributionGamePay7dCount},
+        #{item.attributionGamePay7dCost},
+        #{item.inAppUv},
+        #{item.inAppDetailUv},
+        #{item.inAppCart},
+        #{item.inAppPay},
+        #{item.inAppOrder},
+        #{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.activePayIntraDayCount},
+        #{item.activePayIntraDayCost},
+        #{item.activePayIntraDayRate})
+         </foreach>
+    </insert>
+
+</mapper>

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

@@ -14,4 +14,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
 public interface IBytedanceMaterialReportDailyService  {
 public interface IBytedanceMaterialReportDailyService  {
 
 
     void bytedanceDailyMaterialReportJob(OauthToken oauthToken, String yesterda, String yesterda1, int i, int i1);
     void bytedanceDailyMaterialReportJob(OauthToken oauthToken, String yesterda, String yesterda1, int i, int i1);
+
+    /**
+     * 头条-新增体验版素材日报
+     */
+    void bytedanceDailyMaterialReportJobV3Video(OauthToken oauthToken, String yesterda, String yesterda1, int page, int pageSize) throws Exception;
+    void bytedanceDailyMaterialReportJobV3Image(OauthToken oauthToken, String yesterda, String yesterda1, int page, int pageSize) throws Exception;
 }
 }

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

@@ -1,15 +1,19 @@
 package cn.com.ctop.job.bytedance.data.service.impl;
 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.BytedanceConstant;
+import cn.com.ctop.job.bytedance.data.entity.ByteDanceNewMaterialReport;
 import cn.com.ctop.job.bytedance.data.entity.BytedanceMaterialReportDaily;
 import cn.com.ctop.job.bytedance.data.entity.BytedanceMaterialReportDaily;
 import cn.com.ctop.job.bytedance.data.entity.OauthToken;
 import cn.com.ctop.job.bytedance.data.entity.OauthToken;
 import cn.com.ctop.job.bytedance.data.mapper.BytedanceMaterialReportDailyMapper;
 import cn.com.ctop.job.bytedance.data.mapper.BytedanceMaterialReportDailyMapper;
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceNewMaterialReportMapper;
 import cn.com.ctop.job.bytedance.data.service.IBytedanceMaterialReportDailyService;
 import cn.com.ctop.job.bytedance.data.service.IBytedanceMaterialReportDailyService;
+import cn.com.ctop.job.bytedance.data.utils.DateUtils;
 import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
 import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
@@ -34,6 +38,9 @@ public class BytedanceMaterialReportDailyServiceImpl implements IBytedanceMateri
     @Resource
     @Resource
     BytedanceMaterialReportDailyMapper bytedanceMaterialReportDailyMapper;
     BytedanceMaterialReportDailyMapper bytedanceMaterialReportDailyMapper;
 
 
+    @Resource
+    private BytedanceNewMaterialReportMapper bytedanceNewMaterialReportMapper;
+
     @Override
     @Override
     public void bytedanceDailyMaterialReportJob(OauthToken oauthToken, String yesterda, String yesterda1, int page, int pageSize) {
     public void bytedanceDailyMaterialReportJob(OauthToken oauthToken, String yesterda, String yesterda1, int page, int pageSize) {
         log.info("开始获取图片和视频素材日报 accountID:{},page:{} date:{}", oauthToken.getAccountId(), page,yesterda);
         log.info("开始获取图片和视频素材日报 accountID:{},page:{} date:{}", oauthToken.getAccountId(), page,yesterda);
@@ -101,4 +108,167 @@ public class BytedanceMaterialReportDailyServiceImpl implements IBytedanceMateri
             bytedanceDailyMaterialReportJob(oauthToken, yesterda, yesterda1, page, 1000);
             bytedanceDailyMaterialReportJob(oauthToken, yesterda, yesterda1, page, 1000);
         }
         }
     }
     }
+
+
+
+    //头条-体验版素材日报--视频
+    @Override
+    public void bytedanceDailyMaterialReportJobV3Video(OauthToken oauthToken, String yesterda, String yesterda1, int page, int pageSize) throws Exception {
+        log.info("开始获取体验版-视频-素材日报 accountID:{},page:{} date:{}", oauthToken.getAccountId(), page,yesterda);
+        // 请求地址
+        String url = bytedanceApiUrl + BytedanceConstant.BYTEDANCE_V3_REPORT_INTEGRATED_GET;
+        Map<String,Object> param = new HashMap<>();
+        param.put("advertiser_id",oauthToken.getAccountId());
+        param.put("start_date",yesterda);
+        param.put("end_date",yesterda1);
+        param.put("page",page);
+        param.put("page_size",pageSize);
+        //List<String> fields = Arrays.asList("stat_cost");
+        //String fields1 = "[\"stat_cost\",\"show_cnt\",\"image_mode\"]";
+        // fields 入参 为拼接字符串数组形式 与入参 video_image_mode数组 && image_image_mode数组 格式不同
+        String fields = ByteDanceNewMaterialReport.getParamsFields();
+        param.put("fields",fields);
+        param.put("time_granularity","STAT_TIME_GRANULARITY_DAILY");
+        //param.put("group_by","STAT_GROUP_BY_DELIVERY_MODE");
+
+        Map<String,String> header = new HashMap<>();
+        header.put("Access-Token",oauthToken.getAccessToken());
+
+        //String video_image_mode = "[\"CREATIVE_IMAGE_MODE_VIDEO\",\"CREATIVE_IMAGE_MODE_VIDEO_VERTICAL\"]";
+        String[] video_image_mode = new String[]{"CREATIVE_IMAGE_MODE_VIDEO","CREATIVE_IMAGE_MODE_VIDEO_VERTICAL"};
+        //String image_image_mode = "[\"CREATIVE_IMAGE_MODE_LARGE\",\"CREATIVE_IMAGE_MODE_LARGE_VERTICAL\",\"CREATIVE_IMAGE_MODE_SMALL\"]";
+        String[] image_image_mode = new String[]{"CREATIVE_IMAGE_MODE_LARGE","CREATIVE_IMAGE_MODE_LARGE_VERTICAL","CREATIVE_IMAGE_MODE_SMALL"};
+
+        JSONObject filtering = new JSONObject();
+        Map<String,Object> video_material = new HashMap<>();
+        video_material.put("image_mode",video_image_mode);
+
+        Map<String,Object> image_material = new HashMap<>();
+        image_material.put("image_mode",image_image_mode);
+
+        filtering.put("video_material",video_material);
+        //filtering.put("image_material",image_material);
+
+        param.put("filtering",filtering);
+        JSONObject resultObject = JSONObject.parseObject(HttpUtils.httpGet(url, param,header));
+
+        Integer code = resultObject.getInteger("code");
+        if (null == code || !code.equals(0)) {
+            log.error("获取体验版-视频-素材日报接口异常==》accountId:{},message:{}", oauthToken.getAccountId(), resultObject.getString("message"));
+            return;
+        }
+        JSONArray data = resultObject.getJSONObject("data").getJSONArray("list");
+        if (null == data || data.isEmpty()) {
+            log.error("获取体验版-视频-素材数据为空==》accountId:{}", oauthToken.getAccountId());
+            return;
+        }
+        List<ByteDanceNewMaterialReport> list = new ArrayList<>();
+
+        for (int i = 0; i < data.size(); i++) {
+            JSONObject dataObject = data.getJSONObject(i);
+            Long materialId = dataObject.getLong("material_id");
+            String statDatetime = dataObject.getString("stat_datetime");
+            Integer dateTime = DateUtils.getDateInteger(statDatetime);
+            JSONArray data1 = dataObject.getJSONArray("data");
+            for (Object o : data1) {
+                JSONObject j = JSONObject.parseObject(o.toString());
+                ByteDanceNewMaterialReport report = JSONObject.parseObject(j.toJSONString(), ByteDanceNewMaterialReport.class);
+                report.setAdvertiserId(oauthToken.getAccountId());
+                report.setMaterialId(materialId);
+                report.setStatDatetime(dateTime);
+                list.add(report);
+            }
+        }
+
+        bytedanceNewMaterialReportMapper.replaceBytedanceNewMaterialVideoDaily(list);
+
+        page++;
+        int totalPage = resultObject.getJSONObject("data").getJSONObject("page_info").getInteger("total_page");
+        if (page <= totalPage) {
+            bytedanceDailyMaterialReportJobV3Video(oauthToken, yesterda, yesterda1, page, 100);
+        }
+        log.error("获取体验版-视频-素材数据完成==》accountId:{}", oauthToken.getAccountId());
+
+    }
+
+    //头条-体验版素材日报--图片
+    @Override
+    public void bytedanceDailyMaterialReportJobV3Image(OauthToken oauthToken, String yesterda, String yesterda1, int page, int pageSize) throws Exception {
+        log.info("开始获取体验版-图片-素材日报 accountID:{},page:{} date:{}", oauthToken.getAccountId(), page,yesterda);
+        // 请求地址
+        String url = bytedanceApiUrl + BytedanceConstant.BYTEDANCE_V3_REPORT_INTEGRATED_GET;
+        Map<String,Object> param = new HashMap<>();
+        param.put("advertiser_id",oauthToken.getAccountId());
+        param.put("start_date",yesterda);
+        param.put("end_date",yesterda1);
+        param.put("page",page);
+        param.put("page_size",pageSize);
+        //List<String> fields = Arrays.asList("stat_cost");
+        //String fields1 = "[\"stat_cost\",\"show_cnt\",\"image_mode\"]";
+        // fields 入参 为拼接字符串数组形式 与入参 video_image_mode数组 && image_image_mode数组 格式不同
+        String fields = ByteDanceNewMaterialReport.getParamsFields();
+        param.put("fields",fields);
+        param.put("time_granularity","STAT_TIME_GRANULARITY_DAILY");
+        //param.put("group_by","STAT_GROUP_BY_DELIVERY_MODE");
+
+        Map<String,String> header = new HashMap<>();
+        header.put("Access-Token",oauthToken.getAccessToken());
+
+        //String video_image_mode = "[\"CREATIVE_IMAGE_MODE_VIDEO\",\"CREATIVE_IMAGE_MODE_VIDEO_VERTICAL\"]";
+        String[] video_image_mode = new String[]{"CREATIVE_IMAGE_MODE_VIDEO","CREATIVE_IMAGE_MODE_VIDEO_VERTICAL"};
+        //String image_image_mode = "[\"CREATIVE_IMAGE_MODE_LARGE\",\"CREATIVE_IMAGE_MODE_LARGE_VERTICAL\",\"CREATIVE_IMAGE_MODE_SMALL\"]";
+        String[] image_image_mode = new String[]{"CREATIVE_IMAGE_MODE_LARGE","CREATIVE_IMAGE_MODE_LARGE_VERTICAL","CREATIVE_IMAGE_MODE_SMALL"};
+
+        JSONObject filtering = new JSONObject();
+        Map<String,Object> video_material = new HashMap<>();
+        video_material.put("image_mode",video_image_mode);
+
+        Map<String,Object> image_material = new HashMap<>();
+        image_material.put("image_mode",image_image_mode);
+
+//        filtering.put("video_material",video_material);
+        filtering.put("image_material",image_material);
+
+        param.put("filtering",filtering);
+        JSONObject resultObject = JSONObject.parseObject(HttpUtils.httpGet(url, param,header));
+
+        Integer code = resultObject.getInteger("code");
+        if (null == code || !code.equals(0)) {
+            log.error("获取体验版-图片-素材日报接口异常==》accountId:{},message:{}", oauthToken.getAccountId(), resultObject.getString("message"));
+            return;
+        }
+        JSONArray data = resultObject.getJSONObject("data").getJSONArray("list");
+        if (null == data || data.isEmpty()) {
+            log.error("获取体验版-图片-素材数据为空==》accountId:{}", oauthToken.getAccountId());
+            return;
+        }
+        List<ByteDanceNewMaterialReport> list = new ArrayList<>();
+
+        for (int i = 0; i < data.size(); i++) {
+            JSONObject dataObject = data.getJSONObject(i);
+            Long materialId = dataObject.getLong("material_id");
+            String statDatetime = dataObject.getString("stat_datetime");
+            Integer dateTime = DateUtils.getDateInteger(statDatetime);
+            JSONArray data1 = dataObject.getJSONArray("data");
+            for (Object o : data1) {
+                JSONObject j = JSONObject.parseObject(o.toString());
+                ByteDanceNewMaterialReport report = JSONObject.parseObject(j.toJSONString(), ByteDanceNewMaterialReport.class);
+                report.setAdvertiserId(oauthToken.getAccountId());
+                report.setMaterialId(materialId);
+                report.setStatDatetime(dateTime);
+                list.add(report);
+            }
+        }
+
+        bytedanceNewMaterialReportMapper.replaceBytedanceNewMaterialImageDaily(list);
+
+        page++;
+        int totalPage = resultObject.getJSONObject("data").getJSONObject("page_info").getInteger("total_page");
+        if (page <= totalPage) {
+            bytedanceDailyMaterialReportJobV3Image(oauthToken, yesterda, yesterda1, page, 100);
+        }
+        log.error("获取体验版-图片-素材数据完成==》accountId:{}", oauthToken.getAccountId());
+
+    }
+
 }
 }

+ 52 - 1
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceMaterialReportLoadJob.java

@@ -32,7 +32,7 @@ public class BytedanceMaterialReportLoadJob {
 
 
     /**
     /**
      * 获取头条图片素材
      * 获取头条图片素材
-     *
+     *同步图片和视频素材日报
      * @throws Exception
      * @throws Exception
      */
      */
     @XxlJob("bytedanceDailyMaterialReportJob")
     @XxlJob("bytedanceDailyMaterialReportJob")
@@ -66,4 +66,55 @@ public class BytedanceMaterialReportLoadJob {
     }
     }
 
 
 
 
+
+
+
+
+    /**
+     *
+     * 头条-同步体验版素材
+     * @throws Exception
+     */
+    @XxlJob("bytedanceDailyMaterialReportJobV3")
+    public void bytedanceDailyMaterialReportJobV3() 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;
+        }
+        String nowDate = DateUtils.getNowDate("yyyy-MM-dd");
+        String yesterda = DateUtils.getAnotherDay("yyyy-MM-dd", nowDate, -1);
+        String yesterda1 = DateUtils.getAnotherDay("yyyy-MM-dd", nowDate, -2);
+        OauthToken oauthToken = new OauthToken();
+        oauthToken.setAccessToken(token);
+        oauthToken.setAccountId(Long.parseLong(param));
+        dailyExecutorService.submit(
+                new Runnable() {
+                    @Override
+                    public void run() {
+                        try {
+                            materialReportDailyService.bytedanceDailyMaterialReportJobV3Video(oauthToken, yesterda1, yesterda, 1, 100);
+                            materialReportDailyService.bytedanceDailyMaterialReportJobV3Image(oauthToken, yesterda1, yesterda, 1, 100);
+                        }catch (Exception e){
+                            e.printStackTrace();
+                        }
+                    }
+                });
+
+    }
+
+
+
+
+
+
+
+
+
 }
 }