yumeng 5 дней назад
Родитель
Сommit
0a6b9ad696

+ 28 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/data/entity/AdqImageInfo.java

@@ -0,0 +1,28 @@
+package cn.com.ctop.job.adq.data.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 广点通图片素材信息 adq_image_info
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AdqImageInfo {
+    private Long advertiserId;
+    private String imageId;
+    private Integer width;
+    private Integer height;
+    private Long fileSize;
+    private String type;
+    private String signature;
+    private String description;
+    private String sourceSignature;
+    private String previewUrl;
+    private String sourceType;
+    private String imageUsage;
+    private Long createdTime;
+    private Long lastModifiedTime;
+}

+ 142 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/data/entity/AdqMaterialReportDaily.java

@@ -0,0 +1,142 @@
+package cn.com.ctop.job.adq.data.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+/**
+ * 广点通素材日报对象 adq_material_report_daily
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AdqMaterialReportDaily {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 广告主ID
+     */
+    private Long advertiserId;
+
+    /**
+     * 数据起始时间
+     */
+    private Long statTimeDay;
+
+    /**
+     * 素材ID(video_id或image_id)
+     */
+    private String materialId;
+
+    /**
+     * 素材类型 IMAGE/VIDEO
+     */
+    private String materialType;
+
+    /**
+     * 消耗
+     */
+    private BigDecimal cost;
+
+    /**
+     * 展示
+     */
+    private Long viewCount;
+
+    /**
+     * 点击
+     */
+    private Long validClickCount;
+
+    /**
+     * 转化
+     */
+    private Long conversionsCount;
+
+    /**
+     * 深度转化
+     */
+    private Long deepConversionsCount;
+
+    /**
+     * APP激活次数
+     */
+    private Long activatedCount;
+
+    /**
+     * 注册次数
+     */
+    private Long regPv;
+
+    /**
+     * 次日留存次数
+     */
+    private Long retentionCount;
+
+    /**
+     * 视频有效播放次数
+     */
+    private Long videoOuterPlayCount;
+
+    /**
+     * 100%进度播放次数
+     */
+    private Long videoOuterPlay100Count;
+
+    /**
+     * 关键行为转化次数
+     */
+    private Long keyBehaviorConversionsCount;
+
+    /**
+     * 付费次数
+     */
+    private Long purchasePv;
+
+    /**
+     * 付费金额
+     */
+    private BigDecimal purchaseAmount;
+
+    /**
+     * 首次付费人数
+     */
+    private Long firstPayCount;
+
+    /**
+     * 广告变现金额
+     */
+    private Long adMonetizationAmount;
+
+    /**
+     * 广告变现人数
+     */
+    private Long appAdPayingUsers;
+
+    /**
+     * 广告变现次数
+     */
+    private Long incomePvPla;
+
+    /**
+     * 激活首日广告变现金额
+     */
+    private Long incomeVal1;
+
+    /**
+     * 激活首日广告变现人数
+     */
+    private Long adPayingUsersD1;
+
+    /**
+     * 注册首日广告变现次数
+     */
+    private Long incomePv1dPla;
+
+    /**
+     * 3日广告变现金额
+     */
+    private Long incomeVal3;
+}

+ 33 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/data/entity/AdqVideoInfo.java

@@ -0,0 +1,33 @@
+package cn.com.ctop.job.adq.data.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 广点通视频素材信息 adq_video_info
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AdqVideoInfo {
+    private Long advertiserId;
+    private Long videoId;
+    private Integer width;
+    private Integer height;
+    private Integer videoFrames;
+    private Float videoFps;
+    private String videoCodec;
+    private Integer videoBitRate;
+    private String audioCodec;
+    private Integer audioBitRate;
+    private Long fileSize;
+    private String type;
+    private String signature;
+    private String systemStatus;
+    private String description;
+    private String previewUrl;
+    private String keyFrameImageUrl;
+    private Long createdTime;
+    private Long lastModifiedTime;
+}

+ 10 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/data/mapper/AdqMaterialReportMapper.java

@@ -0,0 +1,10 @@
+package cn.com.ctop.job.adq.data.mapper;
+
+import cn.com.ctop.job.adq.data.entity.AdqMaterialReportDaily;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface AdqMaterialReportMapper {
+    void addsMaterialDailyList(@Param("adds") List<AdqMaterialReportDaily> list);
+}

+ 13 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/data/mapper/AdqMediaInfoMapper.java

@@ -0,0 +1,13 @@
+package cn.com.ctop.job.adq.data.mapper;
+
+import cn.com.ctop.job.adq.data.entity.AdqImageInfo;
+import cn.com.ctop.job.adq.data.entity.AdqVideoInfo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface AdqMediaInfoMapper {
+    void batchInsertVideoInfo(@Param("adds") List<AdqVideoInfo> list);
+
+    void batchInsertImageInfo(@Param("adds") List<AdqImageInfo> list);
+}

+ 65 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/data/mapper/xml/AdqMaterialReportMapper.xml

@@ -0,0 +1,65 @@
+<?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.adq.data.mapper.AdqMaterialReportMapper">
+
+    <insert id="addsMaterialDailyList">
+        replace into adq_material_report_daily (
+        advertiser_id,
+        stat_time_day,
+        material_id,
+        material_type,
+        cost,
+        view_count,
+        valid_click_count,
+        conversions_count,
+        deep_conversions_count,
+        activated_count,
+        reg_pv,
+        retention_count,
+        video_outer_play_count,
+        video_outer_play100_count,
+        key_behavior_conversions_count,
+        purchase_pv,
+        purchase_amount,
+        first_pay_count,
+        ad_monetization_amount,
+        app_ad_paying_users,
+        income_pv_pla,
+        income_val_1,
+        ad_paying_users_d1,
+        income_pv_1d_pla,
+        income_val_3
+        )
+        values
+        <foreach collection="adds" item="item" separator=",">
+            (
+            #{item.advertiserId},
+            #{item.statTimeDay},
+            #{item.materialId},
+            #{item.materialType},
+            #{item.cost},
+            #{item.viewCount},
+            #{item.validClickCount},
+            #{item.conversionsCount},
+            #{item.deepConversionsCount},
+            #{item.activatedCount},
+            #{item.regPv},
+            #{item.retentionCount},
+            #{item.videoOuterPlayCount},
+            #{item.videoOuterPlay100Count},
+            #{item.keyBehaviorConversionsCount},
+            #{item.purchasePv},
+            #{item.purchaseAmount},
+            #{item.firstPayCount},
+            #{item.adMonetizationAmount},
+            #{item.appAdPayingUsers},
+            #{item.incomePvPla},
+            #{item.incomeVal1},
+            #{item.adPayingUsersD1},
+            #{item.incomePv1dPla},
+            #{item.incomeVal3}
+            )
+        </foreach>
+    </insert>
+
+</mapper>

+ 91 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/data/mapper/xml/AdqMediaInfoMapper.xml

@@ -0,0 +1,91 @@
+<?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.adq.data.mapper.AdqMediaInfoMapper">
+
+    <insert id="batchInsertVideoInfo">
+        replace into adq_video_info (
+        advertiser_id,
+        video_id,
+        width,
+        height,
+        video_frames,
+        video_fps,
+        video_codec,
+        video_bit_rate,
+        audio_codec,
+        audio_bit_rate,
+        file_size,
+        type,
+        signature,
+        system_status,
+        description,
+        preview_url,
+        key_frame_image_url,
+        created_time,
+        last_modified_time
+        )
+        values
+        <foreach collection="adds" item="item" separator=",">
+            (
+            #{item.advertiserId},
+            #{item.videoId},
+            #{item.width},
+            #{item.height},
+            #{item.videoFrames},
+            #{item.videoFps},
+            #{item.videoCodec},
+            #{item.videoBitRate},
+            #{item.audioCodec},
+            #{item.audioBitRate},
+            #{item.fileSize},
+            #{item.type},
+            #{item.signature},
+            #{item.systemStatus},
+            #{item.description},
+            #{item.previewUrl},
+            #{item.keyFrameImageUrl},
+            #{item.createdTime},
+            #{item.lastModifiedTime}
+            )
+        </foreach>
+    </insert>
+
+    <insert id="batchInsertImageInfo">
+        replace into adq_image_info (
+        advertiser_id,
+        image_id,
+        width,
+        height,
+        file_size,
+        type,
+        signature,
+        description,
+        source_signature,
+        preview_url,
+        source_type,
+        image_usage,
+        created_time,
+        last_modified_time
+        )
+        values
+        <foreach collection="adds" item="item" separator=",">
+            (
+            #{item.advertiserId},
+            #{item.imageId},
+            #{item.width},
+            #{item.height},
+            #{item.fileSize},
+            #{item.type},
+            #{item.signature},
+            #{item.description},
+            #{item.sourceSignature},
+            #{item.previewUrl},
+            #{item.sourceType},
+            #{item.imageUsage},
+            #{item.createdTime},
+            #{item.lastModifiedTime}
+            )
+        </foreach>
+    </insert>
+
+</mapper>

+ 23 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/data/service/IAdqMediaInfoService.java

@@ -0,0 +1,23 @@
+package cn.com.ctop.job.adq.data.service;
+
+public interface IAdqMediaInfoService {
+    /**
+     * 获取视频素材信息并入库(全量)
+     */
+    void getVideoListAll(Long advertiserId, String accessToken);
+
+    /**
+     * 获取视频素材信息并入库(增量-近两天)
+     */
+    void getVideoListIncrement(Long advertiserId, String accessToken);
+
+    /**
+     * 获取图片素材信息并入库(全量)
+     */
+    void getImageListAll(Long advertiserId, String accessToken);
+
+    /**
+     * 获取图片素材信息并入库(增量-近两天)
+     */
+    void getImageListIncrement(Long advertiserId, String accessToken);
+}

+ 221 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/data/service/impl/AdqMediaInfoServiceImpl.java

@@ -0,0 +1,221 @@
+package cn.com.ctop.job.adq.data.service.impl;
+
+import cn.com.ctop.job.adq.data.entity.AdqImageInfo;
+import cn.com.ctop.job.adq.data.entity.AdqVideoInfo;
+import cn.com.ctop.job.adq.data.mapper.AdqMediaInfoMapper;
+import cn.com.ctop.job.adq.data.service.IAdqMediaInfoService;
+import cn.com.ctop.job.adq.data.utils.Check;
+import cn.com.ctop.job.adq.data.utils.HttpUtils;
+import cn.com.ctop.job.adq.utils.RandomStringGenerator;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.time.Instant;
+import java.time.LocalDate;
+import java.time.ZoneId;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class AdqMediaInfoServiceImpl implements IAdqMediaInfoService {
+    @Autowired
+    private AdqMediaInfoMapper adqMediaInfoMapper;
+
+    @Override
+    public void getVideoListAll(Long advertiserId, String accessToken) {
+        log.info("全量拉取视频列表开始,account_id:{}", advertiserId);
+        getVideoList(advertiserId, accessToken, 1, null);
+    }
+
+    @Override
+    public void getVideoListIncrement(Long advertiserId, String accessToken) {
+        long twoDaysAgo = LocalDate.now(ZoneId.of("Asia/Shanghai")).minusDays(2)
+                .atStartOfDay(ZoneId.of("Asia/Shanghai")).toEpochSecond();
+        System.err.println(twoDaysAgo);
+        log.info("增量拉取视频列表开始,account_id:{},起始时间戳:{}", advertiserId, twoDaysAgo);
+        String filtering = "[{\"field\":\"last_modified_time\",\"operator\":\"GREATER_EQUALS\",\"values\":[\"" + twoDaysAgo + "\"]}]";
+        getVideoList(advertiserId, accessToken, 1, filtering);
+    }
+
+    @Override
+    public void getImageListAll(Long advertiserId, String accessToken) {
+        log.info("全量拉取图片列表开始,account_id:{}", advertiserId);
+        getImageList(advertiserId, accessToken, 1, null);
+    }
+
+    @Override
+    public void getImageListIncrement(Long advertiserId, String accessToken) {
+        long twoDaysAgo = LocalDate.now(ZoneId.of("Asia/Shanghai")).minusDays(2)
+                .atStartOfDay(ZoneId.of("Asia/Shanghai")).toEpochSecond();
+        log.info("增量拉取图片列表开始,account_id:{},起始时间戳:{}", advertiserId, twoDaysAgo);
+        String filtering = "[{\"field\":\"last_modified_time\",\"operator\":\"GREATER_EQUALS\",\"values\":[\"" + twoDaysAgo + "\"]}]";
+        getImageList(advertiserId, accessToken, 1, filtering);
+    }
+
+    /**
+     * 获取视频列表(内部递归方法)
+     *
+     * @param filtering 过滤条件JSON字符串,null表示不过滤(全量)
+     */
+    private void getVideoList(Long advertiserId, String accessToken, Integer page, String filtering) {
+        try {
+            Thread.sleep(500);
+            Map<String, Object> paramsMap = new HashMap<>();
+            paramsMap.put("access_token", accessToken);
+            long timestamp = Instant.now().getEpochSecond();
+            paramsMap.put("timestamp", String.valueOf(timestamp));
+            paramsMap.put("nonce", RandomStringGenerator.generateRandomString(32));
+            paramsMap.put("account_id", advertiserId);
+            paramsMap.put("page", page);
+            paramsMap.put("page_size", 100);
+            if (filtering != null) {
+                paramsMap.put("filtering", filtering);
+            }
+
+            String s = HttpUtils.httpGet("https://api.e.qq.com/v3.0/videos/get", paramsMap, null);
+            JSONObject jsonObject = JSONObject.parseObject(s);
+            if (Check.isNull(jsonObject)) {
+                log.error("获取视频列表失败,account_id:{},返回为空", advertiserId);
+                return;
+            }
+
+            Integer code = jsonObject.getInteger("code");
+            if (code != 0) {
+                log.error("获取视频列表失败,account_id:{},返回信息:{}", advertiserId, jsonObject);
+                return;
+            }
+
+            JSONObject data = jsonObject.getJSONObject("data");
+            if (Check.isNull(data)) {
+                return;
+            }
+
+            int totalPage = data.getJSONObject("page_info").getIntValue("total_page");
+            JSONArray list = data.getJSONArray("list");
+            List<AdqVideoInfo> videoList = new ArrayList<>();
+
+            if (!Check.isNull(list)) {
+                for (int i = 0; i < list.size(); i++) {
+                    JSONObject item = list.getJSONObject(i);
+                    AdqVideoInfo video = new AdqVideoInfo();
+                    video.setAdvertiserId(advertiserId);
+                    video.setVideoId(item.getLong("video_id"));
+                    video.setWidth(item.getInteger("width"));
+                    video.setHeight(item.getInteger("height"));
+                    video.setVideoFrames(item.getInteger("video_frames"));
+                    video.setVideoFps(item.getFloat("video_fps"));
+                    video.setVideoCodec(item.getString("video_codec"));
+                    video.setVideoBitRate(item.getInteger("video_bit_rate"));
+                    video.setAudioCodec(item.getString("audio_codec"));
+                    video.setAudioBitRate(item.getInteger("audio_bit_rate"));
+                    video.setFileSize(item.getLong("file_size"));
+                    video.setType(item.getString("type"));
+                    video.setSignature(item.getString("signature"));
+                    video.setSystemStatus(item.getString("system_status"));
+                    video.setDescription(item.getString("description"));
+                    video.setPreviewUrl(item.getString("preview_url"));
+                    video.setKeyFrameImageUrl(item.getString("key_frame_image_url"));
+                    video.setCreatedTime(item.getLong("created_time"));
+                    video.setLastModifiedTime(item.getLong("last_modified_time"));
+                    videoList.add(video);
+                }
+            }
+
+            if (!Check.isNull(videoList)) {
+                adqMediaInfoMapper.batchInsertVideoInfo(videoList);
+            }
+
+            if (page < totalPage) {
+                getVideoList(advertiserId, accessToken, page + 1, filtering);
+            } else {
+                log.info("获取视频列表完成,account_id:{},总页数:{}", advertiserId, totalPage);
+            }
+        } catch (Exception e) {
+            log.error("获取视频列表异常,account_id:{}", advertiserId, e);
+        }
+    }
+
+    /**
+     * 获取图片列表(内部递归方法)
+     *
+     * @param filtering 过滤条件JSON字符串,null表示不过滤(全量)
+     */
+    private void getImageList(Long advertiserId, String accessToken, Integer page, String filtering) {
+        try {
+            Thread.sleep(500);
+            Map<String, Object> paramsMap = new HashMap<>();
+            paramsMap.put("access_token", accessToken);
+            long timestamp = Instant.now().getEpochSecond();
+            paramsMap.put("timestamp", String.valueOf(timestamp));
+            paramsMap.put("nonce", RandomStringGenerator.generateRandomString(32));
+            paramsMap.put("account_id", advertiserId);
+            paramsMap.put("page", page);
+            paramsMap.put("page_size", 100);
+            if (filtering != null) {
+                paramsMap.put("filtering", filtering);
+            }
+
+            String s = HttpUtils.httpGet("https://api.e.qq.com/v3.0/images/get", paramsMap, null);
+            JSONObject jsonObject = JSONObject.parseObject(s);
+            if (Check.isNull(jsonObject)) {
+                log.error("获取图片列表失败,account_id:{},返回为空", advertiserId);
+                return;
+            }
+
+            Integer code = jsonObject.getInteger("code");
+            if (code != 0) {
+                log.error("获取图片列表失败,account_id:{},返回信息:{}", advertiserId, jsonObject);
+                return;
+            }
+
+            JSONObject data = jsonObject.getJSONObject("data");
+            if (Check.isNull(data)) {
+                return;
+            }
+
+            int totalPage = data.getJSONObject("page_info").getIntValue("total_page");
+            JSONArray list = data.getJSONArray("list");
+            List<AdqImageInfo> imageList = new ArrayList<>();
+
+            if (!Check.isNull(list)) {
+                for (int i = 0; i < list.size(); i++) {
+                    JSONObject item = list.getJSONObject(i);
+                    AdqImageInfo image = new AdqImageInfo();
+                    image.setAdvertiserId(advertiserId);
+                    image.setImageId(item.getString("image_id"));
+                    image.setWidth(item.getInteger("width"));
+                    image.setHeight(item.getInteger("height"));
+                    image.setFileSize(item.getLong("file_size"));
+                    image.setType(item.getString("type"));
+                    image.setSignature(item.getString("signature"));
+                    image.setDescription(item.getString("description"));
+                    image.setSourceSignature(item.getString("source_signature"));
+                    image.setPreviewUrl(item.getString("preview_url"));
+                    image.setSourceType(item.getString("source_type"));
+                    image.setImageUsage(item.getString("image_usage"));
+                    image.setCreatedTime(item.getLong("created_time"));
+                    image.setLastModifiedTime(item.getLong("last_modified_time"));
+                    imageList.add(image);
+                }
+            }
+
+            if (!Check.isNull(imageList)) {
+                adqMediaInfoMapper.batchInsertImageInfo(imageList);
+            }
+
+            if (page < totalPage) {
+                getImageList(advertiserId, accessToken, page + 1, filtering);
+            } else {
+                log.info("获取图片列表完成,account_id:{},总页数:{}", advertiserId, totalPage);
+            }
+        } catch (Exception e) {
+            log.error("获取图片列表异常,account_id:{}", advertiserId, e);
+        }
+    }
+}

+ 94 - 0
job-adq/src/main/java/cn/com/ctop/job/adq/handler/AdqMediaInfoJob.java

@@ -0,0 +1,94 @@
+package cn.com.ctop.job.adq.handler;
+
+import cn.com.ctop.job.adq.data.service.IAdqMediaInfoService;
+import cn.com.ctop.job.adq.data.utils.Check;
+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 AdqMediaInfoJob {
+    @Autowired
+    private IAdqMediaInfoService adqMediaInfoService;
+
+    private static ExecutorService mediaExecutorService = Executors.newFixedThreadPool(5);
+
+    /**
+     * 全量拉取视频素材列表(首次使用)
+     * 参数格式: advertiserId_accessToken
+     */
+    @XxlJob("adqVideoListAllJob")
+    public void adqVideoListAllJob() throws Exception {
+        String param = XxlJobHelper.getJobParam();
+        if (Check.isNull(param)) {
+            log.error("adqVideoListAllJob入参为空");
+            return;
+        }
+        String[] s = param.split("_");
+        Long advertiserId = Long.valueOf(s[0]);
+        String accessToken = s[1];
+        mediaExecutorService.submit(() -> adqMediaInfoService.getVideoListAll(advertiserId, accessToken));
+    }
+
+    /**
+     * 增量拉取视频素材列表(近两天修改的数据)
+     * 参数格式: advertiserId_accessToken
+     */
+    @XxlJob("adqVideoListIncrementJob")
+    public void adqVideoListIncrementJob() throws Exception {
+        String param = XxlJobHelper.getJobParam();
+        if (Check.isNull(param)) {
+            log.error("adqVideoListIncrementJob入参为空");
+            return;
+        }
+        String[] s = param.split("_");
+        Long advertiserId = Long.valueOf(s[0]);
+        String accessToken = s[1];
+        mediaExecutorService.submit(() -> adqMediaInfoService.getVideoListIncrement(advertiserId, accessToken));
+    }
+
+    /**
+     * 全量拉取图片素材列表(首次使用)
+     * 参数格式: advertiserId_accessToken
+     */
+    @XxlJob("adqImageListAllJob")
+    public void adqImageListAllJob() throws Exception {
+        String param = XxlJobHelper.getJobParam();
+        if (Check.isNull(param)) {
+            log.error("adqImageListAllJob入参为空");
+            return;
+        }
+        String[] s = param.split("_");
+        Long advertiserId = Long.valueOf(s[0]);
+        String accessToken = s[1];
+        mediaExecutorService.submit(() -> adqMediaInfoService.getImageListAll(advertiserId, accessToken));
+    }
+
+    /**
+     * 增量拉取图片素材列表(近两天修改的数据)
+     * 参数格式: advertiserId_accessToken
+     */
+    @XxlJob("adqImageListIncrementJob")
+    public void adqImageListIncrementJob() throws Exception {
+        String param = XxlJobHelper.getJobParam();
+        if (Check.isNull(param)) {
+            log.error("adqImageListIncrementJob入参为空");
+            return;
+        }
+        String[] s = param.split("_");
+        Long advertiserId = Long.valueOf(s[0]);
+        String accessToken = s[1];
+        mediaExecutorService.submit(() -> adqMediaInfoService.getImageListIncrement(advertiserId, accessToken));
+    }
+}