Browse Source

Merge branch 'dev-volcengine' into develop

cmy 1 tháng trước cách đây
mục cha
commit
3935f0c66e

+ 1 - 0
db/sys_user_role_permission.sql

@@ -67,6 +67,7 @@ INSERT INTO sys_user_role_permission(id, parent_id, permission_name, sort) VALUE
             ('37.1.2', '37.1', 'AI工具-查询图生视频任务状态', null),
             ('37.1.3', '37.1', 'AI工具-图生视频任务列表', null),
             ('37.1.4', '37.1', 'AI工具-图生视频任务收藏/取消收藏', null),
+            ('37.1.5', '37.1', 'AI工具-重新生成视频', null),
 
 
 

+ 1 - 0
db/sys_user_role_permission_relation.sql

@@ -125,6 +125,7 @@ INSERT INTO sys_user_role_permission_relation(role_id, permission_id) VALUES
             (1, '37.1.2'),
             (1, '37.1.3'),
             (1, '37.1.4'),
+            (1, '37.1.5'),
 
     (1, '100'),
         (1, '101'),

+ 8 - 1
src/main/java/com/backendsys/modules/ai/volcengine/controller/VolcengineVideoController.java

@@ -3,6 +3,7 @@ package com.backendsys.modules.ai.volcengine.controller;
 import com.backendsys.modules.ai.volcengine.entity.VolcengineVideoCollect;
 import com.backendsys.modules.ai.volcengine.entity.VolcengineVideoTask;
 import com.backendsys.modules.ai.volcengine.entity.VolcengineVideoTaskDTO;
+import com.backendsys.modules.ai.volcengine.entity.VolcengineVideoTaskDetail;
 import com.backendsys.modules.ai.volcengine.service.VolcengineVideoCollectService;
 import com.backendsys.modules.ai.volcengine.service.VolcengineVideoTaskService;
 import com.backendsys.modules.common.config.security.utils.SecurityUtil;
@@ -55,8 +56,14 @@ public class VolcengineVideoController {
     public Result setCollect(@Validated(VolcengineVideoCollect.Collect.class) @RequestBody VolcengineVideoCollect volcengineVideoCollect) {
         volcengineVideoCollect.setUser_id(SecurityUtil.getUserId());
         return Result.success().put("data", volcengineVideoCollectService.setCollect(volcengineVideoCollect));
-
     }
 
+    @Operation(summary = "重新生成视频")
+    @PreAuthorize("@sr.hasPermission('37.1.5')")
+    @PostMapping("/api/ai/volcegine/video/regenerate")
+    public Result regenerate(@Validated(VolcengineVideoTaskDetail.Regenerate.class) @RequestBody VolcengineVideoTaskDetail volcengineVideoTaskDetail) {
+        volcengineVideoTaskDetail.setUser_id(SecurityUtil.getUserId());
+        return Result.success().put("data", volcengineVideoTaskService.regenerate(volcengineVideoTaskDetail));
+    }
 
 }

+ 5 - 0
src/main/java/com/backendsys/modules/ai/volcengine/entity/VolcengineVideoTaskDetail.java

@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.google.gson.annotations.JsonAdapter;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 
 import java.time.LocalDateTime;
@@ -14,6 +16,9 @@ import java.time.LocalDateTime;
 @Data
 public class VolcengineVideoTaskDetail {
 
+    public static interface Regenerate{}
+
+    @NotNull(message = "id不能为空", groups = { VolcengineVideoTaskDetail.Regenerate.class })
     @TableId(type = IdType.AUTO)
     private Long id;
 

+ 2 - 0
src/main/java/com/backendsys/modules/ai/volcengine/service/VolcengineVideoTaskService.java

@@ -13,4 +13,6 @@ public interface VolcengineVideoTaskService extends IService<VolcengineVideoTask
     VolcengineVideoTaskDetail selectTaskStatus(String volcengineTaskId);
 
     PageEntity selectTaskList(VolcengineVideoTaskDTO dto);
+
+    VolcengineVideoTaskDetail regenerate(VolcengineVideoTaskDetail volcengineVideoTaskDetail);
 }

+ 69 - 0
src/main/java/com/backendsys/modules/ai/volcengine/service/impl/VolcengineVideoTaskServiceImpl.java

@@ -227,4 +227,73 @@ public class VolcengineVideoTaskServiceImpl extends ServiceImpl<VolcengineVideoT
         }
         return new PageInfoResult(list).toEntity();
     }
+
+    @Override
+    public VolcengineVideoTaskDetail regenerate(VolcengineVideoTaskDetail volcengineVideoTaskDetail) {
+
+        VolcengineVideoTaskDetail dataBean = volcengineVideoTaskDetailService.getById(volcengineVideoTaskDetail.getId());
+        if(dataBean == null) {
+            throw new CustException("任务不存在");
+        }
+        VolcengineVideoTask volcengineVideoTask = this.getById(dataBean.getTask_id());
+        if (volcengineVideoTask == null) {
+            throw new CustException("任务不存在");
+        }
+        if(!"failed".equals(dataBean.getStatus())) {
+            throw new CustException("只有失败状态可进行重试");
+        }
+
+        List<CreateContentGenerationTaskRequest.Content> contents = new ArrayList<>();
+
+        // 图生视频功能 构建请求参数
+        // 文本提示词与参数组合
+        if (StringUtils.isNotBlank(volcengineVideoTask.getText())) {
+            StringBuilder text = new StringBuilder(volcengineVideoTask.getText());
+            if(StringUtils.isNotBlank(volcengineVideoTask.getResolution())) {
+                text.append(" --rs ").append(volcengineVideoTask.getResolution());
+            }
+            if(volcengineVideoTask.getDuration() != null) {
+                text.append(" --dur ").append(volcengineVideoTask.getDuration());
+            }
+            if(volcengineVideoTask.getCamerafixed() != null) {
+                if (volcengineVideoTask.getCamerafixed() == 1) {
+                    text.append(" --cf true");
+                } else {
+                    text.append(" --cf false");
+                }
+            }
+
+            contents.add(CreateContentGenerationTaskRequest.Content.builder()
+                    .type("text")
+                    .text(text.toString())
+                    .build());
+        }
+
+        // 首帧图片 (若仅需使用文本生成视频功能,可将此部分内容进行注释处理。)
+        contents.add(CreateContentGenerationTaskRequest.Content.builder()
+                .type("image_url")
+                .imageUrl(CreateContentGenerationTaskRequest.ImageUrl.builder()
+                        .url(volcengineVideoTask.getImg_url())
+                        .build())
+                .build());
+        // 创建视频生成任务
+        CreateContentGenerationTaskRequest createRequest = CreateContentGenerationTaskRequest.builder()
+                .model(volcengineVideoTask.getModel())
+                .content(contents)
+                // todo callback_url 回调地址
+//                .callbackUrl()
+                .build();
+
+        dataBean.setUser_id(volcengineVideoTaskDetail.getUser_id());
+        dataBean.setStatus("queued");
+        // 创建图生视频任务
+        CreateContentGenerationTaskResult taskResult = service.createContentGenerationTask(createRequest);
+
+        dataBean.setVolcengine_task_id(taskResult.getId());
+
+        volcengineVideoTaskDetailService.updateById(dataBean);
+
+        return dataBean;
+
+    }
 }