From 973bd73e9a92adbe7201b5af481d53e3fcd17445 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Wed, 21 Jan 2026 14:41:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(task):=20=E6=B7=BB=E5=8A=A0=E6=B8=B2?= =?UTF-8?q?=E6=9F=93=E9=A2=84=E8=A7=88=E4=BB=BB=E5=8A=A1=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 引入渲染相关DTO和服务类用于预览任务创建 - 移除未使用的消息生产者和通知认证工具依赖 - 在任务创建后异步触发渲染预览任务生成 - 实现虚拟线程异步处理渲染预览任务创建逻辑 - 添加素材映射转换支持视频和图片类型识别 - 实现异常捕获确保主流程不受渲染服务影响 --- .../task/impl/TaskTaskServiceImpl.java | 63 +++++++++++++++++-- 1 file changed, 59 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java b/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java index fbf5104a..55870976 100644 --- a/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java +++ b/src/main/java/com/ycwl/basic/service/task/impl/TaskTaskServiceImpl.java @@ -9,6 +9,10 @@ import com.ycwl.basic.integration.common.manager.DeviceConfigManager; import com.ycwl.basic.integration.common.manager.RenderWorkerConfigManager; import com.ycwl.basic.integration.common.manager.ScenicConfigManager; import com.ycwl.basic.integration.message.service.ZtMessageProducerService; +import com.ycwl.basic.integration.render.dto.job.CreatePreviewRequest; +import com.ycwl.basic.integration.render.dto.job.CreatePreviewResponse; +import com.ycwl.basic.integration.render.dto.job.MaterialDTO; +import com.ycwl.basic.integration.render.service.RenderJobIntegrationService; import com.ycwl.basic.repository.MemberRelationRepository; import com.ycwl.basic.repository.SourceRepository; import com.ycwl.basic.utils.JacksonUtil; @@ -115,13 +119,11 @@ public class TaskTaskServiceImpl implements TaskService { @Autowired private MemberRelationRepository memberRelationRepository; @Autowired - private ZtMessageProducerService ztMessageProducerService; - @Autowired - private NotificationAuthUtils notificationAuthUtils; - @Autowired private WechatSubscribeNotifyTriggerService notifyTriggerService; @Autowired private FaceStatusManager faceStatusManager; + @Autowired + private RenderJobIntegrationService renderJobIntegrationService; private RenderWorkerEntity getWorker(@NonNull WorkerAuthReqVo req) { String accessKey = req.getAccessKey(); @@ -462,6 +464,8 @@ public class TaskTaskServiceImpl implements TaskService { } else { taskMapper.add(taskEntity); } + // 灰度测试:创建渲染预览任务(异步,不影响主流程) + tryCreateRenderPreviewJobAsync(taskEntity.getId(), templateId, face.getScenicId(), faceId, face.getMemberId(), sourcesMap); memberVideoEntity.setTaskId(taskEntity.getId()); } else { TaskRespVO existingTask = list.getFirst(); @@ -667,4 +671,55 @@ public class TaskTaskServiceImpl implements TaskService { public TaskRespVO taskInfo(Long taskId) { return taskMapper.getById(taskId); } + + /** + * 灰度测试:异步创建渲染预览任务 + * 不管zt-render-worker服务返回什么或者报错,都不影响现有流程 + */ + private void tryCreateRenderPreviewJobAsync(Long taskId, Long templateId, Long scenicId, Long faceId, Long memberId, Map> sourcesMap) { + Thread.ofVirtual().start(() -> { + try { + log.info("[灰度测试] 开始创建渲染预览任务, taskId: {}, templateId: {}, scenicId: {}, faceId: {}", + taskId, templateId, scenicId, faceId); + + CreatePreviewRequest request = new CreatePreviewRequest(); + request.setTemplateId(templateId); + request.setScenicId(scenicId); + request.setFaceId(faceId); + request.setMemberId(memberId); + + // 转换素材映射 + Map> materialsBySlot = new java.util.HashMap<>(); + if (sourcesMap != null && !sourcesMap.isEmpty()) { + sourcesMap.forEach((slotKey, sources) -> { + List materials = sources.stream() + .map(source -> { + MaterialDTO material = new MaterialDTO(); + // 优先使用videoUrl,其次使用url + if (StringUtils.isNotBlank(source.getVideoUrl())) { + material.setUrl(source.getVideoUrl()); + material.setType("video"); + } else { + material.setUrl(source.getUrl()); + material.setType(source.getType() != null && source.getType() == 2 ? "image" : "video"); + } + material.setFacePos(source.getPosJson()); + return material; + }) + .toList(); + materialsBySlot.put(slotKey, materials); + }); + } + request.setMaterialsBySlot(materialsBySlot); + + CreatePreviewResponse response = renderJobIntegrationService.createPreview(request); + log.info("[灰度测试] 渲染预览任务创建成功, taskId: {}, renderJobId: {}, playUrl: {}", + taskId, response.getJobId(), response.getPlayUrl()); + } catch (Exception e) { + // 灰度测试:不管返回什么或者报错,都不影响现有流程 + log.warn("[灰度测试] 渲染预览任务创建失败,不影响主流程, taskId: {}, templateId: {}, error: {}", + taskId, templateId, e.getMessage()); + } + }); + } }