Forráskód Böngészése

素材同步修改

yumeng 2 éve
szülő
commit
aacb3ab985

+ 5 - 0
pom.xml

@@ -28,6 +28,11 @@
             <artifactId>httpmime</artifactId>
             <version>4.5.9</version>
         </dependency>
+        <dependency>
+            <groupId>com.google.guava</groupId>
+            <artifactId>guava</artifactId>
+            <version>29.0-jre</version>
+        </dependency>
 
        <!-- <dependency>
             <groupId>org.apache.shiro</groupId>

A különbségek nem kerülnek megjelenítésre, a fájl túl nagy
+ 25 - 0
src/main/java/cn/com/ctop/material/controller/MaterialUploadTaskController.java


+ 1 - 0
src/main/java/cn/com/ctop/material/entity/MaterialUploadTask.java

@@ -67,6 +67,7 @@ public class MaterialUploadTask {
      * remarks
      */
     private String remarks;
+    private String syncAccounts;
     /**
      * 上传成功时间
      */

+ 6 - 0
src/main/java/cn/com/ctop/material/mapper/MaterialUploadTaskMapper.java

@@ -30,4 +30,10 @@ public interface MaterialUploadTaskMapper extends BaseMapper<MaterialUploadTask>
     void syncKuaishou(@Param("signature") String signature);
 
     String getKuaiShouTokenByAccountId(@Param("accountId") Long accountId);
+
+    void replaceBatch(@Param("addList") List<MaterialUploadTask> tasksList);
+
+    Long getProjectIdByAccoubt(@Param("accountId") Long accountId);
+
+    void addLong(@Param("signature") String signature, @Param("projectId") Long projectId, @Param("videoId") String videoId, @Param("accountId") Long accountId);
 }

+ 48 - 0
src/main/java/cn/com/ctop/material/mapper/xml/MaterialUploadTaskMapper.xml

@@ -1,6 +1,51 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="cn.com.ctop.material.mapper.MaterialUploadTaskMapper">
+    <insert id="replaceBatch">
+        insert into ctop_material_upload_task(
+        media_id,
+        signature,
+        account_id,
+        kuaishou_user_id,
+        shield_backward_switch,
+        user_id,
+        user_name,
+        material_name,
+        material_url,
+        task_status,
+        remarks
+        )
+        values
+        <foreach collection="addList" item="add" separator=",">
+            (
+            #{add.mediaId},
+            #{add.signature},
+            #{add.accountId},
+            #{add.kuaishouUserId},
+            #{add.shieldBackwardSwitch},
+            #{add.userId},
+            #{add.userName},
+            #{add.materialName},
+            #{add.materialUrl},
+            #{add.taskStatus},
+            #{add.remarks}
+            )
+        </foreach>
+
+    </insert>
+    <insert id="addLong">
+        insert into ctop_material_upload_bytedance_log(
+        signature,
+        project_id,
+        video_id,
+        account_id
+        ) values (
+         #{signature},
+         #{projectId},
+         #{videoId},
+         #{accountId}
+        )
+    </insert>
     <update id="updateStatusById">
         UPDATE ctop_material_upload_task
         SET task_status = #{taskStatus},
@@ -63,4 +108,7 @@
 	  WHERE
 	    t1.account_id = #{accountId}
     </select>
+    <select id="getProjectIdByAccoubt" resultType="java.lang.Long" parameterType="java.lang.Long">
+        select project_id  from ctop_user_allocation where account_id = #{accountId}
+    </select>
 </mapper>

+ 4 - 0
src/main/java/cn/com/ctop/material/service/IMaterialUploadTaskService.java

@@ -2,6 +2,8 @@ package cn.com.ctop.material.service;
 
 import cn.com.ctop.material.entity.MaterialUploadTask;
 import com.baomidou.mybatisplus.extension.service.IService;
+import org.apache.http.entity.mime.content.FileBody;
+import org.springframework.core.io.FileSystemResource;
 
 /**
  * 同步素材任务
@@ -12,5 +14,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IMaterialUploadTaskService extends IService<MaterialUploadTask> {
     void upload(String signature);
+    public void uploadKuaiShou(MaterialUploadTask task, FileSystemResource resource, Integer type);
+    public void uploadBytedance(FileBody fileBody, MaterialUploadTask task);
 
 }

+ 99 - 6
src/main/java/cn/com/ctop/material/service/impl/MaterialUploadTaskServiceImpl.java

@@ -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<>();