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()); + } + }); + } }