hpk 1 год назад
Родитель
Сommit
d9df66fee5
15 измененных файлов с 272 добавлено и 71 удалено
  1. 1 1
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/controller/BytedanceController.java
  2. 1 1
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/controller/TestController.java
  3. 1 1
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IBytedanceMaterialReportService.java
  4. 14 2
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/ByteDanceFlowDetailsReportServiceImpl.java
  5. 31 4
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceAccountReportServiceImpl.java
  6. 63 19
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceCdpProjectServiceImpl.java
  7. 25 11
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceMaterialReportServiceImpl.java
  8. 14 1
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceProductReportServiceImpl.java
  9. 32 4
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedancePromoterReportServiceImpl.java
  10. 60 18
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/ToolsSiteServiceImpl.java
  11. 5 0
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/utils/Check.java
  12. 1 2
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/utils/Okhttp3Utils.java
  13. 1 1
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedancePromoterReportJob.java
  14. 1 1
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceReportRetryJob.java
  15. 22 5
      job-bytedance/src/main/java/cn/com/ctop/job/bytedance/utils/RateLimitUtil.java

+ 1 - 1
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/controller/BytedanceController.java

@@ -313,7 +313,7 @@ public class BytedanceController {
             executor10Service1.submit(() -> {
             executor10Service1.submit(() -> {
                 Long adverId = jsonObject.getLong("advertiserId");
                 Long adverId = jsonObject.getLong("advertiserId");
                 String accessToken = jsonObject.getString("accessToken");
                 String accessToken = jsonObject.getString("accessToken");
-                bytedanceMaterialReportService.getBytedanceMaterialDailyReport(adverId, accessToken, startDate, endDate, 1, null, 1, 0, 1);
+                bytedanceMaterialReportService.getBytedanceMaterialDailyReport(adverId, startDate, endDate, 1, null, 1, 0, 1);
             });
             });
         }
         }
     }
     }

+ 1 - 1
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/controller/TestController.java

@@ -58,7 +58,7 @@ public class TestController {
             executorService.submit(new Runnable() {
             executorService.submit(new Runnable() {
                 @Override
                 @Override
                 public void run() {
                 public void run() {
-                    if(rateLimitUtil.acquire("test1","http://a.com/b/c", 2, 100, RateIntervalUnit.MILLISECONDS)){
+                    if(rateLimitUtil.acquire("test1","http://a.com/b/c")){
                         log.info(Thread.currentThread().getName() + " : " + finalI);
                         log.info(Thread.currentThread().getName() + " : " + finalI);
                     }else{
                     }else{
                         log.info(Thread.currentThread().getName() + " : 限流了!!!");
                         log.info(Thread.currentThread().getName() + " : 限流了!!!");

+ 1 - 1
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/IBytedanceMaterialReportService.java

@@ -3,7 +3,7 @@ package cn.com.ctop.job.bytedance.data.service;
 import java.util.Set;
 import java.util.Set;
 
 
 public interface IBytedanceMaterialReportService {
 public interface IBytedanceMaterialReportService {
-    void getBytedanceMaterialDailyReport(Long advertiserId, String accessToken, String startDate, String endDate, Integer page,
+    void getBytedanceMaterialDailyReport(Long advertiserId, String startDate, String endDate, Integer page,
                                          Long errorId, Integer isLog, Integer isSend, int retry);
                                          Long errorId, Integer isLog, Integer isSend, int retry);
 
 
     void getBytedanceMaterialVideo(Long advertiserId, Set<Long> materialIds, String startTime, String endTime, Integer page, Long errorId, Integer isLog, Integer isSend, int retry);
     void getBytedanceMaterialVideo(Long advertiserId, Set<Long> materialIds, String startTime, String endTime, Integer page, Long errorId, Integer isLog, Integer isSend, int retry);

+ 14 - 2
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/ByteDanceFlowDetailsReportServiceImpl.java

@@ -5,10 +5,12 @@ import cn.com.ctop.job.bytedance.data.entity.ByteDanceFlowDetailsReportDaily;
 import cn.com.ctop.job.bytedance.data.entity.BytedanceErrorLog;
 import cn.com.ctop.job.bytedance.data.entity.BytedanceErrorLog;
 import cn.com.ctop.job.bytedance.data.mapper.ByteDanceFlowDetailsReportMapper;
 import cn.com.ctop.job.bytedance.data.mapper.ByteDanceFlowDetailsReportMapper;
 import cn.com.ctop.job.bytedance.data.mapper.BytedancePromoterReportMapper;
 import cn.com.ctop.job.bytedance.data.mapper.BytedancePromoterReportMapper;
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceRefreshTokenMapper;
 import cn.com.ctop.job.bytedance.data.service.IByteDanceFlowDetailsReportService;
 import cn.com.ctop.job.bytedance.data.service.IByteDanceFlowDetailsReportService;
 import cn.com.ctop.job.bytedance.data.utils.AlertUtils;
 import cn.com.ctop.job.bytedance.data.utils.AlertUtils;
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
 import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
+import cn.com.ctop.job.bytedance.utils.RateLimitUtil;
 import cn.com.ctop.job.bytedance.utils.doris.sink.DorisMultiTableStreamLoadManager;
 import cn.com.ctop.job.bytedance.utils.doris.sink.DorisMultiTableStreamLoadManager;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
@@ -41,6 +43,10 @@ public class ByteDanceFlowDetailsReportServiceImpl implements IByteDanceFlowDeta
 
 
     @Autowired
     @Autowired
     private BytedancePromoterReportMapper promoterReportMapper;
     private BytedancePromoterReportMapper promoterReportMapper;
+    @Autowired
+    private BytedanceRefreshTokenMapper tokenMapper;
+    @Autowired
+    private RateLimitUtil rateLimitUtil;
 
 
     @Override
     @Override
     public List<AdvertiserAccount> getAdAccount() {
     public List<AdvertiserAccount> getAdAccount() {
@@ -49,6 +55,8 @@ public class ByteDanceFlowDetailsReportServiceImpl implements IByteDanceFlowDeta
 
 
     @Override
     @Override
     public void getBytedanceFlowDetailsDailyReport(Long advertiserId, String accessToken, String accountType, String startDate, String endDate, Integer page, Long errorId) {
     public void getBytedanceFlowDetailsDailyReport(Long advertiserId, String accessToken, String accountType, String startDate, String endDate, Integer page, Long errorId) {
+        JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+        String devAppId = authConfig.getString("app_id");
         String url = "https://ad.oceanengine.com/open_api/2/advertiser/fund/daily_stat/";
         String url = "https://ad.oceanengine.com/open_api/2/advertiser/fund/daily_stat/";
         Map<String, Object> paramsMap = new HashMap<>();
         Map<String, Object> paramsMap = new HashMap<>();
         paramsMap.put("advertiser_id", advertiserId);
         paramsMap.put("advertiser_id", advertiserId);
@@ -66,10 +74,14 @@ public class ByteDanceFlowDetailsReportServiceImpl implements IByteDanceFlowDeta
         Map<String, String> headers = new HashMap<>();
         Map<String, String> headers = new HashMap<>();
         headers.put("Access-Token", accessToken);
         headers.put("Access-Token", accessToken);
         headers.put("Content-Type", "application/json");
         headers.put("Content-Type", "application/json");
-        String s = HttpUtils.httpGet(url, paramsMap, headers);
+        String s = null;
+        if (rateLimitUtil.acquire(devAppId, url)) {
+            s = HttpUtils.httpGet(url, paramsMap, headers);
+        }
         JSONObject result = JSONObject.parseObject(s);
         JSONObject result = JSONObject.parseObject(s);
         if (Check.isNull(result)) {
         if (Check.isNull(result)) {
             log.info("账户id:{},广告流水详情请求结果返回为空", advertiserId);
             log.info("账户id:{},广告流水详情请求结果返回为空", advertiserId);
+            insertErrorLog(advertiserId, startDate, endDate);
             return;
             return;
         }
         }
 
 
@@ -128,7 +140,7 @@ public class ByteDanceFlowDetailsReportServiceImpl implements IByteDanceFlowDeta
                 }
                 }
 
 
             }
             }
-        }else{
+        } else {
             //增加错误日志保存
             //增加错误日志保存
             log.info("账户id:{},日期:{}流水日报请求结果失败,返回数据:{}", advertiserId, startDate, result);
             log.info("账户id:{},日期:{}流水日报请求结果失败,返回数据:{}", advertiserId, startDate, result);
             insertErrorLog(advertiserId, startDate, endDate);
             insertErrorLog(advertiserId, startDate, endDate);

+ 31 - 4
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceAccountReportServiceImpl.java

@@ -2,11 +2,13 @@ package cn.com.ctop.job.bytedance.data.service.impl;
 
 
 import cn.com.ctop.job.bytedance.data.entity.*;
 import cn.com.ctop.job.bytedance.data.entity.*;
 import cn.com.ctop.job.bytedance.data.mapper.BytedanceAccountReportMapper;
 import cn.com.ctop.job.bytedance.data.mapper.BytedanceAccountReportMapper;
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceRefreshTokenMapper;
 import cn.com.ctop.job.bytedance.data.service.IBytedanceAccountReportService;
 import cn.com.ctop.job.bytedance.data.service.IBytedanceAccountReportService;
 import cn.com.ctop.job.bytedance.data.utils.AlertUtils;
 import cn.com.ctop.job.bytedance.data.utils.AlertUtils;
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.FieldsConfig;
 import cn.com.ctop.job.bytedance.data.utils.FieldsConfig;
 import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
 import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
+import cn.com.ctop.job.bytedance.utils.RateLimitUtil;
 import cn.com.ctop.job.bytedance.utils.doris.sink.DorisMultiTableStreamLoadManager;
 import cn.com.ctop.job.bytedance.utils.doris.sink.DorisMultiTableStreamLoadManager;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
@@ -27,10 +29,17 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
     @Autowired
     @Autowired
     private BytedanceAccountReportMapper accountReportMapper;
     private BytedanceAccountReportMapper accountReportMapper;
 
 
+    @Autowired
+    private BytedanceRefreshTokenMapper tokenMapper;
+
+    @Autowired
+    private RateLimitUtil rateLimitUtil;
 
 
     @Override
     @Override
     public void getBytedanceRetryAccountHourReport(Long errorId, Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Integer isSend) {
     public void getBytedanceRetryAccountHourReport(Long errorId, Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Integer isSend) {
         try {
         try {
+            JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+            String devAppId = authConfig.getString("app_id");
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             Map<String, Object> paramsMap = new HashMap<>();
             Map<String, Object> paramsMap = new HashMap<>();
             paramsMap.put("advertiser_id", advertiserId);
             paramsMap.put("advertiser_id", advertiserId);
@@ -46,7 +55,10 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
             Map<String, String> headers = new HashMap<>();
             Map<String, String> headers = new HashMap<>();
             headers.put("Access-Token", accessToken);
             headers.put("Access-Token", accessToken);
             headers.put("Content-Type", "application/json;charset=UTF-8");
             headers.put("Content-Type", "application/json;charset=UTF-8");
-            String s = HttpUtils.httpGet(url, paramsMap, headers);
+            String s = null;
+            if (rateLimitUtil.acquire(devAppId, url)) {
+                s = HttpUtils.httpGet(url, paramsMap, headers);
+            }
             JSONObject result = JSONObject.parseObject(s);
             JSONObject result = JSONObject.parseObject(s);
             if (Check.isNull(result)) {
             if (Check.isNull(result)) {
                 log.info("账户id:{},日期:{},广告时报(账户粒度)请求结果返回为空", advertiserId, startDate);
                 log.info("账户id:{},日期:{},广告时报(账户粒度)请求结果返回为空", advertiserId, startDate);
@@ -107,6 +119,8 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
     @Override
     @Override
     public void getBytedanceRetryAccountDailyReport(Long errorId, Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Integer isSend) {
     public void getBytedanceRetryAccountDailyReport(Long errorId, Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Integer isSend) {
         try {
         try {
+            JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+            String devAppId = authConfig.getString("app_id");
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             Map<String, Object> paramsMap = new HashMap<>();
             Map<String, Object> paramsMap = new HashMap<>();
             paramsMap.put("advertiser_id", advertiserId);
             paramsMap.put("advertiser_id", advertiserId);
@@ -122,7 +136,10 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
             Map<String, String> headers = new HashMap<>();
             Map<String, String> headers = new HashMap<>();
             headers.put("Access-Token", accessToken);
             headers.put("Access-Token", accessToken);
             headers.put("Content-Type", "application/json;charset=UTF-8");
             headers.put("Content-Type", "application/json;charset=UTF-8");
-            String s = HttpUtils.httpGet(url, paramsMap, headers);
+            String s = null;
+            if (rateLimitUtil.acquire(devAppId, url)) {
+                s = HttpUtils.httpGet(url, paramsMap, headers);
+            }
             JSONObject result = JSONObject.parseObject(s);
             JSONObject result = JSONObject.parseObject(s);
             if (Check.isNull(result)) {
             if (Check.isNull(result)) {
                 log.info("账户id:{},日期:{},广告时报(账户粒度)请求结果返回为空", advertiserId, startDate);
                 log.info("账户id:{},日期:{},广告时报(账户粒度)请求结果返回为空", advertiserId, startDate);
@@ -180,6 +197,8 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
     @Override
     @Override
     public void getBytedanceAccountHour(Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Integer isLog) {
     public void getBytedanceAccountHour(Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Integer isLog) {
         try {
         try {
+            JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+            String devAppId = authConfig.getString("app_id");
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             Map<String, Object> paramsMap = new HashMap<>();
             Map<String, Object> paramsMap = new HashMap<>();
             paramsMap.put("advertiser_id", advertiserId);
             paramsMap.put("advertiser_id", advertiserId);
@@ -194,7 +213,10 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
             paramsMap.put("page_size", 100);
             paramsMap.put("page_size", 100);
             Map<String, String> headers = new HashMap<>();
             Map<String, String> headers = new HashMap<>();
             headers.put("Access-Token", accessToken);
             headers.put("Access-Token", accessToken);
-            String s = HttpUtils.httpGet(url, paramsMap, headers);
+            String s = null;
+            if (rateLimitUtil.acquire(devAppId, url)) {
+                s = HttpUtils.httpGet(url, paramsMap, headers);
+            }
             JSONObject result = JSONObject.parseObject(s);
             JSONObject result = JSONObject.parseObject(s);
             if (Check.isNull(result)) {
             if (Check.isNull(result)) {
                 log.info("账户id:{},日期:{},广告时报(账户粒度)请求结果返回为空", advertiserId, startDate);
                 log.info("账户id:{},日期:{},广告时报(账户粒度)请求结果返回为空", advertiserId, startDate);
@@ -271,6 +293,8 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
     @Override
     @Override
     public void getBytedanceAccountDaily(Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Integer isLog) {
     public void getBytedanceAccountDaily(Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Integer isLog) {
         try {
         try {
+            JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+            String devAppId = authConfig.getString("app_id");
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             Map<String, Object> paramsMap = new HashMap<>();
             Map<String, Object> paramsMap = new HashMap<>();
             paramsMap.put("advertiser_id", advertiserId);
             paramsMap.put("advertiser_id", advertiserId);
@@ -285,7 +309,10 @@ public class BytedanceAccountReportServiceImpl implements IBytedanceAccountRepor
             paramsMap.put("page_size", 100);
             paramsMap.put("page_size", 100);
             Map<String, String> headers = new HashMap<>();
             Map<String, String> headers = new HashMap<>();
             headers.put("Access-Token", accessToken);
             headers.put("Access-Token", accessToken);
-            String s = HttpUtils.httpGet(url, paramsMap, headers);
+            String s = null;
+            if (rateLimitUtil.acquire(devAppId, url)) {
+                s = HttpUtils.httpGet(url, paramsMap, headers);
+            }
             JSONObject result = JSONObject.parseObject(s);
             JSONObject result = JSONObject.parseObject(s);
             if (Check.isNull(result)) {
             if (Check.isNull(result)) {
                 log.info("账户id:{},日期:{},账户日报(账户粒度)请求结果返回为空", advertiserId, startDate);
                 log.info("账户id:{},日期:{},账户日报(账户粒度)请求结果返回为空", advertiserId, startDate);

+ 63 - 19
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceCdpProjectServiceImpl.java

@@ -7,6 +7,7 @@ import cn.com.ctop.job.bytedance.data.mapper.BytedancePromoterReportMapper;
 import cn.com.ctop.job.bytedance.data.mapper.BytedanceRefreshTokenMapper;
 import cn.com.ctop.job.bytedance.data.mapper.BytedanceRefreshTokenMapper;
 import cn.com.ctop.job.bytedance.data.service.IBytedanceCdpProjectService;
 import cn.com.ctop.job.bytedance.data.service.IBytedanceCdpProjectService;
 import cn.com.ctop.job.bytedance.data.utils.*;
 import cn.com.ctop.job.bytedance.data.utils.*;
+import cn.com.ctop.job.bytedance.utils.RateLimitUtil;
 import cn.com.ctop.job.bytedance.utils.doris.sink.DorisMultiTableStreamLoadManager;
 import cn.com.ctop.job.bytedance.utils.doris.sink.DorisMultiTableStreamLoadManager;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
@@ -44,6 +45,9 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
     @Autowired
     @Autowired
     private BytedancePromoterReportMapper promoterReportMapper;
     private BytedancePromoterReportMapper promoterReportMapper;
 
 
+    @Autowired
+    private RateLimitUtil rateLimitUtil;
+
     @Override
     @Override
     public List<Long> queryAllAdverIdList(String type) {
     public List<Long> queryAllAdverIdList(String type) {
         return bytedanceCdpProjectMapper.queryAllAdverIdList(type);
         return bytedanceCdpProjectMapper.queryAllAdverIdList(type);
@@ -95,11 +99,13 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
             boolean hasNextPage = false;
             boolean hasNextPage = false;
             Integer nextPage = null;
             Integer nextPage = null;
             Long nextCursor = null;
             Long nextCursor = null;
-            String accessToken = tokenMapper.onlyGetToken(advertiserId);
-            if (Check.isNull(accessToken)) {
+            JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+            if (Check.isNull(authConfig)) {
                 log.error("账户({})查询token失败", advertiserId);
                 log.error("账户({})查询token失败", advertiserId);
                 return;
                 return;
             }
             }
+            String accessToken = authConfig.getString("access_token");
+            String devAppId = authConfig.getString("app_id");
             Map<String, Object> params = new HashMap<>();
             Map<String, Object> params = new HashMap<>();
             params.put("advertiser_id", advertiserId);
             params.put("advertiser_id", advertiserId);
             JSONObject filtering = new JSONObject();
             JSONObject filtering = new JSONObject();
@@ -119,7 +125,10 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
                 params.put("page_size", 20);//最大20
                 params.put("page_size", 20);//最大20
             }
             }
             String url = "https://api.oceanengine.com/open_api/v3.0/promotion/list/";
             String url = "https://api.oceanengine.com/open_api/v3.0/promotion/list/";
-            String results = HttpUtils.httpGet(url, params, HttpUtils.postMHeaders(accessToken));
+            String results = null;
+            if (rateLimitUtil.acquire(devAppId, url)) {
+                results = HttpUtils.httpGet(url, params, HttpUtils.postMHeaders(accessToken));
+            }
             JSONObject obj = JSONObject.parseObject(results);
             JSONObject obj = JSONObject.parseObject(results);
             if (!Check.isNull(obj)) {
             if (!Check.isNull(obj)) {
                 Integer code = obj.getInteger("code");
                 Integer code = obj.getInteger("code");
@@ -161,6 +170,9 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
                     }
                     }
                     return;
                     return;
                 }
                 }
+            } else {
+                insertErrorLog(isLog, advertiserId, "-", "-", "promotion_list", results);
+                return;
             }
             }
             if (hasNextPage) {
             if (hasNextPage) {
                 getPromotionListVo(advertiserId, ids, date, nextPage, nextCursor, 1, errorId, isLog);
                 getPromotionListVo(advertiserId, ids, date, nextPage, nextCursor, 1, errorId, isLog);
@@ -200,11 +212,13 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
     private void getProjectListVo(Long advertiserId, JSONArray ids, String type, String date, Integer page, int count, Long errorId, Integer isLog) {
     private void getProjectListVo(Long advertiserId, JSONArray ids, String type, String date, Integer page, int count, Long errorId, Integer isLog) {
         try {
         try {
             boolean nextPage = false;
             boolean nextPage = false;
-            String accessToken = tokenMapper.onlyGetToken(advertiserId);
-            if (Check.isNull(accessToken)) {
+            JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+            if (Check.isNull(authConfig)) {
                 log.error("账户({})查询token失败", advertiserId);
                 log.error("账户({})查询token失败", advertiserId);
                 return;
                 return;
             }
             }
+            String accessToken = authConfig.getString("access_token");
+            String devAppId = authConfig.getString("app_id");
             Map<String, Object> params = new HashMap<>();
             Map<String, Object> params = new HashMap<>();
             params.put("advertiser_id", advertiserId);
             params.put("advertiser_id", advertiserId);
             JSONObject filtering = new JSONObject();
             JSONObject filtering = new JSONObject();
@@ -223,7 +237,10 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
             params.put("page", page);
             params.put("page", page);
             params.put("page_size", 100);//最大100
             params.put("page_size", 100);//最大100
             String url = "https://api.oceanengine.com/open_api/v3.0/project/list/";
             String url = "https://api.oceanengine.com/open_api/v3.0/project/list/";
-            String results = HttpUtils.httpGet(url, params, HttpUtils.postMHeaders(accessToken));
+            String results = null;
+            if (rateLimitUtil.acquire(devAppId, url)) {
+                results = HttpUtils.httpGet(url, params, HttpUtils.postMHeaders(accessToken));
+            }
             JSONObject obj = JSONObject.parseObject(results);
             JSONObject obj = JSONObject.parseObject(results);
             if (!Check.isNull(obj)) {
             if (!Check.isNull(obj)) {
                 Integer code = obj.getInteger("code");
                 Integer code = obj.getInteger("code");
@@ -277,11 +294,13 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
     private void getByteAppInfoVo(Long advertiserId, String searchType, Integer page, int count) {
     private void getByteAppInfoVo(Long advertiserId, String searchType, Integer page, int count) {
         try {
         try {
             boolean nextPage = false;
             boolean nextPage = false;
-            String accessToken = tokenMapper.onlyGetToken(advertiserId);
-            if (Check.isNull(accessToken)) {
+            JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+            if (Check.isNull(authConfig)) {
                 log.error("账户({})查询token失败", advertiserId);
                 log.error("账户({})查询token失败", advertiserId);
                 return;
                 return;
             }
             }
+            String accessToken = authConfig.getString("access_token");
+            String devAppId = authConfig.getString("app_id");
             JSONObject params = new JSONObject();
             JSONObject params = new JSONObject();
             params.put("advertiser_id", advertiserId);
             params.put("advertiser_id", advertiserId);
             params.put("page", page);
             params.put("page", page);
@@ -294,7 +313,10 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
             params.put("filtering", filtering);
             params.put("filtering", filtering);
             //获取微信小程序列表
             //获取微信小程序列表
             String url = "https://api.oceanengine.com/open_api/v3.0/tools/micro_app/list/";
             String url = "https://api.oceanengine.com/open_api/v3.0/tools/micro_app/list/";
-            JSONObject obj = Okhttp3Utils.bytedanceGetRequest(accessToken, url, params);
+            JSONObject obj = null;
+            if(rateLimitUtil.acquire(devAppId, url)) {
+                obj = Okhttp3Utils.bytedanceGetRequest(accessToken, url, params);
+            }
             if (!Check.isNull(obj)) {
             if (!Check.isNull(obj)) {
                 Integer code = obj.getInteger("code");
                 Integer code = obj.getInteger("code");
                 if (code == 0) {
                 if (code == 0) {
@@ -317,6 +339,10 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
                         bytedanceCdpProjectMapper.insertErrorAdvertiserId(advertiserId, "tt");
                         bytedanceCdpProjectMapper.insertErrorAdvertiserId(advertiserId, "tt");
                     }
                     }
                 }
                 }
+            }else {
+                log.error("账户({})获取抖小列表失败,入参:{}\n结果:{}", advertiserId, JSONObject.toJSONString(params), obj);
+                bytedanceCdpProjectMapper.insertErrorAdvertiserId(advertiserId, "tt");
+                return;
             }
             }
             if (nextPage) {
             if (nextPage) {
                 getByteAppInfoVo(advertiserId, searchType, page + 1, 1);
                 getByteAppInfoVo(advertiserId, searchType, page + 1, 1);
@@ -330,18 +356,20 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
 
 
     @Override
     @Override
     public void getByteAppLinkInfo(Long advertiserId) {
     public void getByteAppLinkInfo(Long advertiserId) {
-        String accessToken = tokenMapper.onlyGetToken(advertiserId);
-        if (Check.isNull(accessToken)) {
+        JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+        if (Check.isNull(authConfig)) {
             log.error("账户({})查询token失败", advertiserId);
             log.error("账户({})查询token失败", advertiserId);
             return;
             return;
         }
         }
+        String accessToken = authConfig.getString("access_token");
+        String devAppId = authConfig.getString("app_id");
         List<String> ids = bytedanceCdpProjectMapper.queryAppInstanceIdList(advertiserId);
         List<String> ids = bytedanceCdpProjectMapper.queryAppInstanceIdList(advertiserId);
         for (String id : ids) {
         for (String id : ids) {
-            this.getByteAppLinkInfoVo(accessToken, advertiserId, id, 1, 1);
+            this.getByteAppLinkInfoVo(accessToken, devAppId, advertiserId, id, 1, 1);
         }
         }
     }
     }
 
 
-    private void getByteAppLinkInfoVo(String accessToken, Long advertiserId, String instanceId, Integer page, int count) {
+    private void getByteAppLinkInfoVo(String accessToken, String devAppId, Long advertiserId, String instanceId, Integer page, int count) {
         try {
         try {
             boolean nextPage = false;
             boolean nextPage = false;
             JSONObject params = new JSONObject();
             JSONObject params = new JSONObject();
@@ -353,7 +381,10 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
             params.put("filtering", filtering);
             params.put("filtering", filtering);
             //获取微信小程序列表
             //获取微信小程序列表
             String url = "https://api.oceanengine.com/open_api/v3.0/tools/asset_link/list/";
             String url = "https://api.oceanengine.com/open_api/v3.0/tools/asset_link/list/";
-            JSONObject obj = Okhttp3Utils.bytedanceGetRequest(accessToken, url, params);
+            JSONObject obj = null;
+            if(rateLimitUtil.acquire(devAppId, url)) {
+                obj = Okhttp3Utils.bytedanceGetRequest(accessToken, url, params);
+            }
             if (!Check.isNull(obj)) {
             if (!Check.isNull(obj)) {
                 Integer code = obj.getInteger("code");
                 Integer code = obj.getInteger("code");
                 if (code == 0) {
                 if (code == 0) {
@@ -374,15 +405,19 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
                     //40110请求超频 51010 内部服务超时
                     //40110请求超频 51010 内部服务超时
                     if ((40110 == code || 51010 == code) && count <= 3) {
                     if ((40110 == code || 51010 == code) && count <= 3) {
                         Thread.sleep(700);
                         Thread.sleep(700);
-                        getByteAppLinkInfoVo(accessToken, advertiserId, instanceId, page, count + 1);
+                        getByteAppLinkInfoVo(accessToken, devAppId, advertiserId, instanceId, page, count + 1);
                     } else {
                     } else {
                         bytedanceCdpProjectMapper.insertTTErrorAdvertiserId(advertiserId);
                         bytedanceCdpProjectMapper.insertTTErrorAdvertiserId(advertiserId);
                         log.error("账户({})获取字节小程序/小游戏详情内容失败,入参:{}\n结果:{}", advertiserId, JSONObject.toJSONString(params), obj);
                         log.error("账户({})获取字节小程序/小游戏详情内容失败,入参:{}\n结果:{}", advertiserId, JSONObject.toJSONString(params), obj);
                     }
                     }
                 }
                 }
+            } else {
+                bytedanceCdpProjectMapper.insertTTErrorAdvertiserId(advertiserId);
+                log.error("账户({})获取字节小程序/小游戏详情内容失败,入参:{}\n结果:{}", advertiserId, JSONObject.toJSONString(params), obj);
+                return;
             }
             }
             if (nextPage) {
             if (nextPage) {
-                getByteAppLinkInfoVo(accessToken, advertiserId, instanceId, page + 1, count);
+                getByteAppLinkInfoVo(accessToken, devAppId, advertiserId, instanceId, page + 1, count);
             }
             }
         } catch (Exception e) {
         } catch (Exception e) {
             bytedanceCdpProjectMapper.insertTTErrorAdvertiserId(advertiserId);
             bytedanceCdpProjectMapper.insertTTErrorAdvertiserId(advertiserId);
@@ -400,11 +435,13 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
     private void getWxAppInfoVo(Long advertiserId, String searchType, Integer page, int count) {
     private void getWxAppInfoVo(Long advertiserId, String searchType, Integer page, int count) {
         try {
         try {
             boolean nextPage = false;
             boolean nextPage = false;
-            String accessToken = tokenMapper.onlyGetToken(advertiserId);
-            if (Check.isNull(accessToken)) {
+            JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+            if (Check.isNull(authConfig)) {
                 log.error("账户({})查询token失败", advertiserId);
                 log.error("账户({})查询token失败", advertiserId);
                 return;
                 return;
             }
             }
+            String accessToken = authConfig.getString("access_token");
+            String devAppId = authConfig.getString("app_id");
             JSONObject params = new JSONObject();
             JSONObject params = new JSONObject();
             params.put("advertiser_id", advertiserId);
             params.put("advertiser_id", advertiserId);
             params.put("page", page);
             params.put("page", page);
@@ -418,7 +455,10 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
             params.put("filtering", filtering);
             params.put("filtering", filtering);
             //获取微信小程序列表
             //获取微信小程序列表
             String url = "https://api.oceanengine.com/open_api/v3.0/tools/wechat_applet/list/";
             String url = "https://api.oceanengine.com/open_api/v3.0/tools/wechat_applet/list/";
-            JSONObject obj = Okhttp3Utils.bytedanceGetRequest(accessToken, url, params);
+            JSONObject obj = null;
+            if(rateLimitUtil.acquire(devAppId, url)) {
+                obj = Okhttp3Utils.bytedanceGetRequest(accessToken, url, params);
+            }
             if (!Check.isNull(obj)) {
             if (!Check.isNull(obj)) {
                 Integer code = obj.getInteger("code");
                 Integer code = obj.getInteger("code");
                 if (code == 0) {
                 if (code == 0) {
@@ -455,6 +495,10 @@ public class BytedanceCdpProjectServiceImpl implements IBytedanceCdpProjectServi
                         bytedanceCdpProjectMapper.insertErrorAdvertiserId(advertiserId, "wx");
                         bytedanceCdpProjectMapper.insertErrorAdvertiserId(advertiserId, "wx");
                     }
                     }
                 }
                 }
+            } else {
+                log.error("账户({})获取微小列表失败,入参:{}\n结果:{}", advertiserId, JSONObject.toJSONString(params), obj);
+                bytedanceCdpProjectMapper.insertErrorAdvertiserId(advertiserId, "wx");
+                return;
             }
             }
             if (nextPage) {
             if (nextPage) {
                 getWxAppInfoVo(advertiserId, searchType, page + 1, 1);
                 getWxAppInfoVo(advertiserId, searchType, page + 1, 1);

+ 25 - 11
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceMaterialReportServiceImpl.java

@@ -19,10 +19,8 @@ import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.time.Duration;
 import java.time.Duration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 @Service
 @Service
 @Slf4j
 @Slf4j
@@ -39,9 +37,14 @@ public class BytedanceMaterialReportServiceImpl implements IBytedanceMaterialRep
     private RateLimitUtil rateLimitUtil;
     private RateLimitUtil rateLimitUtil;
 
 
     @Override
     @Override
-    public void getBytedanceMaterialDailyReport(Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Long errorId, Integer isLog, Integer isSend, int retry) {
+    public void getBytedanceMaterialDailyReport(Long advertiserId, String startDate, String endDate, Integer page, Long errorId, Integer isLog, Integer isSend, int retry) {
         try {
         try {
-            accessToken = tokenMapper.onlyGetToken(advertiserId);
+            JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+            if (Check.isNull(authConfig)) {
+                log.info("账户id:{},获取素材日报token为空", advertiserId);
+            }
+            String accessToken = authConfig.getString("access_token");
+            String devAppId = authConfig.getString("app_id");
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             Map<String, Object> paramsMap = new HashMap<>();
             Map<String, Object> paramsMap = new HashMap<>();
             paramsMap.put("advertiser_id", advertiserId);
             paramsMap.put("advertiser_id", advertiserId);
@@ -57,7 +60,10 @@ public class BytedanceMaterialReportServiceImpl implements IBytedanceMaterialRep
             Map<String, String> headers = new HashMap<>();
             Map<String, String> headers = new HashMap<>();
             headers.put("Access-Token", accessToken);
             headers.put("Access-Token", accessToken);
             headers.put("Content-Type", "application/json");
             headers.put("Content-Type", "application/json");
-            String s = HttpUtils.httpGet(url, paramsMap, headers);
+            String s = null;
+            if (rateLimitUtil.acquire(devAppId, url)) {
+                s = HttpUtils.httpGet(url, paramsMap, headers);
+            }
             JSONObject result = JSONObject.parseObject(s);
             JSONObject result = JSONObject.parseObject(s);
             Set<Long> materialIds = new HashSet<>();
             Set<Long> materialIds = new HashSet<>();
             if (Check.isNull(result)) {
             if (Check.isNull(result)) {
@@ -106,7 +112,7 @@ public class BytedanceMaterialReportServiceImpl implements IBytedanceMaterialRep
                         Thread.sleep(800);
                         Thread.sleep(800);
                     } catch (Exception ignored) {
                     } catch (Exception ignored) {
                     }
                     }
-                    getBytedanceMaterialDailyReport(advertiserId, accessToken, startDate, endDate, page, errorId, isLog, isSend, retry + 1);
+                    getBytedanceMaterialDailyReport(advertiserId, startDate, endDate, page, errorId, isLog, isSend, retry + 1);
                     return;
                     return;
                 }
                 }
                 log.info("账户id:{},日期:{}素材日报请求结果失败,返回数据:{}", advertiserId, startDate, result);
                 log.info("账户id:{},日期:{}素材日报请求结果失败,返回数据:{}", advertiserId, startDate, result);
@@ -128,7 +134,7 @@ public class BytedanceMaterialReportServiceImpl implements IBytedanceMaterialRep
             }
             }
 
 
             if (page < totalPage) {
             if (page < totalPage) {
-                getBytedanceMaterialDailyReport(advertiserId, accessToken, startDate, endDate, page + 1, errorId, isLog, isSend, 1);
+                getBytedanceMaterialDailyReport(advertiserId, startDate, endDate, page + 1, errorId, isLog, isSend, 1);
             } else {
             } else {
                 log.info("账户ID:{}, 开始日期:{}, 结束日期:{}, totalPage:{}, 素材日报数据请求成功", advertiserId, startDate, endDate, totalPage);
                 log.info("账户ID:{}, 开始日期:{}, 结束日期:{}, totalPage:{}, 素材日报数据请求成功", advertiserId, startDate, endDate, totalPage);
                 if (errorId != null) {
                 if (errorId != null) {
@@ -162,7 +168,15 @@ public class BytedanceMaterialReportServiceImpl implements IBytedanceMaterialRep
                 filtering.put("end_time", endTime);
                 filtering.put("end_time", endTime);
             }
             }
             if (!Check.isNull(materialIds)) {
             if (!Check.isNull(materialIds)) {
-                filtering.put("material_ids", materialIds);
+                List<Long> collect = materialIds.stream().filter(id -> !redisTemplate_db2.hasKey("mvid:1:" + id)).collect(Collectors.toList());
+                if (!Check.isNull(collect)) {
+                    filtering.put("material_ids", collect);
+                } else {
+                    if (errorId != null) {
+                        promoterReportMapper.deleteInfoByErrorId(errorId);
+                    }
+                    return;
+                }
             }
             }
             paramsMap.put("filtering", filtering);
             paramsMap.put("filtering", filtering);
             paramsMap.put("page", page);
             paramsMap.put("page", page);
@@ -171,7 +185,7 @@ public class BytedanceMaterialReportServiceImpl implements IBytedanceMaterialRep
             headers.put("Access-Token", accessToken);
             headers.put("Access-Token", accessToken);
             headers.put("Content-Type", "application/json");
             headers.put("Content-Type", "application/json");
             String s = null;
             String s = null;
-            if (rateLimitUtil.acquire(devAppId, url, 1, 100, RateIntervalUnit.MILLISECONDS)) {
+            if (rateLimitUtil.acquire(devAppId, url)) {
                 s = HttpUtils.httpGet(url, paramsMap, headers);
                 s = HttpUtils.httpGet(url, paramsMap, headers);
             }
             }
             JSONObject result = JSONObject.parseObject(s);
             JSONObject result = JSONObject.parseObject(s);

+ 14 - 1
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceProductReportServiceImpl.java

@@ -4,16 +4,19 @@ import cn.com.ctop.job.bytedance.data.entity.BytedanceErrorLog;
 import cn.com.ctop.job.bytedance.data.entity.BytedanceProductReportDaily;
 import cn.com.ctop.job.bytedance.data.entity.BytedanceProductReportDaily;
 import cn.com.ctop.job.bytedance.data.mapper.BytedanceProductReportMapper;
 import cn.com.ctop.job.bytedance.data.mapper.BytedanceProductReportMapper;
 import cn.com.ctop.job.bytedance.data.mapper.BytedancePromoterReportMapper;
 import cn.com.ctop.job.bytedance.data.mapper.BytedancePromoterReportMapper;
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceRefreshTokenMapper;
 import cn.com.ctop.job.bytedance.data.service.IBytedanceProductReportService;
 import cn.com.ctop.job.bytedance.data.service.IBytedanceProductReportService;
 import cn.com.ctop.job.bytedance.data.utils.AlertUtils;
 import cn.com.ctop.job.bytedance.data.utils.AlertUtils;
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.FieldsConfig;
 import cn.com.ctop.job.bytedance.data.utils.FieldsConfig;
 import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
 import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
+import cn.com.ctop.job.bytedance.utils.RateLimitUtil;
 import cn.com.ctop.job.bytedance.utils.doris.sink.DorisMultiTableStreamLoadManager;
 import cn.com.ctop.job.bytedance.utils.doris.sink.DorisMultiTableStreamLoadManager;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
@@ -32,6 +35,11 @@ public class BytedanceProductReportServiceImpl implements IBytedanceProductRepor
 
 
     @Autowired
     @Autowired
     private BytedanceProductReportMapper productReportMapper;
     private BytedanceProductReportMapper productReportMapper;
+    @Autowired
+    private BytedanceRefreshTokenMapper tokenMapper;
+
+    @Autowired
+    private RateLimitUtil rateLimitUtil;
 
 
     @Override
     @Override
     public void deleteBytedanceProductDailyReport(Long advertiserId, String startDate, String endDate) {
     public void deleteBytedanceProductDailyReport(Long advertiserId, String startDate, String endDate) {
@@ -47,6 +55,8 @@ public class BytedanceProductReportServiceImpl implements IBytedanceProductRepor
     public void getBytedanceProductDailyReport(Long advertiserId, String accessToken, String startDate, String endDate, Integer page,
     public void getBytedanceProductDailyReport(Long advertiserId, String accessToken, String startDate, String endDate, Integer page,
                                                Long errorId, Integer isLog, Integer isSend) {
                                                Long errorId, Integer isLog, Integer isSend) {
         try {
         try {
+            JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+            String devAppId = authConfig.getString("app_id");
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             Map<String, Object> paramsMap = new HashMap<>();
             Map<String, Object> paramsMap = new HashMap<>();
             paramsMap.put("advertiser_id", advertiserId);
             paramsMap.put("advertiser_id", advertiserId);
@@ -62,7 +72,10 @@ public class BytedanceProductReportServiceImpl implements IBytedanceProductRepor
             Map<String, String> headers = new HashMap<>();
             Map<String, String> headers = new HashMap<>();
             headers.put("Access-Token", accessToken);
             headers.put("Access-Token", accessToken);
             headers.put("Content-Type", "application/json");
             headers.put("Content-Type", "application/json");
-            String s = HttpUtils.httpGet(url, paramsMap, headers);
+            String s = null;
+            if (rateLimitUtil.acquire(devAppId, url)) {
+                s = HttpUtils.httpGet(url, paramsMap, headers);
+            }
             JSONObject result = JSONObject.parseObject(s);
             JSONObject result = JSONObject.parseObject(s);
             if (Check.isNull(result)) {
             if (Check.isNull(result)) {
                 log.info("账户id:{},产品数据日报请求结果返回为空", advertiserId);
                 log.info("账户id:{},产品数据日报请求结果返回为空", advertiserId);

+ 32 - 4
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedancePromoterReportServiceImpl.java

@@ -4,11 +4,13 @@ import cn.com.ctop.job.bytedance.data.entity.BytedanceErrorLog;
 import cn.com.ctop.job.bytedance.data.entity.BytedancePromoterReportDaily;
 import cn.com.ctop.job.bytedance.data.entity.BytedancePromoterReportDaily;
 import cn.com.ctop.job.bytedance.data.entity.BytedancePromoterReportHour;
 import cn.com.ctop.job.bytedance.data.entity.BytedancePromoterReportHour;
 import cn.com.ctop.job.bytedance.data.mapper.BytedancePromoterReportMapper;
 import cn.com.ctop.job.bytedance.data.mapper.BytedancePromoterReportMapper;
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceRefreshTokenMapper;
 import cn.com.ctop.job.bytedance.data.service.IBytedancePromoterReportService;
 import cn.com.ctop.job.bytedance.data.service.IBytedancePromoterReportService;
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.FieldsConfig;
 import cn.com.ctop.job.bytedance.data.utils.FieldsConfig;
 import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
 import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
 import cn.com.ctop.job.bytedance.data.utils.AlertUtils;
 import cn.com.ctop.job.bytedance.data.utils.AlertUtils;
+import cn.com.ctop.job.bytedance.utils.RateLimitUtil;
 import cn.com.ctop.job.bytedance.utils.doris.sink.DorisMultiTableStreamLoadManager;
 import cn.com.ctop.job.bytedance.utils.doris.sink.DorisMultiTableStreamLoadManager;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
@@ -32,6 +34,12 @@ public class BytedancePromoterReportServiceImpl implements IBytedancePromoterRep
     @Autowired
     @Autowired
     private BytedancePromoterReportMapper promoterReportMapper;
     private BytedancePromoterReportMapper promoterReportMapper;
 
 
+    @Autowired
+    private BytedanceRefreshTokenMapper tokenMapper;
+
+    @Autowired
+    private RateLimitUtil rateLimitUtil;
+
     @Override
     @Override
     public List<JSONObject> getAccountList() {
     public List<JSONObject> getAccountList() {
         return promoterReportMapper.getAccountList();
         return promoterReportMapper.getAccountList();
@@ -40,6 +48,8 @@ public class BytedancePromoterReportServiceImpl implements IBytedancePromoterRep
     @Override
     @Override
     public void getBytedanceRetryPromoterHourReport(Long errorId, Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Integer isSend) {
     public void getBytedanceRetryPromoterHourReport(Long errorId, Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Integer isSend) {
         try {
         try {
+            JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+            String devAppId = authConfig.getString("app_id");
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             Map<String, Object> paramsMap = new HashMap<>();
             Map<String, Object> paramsMap = new HashMap<>();
             paramsMap.put("advertiser_id", advertiserId);
             paramsMap.put("advertiser_id", advertiserId);
@@ -55,7 +65,10 @@ public class BytedancePromoterReportServiceImpl implements IBytedancePromoterRep
             Map<String, String> headers = new HashMap<>();
             Map<String, String> headers = new HashMap<>();
             headers.put("Access-Token", accessToken);
             headers.put("Access-Token", accessToken);
             headers.put("Content-Type", "application/json;charset=UTF-8");
             headers.put("Content-Type", "application/json;charset=UTF-8");
-            String s = HttpUtils.httpGet(url, paramsMap, headers);
+            String s = null;
+            if (rateLimitUtil.acquire(devAppId, url)) {
+                s = HttpUtils.httpGet(url, paramsMap, headers);
+            }
             JSONObject result = JSONObject.parseObject(s);
             JSONObject result = JSONObject.parseObject(s);
             if (Check.isNull(result)) {
             if (Check.isNull(result)) {
                 log.info("账户id:{},日期:{},广告时报(最细粒度)请求结果返回为空", advertiserId, startDate);
                 log.info("账户id:{},日期:{},广告时报(最细粒度)请求结果返回为空", advertiserId, startDate);
@@ -124,6 +137,8 @@ public class BytedancePromoterReportServiceImpl implements IBytedancePromoterRep
     @Override
     @Override
     public void getBytedancePromoterRetryDailyReport(Long errorId, Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Integer isSend) {
     public void getBytedancePromoterRetryDailyReport(Long errorId, Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Integer isSend) {
         try {
         try {
+            JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+            String devAppId = authConfig.getString("app_id");
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             Map<String, Object> paramsMap = new HashMap<>();
             Map<String, Object> paramsMap = new HashMap<>();
             paramsMap.put("advertiser_id", advertiserId);
             paramsMap.put("advertiser_id", advertiserId);
@@ -139,7 +154,10 @@ public class BytedancePromoterReportServiceImpl implements IBytedancePromoterRep
             Map<String, String> headers = new HashMap<>();
             Map<String, String> headers = new HashMap<>();
             headers.put("Access-Token", accessToken);
             headers.put("Access-Token", accessToken);
             headers.put("Content-Type", "application/json");
             headers.put("Content-Type", "application/json");
-            String s = HttpUtils.httpGet(url, paramsMap, headers);
+            String s = null;
+            if (rateLimitUtil.acquire(devAppId, url)) {
+                s = HttpUtils.httpGet(url, paramsMap, headers);
+            }
             JSONObject result = JSONObject.parseObject(s);
             JSONObject result = JSONObject.parseObject(s);
             if (Check.isNull(result)) {
             if (Check.isNull(result)) {
                 log.info("账户id:{},广告日报(最细粒度)请求结果返回为空", advertiserId);
                 log.info("账户id:{},广告日报(最细粒度)请求结果返回为空", advertiserId);
@@ -207,6 +225,8 @@ public class BytedancePromoterReportServiceImpl implements IBytedancePromoterRep
     @Override
     @Override
     public void getBytedancePromoterHour(Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Integer isLog) {
     public void getBytedancePromoterHour(Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Integer isLog) {
         try {
         try {
+            JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+            String devAppId = authConfig.getString("app_id");
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             Map<String, Object> paramsMap = new HashMap<>();
             Map<String, Object> paramsMap = new HashMap<>();
             paramsMap.put("advertiser_id", advertiserId);
             paramsMap.put("advertiser_id", advertiserId);
@@ -222,7 +242,10 @@ public class BytedancePromoterReportServiceImpl implements IBytedancePromoterRep
             Map<String, String> headers = new HashMap<>();
             Map<String, String> headers = new HashMap<>();
             headers.put("Access-Token", accessToken);
             headers.put("Access-Token", accessToken);
             headers.put("Content-Type", "application/json;charset=UTF-8");
             headers.put("Content-Type", "application/json;charset=UTF-8");
-            String s = HttpUtils.httpGet(url, paramsMap, headers);
+            String s = null;
+            if (rateLimitUtil.acquire(devAppId, url)) {
+                s = HttpUtils.httpGet(url, paramsMap, headers);
+            }
             JSONObject result = JSONObject.parseObject(s);
             JSONObject result = JSONObject.parseObject(s);
             if (Check.isNull(result)) {
             if (Check.isNull(result)) {
                 log.info("账户id:{},日期:{},广告时报(最细粒度)请求结果返回为空", advertiserId, startDate);
                 log.info("账户id:{},日期:{},广告时报(最细粒度)请求结果返回为空", advertiserId, startDate);
@@ -304,6 +327,8 @@ public class BytedancePromoterReportServiceImpl implements IBytedancePromoterRep
     @Override
     @Override
     public void getBytedancePromoterDaily(Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Integer isLog) {
     public void getBytedancePromoterDaily(Long advertiserId, String accessToken, String startDate, String endDate, Integer page, Integer isLog) {
         try {
         try {
+            JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+            String devAppId = authConfig.getString("app_id");
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             String url = "https://api.oceanengine.com/open_api/v3.0/report/custom/get/";
             Map<String, Object> paramsMap = new HashMap<>();
             Map<String, Object> paramsMap = new HashMap<>();
             paramsMap.put("advertiser_id", advertiserId);
             paramsMap.put("advertiser_id", advertiserId);
@@ -319,7 +344,10 @@ public class BytedancePromoterReportServiceImpl implements IBytedancePromoterRep
             Map<String, String> headers = new HashMap<>();
             Map<String, String> headers = new HashMap<>();
             headers.put("Access-Token", accessToken);
             headers.put("Access-Token", accessToken);
             headers.put("Content-Type", "application/json");
             headers.put("Content-Type", "application/json");
-            String s = HttpUtils.httpGet(url, paramsMap, headers);
+            String s = null;
+            if (rateLimitUtil.acquire(devAppId, url)) {
+                s = HttpUtils.httpGet(url, paramsMap, headers);
+            }
             JSONObject result = JSONObject.parseObject(s);
             JSONObject result = JSONObject.parseObject(s);
             if (Check.isNull(result)) {
             if (Check.isNull(result)) {
                 log.info("账户id:{},广告日报(最细粒度)请求结果返回为空", advertiserId);
                 log.info("账户id:{},广告日报(最细粒度)请求结果返回为空", advertiserId);

+ 60 - 18
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/ToolsSiteServiceImpl.java

@@ -10,6 +10,7 @@ import cn.com.ctop.job.bytedance.data.service.IToolsSiteService;
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
 import cn.com.ctop.job.bytedance.data.utils.HttpUtils;
 import cn.com.ctop.job.bytedance.data.utils.Okhttp3Utils;
 import cn.com.ctop.job.bytedance.data.utils.Okhttp3Utils;
+import cn.com.ctop.job.bytedance.utils.RateLimitUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -30,6 +31,9 @@ public class ToolsSiteServiceImpl implements IToolsSiteService {
     @Autowired
     @Autowired
     private BytedanceRefreshTokenMapper tokenMapper;
     private BytedanceRefreshTokenMapper tokenMapper;
 
 
+    @Autowired
+    private RateLimitUtil rateLimitUtil;
+
     @Override
     @Override
     public List<Long> getAvatarAdvertiserIds() {
     public List<Long> getAvatarAdvertiserIds() {
         return toolsSiteMapper.getAvatarAdvertiserIds();
         return toolsSiteMapper.getAvatarAdvertiserIds();
@@ -37,11 +41,19 @@ public class ToolsSiteServiceImpl implements IToolsSiteService {
 
 
     @Override
     @Override
     public void updateAvatarStatus(Long advertiserId) {
     public void updateAvatarStatus(Long advertiserId) {
-        String accessToken = tokenMapper.onlyGetToken(advertiserId);
+        JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+        if (Check.isNull(authConfig)) {
+            log.info("账户id:{},获取token为空", advertiserId);
+        }
+        String accessToken = authConfig.getString("access_token");
+        String devAppId = authConfig.getString("app_id");
         JSONObject params = new JSONObject();
         JSONObject params = new JSONObject();
         params.put("advertiser_id", advertiserId);
         params.put("advertiser_id", advertiserId);
         String url = "https://ad.oceanengine.com/open_api/2/advertiser/avatar/get/";
         String url = "https://ad.oceanengine.com/open_api/2/advertiser/avatar/get/";
-        JSONObject obj = Okhttp3Utils.bytedanceGetRequest(accessToken, url, params);
+        JSONObject obj = null;
+        if (rateLimitUtil.acquire(devAppId,url)){
+            obj = Okhttp3Utils.bytedanceGetRequest(accessToken, url, params);
+        }
         if (!Check.isNull(obj)) {
         if (!Check.isNull(obj)) {
             Integer code = obj.getInteger("code");
             Integer code = obj.getInteger("code");
             if (code == 0) {
             if (code == 0) {
@@ -53,6 +65,8 @@ public class ToolsSiteServiceImpl implements IToolsSiteService {
             } else {
             } else {
                 log.error("更新广告主账户头像失败,返回结果:{}", obj);
                 log.error("更新广告主账户头像失败,返回结果:{}", obj);
             }
             }
+        } else {
+            log.error("更新广告主账户头像失败.");
         }
         }
     }
     }
 
 
@@ -63,14 +77,21 @@ public class ToolsSiteServiceImpl implements IToolsSiteService {
 
 
     @Override
     @Override
     public void updateNameStatus(Long advertiserId) {
     public void updateNameStatus(Long advertiserId) {
-        String accessToken = tokenMapper.onlyGetToken(advertiserId);
+        JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+        if (Check.isNull(authConfig)) {
+            log.info("账户id:{},获取token为空", advertiserId);
+        }
+        String accessToken = authConfig.getString("access_token");
+        String devAppId = authConfig.getString("app_id");
         Map<String, Object> params = new HashMap<>();
         Map<String, Object> params = new HashMap<>();
         params.put("account_ids", new JSONArray(Collections.singletonList(advertiserId)));
         params.put("account_ids", new JSONArray(Collections.singletonList(advertiserId)));
         String url = "https://api.oceanengine.com/open_api/2/agent/advertiser_info/query/";
         String url = "https://api.oceanengine.com/open_api/2/agent/advertiser_info/query/";
-        String results = HttpUtils.httpGet(url, params, HttpUtils.postMHeaders(accessToken));
+        String results = null;
+        if (rateLimitUtil.acquire(devAppId,url)){
+            results = HttpUtils.httpGet(url, params, HttpUtils.postMHeaders(accessToken));
+        }
         JSONObject obj = JSONObject.parseObject(results);
         JSONObject obj = JSONObject.parseObject(results);
-        Integer code = obj.getInteger("code");
-        if (code == 0) {
+        if (!Check.isNull(obj) && 0 == obj.getInteger("code")) {
             JSONArray array = obj.getJSONObject("data").getJSONArray("account_detail_list");
             JSONArray array = obj.getJSONObject("data").getJSONArray("account_detail_list");
             JSONObject object = array.getJSONObject(0);
             JSONObject object = array.getJSONObject(0);
             if (!Check.isNull(object)) {
             if (!Check.isNull(object)) {
@@ -105,7 +126,12 @@ public class ToolsSiteServiceImpl implements IToolsSiteService {
     @Override
     @Override
     public void updateWxAppStatus(Long advertiserId, String searchType, Integer page) {
     public void updateWxAppStatus(Long advertiserId, String searchType, Integer page) {
         boolean nextPage = false;
         boolean nextPage = false;
-        String accessToken = tokenMapper.onlyGetToken(advertiserId);
+        JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+        if (Check.isNull(authConfig)) {
+            log.info("账户id:{},获取token为空", advertiserId);
+        }
+        String accessToken = authConfig.getString("access_token");
+        String devAppId = authConfig.getString("app_id");
         JSONObject params = new JSONObject();
         JSONObject params = new JSONObject();
         params.put("advertiser_id", advertiserId);
         params.put("advertiser_id", advertiserId);
         params.put("page", page);
         params.put("page", page);
@@ -125,9 +151,11 @@ public class ToolsSiteServiceImpl implements IToolsSiteService {
         params.put("filtering", filtering);
         params.put("filtering", filtering);
         //获取微信小程序列表
         //获取微信小程序列表
         String url = "https://api.oceanengine.com/open_api/v3.0/tools/wechat_applet/list/";
         String url = "https://api.oceanengine.com/open_api/v3.0/tools/wechat_applet/list/";
-        JSONObject obj = Okhttp3Utils.bytedanceGetRequest(accessToken, url, params);
-        Integer code = obj.getInteger("code");
-        if (code == 0) {
+        JSONObject obj = null;
+        if(rateLimitUtil.acquire(devAppId,url)){
+            obj = Okhttp3Utils.bytedanceGetRequest(accessToken, url, params);
+        }
+        if (!Check.isNull(obj) && obj.getInteger("code") == 0) {
             JSONObject data = obj.getJSONObject("data");
             JSONObject data = obj.getJSONObject("data");
             Integer totalPage = data.getJSONObject("page_info").getInteger("total_page");
             Integer totalPage = data.getJSONObject("page_info").getInteger("total_page");
             if (totalPage != 0 && totalPage != data.getJSONObject("page_info").getInteger("page")) {
             if (totalPage != 0 && totalPage != data.getJSONObject("page_info").getInteger("page")) {
@@ -174,7 +202,12 @@ public class ToolsSiteServiceImpl implements IToolsSiteService {
 
 
     private void getTTList(AdvertiserApplet targetApplet, Long advertiserId, String searchType, Integer page) {
     private void getTTList(AdvertiserApplet targetApplet, Long advertiserId, String searchType, Integer page) {
         boolean nextPage = false;
         boolean nextPage = false;
-        String accessToken = tokenMapper.onlyGetToken(advertiserId);
+        JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+        if (Check.isNull(authConfig)) {
+            log.info("账户id:{},获取token为空", advertiserId);
+        }
+        String accessToken = authConfig.getString("access_token");
+        String devAppId = authConfig.getString("app_id");
         JSONObject params = new JSONObject();
         JSONObject params = new JSONObject();
         params.put("advertiser_id", advertiserId);
         params.put("advertiser_id", advertiserId);
         params.put("page", page);
         params.put("page", page);
@@ -186,9 +219,11 @@ public class ToolsSiteServiceImpl implements IToolsSiteService {
         params.put("filtering", filtering);
         params.put("filtering", filtering);
         //获取微信小程序列表
         //获取微信小程序列表
         String url = "https://api.oceanengine.com/open_api/v3.0/tools/micro_app/list/";
         String url = "https://api.oceanengine.com/open_api/v3.0/tools/micro_app/list/";
-        JSONObject obj = Okhttp3Utils.bytedanceGetRequest(accessToken, url, params);
-        Integer code = obj.getInteger("code");
-        if (code == 0) {
+        JSONObject obj = null;
+        if(rateLimitUtil.acquire(devAppId,url)){
+            obj = Okhttp3Utils.bytedanceGetRequest(accessToken, url, params);
+        }
+        if (!Check.isNull(obj) && 0 == obj.getInteger("code")) {
             JSONObject data = obj.getJSONObject("data");
             JSONObject data = obj.getJSONObject("data");
             Integer totalPage = data.getJSONObject("page_info").getInteger("total_page");
             Integer totalPage = data.getJSONObject("page_info").getInteger("total_page");
             if (totalPage != 0 && totalPage != data.getJSONObject("page_info").getInteger("page")) {
             if (totalPage != 0 && totalPage != data.getJSONObject("page_info").getInteger("page")) {
@@ -231,7 +266,12 @@ public class ToolsSiteServiceImpl implements IToolsSiteService {
 
 
     @Override
     @Override
     public void updateSiteStatus(Long advertiserId, Integer page) {
     public void updateSiteStatus(Long advertiserId, Integer page) {
-        String accessToken = tokenMapper.onlyGetToken(advertiserId);
+        JSONObject authConfig = tokenMapper.getAuthConfig(advertiserId);
+        if (Check.isNull(authConfig)) {
+            log.info("账户id:{},获取token为空", advertiserId);
+        }
+        String accessToken = authConfig.getString("access_token");
+        String devAppId = authConfig.getString("app_id");
         boolean nextPage = false;
         boolean nextPage = false;
         Map<String, Object> params = new HashMap<>();
         Map<String, Object> params = new HashMap<>();
         params.put("advertiser_id", advertiserId);
         params.put("advertiser_id", advertiserId);
@@ -240,9 +280,11 @@ public class ToolsSiteServiceImpl implements IToolsSiteService {
         params.put("page", page);
         params.put("page", page);
         params.put("page_size", 100);//默认值为10,范围:20~300
         params.put("page_size", 100);//默认值为10,范围:20~300
         String url = "https://ad.oceanengine.com/open_api/2/tools/site/get/";
         String url = "https://ad.oceanengine.com/open_api/2/tools/site/get/";
-        JSONObject obj = Okhttp3Utils.bytedanceGetRequest(accessToken, url, params);
-        Integer code = obj.getInteger("code");
-        if (code == 0) {
+        JSONObject obj = null;
+        if(rateLimitUtil.acquire(devAppId,url)){
+            obj = Okhttp3Utils.bytedanceGetRequest(accessToken, url, params);
+        }
+        if (!Check.isNull(obj) && 0 == obj.getInteger("code")) {
             JSONObject data = obj.getJSONObject("data");
             JSONObject data = obj.getJSONObject("data");
             Integer totalPage = data.getJSONObject("page_info").getInteger("total_page");
             Integer totalPage = data.getJSONObject("page_info").getInteger("total_page");
             if (totalPage != 0 && totalPage != data.getJSONObject("page_info").getInteger("page")) {
             if (totalPage != 0 && totalPage != data.getJSONObject("page_info").getInteger("page")) {

+ 5 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/utils/Check.java

@@ -1,6 +1,7 @@
 package cn.com.ctop.job.bytedance.data.utils;
 package cn.com.ctop.job.bytedance.data.utils;
 
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
 
 
@@ -29,6 +30,10 @@ public class Check {
         return jsonArray == null || jsonArray.isEmpty();
         return jsonArray == null || jsonArray.isEmpty();
     }
     }
 
 
+    public static boolean isNull(JSONObject json) {
+        return json == null || json.isEmpty();
+    }
+
 
 
     public static boolean isNull(String str) {
     public static boolean isNull(String str) {
         return str == null || str.isEmpty();
         return str == null || str.isEmpty();

+ 1 - 2
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/utils/Okhttp3Utils.java

@@ -25,8 +25,7 @@ import java.util.Map;
  */
  */
 @Slf4j
 @Slf4j
 public class Okhttp3Utils {
 public class Okhttp3Utils {
-    @Autowired
-    private static Gson gson = new Gson();
+    private static final Gson gson = new Gson();
 
 
     public static JSONObject bytedanceGetRequest(String token, String url, Map<String, Object> paramsMap) {
     public static JSONObject bytedanceGetRequest(String token, String url, Map<String, Object> paramsMap) {
         try {
         try {

+ 1 - 1
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedancePromoterReportJob.java

@@ -144,7 +144,7 @@ public class BytedancePromoterReportJob {
         dailyExecutorService.submit(new Runnable() {
         dailyExecutorService.submit(new Runnable() {
             @Override
             @Override
             public void run() {
             public void run() {
-                bytedanceMaterialReportService.getBytedanceMaterialDailyReport(advertiserId, accessToken, date, date, 1, null, 1, 0, 1);
+                bytedanceMaterialReportService.getBytedanceMaterialDailyReport(advertiserId, date, date, 1, null, 1, 0, 1);
             }
             }
         });
         });
     }
     }

+ 1 - 1
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceReportRetryJob.java

@@ -163,7 +163,7 @@ public class BytedanceReportRetryJob {
                         @Override
                         @Override
                         public void run() {
                         public void run() {
                             if (!Check.isNull(accessToken)) {
                             if (!Check.isNull(accessToken)) {
-                                bytedanceMaterialReportService.getBytedanceMaterialDailyReport(advertiserId, accessToken, startDate, endDate, 1, id, null, isSend, 1);
+                                bytedanceMaterialReportService.getBytedanceMaterialDailyReport(advertiserId, startDate, endDate, 1, id, null, isSend, 1);
                             }
                             }
                         }
                         }
                     });
                     });

+ 22 - 5
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/utils/RateLimitUtil.java

@@ -1,6 +1,7 @@
 package cn.com.ctop.job.bytedance.utils;
 package cn.com.ctop.job.bytedance.utils;
 
 
 import cn.com.ctop.job.bytedance.data.utils.Check;
 import cn.com.ctop.job.bytedance.data.utils.Check;
+import com.google.common.collect.ImmutableMap;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.redisson.api.RRateLimiter;
 import org.redisson.api.RRateLimiter;
@@ -22,21 +23,37 @@ public class RateLimitUtil {
     @Autowired
     @Autowired
     public RedissonClient redissonClient;
     public RedissonClient redissonClient;
     private static final Map<String, Boolean> initMap = new ConcurrentHashMap<>();
     private static final Map<String, Boolean> initMap = new ConcurrentHashMap<>();
+    private static final Map<String, Integer> pathQpsMap = new ImmutableMap.Builder<String, Integer>()
+            .put("/open_api/v3.0/report/custom/get/", 70)
+            .put("/open_api/2/file/video/get/", 10)
+            .put("/open_api/v3.0/promotion/list/", 30)
+            .put("/open_api/v3.0/project/list/", 30)
+            .put("/open_api/2/customer_center/advertiser/list/", 50)
+            .put("/open_api/v3.0/tools/micro_app/list/", 10)
+            .put("/open_api/v3.0/tools/asset_link/list/", 10)
+            .put("/open_api/v3.0/tools/wechat_applet/list/", 10)
+            .put("/open_api/2/advertiser/fund/daily_stat/", 50)
+            .put("/open_api/2/advertiser/avatar/get/", 10)
+            .put("/open_api/2/agent/advertiser_info/query/", 10)
+            .put("/open_api/2/tools/site/get/", 10)
+            .build();
 
 
     /**
     /**
      * 自定义限流规则
      * 自定义限流规则
      */
      */
-    public boolean acquire(String devAppId, String url, long limit, long interval, RateIntervalUnit unit) {
+    public boolean acquire(String devAppId, String url) {
         URI uri = URI.create(url);
         URI uri = URI.create(url);
-        String limitKey = uri.getPath().replaceAll("/$", "").replace("/", ":");
+        String path = uri.getPath();
+        String limitKey = path.replaceAll("/$", "").replace("/", ":");
         String key = "rate:limit" + limitKey + (Check.isNull(devAppId) ? "" : ":" + devAppId);
         String key = "rate:limit" + limitKey + (Check.isNull(devAppId) ? "" : ":" + devAppId);
         if (!initMap.containsKey(key)) {
         if (!initMap.containsKey(key)) {
+            Integer qps = pathQpsMap.getOrDefault(path, 10);
             RRateLimiter limiter = redissonClient.getRateLimiter(key);
             RRateLimiter limiter = redissonClient.getRateLimiter(key);
             limiter.setRate(
             limiter.setRate(
                     RateType.OVERALL,
                     RateType.OVERALL,
-                    limit,
-                    interval,
-                    unit
+                    qps / 2,
+                    500,
+                    RateIntervalUnit.MILLISECONDS
             );
             );
             initMap.put(key, true);
             initMap.put(key, true);
         }
         }