Explorar o código

重构百度成片(转存)

tsurumure hai 3 meses
pai
achega
6ce19a136c

+ 22 - 0
src/main/java/com/backendsys/modules/ai/media/entity/JobStatusEnums.java

@@ -0,0 +1,22 @@
+package com.backendsys.modules.ai.media.entity;
+
+/**
+ * 任务状态 枚举
+ */
+public enum JobStatusEnums {
+    ;
+    private String value;
+    JobStatusEnums(String value) {
+        this.value = value;
+    }
+
+    // 任务状态 (0任务排队中,1任务完成,3任务执行中)
+    public static String jobStatusToLabel(int value) {
+        switch (value) {
+            case 0: return "任务排队中";
+            case 1: return "任务完成";
+            case 3: return "任务执行中";
+            default: throw new IllegalArgumentException("Invalid code: " + value);
+        }
+    }
+}

+ 7 - 0
src/main/java/com/backendsys/modules/ai/media/entity/MediaTtv.java

@@ -1,5 +1,6 @@
 package com.backendsys.modules.ai.media.entity;
 
+import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -28,6 +29,8 @@ public class MediaTtv {
     private String job_id;
     private Integer job_status;     // 任务状态 (0任务排队中,1任务完成,3任务执行中)
     @TableField(exist = false)
+    private String job_status_label;
+    @TableField(exist = false)
     private Float job_progress = 0f;     // 任务进度 (1=100%)
 
     private String video_origin_url;
@@ -42,7 +45,11 @@ public class MediaTtv {
     private MediaTtvConfig config;
 
     private String request_params;
+    @TableField(exist = false)
+    private JSONObject request_params_json;
     private String response_params;
+    @TableField(exist = false)
+    private JSONObject response_params_json;
     private String create_time;
     private String update_time;
 

+ 24 - 26
src/main/java/com/backendsys/modules/ai/media/service/impl/MediaTtvServiceImpl.java

@@ -7,6 +7,7 @@ import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.backendsys.exception.CustException;
 import com.backendsys.modules.ai.media.dao.MediaTtvDao;
+import com.backendsys.modules.ai.media.entity.JobStatusEnums;
 import com.backendsys.modules.ai.media.entity.MediaTtv;
 import com.backendsys.modules.ai.media.entity.MediaTtvConfig;
 import com.backendsys.modules.ai.media.entity.MediaTtvSource;
@@ -18,12 +19,14 @@ import com.backendsys.modules.sdk.douyincloud.tos.service.DouyinTosService;
 import com.backendsys.modules.sdk.tencentcloud.cos.service.TencentCosService;
 import com.backendsys.modules.system.service.SysCommonService;
 import com.backendsys.modules.upload.entity.SysFileResult;
+import com.backendsys.modules.upload.service.SysFileService;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.CompletableFuture;
 
 @Service
 public class MediaTtvServiceImpl implements MediaTtvService {
@@ -38,6 +41,9 @@ public class MediaTtvServiceImpl implements MediaTtvService {
     @Autowired
     private DouyinTosService douyinTosService;
 
+    @Autowired
+    private SysFileService sysFileService;
+
     @Autowired
     private BaiduBceMediaService baiduBceMediaService;
 
@@ -73,12 +79,14 @@ public class MediaTtvServiceImpl implements MediaTtvService {
         if (detail == null) throw new CustException("任务记录不存在,请重新生成");
 
         // -- 静态赋值 -------------------------------
-        String request_params_str = detail.getRequest_params();
-        JSONObject request_params = JSONUtil.parseObj(request_params_str);
+        JSONObject request_params_json = JSONUtil.parseObj(detail.getRequest_params());
+        JSONObject response_params_json = JSONUtil.parseObj(detail.getResponse_params());
+        detail.setRequest_params_json(request_params_json);
+        detail.setResponse_params_json(response_params_json);
 
         // source
         List<MediaTtvSource> source = new ArrayList<>();
-        JSONObject request_params_source = JSONUtil.parseObj(request_params.get("source"));
+        JSONObject request_params_source = JSONUtil.parseObj(request_params_json.get("source"));
         JSONArray request_params_source_structs = JSONUtil.parseArray(request_params_source.get("structs"));
         for(Object obj : request_params_source_structs) {
             JSONObject jsonObject = JSONUtil.parseObj(obj);
@@ -98,13 +106,12 @@ public class MediaTtvServiceImpl implements MediaTtvService {
 
         // config
         MediaTtvConfig config = new MediaTtvConfig();
-        JSONObject request_params_config = JSONUtil.parseObj(request_params.get("config"));
+        JSONObject request_params_config = JSONUtil.parseObj(request_params_json.get("config"));
         config.setTts_voice_type(Convert.toInt(request_params_config.get("ttsPer")));
         config.setResolution(Convert.toIntArray(request_params_config.get("resolution")));
         detail.setConfig(config);
         // ---------------------------------------
 
-
         // 任务状态 (0任务排队中,1任务完成,3任务执行中)
         Integer job_status = detail.getJob_status();
         if (job_status != 1) {
@@ -112,39 +119,30 @@ public class MediaTtvServiceImpl implements MediaTtvService {
             // [百度AI] AI成片-查询结果
             BaiduBceMediaJobResult response = baiduBceMediaService.queryMediaTtv(mediaTtv.getJob_id());
 
-            // -- 静态赋值 ------------------------
-            // progress: 查询进度
-            // System.out.println("(queryMediaTtv) user_id: " + detail.getUser_id() + ", job_id: " + mediaTtv.getJob_id() + ", progress: " + response.getProgress());
+            // 查询进度百分比
             detail.setJob_progress(response.getProgress());
-            // ----------------------------------
 
+            // 生成成功
             if (StrUtil.isNotEmpty(response.getVideo_origin_url())) {
-                String video_url = "";
-                String object_key = "";
-
-                // -- [转存] 将查询结果转存 --------------------------------------
-                Integer UPLOAD_TARGET = Convert.toInt(sysCommonService.getCommonByTag("UPLOAD_TARGET"));
-                // target: 上传目标 (-1:本地, 1:腾讯云, 2:阿里云, 3.抖音云)
-                if (UPLOAD_TARGET == 1) {
-                    SysFileResult sysFileResult = tencentCosService.uploadFileFromUrlToCOS(response.getVideo_origin_url());
-                    object_key = sysFileResult.getKey();
-                    video_url = sysFileResult.getDomain() + "/" + sysFileResult.getKey();
-                }
-                // 3: 抖音云
-                if (UPLOAD_TARGET == 3) {
-
-                }
-                // ------------------------------------------------------------
+
+                job_status = 1;
+
+                // URL转存文件
+                SysFileResult sysFileResult = sysFileService.urlToUploadFile(response.getVideo_origin_url());
+                String object_key = sysFileResult.getKey();
+                String video_url = sysFileResult.getDomain() + "/" + sysFileResult.getKey();
 
                 // [DB] 更新表记录
                 detail.setVideo_origin_url(response.getVideo_origin_url());
                 detail.setVideo_url(video_url);
                 detail.setObject_key(object_key);
-                detail.setJob_status(1);
+                detail.setJob_status(job_status);
                 mediaTtvDao.updateById(detail);
             }
 
         }
+
+        detail.setJob_status_label(JobStatusEnums.jobStatusToLabel(job_status));
         return detail;
 
     }

+ 2 - 1
src/main/java/com/backendsys/modules/sdk/douyincloud/tos/service/DouyinTosService.java

@@ -36,5 +36,6 @@ public interface DouyinTosService {
 
 
     // [抖音云TOS] URL 转存
-    SysFileResult uploadFileFromUrlToTOS(String url);
+    SysFileResult urlToTOS(String origin_url);
+
 }

+ 8 - 6
src/main/java/com/backendsys/modules/sdk/douyincloud/tos/service/impl/DouyinTosServiceImpl.java

@@ -352,18 +352,19 @@ public class DouyinTosServiceImpl implements DouyinTosService {
 
     }
 
-
     /**
      * [抖音云TOS] URL 转存
      */
-    public SysFileResult uploadFileFromUrlToTOS(String url) {
+    public SysFileResult urlToTOS(String origin_url) {
 
-        if (StrUtil.isEmpty(url)) throw new CustException("url 不能为空");
+        if (StrUtil.isEmpty(origin_url)) throw new CustException("url 不能为空");
 
         // 下载URL文件到本地
-        File downloadFile = CommonUtil.downloadLocalFromUrl(url);
+        File downloadFile = CommonUtil.downloadLocalFromUrl(origin_url);
         // 获得URL文件后缀名
-        String suffix = CommonUtil.getFileSuffixFromUrl(url);
+        String suffix = CommonUtil.getFileSuffixFromUrl(origin_url);
+        // 获得文件大小
+        Long size = downloadFile.length();
 
         // 使用临时文件夹 (/temp) + UUID文件名.后缀名
         String object_filename = CommonUtil.generateUUIDFilename(suffix);
@@ -397,10 +398,11 @@ public class DouyinTosServiceImpl implements DouyinTosService {
 
                 // 自定义返回结果实体
                 SysFileResult result = new SysFileResult();
+                result.setDomain(DOMAIN);
                 result.setKey(object_key);
                 result.setRequest_id(output.getRequestInfo().getRequestId());
                 result.setE_tag(output.getEtag());
-                result.setDomain(DOMAIN);
+                result.setSize(size);
                 return result;
 
             } catch (TosClientException | TosServerException e) {

+ 1 - 1
src/main/java/com/backendsys/modules/sdk/tencentcloud/cos/service/TencentCosService.java

@@ -41,5 +41,5 @@ public interface TencentCosService {
 
 
     // [腾讯云COS] URL 转存
-    SysFileResult uploadFileFromUrlToCOS(String url);
+    SysFileResult urlToCOS(String url);
 }

+ 4 - 2
src/main/java/com/backendsys/modules/sdk/tencentcloud/cos/service/impl/TencentCosServiceImpl.java

@@ -361,7 +361,7 @@ public class TencentCosServiceImpl implements TencentCosService {
 
     // [腾讯云COS] URL 转存
     @Override
-    public SysFileResult uploadFileFromUrlToCOS(String url) {
+    public SysFileResult urlToCOS(String url) {
 
         if (StrUtil.isEmpty(url)) throw new CustException("url 不能为空");
 
@@ -369,7 +369,8 @@ public class TencentCosServiceImpl implements TencentCosService {
         File downloadFile = CommonUtil.downloadLocalFromUrl(url);
         // 获得URL文件后缀名
         String suffix = CommonUtil.getFileSuffixFromUrl(url);
-
+        // 获得文件大小
+        Long size = downloadFile.length();
 
         // 使用临时文件夹 (/temp) + UUID文件名.后缀名
         String object_filename = CommonUtil.generateUUIDFilename(suffix);
@@ -394,6 +395,7 @@ public class TencentCosServiceImpl implements TencentCosService {
             result.setKey(object_key);
             result.setRequest_id(uploadResult.getRequestId());
             result.setE_tag(uploadResult.getETag());
+            result.setSize(size);
             return result;
 
         } catch (CosClientException e) {

+ 1 - 0
src/main/java/com/backendsys/modules/upload/entity/SysFileResult.java

@@ -8,4 +8,5 @@ public class SysFileResult {
     private String key;
     private String e_tag;
     private String domain;
+    private Long size;
 }

+ 1 - 12
src/main/java/com/backendsys/modules/upload/enums/StyleEnums.java

@@ -1,7 +1,7 @@
 package com.backendsys.modules.upload.enums;
 
 /**
- * 样式枚举
+ * 样式 枚举
  */
 public enum StyleEnums {
 
@@ -16,15 +16,4 @@ public enum StyleEnums {
         this.value = value;
     }
 
-    // 新增一个静态方法,根据整数返回对应的枚举值
-    public static String targetToLabel(int value) {
-        switch (value) {
-            case -1: return "本地";
-            case 1: return "腾讯云";
-            case 2: return "阿里云";
-            case 3: return "抖音云";
-            default:
-                throw new IllegalArgumentException("Invalid code: " + value);
-        }
-    }
 }

+ 26 - 0
src/main/java/com/backendsys/modules/upload/enums/TargetEnums.java

@@ -0,0 +1,26 @@
+package com.backendsys.modules.upload.enums;
+
+public enum TargetEnums {
+
+    ;
+    private String value;
+    public String getValue() {
+        return this.value;
+    }
+    TargetEnums(String value) {
+        this.value = value;
+    }
+
+    // 新增一个静态方法,根据整数返回对应的枚举值
+    public static String targetToLabel(int value) {
+        switch (value) {
+            case -1: return "本地";
+            case 1: return "腾讯云";
+            case 2: return "阿里云";
+            case 3: return "抖音云";
+            default:
+                throw new IllegalArgumentException("Invalid code: " + value);
+        }
+    }
+
+}

+ 3 - 0
src/main/java/com/backendsys/modules/upload/service/SysFileService.java

@@ -2,6 +2,7 @@ package com.backendsys.modules.upload.service;
 
 import com.backendsys.modules.upload.entity.SysFile;
 import com.backendsys.modules.upload.entity.SysFileMergeByMd5;
+import com.backendsys.modules.upload.entity.SysFileResult;
 import com.backendsys.utils.response.PageEntity;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.springframework.web.multipart.MultipartFile;
@@ -30,6 +31,8 @@ public interface SysFileService extends IService<SysFile> {
     // 编辑文件 (批量)
     Map<String, Object> updateUploadFileBatch(SysFile sysFile);
 
+    // URL转存
+    SysFileResult urlToUploadFile(String origin_url);
 
     // 根据 MD5 获取文件列表 (我的)
     List<Map<String, Object>> getUploadFileListByMd5(SysFile sysFile);

+ 3 - 2
src/main/java/com/backendsys/modules/upload/service/impl/SysFileMultipartServiceImpl.java

@@ -21,6 +21,7 @@ import com.backendsys.modules.upload.dao.SysFileDao;
 import com.backendsys.modules.upload.entity.MultipartUploadParams;
 import com.backendsys.modules.upload.entity.SysFile;
 import com.backendsys.modules.upload.enums.StyleEnums;
+import com.backendsys.modules.upload.enums.TargetEnums;
 import com.backendsys.modules.upload.service.SysFileMultipartService;
 import com.backendsys.utils.response.ResultEnum;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -217,7 +218,7 @@ public class SysFileMultipartServiceImpl implements SysFileMultipartService {
 
         Map<String, Object> resp = new LinkedHashMap<>();
         resp.put("target", UPLOAD_TARGET.get());
-        resp.put("target_label", StyleEnums.targetToLabel(UPLOAD_TARGET.get()));
+        resp.put("target_label", TargetEnums.targetToLabel(UPLOAD_TARGET.get()));
         resp.put("upload_chunk_count", multipartUploadParams.getUpload_chunk_count());
         resp.put("upload_id", sysFileEntity.getUpload_id());
         resp.put("object_key", sysFileEntity.getObject_key());
@@ -378,7 +379,7 @@ public class SysFileMultipartServiceImpl implements SysFileMultipartService {
             // 移除 upload_id
             sysFileEntity.setUpload_id(null);
             // 翻译 储存介质
-            sysFileEntity.setTarget_label(StyleEnums.targetToLabel(sysFileEntity.getTarget()));
+            sysFileEntity.setTarget_label(TargetEnums.targetToLabel(sysFileEntity.getTarget()));
             // 翻译 用户名
             SysUser userEntity = sysUserDao.selectById(sysFileEntity.getUser_id());
             sysFileEntity.setUsername(userEntity.getUsername());

+ 47 - 3
src/main/java/com/backendsys/modules/upload/service/impl/SysFileServiceImpl.java

@@ -22,6 +22,7 @@ import com.backendsys.modules.upload.entity.SysFileCategory;
 import com.backendsys.modules.upload.entity.SysFileMergeByMd5;
 import com.backendsys.modules.upload.entity.SysFileResult;
 import com.backendsys.modules.upload.enums.StyleEnums;
+import com.backendsys.modules.upload.enums.TargetEnums;
 import com.backendsys.modules.upload.service.SysFileService;
 import com.backendsys.modules.upload.utils.UploadUtil;
 import com.backendsys.utils.response.PageEntity;
@@ -39,6 +40,7 @@ import org.springframework.util.StringUtils;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.io.IOException;
+import java.net.URL;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.atomic.AtomicReference;
@@ -113,7 +115,7 @@ public class SysFileServiceImpl extends ServiceImpl<SysFileDao, SysFile> impleme
         sysFileList = sysFileList.stream().map(item -> {
             // 查询出 上传存储介质(target) 的翻译
             // String target_label = Convert.toStr(sysCommonService.getLabelByValue(COMMON_OPTIONS, item.getTarget()));
-            String target_label = StyleEnums.targetToLabel(item.getTarget());
+            String target_label = TargetEnums.targetToLabel(item.getTarget());
             item.setTarget_label(target_label);
             return item;
         }).collect(Collectors.toList());
@@ -128,7 +130,7 @@ public class SysFileServiceImpl extends ServiceImpl<SysFileDao, SysFile> impleme
     @Override
     public Map<String, Object> selectUploadTarget() {
         Integer UPLOAD_TARGET = Convert.toInt(sysCommonService.getCommonByTag("UPLOAD_TARGET"));
-        String target_label = StyleEnums.targetToLabel(UPLOAD_TARGET);
+        String target_label = TargetEnums.targetToLabel(UPLOAD_TARGET);
         Map<String, Object> resp = new LinkedHashMap<>();
         resp.put("target", UPLOAD_TARGET);
         resp.put("target_label", target_label);
@@ -202,7 +204,7 @@ public class SysFileServiceImpl extends ServiceImpl<SysFileDao, SysFile> impleme
                 sysFileEntity.setMd5(uploadResult.getE_tag().replace("\"", ""));
             }
             sysFileEntity.setTarget(target);
-            sysFileEntity.setTarget_label(StyleEnums.targetToLabel(target));
+            sysFileEntity.setTarget_label(TargetEnums.targetToLabel(target));
 
             // 获得公共配置
             List<SysCommon> sysCommonList = sysCommonService.getCommonByCategory("UPLOAD");
@@ -434,6 +436,48 @@ public class SysFileServiceImpl extends ServiceImpl<SysFileDao, SysFile> impleme
         return Map.of("ids", ids);
     }
 
+    // URL转存
+    @Override
+    public SysFileResult urlToUploadFile(String origin_url) {
+
+        Integer UPLOAD_TARGET = Convert.toInt(sysCommonService.getCommonByTag("UPLOAD_TARGET"));
+
+        SysFileResult sysFileResult = null;
+
+        // target: 上传目标 (-1:本地, 1:腾讯云, 2:阿里云, 3.抖音云)
+        if (UPLOAD_TARGET == 1) {
+            sysFileResult = tencentCosService.urlToCOS(origin_url);
+        }
+        // 3: 抖音云
+        if (UPLOAD_TARGET == 3) {
+            sysFileResult = douyinTosService.urlToTOS(origin_url);
+        }
+        if (sysFileResult == null) throw new CustException("上传失败");
+
+        // [DB] 创建文件
+        SysFile sysFileEntity = new SysFile();
+        sysFileEntity.setRequest_id(sysFileEntity.getRequest_id());
+        sysFileEntity.setUser_id(SecurityUtil.getUserId());
+
+        try {
+            URL parsed_url = new URL(origin_url);
+            sysFileEntity.setName(StrUtil.subAfter(parsed_url.getPath(), '/', true));
+        } catch (Exception e) {
+            throw new CustException(e.getMessage());
+        }
+
+        sysFileEntity.setUrl(sysFileResult.getDomain() + "/" + sysFileResult.getKey());
+        sysFileEntity.setObject_key(sysFileResult.getKey());
+        sysFileEntity.setSize(sysFileResult.getSize());
+        sysFileEntity.setTarget(UPLOAD_TARGET);
+        sysFileEntity.setTarget_label(TargetEnums.targetToLabel(UPLOAD_TARGET));
+        sysFileEntity.setUpload_time(DateUtil.now());
+        sysFileDao.insert(sysFileEntity);
+
+        return sysFileResult;
+    }
+
+
     /**
      * 根据 MD5 获取文件列表 (我的)
      */