zhaotx 9 месяцев назад
Родитель
Сommit
73655d991e

+ 2 - 0
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/entity/AigcProductPlatform.java

@@ -31,5 +31,7 @@ public class AigcProductPlatform {
 
 
     private String copyrightOwner;
     private String copyrightOwner;
 
 
+    private String devAppId;//开发者应用ID
+
 
 
 }
 }

+ 28 - 10
job-bytedance/src/main/java/cn/com/ctop/job/bytedance/data/service/impl/BytedanceProductUpdateServiceImpl.java

@@ -3,6 +3,7 @@ package cn.com.ctop.job.bytedance.data.service.impl;
 import cn.com.ctop.job.bytedance.data.entity.AigcProductAlbum;
 import cn.com.ctop.job.bytedance.data.entity.AigcProductAlbum;
 import cn.com.ctop.job.bytedance.data.entity.AigcProductPlatform;
 import cn.com.ctop.job.bytedance.data.entity.AigcProductPlatform;
 import cn.com.ctop.job.bytedance.data.mapper.BytedanceProductUpdateMapper;
 import cn.com.ctop.job.bytedance.data.mapper.BytedanceProductUpdateMapper;
+import cn.com.ctop.job.bytedance.data.mapper.BytedanceRefreshTokenMapper;
 import cn.com.ctop.job.bytedance.data.service.IBytedanceProductUpdateService;
 import cn.com.ctop.job.bytedance.data.service.IBytedanceProductUpdateService;
 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.DateUtils;
 import cn.com.ctop.job.bytedance.data.utils.DateUtils;
@@ -36,6 +37,9 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
     BytedanceProductDocProperties productDocProperties;
     BytedanceProductDocProperties productDocProperties;
     @Autowired
     @Autowired
     private RateLimitUtil rateLimitUtil;
     private RateLimitUtil rateLimitUtil;
+    @Autowired
+    private BytedanceRefreshTokenMapper tokenMapper;
+
 
 
     public static final String DOUYIN_MOVIE_SOURCE_APP="ttd652a0ef496310bd01";
     public static final String DOUYIN_MOVIE_SOURCE_APP="ttd652a0ef496310bd01";
 
 
@@ -241,6 +245,10 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
 
 
     private void runMpProductTask(List<AigcProductPlatform> platformList, List<AigcProductAlbum> albums, Map<String, JSONObject> productTypeMap, Set<ErrorRecord> errors, BusinessType businessType) throws IOException {
     private void runMpProductTask(List<AigcProductPlatform> platformList, List<AigcProductAlbum> albums, Map<String, JSONObject> productTypeMap, Set<ErrorRecord> errors, BusinessType businessType) throws IOException {
         for (AigcProductPlatform platform : platformList){
         for (AigcProductPlatform platform : platformList){
+            // 获取开发者应用ID
+            JSONObject authConfig = tokenMapper.getAuthConfig(Long.valueOf(platform.getAdvertiserId()));
+            String devAppId = authConfig.getString("app_id");
+            platform.setDevAppId(devAppId);
             // 拉取已上传剧目,对比,得到未上传剧目列表
             // 拉取已上传剧目,对比,得到未上传剧目列表
             List<AigcProductAlbum> hasUploadProductList = hasUploadProductList(platform);
             List<AigcProductAlbum> hasUploadProductList = hasUploadProductList(platform);
             List<String> hasUpload = hasUploadProductList.stream().map(AigcProductAlbum::getProductId).collect(Collectors.toList());
             List<String> hasUpload = hasUploadProductList.stream().map(AigcProductAlbum::getProductId).collect(Collectors.toList());
@@ -255,7 +263,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
             }
             }
             //获取未上传剧目的推广链接
             //获取未上传剧目的推广链接
             List<AigcProductAlbum> douyinUploadList = toUpload.stream().filter(o -> Objects.equals(o.getPlatformType(), "1")).collect(Collectors.toList());
             List<AigcProductAlbum> douyinUploadList = toUpload.stream().filter(o -> Objects.equals(o.getPlatformType(), "1")).collect(Collectors.toList());
-            Map<String, String> albumIdToLinkMap = getBytedancePlayletPromoteLink(platform.getMiniAppAdvertiserId(), platform.getAccessToken(), platform.getMiniInstanceId(), douyinUploadList, errors, platform.getPlatformId());
+            Map<String, String> albumIdToLinkMap = getBytedancePlayletPromoteLink(platform.getMiniAppAdvertiserId(), platform.getAccessToken(), platform.getMiniInstanceId(), douyinUploadList, errors, platform.getPlatformId(), platform.getDevAppId());
             //未上传剧目:对比平台类型;确定商品分类;获取推广链接
             //未上传剧目:对比平台类型;确定商品分类;获取推广链接
             for (AigcProductAlbum album : toUpload){
             for (AigcProductAlbum album : toUpload){
                 if (!Objects.equals(album.getPlatformType(), String.valueOf(platform.getPlatformType()))){
                 if (!Objects.equals(album.getPlatformType(), String.valueOf(platform.getPlatformType()))){
@@ -283,6 +291,10 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
 
 
     private void runDysProductTask(List<AigcProductPlatform> platformList, List<AigcProductAlbum> albums, Map<String, JSONObject> productTypeMap, Set<ErrorRecord> errors, BusinessType businessType) throws IOException {
     private void runDysProductTask(List<AigcProductPlatform> platformList, List<AigcProductAlbum> albums, Map<String, JSONObject> productTypeMap, Set<ErrorRecord> errors, BusinessType businessType) throws IOException {
         for (AigcProductPlatform platform : platformList){
         for (AigcProductPlatform platform : platformList){
+            // 获取开发者应用ID
+            JSONObject authConfig = tokenMapper.getAuthConfig(Long.valueOf(platform.getAdvertiserId()));
+            String devAppId = authConfig.getString("app_id");
+            platform.setDevAppId(devAppId);
             // 拉取已上传剧目,对比,得到未上传剧目列表
             // 拉取已上传剧目,对比,得到未上传剧目列表
             List<AigcProductAlbum> hasUploadAlbums = hasUploadProductList(platform);
             List<AigcProductAlbum> hasUploadAlbums = hasUploadProductList(platform);
             List<String> hasUploadPlayletIds = hasUploadAlbums.stream().map(AigcProductAlbum::getPlayletId).collect(Collectors.toList());
             List<String> hasUploadPlayletIds = hasUploadAlbums.stream().map(AigcProductAlbum::getPlayletId).collect(Collectors.toList());
@@ -333,7 +345,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
         }
         }
 
 
         String res = null;
         String res = null;
-        if (rateLimitUtil.acquire(platform.getMiAppid(), url, 5)){
+        if (rateLimitUtil.acquire(platform.getDevAppId(), url, 5)){
             res = HttpUtils.httpGet(url, params, headers);
             res = HttpUtils.httpGet(url, params, headers);
         }
         }
 
 
@@ -457,6 +469,8 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
                 continue;
                 continue;
             }
             }
             String createLinkUrl = "https://api.oceanengine.com/open_api/v3.0/tools/micro_app/create/";
             String createLinkUrl = "https://api.oceanengine.com/open_api/v3.0/tools/micro_app/create/";
+            JSONObject authConfig = tokenMapper.getAuthConfig(Long.valueOf(obj.getAdvertiserId()));
+            String devAppId = authConfig.getString("app_id");
             String access_token = obj.getAccessToken();
             String access_token = obj.getAccessToken();
             Map<String, String> headers = new HashMap<>();
             Map<String, String> headers = new HashMap<>();
             headers.put("Access-Token", access_token);
             headers.put("Access-Token", access_token);
@@ -474,7 +488,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
 
 
             String res = null;
             String res = null;
             // Rate limit for /open_api/v3.0/tools/micro_app/create/
             // Rate limit for /open_api/v3.0/tools/micro_app/create/
-            if (rateLimitUtil.acquire(obj.getMiAppid(), createLinkUrl, 5)){
+            if (rateLimitUtil.acquire(devAppId, createLinkUrl, 5)){
                 res = HttpUtils.httpPostRequest(createLinkUrl, requestBody, headers);
                 res = HttpUtils.httpPostRequest(createLinkUrl, requestBody, headers);
             }
             }
 
 
@@ -579,7 +593,11 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
         request.put("product_info", product_info);
         request.put("product_info", product_info);
 
 
         // 单次请求(已移除重试逻辑)
         // 单次请求(已移除重试逻辑)
-        String res = HttpUtils.httpPostRequest(url, request, headers);
+        String res = null;
+        if (rateLimitUtil.acquire(platform.getDevAppId(), url, 5)){
+            res = HttpUtils.httpPostRequest(url, request, headers);
+        }
+
         if (res == null || res.isEmpty()){
         if (res == null || res.isEmpty()){
             String payName = businessType==BusinessType.IAP?"付费":"免费";
             String payName = businessType==BusinessType.IAP?"付费":"免费";
             errorBlanket.add(new ErrorRecord("上传"+payName+"商品失败,msg: 请求失败或无响应, 关联剧目: " + album.getName(), album.getAlbumId(), platform.getPlatformId()));
             errorBlanket.add(new ErrorRecord("上传"+payName+"商品失败,msg: 请求失败或无响应, 关联剧目: " + album.getName(), album.getAlbumId(), platform.getPlatformId()));
@@ -595,7 +613,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
 
 
     }
     }
 
 
-    private Map<String, String> getBytedancePlayletPromoteLink(String advertiserId, String accessToken, String instanceId, List<AigcProductAlbum> requests, Set<ErrorRecord> errorBlanket, String platformId){
+    private Map<String, String> getBytedancePlayletPromoteLink(String advertiserId, String accessToken, String instanceId, List<AigcProductAlbum> requests, Set<ErrorRecord> errorBlanket, String platformId, String devAppId){
         List<String> reqAlbumIds = requests.stream()
         List<String> reqAlbumIds = requests.stream()
                 .map(obj -> obj.getAlbumId())
                 .map(obj -> obj.getAlbumId())
                 .collect(Collectors.toList());
                 .collect(Collectors.toList());
@@ -610,7 +628,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
      * @return map key: album_id, value: 对应的字节小程序推广链接,sslocal开头
      * @return map key: album_id, value: 对应的字节小程序推广链接,sslocal开头
      */
      */
         for (int page=1; page<=20; page++){
         for (int page=1; page<=20; page++){
-            JSONArray playletDetailInfo = getPlayletDetail(advertiserId, accessToken, instanceId, errorBlanket, page, platformId);
+            JSONArray playletDetailInfo = getPlayletDetail(advertiserId, accessToken, instanceId, errorBlanket, page, platformId, devAppId);
             if (playletDetailInfo == null || playletDetailInfo.isEmpty()){
             if (playletDetailInfo == null || playletDetailInfo.isEmpty()){
                 break;
                 break;
             }
             }
@@ -672,7 +690,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
 
 
             String rr = null;
             String rr = null;
             // Rate limit for /open_api/v3.0/tools/micro_app/update/
             // Rate limit for /open_api/v3.0/tools/micro_app/update/
-            if (rateLimitUtil.acquire(advertiserId, editLinkUrl, 5)){
+            if (rateLimitUtil.acquire(devAppId, editLinkUrl, 5)){
                 rr = HttpUtils.httpPostRequest(editLinkUrl, requestBody, headers);
                 rr = HttpUtils.httpPostRequest(editLinkUrl, requestBody, headers);
             }
             }
 
 
@@ -704,7 +722,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
         }
         }
         int maxPage = unfound.size() / 100 + 1;
         int maxPage = unfound.size() / 100 + 1;
         for (int p = 0; p < maxPage; p++) {
         for (int p = 0; p < maxPage; p++) {
-            JSONArray newPlayletDetailInfo = getPlayletDetail(advertiserId, accessToken, instanceId, errorBlanket, p+1, platformId);
+            JSONArray newPlayletDetailInfo = getPlayletDetail(advertiserId, accessToken, instanceId, errorBlanket, p+1, platformId, devAppId);
             if (newPlayletDetailInfo == null || newPlayletDetailInfo.isEmpty()){
             if (newPlayletDetailInfo == null || newPlayletDetailInfo.isEmpty()){
                 break;
                 break;
             }
             }
@@ -722,7 +740,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
 
 
     }
     }
 
 
-    private JSONArray getPlayletDetail(String advertiserId, String accessToken, String instanceId, Set<ErrorRecord> errorBlanket, Integer pageNum, String platformId) {
+    private JSONArray getPlayletDetail(String advertiserId, String accessToken, String instanceId, Set<ErrorRecord> errorBlanket, Integer pageNum, String platformId, String devAppId) {
         if (pageNum >60){
         if (pageNum >60){
             return new JSONArray();
             return new JSONArray();
         }
         }
@@ -737,7 +755,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
 
 
         String res = null;
         String res = null;
         // Rate limit for /open_api/v3.0/tools/asset_link/list/
         // Rate limit for /open_api/v3.0/tools/asset_link/list/
-        if (rateLimitUtil.acquire(advertiserId, getPlayletDetailUrl, 5)){
+        if (rateLimitUtil.acquire(devAppId, getPlayletDetailUrl, 5)){
             res = HttpUtils.httpGet(getPlayletDetailUrl, params, headers);
             res = HttpUtils.httpGet(getPlayletDetailUrl, params, headers);
         }
         }