소스 검색

Merge remote-tracking branch 'origin/test' into test2

# Conflicts:
#	module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouInterfaceServiceImpl.java
xuzuoyun 5 년 전
부모
커밋
813228ed52
45개의 변경된 파일1111개의 추가작업 그리고 149개의 파일을 삭제
  1. 11 14
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CallbackController.java
  2. 3 12
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouDailyReportLoadJob.java
  3. 36 24
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouHourlyReportLoadJob.java
  4. 59 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouMaterialsLoadJob.java
  5. 96 41
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  6. 4 3
      module-common/src/main/java/cn/com/ctop/common/module/entity/CtopOauthToken.java
  7. 4 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouAppInfoMapper.java
  8. 4 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouCampaignMapper.java
  9. 4 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouCreativeMapper.java
  10. 4 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouGroupMapper.java
  11. 4 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouScheduleMapper.java
  12. 4 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouVideoGetMapper.java
  13. 21 2
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaiShouAppInfoMapper.xml
  14. 23 2
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaiShouCampaignMapper.xml
  15. 40 2
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaiShouCreativeMapper.xml
  16. 53 2
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaiShouGroupMapper.xml
  17. 30 2
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaiShouScheduleMapper.xml
  18. 27 2
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaiShouVideoGetMapper.xml
  19. 3 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaiShouCampaignService.java
  20. 3 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaiShouCreativeService.java
  21. 3 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaiShouVideoGetService.java
  22. 4 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaishouInterfaceService.java
  23. 9 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouCampaignServiceImpl.java
  24. 9 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouCreativeServiceImpl.java
  25. 9 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouVideoGetServiceImpl.java
  26. 69 18
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouInterfaceServiceImpl.java
  27. 4 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouReportHourlyCampaignMapper.java
  28. 4 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouReportHourlyCreativeMapper.java
  29. 3 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouReportHourlyCreativeStatisticMapper.java
  30. 4 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouReportHourlyGroupMapper.java
  31. 111 2
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaishouReportHourlyCampaignMapper.xml
  32. 111 2
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaishouReportHourlyCreativeMapper.xml
  33. 152 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaishouReportHourlyCreativeStatisticMapper.xml
  34. 111 2
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaishouReportHourlyGroupMapper.xml
  35. 3 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/IKuaishouReportHourlyCampaignService.java
  36. 3 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/IKuaishouReportHourlyCreativeService.java
  37. 6 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/IKuaishouReportHourlyCreativeStatisticService.java
  38. 3 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/IKuaishouReportHourlyGroupService.java
  39. 10 3
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouReportHourlyCampaignServiceImpl.java
  40. 10 3
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouReportHourlyCreativeServiceImpl.java
  41. 20 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouReportHourlyCreativeStatisticServiceImpl.java
  42. 10 3
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouReportHourlyGroupServiceImpl.java
  43. 0 1
      module-report/src/main/java/cn/com/ctop/bytedance/controller/MaterialReportController.java
  44. 1 1
      module-report/src/main/java/cn/com/ctop/bytedance/mapper/xml/MaterialReportMapper.xml
  45. 9 1
      module-report/src/main/java/cn/com/ctop/bytedance/service/impl/MaterialReportServiceImpl.java

+ 11 - 14
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/CallbackController.java

@@ -1,14 +1,15 @@
 package org.jeecg.modules.ctop.controller;
 
-import cn.com.ctop.common.module.utils.*;
-import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
-import cn.com.ctop.kuaishou.modules.material.entity.KuaishouAccessToken;
-import cn.com.ctop.kuaishou.modules.material.entity.KuaishouResultToken;
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.entity.UserAllocation;
 import cn.com.ctop.common.module.mapper.CtopOauthTokenMapper;
 import cn.com.ctop.common.module.mapper.UserAllocationMapper;
 import cn.com.ctop.common.module.service.IBindAccountAuthService;
+import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.utils.*;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
+import cn.com.ctop.kuaishou.modules.material.entity.KuaishouAccessToken;
+import cn.com.ctop.kuaishou.modules.material.entity.KuaishouResultToken;
 import cn.com.ctop.toutiao.entity.ByteDanceAdvertiser;
 import cn.com.ctop.toutiao.service.IByteDanceAdvertiserDataService;
 import com.alibaba.fastjson.JSONObject;
@@ -43,6 +44,9 @@ public class CallbackController {
     @Autowired
     private UserAllocationMapper allocationMapper;
 
+    @Autowired
+    private ICtopOauthTokenService ctopOauthTokenService;
+
 
     /**
      * TODO 授权绑定成功/失败 需要跳转特定页面
@@ -106,10 +110,7 @@ public class CallbackController {
                         logger.info("同步分配用户表完成,task_id:{},accountId:{}", state, accountId);
                     }
                     CtopOauthToken topOauthToken = new CtopOauthToken();
-                    Map<String, Object> deleteMap = new HashMap<>();
-                    deleteMap.put("advertiser_id", advertiserId);
-                    deleteMap.put("account_id", accountId);
-                    cTopOauthTokenMapper.deleteByMap(deleteMap); //删除 广告主id下的相关授权信息
+                    topOauthToken.setId(accountId + "");
                     topOauthToken.setAccountId(accountId);
                     topOauthToken.setMediaId("2");
                     topOauthToken.setAdvertiserId(advertiserId);
@@ -123,7 +124,7 @@ public class CallbackController {
                     Date refreshTokenExpireInDate = new Date(now + refreshTokenExpireIn);
                     topOauthToken.setRefreshTokenExpiresIn(refreshTokenExpireInDate);
                     topOauthToken.setUpdateTime(new Date());
-                    cTopOauthTokenMapper.insert(topOauthToken);
+                    ctopOauthTokenService.saveOrUpdate(topOauthToken);
                     bindAccountAuthService.addBindAccount(accountId, KuaishouInterfaceConstant.LOGIN_TYPE_KUAISHOU, advertiserId); //账号绑定
                     Thread t = new Thread() {
                         @Override
@@ -192,11 +193,7 @@ public class CallbackController {
 
             JSONObject data = resultObject.getJSONObject("data");
             CtopOauthToken token = new CtopOauthToken(advertiserId, data);
-            Map<String, Object> deleteMap = new HashMap<>();
-            deleteMap.put("advertiser_id", advertiserId);
-            deleteMap.put("account_id", token.getAccountId());
-            cTopOauthTokenMapper.deleteByMap(deleteMap); //删除 广告主id下的相关授权信息
-            cTopOauthTokenMapper.insert(token);
+            ctopOauthTokenService.saveOrUpdate(token);
             //获取广告主信息
             Map<String, Object> advertiserDataMap = advertiserDataService.getAdvertiserInfo(token.getAccountId() + "");
             Boolean getSuccess = (Boolean) advertiserDataMap.get("success");

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

@@ -25,6 +25,8 @@ public class KuaishouDailyReportLoadJob implements Job {
     private IKuaishouInterfaceService kuaishouInterfaceService;
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+//        Date deleteDate = DateUtils.addDay(new Date(), -2);
+//        kuaishouInterfaceService.deleteHourlyReport(deleteDate);
         Date getDate = DateUtils.addDay(new Date(), -1);
         //1:查询当日数据
         List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
@@ -33,17 +35,6 @@ public class KuaishouDailyReportLoadJob implements Job {
             return;
         }
 
-        tokens.forEach(token -> {
-            //1:获取全量广告计划数据
-            kuaishouInterfaceService.getCampaignList(token);
-            //1:获取全量广告组数据
-            kuaishouInterfaceService.getGroupList(token);
-            //1:获取全量创意数据
-            kuaishouInterfaceService.getCreativeList(token);
-            //2:获取全量视频素材数据
-            kuaishouInterfaceService.getVideoList(token);
-        });
-
         log.info("快手物料数据同步完成");
 
         tokens.forEach(token -> {
@@ -55,7 +46,7 @@ public class KuaishouDailyReportLoadJob implements Job {
             kuaishouInterfaceService.getAdvertiserGroupReportDaily(token, getDate, getDate);
             //4: 获取广告创意信息数据
             kuaishouInterfaceService.getAdvertiserCreativeReportDaily(token, getDate, getDate);
-
+//            kuaishouInterfaceService.loadAdvertiserCreativeReportDailyStatistic(token, getDate);
         });
     }
 }

+ 36 - 24
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouHourlyReportLoadJob.java

@@ -14,6 +14,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;
 
 /**
  * @author syh
@@ -25,6 +28,10 @@ public class KuaishouHourlyReportLoadJob implements Job {
     @Autowired
     private IKuaishouInterfaceService kuaishouInterfaceService;
 
+    static ExecutorService executorService = null;
+    //线程计数器
+    static CountDownLatch countDownLatch = null;
+
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         Date getDate = new Date();
@@ -39,32 +46,37 @@ public class KuaishouHourlyReportLoadJob implements Job {
             log.info("定时获取头条数据异常:为获取到可用的token");
             return;
         }
-//        tokens.forEach(token -> {
-//            //1:获取全量广告计划数据
-//            kuaishouInterfaceService.getCampaignList(token);
-//            //1:获取全量广告组数据
-//            kuaishouInterfaceService.getGroupList(token);
-//            //1:获取全量创意数据
-//            kuaishouInterfaceService.getCreativeList(token);
-//            //2:获取全量视频素材数据
-//            kuaishouInterfaceService.getVideoList(token);
-//        });
-//        log.info("物料数据同步完成");
-
-        for (CtopOauthToken token : tokens) {
-            kuaishouInterfaceService.getAdvertiserReportHourly(token, getDate, getDate);
-        }
-        for (CtopOauthToken token : tokens) {
-            //2:获取广告计划信息数据
-            kuaishouInterfaceService.getAdvertiserCampaignReportHourly(token, getDate, getDate);
-        }
-        for (CtopOauthToken token : tokens) {
-            //3:获取广告组信息数据
-            kuaishouInterfaceService.getAdvertiserGroupReportHourly(token, getDate, getDate);
+        executorService = Executors.newFixedThreadPool(10);
+        countDownLatch = new CountDownLatch(tokens.size());
+        Date finalGetDate = getDate;
+        tokens.forEach(token -> {
+            executorService.submit(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        kuaishouInterfaceService.getAdvertiserReportHourly(token, finalGetDate, finalGetDate);
+                        //2:获取广告计划信息数据
+                        kuaishouInterfaceService.getAdvertiserCampaignReportHourly(token, finalGetDate, finalGetDate);
+                        //3:获取广告组信息数据
+                        kuaishouInterfaceService.getAdvertiserGroupReportHourly(token, finalGetDate, finalGetDate);
+                        //4: 获取广告创意信息数据
+                        kuaishouInterfaceService.getAdvertiserCreativeReportHourly(token, finalGetDate, finalGetDate);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                        countDownLatch.countDown();
+                    }
+                }
+            });
+        });
+        try {
+            countDownLatch.await();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
         }
+        executorService.shutdown();
         for (CtopOauthToken token : tokens) {
-            //4: 获取广告创意信息数据
-            kuaishouInterfaceService.getAdvertiserCreativeReportHourly(token, getDate, getDate);
+            kuaishouInterfaceService.updateCreativeReportHourlyStatistic(token, getDate);
         }
     }
 }

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

@@ -0,0 +1,59 @@
+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.kuaishou.modules.batch.service.IKuaishouInterfaceService;
+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.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+@Slf4j
+public class KuaishouMaterialsLoadJob implements Job {
+    @Autowired
+    private ICtopOauthTokenService tokenService;
+    @Autowired
+    private IKuaishouInterfaceService kuaishouInterfaceService;
+
+    static ExecutorService executorService = null;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+        //1:查询当日数据
+        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
+
+        executorService = Executors.newFixedThreadPool(10);
+        tokens.forEach(token -> {
+            executorService.submit(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        Long start = System.currentTimeMillis();
+                        //1:获取全量广告计划数据
+                        kuaishouInterfaceService.getCampaignList(token);
+                        Long end1 = System.currentTimeMillis();
+                        //1:获取全量广告组数据
+                        kuaishouInterfaceService.getGroupList(token);
+                        Long end2 = System.currentTimeMillis();
+                        //1:获取全量创意数据
+                        kuaishouInterfaceService.getCreativeList(token);
+                        Long end3 = System.currentTimeMillis();
+                        //2:获取全量视频素材数据
+                        kuaishouInterfaceService.getVideoList(token);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                    }
+                }
+            });
+        });
+        log.info("物料数据同步完成");
+
+    }
+}

+ 96 - 41
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -17,6 +17,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.io.IOException;
+import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
@@ -72,74 +73,128 @@ public class SampleTest {
     }
 
     static ExecutorService executorService = null;
-    static CountDownLatch countDownLatch = null; //线程计数器          如果不用执行完后统一走流程,可以不要这个
+    static CountDownLatch countDownLatch = null; //线程计数器
 
     @Test
     public void loadData() throws InterruptedException {
-        Date getDate = DateUtils.addDay(new Date(), -1);
-//        Date getDate = new Date();
+        Date getDate = new Date();
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
+        String hour = simpleDateFormat.format(getDate);
+        if (null != hour && hour.equals("00")) {
+            getDate = DateUtils.addDay(getDate, -1);
+        }
+        //1:查询当日数据
         List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
         if (null == tokens || tokens.size() <= 0) {
             log.info("定时获取头条数据异常:为获取到可用的token");
             return;
         }
-        int times = tokens.size();
+
         executorService = Executors.newFixedThreadPool(10);
-        countDownLatch = new CountDownLatch(times);
-        for (CtopOauthToken token : tokens) {
+        countDownLatch = new CountDownLatch(tokens.size());
+        Date finalGetDate = getDate;
+        tokens.forEach(token -> {
             executorService.submit(new Runnable() {
                 @Override
                 public void run() {
-                    if (token.getAccountId() == 2731757) {
-                        System.out.println("" + token.getAccountId() + "开始");
-                        kuaishouInterfaceService.getAdvertiserCreativeReportHourly(token, getDate, getDate);
-                        System.out.println("" + token.getAccountId() + "结束");
+                    try {
+                        kuaishouInterfaceService.getAdvertiserReportHourly(token, finalGetDate, finalGetDate);
+                        //2:获取广告计划信息数据
+                        kuaishouInterfaceService.getAdvertiserCampaignReportHourly(token, finalGetDate, finalGetDate);
+                        //3:获取广告组信息数据
+                        kuaishouInterfaceService.getAdvertiserGroupReportHourly(token, finalGetDate, finalGetDate);
+                        //4: 获取广告创意信息数据
+                        kuaishouInterfaceService.getAdvertiserCreativeReportHourly(token, finalGetDate, finalGetDate);
+
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                        countDownLatch.countDown();
                     }
-                    countDownLatch.countDown();
                 }
             });
+        });
+        try {
+            countDownLatch.await();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        for (CtopOauthToken token : tokens) {
+            kuaishouInterfaceService.updateCreativeReportHourlyStatistic(token, getDate);
         }
-
-        countDownLatch.await();
-        System.out.println("Game Over");
-        //关掉线程池
         executorService.shutdown();
     }
     @Test
-    public void loadAllMetiaralInfo() {
-        Date getDate = DateUtils.addDay(new Date(), -1);
+    public void loadAllMetiaralInfo() throws InterruptedException {
+        Long start = System.currentTimeMillis();
+        Date getDate = new Date();
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
+        String hour = simpleDateFormat.format(getDate);
+        if (null != hour && hour.equals("00")) {
+            getDate = DateUtils.addDay(getDate, -1);
+        }
+        //1:查询当日数据
         List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
         if (null == tokens || tokens.size() <= 0) {
             log.info("定时获取头条数据异常:为获取到可用的token");
             return;
         }
-//        tokens.forEach(token -> {
-//            kuaishouInterfaceService.getCampaignList(token);
-//        });
-//        tokens.forEach(token -> {
-//                kuaishouInterfaceService.getGroupList(token);
-//        });
-        tokens.forEach(token -> {
-            kuaishouInterfaceService.getCreativeList(token);
-        });
+        int times = tokens.size();
+        executorService = Executors.newFixedThreadPool(10);
+        countDownLatch = new CountDownLatch(times);
         tokens.forEach(token -> {
-            kuaishouInterfaceService.getVideoList(token);
-        });
-
+            executorService.submit(new Runnable() {
+                @Override
+                public void run() {
+                    try {
+                        Long start = System.currentTimeMillis();
+                        //1:获取全量广告计划数据
+                        kuaishouInterfaceService.getCampaignList(token);
+                        Long end1 = System.currentTimeMillis();
+                        //1:获取全量广告组数据
+                        kuaishouInterfaceService.getGroupList(token);
+                        Long end2 = System.currentTimeMillis();
+                        //1:获取全量创意数据
+                        kuaishouInterfaceService.getCreativeList(token);
+                        Long end3 = System.currentTimeMillis();
+                        //2:获取全量视频素材数据
+                        kuaishouInterfaceService.getVideoList(token);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    } finally {
+                        countDownLatch.countDown();
+                    }
 
-        log.info("快手物料数据同步完成");
-        tokens.forEach(token -> {
-            kuaishouInterfaceService.getAdvertiserReportDaily(token, getDate, getDate);
-        });
-        tokens.forEach(token -> {
-            kuaishouInterfaceService.getAdvertiserCampaignReportDaily(token, getDate, getDate);
-        });
-        tokens.forEach(token -> {
-            kuaishouInterfaceService.getAdvertiserGroupReportDaily(token, getDate, getDate);
-        });
-        tokens.forEach(token -> {
-            kuaishouInterfaceService.getAdvertiserCreativeReportDaily(token, getDate, getDate);
+                }
+            });
         });
+        countDownLatch.await();
+        System.out.println("数据获取完成");
+        //关掉线程池
+        executorService.shutdown();
+        Long end1 = System.currentTimeMillis();
+        System.out.println("#######################" + (end1 - start) + "#################");
+        log.info("物料数据同步完成");
+
+//        for (CtopOauthToken token : tokens) {
+//            kuaishouInterfaceService.getAdvertiserReportHourly(token, getDate, getDate);
+//        }
+//        for (CtopOauthToken token : tokens) {
+//            //2:获取广告计划信息数据
+//            kuaishouInterfaceService.getAdvertiserCampaignReportHourly(token, getDate, getDate);
+//        }
+//        for (CtopOauthToken token : tokens) {
+//            //3:获取广告组信息数据
+//            kuaishouInterfaceService.getAdvertiserGroupReportHourly(token, getDate, getDate);
+//        }
+//        for (CtopOauthToken token : tokens) {
+//            //4: 获取广告创意信息数据
+//            kuaishouInterfaceService.getAdvertiserCreativeReportHourly(token, getDate, getDate);
+//            kuaishouInterfaceService.updateCreativeReportHourlyStatistic(token, getDate);
+//        }
+//
+//        Long end2 = System.currentTimeMillis();
+//        System.out.println("#######################"+(end2-end1)+"#################");
     }
 
     @Autowired

+ 4 - 3
module-common/src/main/java/cn/com/ctop/common/module/entity/CtopOauthToken.java

@@ -1,7 +1,6 @@
 package cn.com.ctop.common.module.entity;
 
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -32,7 +31,7 @@ public class CtopOauthToken {
     /**
      * 主键ID
      */
-    @TableId(type = IdType.UUID)
+    @TableId()
     @ApiModelProperty(value = "主键ID")
     private String id;
     /**
@@ -99,9 +98,11 @@ public class CtopOauthToken {
     private Date updateTime;
 
     public CtopOauthToken(String userId, JSONObject data) {
+        Long accountId = data.getLong("advertiser_id");
+        this.id = String.valueOf(accountId);
         this.advertiserId = userId;
         this.mediaId = "1";
-        this.accountId = data.getLong("advertiser_id");
+        this.accountId = accountId;
         String accessToken = data.getString("access_token");
         Integer refreshTokenExpiresIn = data.getInteger("refresh_token_expires_in");
         Integer expiresIn = data.getInteger("expires_in");

+ 4 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouAppInfoMapper.java

@@ -2,6 +2,9 @@ package cn.com.ctop.kuaishou.modules.batch.mapper;
 
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouAppInfo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @Description: 广告组-app信息
@@ -11,4 +14,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface KuaiShouAppInfoMapper extends BaseMapper<KuaiShouAppInfo> {
 
+    void replaceBatch(@Param(value = "appInfos") List<KuaiShouAppInfo> appInfos);
 }

+ 4 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouCampaignMapper.java

@@ -2,6 +2,9 @@ package cn.com.ctop.kuaishou.modules.batch.mapper;
 
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouCampaign;
 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 KuaiShouCampaignMapper extends BaseMapper<KuaiShouCampaign> {
 
+    void replaceBatch(@Param(value = "campaigns") List<KuaiShouCampaign> campaigns);
 }

+ 4 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouCreativeMapper.java

@@ -2,6 +2,9 @@ package cn.com.ctop.kuaishou.modules.batch.mapper;
 
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouCreative;
 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 KuaiShouCreativeMapper extends BaseMapper<KuaiShouCreative> {
 
+    void replaceBatch(@Param(value = "creatives") List<KuaiShouCreative> creatives);
 }

+ 4 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouGroupMapper.java

@@ -2,6 +2,9 @@ package cn.com.ctop.kuaishou.modules.batch.mapper;
 
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouGroup;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * @Description: 广告组信息
@@ -10,5 +13,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @Version: V1.0
  */
 public interface KuaiShouGroupMapper extends BaseMapper<KuaiShouGroup> {
-
+    void replaceBatch(@Param(value = "groups") List<KuaiShouGroup> groups);
 }

+ 4 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouScheduleMapper.java

@@ -2,6 +2,9 @@ package cn.com.ctop.kuaishou.modules.batch.mapper;
 
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouSchedule;
 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 KuaiShouScheduleMapper extends BaseMapper<KuaiShouSchedule> {
 
+    void replaceBatch(@Param(value = "schedules") List<KuaiShouSchedule> shouSchedules);
 }

+ 4 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/KuaiShouVideoGetMapper.java

@@ -2,6 +2,9 @@ package cn.com.ctop.kuaishou.modules.batch.mapper;
 
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouVideoGet;
 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 KuaiShouVideoGetMapper extends BaseMapper<KuaiShouVideoGet> {
 
+    void replaceBatch(@Param(value = "videos") List<KuaiShouVideoGet> videoGets);
 }

+ 21 - 2
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaiShouAppInfoMapper.xml

@@ -1,5 +1,24 @@
 <?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.kuaishou.modules.batch.mapper.KuaiShouAppInfoMapper">
-
-</mapper>
+    <insert id="replaceBatch">
+        replace into ctop_kuaishou_app_info(
+        account_id ,
+        unit_id,
+        app_package_name,
+        app_name,
+        device_os_type,
+        create_time,
+        update_time)
+        values
+        <foreach collection="appInfos" item="appInfo" separator=",">
+            (#{appInfo.accountId},
+            #{appInfo.unitId},
+            #{appInfo.appPackageName},
+            #{appInfo.appName},
+            #{appInfo.deviceOsType},
+            #{appInfo.createTime},
+            #{appInfo.updateTime})
+        </foreach>
+    </insert>
+</mapper>

+ 23 - 2
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaiShouCampaignMapper.xml

@@ -1,5 +1,26 @@
 <?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.kuaishou.modules.batch.mapper.KuaiShouCampaignMapper">
-
-</mapper>
+    <insert id="replaceBatch">
+        replace into ctop_kuaishou_campaign(
+        id,
+        account_id,
+        campaign_id,
+        campaign_name,
+        status,
+        day_budget,
+        create_time,
+        update_time)
+        values
+        <foreach collection="campaigns" item="campaign" separator=",">
+            (#{campaign.id},
+            #{campaign.accountId},
+            #{campaign.campaignId},
+            #{campaign.campaignName},
+            #{campaign.status},
+            #{campaign.dayBudget},
+            #{campaign.createTime},
+            #{campaign.updateTime})
+        </foreach>
+    </insert>
+</mapper>

+ 40 - 2
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaiShouCreativeMapper.xml

@@ -1,5 +1,43 @@
 <?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.kuaishou.modules.batch.mapper.KuaiShouCreativeMapper">
-
-</mapper>
+    <insert id="replaceBatch">
+        replace into ctop_kuaishou_creative(id,
+        account_id,
+        campaign_id,
+        unit_id,
+        creative_id,
+        creative_name,
+        photo_id,
+        status,
+        review_detail,
+        cover_url,
+        cover_width,
+        cover_height,
+        description,
+        action_bar_text,
+        click_track_url,
+        create_time,
+        update_time)
+        values
+        <foreach collection="creatives" item="creative" separator=",">
+            (#{creative.id},
+            #{creative.accountId},
+            #{creative.campaignId},
+            #{creative.unitId},
+            #{creative.creativeId},
+            #{creative.creativeName},
+            #{creative.photoId},
+            #{creative.status},
+            #{creative.reviewDetail},
+            #{creative.coverUrl},
+            #{creative.coverWidth},
+            #{creative.coverHeight},
+            #{creative.description},
+            #{creative.actionBarText},
+            #{creative.clickTrackUrl},
+            #{creative.createTime},
+            #{creative.updateTime})
+        </foreach>
+    </insert>
+</mapper>

+ 53 - 2
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaiShouGroupMapper.xml

@@ -1,5 +1,56 @@
 <?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.kuaishou.modules.batch.mapper.KuaiShouGroupMapper">
-
-</mapper>
+    <insert id="replaceBatch">
+        replace into ctop_kuaishou_group(
+        id,
+        account_id,
+        campaign_id,
+        unit_id,
+        unit_name,
+        status,
+        review_detail,
+        bid_type,
+        bid,
+        cpa_bid,
+        ocpx_action_type,
+        day_budget,
+        speed,
+        begin_time,
+        end_time,
+        schedule,
+        show_model,
+        url_type,
+        url,
+        app_id,
+        app_icon_url,
+        create_time,
+        update_time)
+        values
+        <foreach collection="groups" item="getGroup" separator=",">
+            (#{getGroup.id},
+            #{getGroup.accountId},
+            #{getGroup.campaignId},
+            #{getGroup.unitId},
+            #{getGroup.unitName},
+            #{getGroup.status},
+            #{getGroup.reviewDetail},
+            #{getGroup.bidType},
+            #{getGroup.bid},
+            #{getGroup.cpaBid},
+            #{getGroup.ocpxActionType},
+            #{getGroup.dayBudget},
+            #{getGroup.speed},
+            #{getGroup.beginTime},
+            #{getGroup.endTime},
+            #{getGroup.schedule},
+            #{getGroup.showModel},
+            #{getGroup.urlType},
+            #{getGroup.url},
+            #{getGroup.appId},
+            #{getGroup.appIconUrl},
+            #{getGroup.createTime},
+            #{getGroup.updateTime})
+        </foreach>
+    </insert>
+</mapper>

+ 30 - 2
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaiShouScheduleMapper.xml

@@ -1,5 +1,33 @@
 <?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.kuaishou.modules.batch.mapper.KuaiShouScheduleMapper">
-
-</mapper>
+    <insert id="replaceBatch">
+        replace into ctop_kuaishou_schedule(
+        account_id,
+        unit_id,
+        mon,
+        tues,
+        wed,
+        thur,
+        fri,
+        sat,
+        sun,
+        create_time,
+        update_time)
+        values
+        <foreach collection="schedules" item="schedule" separator=",">
+            (
+            #{schedule.accountId},
+            #{schedule.unitId},
+            #{schedule.mon},
+            #{schedule.tues},
+            #{schedule.wed},
+            #{schedule.thur},
+            #{schedule.fri},
+            #{schedule.sat},
+            #{schedule.sun},
+            #{schedule.createTime},
+            #{schedule.updateTime})
+        </foreach>
+    </insert>
+</mapper>

+ 27 - 2
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/mapper/xml/KuaiShouVideoGetMapper.xml

@@ -1,5 +1,30 @@
 <?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.kuaishou.modules.batch.mapper.KuaiShouVideoGetMapper">
-
-</mapper>
+    <insert id="replaceBatch">
+        replace into ctop_kuaishou_video_get(
+        id,
+        account_id,
+        photo_id,
+        width,
+        height,
+        url,
+        cover_url,
+        create_time,
+        update_time,
+        signature)
+        values
+        <foreach collection="videos" item="video" separator=",">
+            (#{video.id},
+            #{video.accountId},
+            #{video.photoId},
+            #{video.width},
+            #{video.height},
+            #{video.url},
+            #{video.coverUrl},
+            #{video.createTime},
+            #{video.updateTime},
+            #{video.signature})
+        </foreach>
+    </insert>
+</mapper>

+ 3 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaiShouCampaignService.java

@@ -3,6 +3,8 @@ package cn.com.ctop.kuaishou.modules.batch.service;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouCampaign;
 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 IKuaiShouCampaignService extends IService<KuaiShouCampaign> {
 
+    void replaceBatch(List<KuaiShouCampaign> campaigns);
 }

+ 3 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaiShouCreativeService.java

@@ -3,6 +3,8 @@ package cn.com.ctop.kuaishou.modules.batch.service;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouCreative;
 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 IKuaiShouCreativeService extends IService<KuaiShouCreative> {
 
+    void replaceBatch(List<KuaiShouCreative> creatives);
 }

+ 3 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaiShouVideoGetService.java

@@ -3,6 +3,8 @@ package cn.com.ctop.kuaishou.modules.batch.service;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouVideoGet;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * @Description: 快手-获取视频接口
  * @Author: jeecg-boot
@@ -10,4 +12,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @Version: V1.0
  */
 public interface IKuaiShouVideoGetService extends IService<KuaiShouVideoGet> {
+    void replaceBatch(List<KuaiShouVideoGet> videoGets);
 }

+ 4 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaishouInterfaceService.java

@@ -258,4 +258,8 @@ public interface IKuaishouInterfaceService {
     void getGroupList(CtopOauthToken token);
 
     void loadData() throws InterruptedException;
+
+    void updateCreativeReportHourlyStatistic(CtopOauthToken token, Date getDate);
+
+    void deleteHourlyReport(Date deleteDate);
 }

+ 9 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouCampaignServiceImpl.java

@@ -4,8 +4,11 @@ import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouCampaign;
 import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouCampaignMapper;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouCampaignService;
 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 KuaiShouCampaignServiceImpl extends ServiceImpl<KuaiShouCampaignMapper, KuaiShouCampaign> implements IKuaiShouCampaignService {
+    @Autowired
+    private KuaiShouCampaignMapper campaignMapper;
 
+    @Override
+    public void replaceBatch(List<KuaiShouCampaign> campaigns) {
+        campaignMapper.replaceBatch(campaigns);
+    }
 }

+ 9 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouCreativeServiceImpl.java

@@ -4,8 +4,11 @@ import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouCreative;
 import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouCreativeMapper;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouCreativeService;
 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 KuaiShouCreativeServiceImpl extends ServiceImpl<KuaiShouCreativeMapper, KuaiShouCreative> implements IKuaiShouCreativeService {
+    @Autowired
+    private KuaiShouCreativeMapper kuaiShouCreativeMapper;
 
+    @Override
+    public void replaceBatch(List<KuaiShouCreative> creatives) {
+        kuaiShouCreativeMapper.replaceBatch(creatives);
+    }
 }

+ 9 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouVideoGetServiceImpl.java

@@ -4,8 +4,11 @@ import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouVideoGet;
 import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouVideoGetMapper;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouVideoGetService;
 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 KuaiShouVideoGetServiceImpl extends ServiceImpl<KuaiShouVideoGetMapper, KuaiShouVideoGet> implements IKuaiShouVideoGetService {
+    @Autowired
+    private KuaiShouVideoGetMapper videoGetMapper;
 
+    @Override
+    public void replaceBatch(List<KuaiShouVideoGet> videoGets) {
+        videoGetMapper.replaceBatch(videoGets);
+    }
 }

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

@@ -147,6 +147,8 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
             var kuaishouReportHourlyAccount = JSONObject.toJavaObject(detailJson, KuaishouReportHourlyAccount.class);
             kuaishouReportHourlyAccount.setAccountId(token.getAccountId());
             kuaishouReportHourlyAccount.setId("" + token.getAccountId() + kuaishouReportHourlyAccount.getStatDate() + kuaishouReportHourlyAccount.getStatHour());
+            kuaishouReportHourlyAccount.setCreateTime(new Date());
+            kuaishouReportHourlyAccount.setUpdateTime(new Date());
             hourlyAccountService.saveOrUpdate(kuaishouReportHourlyAccount);
         }
     }
@@ -232,13 +234,17 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
             log.info("快手视频列表信息为空=》accountId:{}", token.getAccountId());
             return;
         }
+        List<KuaiShouVideoGet> videoGets = new ArrayList<>();
         for (int i = 0; i < details.size(); i++) {
             var detailJson = details.getJSONObject(i);
             var kuaiShouVideoGet = JSONObject.toJavaObject(detailJson, KuaiShouVideoGet.class);
             kuaiShouVideoGet.setAccountId(token.getAccountId());
             kuaiShouVideoGet.setId("" + token.getAccountId() + kuaiShouVideoGet.getPhotoId());
-            kuaiShouVideoGetService.saveOrUpdate(kuaiShouVideoGet);
+            kuaiShouVideoGet.setCreateTime(new Date());
+            kuaiShouVideoGet.setUpdateTime(new Date());
+            videoGets.add(kuaiShouVideoGet);
         }
+        kuaiShouVideoGetService.replaceBatch(videoGets);
         getVideoListByPage(token, page + 1);
     }
 
@@ -442,6 +448,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
             log.info("快手广告计划时报表信息为空=》accountId:{}", token.getAccountId());
             return;
         }
+        List<KuaishouReportHourlyCampaign> campaigns = new ArrayList<>();
         for (int i = 0; i < details.size(); i++) {
             JSONObject detailJson = details.getJSONObject(i);
             var show = detailJson.getLong("show");
@@ -451,8 +458,11 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
             var hourlyCampaign = JSONObject.toJavaObject(detailJson, KuaishouReportHourlyCampaign.class);
             hourlyCampaign.setAccountId(token.getAccountId());
             hourlyCampaign.setId("" + hourlyCampaign.getAccountId() + hourlyCampaign.getCampaignId() + hourlyCampaign.getStatDate() + hourlyCampaign.getStatHour());
-            hourlyCampaignService.saveOrUpdate(hourlyCampaign);
+            hourlyCampaign.setCreateTime(new Date());
+            hourlyCampaign.setUpdateTime(new Date());
+            campaigns.add(hourlyCampaign);
         }
+        hourlyCampaignService.replaceBatch(campaigns);
         getAdvertiserReportHourlyByPage(token, startDate, endDate, page + 1);
     }
 
@@ -610,6 +620,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
             log.info("快手广告组时报表信息为空=》accountId:{}", token.getAccountId());
             return;
         }
+        List<KuaishouReportHourlyGroup> groups = new ArrayList<>();
         for (int i = 0; i < details.size(); i++) {
             JSONObject detailJson = details.getJSONObject(i);
             var show = detailJson.getLong("show");
@@ -619,8 +630,14 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
             var hourlyGroup = JSONObject.toJavaObject(detailJson, KuaishouReportHourlyGroup.class);
             hourlyGroup.setAccountId(token.getAccountId());
             hourlyGroup.setId("" + hourlyGroup.getAccountId() + hourlyGroup.getUnitId() + hourlyGroup.getStatDate() + hourlyGroup.getStatHour());
-            hourlyGroupService.saveOrUpdate(hourlyGroup);
+            hourlyGroup.setCreateTime(new Date());
+            hourlyGroup.setUpdateTime(new Date());
+            groups.add(hourlyGroup);
+//            hourlyGroupService.saveOrUpdate(hourlyGroup);
         }
+        hourlyGroupService.replaceBatch(groups);
+
+
         getGroupHourlyReportByPage(token, startDate, endDate, page + 1);
     }
 
@@ -779,7 +796,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
         param.put("end_date", DateUtils.formatDate(endDate));
         param.put("advertiser_id", token.getAccountId());
         param.put("temporal_granularity", "HOURLY");
-        param.put("page_size", 500);
+        param.put("page_size", 200);
         param.put("page", page);
 
         String result = HttpUtils.httpPostRequest(url, param, headers);
@@ -795,6 +812,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
             log.info("快手广告创意时报表信息为空=》accountId:{}", token.getAccountId());
             return;
         }
+        List<KuaishouReportHourlyCreative> creatives = new ArrayList<>();
         for (int i = 0; i < details.size(); i++) {
             JSONObject detailJson = details.getJSONObject(i);
             var show = detailJson.getLong("show");
@@ -804,10 +822,11 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
             var creative = JSONObject.toJavaObject(detailJson, KuaishouReportHourlyCreative.class);
             creative.setAccountId(token.getAccountId());
             creative.setId("" + creative.getAccountId() + creative.getCreativeId() + creative.getStatDate() + creative.getStatHour());
-            KuaishouReportHourlyCreativeStatistic statistic = setHourlyStatistic(creative, token);
-//            hourlyCreativeStatisticService.saveOrUpdate(statistic);
-            hourlyCreativeService.saveOrUpdate(creative);
+            creative.setCreateTime(new Date());
+            creative.setUpdateTime(new Date());
+            creatives.add(creative);
         }
+        hourlyCreativeService.replaceBatch(creatives);
         getAdvertiserCreativeReportHourlyByPage(token, startDate, endDate, page + 1);
     }
 
@@ -1080,7 +1099,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
         JSONObject dataJson = resultJson.getJSONObject("data");
         JSONArray details = dataJson.getJSONArray("details");
         if (Check.isNull(details)) {
-            log.info("获取广告计划信息返回结果为空,advertiserId:{}", accountId);
+//            log.info("获取广告计划信息返回结果为空,advertiserId:{}", accountId);
             return;
         }
         addCampaign(accountId, details);
@@ -1166,6 +1185,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
     }
 
     private void addCampaign(Long advertiserId, JSONArray details) {
+        List<KuaiShouCampaign> campaigns = new ArrayList<>();
         for (int i = 0; i < details.size(); i++) {
             JSONObject detail = JSONObject.parseObject(details.get(i).toString());
             if (!Check.isNull(detail)) {
@@ -1176,9 +1196,10 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
                 campaign.setCampaignName(detail.getString("campaign_name"));
                 campaign.setDayBudget(detail.getLong("day_budget"));
                 campaign.setStatus(detail.getInteger("status"));
-                kuaiShouCampaignService.saveOrUpdate(campaign);
+                campaigns.add(campaign);
             }
         }
+        kuaiShouCampaignService.replaceBatch(campaigns);
     }
 
     @Override
@@ -1239,6 +1260,16 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
         executorService.shutdown();
     }
 
+    @Override
+    public void updateCreativeReportHourlyStatistic(CtopOauthToken token, Date getDate) {
+        hourlyCreativeStatisticService.updateCreativeReportHourlyStatistic(token, getDate);
+    }
+
+    @Override
+    public void deleteHourlyReport(Date deleteDate) {
+        hourlyCreativeStatisticService.deleteHourlyReport(deleteDate);
+    }
+
     private void getGroupListByPage(CtopOauthToken token, int page) {
         String url = PropertiesUtils.getConfig("kuaishou_api_url") + KuaishouInterfaceConstant.GROUP_LIST;
         JSONObject param = new JSONObject();
@@ -1262,7 +1293,7 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
         }
         JSONArray details = resultJson.getJSONObject("data").getJSONArray("details");
         if (Check.isNull(details)) {
-            log.info("获取广告组返回结果为空,advertiserId:{}", token.getAccountId());
+//            log.info("获取广告组返回结果为空,advertiserId:{}", token.getAccountId());
             return;
         }
         addGroup(token.getAccountId(), details);
@@ -1367,6 +1398,9 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
 
     private void addGroup(Long advertiserId, JSONArray details) {
         if (!Check.isNull(details)) {
+            List<KuaiShouGroup> groups = new ArrayList<>();
+            List<KuaiShouAppInfo> appInfos = new ArrayList<>();
+            List<KuaiShouSchedule> shouSchedules = new ArrayList<>();
             for (int i = 0; i < details.size(); i++) {
                 JSONObject detail = JSONObject.parseObject(details.get(i).toString());
                 if (!Check.isNull(detail)) {
@@ -1393,7 +1427,9 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
                     group.setUrlType(detail.getInteger("url_type"));
                     group.setAppId(detail.getLong("app_id"));
                     group.setAppIconUrl(detail.getString("app_icon_url"));
-                    kuaiShouGroupService.saveOrUpdate(group);
+                    group.setCreateTime(new Date());
+                    group.setUpdateTime(new Date());
+                    groups.add(group);
                     // 添加应用信息
                     JSONObject diverseJson = detail.getJSONObject("diverse_data");
                     if (!Check.isNull(diverseJson)) {
@@ -1403,7 +1439,9 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
                         appInfo.setAppPackageName(diverseJson.getString("app_package_name"));
                         appInfo.setDeviceOsType(diverseJson.getInteger("device_os_type"));
                         appInfo.setUnitId(unitId);
-                        appInfoMapper.insert(appInfo);
+                        appInfo.setCreateTime(new Date());
+                        appInfo.setUpdateTime(new Date());
+                        appInfos.add(appInfo);
                     }
                     //时间段信息
                     JSONObject scheduleJson = detail.getJSONObject("schedule");
@@ -1418,10 +1456,20 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
                         schedule.setFri(scheduleJson.getJSONArray("fri").toJSONString());
                         schedule.setSat(scheduleJson.getJSONArray("sat").toJSONString());
                         schedule.setSun(scheduleJson.getJSONArray("sun").toJSONString());
-                        shouScheduleMapper.insert(schedule);
+                        schedule.setCreateTime(new Date());
+                        schedule.setUpdateTime(new Date());
+                        shouSchedules.add(schedule);
                     }
                 }
-
+            }
+            if (!Check.isNull(groups)) {
+                groupMapper.replaceBatch(groups);
+            }
+            if (!Check.isNull(shouSchedules)) {
+                shouScheduleMapper.replaceBatch(shouSchedules);
+            }
+            if (!Check.isNull(appInfos)) {
+                appInfoMapper.replaceBatch(appInfos);
             }
         }
     }
@@ -1455,9 +1503,10 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
         }
         JSONArray details = resultJson.getJSONObject("data").getJSONArray("details");
         if (null == details || details.size() <= 0) {
-            log.error("获取广告创意返回结果数据为空,advertiserId:{}", advertiserId);
+//            log.error("获取广告创意返回结果数据为空,advertiserId:{}", advertiserId);
             return;
         }
+        List<KuaiShouCreative> creatives = new ArrayList<>();
         for (int i = 0; i < details.size(); i++) {
             JSONObject detailJson = JSONObject.parseObject(details.get(i).toString());
             if (!Check.isNull(detailJson)) {
@@ -1480,10 +1529,13 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
                     creative.setDescription(displayInfoJson.getString("description"));
                     creative.setActionBarText(displayInfoJson.getString("action_bar_text"));
                 }
-                creativeService.saveOrUpdate(creative);
+                creative.setCreateTime(new Date());
+                creative.setUpdateTime(new Date());
+                creatives.add(creative);
             }
         }
-        getCreativeList(accessToken, advertiserId, page + 1);
+        creativeService.replaceBatch(creatives);
+        getCreativeListByPage(accessToken, advertiserId, page + 1);
     }
 
     /**
@@ -1523,7 +1575,6 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
                                 videoGet.setUrl(detailJson.getString("url"));
                                 videoGet.setCoverUrl(detailJson.getString("creative_name"));
                                 videoGet.setPhotoId(detailJson.getString("photo_id"));
-                                //videoGet.setSignature(UUID.randomUUID().toString());
                                 kuaiShouVideoGetService.saveOrUpdate(videoGet);
                             }
                         }

+ 4 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouReportHourlyCampaignMapper.java

@@ -1,8 +1,11 @@
 package cn.com.ctop.kuaishou.modules.report.mapper;
 
-import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyAccount;
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyCampaign;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface KuaishouReportHourlyCampaignMapper extends BaseMapper<KuaishouReportHourlyCampaign> {
+    void replaceBatch(@Param(value = "campaigns") List<KuaishouReportHourlyCampaign> campaigns);
 }

+ 4 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouReportHourlyCreativeMapper.java

@@ -1,8 +1,11 @@
 package cn.com.ctop.kuaishou.modules.report.mapper;
 
-import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyAccount;
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyCreative;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface KuaishouReportHourlyCreativeMapper extends BaseMapper<KuaishouReportHourlyCreative> {
+    void replaceBatch(@Param(value = "creatives") List<KuaishouReportHourlyCreative> creatives);
 }

+ 3 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouReportHourlyCreativeStatisticMapper.java

@@ -2,6 +2,7 @@ package cn.com.ctop.kuaishou.modules.report.mapper;
 
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyCreativeStatistic;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 时报清洗数据
@@ -11,5 +12,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @cersion: V1.0
  */
 public interface KuaishouReportHourlyCreativeStatisticMapper extends BaseMapper<KuaishouReportHourlyCreativeStatistic> {
+    void updateCreativeReportHourlyStatistic(@Param(value = "accountId") Long accountId, @Param(value = "date") String dateString);
 
+    void deleteHourlyReport(@Param(value = "date") String dateString);
 }

+ 4 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/KuaishouReportHourlyGroupMapper.java

@@ -1,8 +1,11 @@
 package cn.com.ctop.kuaishou.modules.report.mapper;
 
-import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyAccount;
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyGroup;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 public interface KuaishouReportHourlyGroupMapper extends BaseMapper<KuaishouReportHourlyGroup> {
+    void replaceBatch(@Param(value = "groups") List<KuaishouReportHourlyGroup> groups);
 }

+ 111 - 2
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaishouReportHourlyCampaignMapper.xml

@@ -1,5 +1,114 @@
 <?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.kuaishou.modules.report.mapper.KuaishouReportHourlyCampaignMapper">
-
-</mapper>
+    <insert id="replaceBatch">
+        replace into ctop_kuaishou_report_hourly_campaign(
+        id,
+        account_id,
+        campaign_id,
+        stat_date,
+        stat_hour,
+        charge,
+        photo_click,
+        photo_show,
+        aclick,
+        bclick,
+        photo_click_ratio,
+        action_ratio,
+        impression_1k_cost,
+        event_credit_grant_landing_page_cost ,
+        event_credit_grant_landing_page,
+        event_jin_jian_landing_page_cost,
+        event_jin_jian_landing_page,
+        form_action_ratio,
+        form_cost,
+        form_count,
+        event_order_paid_cost,
+        event_order_paid_purchase_amount,
+        event_order_paid,
+        event_credit_grant_app_ratio,
+        event_credit_grant_app_cost,
+        event_credit_grant_app,
+        event_pay_purchase_amount_first_day,
+        event_jin_jian_app_cost,
+        event_jin_jian_app,
+        event_register_cost,
+        event_register,
+        event_pay_roi,
+        event_pay_purchase_amount,
+        event_pay,
+        event_pay_first_day_roi,
+        event_pay_first_day,
+        photo_click_cost,
+        action_cost,
+        share ,
+        comment ,
+        photo_like ,
+        follow,
+        report,
+        block,
+        negative,
+        activation,
+        submit,
+        cancel_follow,
+        download_started,
+        download_completed,
+        create_time,
+        update_time)
+        values
+        <foreach collection="campaigns" item="campaign" separator=",">
+            (#{campaign.id},
+            #{campaign.accountId},
+            #{campaign.campaignId},
+            #{campaign.statDate},
+            #{campaign.statHour},
+            #{campaign.charge},
+            #{campaign.photoClick},
+            #{campaign.photoShow},
+            #{campaign.aclick},
+            #{campaign.bclick},
+            #{campaign.photoClickRatio},
+            #{campaign.actionRatio},
+            #{campaign.impression1kCost},
+            #{campaign.eventCreditGrantLandingPageCost},
+            #{campaign.eventCreditGrantLandingPage},
+            #{campaign.eventJinJianLandingPageCost},
+            #{campaign.eventJinJianLandingPage},
+            #{campaign.formActionRatio},
+            #{campaign.formCost},
+            #{campaign.formCount},
+            #{campaign.eventOrderPaidCost},
+            #{campaign.eventOrderPaidPurchaseAmount},
+            #{campaign.eventOrderPaid},
+            #{campaign.eventCreditGrantAppRatio},
+            #{campaign.eventCreditGrantAppCost},
+            #{campaign.eventCreditGrantApp},
+            #{campaign.eventPayPurchaseAmountFirstDay},
+            #{campaign.eventJinJianAppCost},
+            #{campaign.eventJinJianApp},
+            #{campaign.eventRegisterCost},
+            #{campaign.eventRegister},
+            #{campaign.eventPayRoi},
+            #{campaign.eventPayPurchaseAmount},
+            #{campaign.eventPay},
+            #{campaign.eventPayFirstDayRoi},
+            #{campaign.eventPayFirstDay},
+            #{campaign.photoClickCost},
+            #{campaign.actionCost},
+            #{campaign.share},
+            #{campaign.comment},
+            #{campaign.photoLike},
+            #{campaign.follow},
+            #{campaign.report},
+            #{campaign.block},
+            #{campaign.negative},
+            #{campaign.activation},
+            #{campaign.submit},
+            #{campaign.cancelFollow},
+            #{campaign.downloadStarted},
+            #{campaign.downloadCompleted},
+            #{campaign.createTime},
+            #{campaign.updateTime})
+        </foreach>
+    </insert>
+</mapper>

+ 111 - 2
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaishouReportHourlyCreativeMapper.xml

@@ -1,5 +1,114 @@
 <?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.kuaishou.modules.report.mapper.KuaishouReportHourlyCreativeMapper">
-
-</mapper>
+    <insert id="replaceBatch">
+        replace into ctop_kuaishou_report_hourly_creative(
+        id,
+        account_id,
+        creative_id,
+        stat_date,
+        stat_hour,
+        charge,
+        photo_click,
+        photo_show,
+        aclick,
+        bclick,
+        photo_click_ratio,
+        action_ratio,
+        impression_1k_cost,
+        event_credit_grant_landing_page_cost ,
+        event_credit_grant_landing_page,
+        event_jin_jian_landing_page_cost,
+        event_jin_jian_landing_page,
+        form_action_ratio,
+        form_cost,
+        form_count,
+        event_order_paid_cost,
+        event_order_paid_purchase_amount,
+        event_order_paid,
+        event_credit_grant_app_ratio,
+        event_credit_grant_app_cost,
+        event_credit_grant_app,
+        event_pay_purchase_amount_first_day,
+        event_jin_jian_app_cost,
+        event_jin_jian_app,
+        event_register_cost,
+        event_register,
+        event_pay_roi,
+        event_pay_purchase_amount,
+        event_pay,
+        event_pay_first_day_roi,
+        event_pay_first_day,
+        photo_click_cost,
+        action_cost,
+        share ,
+        comment ,
+        photo_like ,
+        follow,
+        report,
+        block,
+        negative,
+        activation,
+        submit,
+        cancel_follow,
+        download_started,
+        download_completed,
+        create_time,
+        update_time)
+        values
+        <foreach collection="creatives" item="campaign" separator=",">
+            (#{campaign.id},
+            #{campaign.accountId},
+            #{campaign.creativeId},
+            #{campaign.statDate},
+            #{campaign.statHour},
+            #{campaign.charge},
+            #{campaign.photoClick},
+            #{campaign.photoShow},
+            #{campaign.aclick},
+            #{campaign.bclick},
+            #{campaign.photoClickRatio},
+            #{campaign.actionRatio},
+            #{campaign.impression1kCost},
+            #{campaign.eventCreditGrantLandingPageCost},
+            #{campaign.eventCreditGrantLandingPage},
+            #{campaign.eventJinJianLandingPageCost},
+            #{campaign.eventJinJianLandingPage},
+            #{campaign.formActionRatio},
+            #{campaign.formCost},
+            #{campaign.formCount},
+            #{campaign.eventOrderPaidCost},
+            #{campaign.eventOrderPaidPurchaseAmount},
+            #{campaign.eventOrderPaid},
+            #{campaign.eventCreditGrantAppRatio},
+            #{campaign.eventCreditGrantAppCost},
+            #{campaign.eventCreditGrantApp},
+            #{campaign.eventPayPurchaseAmountFirstDay},
+            #{campaign.eventJinJianAppCost},
+            #{campaign.eventJinJianApp},
+            #{campaign.eventRegisterCost},
+            #{campaign.eventRegister},
+            #{campaign.eventPayRoi},
+            #{campaign.eventPayPurchaseAmount},
+            #{campaign.eventPay},
+            #{campaign.eventPayFirstDayRoi},
+            #{campaign.eventPayFirstDay},
+            #{campaign.photoClickCost},
+            #{campaign.actionCost},
+            #{campaign.share},
+            #{campaign.comment},
+            #{campaign.photoLike},
+            #{campaign.follow},
+            #{campaign.report},
+            #{campaign.block},
+            #{campaign.negative},
+            #{campaign.activation},
+            #{campaign.submit},
+            #{campaign.cancelFollow},
+            #{campaign.downloadStarted},
+            #{campaign.downloadCompleted},
+            #{campaign.createTime},
+            #{campaign.updateTime})
+        </foreach>
+    </insert>
+</mapper>

+ 152 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaishouReportHourlyCreativeStatisticMapper.xml

@@ -1,5 +1,157 @@
 <?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.kuaishou.modules.report.mapper.KuaishouReportHourlyCreativeStatisticMapper">
+	<insert id="updateCreativeReportHourlyStatistic">
+        REPLACE INTO `ctop_kuaishou_report_hourly_creative_statistic` (
+	`id`,
+	`account_id`,
+	`account_name`,
+	`unit_id`,
+	`unit_name`,
+	`campaign_id`,
+	`campaign_name`,
+	`creative_id`,
+	`creative_name`,
+	`stat_date`,
+	`stat_hour`,
+	`charge`,
+	`photo_click`,
+	`photo_show`,
+	`aclick`,
+	`bclick`,
+	`photo_click_ratio`,
+	`action_ratio`,
+	`impression_1k_cost`,
+	`event_credit_grant_landing_page_cost`,
+	`event_credit_grant_landing_page`,
+	`event_jin_jian_landing_page_cost`,
+	`event_jin_jian_landing_page`,
+	`form_action_ratio`,
+	`form_cost`,
+	`form_count`,
+	`event_order_paid_cost`,
+	`event_order_paid_purchase_amount`,
+	`event_order_paid`,
+	`event_credit_grant_app_ratio`,
+	`event_credit_grant_app_cost`,
+	`event_credit_grant_app`,
+	`event_pay_purchase_amount_first_day`,
+	`event_jin_jian_app_cost`,
+	`event_jin_jian_app`,
+	`event_register_cost`,
+	`event_register`,
+	`event_pay_roi`,
+	`event_pay_purchase_amount`,
+	`event_pay`,
+	`event_pay_first_day_roi`,
+	`event_pay_first_day`,
+	`photo_click_cost`,
+	`action_cost`,
+	`share`,
+	`comment`,
+	`photo_like`,
+	`follow`,
+	`report`,
+	`block`,
+	`negative`,
+	`activation`,
+	`submit`,
+	`cancel_follow`,
+	`download_started`,
+	`download_completed`,
+	`create_time`,
+	`update_time`,
+	`signature`,
+	`url`
+) SELECT
+	*
+FROM
+	(
+		SELECT
+			ckrhc.`id`,
+			ckrhc.`account_id`,
+			cua.account_name,
+			ckg.unit_id,
+			ckg.unit_name,
+			ckc.campaign_id,
+			ckc.campaign_name,
+			ckrhc.`creative_id`,
+			ckr.creative_name,
+			ckrhc.`stat_date`,
+			ckrhc.`stat_hour`,
+			ckrhc.`charge`,
+			ckrhc.`photo_click`,
+			ckrhc.`photo_show`,
+			ckrhc.`aclick`,
+			ckrhc.`bclick`,
+			ckrhc.`photo_click_ratio`,
+			ckrhc.`action_ratio`,
+			ckrhc.`impression_1k_cost`,
+			ckrhc.`event_credit_grant_landing_page_cost`,
+			ckrhc.`event_credit_grant_landing_page`,
+			ckrhc.`event_jin_jian_landing_page_cost`,
+			ckrhc.`event_jin_jian_landing_page`,
+			ckrhc.`form_action_ratio`,
+			ckrhc.`form_cost`,
+			ckrhc.`form_count`,
+			ckrhc.`event_order_paid_cost`,
+			ckrhc.`event_order_paid_purchase_amount`,
+			ckrhc.`event_order_paid`,
+			ckrhc.`event_credit_grant_app_ratio`,
+			ckrhc.`event_credit_grant_app_cost`,
+			ckrhc.`event_credit_grant_app`,
+			ckrhc.`event_pay_purchase_amount_first_day`,
+			ckrhc.`event_jin_jian_app_cost`,
+			ckrhc.`event_jin_jian_app`,
+			ckrhc.`event_register_cost`,
+			ckrhc.`event_register`,
+			ckrhc.`event_pay_roi`,
+			ckrhc.`event_pay_purchase_amount`,
+			ckrhc.`event_pay`,
+			ckrhc.`event_pay_first_day_roi`,
+			ckrhc.`event_pay_first_day`,
+			ckrhc.`photo_click_cost`,
+			ckrhc.`action_cost`,
+			ckrhc.`share`,
+			ckrhc.`comment`,
+			ckrhc.`photo_like`,
+			ckrhc.`follow`,
+			ckrhc.`report`,
+			ckrhc.`block`,
+			ckrhc.`negative`,
+			ckrhc.`activation`,
+			ckrhc.`submit`,
+			ckrhc.`cancel_follow`,
+			ckrhc.`download_started`,
+			ckrhc.`download_completed`,
+			ckrhc.`create_time`,
+			ckrhc.`update_time`,
+			ckvg.signature,
+			ckvg.url
+		FROM
+			(
+				SELECT
+					*
+				FROM
+					ctop_kuaishou_report_hourly_creative
+				WHERE
+					account_id = #{accountId} and stat_date = #{date}) ckrhc,
+					ctop_kuaishou_creative ckr,
+					ctop_user_allocation cua,
+					ctop_kuaishou_campaign ckc,
+					ctop_kuaishou_group ckg,
+					ctop_kuaishou_video_get ckvg
+				WHERE
+					ckrhc.creative_id = ckr.creative_id
+				AND ckr.account_id = cua.account_id
+				AND ckr.campaign_id = ckc.campaign_id
+				AND ckr.unit_id = ckg.unit_id
+				AND ckr.photo_id = ckvg.photo_id
+				AND ckr.account_id = ckvg.account_id
+			) t
+    </insert>
 
+	<delete id="deleteHourlyReport">
+		delete from ctop_kuaishou_report_hourly_creative where stat_date &lt;= #{date}
+	</delete>
 </mapper>

+ 111 - 2
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/mapper/xml/KuaishouReportHourlyGroupMapper.xml

@@ -1,5 +1,114 @@
 <?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.kuaishou.modules.report.mapper.KuaishouReportHourlyGroupMapper">
-
-</mapper>
+    <insert id="replaceBatch">
+        replace into ctop_kuaishou_report_hourly_group(
+        id,
+        account_id,
+        unit_id,
+        stat_date,
+        stat_hour,
+        charge,
+        photo_click,
+        photo_show,
+        aclick,
+        bclick,
+        photo_click_ratio,
+        action_ratio,
+        impression_1k_cost,
+        event_credit_grant_landing_page_cost ,
+        event_credit_grant_landing_page,
+        event_jin_jian_landing_page_cost,
+        event_jin_jian_landing_page,
+        form_action_ratio,
+        form_cost,
+        form_count,
+        event_order_paid_cost,
+        event_order_paid_purchase_amount,
+        event_order_paid,
+        event_credit_grant_app_ratio,
+        event_credit_grant_app_cost,
+        event_credit_grant_app,
+        event_pay_purchase_amount_first_day,
+        event_jin_jian_app_cost,
+        event_jin_jian_app,
+        event_register_cost,
+        event_register,
+        event_pay_roi,
+        event_pay_purchase_amount,
+        event_pay,
+        event_pay_first_day_roi,
+        event_pay_first_day,
+        photo_click_cost,
+        action_cost,
+        share ,
+        comment ,
+        photo_like ,
+        follow,
+        report,
+        block,
+        negative,
+        activation,
+        submit,
+        cancel_follow,
+        download_started,
+        download_completed,
+        create_time,
+        update_time)
+        values
+        <foreach collection="groups" item="campaign" separator=",">
+            (#{campaign.id},
+            #{campaign.accountId},
+            #{campaign.unitId},
+            #{campaign.statDate},
+            #{campaign.statHour},
+            #{campaign.charge},
+            #{campaign.photoClick},
+            #{campaign.photoShow},
+            #{campaign.aclick},
+            #{campaign.bclick},
+            #{campaign.photoClickRatio},
+            #{campaign.actionRatio},
+            #{campaign.impression1kCost},
+            #{campaign.eventCreditGrantLandingPageCost},
+            #{campaign.eventCreditGrantLandingPage},
+            #{campaign.eventJinJianLandingPageCost},
+            #{campaign.eventJinJianLandingPage},
+            #{campaign.formActionRatio},
+            #{campaign.formCost},
+            #{campaign.formCount},
+            #{campaign.eventOrderPaidCost},
+            #{campaign.eventOrderPaidPurchaseAmount},
+            #{campaign.eventOrderPaid},
+            #{campaign.eventCreditGrantAppRatio},
+            #{campaign.eventCreditGrantAppCost},
+            #{campaign.eventCreditGrantApp},
+            #{campaign.eventPayPurchaseAmountFirstDay},
+            #{campaign.eventJinJianAppCost},
+            #{campaign.eventJinJianApp},
+            #{campaign.eventRegisterCost},
+            #{campaign.eventRegister},
+            #{campaign.eventPayRoi},
+            #{campaign.eventPayPurchaseAmount},
+            #{campaign.eventPay},
+            #{campaign.eventPayFirstDayRoi},
+            #{campaign.eventPayFirstDay},
+            #{campaign.photoClickCost},
+            #{campaign.actionCost},
+            #{campaign.share},
+            #{campaign.comment},
+            #{campaign.photoLike},
+            #{campaign.follow},
+            #{campaign.report},
+            #{campaign.block},
+            #{campaign.negative},
+            #{campaign.activation},
+            #{campaign.submit},
+            #{campaign.cancelFollow},
+            #{campaign.downloadStarted},
+            #{campaign.downloadCompleted},
+            #{campaign.createTime},
+            #{campaign.updateTime})
+        </foreach>
+    </insert>
+</mapper>

+ 3 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/IKuaishouReportHourlyCampaignService.java

@@ -1,8 +1,10 @@
 package cn.com.ctop.kuaishou.modules.report.service;
 
-import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyAccount;
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyCampaign;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 public interface IKuaishouReportHourlyCampaignService extends IService<KuaishouReportHourlyCampaign> {
+    void replaceBatch(List<KuaishouReportHourlyCampaign> campaigns);
 }

+ 3 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/IKuaishouReportHourlyCreativeService.java

@@ -1,8 +1,10 @@
 package cn.com.ctop.kuaishou.modules.report.service;
 
-import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyAccount;
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyCreative;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 public interface IKuaishouReportHourlyCreativeService extends IService<KuaishouReportHourlyCreative> {
+    void replaceBatch(List<KuaishouReportHourlyCreative> creatives);
 }

+ 6 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/IKuaishouReportHourlyCreativeStatisticService.java

@@ -1,8 +1,11 @@
 package cn.com.ctop.kuaishou.modules.report.service;
 
+import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyCreativeStatistic;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.Date;
+
 /**
  * 时报清洗数据
  *
@@ -12,4 +15,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IKuaishouReportHourlyCreativeStatisticService extends IService<KuaishouReportHourlyCreativeStatistic> {
 
+    void updateCreativeReportHourlyStatistic(CtopOauthToken token, Date getDate);
+
+    void deleteHourlyReport(Date deleteDate);
 }

+ 3 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/IKuaishouReportHourlyGroupService.java

@@ -1,8 +1,10 @@
 package cn.com.ctop.kuaishou.modules.report.service;
 
-import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyAccount;
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyGroup;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 public interface IKuaishouReportHourlyGroupService extends IService<KuaishouReportHourlyGroup> {
+    void replaceBatch(List<KuaishouReportHourlyGroup> groups);
 }

+ 10 - 3
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouReportHourlyCampaignServiceImpl.java

@@ -1,14 +1,21 @@
 package cn.com.ctop.kuaishou.modules.report.service.impl;
 
-import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyAccount;
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyCampaign;
-import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportHourlyAccountMapper;
 import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportHourlyCampaignMapper;
-import cn.com.ctop.kuaishou.modules.report.service.IKuaishouReportHourlyAccountService;
 import cn.com.ctop.kuaishou.modules.report.service.IKuaishouReportHourlyCampaignService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 public class KuaishouReportHourlyCampaignServiceImpl extends ServiceImpl<KuaishouReportHourlyCampaignMapper, KuaishouReportHourlyCampaign> implements IKuaishouReportHourlyCampaignService {
+    @Autowired
+    private KuaishouReportHourlyCampaignMapper campaignMapper;
+
+    @Override
+    public void replaceBatch(List<KuaishouReportHourlyCampaign> campaigns) {
+        campaignMapper.replaceBatch(campaigns);
+    }
 }

+ 10 - 3
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouReportHourlyCreativeServiceImpl.java

@@ -1,14 +1,21 @@
 package cn.com.ctop.kuaishou.modules.report.service.impl;
 
-import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyAccount;
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyCreative;
-import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportHourlyAccountMapper;
 import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportHourlyCreativeMapper;
-import cn.com.ctop.kuaishou.modules.report.service.IKuaishouReportHourlyAccountService;
 import cn.com.ctop.kuaishou.modules.report.service.IKuaishouReportHourlyCreativeService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 public class KuaishouReportHourlyCreativeServiceImpl extends ServiceImpl<KuaishouReportHourlyCreativeMapper, KuaishouReportHourlyCreative> implements IKuaishouReportHourlyCreativeService {
+    @Autowired
+    private KuaishouReportHourlyCreativeMapper hourlyCreativeMapper;
+
+    @Override
+    public void replaceBatch(List<KuaishouReportHourlyCreative> creatives) {
+        hourlyCreativeMapper.replaceBatch(creatives);
+    }
 }

+ 20 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouReportHourlyCreativeStatisticServiceImpl.java

@@ -1,11 +1,16 @@
 package cn.com.ctop.kuaishou.modules.report.service.impl;
 
+import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyCreativeStatistic;
 import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportHourlyCreativeStatisticMapper;
 import cn.com.ctop.kuaishou.modules.report.service.IKuaishouReportHourlyCreativeStatisticService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
 /**
  * 时报清洗数据
  *
@@ -15,5 +20,20 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class KuaishouReportHourlyCreativeStatisticServiceImpl extends ServiceImpl<KuaishouReportHourlyCreativeStatisticMapper, KuaishouReportHourlyCreativeStatistic> implements IKuaishouReportHourlyCreativeStatisticService {
+    @Autowired
+    private KuaishouReportHourlyCreativeStatisticMapper statisticMapper;
+
+    @Override
+    public void updateCreativeReportHourlyStatistic(CtopOauthToken token, Date getDate) {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        String dateString = format.format(getDate);
+        statisticMapper.updateCreativeReportHourlyStatistic(token.getAccountId(), dateString);
+    }
 
+    @Override
+    public void deleteHourlyReport(Date deleteDate) {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        String dateString = format.format(deleteDate);
+        statisticMapper.deleteHourlyReport(dateString);
+    }
 }

+ 10 - 3
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouReportHourlyGroupServiceImpl.java

@@ -1,14 +1,21 @@
 package cn.com.ctop.kuaishou.modules.report.service.impl;
 
-import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyAccount;
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportHourlyGroup;
-import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportHourlyAccountMapper;
 import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportHourlyGroupMapper;
-import cn.com.ctop.kuaishou.modules.report.service.IKuaishouReportHourlyAccountService;
 import cn.com.ctop.kuaishou.modules.report.service.IKuaishouReportHourlyGroupService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 public class KuaishouReportHourlyGroupServiceImpl extends ServiceImpl<KuaishouReportHourlyGroupMapper, KuaishouReportHourlyGroup> implements IKuaishouReportHourlyGroupService {
+    @Autowired
+    private KuaishouReportHourlyGroupMapper groupMapper;
+
+    @Override
+    public void replaceBatch(List<KuaishouReportHourlyGroup> groups) {
+        groupMapper.replaceBatch(groups);
+    }
 }

+ 0 - 1
module-report/src/main/java/cn/com/ctop/bytedance/controller/MaterialReportController.java

@@ -24,7 +24,6 @@ public class MaterialReportController {
     public List<JSONObject> getKuaiShouMaterialMarket(@RequestBody JSONObject json) {
         List<JSONObject> marketJson = materialReportService.getKuaiShouMaterialMarket(json);
         return marketJson;
-
     }
 
 

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

@@ -284,7 +284,7 @@
             </if>
         </where>
         group by t2.signature
-        order by (t2.charge) desc
+        order by sum(t2.charge) desc
         limit 100
     </select>
 

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

@@ -4,6 +4,7 @@ import cn.com.ctop.bytedance.mapper.MaterialReportMapper;
 import cn.com.ctop.bytedance.service.IMaterialReportService;
 import cn.com.ctop.common.module.utils.Check;
 import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.util.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -14,6 +15,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+@Slf4j
 @Service
 public class MaterialReportServiceImpl implements IMaterialReportService {
     @Autowired
@@ -35,6 +37,9 @@ public class MaterialReportServiceImpl implements IMaterialReportService {
     @Override
     public List<JSONObject> getKuaiShouMaterialMarket(JSONObject json) {
 
+
+        long startTime = System.currentTimeMillis();
+
         List<JSONObject> marketJsonList = new ArrayList<>();
         try {
             if (Check.isNull(json)) {
@@ -112,6 +117,8 @@ public class MaterialReportServiceImpl implements IMaterialReportService {
         } catch (Exception e) {
             e.printStackTrace();
         }
+
+        log.info("素材数据请求所用时长------------->: {} ms", System.currentTimeMillis() - startTime);
         return marketJsonList;
     }
 
@@ -124,6 +131,7 @@ public class MaterialReportServiceImpl implements IMaterialReportService {
     @Override
     public JSONObject getKuaiShouChainRatio(JSONObject json) {
         JSONObject returnJson = new JSONObject();
+        long startTime = System.currentTimeMillis();
         try {
             if (Check.isNull(json)) {
                 return null;
@@ -412,7 +420,7 @@ public class MaterialReportServiceImpl implements IMaterialReportService {
                 returnJson.put("chainRatio", chainRatioJson);
             }
 
-
+            log.info("素材数据获取环比请求所用时长------------->: {} ms", System.currentTimeMillis() - startTime);
             return returnJson;
         } catch (Exception e) {
             e.printStackTrace();