yumeng před 1 rokem
rodič
revize
7865abdfa2

+ 46 - 0
src/main/java/cn/com/ctop/material/controller/DowloadController.java

@@ -0,0 +1,46 @@
+package cn.com.ctop.material.controller;
+
+import cn.com.ctop.material.entity.MaterialUploadTask;
+import cn.com.ctop.material.service.IDowloadService;
+import cn.com.ctop.material.service.IMaterialUploadTaskService;
+import com.alibaba.fastjson.JSONObject;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.entity.mime.content.FileBody;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.File;
+import java.util.List;
+
+/**
+ * 同步素材任务
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2021-10-21
+ */
+@Slf4j
+@RestController
+@RequestMapping("/dowload")
+public class DowloadController {
+  @Autowired private IDowloadService dowloadService;
+
+  @ResponseBody
+  @GetMapping("/batch")
+  public JSONObject uploadVideo(String signature) {
+
+  List<String> urls =   dowloadService.getUrls();
+    for (int i = 0; i <urls.size() ; i++) {
+      String s = urls.get(i);
+      String[] split = s.split("\\?");
+      dowloadService.batchDowload(split[0]);
+    }
+
+    return null;
+  }
+
+
+}

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 43 - 28
src/main/java/cn/com/ctop/material/controller/MaterialUploadTaskController.java


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

@@ -36,4 +36,14 @@ public interface MaterialUploadTaskMapper extends BaseMapper<MaterialUploadTask>
     Long getProjectIdByAccoubt(@Param("accountId") Long accountId);
 
     void addLong(@Param("signature") String signature, @Param("projectId") Long projectId, @Param("videoId") String videoId, @Param("accountId") Long accountId);
+
+    List<String> getUrls();
+
+    int checkBytedance(String signature);
+
+    void saveInfo(@Param("signature") String signature, @Param("materialName") String materialName, @Param("uploadStatus") Integer uploadStatus, @Param("uploadRemark") String uploadRemark, @Param("agentId") Long agentId, @Param("date") Date date);
+
+    String getTAgentToken(Long agentId);
+
+    void updateAgentStatus(@Param("signature") String signature, @Param("videoId") String videoId, @Param("materialId") Long materialId, @Param("uploadStatus") Integer uploadStatus, @Param("uploadRemark") String uploadRemark);
 }

+ 65 - 50
src/main/java/cn/com/ctop/material/mapper/xml/MaterialUploadTaskMapper.xml

@@ -34,81 +34,96 @@
 
     </insert>
     <insert id="addLong">
-        insert into ctop_material_upload_bytedance_log(
-        signature,
-        project_id,
-        video_id,
-        account_id
-        ) values (
-         #{signature},
-         #{projectId},
-         #{videoId},
-         #{accountId}
-        )
+        insert into ctop_material_upload_bytedance_log(signature,
+                                                       project_id,
+                                                       video_id,
+                                                       account_id)
+        values (#{signature},
+                #{projectId},
+                #{videoId},
+                #{accountId})
+    </insert>
+    <insert id="saveInfo">
+        insert into ctop_bytedance_upload_agent (signature, video_name, upload_status, upload_remark, agent_id,
+                                                 create_time)
+        values (#{signature}, #{materialName}, #{uploadStatus}, #{uploadRemark}, #{agentId}, #{date})
     </insert>
     <update id="updateStatusById">
         UPDATE ctop_material_upload_task
         SET task_status = #{taskStatus},
-        remarks = #{remarks},
-        upload_time = #{uploadTime}
-        WHERE
-	    id = #{id}
+            remarks     = #{remarks},
+            upload_time = #{uploadTime}
+        WHERE id = #{id}
     </update>
     <update id="syncBytedance">
         UPDATE ctop_material_info
         SET sync_bytedance = 2
-        WHERE
-	   `code` = #{signature}
+        WHERE `code` = #{signature}
     </update>
     <update id="syncKuaishou">
         UPDATE ctop_material_info
         SET sync_kuaishou = 2
-        WHERE
-	   `code` = #{signature}
+        WHERE `code` = #{signature}
+    </update>
+
+    <update id="updateAgentStatus">
+        update ctop_bytedance_upload_agent
+        set video_id =#{videoId},
+            material_id = #{materialId},
+            upload_status = #{uploadStatus},
+            upload_remark = #{uploadRemark}
+        where signature = #{signature}
     </update>
 
     <select id="getMediaList" resultType="java.lang.Integer">
-        select media_id  from  ctop_material_upload_task
+        select media_id
+        from ctop_material_upload_task
         WHERE signature = #{signature}
-        AND task_status = 1
+          AND task_status = 1
         GROUP BY media_id
     </select>
     <select id="getTokenByAccountId" resultType="java.lang.String">
-        SELECT
-	    access_token
-        FROM
-	    ctop_oauth_token
-        WHERE
-	    account_id = #{accountId}
+        SELECT access_token
+        FROM ctop_oauth_token
+        WHERE account_id = #{accountId}
     </select>
     <select id="getVideoSize" resultType="com.alibaba.fastjson.JSONObject">
-    SELECT
-	width,
-	height
-    FROM
-	ctop_material_parameter
-    WHERE
-	material_id = #{signature}
-	limit 1
+        SELECT width,
+               height
+        FROM ctop_material_parameter
+        WHERE material_id = #{signature} limit 1
 
     </select>
     <select id="getKuaiShouTokenByAccountId" resultType="java.lang.String">
-     SELECT
-       (CASE
-		WHEN
-		t2.access_token IS NOT NULL
-		THEN
-		t2.access_token
-		ELSE t1.access_token
-		END
-		) as 'access_token'
-		FROM
-		ctop_oauth_token t1
-		LEFT JOIN ctop_oauth_agent_token t2 ON t1.app_id = t2.app_id
-	  WHERE
-	    t1.account_id = #{accountId}
+        SELECT (CASE
+                    WHEN
+                        t2.access_token IS NOT NULL
+                        THEN
+                        t2.access_token
+                    ELSE t1.access_token
+            END
+                   ) as 'access_token'
+        FROM ctop_oauth_token t1
+                 LEFT JOIN ctop_oauth_agent_token t2 ON t1.app_id = t2.app_id
+        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} limit 1
+        select project_id
+        from ctop_user_allocation
+        where account_id = #{accountId} limit 1
+    </select>
+    <select id="getUrls" resultType="java.lang.String">
+        select dowload_url
+        from batch_dowload_url
+    </select>
+    <select id="checkBytedance" resultType="java.lang.Integer" parameterType="java.lang.String">
+        select count(1)
+        from ctop_bytedance_upload_agent
+        where signature = #{signature}
+    </select>
+    <select id="getTAgentToken" resultType="java.lang.String" parameterType="java.lang.Long">
+        select access_token
+        from ctop_oauth_token
+        where account_id = #{agentId}
     </select>
 </mapper>

+ 17 - 0
src/main/java/cn/com/ctop/material/service/IDowloadService.java

@@ -0,0 +1,17 @@
+package cn.com.ctop.material.service;
+
+
+import java.util.List;
+
+/**
+ * 同步素材任务
+ *
+ * @author jeecg-boot
+ * 2021-10-21
+ * @version V1.0
+ */
+public interface IDowloadService {
+    void batchDowload(String url);
+
+    List<String> getUrls();
+}

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

@@ -16,5 +16,6 @@ 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);
+    public void uploadBytedanceAgent(FileBody fileBody, MaterialUploadTask task);
 
 }

+ 86 - 0
src/main/java/cn/com/ctop/material/service/impl/DowloadServiceImpl.java

@@ -0,0 +1,86 @@
+package cn.com.ctop.material.service.impl;
+
+import cn.com.ctop.material.entity.MaterialUploadTask;
+import cn.com.ctop.material.entity.TaskVo;
+import cn.com.ctop.material.enums.MaterialEnum;
+import cn.com.ctop.material.mapper.MaterialUploadTaskMapper;
+import cn.com.ctop.material.service.IDowloadService;
+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;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.entity.mime.content.FileBody;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.stereotype.Service;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.URI;
+import java.nio.charset.Charset;
+import java.util.*;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * 同步素材任务
+ *
+ * @author jeecg-boot 2021-10-21
+ * @version V1.0
+ */
+@Service
+@Slf4j
+public class DowloadServiceImpl implements IDowloadService {
+
+     private static String downloadUrl = "/Users/yumeng/videoFile/";
+
+    private static ExecutorService submitExecutorService = Executors.newFixedThreadPool(10);
+    @Autowired
+    private MaterialUploadTaskMapper materialUploadTaskMapper;
+
+
+    @Override
+    public void batchDowload(String url) {
+        submitExecutorService.submit(
+                new Runnable() {
+                    @Override
+                    public void run() {
+                        System.err.println(url);
+                        String localUrl = LoadFileUtil.downLoadFromUrl(url, downloadUrl);
+                        System.err.println(localUrl);
+
+                    }
+                });
+    }
+
+    @Override
+    public List<String> getUrls() {
+        return materialUploadTaskMapper.getUrls();
+    }
+
+
+}

+ 96 - 0
src/main/java/cn/com/ctop/material/service/impl/MaterialUploadTaskServiceImpl.java

@@ -62,6 +62,7 @@ public class MaterialUploadTaskServiceImpl
     // private static String downloadUrl = "D:\\file";
     private static ExecutorService kuaishouExecutorService = Executors.newFixedThreadPool(5);
     private static ExecutorService bytedanceExecutorService = Executors.newFixedThreadPool(5);
+    private static ExecutorService bytedanceExecutorAgent = Executors.newFixedThreadPool(5);
     private static ExecutorService submitExecutorService = Executors.newFixedThreadPool(5);
     private static ExecutorService bindExecutorService = Executors.newFixedThreadPool(20);
 
@@ -107,7 +108,20 @@ public class MaterialUploadTaskServiceImpl
                             if (task.getMediaId() == 2 || task.getMediaId() == 4) {
                                 uploadKuaiShou(task, resource, materialType);
                             } else if (task.getMediaId() == 1 || task.getMediaId() == 3) {
+                                int count = materialUploadTaskMapper.checkBytedance(task.getSignature());
+                                if (count == 0) {
+                                    try {
+                                        materialUploadTaskMapper.saveInfo(task.getSignature(), task.getMaterialName(), 1, "待同步", 73970348172L, new Date());
+                                        uploadBytedanceAgent(fileBody, task);
+                                    } catch (Exception e) {
+                                        log.error("代理商上传素材验证失败:{}", e.getMessage());
+                                    }
+
+                                }
+
                                 uploadBytedance(fileBody, task);
+
+
                             }
                         }
                     }
@@ -294,6 +308,88 @@ public class MaterialUploadTaskServiceImpl
     }
 
 
+    @Override
+    public void uploadBytedanceAgent(FileBody fileBody, MaterialUploadTask task) {
+        bytedanceExecutorAgent.submit(
+                new Runnable() {
+                    @Override
+                    public void run() {
+                        String token = materialUploadTaskMapper.getTAgentToken(73970348172L);
+                        if (Check.isNull(token)) {
+                            log.error("此账户id未获取到代理商token");
+                            return;
+                        }
+                        long l = System.currentTimeMillis();
+                        String url = HttpConstant.BYTEDANCE_VIDEO_UPLOAD_AGENT;
+                        CloseableHttpResponse response = null;
+                        CloseableHttpClient client = null;
+                        // 构造请求
+                        HttpPost httpPost = new HttpPost(url);
+                        httpPost.setHeader("Access-Token", token);
+                        // 文件参数
+                        try {
+                            MultipartEntityBuilder entityBuilder =
+                                    MultipartEntityBuilder.create().addPart("video_file", fileBody);
+                            // 其他参数
+                            entityBuilder.addTextBody("agent_id", "73970348172");
+                            entityBuilder.addTextBody("video_signature", task.getSignature());
+                            entityBuilder.addTextBody("is_need_auth", "true");
+                            entityBuilder.addTextBody(
+                                    "file_name",
+                                    task.getMaterialName(),
+                                    ContentType.create("text/plain", Charset.forName("UTF-8")));
+                            org.apache.http.HttpEntity entity = entityBuilder.build();
+                            client = HttpClientBuilder.create().build();
+                            httpPost.setURI(URI.create(url));
+                            httpPost.setEntity(entity);
+                            response = client.execute(httpPost);
+                            if (response != null && response.getStatusLine().getStatusCode() == 200) {
+                                BufferedReader bufferedReader =
+                                        new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
+                                StringBuilder result = new StringBuilder();
+                                String line = "";
+                                while ((line = bufferedReader.readLine()) != null) {
+                                    result.append(line);
+                                }
+                                bufferedReader.close();
+                                JSONObject resultJson = JSONObject.parseObject(result.toString());
+                                System.err.println(resultJson);
+                                if (!Check.isNull(resultJson)) {
+                                    if (resultJson.getInteger("code") == 0) {
+                                        JSONObject data = resultJson.getJSONObject("data");
+                                        if (!Check.isNull(data)) {
+                                            JSONObject videoInfo = data.getJSONObject("video_info");
+                                            materialUploadTaskMapper.updateAgentStatus(task.getSignature(), videoInfo.getString("video_id"), videoInfo.getLong("material_id"), 2, "同步成功");
+                                            log.error("头条同步步素材到代理商成功");
+                                        }
+
+                                    } else {
+                                        String message = resultJson.getString("message");
+                                        materialUploadTaskMapper.updateAgentStatus(task.getSignature(), null, null, 3, message);
+                                        log.error("头条同步步素材到代理商失败,返回信息:{}", resultJson);
+                                    }
+                                }
+                            }
+                        } catch (Exception e) {
+                            log.error(e.getMessage(), e);
+                            materialUploadTaskMapper.updateStatusById(task.getId(), 0, "接口异常,待重试", new Date());
+                        } finally {
+                            try {
+                                if (response != null) {
+                                    response.close();
+                                }
+                                if (null != client) {
+                                    client.close();
+                                }
+                            } catch (IOException e) {
+                                log.error(e.getMessage(), e);
+                            }
+                        }
+                    }
+                });
+    }
+
+
     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() {

+ 1 - 0
src/main/java/cn/com/ctop/material/utils/HttpConstant.java

@@ -6,5 +6,6 @@ package cn.com.ctop.material.utils;
 public class HttpConstant {
     public static final String VIDEO_UPLOAD = "https://ad.e.kuaishou.com/rest/openapi/v2/file/ad/video/upload";
     public static final String BYTEDANCE_VIDEO_UPLOAD = "https://ad.oceanengine.com/open_api/2/file/video/ad/";
+    public static final String BYTEDANCE_VIDEO_UPLOAD_AGENT = "https://api.oceanengine.com/open_api/2/file/video/agent/";
 
 }

+ 1 - 0
src/main/java/cn/com/ctop/material/utils/LoadFileUtil.java

@@ -53,6 +53,7 @@ public class LoadFileUtil {
             }
             return localPath;
         } catch (Exception e) {
+           e.printStackTrace();
             return null;
         }