|
@@ -7,10 +7,14 @@ import cn.com.ctop.material.mapper.MaterialUploadTaskMapper;
|
|
|
import cn.com.ctop.material.service.IMaterialUploadTaskService;
|
|
|
import cn.com.ctop.material.utils.Check;
|
|
|
import cn.com.ctop.material.utils.HttpConstant;
|
|
|
+import cn.com.ctop.material.utils.HttpUtils;
|
|
|
import cn.com.ctop.material.utils.LoadFileUtil;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
+import com.google.common.collect.Lists;
|
|
|
+import lombok.SneakyThrows;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
|
|
import org.apache.http.client.methods.HttpPost;
|
|
@@ -37,10 +41,7 @@ import java.io.IOException;
|
|
|
import java.io.InputStreamReader;
|
|
|
import java.net.URI;
|
|
|
import java.nio.charset.Charset;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
import java.util.concurrent.ExecutorService;
|
|
|
import java.util.concurrent.Executors;
|
|
|
|
|
@@ -62,6 +63,7 @@ public class MaterialUploadTaskServiceImpl
|
|
|
private static ExecutorService kuaishouExecutorService = Executors.newFixedThreadPool(5);
|
|
|
private static ExecutorService bytedanceExecutorService = Executors.newFixedThreadPool(5);
|
|
|
private static ExecutorService submitExecutorService = Executors.newFixedThreadPool(5);
|
|
|
+ private static ExecutorService bindExecutorService = Executors.newFixedThreadPool(5);
|
|
|
|
|
|
@Override
|
|
|
public void upload(String signature) {
|
|
@@ -112,7 +114,8 @@ public class MaterialUploadTaskServiceImpl
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- private void uploadKuaiShou(MaterialUploadTask task, FileSystemResource resource, Integer type) {
|
|
|
+ @Override
|
|
|
+ public void uploadKuaiShou(MaterialUploadTask task, FileSystemResource resource, Integer type) {
|
|
|
kuaishouExecutorService.submit(
|
|
|
new Runnable() {
|
|
|
@Override
|
|
@@ -187,7 +190,8 @@ public class MaterialUploadTaskServiceImpl
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- private void uploadBytedance(FileBody fileBody, MaterialUploadTask task) {
|
|
|
+ @Override
|
|
|
+ public void uploadBytedance(FileBody fileBody, MaterialUploadTask task) {
|
|
|
bytedanceExecutorService.submit(
|
|
|
new Runnable() {
|
|
|
@Override
|
|
@@ -239,6 +243,21 @@ public class MaterialUploadTaskServiceImpl
|
|
|
if (resultJson.getInteger("code") == 0) {
|
|
|
materialUploadTaskMapper.updateStatusById(task.getId(), 3, "同步成功", new Date());
|
|
|
materialUploadTaskMapper.syncBytedance(task.getSignature());
|
|
|
+ JSONObject data = resultJson.getJSONObject("data");
|
|
|
+ if (!Check.isNull(data)) {
|
|
|
+ Long projectId = materialUploadTaskMapper.getProjectIdByAccoubt(task.getAccountId());
|
|
|
+ materialUploadTaskMapper.addLong(task.getSignature(), projectId, data.getString("video_id"), accountId);
|
|
|
+ }
|
|
|
+ String syncAccounts = task.getSyncAccounts();
|
|
|
+ if (!Check.isNull(syncAccounts)) {
|
|
|
+ JSONArray accounts = JSONArray.parseArray(syncAccounts);
|
|
|
+ if (accounts.size() > 1) {
|
|
|
+ accounts.remove(0);
|
|
|
+ if (!Check.isNull(data)) {
|
|
|
+ syncBytedance(accountId, task.getMediaId(), task.getSignature(), accounts, task.getUserId(), task.getUserName(), task.getMaterialName(), task.getMaterialUrl(), data.getString("video_id"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
log.info(
|
|
|
"头条素材同步完成,时间:{} s ,accountId:{},code:{},返回信息:{}",
|
|
|
(System.currentTimeMillis() - l) / 1000,
|
|
@@ -274,6 +293,80 @@ public class MaterialUploadTaskServiceImpl
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ // bindExecutorService
|
|
|
+ private void syncBytedance(Long accountId, Integer mediaId, String signature, JSONArray accountArray, String loginId, String userName, String materialName, String materialUrl, String videoId) {
|
|
|
+ bindExecutorService.submit(
|
|
|
+ new Runnable() {
|
|
|
+ @SneakyThrows
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ Thread.sleep(3 * 60 * 1000L);
|
|
|
+ String token = materialUploadTaskMapper.getTokenByAccountId(accountId);
|
|
|
+ if (Check.isNull(token)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ List<MaterialUploadTask> tasksList = new ArrayList<>();
|
|
|
+ List<List<Object>> accountIds = Lists.partition(accountArray, 49);
|
|
|
+ for (int i = 0; i < accountIds.size(); i++) {
|
|
|
+ List<Object> objects = accountIds.get(i);
|
|
|
+ JSONObject params = new JSONObject();
|
|
|
+ params.put("advertiser_id", accountId);
|
|
|
+ params.put("target_advertiser_ids", JSONArray.toJSONString(objects));
|
|
|
+ JSONArray video_ids = new JSONArray();
|
|
|
+ video_ids.add(videoId);
|
|
|
+ params.put("video_ids", video_ids);
|
|
|
+ JSONObject jsonObject = HttpUtils.bytedancePostRequest(token, "https://ad.oceanengine.com/open_api/2/file/material/bind/", params);
|
|
|
+ Map<Long, String> dataMap = new HashMap<>();
|
|
|
+ if (!Check.isNull(jsonObject)) {
|
|
|
+ Integer code = jsonObject.getInteger("code");
|
|
|
+ if (code == 0) {
|
|
|
+ log.info("素材推送成功");
|
|
|
+ JSONObject data = jsonObject.getJSONObject("data");
|
|
|
+ if (!Check.isNull(data)) {
|
|
|
+ JSONArray fail_list = data.getJSONArray("fail_list");
|
|
|
+ if (!Check.isNull(fail_list)) {
|
|
|
+ for (int j = 0; j < fail_list.size(); j++) {
|
|
|
+ JSONObject failJson = fail_list.getJSONObject(j);
|
|
|
+ dataMap.put(failJson.getLong("target_advertiser_id"), failJson.getString("fail_reason"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (int j = 0; j < objects.size(); j++) {
|
|
|
+ Long target_advertiser_id = (Long) objects.get(j);
|
|
|
+ MaterialUploadTask task = new MaterialUploadTask();
|
|
|
+ task.setMediaId(mediaId);
|
|
|
+ task.setSignature(signature);
|
|
|
+ task.setUserId(loginId);
|
|
|
+ task.setUserName(userName);
|
|
|
+ task.setMaterialName(materialName);
|
|
|
+ task.setMaterialUrl(materialUrl);
|
|
|
+ if (code != 0) {
|
|
|
+ task.setTaskStatus(4);
|
|
|
+ task.setRemarks(jsonObject.getString("message"));
|
|
|
+ } else {
|
|
|
+ if (!Check.isNull(dataMap)) {
|
|
|
+ String fail_reason = dataMap.get(target_advertiser_id);
|
|
|
+ if (Check.isNull(fail_reason)) {
|
|
|
+ task.setTaskStatus(3);
|
|
|
+ task.setRemarks("素材同步完成");
|
|
|
+ } else {
|
|
|
+ task.setTaskStatus(4);
|
|
|
+ task.setRemarks("重复推送-此素材已存在广告主账户中");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ task.setAccountId(target_advertiser_id);
|
|
|
+ tasksList.add(task);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ materialUploadTaskMapper.replaceBatch(tasksList);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
private TaskVo getTaskList(String signature) {
|
|
|
TaskVo taskVo = new TaskVo();
|
|
|
QueryWrapper<MaterialUploadTask> queryWrapper = new QueryWrapper<>();
|