Selaa lähdekoodia

优化修改头条定时任务

syh 5 vuotta sitten
vanhempi
commit
de443ae840
30 muutettua tiedostoa jossa 594 lisäystä ja 122 poistoa
  1. 0 22
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ActorController.java
  2. 0 6
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CrawlerController.java
  3. 8 5
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialPartController.java
  4. 114 8
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java
  5. 0 19
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/UReportFileBindUserController.java
  6. 61 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceAdvertiserDataLoadJob.java
  7. 11 16
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceMaterialsLoadJob.java
  8. 26 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedancePlanHourlyReportLoadJob.java
  9. 0 7
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/OceanengineJob.java
  10. 3 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/mq/Receiver.java
  11. 3 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/mq/Sender.java
  12. 0 6
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/PerformanceServiceImpl2.java
  13. 0 2
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  14. 4 8
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/app/service/impl/KuaishouAppServiceImpl.java
  15. 1 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouInterfaceServiceImpl.java
  16. 1 1
      module-report/src/main/java/cn/com/ctop/bytedance/entity/BytedancePlanHourlyReport.java
  17. 4 0
      module-report/src/main/java/cn/com/ctop/bytedance/mapper/BytedancePlanDailyReportMapper.java
  18. 4 0
      module-report/src/main/java/cn/com/ctop/bytedance/mapper/BytedancePlanHourlyReportMapper.java
  19. 130 1
      module-report/src/main/java/cn/com/ctop/bytedance/mapper/xml/BytedancePlanDailyReportMapper.xml
  20. 132 1
      module-report/src/main/java/cn/com/ctop/bytedance/mapper/xml/BytedancePlanHourlyReportMapper.xml
  21. 4 0
      module-report/src/main/java/cn/com/ctop/bytedance/service/IBytedancePlanDailyReportService.java
  22. 3 0
      module-report/src/main/java/cn/com/ctop/bytedance/service/IBytedancePlanHourlyReportService.java
  23. 10 1
      module-report/src/main/java/cn/com/ctop/bytedance/service/impl/BytedancePlanDailyReportServiceImpl.java
  24. 9 0
      module-report/src/main/java/cn/com/ctop/bytedance/service/impl/BytedancePlanHourlyReportServiceImpl.java
  25. 12 7
      module-report/src/main/java/cn/com/ctop/bytedance/service/impl/ReportServiceImpl.java
  26. 4 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/mapper/ByteDanceVideoInfoMapper.java
  27. 34 1
      module-toutiao/src/main/java/cn/com/ctop/toutiao/mapper/xml/ByteDanceVideoInfoMapper.xml
  28. 3 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/service/IByteDanceVideoInfoService.java
  29. 4 5
      module-toutiao/src/main/java/cn/com/ctop/toutiao/service/impl/ByteDanceAdvertiserDataServiceImpl.java
  30. 9 0
      module-toutiao/src/main/java/cn/com/ctop/toutiao/service/impl/ByteDanceVideoInfoServiceImpl.java

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

@@ -293,26 +293,4 @@ public class ActorController {
 
         return result;
     }
-
-    public static String longestCommonPrefix(String[] strs) {
-        if (strs.length == 0) {
-            return "";
-        }
-        String prefix = strs[0];
-        for (int i = 1; i < strs.length; i++) {
-            while (strs[i].indexOf(prefix) != 0) {
-                prefix = prefix.substring(0, prefix.length() - 1);
-                if (prefix.isEmpty()) {
-                    return "";
-                }
-            }
-        }
-        return prefix;
-    }
-
-
-    public static void main(String[] args) {
-        String[] strings = {"abcd", "adc", "ab", "a"};
-        System.out.println(longestCommonPrefix(strings));
-    }
 }

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

@@ -17,10 +17,4 @@ public class CrawlerController {
     public Map<String, Object> runTask(@RequestBody KuaishouAppiumJobVO jobVO) {
         return crawlerService.startJob(jobVO);
     }
-
-    public static void main(String[] args) {
-        int a = 2;
-        int b = 7791;
-        System.out.println(a & b);
-    }
 }

+ 8 - 5
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialPartController.java

@@ -1,13 +1,14 @@
 package org.jeecg.modules.ctop.controller;
 
-import cn.com.ctop.common.module.entity.*;
+import cn.com.ctop.common.module.entity.MaterialInfo;
+import cn.com.ctop.common.module.entity.VideoMerge;
+import cn.com.ctop.common.module.entity.VideoMergeTask;
+import cn.com.ctop.common.module.entity.VideoPart;
 import cn.com.ctop.common.module.service.IMaterialInfoService;
 import cn.com.ctop.common.module.service.IVideoMergeTaskService;
 import cn.com.ctop.common.module.service.IVideoPartService;
 import cn.com.ctop.common.module.utils.MpsUtils;
-import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
 import com.aliyuncs.mts.model.v20140618.QueryJobListResponse;
 import com.google.gson.Gson;
 import io.swagger.annotations.Api;
@@ -18,7 +19,10 @@ import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.vo.LoginUser;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
@@ -54,7 +58,6 @@ public class MaterialPartController {
                     MaterialInfo materialInfo = materialInfoService.getMaterialInfoByCode(part);
                     String url = materialInfo.getUrl();
                     int i = url.indexOf("/",10);
-                    System.out.println(url.substring(i+1,url.length()));
                     partUrlList.add(url.substring(i+1,url.length()));
                 }
                 String startUrl = start.getUrl();

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

@@ -1,7 +1,9 @@
 package org.jeecg.modules.ctop.controller;
 
 import cn.com.ctop.bytedance.entity.BytedancePlanDailyReport;
+import cn.com.ctop.bytedance.entity.BytedancePlanHourlyReport;
 import cn.com.ctop.bytedance.service.IBytedancePlanDailyReportService;
+import cn.com.ctop.bytedance.service.IBytedancePlanHourlyReportService;
 import cn.com.ctop.bytedance.service.IReportService;
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.entity.UserAllocation;
@@ -27,6 +29,7 @@ import org.springframework.web.bind.annotation.*;
 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;
 
@@ -424,16 +427,8 @@ public class TestController {
                 public void run() {
                     //1: 获取广告主信息数据
                     reportService.getAdvertiserReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
-                    //2:获取广告组信息数据
-                    //reportService.getAdvertiserCampaignReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
-                    //3:获取广告计划信息数据
-                    //reportService.getAdvertiserPlanReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
-                    //4: 获取广告创意信息数据
-                    //reportService.getAdvertiserCreativeReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
                 }
-
             });
-
         });
         log.info("头条时报数据获取结束");
         ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
@@ -517,4 +512,115 @@ public class TestController {
         ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
         return result;
     }
+
+    //线程计数器
+    static CountDownLatch countDownLatch = null;
+
+    @GetMapping("getHourLyYddData")
+    public Map<String, Object> getData() {
+        log.info("头条时报数据获取开始");
+        Date getDate = new Date();
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
+        String hour = simpleDateFormat.format(getDate);
+        if (null != hour && "00".equals(hour)) {
+            getDate = DateUtils.addDay(getDate, -1);
+        }
+        //1:查询当日计划时报数据
+        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
+        Date finalGetDate = getDate;
+        executorService = Executors.newFixedThreadPool(10);
+        countDownLatch = new CountDownLatch(tokens.size());
+        tokens.forEach(token -> {
+            //1:获取当日广告计划数据
+            executorService.submit(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        reportService.getAdvertiserPlanReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                        countDownLatch.countDown();
+                    }
+                }
+            });
+        });
+        try {
+            countDownLatch.await();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        //清洗关于缘多多数据
+        formatData(113, finalGetDate);
+        //清洗关于交友数据
+        formatData(112, finalGetDate);
+        //清洗关于附近约会数据
+        formatData(222, finalGetDate);
+        log.info("头条计划时报数据获取完成");
+        Map<String, Object> result = new HashMap<>();
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
+        return result;
+    }
+
+    private void formatData(Integer projectId, Date finalGetDate) {
+        QueryWrapper<UserAllocation> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("project_id", projectId);
+        List<UserAllocation> fjyhAllocations = userAllocationService.list(queryWrapper);
+        if (null != fjyhAllocations && fjyhAllocations.size() > 0) {
+            fjyhAllocations.forEach(allocation -> {
+                //根据accountId和时间,查询相关的时报报表信息
+                QueryWrapper<BytedancePlanHourlyReport> accountWrapper = new QueryWrapper<>();
+                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+                String dateString = dateFormat.format(finalGetDate);
+                accountWrapper.eq("advertiser_id", allocation.getAccountId())
+                        .eq("stat_datetime", dateString)
+                ;
+                List<BytedancePlanHourlyReport> bytedancePlanHourlyReports = planHourlyReportService.list(accountWrapper);
+                if (null != bytedancePlanHourlyReports && bytedancePlanHourlyReports.size() > 0) {
+                    bytedancePlanHourlyReports.forEach(report -> {
+                        String adName = report.getAdName();
+                        String[] tags = adName.split("-");
+                        report.setChannelCode(tags[0]);
+                        planHourlyReportService.updateById(report);
+                    });
+                }
+            });
+        }
+    }
+
+    @Autowired
+    private IBytedancePlanHourlyReportService planHourlyReportService;
+
+    @GetMapping("loadVideoData")
+    public Map<String, Object> loadVideoData() {
+        log.info("素材数据获取开始");
+        //1:查询当日计划时报数据
+        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
+        executorService = Executors.newFixedThreadPool(10);
+        countDownLatch = new CountDownLatch(tokens.size());
+        tokens.forEach(token -> {
+            //1:获取当日广告计划数据
+            executorService.submit(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        advertiserDataService.getMaterialList(token);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                        countDownLatch.countDown();
+                    }
+                }
+            });
+        });
+        try {
+            countDownLatch.await();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        log.info("头条素材数据获取完成");
+        Map<String, Object> result = new HashMap<>();
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
+        return result;
+    }
 }

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

@@ -3,7 +3,6 @@ package org.jeecg.modules.ctop.controller;
 import cn.com.ctop.bytedance.service.IBytedancePlanDailyReportService;
 import cn.com.ctop.common.module.utils.ResultMapUtils;
 import cn.com.ctop.common.module.utils.StatusCode;
-import cn.com.ctop.common.module.utils.StringUtils;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -55,24 +54,6 @@ public class UReportFileBindUserController {
             return result;
         }
     }
-    public static void main(String[] args) {
-        String data = "yk_xxl_jrtt_sxdx03hctddxc06_17\t,\t4\t,\t1\t|\n" +
-                "yk_xxl_jrtt_sxdx03hctddxc06_19\t,\t17\t,\t14\t|\n" +
-                "yk_xxl_jrtt_sxdx03hctddxc06_23\t,\t1\t,\t1\t|\n" +
-                "yk_xxl_jrtt_sxdx03hctddxc06_25\t,\t2\t,\t2\t|\n" +
-                "yk_xxl_jrtt_sxdx03hctddxc06_26\t,\t2\t,\t1\t|\n" +
-                "yk_xxl_jrtt_sxdx03hctddxc07_02\t,\t4\t,\t2\t|\n" +
-                "yk_xxl_jrtt_sxdx03hctddxc07_10\t,\t1\t,\t1\t|\n" +
-                "yk_xxl_jrtt_sxdx03hctddxc07_11\t,\t1\t,\t1\t|\n" +
-                "yk_xxl_jrtt_sxdx03hctddxc07_12\t,\t2\t,\t1\t|\n" +
-                "yk_xxl_jrtt_sxdx03hctddxc07_15\t,\t1\t,\t1\t|\n" +
-                "yk_xxl_jrtt_sxdx03hctddxc07_28\t,\t1\t,\t0\t|\n" +
-                "yk_xxl_jrtt_sxdx03hctddxc07_45\t,\t7\t,\t3\t|\n" +
-                "yk_xxl_jrtt_sxdx03hctddxc07_46\t,\t16\t,\t11\t|\n" +
-                "yk_xxl_jrtt_sxdx03hctddxc07_48\t,\t1\t,\t0\t";
-        System.out.println(StringUtils.replaceBlank(data));
-
-    }
     /**
      * 分页列表查询
      *

+ 61 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceAdvertiserDataLoadJob.java

@@ -0,0 +1,61 @@
+package org.jeecg.modules.ctop.job;
+
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.utils.CtopAdConstant;
+import cn.com.ctop.toutiao.service.IByteDanceAdvertiserDataService;
+import cn.com.ctop.toutiao.service.IByteDanceCreativeService;
+import lombok.extern.slf4j.Slf4j;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * 素材数据获取
+ */
+@Slf4j
+public class BytedanceAdvertiserDataLoadJob implements Job {
+    @Autowired
+    private ICtopOauthTokenService tokenService;
+    static ExecutorService executorService = null;
+    @Autowired
+    private IByteDanceAdvertiserDataService advertiserDataService;
+    @Autowired
+    private IByteDanceCreativeService creativeService;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        Date getDate = new Date();
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        String dateString = dateFormat.format(getDate);
+        //1:查询当日数据
+        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
+        executorService = Executors.newFixedThreadPool(5);
+        tokens.forEach(token -> {
+            executorService.submit(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        //1:获取当日广告组数据
+                        advertiserDataService.getAdvertiserCampaign(token.getAccountId() + "", "", dateString);
+                        //2:获取当日广告计划数据
+                        advertiserDataService.getAdvertiserPlan(token, "", dateString, null);
+                        //3:获取当日创意数据
+                        creativeService.getAdvertiserCreative(token.getAccountId() + "", "", dateString);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                    }
+                }
+            });
+        });
+        log.info("物料数据同步完成");
+    }
+}

+ 11 - 16
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceMaterialsLoadJob.java

@@ -4,16 +4,14 @@ import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
 import cn.com.ctop.common.module.utils.CtopAdConstant;
 import cn.com.ctop.toutiao.service.IByteDanceAdvertiserDataService;
-import cn.com.ctop.toutiao.service.IByteDanceCreativeService;
 import lombok.extern.slf4j.Slf4j;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import java.text.SimpleDateFormat;
-import java.util.Date;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
@@ -22,39 +20,36 @@ public class BytedanceMaterialsLoadJob implements Job {
     @Autowired
     private ICtopOauthTokenService tokenService;
     static ExecutorService executorService = null;
+    //线程计数器
+    static CountDownLatch countDownLatch = null;
     @Autowired
     private IByteDanceAdvertiserDataService advertiserDataService;
-    @Autowired
-    private IByteDanceCreativeService creativeService;
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
-        Date getDate = new Date();
-        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-        String dateString = dateFormat.format(getDate);
-        //1:查询当日数据
         List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
         executorService = Executors.newFixedThreadPool(4);
+        countDownLatch = new CountDownLatch(tokens.size());
         tokens.forEach(token -> {
             executorService.submit(new Runnable() {
                 @Override
                 public void run() {
                     try {
-                        //1:获取当日广告组数据
-                        advertiserDataService.getAdvertiserCampaign(token.getAccountId() + "", "", dateString);
-                        //2:获取当日广告计划数据
-                        advertiserDataService.getAdvertiserPlan(token, "", dateString, null);
-                        //3:获取当日创意数据
-                        creativeService.getAdvertiserCreative(token.getAccountId() + "", "", dateString);
-                        //4:获取全量素材数据
+                        //获取全量视频素材数据
                         advertiserDataService.getMaterialList(token);
                     } catch (Exception e) {
                         e.printStackTrace();
                     } finally {
+                        countDownLatch.countDown();
                     }
                 }
             });
         });
+        try {
+            countDownLatch.await();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
         log.info("物料数据同步完成");
     }
 }

+ 26 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedancePlanHourlyReportLoadJob.java

@@ -19,6 +19,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 /**
  * 头条计划时报数据任务
@@ -33,6 +36,9 @@ public class BytedancePlanHourlyReportLoadJob implements Job {
     private IUserAllocationService userAllocationService;
     @Autowired
     private IReportService reportService;
+    static ExecutorService executorService = null;
+    //线程计数器
+    static CountDownLatch countDownLatch = null;
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
@@ -46,18 +52,35 @@ public class BytedancePlanHourlyReportLoadJob implements Job {
         //1:查询当日计划时报数据
         List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
         Date finalGetDate = getDate;
+        executorService = Executors.newFixedThreadPool(5);
+        countDownLatch = new CountDownLatch(tokens.size());
         tokens.forEach(token -> {
-            //1:获取当日广告计划数据
-            reportService.getAdvertiserPlanReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
+            executorService.submit(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        reportService.getAdvertiserPlanReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                        countDownLatch.countDown();
+                    }
+                }
+            });
         });
+        try {
+            countDownLatch.await();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
         //清洗关于缘多多数据
         formatData(113,finalGetDate);
         //清洗关于交友数据
         formatData(112,finalGetDate);
         //清洗关于附近约会数据
         formatData(222,finalGetDate);
-
         log.info("头条计划时报数据获取完成");
+        executorService.shutdown();
     }
 
     private void formatData(Integer projectId, Date finalGetDate){

+ 0 - 7
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/OceanengineJob.java

@@ -15,7 +15,6 @@ import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.http.impl.cookie.BasicClientCookie;
-import org.bytedeco.javacpp.opencv_core;
 import org.bytedeco.javacv.FFmpegFrameGrabber;
 import org.bytedeco.javacv.Frame;
 import org.bytedeco.javacv.Java2DFrameConverter;
@@ -47,9 +46,6 @@ public class OceanengineJob implements Job {
     private IEffectCaseService effectCaseService;
     @Autowired
     private IHotMaterialService hotMaterialService;
-    public static void main(String[] args){
-        System.out.println(getRealVideoUrl(""));
-    }
 
     public static String getVideoUrlByVid(String vid) {
         String url = "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=" + vid + "&line=0";
@@ -302,7 +298,6 @@ public class OceanengineJob implements Job {
             param.put("is_30_days_no_login", "true");
             param.put("service", "https://cc.oceanengine.com");
             String res = HttpUtils2.httpPostParamRequest("https://sso.toutiao.com/account_login/", param, header);
-            System.out.println(res);
             ObjectMapper mapper = new ObjectMapper();
             mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
             JsonNode jsonNode = mapper.readTree(res);
@@ -327,13 +322,11 @@ public class OceanengineJob implements Job {
                 param.put("captcha", resp.pred_resl);
                 orderId = resp.req_id;
                 res = HttpUtils2.httpPostParamRequest("https://sso.toutiao.com/account_login/", param, header);
-                System.out.println(res);
                 jsonNode = mapper.readTree(res);
                 errorCode = jsonNode.get("error_code").asInt();
             }
             if (errorCode == 0) {
                 //表示登录成功
-
                 List<org.apache.http.cookie.Cookie> cookies = HttpUtils2.cookieStore.getCookies();
                 for (org.apache.http.cookie.Cookie ck : cookies) {
                     Cookie cookie = new Cookie(ck.getName(), ck.getValue(), "." + ck.getDomain(), ck.getPath(), ck.getExpiryDate());

+ 3 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/mq/Receiver.java

@@ -1,9 +1,11 @@
 package org.jeecg.modules.mq;
 
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.rabbit.annotation.RabbitHandler;
 import org.springframework.amqp.rabbit.annotation.RabbitListener;
 import org.springframework.stereotype.Component;
 
+@Slf4j
 @Component
 @RabbitListener(queues = "hello")
 public class Receiver {
@@ -12,6 +14,6 @@ public class Receiver {
      */
     @RabbitHandler
     public void receiver(String str) {
-        System.out.println("Receiver says:[" + str + "]");
+        log.info("Receiver says:[" + str + "]");
     }
 }

+ 3 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/mq/Sender.java

@@ -1,5 +1,6 @@
 package org.jeecg.modules.mq;
 
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.core.AmqpTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -9,6 +10,7 @@ import org.springframework.stereotype.Component;
  * 2019年12月5日19:57:58
  */
 @Component
+@Slf4j
 public class Sender {
 
     @Autowired
@@ -19,7 +21,7 @@ public class Sender {
      */
     public void send() {
         String content = "Sender says:" + "'hello, I'm sender'";
-        System.out.println(content);
+        log.info(content);
         rabbitmqTemplate.convertAndSend("hello", content);
     }
 }

+ 0 - 6
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/PerformanceServiceImpl2.java

@@ -574,14 +574,8 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
         //获取所有project根据媒体类型获取快手下的项目类型 1头条 2快手
         List<ProjectDTO> projectDTOS = userEfficientVideoMapMapper.getProjects("2");
 
-        System.out.println("快手项目数量为:" + projectDTOS.size());
         //循环project
         for (ProjectDTO projectDTO : projectDTOS) {
-            //测试使用
-            //if(projectDTO.getProjectId() != 42L){
-            //    continue;
-            //}
-            System.out.println("快手平面所在项目为:" + projectDTO.getProjectName());
             //判断是否是北京的部门负责的项目,如果不是的话跳出
             String orgCode = userEfficientVideoMapMapper.getOrgCodeByProjectId(projectDTO.getProjectId());
             if (!orgCode.startsWith("A01")) {

+ 0 - 2
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -155,7 +155,6 @@ public class SampleTest {
                 QueryWrapper<BytedancePlanDailyReport> queryWrapper = new QueryWrapper<>();
                 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
                 String dateString = dateFormat.format(getDate)+" 00:00:00";
-                System.out.println(dateString);
                 queryWrapper.eq("advertiser_id",allocation.getAccountId())
 //                        .eq("stat_datetime",dateString)
                 ;
@@ -163,7 +162,6 @@ public class SampleTest {
                 if(null!=bytedancePlanDailyReports&&bytedancePlanDailyReports.size()>0){
                     bytedancePlanDailyReports.forEach(report->{
                         String adName = report.getAdName();
-                        System.out.println(adName);
                         String[] tags = adName.split("-");
                         report.setAdsense(tags[1]);
                         report.setPlanCode(tags[2]);

+ 4 - 8
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/app/service/impl/KuaishouAppServiceImpl.java

@@ -86,13 +86,6 @@ public class KuaishouAppServiceImpl implements IKuaishouAppService {
                                     kuaishouAdAccountService.save(kuaishouAdAccount);
                                     this.adAccountFetch(kuaishouAdAccount, "");
                                 }
-//                            AppVideo video = appVideoService.getById(ad.getPhotoId());
-
-//                            AppVideo video = new AppVideo();
-//                            video.setShareInfo();
-//                            video.setPhotoId();
-//                            video.setMvUrl();
-//                            video.setCoverUrl();
                             } catch (Exception e) {
                                 e.printStackTrace();
                             }
@@ -180,7 +173,10 @@ public class KuaishouAppServiceImpl implements IKuaishouAppService {
                         ad.setWidth(ad.getAdCover().getWidth());
                         ad.setHeight(ad.getAdCover().getHeight());
                         ad.setType(appFeeds.getType());
-                        ad.setAppName(ad.getAppName().replace(".apk","").replace(".APK","").replace("ios","").replace("IOS",""));
+                        String appName = ad.getAppName();
+                        if (null != appName && !appName.trim().equals("")) {
+                            ad.setAppName(ad.getAppName().replace(".apk", "").replace(".APK", "").replace("ios", "").replace("IOS", ""));
+                        }
                         appAdService.saveOrUpdate(ad);
                         try {
                             KuaishouAdAccount kuaishouAdAccount = kuaishouAdAccountService.getById(ad.getUserId());

+ 1 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouInterfaceServiceImpl.java

@@ -135,7 +135,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
         }
         JSONArray details = resultJson.getJSONObject("data").getJSONArray("details");
         if (null == details || details.size() <= 0) {
-            log.info("快手广告主时报表信息为空=》accountId:{}", token.getAccountId());
+//            log.info("快手广告主时报表信息为空=》accountId:{}", token.getAccountId());
             return;
         }
         for (int i = 0; i < details.size(); i++) {

+ 1 - 1
module-report/src/main/java/cn/com/ctop/bytedance/entity/BytedancePlanHourlyReport.java

@@ -641,7 +641,7 @@ public class BytedancePlanHourlyReport {
         if (null != adId) {
             this.adId = adId;
         }
-        this.id = "" + this.adId + this.statDatetime.substring(0, 13).replace(" ", "");
+        this.id = "" + this.adId + statDatetime.substring(0, 13).replace(" ", "");
         this.createTime = new Date();
         this.updateTime = new Date();
     }

+ 4 - 0
module-report/src/main/java/cn/com/ctop/bytedance/mapper/BytedancePlanDailyReportMapper.java

@@ -2,6 +2,9 @@ package cn.com.ctop.bytedance.mapper;
 
 import cn.com.ctop.bytedance.entity.BytedancePlanDailyReport;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @Description: 广告计划日报表信息
@@ -11,4 +14,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface BytedancePlanDailyReportMapper extends BaseMapper<BytedancePlanDailyReport> {
 
+    void replaceBatch(@Param(value = "reports") List<BytedancePlanDailyReport> dailyReports);
 }

+ 4 - 0
module-report/src/main/java/cn/com/ctop/bytedance/mapper/BytedancePlanHourlyReportMapper.java

@@ -2,6 +2,9 @@ package cn.com.ctop.bytedance.mapper;
 
 import cn.com.ctop.bytedance.entity.BytedancePlanHourlyReport;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @Description: 广告计划时报表信息
@@ -11,4 +14,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface BytedancePlanHourlyReportMapper extends BaseMapper<BytedancePlanHourlyReport> {
 
+    void replaceBatch(@Param(value = "reports") List<BytedancePlanHourlyReport> hourlyReports);
 }

+ 130 - 1
module-report/src/main/java/cn/com/ctop/bytedance/mapper/xml/BytedancePlanDailyReportMapper.xml

@@ -1,5 +1,134 @@
 <?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.bytedance.mapper.BytedancePlanDailyReportMapper">
-
+    <insert id="replaceBatch">
+        replace into ctop_bytedance_report_plan_daily(
+        id,
+        advertiser_id ,
+        stat_datetime,
+        show_num,
+        click,
+        convert_num,
+        cost,
+        active,
+        download_finish,
+        download_start,
+        click_install ,
+        install_finish ,
+        register,
+        pay_count ,
+        in_app_uv ,
+        in_app_detail_uv ,
+        in_app_cart ,
+        in_app_order ,
+        in_app_pay ,
+        phone,
+        form ,
+        map_search ,
+        button ,
+        view ,
+        qq,
+        lottery,
+        vote ,
+        redirect ,
+        shopping ,
+        consult,
+        wechat,
+        phone_confirm,
+        phone_connect,
+        consult_effective,
+        total_play,
+        valid_play,
+        wifi_play,
+        play_duration_sum,
+        play25_feed_break,
+        play50_feed_break,
+        play75_feed_break,
+        play100_feed_break,
+        advanced_creative_phone_click,
+        advanced_creative_counsel_click,
+        advanced_creative_form_click,
+        share,
+        comment ,
+        like_num ,
+        follow ,
+        home_visited ,
+        ies_challenge_click ,
+        ies_music_click,
+        interact_per_cost,
+        next_day_open,
+        next_day_open_rate ,
+        next_day_open_cost ,
+        ad_id,
+        ad_name ,
+        campaign_id,
+        create_time,
+        update_time)
+        values
+        <foreach collection="reports" item="report" separator=",">
+            (
+            #{report.id},
+            #{report.advertiserId},
+            #{report.statDatetime},
+            #{report.showNum},
+            #{report.click},
+            #{report.convertNum},
+            #{report.cost},
+            #{report.active},
+            #{report.downloadFinish},
+            #{report.downloadStart},
+            #{report.clickInstall},
+            #{report.installFinish},
+            #{report.register},
+            #{report.payCount},
+            #{report.inAppUv},
+            #{report.inAppDetailUv},
+            #{report.inAppCart},
+            #{report.inAppOrder},
+            #{report.inAppPay},
+            #{report.phone},
+            #{report.form},
+            #{report.mapSearch},
+            #{report.button},
+            #{report.view},
+            #{report.qq},
+            #{report.lottery},
+            #{report.vote},
+            #{report.redirect},
+            #{report.shopping},
+            #{report.consult},
+            #{report.wechat},
+            #{report.phoneConfirm},
+            #{report.phoneConnect},
+            #{report.consultEffective},
+            #{report.totalPlay},
+            #{report.validPlay},
+            #{report.wifiPlay},
+            #{report.playDurationSum},
+            #{report.play25FeedBreak},
+            #{report.play50FeedBreak},
+            #{report.play75FeedBreak},
+            #{report.play100FeedBreak},
+            #{report.advancedCreativePhoneClick},
+            #{report.advancedCreativeCounselClick},
+            #{report.advancedCreativeFormClick},
+            #{report.share},
+            #{report.comment},
+            #{report.likeNum},
+            #{report.follow},
+            #{report.homeVisited},
+            #{report.iesChallengeClick},
+            #{report.iesMusicClick},
+            #{report.interactPerCost},
+            #{report.nextDayOpen},
+            #{report.nextDayOpenRate},
+            #{report.nextDayOpenCost},
+            #{report.adId},
+            #{report.adName},
+            #{report.campaignId},
+            #{report.createTime},
+            #{report.updateTime}
+            )
+        </foreach>
+    </insert>
 </mapper>

+ 132 - 1
module-report/src/main/java/cn/com/ctop/bytedance/mapper/xml/BytedancePlanHourlyReportMapper.xml

@@ -1,5 +1,136 @@
 <?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.bytedance.mapper.BytedancePlanHourlyReportMapper">
-
+    <insert id="replaceBatch">
+        replace into ctop_bytedance_report_plan_hourly(
+        id,
+        advertiser_id ,
+        stat_datetime,
+        stat_hour,
+        show_num,
+        click,
+        convert_num,
+        cost,
+        active,
+        download_finish,
+        download_start,
+        click_install ,
+        install_finish ,
+        register,
+        pay_count ,
+        in_app_uv ,
+        in_app_detail_uv ,
+        in_app_cart ,
+        in_app_order ,
+        in_app_pay ,
+        phone,
+        form ,
+        map_search ,
+        button ,
+        view ,
+        qq,
+        lottery,
+        vote ,
+        redirect ,
+        shopping ,
+        consult,
+        wechat,
+        phone_confirm,
+        phone_connect,
+        consult_effective,
+        total_play,
+        valid_play,
+        wifi_play,
+        play_duration_sum,
+        play25_feed_break,
+        play50_feed_break,
+        play75_feed_break,
+        play100_feed_break,
+        advanced_creative_phone_click,
+        advanced_creative_counsel_click,
+        advanced_creative_form_click,
+        share,
+        comment ,
+        like_num ,
+        follow ,
+        home_visited ,
+        ies_challenge_click ,
+        ies_music_click,
+        interact_per_cost,
+        next_day_open,
+        next_day_open_rate ,
+        next_day_open_cost ,
+        ad_id,
+        ad_name ,
+        campaign_id,
+        create_time,
+        update_time)
+        values
+        <foreach collection="reports" item="report" separator=",">
+            (
+            #{report.id},
+            #{report.advertiserId},
+            #{report.statDatetime},
+            #{report.statHour},
+            #{report.showNum},
+            #{report.click},
+            #{report.convertNum},
+            #{report.cost},
+            #{report.active},
+            #{report.downloadFinish},
+            #{report.downloadStart},
+            #{report.clickInstall},
+            #{report.installFinish},
+            #{report.register},
+            #{report.payCount},
+            #{report.inAppUv},
+            #{report.inAppDetailUv},
+            #{report.inAppCart},
+            #{report.inAppOrder},
+            #{report.inAppPay},
+            #{report.phone},
+            #{report.form},
+            #{report.mapSearch},
+            #{report.button},
+            #{report.view},
+            #{report.qq},
+            #{report.lottery},
+            #{report.vote},
+            #{report.redirect},
+            #{report.shopping},
+            #{report.consult},
+            #{report.wechat},
+            #{report.phoneConfirm},
+            #{report.phoneConnect},
+            #{report.consultEffective},
+            #{report.totalPlay},
+            #{report.validPlay},
+            #{report.wifiPlay},
+            #{report.playDurationSum},
+            #{report.play25FeedBreak},
+            #{report.play50FeedBreak},
+            #{report.play75FeedBreak},
+            #{report.play100FeedBreak},
+            #{report.advancedCreativePhoneClick},
+            #{report.advancedCreativeCounselClick},
+            #{report.advancedCreativeFormClick},
+            #{report.share},
+            #{report.comment},
+            #{report.likeNum},
+            #{report.follow},
+            #{report.homeVisited},
+            #{report.iesChallengeClick},
+            #{report.iesMusicClick},
+            #{report.interactPerCost},
+            #{report.nextDayOpen},
+            #{report.nextDayOpenRate},
+            #{report.nextDayOpenCost},
+            #{report.adId},
+            #{report.adName},
+            #{report.campaignId},
+            #{report.createTime},
+            #{report.updateTime}
+            )
+        </foreach>
+    </insert>
 </mapper>

+ 4 - 0
module-report/src/main/java/cn/com/ctop/bytedance/service/IBytedancePlanDailyReportService.java

@@ -3,6 +3,8 @@ package cn.com.ctop.bytedance.service;
 import cn.com.ctop.bytedance.entity.BytedancePlanDailyReport;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * @Description: 广告计划日报表信息
  * @Author: jeecg-boot
@@ -12,4 +14,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
 public interface IBytedancePlanDailyReportService extends IService<BytedancePlanDailyReport> {
 
     void loadData(String data, String date);
+
+    void replaceBatch(List<BytedancePlanDailyReport> dailyReports);
 }

+ 3 - 0
module-report/src/main/java/cn/com/ctop/bytedance/service/IBytedancePlanHourlyReportService.java

@@ -3,6 +3,8 @@ package cn.com.ctop.bytedance.service;
 import cn.com.ctop.bytedance.entity.BytedancePlanHourlyReport;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * @Description: 广告计划时报表信息
  * @Author: jeecg-boot
@@ -11,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IBytedancePlanHourlyReportService extends IService<BytedancePlanHourlyReport> {
 
+    void replaceBatch(List<BytedancePlanHourlyReport> hourlyReports);
 }

+ 10 - 1
module-report/src/main/java/cn/com/ctop/bytedance/service/impl/BytedancePlanDailyReportServiceImpl.java

@@ -6,8 +6,11 @@ import cn.com.ctop.bytedance.service.IBytedancePlanDailyReportService;
 import cn.com.ctop.common.module.utils.StringUtils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @Description: 广告计划日报表信息
  * @Author: jeecg-boot
@@ -16,7 +19,8 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class BytedancePlanDailyReportServiceImpl extends ServiceImpl<BytedancePlanDailyReportMapper, BytedancePlanDailyReport> implements IBytedancePlanDailyReportService {
-
+    @Autowired
+    private BytedancePlanDailyReportMapper dailyReportMapper;
     @Override
     public void loadData(String data, String date) {
         String getData = StringUtils.replaceBlank(data);
@@ -39,4 +43,9 @@ public class BytedancePlanDailyReportServiceImpl extends ServiceImpl<BytedancePl
             }
         }
     }
+
+    @Override
+    public void replaceBatch(List<BytedancePlanDailyReport> dailyReports) {
+        dailyReportMapper.replaceBatch(dailyReports);
+    }
 }

+ 9 - 0
module-report/src/main/java/cn/com/ctop/bytedance/service/impl/BytedancePlanHourlyReportServiceImpl.java

@@ -4,8 +4,11 @@ import cn.com.ctop.bytedance.entity.BytedancePlanHourlyReport;
 import cn.com.ctop.bytedance.mapper.BytedancePlanHourlyReportMapper;
 import cn.com.ctop.bytedance.service.IBytedancePlanHourlyReportService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @Description: 广告计划时报表信息
  * @Author: jeecg-boot
@@ -14,5 +17,11 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class BytedancePlanHourlyReportServiceImpl extends ServiceImpl<BytedancePlanHourlyReportMapper, BytedancePlanHourlyReport> implements IBytedancePlanHourlyReportService {
+    @Autowired
+    private BytedancePlanHourlyReportMapper reportMapper;
 
+    @Override
+    public void replaceBatch(List<BytedancePlanHourlyReport> hourlyReports) {
+        reportMapper.replaceBatch(hourlyReports);
+    }
 }

+ 12 - 7
module-report/src/main/java/cn/com/ctop/bytedance/service/impl/ReportServiceImpl.java

@@ -33,10 +33,7 @@ import java.math.BigDecimal;
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @author 宋英豪
@@ -90,7 +87,7 @@ public class ReportServiceImpl implements IReportService {
         Integer code = getObject.getInteger("code");
         String message = getObject.getString("message");
         if (null == code || code != 0) {
-            log.error("广告主数据获取异常:{}", message);
+            log.error("头条广告主数据获取异常:{}", message);
             return;
         }
         JSONArray dataArray = getObject.getJSONObject("data").getJSONArray("list");
@@ -239,17 +236,25 @@ public class ReportServiceImpl implements IReportService {
             log.info("广告计划报表获取完成=》accountId:{}", token.getAccountId());
             return;
         }
+        List<BytedancePlanHourlyReport> hourlyReports = new ArrayList<>();
+        List<BytedancePlanDailyReport> dailyReports = new ArrayList<>();
         for (var i = 0; i < dataArray.size(); i++) {
             var data = dataArray.getJSONObject(i);
             if (null != conditions.getTimeGranularity() && CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY.equals(conditions.getTimeGranularity())) {
                 var hourlyReport = new BytedancePlanHourlyReport(data, token.getAccountId());
-                planHourlyReportService.saveOrUpdate(hourlyReport);
+                hourlyReports.add(hourlyReport);
             } else {
                 var dailyReport = new BytedancePlanDailyReport(data, token.getAccountId());
-                planDailyReportService.saveOrUpdate(dailyReport);
+                dailyReports.add(dailyReport);
             }
         }
 
+        if (null != conditions.getTimeGranularity() && CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY.equals(conditions.getTimeGranularity())) {
+            planHourlyReportService.replaceBatch(hourlyReports);
+        } else {
+            planDailyReportService.replaceBatch(dailyReports);
+        }
+
         getPlanReportByPage(token, conditions, page + 1);
     }
 

+ 4 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/mapper/ByteDanceVideoInfoMapper.java

@@ -2,6 +2,9 @@ package cn.com.ctop.toutiao.mapper;
 
 import cn.com.ctop.toutiao.entity.ByteDanceVideoInfo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @Description: 今日头条视频素材信息
@@ -11,4 +14,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface ByteDanceVideoInfoMapper extends BaseMapper<ByteDanceVideoInfo> {
 
+    void replaceBatch(@Param(value = "videoList") List<ByteDanceVideoInfo> videoInfoList);
 }

+ 34 - 1
module-toutiao/src/main/java/cn/com/ctop/toutiao/mapper/xml/ByteDanceVideoInfoMapper.xml

@@ -1,5 +1,38 @@
 <?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.mapper.ByteDanceVideoInfoMapper">
-
+    <insert id="replaceBatch">
+        replace into ctop_bytedance_video_info(
+        id,
+        advertiser_id,
+        account_id,
+        file_id,
+        width,
+        height,
+        duration,
+        size,
+        video_url,
+        status,
+        create_time,
+        update_time,
+        signature)
+        values
+        <foreach collection="videoList" item="video" separator=",">
+            (
+            #{video.id},
+            #{video.advertiserId},
+            #{video.accountId},
+            #{video.fileId},
+            #{video.width},
+            #{video.height},
+            #{video.duration},
+            #{video.size},
+            #{video.videoUrl},
+            #{video.status},
+            #{video.createTime},
+            #{video.updateTime},
+            #{video.signature}
+            )
+        </foreach>
+    </insert>
 </mapper>

+ 3 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/service/IByteDanceVideoInfoService.java

@@ -3,6 +3,8 @@ package cn.com.ctop.toutiao.service;
 import cn.com.ctop.toutiao.entity.ByteDanceVideoInfo;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * @Description: 今日头条视频素材信息
  * @Author: jeecg-boot
@@ -11,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IByteDanceVideoInfoService extends IService<ByteDanceVideoInfo> {
 
+    void replaceBatch(List<ByteDanceVideoInfo> videoInfoList);
 }

+ 4 - 5
module-toutiao/src/main/java/cn/com/ctop/toutiao/service/impl/ByteDanceAdvertiserDataServiceImpl.java

@@ -12,9 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.TreeMap;
+import java.util.*;
 
 /**
  * @author 宋英豪
@@ -838,7 +836,6 @@ public class ByteDanceAdvertiserDataServiceImpl implements IByteDanceAdvertiserD
         }
 
         JSONObject resultObject = HttpUtils.bytedanceGetRequest(token.getAccessToken(), url, param);
-        System.out.println(resultObject);
         Integer code = resultObject.getInteger("code");
         if (null == code || !code.equals(0)) {
             log.error("获取视频素材库接口异常==》accountId:{},message:{}", token.getAccountId(), resultObject.getString("message"));
@@ -849,11 +846,13 @@ public class ByteDanceAdvertiserDataServiceImpl implements IByteDanceAdvertiserD
             log.info("获取视频素材完成==》accountId:{},message:{}", token.getAccountId(), resultObject.getString("message"));
             return;
         }
+        List<ByteDanceVideoInfo> videoInfoList = new ArrayList<>();
         for (int i = 0; i < data.size(); i++) {
             JSONObject dataObject = data.getJSONObject(i);
             ByteDanceVideoInfo videoInfo = new ByteDanceVideoInfo(dataObject, token);
-            videoInfoService.saveOrUpdate(videoInfo);
+            videoInfoList.add(videoInfo);
         }
+        videoInfoService.replaceBatch(videoInfoList);
         getVideoByPage(token, videoIds, page + 1);
     }
 

+ 9 - 0
module-toutiao/src/main/java/cn/com/ctop/toutiao/service/impl/ByteDanceVideoInfoServiceImpl.java

@@ -4,8 +4,11 @@ import cn.com.ctop.toutiao.entity.ByteDanceVideoInfo;
 import cn.com.ctop.toutiao.mapper.ByteDanceVideoInfoMapper;
 import cn.com.ctop.toutiao.service.IByteDanceVideoInfoService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * @Description: 今日头条视频素材信息
  * @Author: jeecg-boot
@@ -14,5 +17,11 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class ByteDanceVideoInfoServiceImpl extends ServiceImpl<ByteDanceVideoInfoMapper, ByteDanceVideoInfo> implements IByteDanceVideoInfoService {
+    @Autowired
+    private ByteDanceVideoInfoMapper videoInfoMapper;
 
+    @Override
+    public void replaceBatch(List<ByteDanceVideoInfo> videoInfoList) {
+        videoInfoMapper.replaceBatch(videoInfoList);
+    }
 }