|
|
@@ -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.AigcProductPlatform;
|
|
|
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.utils.Check;
|
|
|
import cn.com.ctop.job.bytedance.data.utils.DateUtils;
|
|
|
@@ -36,6 +37,9 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
|
|
|
BytedanceProductDocProperties productDocProperties;
|
|
|
@Autowired
|
|
|
private RateLimitUtil rateLimitUtil;
|
|
|
+ @Autowired
|
|
|
+ private BytedanceRefreshTokenMapper tokenMapper;
|
|
|
+
|
|
|
|
|
|
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 {
|
|
|
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<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());
|
|
|
- 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){
|
|
|
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 {
|
|
|
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<String> hasUploadPlayletIds = hasUploadAlbums.stream().map(AigcProductAlbum::getPlayletId).collect(Collectors.toList());
|
|
|
@@ -333,7 +345,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
|
|
|
}
|
|
|
|
|
|
String res = null;
|
|
|
- if (rateLimitUtil.acquire(platform.getMiAppid(), url, 5)){
|
|
|
+ if (rateLimitUtil.acquire(platform.getDevAppId(), url, 5)){
|
|
|
res = HttpUtils.httpGet(url, params, headers);
|
|
|
}
|
|
|
|
|
|
@@ -457,6 +469,8 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
|
|
|
continue;
|
|
|
}
|
|
|
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();
|
|
|
Map<String, String> headers = new HashMap<>();
|
|
|
headers.put("Access-Token", access_token);
|
|
|
@@ -474,7 +488,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
|
|
|
|
|
|
String res = null;
|
|
|
// 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);
|
|
|
}
|
|
|
|
|
|
@@ -579,7 +593,11 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
|
|
|
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()){
|
|
|
String payName = businessType==BusinessType.IAP?"付费":"免费";
|
|
|
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()
|
|
|
.map(obj -> obj.getAlbumId())
|
|
|
.collect(Collectors.toList());
|
|
|
@@ -610,7 +628,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
|
|
|
* @return map key: album_id, value: 对应的字节小程序推广链接,sslocal开头
|
|
|
*/
|
|
|
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()){
|
|
|
break;
|
|
|
}
|
|
|
@@ -672,7 +690,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
|
|
|
|
|
|
String rr = null;
|
|
|
// 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);
|
|
|
}
|
|
|
|
|
|
@@ -704,7 +722,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
|
|
|
}
|
|
|
int maxPage = unfound.size() / 100 + 1;
|
|
|
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()){
|
|
|
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){
|
|
|
return new JSONArray();
|
|
|
}
|
|
|
@@ -737,7 +755,7 @@ public class BytedanceProductUpdateServiceImpl implements IBytedanceProductUpdat
|
|
|
|
|
|
String res = null;
|
|
|
// 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);
|
|
|
}
|
|
|
|