From 45cff6ab27419f4e4dff202b32d221147b0e58cd Mon Sep 17 00:00:00 2001 From: old burden Date: Mon, 30 Mar 2026 13:25:52 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20bug=E4=BF=AE=E6=94=B9=20result=20?= =?UTF-8?q?=E5=86=99=E6=88=90=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/ruoyi/api/PortalVideoController.java | 31 +++++++++++++++++-- .../com/ruoyi/ai/mapper/AiOrderMapper.java | 3 ++ .../com/ruoyi/ai/service/IAiOrderService.java | 2 ++ .../ai/service/impl/AiOrderServiceImpl.java | 5 +++ .../resources/mapper/system/AiOrderMapper.xml | 15 +++++++++ 5 files changed, 54 insertions(+), 2 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/PortalVideoController.java b/ruoyi-admin/src/main/java/com/ruoyi/api/PortalVideoController.java index a5d26fd..3cdb24b 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/PortalVideoController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/PortalVideoController.java @@ -2,6 +2,7 @@ package com.ruoyi.api; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.ruoyi.ai.domain.AiOrder; @@ -153,6 +154,31 @@ public class PortalVideoController extends BaseController { } } + /** 写入 video_params.volcTaskId,任务成功后 result 会改为成品 URL,仍应用此 id 校验归属与轮询 */ + private void mergeVolcTaskIdIntoVideoParams(AiOrder aiOrder, String volcTaskId) { + if (StringUtils.isEmpty(volcTaskId)) { + return; + } + try { + ObjectNode node; + if (StringUtils.isNotEmpty(aiOrder.getVideoParams())) { + JsonNode existing = OM.readTree(aiOrder.getVideoParams()); + if (existing instanceof ObjectNode) { + node = (ObjectNode) existing; + } else { + node = OM.createObjectNode(); + node.set("snapshotBeforeVolcId", existing); + } + } else { + node = OM.createObjectNode(); + } + node.put("volcTaskId", volcTaskId); + aiOrder.setVideoParams(OM.writeValueAsString(node)); + } catch (Exception e) { + aiOrder.setVideoParams("{\"volcTaskId\":\"" + volcTaskId.replace("\"", "") + "\"}"); + } + } + private AjaxResult submitOrderAndCreate(PortalVideoGenRequest req, String mode, ByteBodyReq byteBodyReq) { String functionType = resolveFunctionType(req); AiOrder aiOrder = aiOrderService.getAiOrder(functionType); @@ -170,6 +196,7 @@ public class PortalVideoController extends BaseController { aiOrderService.orderFailure(aiOrder); return AjaxResult.error(-2, "generation failed, balance has been refunded"); } + mergeVolcTaskIdIntoVideoParams(aiOrder, id); aiOrder.setResult(id); aiOrderService.orderSuccess(aiOrder); return AjaxResult.success(byteBodyRes); @@ -357,7 +384,7 @@ public class PortalVideoController extends BaseController { @ApiOperation("查询单个视频生成任务(火山)") public AjaxResult getVolcTask(@PathVariable String taskId) throws Exception { Long uid = SecurityUtils.getAiUserId(); - AiOrder owned = aiOrderService.getAiOrderByResult(taskId); + AiOrder owned = aiOrderService.getAiOrderByPortalVideoTask(taskId); if (owned == null || !uid.equals(owned.getUserId())) { return AjaxResult.error("无权查看该任务"); } @@ -383,7 +410,7 @@ public class PortalVideoController extends BaseController { @ApiOperation("删除或取消视频生成任务") public AjaxResult deleteOrCancelTask(@PathVariable String taskId) throws Exception { Long uid = SecurityUtils.getAiUserId(); - AiOrder owned = aiOrderService.getAiOrderByResult(taskId); + AiOrder owned = aiOrderService.getAiOrderByPortalVideoTask(taskId); if (owned == null || !uid.equals(owned.getUserId())) { return AjaxResult.error("无权操作该任务"); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/ai/mapper/AiOrderMapper.java b/ruoyi-system/src/main/java/com/ruoyi/ai/mapper/AiOrderMapper.java index 44e98be..cafa00d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/ai/mapper/AiOrderMapper.java +++ b/ruoyi-system/src/main/java/com/ruoyi/ai/mapper/AiOrderMapper.java @@ -22,5 +22,8 @@ public interface AiOrderMapper extends BaseMapper { AiOrder getAiOrderByResult(@Param("result") String result); + /** 门户视频:按火山任务 id 查单(result 可能已被替换为成品 URL,故兼查 video_params.volcTaskId) */ + AiOrder getAiOrderByPortalVideoTask(@Param("taskId") String taskId); + BigDecimal getSumAmountByUserId(@Param("userId") String userId); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/ai/service/IAiOrderService.java b/ruoyi-system/src/main/java/com/ruoyi/ai/service/IAiOrderService.java index 641c287..1cbe6cd 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/ai/service/IAiOrderService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/ai/service/IAiOrderService.java @@ -79,5 +79,7 @@ public interface IAiOrderService { AiOrder getAiOrderByResult(String result); + AiOrder getAiOrderByPortalVideoTask(String taskId); + BigDecimal getSumAmountByUserId(String userId); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/ai/service/impl/AiOrderServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/ai/service/impl/AiOrderServiceImpl.java index 5db17f2..9e5227b 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/ai/service/impl/AiOrderServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/ai/service/impl/AiOrderServiceImpl.java @@ -203,6 +203,11 @@ public class AiOrderServiceImpl implements IAiOrderService { return aiOrderMapper.selectOne(query); } + @Override + public AiOrder getAiOrderByPortalVideoTask(String taskId) { + return aiOrderMapper.getAiOrderByPortalVideoTask(taskId); + } + public int getChangerType(String aiType) { switch (aiType) { case "11": diff --git a/ruoyi-system/src/main/resources/mapper/system/AiOrderMapper.xml b/ruoyi-system/src/main/resources/mapper/system/AiOrderMapper.xml index 15280e7..1951a01 100644 --- a/ruoyi-system/src/main/resources/mapper/system/AiOrderMapper.xml +++ b/ruoyi-system/src/main/resources/mapper/system/AiOrderMapper.xml @@ -69,6 +69,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where result = #{result} + +