diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/HumanManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/HumanManageServiceImpl.java index 3949422a..0175f57c 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/HumanManageServiceImpl.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/HumanManageServiceImpl.java @@ -50,45 +50,51 @@ public class HumanManageServiceImpl implements HumanManageService { } private void generateSilent(Human human, File imageFile) throws Exception { - HumanGenerateDTO silentDTO; - try { - String post = HttpUtil.post(humanBaseUrl + silent, Map.of("image", imageFile)); - silentDTO = JSONUtil.toBean(post, HumanGenerateDTO.class); - } catch (Exception e) { - throw new BusinessException("生成数字人静态视频异常"); - } - // 保存静态视频 - if (silentDTO.getCode() == 200) { - if (StrUtil.isNotBlank(silentDTO.getVideo())) { - // 如果已经生成了视频,那么直接拿到这个视频 - FileResource fileResource = convertBase64ToFile("silent", FileUtil.getName(imageFile), silentDTO.getVideo()); - human.setSilentVideoFileId(fileResource.getId()); - + if (StrUtil.isAllBlank(human.getSilentVideoFileId(), human.getSilentTaskUid())) { + HumanGenerateDTO silentDTO; + try { + String post = HttpUtil.post(humanBaseUrl + silent, Map.of("image", imageFile)); + silentDTO = JSONUtil.toBean(post, HumanGenerateDTO.class); + } catch (Exception e) { + throw new BusinessException("生成数字人静态视频异常"); + } + // 保存静态视频 + if (silentDTO.getCode() == 200) { + if (StrUtil.isNotBlank(silentDTO.getVideo())) { + // 如果已经生成了视频,那么直接拿到这个视频 + FileResource fileResource = convertBase64ToFile("silent", FileUtil.getName(imageFile), silentDTO.getVideo()); + human.setSilentVideoFileId(fileResource.getId()); + + } + human.setSilentTaskUid(silentDTO.getUid()); } - human.setSilentTaskUid(silentDTO.getUid()); } + } private void generateDynamic(Human human, File imageFile) throws Exception { - HumanGenerateDTO dynamicDTO; - try { - String post = HttpUtil.post(humanBaseUrl + dynamic, Map.of("image", imageFile)); - dynamicDTO = JSONUtil.toBean(post, HumanGenerateDTO.class); - } catch (Exception e) { - throw new BusinessException("生成数字人动态视频异常"); - } + if (StrUtil.isAllNotBlank(human.getDynamicVideoFileId(), human.getDynamicTaskUid())) { + HumanGenerateDTO dynamicDTO; + try { + String post = HttpUtil.post(humanBaseUrl + dynamic, Map.of("image", imageFile)); + dynamicDTO = JSONUtil.toBean(post, HumanGenerateDTO.class); + } catch (Exception e) { + throw new BusinessException("生成数字人动态视频异常"); + } - if (dynamicDTO.getCode() == 200) { - if (StrUtil.isNotBlank(dynamicDTO.getVideo())) { - // 如果已经生成了视频,那么直接拿到这个视频 - FileResource fileResource = convertBase64ToFile("dynamic", FileUtil.getName(imageFile), dynamicDTO.getVideo()); - human.setDynamicVideoFileId(fileResource.getId()); + if (dynamicDTO.getCode() == 200) { + if (StrUtil.isNotBlank(dynamicDTO.getVideo())) { + // 如果已经生成了视频,那么直接拿到这个视频 + FileResource fileResource = convertBase64ToFile("dynamic", FileUtil.getName(imageFile), dynamicDTO.getVideo()); + human.setDynamicVideoFileId(fileResource.getId()); + } + human.setDynamicTaskUid(dynamicDTO.getUid()); } - human.setDynamicTaskUid(dynamicDTO.getUid()); } + } private FileResource convertBase64ToFile(String prefixName, String imageFileName, String base64) throws Exception { diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/task/HumanManageTask.java b/virtual-patient-manage/src/main/java/com/supervision/manage/task/HumanManageTask.java index 50b2b216..64feabb8 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/task/HumanManageTask.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/task/HumanManageTask.java @@ -7,6 +7,7 @@ import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONUtil; import com.supervision.manage.dto.HumanStatusDTO; import com.supervision.manage.service.FileManageService; +import com.supervision.manage.service.HumanManageService; import com.supervision.model.FileResource; import com.supervision.model.Human; import com.supervision.service.HumanService; @@ -27,16 +28,18 @@ public class HumanManageTask { private final HumanService humanService; private final FileManageService fileManageService; + private final HumanManageService humanManageService; @Value("${humanGenerate.baseUrl}") private String humanBaseUrl; @Value("${humanGenerate.status}") private String status; @Scheduled(fixedDelay = 1000 * 60 * 2) - public void refreshHumanUid() { + public void refreshHumanUid() throws Exception { log.info("定时任务检查数字人形象"); List humanList = humanService.lambdaQuery().eq(Human::getStatus, 2).list(); for (Human human : humanList) { + silent: if (StrUtil.isBlank(human.getSilentVideoFileId())) { if (StrUtil.isNotBlank(human.getSilentTaskUid())) { @@ -57,14 +60,11 @@ public class HumanManageTask { FileResource fileResource = convertBase64ToFile("silent", human.getImageName(), silentDTO.getVideo()); // 为最后更新状态准备 human.setSilentVideoFileId(fileResource.getId()); - humanService.lambdaUpdate().set(Human::getSilentVideoFileId, fileResource.getId()).eq(Human::getId, human.getId()).update(); + humanService.updateById(human); } } catch (Exception e) { log.error("数字人保存静默视频失败", e); } - } else { - // TODO 如果没有UID,这时就需要重新获取图片,重新生成了 - } } @@ -88,13 +88,16 @@ public class HumanManageTask { FileResource fileResource = convertBase64ToFile("dynamic", human.getImageName(), dynamicDTO.getVideo()); // 为最后更新状态准备 human.setDynamicVideoFileId(fileResource.getId()); - humanService.lambdaUpdate().set(Human::getDynamicVideoFileId, fileResource.getId()).eq(Human::getId, human.getId()).update(); + humanService.updateById(human); } } catch (Exception e) { log.error("数字人保存动态视频失败", e); } } } + // 这里考虑一种异常情况,就是提交失败了.重新提交 + humanManageService.generateHuman(human.getId()); + // 如果两者都走完了,校验如果全部有值,说明就完成了 if (StrUtil.isAllNotBlank(human.getSilentVideoFileId(), human.getDynamicVideoFileId())) { humanService.lambdaUpdate().set(Human::getStatus, 1).eq(Human::getId, human.getId()).update();