Browse Source

获取广告组数据信息

yangzian 3 years ago
parent
commit
86f8813c79

+ 8 - 0
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/data/constant/KuaishouConstant.java

@@ -14,4 +14,12 @@ public class KuaishouConstant {
     public static final String SEND_URL = "http://192.168.0.202:8765/webhook/account_report";
     public static final String VIDEO_LIST = "/rest/openapi/v1/file/ad/video/list";
 
+
+
+
+    //获取广告组信息
+    public static final String AD_UNIT_LIST = "/rest/openapi/v1/ad_unit/list";
+
+
+
 }

+ 422 - 0
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/data/entity/KuaishouAdUnitList.java

@@ -0,0 +1,422 @@
+package cn.com.ctop.job.kuaishou.data.entity;
+
+import cn.com.ctop.job.kuaishou.data.utils.Check;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.google.gson.JsonArray;
+import com.google.gson.annotations.SerializedName;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.Arrays;
+
+/**
+ * 快手广告组信息
+ * zian Y
+ * 2022/1/5
+ **/
+@Data
+@TableName("kuaishou_ad_unit_list")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "kuaishou_ad_unit_list快手广告组信息", description = "快手广告组信息")
+public class KuaishouAdUnitList {
+
+    //广告计划id
+    @SerializedName("campaign_id")
+    private long campaignId;
+    //'账户id'
+    @SerializedName("")
+    private long  advertiserId;
+    //'广告组id'
+    @SerializedName("unit_id")
+    private long unitId;
+    //'广告组名称'
+    @SerializedName("unit_name")
+    private String unitName;
+    //'广告组状态(优先看看这个状态,计算结果)'
+    @SerializedName("status")
+    private int status;
+    //' 投放状态(操作结果)'
+    @SerializedName("put_status")
+    private int putStatus;
+    //'创建渠道'
+    @SerializedName("create_channel")
+    private int createChannel;
+    //'审核拒绝理由'
+    @SerializedName("review_detail")
+    private String reviewDetail;
+    //' 学习期'
+    @SerializedName("study_status")
+    private int studyStatus;
+    //' 赔付状态'
+    @SerializedName("compensate_status")
+    private int compensateStatus;
+    //' 出价类型'
+    @SerializedName("bid_type")
+    private int bidType;
+    //' 出价'
+    @SerializedName("bid")
+    private long bid;
+    //' OCPC出价'
+    @SerializedName("cpa_bid")
+    private long cpaBid;
+    //' 优先低成本是否自动出价'
+    @SerializedName("")
+    private int smartBid;
+    //' 优化目标'
+    @SerializedName("smart_bid")
+    private int ocpxActionType;
+    //' 深度转化目标'
+    @SerializedName("ocpx_action_type")
+    private int deepConversionType;
+    //' 深度转化目标出价'
+    @SerializedName("deep_conversion_bid")
+    private long deepConversionBid;
+    //' 单日预算'
+    @SerializedName("day_budget")
+    private long dayBudget;
+    //'分日预算'
+    @SerializedName("day_budget_schedule")
+    private long dayBudgetSchedule;
+    //' 付费ROI系数'
+    @SerializedName("roi_ratio")
+    private BigDecimal roiRatio;
+    //' 投放方式'
+    @SerializedName("speed")
+    private int speed;
+    //' 投放开始时间'
+    @SerializedName("begin_time")
+    private String beginTime;
+    //' 投放结束时间'
+    @SerializedName("end_time")
+    private String endTime;
+    //'投放时段'
+    @SerializedName("schedule")
+    private String schedule;
+    //'投放时段'
+    @SerializedName("schedule_time")
+    private String scheduleTime;
+    //'广告位'
+    @SerializedName("scene_id")
+    private String sceneId;
+    //' 创意展现方式'
+    @SerializedName("show_mode")
+    private int showMode;
+    //' 创意制作方式'
+    @SerializedName("unit_type")
+    private int unitType;
+    //' 转化目标'
+    @SerializedName("convert_id")
+    private int convertId;
+    //' 优先从系统应用商店下载'
+    @SerializedName("use_app_market")
+    private int useAppMarket;
+    //'应用商店列表'
+    @SerializedName("app_store")
+    private String appStore;
+    //' url类型'
+    @SerializedName("url_type")
+    private int urlType;
+    //' url类型'
+    @SerializedName("web_uri_type")
+    private int webUriType;
+    //' 落地页链接'
+    @SerializedName("url")
+    private String url;
+    //' 调起链接'
+    @SerializedName("schema_uri")
+    private String schemaUri;
+    //' 应用ID'
+    @SerializedName("app_id")
+    private long appId;
+    //' APP图标存储地址'
+    @SerializedName("app_icon_url")
+    private String appIconUrl;
+    //' 应用信息'
+    @SerializedName("diverse_data")
+    private String diverseData;
+    //' 定向数据'
+    @SerializedName("target")
+    private String target;
+    //' 预约广告'
+    @SerializedName("site_type")
+    private int siteType;
+    //' 游戏礼包码(见下)'
+    @SerializedName("gift_data")
+    private String giftData;
+    //' 是否使用落地页前置功能'
+    private String videoLandingPage;
+
+
+    //' 智能定向'
+    @SerializedName("auto_target")
+    private String autoTarget;
+
+    //' 程序化创意2.0智能抽帧'
+    @SerializedName("smart_cover")
+    private String smartCover;
+    //' 程序化创意2.0素材挖掘'
+    @SerializedName("asset_mining")
+    private String assetMining;
+    //' 是否开启自动生成视频'
+    @SerializedName("auto_create_photo")
+    private String autoCreatePhoto;
+
+    //' 最后修改时间'
+    @SerializedName("update_time")
+    private String updateTime;
+    //' 电商关联Id (小店通)'
+    @SerializedName("item_id")
+    private long itemId;
+    //' 小说ID'
+    @SerializedName("fiction_id")
+    private long fictionId;
+    //' 电商广告投放类型(小店通)'
+    @SerializedName("merchant_item_put_type")
+    private int merchantItemPutType;
+    //'是否使用了咨询组件'
+    @SerializedName("consult_id")
+    private long consultId;
+    //' 高级创意开关'
+    @SerializedName("adv_card_option")
+    private int advCardOption;
+    //' 高级创意列表'
+    @SerializedName("adv_card_list")
+    private String advCardList;
+    //' 卡片id'
+    @SerializedName("adv_card_id")
+    private long advCardId;
+    //' 卡片类型'
+    @SerializedName("card_type")
+    private int cardType;
+    //' 图片url'
+    @SerializedName("url")
+    private String imageUrl;
+    //' 标题'
+    @SerializedName("title")
+    private String title;
+    //' 副标题'
+    @SerializedName("sub_title")
+    private String subTitle;
+    //' 原价格(单位:分)'
+    @SerializedName("price")
+    private int price;
+    //' 售卖价(单位:分)'
+    @SerializedName("sale_price")
+    private int salePrice;
+    //@SerializedName("")
+    private String backflowForecast;
+    //' 商品ID,且一旦绑定,不可修改'
+    @SerializedName("backflow_forecast")
+    private long merchandiseId;
+    //' 课程类型'
+    @SerializedName("merchandise_id")
+    private int merchandiseType;
+    //' 试玩素材的横竖适配'
+    @SerializedName("merchandise_type")
+    private int playableOrientation;
+    //' 试玩的url'
+    @SerializedName("playable_url")
+    private String  playableUrl;
+    //' 试玩广告的文件名'
+    @SerializedName("playable_file_name")
+    private String playableFileName;
+    //v' 试玩广告的开关'
+    @SerializedName("playable_switch")
+    private int playableSwitch;
+    //' 试玩 ID'
+    @SerializedName("playable_id")
+    private long playableId;
+    //' 试玩按钮文字内容'
+    @SerializedName("play_button")
+    private String playButton;
+    //' 是否投放开屏广告位
+    @SerializedName("splash_ad_switch")
+    private String splashAdSwitch;
+    //' 商品库ID'
+    @SerializedName("library_id")
+    private int libraryId;
+    //' 商品ID'
+    @SerializedName("outer_id")
+    private String  outerId;
+    //' 商品名称'
+    @SerializedName("product_name")
+    private String productName;
+    //' 商品价格'
+    @SerializedName("product_price")
+    private BigDecimal productPrice;
+    //' 商品主图'
+    @SerializedName("product_image")
+    private String productImage;
+    //' 行为意向-系统优选
+    @SerializedName("intention_target")
+    private String entionTarget;
+
+
+
+    public static KuaishouAdUnitList getAdUnitListInfo(JSONObject unitDetail){
+        KuaishouAdUnitList adUnit = new KuaishouAdUnitList();
+        //广告计划id
+        adUnit.setCampaignId(!unitDetail.containsKey("campaign_id") ? 0L : unitDetail.getLong("campaign_id"));
+        //'账户id'
+        adUnit.setAdvertiserId(!unitDetail.containsKey("advertiser_id") ? 0L : unitDetail.getLong("advertiser_id"));
+        //'广告组id'
+        adUnit.setUnitId(!unitDetail.containsKey("unit_id") ? 0L : unitDetail.getLong("unit_id"));
+        //'广告组名称'
+        adUnit.setUnitName(!unitDetail.containsKey("unit_name") ? "" : unitDetail.getString("unit_name"));
+        //'广告组状态(优先看看这个状态,计算结果)'
+        adUnit.setStatus(!unitDetail.containsKey("status") ? 0 : unitDetail.getIntValue("status"));
+        //' 投放状态(操作结果)'
+        adUnit.setPutStatus(!unitDetail.containsKey("put_status") ? 0 : unitDetail.getIntValue("put_status"));
+        //'创建渠道'
+        adUnit.setCreateChannel(!unitDetail.containsKey("create_channel") ? 0 : unitDetail.getIntValue("create_channel"));
+        //'审核拒绝理由'
+        adUnit.setReviewDetail(!unitDetail.containsKey("review_detail") ? "" : unitDetail.getString("review_detail"));
+        //' 学习期'
+        adUnit.setStudyStatus(!unitDetail.containsKey("study_status") ? 0 : unitDetail.getIntValue("study_status"));
+        //' 赔付状态'
+        adUnit.setCompensateStatus(!unitDetail.containsKey("compensate_status") ? 0 : unitDetail.getIntValue("compensate_status"));
+        //' 出价类型'
+        adUnit.setBidType(!unitDetail.containsKey("bid_type") ? 0 : unitDetail.getIntValue("bid_type"));
+        //' 出价'
+        adUnit.setBid(!unitDetail.containsKey("bid") ? 0L : unitDetail.getLong("bid"));
+        //' OCPC出价'
+        adUnit.setCpaBid(!unitDetail.containsKey("cpa_bid") ? 0L : unitDetail.getLong("cpa_bid"));
+        //' 优先低成本是否自动出价'
+        adUnit.setSmartBid(!unitDetail.containsKey("smart_bid") ? 0 : unitDetail.getIntValue("smart_bid"));
+        //' 优化目标'
+        adUnit.setOcpxActionType(!unitDetail.containsKey("smart_bid") ? 0 : unitDetail.getIntValue("smart_bid"));
+        //' 深度转化目标'
+        adUnit.setDeepConversionType(!unitDetail.containsKey("ocpx_action_type") ? 0 : unitDetail.getIntValue("ocpx_action_type"));
+        //' 深度转化目标出价'
+        adUnit.setDeepConversionBid(!unitDetail.containsKey("") ? 0L : unitDetail.getLong("deep_conversion_bid"));
+        //' 单日预算'
+        adUnit.setDayBudget(!unitDetail.containsKey("day_budget") ? 0L : unitDetail.getLong("day_budget"));
+        //'分日预算'
+        adUnit.setDayBudgetSchedule(Check.isNull(unitDetail.getJSONArray("day_budget_schedule")) ? 0L : Long.parseLong(JSONObject.toJSONString(unitDetail.getJSONArray("day_budget_schedule").get(0))));
+        //' 付费ROI系数'
+        adUnit.setRoiRatio(!unitDetail.containsKey("roi_ratio") ? new BigDecimal(0) : unitDetail.getBigDecimal("roi_ratio"));
+        //' 投放方式'
+        adUnit.setSpeed(!unitDetail.containsKey("speed") ? 0 : unitDetail.getIntValue("speed"));
+        //' 投放开始时间'
+        adUnit.setBeginTime(!unitDetail.containsKey("begin_time") ? "" : unitDetail.getString("begin_time"));
+        //' 投放结束时间'
+        adUnit.setEndTime(!unitDetail.containsKey("end_time") ? "" : unitDetail.getString("end_time"));
+        //'投放时段'
+        adUnit.setSchedule(!unitDetail.containsKey("schedule") ? "" : unitDetail.getString("schedule"));
+        //'投放时段'
+        adUnit.setScheduleTime(!unitDetail.containsKey("schedule_time") ? "" : unitDetail.getString("schedule_time"));
+        //'广告位'
+        adUnit.setSceneId(!unitDetail.containsKey("scene_id") ? "" : unitDetail.getString("scene_id"));
+        //' 创意展现方式'
+        adUnit.setShowMode(!unitDetail.containsKey("show_mode") ? 0 : unitDetail.getIntValue("show_mode"));
+        //' 创意制作方式'
+        adUnit.setUnitType(!unitDetail.containsKey("unit_type") ? 0 : unitDetail.getIntValue("unit_type"));
+        //' 转化目标'
+        adUnit.setConvertId(!unitDetail.containsKey("convert_id") ? 0 : unitDetail.getIntValue("convert_id"));
+        //' 优先从系统应用商店下载'
+        adUnit.setUseAppMarket(!unitDetail.containsKey("use_app_market") ? 0 : unitDetail.getIntValue("use_app_market"));
+        //'应用商店列表'
+        adUnit.setAppStore(!unitDetail.containsKey("app_store") ? "" : unitDetail.getString("app_store"));
+        //' url类型'
+        adUnit.setUrlType(!unitDetail.containsKey("url_type") ? 0 : unitDetail.getIntValue("url_type"));
+        //' url类型'
+        adUnit.setWebUriType(!unitDetail.containsKey("web_uri_type") ? 0 : unitDetail.getIntValue("web_uri_type"));
+        //' 落地页链接'
+        adUnit.setUrl(!unitDetail.containsKey("url") ? "" : unitDetail.getString("url"));
+        //' 调起链接'
+        adUnit.setSchemaUri(!unitDetail.containsKey("schema_uri") ? "" : unitDetail.getString("schema_uri"));
+        //' 应用ID'
+        adUnit.setAppId(!unitDetail.containsKey("app_id") ? 0L : unitDetail.getLong("app_id"));
+        //' APP图标存储地址'
+        adUnit.setAppIconUrl(!unitDetail.containsKey("app_icon_url") ? "" : unitDetail.getString("app_icon_url"));
+        //' 应用信息'
+        adUnit.setDiverseData(!unitDetail.containsKey("diverse_data") ? "" : unitDetail.getString("diverse_data"));
+        //' 定向数据'
+        adUnit.setTarget(!unitDetail.containsKey("target") ? "" : unitDetail.getString("target"));
+        //' 预约广告'
+        adUnit.setSiteType(!unitDetail.containsKey("site_type") ? 0 : unitDetail.getIntValue("site_type"));
+        //' 游戏礼包码(见下)'
+        adUnit.setGiftData(!unitDetail.containsKey("gift_data") ? "" : unitDetail.getString("gift_data"));
+        //' 是否使用落地页前置功能'
+        adUnit.setVideoLandingPage(!unitDetail.containsKey("video_landing_page") ? "" : String.valueOf(!unitDetail.getBoolean("video_landing_page")));
+        //' 智能定向'
+        adUnit.setAutoTarget(!unitDetail.containsKey("auto_target") ? "" : unitDetail.getString("auto_target"));
+        //' 程序化创意2.0智能抽帧'
+        adUnit.setSmartCover(!unitDetail.containsKey("smart_cover") ? "" : String.valueOf(!unitDetail.getBoolean("smart_cover")));
+        //' 程序化创意2.0素材挖掘'
+        adUnit.setAssetMining(!unitDetail.containsKey("asset_mining") ? "" : String.valueOf(!unitDetail.getBoolean("asset_mining")));
+        //' 是否开启自动生成视频'
+        adUnit.setAutoCreatePhoto(!unitDetail.containsKey("auto_create_photo") ? "" : String.valueOf(!unitDetail.getBoolean("auto_create_photo")));
+        //' 最后修改时间'
+        adUnit.setUpdateTime(!unitDetail.containsKey("update_time") ? "" : unitDetail.getString("update_time"));
+        //' 电商关联Id (小店通)'
+        adUnit.setItemId(!unitDetail.containsKey("item_id") ? 0L : unitDetail.getLong("item_id"));
+        //' 小说ID'
+        adUnit.setFictionId(!unitDetail.containsKey("fiction_id") ? 0L : unitDetail.getLong("fiction_id"));
+        //' 电商广告投放类型(小店通)'
+        adUnit.setMerchantItemPutType(!unitDetail.containsKey("merchant_item_put_type") ? 0 : unitDetail.getIntValue("merchant_item_put_type"));
+        //'是否使用了咨询组件'
+        adUnit.setConsultId(!unitDetail.containsKey("consult_id") ? 0L : unitDetail.getLong("consult_id"));
+        //' 高级创意开关'
+        adUnit.setAdvCardOption(!unitDetail.containsKey("adv_card_option") ? 0 : unitDetail.getIntValue("adv_card_option"));
+        //' 高级创意列表'
+        adUnit.setAdvCardList(Check.isNull(unitDetail.getJSONArray("adv_card_list")) ? "" : unitDetail.getJSONArray("adv_card_list").toJavaList(String.class).toString());
+        //' 卡片id'
+
+        adUnit.setAdvCardId(!unitDetail.containsKey("adv_card_id") ? 0L : unitDetail.getLong("adv_card_id"));
+        //' 卡片类型'
+        adUnit.setCardType(!unitDetail.containsKey("card_type") ? 0 : unitDetail.getIntValue("card_type"));
+        //' 图片url'
+        adUnit.setImageUrl(!unitDetail.containsKey("url") ? "" : unitDetail.getString("url"));
+        //' 标题'
+        adUnit.setTitle(!unitDetail.containsKey("title") ? "" : unitDetail.getString("title"));
+        //' 副标题'
+        adUnit.setSubTitle(!unitDetail.containsKey("sub_title") ? "" : unitDetail.getString("sub_title"));
+        //' 原价格(单位:分)'
+        adUnit.setPrice(!unitDetail.containsKey("price") ? 0 : unitDetail.getIntValue("price"));
+        //' 售卖价(单位:分)'
+        adUnit.setSalePrice(!unitDetail.containsKey("sale_price") ? 0 : unitDetail.getIntValue("sale_price"));
+        adUnit.setBackflowForecast(!unitDetail.containsKey("backflow_forecast") ? "" : unitDetail.getString("backflow_forecast"));
+        //' 商品ID,且一旦绑定,不可修改'
+        adUnit.setMerchandiseId(!unitDetail.containsKey("merchandise_id") ? 0L : unitDetail.getLong("merchandise_id"));
+        //' 课程类型'
+        adUnit.setMerchandiseType(!unitDetail.containsKey("merchandise_type") ? 0 : unitDetail.getIntValue("merchandise_type"));
+        //' 试玩素材的横竖适配'
+        adUnit.setPlayableOrientation(!unitDetail.containsKey("playable_orientation") ? 0 : unitDetail.getIntValue("playable_orientation"));
+        //' 试玩的url'
+        adUnit.setPlayableUrl(!unitDetail.containsKey("playable_url") ? "" : unitDetail.getString("playable_url"));
+        //' 试玩广告的文件名'
+        adUnit.setPlayableFileName(!unitDetail.containsKey("playable_file_name") ? "" : unitDetail.getString("playable_file_name"));
+        //v' 试玩广告的开关'
+        adUnit.setPlayableSwitch(!unitDetail.containsKey("playable_switch") ? 0 : unitDetail.getIntValue("playable_switch"));
+        //' 试玩 ID'
+        adUnit.setPlayableId(!unitDetail.containsKey("playable_id") ? 0L : unitDetail.getLong("playable_id"));
+        //' 试玩按钮文字内容'
+        adUnit.setPlayButton(!unitDetail.containsKey("play_button") ? "" : unitDetail.getString("play_button"));
+        //' 是否投放开屏广告位
+        adUnit.setSplashAdSwitch(!unitDetail.containsKey("splash_ad_switch") ? "" : String.valueOf(!unitDetail.getBoolean("splash_ad_switch")));
+        //' 商品库ID'
+        adUnit.setLibraryId(!unitDetail.containsKey("library_id") ? 0 : unitDetail.getIntValue("library_id"));
+        //' 商品ID'
+        adUnit.setOuterId(!unitDetail.containsKey("outer_id") ? "" : unitDetail.getString("outer_id"));
+        //' 商品名称'
+        adUnit.setProductName(!unitDetail.containsKey("product_name") ? "" : unitDetail.getString("product_name"));
+        //' 商品价格'
+        adUnit.setProductPrice(!unitDetail.containsKey("product_price") ? new BigDecimal(0) : unitDetail.getBigDecimal("product_price"));
+        //'商品主图
+        adUnit.setProductImage(!unitDetail.containsKey("product_image") ? "" : unitDetail.getString("product_image"));
+        //' 行为意向-系统优选
+        adUnit.setEntionTarget(!unitDetail.containsKey("intention_target") ? "" : unitDetail.getString("intention_target"));
+
+        return adUnit;
+    }
+
+
+
+}

+ 22 - 0
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/data/mapper/AdUnitReportMapper.java

@@ -0,0 +1,22 @@
+package cn.com.ctop.job.kuaishou.data.mapper;
+
+import cn.com.ctop.job.kuaishou.data.entity.KuaishouAccountReportDaily;
+import cn.com.ctop.job.kuaishou.data.entity.KuaishouAdUnitList;
+import cn.com.ctop.job.kuaishou.data.entity.OauthToken;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 快手-广告组信息
+ *
+ * @author jeecg-boot 2021-09-07
+ * @version V1.0
+ */
+public interface AdUnitReportMapper extends BaseMapper<KuaishouAdUnitList> {
+
+  //批量插入 快手-广告组信息
+  void replaceBatchKsAdUnit(@Param("addList") List<KuaishouAdUnitList> addList);
+
+}

+ 168 - 0
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/data/mapper/xml/AdUnitReportMapper.xml

@@ -0,0 +1,168 @@
+<?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.kuaishou.data.mapper.AdUnitReportMapper">
+
+   <insert id="replaceBatchKsAdUnit">
+       replace into kuaishou_ad_unit_list(
+       `campaign_id`,
+       `advertiser_id`,
+       `unit_id`,
+       `unit_name`,
+       `status`,
+       `put_status`,
+       `create_channel`,
+       `review_detail`,
+       `study_status`,
+       `compensate_status`,
+       `bid_type`,
+       `bid`,
+       `cpa_bid`,
+       `smart_bid`,
+       `ocpx_action_type`,
+       `deep_conversion_type`,
+       `deep_conversion_bid`,
+       `day_budget`,
+       `day_budget_schedule`,
+       `roi_ratio`,
+       `speed`,
+       `begin_time`,
+       `end_time`,
+       `schedule`,
+       `schedule_time`,
+       `scene_id`,
+       `show_mode`,
+       `unit_type`,
+       `convert_id`,
+       `use_app_market`,
+       `app_store`,
+       `url_type`,
+       `web_uri_type`,
+       `url`,
+       `schema_uri`,
+       `app_id`,
+       `app_icon_url`,
+       `diverse_data`,
+       `target`,
+       `site_type`,
+       `gift_data`,
+       `video_landing_page`,
+       `auto_target`,
+       `smart_cover`,
+       `asset_mining`,
+       `auto_create_photo`,
+       `update_time`,
+       `item_id`,
+       `fiction_id`,
+       `merchant_item_put_type`,
+       `consult_id`,
+       `adv_card_option`,
+       `adv_card_list`,
+       `adv_card_id`,
+       `card_type`,
+       `image_url`,
+       `title`,
+       `sub_title`,
+       `price`,
+       `sale_price`,
+       `backflow_forecast`,
+       `merchandise_id`,
+       `merchandise_type`,
+       `playable_orientation`,
+       `playable_url`,
+       `playable_file_name`,
+       `playable_switch`,
+       `playable_id`,
+       `play_button`,
+       `splash_ad_switch`,
+       `library_id`,
+       `outer_id`,
+       `product_name`,
+       `product_price`,
+       `product_image`,
+       `ention_target`
+       )
+       values
+       <foreach collection="addList" item="add" separator=",">
+           (
+           #{add.campaignId},
+           #{add.advertiserId},
+           #{add.unitId},
+           #{add.unitName},
+           #{add.status},
+           #{add.putStatus},
+           #{add.createChannel},
+           #{add.reviewDetail},
+           #{add.studyStatus},
+           #{add.compensateStatus},
+           #{add.bidType},
+           #{add.bid},
+           #{add.cpaBid},
+           #{add.smartBid},
+           #{add.ocpxActionType},
+           #{add.deepConversionType},
+           #{add.deepConversionBid},
+           #{add.dayBudget},
+           #{add.dayBudgetSchedule},
+           #{add.roiRatio},
+           #{add.speed},
+           #{add.beginTime},
+           #{add.endTime},
+           #{add.schedule},
+           #{add.scheduleTime},
+           #{add.sceneId},
+           #{add.showMode},
+           #{add.unitType},
+           #{add.convertId},
+           #{add.useAppMarket},
+           #{add.appStore},
+           #{add.urlType},
+           #{add.webUriType},
+           #{add.url},
+           #{add.schemaUri},
+           #{add.appId},
+           #{add.appIconUrl},
+           #{add.diverseData},
+           #{add.target},
+           #{add.siteType},
+           #{add.giftData},
+           #{add.videoLandingPage},
+           #{add.autoTarget},
+           #{add.smartCover},
+           #{add.assetMining},
+           #{add.autoCreatePhoto},
+           #{add.updateTime},
+           #{add.itemId},
+           #{add.fictionId},
+           #{add.merchantItemPutType},
+           #{add.consultId},
+           #{add.advCardOption},
+           #{add.advCardList},
+           #{add.advCardId},
+           #{add.cardType},
+           #{add.imageUrl},
+           #{add.title},
+           #{add.subTitle},
+           #{add.price},
+           #{add.salePrice},
+           #{add.backflowForecast},
+           #{add.merchandiseId},
+           #{add.merchandiseType},
+           #{add.playableOrientation},
+           #{add.playableUrl},
+           #{add.playableFileName},
+           #{add.playableSwitch},
+           #{add.playableId},
+           #{add.playButton},
+           #{add.splashAdSwitch},
+           #{add.libraryId},
+           #{add.outerId},
+           #{add.productName},
+           #{add.productPrice},
+           #{add.productImage},
+           #{add.entionTarget}
+           )
+       </foreach>
+
+
+   </insert>
+</mapper>

+ 19 - 0
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/data/service/IAdUnitReportService.java

@@ -0,0 +1,19 @@
+package cn.com.ctop.job.kuaishou.data.service;
+
+import cn.com.ctop.job.kuaishou.data.entity.KuaishouAdUnitList;
+import cn.com.ctop.job.kuaishou.data.entity.OauthToken;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.PrimitiveIterator;
+
+/**
+ * token信息
+ *
+ * @author jeecg-boot 2021-09-07
+ * @version V1.0
+ */
+public interface IAdUnitReportService extends IService<KuaishouAdUnitList> {
+
+    public void getAdUnitReport(Long advertiserId, String accessToken, String startDate, String endDate, int page);
+
+}

+ 118 - 0
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/data/service/impl/AdUnitReportServiceImpl.java

@@ -0,0 +1,118 @@
+package cn.com.ctop.job.kuaishou.data.service.impl;
+
+import cn.com.ctop.job.kuaishou.data.constant.KuaishouConstant;
+import cn.com.ctop.job.kuaishou.data.entity.KuaishouAccountReportDaily;
+import cn.com.ctop.job.kuaishou.data.entity.KuaishouAdUnitList;
+import cn.com.ctop.job.kuaishou.data.entity.KuaishouVideoList;
+import cn.com.ctop.job.kuaishou.data.entity.OauthToken;
+import cn.com.ctop.job.kuaishou.data.mapper.AdUnitReportMapper;
+import cn.com.ctop.job.kuaishou.data.mapper.OauthTokenMapper;
+import cn.com.ctop.job.kuaishou.data.service.IAdUnitReportService;
+import cn.com.ctop.job.kuaishou.data.service.IOauthTokenService;
+import cn.com.ctop.job.kuaishou.data.utils.Check;
+import cn.com.ctop.job.kuaishou.data.utils.HttpUtils;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * token信息
+ *
+ * @author jeecg-boot 2021-09-07
+ * @version V1.0
+ */
+@Slf4j
+@Service
+public class AdUnitReportServiceImpl extends ServiceImpl<AdUnitReportMapper, KuaishouAdUnitList> implements IAdUnitReportService {
+
+    @Value("${api.kuaishou.postUrl}")
+    private String postUrl;
+
+    @Resource
+    private OauthTokenMapper tokenMapper;
+
+    @Resource
+    private AdUnitReportMapper adUnitReportMapper;
+
+
+  /**
+   * 获取广告组信息
+   * @param advertiserId
+   * @param accessToken
+   * @param startDate
+   * @param endDate
+   * @param page
+   */
+    @Override
+    public void getAdUnitReport(Long advertiserId, String accessToken, String startDate, String endDate, int page) {
+      log.info("accountId:=={}=====获取广告组数据信息====page--{}===》》》》",advertiserId,page);
+      Integer page_size = 500;
+
+      Map<String, String> headers = new HashMap<>();
+      headers.put("Access-Token", accessToken);
+
+      Map<String, Object> param = new HashMap<>();
+      param.put("advertiser_id", advertiserId);
+      param.put("page_size", page_size);
+      param.put("page", page);
+
+      if (!Check.isNull(startDate) && !Check.isNull(endDate)) {
+        param.put("start_date", startDate);
+        param.put("end_date", endDate);
+      }
+      String result = HttpUtils.httpPostRequest(postUrl + KuaishouConstant.AD_UNIT_LIST, param, headers);
+
+      JSONObject resultJson = JSONObject.parseObject(result);
+      if (Check.isNull(resultJson)) {
+        log.info("accountId:=={}=====广告组数据信息====暂无====》》》》",advertiserId);
+        return;
+      }
+      Integer code = resultJson.getInteger("code");
+      String message = resultJson.getString("message");
+      if (null == code || code != 0) {
+        log.error("获取快手广告组数据异常:{},accountId:{}", message, advertiserId);
+        return;
+      }
+      JSONArray details = resultJson.getJSONObject("data").getJSONArray("details");
+      if (null == details || details.size() <= 0) {
+        log.info("快手广告组数据为空=》accountId:{}", advertiserId);
+        return;
+      }
+
+      List<KuaishouAdUnitList> ksAdUnitList = new ArrayList<>();
+      for (Object detail : details) {
+        JSONObject unitDetail = (JSONObject) detail;
+        unitDetail.put("advertiser_id",advertiserId);
+        KuaishouAdUnitList ksAdunit = KuaishouAdUnitList.getAdUnitListInfo(unitDetail);
+
+        ksAdUnitList.add(ksAdunit);
+      }
+
+      if (!Check.isNull(ksAdUnitList)) {
+        adUnitReportMapper.replaceBatchKsAdUnit(ksAdUnitList);
+      }
+
+      //是否有下一页
+      Boolean toGet = true;
+      if (details.size() < page_size) {
+        toGet = false;
+      }
+      if (toGet) {
+        getAdUnitReport(advertiserId, accessToken, startDate, endDate, page + 1);
+      } else {
+        log.info("快手广告组数据获取完成:accountId:{}", advertiserId);
+      }
+    }
+
+
+}

+ 68 - 0
job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/AdUnitReportJob.java

@@ -0,0 +1,68 @@
+package cn.com.ctop.job.kuaishou.handler;
+
+import cn.com.ctop.job.kuaishou.data.service.IAdUnitReportService;
+import cn.com.ctop.job.kuaishou.data.service.IKuaishouMaterialVideoReportDailyService;
+import cn.com.ctop.job.kuaishou.data.service.IKuaishouMaterialVideoReportHourlyService;
+import cn.com.ctop.job.kuaishou.data.service.IOauthTokenService;
+import cn.com.ctop.job.kuaishou.data.utils.Check;
+import cn.com.ctop.job.kuaishou.data.utils.DateUtils;
+import com.xxl.job.core.context.XxlJobHelper;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+@Slf4j
+@Component
+public class AdUnitReportJob {
+
+  @Autowired
+  private IOauthTokenService tokenService;
+
+  @Autowired
+  private IAdUnitReportService adUnitReportService;
+
+
+
+  private static ExecutorService dailyExecutorService = Executors.newFixedThreadPool(3);
+  private static ExecutorService hourExecutorService = Executors.newFixedThreadPool(3);
+
+
+  /**
+   * 获取广告组信息
+   * 前一天
+   *
+   * @throws Exception
+   */
+  @XxlJob("AdUnitListReport")
+  public void AdUnitListReport(){
+    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 date = DateUtils.getAnotherDay("yyyy-MM-dd", DateUtils.getNowDate("yyyy-MM-dd"), -1);
+    dailyExecutorService.submit(
+        new Runnable() {
+          @Override
+          public void run() {
+            try {
+              adUnitReportService.getAdUnitReport(Long.valueOf(param),token, date, date, 1);
+            }catch (Exception e){
+              log.info(String.valueOf(e));;
+            }
+          }
+        });
+  }
+
+}