فهرست منبع

修改代码逻辑

syh 4 سال پیش
والد
کامیت
8aa35fd751
15فایلهای تغییر یافته به همراه476 افزوده شده و 162 حذف شده
  1. 41 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java
  2. 47 4
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  3. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/UserAllocationMapper.java
  4. 12 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/UserAllocationMapper.xml
  5. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/service/IUserAllocationService.java
  6. 5 2
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/UserAllocationServiceImpl.java
  7. 56 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/entity/BytedanceAccountReportTaskRecord.java
  8. 14 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/BytedanceAccountReportTaskRecordMapper.java
  9. 5 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/xml/BytedanceAccountReportTaskRecordMapper.xml
  10. 17 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/IBytedanceAccountReportTaskRecordService.java
  11. 3 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/IBytedanceReportService.java
  12. 3 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/IReportService.java
  13. 32 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/BytedanceAccountReportTaskRecordServiceImpl.java
  14. 172 155
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/BytedanceReportServiceImpl.java
  15. 65 1
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/ReportServiceImpl.java

+ 41 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java

@@ -14,6 +14,8 @@ import cn.com.ctop.kuaishou.modules.graphql.service.IKuaishouWebInterfaceService
 import cn.com.ctop.kuaishou.modules.report.service.IKuaiShouDailyAgentService;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertiserDataService;
 import cn.com.ctop.toutiao.modules.material.service.IBytedanceEffectVideoInfoService;
+import cn.com.ctop.toutiao.modules.report.entity.BytedanceAccountReportTaskRecord;
+import cn.com.ctop.toutiao.modules.report.mapper.BytedanceReportMaterialDailyMapper;
 import cn.com.ctop.toutiao.modules.report.service.*;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -29,11 +31,13 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.annotation.Resource;
 import java.io.IOException;
 import java.io.InputStream;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -94,6 +98,43 @@ public class TestController {
     private IKuaiShouDailyAgentService dailyAgentService;
     @Autowired
     private IKuaishouTemplateService templateService;
+    @Autowired
+    private IBytedanceAccountReportTaskRecordService reportTaskRecordService;
+    @Resource
+    private BytedanceReportMaterialDailyMapper bytedanceReportMaterialDailyMapper;
+
+    @GetMapping("/getBytedanceMatReport")
+    public Map<String,Object>getData(){
+        List<BytedanceAccountReportTaskRecord>  records = reportTaskRecordService.listByParams(100,"ACCOUNT_DAILY");
+        executorService = Executors.newFixedThreadPool(1);
+        CountDownLatch countDownLatch = new CountDownLatch(records.size());
+        records.forEach(record -> executorService.submit(() -> {
+            try {
+//                reportService.getAdvertiserReport(record, CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
+//                log.info("账户数据获取完成:account:{},时间:{}-{}",record.getAccountId(),record.getStartDate(),record.getEndDate());
+                bytedanceReportService.bytedanceMaterialReportV2(record);
+                log.info("素材数据获取完成:account:{},时间:{}-{}",record.getAccountId(),record.getStartDate(),record.getEndDate());
+            } catch (Exception e) {
+
+            } finally {
+                countDownLatch.countDown();
+            }
+        }));
+        try {
+            countDownLatch.await();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        System.out.println("数据获取完成");
+        bytedanceReportMaterialDailyMapper.updateImageReportCode();
+        bytedanceReportMaterialDailyMapper.updateImageReportProjectId();
+        bytedanceReportMaterialDailyMapper.updateImageReportProjectName();
+        bytedanceReportMaterialDailyMapper.updateImageReportPlaneId();
+        bytedanceReportMaterialDailyMapper.updateImageReportPlaneName();
+        Map<String,Object> result =  new HashMap<>();
+        ResultMapUtils.setResultMap(new HashMap<>(),StatusCode.COMMON_SUCCESS);
+        return result;
+    }
 
 
     @GetMapping(value = "/updateTemplate")

+ 47 - 4
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -21,6 +21,8 @@ import cn.com.ctop.oa.modules.service.IWechatCheckinDataService;
 import cn.com.ctop.oa.modules.service.IWechatNoListService;
 import cn.com.ctop.oa.modules.service.IWechatUserListService;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertiserDataService;
+import cn.com.ctop.toutiao.modules.report.entity.BytedanceAccountReportTaskRecord;
+import cn.com.ctop.toutiao.modules.report.mapper.BytedanceReportMaterialDailyMapper;
 import cn.com.ctop.toutiao.modules.report.service.*;
 import com.alibaba.fastjson.JSONArray;
 import lombok.extern.slf4j.Slf4j;
@@ -28,11 +30,13 @@ import org.apache.catalina.User;
 import org.jeecg.common.util.DateUtils;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.openqa.selenium.By;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import javax.annotation.Resource;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
@@ -388,16 +392,55 @@ public class SampleTest {
     @Autowired
     private IRuleKuaiShouPlanService ruleKuaiShouPlanService;
 
+    @Autowired
+    private IBytedanceAccountReportTaskRecordService reportTaskRecordService;
     @Test
     public void execute() {
-        List<UserAllocation>  allocations = allocationService.getByMediaId("3");
+        List<UserAllocation>  allocations = allocationService.listByMediaId("3",0);
         for (UserAllocation allocation:allocations) {
-            CtopOauthToken token = tokenService.getTokenByAccountId(allocation.getAccountId());
-//            load12Data(token);
-            load12AccountData(token);
+            BytedanceAccountReportTaskRecord reportTaskRecord1 = new BytedanceAccountReportTaskRecord(allocation.getAccountId(),"2020-10-01","2020-10-31");
+            reportTaskRecordService.save(reportTaskRecord1);
+            BytedanceAccountReportTaskRecord reportTaskRecord2 = new BytedanceAccountReportTaskRecord(allocation.getAccountId(),"2020-11-01","2020-11-30");
+            reportTaskRecordService.save(reportTaskRecord2);
+            BytedanceAccountReportTaskRecord reportTaskRecord3 = new BytedanceAccountReportTaskRecord(allocation.getAccountId(),"2020-12-01","2020-12-31");
+            reportTaskRecordService.save(reportTaskRecord3);
+        }
+    }
+
+    @Test
+    public void loadBDAccoutData() {
+//        List<BytedanceAccountReportTaskRecord>  records = reportTaskRecordService.listByParams(1,"ACCOUNT_DAILY");
+        List<BytedanceAccountReportTaskRecord>  records = reportTaskRecordService.listByParams(100,"ACCOUNT_DAILY");
+        executorService = Executors.newFixedThreadPool(8);
+        countDownLatch = new CountDownLatch(records.size());
+        records.forEach(record -> executorService.submit(() -> {
+            try {
+//                reportService.getAdvertiserReport(record, CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
+//                log.info("账户数据获取完成:account:{},时间:{}-{}",record.getAccountId(),record.getStartDate(),record.getEndDate());
+                bytedanceReportService.bytedanceMaterialReportV2(record);
+                log.info("素材数据获取完成:account:{},时间:{}-{}",record.getAccountId(),record.getStartDate(),record.getEndDate());
+            } catch (Exception e) {
+
+            } finally {
+                countDownLatch.countDown();
+            }
+        }));
+        try {
+            countDownLatch.await();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
         }
+        System.out.println("数据获取完成");
+        bytedanceReportMaterialDailyMapper.updateImageReportCode();
+        bytedanceReportMaterialDailyMapper.updateImageReportProjectId();
+        bytedanceReportMaterialDailyMapper.updateImageReportProjectName();
+        bytedanceReportMaterialDailyMapper.updateImageReportPlaneId();
+        bytedanceReportMaterialDailyMapper.updateImageReportPlaneName();
     }
 
+    @Resource
+    private BytedanceReportMaterialDailyMapper bytedanceReportMaterialDailyMapper;
+
     private void load12AccountData(CtopOauthToken token) {
         reportService.getAdvertiserReport(token, DateUtils.parseDate("2020-10-01", "yyyy-MM-dd"), DateUtils.parseDate("2020-10-31", "yyyy-MM-dd"), CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
         reportService.getAdvertiserReport(token, DateUtils.parseDate("2020-11-01", "yyyy-MM-dd"), DateUtils.parseDate("2020-11-30", "yyyy-MM-dd"), CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);

+ 2 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/UserAllocationMapper.java

@@ -40,4 +40,6 @@ public interface UserAllocationMapper extends BaseMapper<UserAllocation> {
     List<Long>  queryAccountsByDeleteComment();
 
     String getCompanyNameByUserId(@Param("planId") String planId);
+
+    List<UserAllocation> listByMediaId(@Param("mediaId")String mediaId, @Param("accountStatus")Integer accountStatus);
 }

+ 12 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/UserAllocationMapper.xml

@@ -124,6 +124,18 @@
     <select id="getCompanyNameByUserId" resultType="java.lang.String">
         select company_name from user_company where user_id = #{planId} limit 1
     </select>
+    <select id="listByMediaId" resultType="cn.com.ctop.common.module.entity.UserAllocation">
+        select a.* from ctop_user_allocation a
+        left join ctop_project p on p.id = a.project_id
+        where
+            1=1
+            <if test="null!=accountStatus">
+                and a.account_status = #{accountStatus}
+            </if>
+        <if test="null!=mediaId">
+            and p.media_id = #{mediaId}
+        </if>
+    </select>
 
 
 </mapper>

+ 2 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/IUserAllocationService.java

@@ -26,6 +26,8 @@ public interface IUserAllocationService extends IService<UserAllocation> {
 
     List<UserAllocation> getByMediaId(String mediaId);
 
+    List<UserAllocation> listByMediaId(String mediaId, int accountStatus);
+
     String getAdvertiserIdByAccountId(Long accountId);
 
     List<JSONObject> getAccountListByProject(Long projectId);

+ 5 - 2
module-common/src/main/java/cn/com/ctop/common/module/service/impl/UserAllocationServiceImpl.java

@@ -92,12 +92,15 @@ public class UserAllocationServiceImpl extends ServiceImpl<UserAllocationMapper,
         if ("".equals(mediaId)) {
             queryWrapper.eq("media_id", mediaId);
         }
-        queryWrapper.eq("account_status",0);
-        queryWrapper.orderByDesc("id");
         return this.list(queryWrapper);
     }
 
     @Override
+    public List<UserAllocation> listByMediaId(String mediaId,int accountStatus) {
+        return userAllocationMapper.listByMediaId(mediaId,accountStatus);
+    }
+
+    @Override
     public String getAdvertiserIdByAccountId(Long accountId) {
         return userAllocationMapper.queryAdvertiserId(accountId);
     }

+ 56 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/entity/BytedanceAccountReportTaskRecord.java

@@ -0,0 +1,56 @@
+package cn.com.ctop.toutiao.modules.report.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+/**
+ * 头条账户报表任务执行记录信息
+ * @author jeecg-boot
+ * @date   2021-01-20
+ * @version V1.0
+ */
+@Data
+@TableName("ctop_bytedance_account_report_task_record")
+@EqualsAndHashCode(callSuper = false)
+public class BytedanceAccountReportTaskRecord {
+
+	/**id*/
+	@TableId(type = IdType.AUTO)
+	private Long id;
+	/**accountId*/
+	private Long accountId;
+	/**startDate*/
+	private String startDate;
+	/**endDate*/
+	private String endDate;
+	/**status*/
+	private Integer status;
+	/**createTime*/
+	private Date createTime;
+	/**updateTime*/
+	private Date updateTime;
+	private String type;
+
+	public BytedanceAccountReportTaskRecord(Long accountId, String startDate, String endDate) {
+		this.accountId=accountId;
+		this.startDate = startDate;
+		this.endDate = endDate;
+		this.status = 1;
+		this.type = "ACCOUNT_DAILY";
+		Date now = new Date();
+		this.createTime = now;
+		this.updateTime = now;
+	}
+}

+ 14 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/BytedanceAccountReportTaskRecordMapper.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.toutiao.modules.report.mapper;
+
+import cn.com.ctop.toutiao.modules.report.entity.BytedanceAccountReportTaskRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 头条账户报表任务执行记录信息
+ * @author: jeecg-boot
+ * @date:   2021-01-20
+ * @cersion: V1.0
+ */
+public interface BytedanceAccountReportTaskRecordMapper extends BaseMapper<BytedanceAccountReportTaskRecord> {
+
+}

+ 5 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/mapper/xml/BytedanceAccountReportTaskRecordMapper.xml

@@ -0,0 +1,5 @@
+<?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.toutiao.modules.report.mapper.BytedanceAccountReportTaskRecordMapper">
+
+</mapper>

+ 17 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/IBytedanceAccountReportTaskRecordService.java

@@ -0,0 +1,17 @@
+package cn.com.ctop.toutiao.modules.report.service;
+
+import cn.com.ctop.toutiao.modules.report.entity.BytedanceAccountReportTaskRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * @Description: 头条账户报表任务执行记录信息
+ * @Author: jeecg-boot
+ * @Date:   2021-01-20
+ * @Version: V1.0
+ */
+public interface IBytedanceAccountReportTaskRecordService extends IService<BytedanceAccountReportTaskRecord> {
+
+    List<BytedanceAccountReportTaskRecord> listByParams(Integer status, String reportType);
+}

+ 3 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/IBytedanceReportService.java

@@ -1,6 +1,7 @@
 package cn.com.ctop.toutiao.modules.report.service;
 
 import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.toutiao.modules.report.entity.BytedanceAccountReportTaskRecord;
 import cn.com.ctop.toutiao.modules.report.entity.BytedanceReportMaterialRetry;
 import com.alibaba.fastjson.JSONObject;
 
@@ -38,4 +39,6 @@ public interface IBytedanceReportService {
     List<BytedanceReportMaterialRetry> getRetryList();
 
     int bytedanceVideoMaterialReport(CtopOauthToken token, String startDate, String endDate);
+
+    void bytedanceMaterialReportV2(BytedanceAccountReportTaskRecord record);
 }

+ 3 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/IReportService.java

@@ -1,6 +1,7 @@
 package cn.com.ctop.toutiao.modules.report.service;
 
 import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.toutiao.modules.report.entity.BytedanceAccountReportTaskRecord;
 import com.alibaba.fastjson.JSONObject;
 
 import java.util.Date;
@@ -25,4 +26,6 @@ public interface IReportService {
     void getMaterialReportByPage(CtopOauthToken token, String startDate, String endDate, Integer pageNum);
 
     void loadBytedanceHistoryData(CtopOauthToken token);
+
+    void getAdvertiserReport(BytedanceAccountReportTaskRecord record, String bytedanceReportTypeDaily);
 }

+ 32 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/BytedanceAccountReportTaskRecordServiceImpl.java

@@ -0,0 +1,32 @@
+package cn.com.ctop.toutiao.modules.report.service.impl;
+
+import cn.com.ctop.toutiao.modules.report.entity.BytedanceAccountReportTaskRecord;
+import cn.com.ctop.toutiao.modules.report.mapper.BytedanceAccountReportTaskRecordMapper;
+import cn.com.ctop.toutiao.modules.report.service.IBytedanceAccountReportTaskRecordService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 头条账户报表任务执行记录信息
+ * @author jeecg-boot
+ * @date   2021-01-20
+ * @version V1.0
+ */
+@Service
+public class BytedanceAccountReportTaskRecordServiceImpl extends ServiceImpl<BytedanceAccountReportTaskRecordMapper, BytedanceAccountReportTaskRecord> implements IBytedanceAccountReportTaskRecordService {
+
+    @Override
+    public List<BytedanceAccountReportTaskRecord> listByParams(Integer status, String reportType) {
+        QueryWrapper<BytedanceAccountReportTaskRecord> queryWrapper = new QueryWrapper<>();
+        if(null!=status){
+            queryWrapper.eq("status",status);
+        }
+        if(null!=reportType&&!"".equals(reportType)){
+            queryWrapper.eq("type",reportType);
+        }
+        return this.list(queryWrapper);
+    }
+}

تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 172 - 155
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/BytedanceReportServiceImpl.java


+ 65 - 1
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/ReportServiceImpl.java

@@ -28,6 +28,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
@@ -62,7 +63,7 @@ public class ReportServiceImpl implements IReportService {
     private IBytedanceCreativeDailyReportService creativeDailyReportService;
     @Autowired
     private IBytedanceCreativeHourlyReportService creativeHourlyReportService;
-    @Autowired
+    @Resource
     private BytedanceReportMaterialDailyMapper materialDailyMapper;
     @Autowired
     private IBytedanceReportService bytedanceReportService;
@@ -474,6 +475,58 @@ public class ReportServiceImpl implements IReportService {
         }
     }
 
+    @Override
+    public void getAdvertiserReport(BytedanceAccountReportTaskRecord record, String bytedanceReportTypeDaily) {
+        CtopOauthToken token  = tokenService.getTokenByAccountId(record.getAccountId());
+        if(null==token){
+            return;
+        }
+        var conditions = getTaskReportDTO(token, record.getStartDate(), record.getEndDate(), bytedanceReportTypeDaily);
+        getAdvertiserReportByPageV2(token, conditions,record);
+    }
+
+    @Autowired
+    private IBytedanceAccountReportTaskRecordService recordService;
+
+    private void getAdvertiserReportByPageV2(CtopOauthToken token, ByteDanceAdvertiserReportDTO conditions,BytedanceAccountReportTaskRecord record) {
+        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("头条广告主数据获取异常");
+            return;
+        }
+        Integer code = getObject.getInteger("code");
+        String message = getObject.getString("message");
+        if (null == code || code != 0) {
+            XxlJobHelper.log("头条广告主数据获取异常:{}", message);
+            return;
+        }
+        JSONArray dataArray = getObject.getJSONObject("data").getJSONArray("list");
+        if (null == dataArray || dataArray.isEmpty()) {
+            record.setStatus(100);
+            record.setUpdateTime(new Date());
+            recordService.updateById(record);
+            return;
+        }
+
+        for (int i = 0; i < dataArray.size(); i++) {
+            JSONObject data = dataArray.getJSONObject(i);
+            if (null != conditions.getTimeGranularity() && conditions.getTimeGranularity().equals(CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY)) {
+                BytedanceAdvertiserHourlyReport hourlyReport = new BytedanceAdvertiserHourlyReport(data);
+                advertiserHourlyReportService.saveOrUpdate(hourlyReport);
+            } else {
+                BytedanceAdvertiserDailyReport dailyReport = new BytedanceAdvertiserDailyReport(data);
+                advertiserDailyReportService.saveOrUpdate(dailyReport);
+            }
+        }
+        record.setStatus(100);
+        record.setUpdateTime(new Date());
+        recordService.updateById(record);
+    }
+
     private ByteDanceAdvertiserReportDTO getReportDTO(CtopOauthToken token, Date startDate, Date endDate, String bytedanceReportTypePl) {
         var conditions = new ByteDanceAdvertiserReportDTO();
         conditions.setAdvertiserId(token.getAccountId());
@@ -484,6 +537,17 @@ public class ReportServiceImpl implements IReportService {
         return conditions;
     }
 
+    private ByteDanceAdvertiserReportDTO getTaskReportDTO(CtopOauthToken token, String startDate, String endDate, String bytedanceReportTypePl) {
+        var conditions = new ByteDanceAdvertiserReportDTO();
+        conditions.setAdvertiserId(token.getAccountId());
+        conditions.setStartDate(startDate);
+        conditions.setEndDate(endDate);
+        conditions.setPageSize(1000);
+        conditions.setPage(1);
+        conditions.setTimeGranularity(bytedanceReportTypePl);
+        return conditions;
+    }
+
 
     private void getCreativeReportByPage(CtopOauthToken token, ByteDanceAdvertiserReportDTO conditions, int page) {
         conditions.setPage(page);