From f852927116abb92fedc2b0e8a3849f94cc54aaa2 Mon Sep 17 00:00:00 2001 From: xupei Date: Fri, 11 Jul 2025 11:07:27 +0800 Subject: [PATCH] =?UTF-8?q?BUGFIX:=201=E3=80=81=E7=A7=AF=E5=88=86=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E6=89=A3=E9=99=A4=202=E3=80=81pose=20transfer?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=BC=80=E5=A7=8B=E6=97=B6=E9=97=B4=EF=BC=8C?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E9=A1=B9=E7=9B=AEid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../da/common/RabbitMQ/GenerateConsumer.java | 6 ++- .../com/ai/da/service/GenerateService.java | 2 + .../ai/da/service/impl/DesignServiceImpl.java | 19 ++++---- .../da/service/impl/GenerateServiceImpl.java | 44 ++++++++++++++----- .../impl/UserLikeGroupServiceImpl.java | 2 +- 5 files changed, 50 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/ai/da/common/RabbitMQ/GenerateConsumer.java b/src/main/java/com/ai/da/common/RabbitMQ/GenerateConsumer.java index fb119b1f..f5c7b9ba 100644 --- a/src/main/java/com/ai/da/common/RabbitMQ/GenerateConsumer.java +++ b/src/main/java/com/ai/da/common/RabbitMQ/GenerateConsumer.java @@ -505,14 +505,16 @@ public class GenerateConsumer { try { log.info("task_id : {} start ", generateResult.get("task_id")); if (!StringUtils.isEmpty(generateResult.getString("progress"))) { + String progress = generateResult.getString("progress"); + String taskId = generateResult.getString("task_id"); + generateService.processPoseTransformResultBatch(progress, taskId); + JSONArray result = generateResult.getJSONArray("result"); if (!StringUtils.isEmpty(result)) { JSONObject jsonObject = result.getJSONObject(0); String gifUrl = jsonObject.getString("gif_url"); - String taskId = generateResult.getString("task_id"); String videoUrl = jsonObject.getString("video_url"); String imageUrl = jsonObject.getString("first_image_url"); - String progress = generateResult.getString("progress"); generateService.processPoseTransformResultBatch(taskId, gifUrl, videoUrl, imageUrl, progress); } } else { diff --git a/src/main/java/com/ai/da/service/GenerateService.java b/src/main/java/com/ai/da/service/GenerateService.java index e01bd8c1..8fe5f644 100644 --- a/src/main/java/com/ai/da/service/GenerateService.java +++ b/src/main/java/com/ai/da/service/GenerateService.java @@ -70,6 +70,8 @@ public interface GenerateService extends IService { void processPoseTransformResultBatch(String taskId, String gifUrl, String videoUrl, String imageUrl, String progress); + void processPoseTransformResultBatch(String taskId, String progress); + String createAsyncTask(GenerateThroughImageTextDTO generateThroughImageTextDTO); GenerateResultVO getAsyncTaskResult(String taskId); diff --git a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java index d955e6d0..0dc3b721 100644 --- a/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/DesignServiceImpl.java @@ -2058,7 +2058,7 @@ public class DesignServiceImpl extends ServiceImpl impleme // 添加需要扣除的积分到预扣除区 creditsService.addRecordToCreditsDeduction(userHolder.getId(), batchTaskId, CreditsEventsEnum.TO_PRODUCT_IMAGE, cloudTaskDTO.getNums()); // 预插入数据到积分变更表 - creditsService.preInsert(userHolder.getId(), CreditsEventsEnum.TO_PRODUCT_IMAGE.getValue(), batchTaskId, true, null,cloudTaskDTO.getNums() ); + creditsService.preInsert(userHolder.getId(), CreditsEventsEnum.TO_PRODUCT_IMAGE.getName(), batchTaskId, true, null,cloudTaskDTO.getNums() ); }else { if (StringUtils.isEmpty(prompt)) { sb.append(",high quality clothing details,8K realistic,HDR"); @@ -2102,7 +2102,7 @@ public class DesignServiceImpl extends ServiceImpl impleme // 添加需要扣除的积分到预扣除区 creditsService.addRecordToCreditsDeduction(userHolder.getId(), batchTaskId, CreditsEventsEnum.TO_PRODUCT_IMAGE, cloudTaskDTO.getNums()); // 预插入数据到积分变更表 - creditsService.preInsert(userHolder.getId(), CreditsEventsEnum.TO_PRODUCT_IMAGE.getValue(), batchTaskId, true, null,cloudTaskDTO.getNums() ); + creditsService.preInsert(userHolder.getId(), CreditsEventsEnum.TO_PRODUCT_IMAGE.getName(), batchTaskId, true, null,cloudTaskDTO.getNums() ); } sb = new StringBuilder("The best quality, masterpiece, real image."); @@ -2230,7 +2230,7 @@ public class DesignServiceImpl extends ServiceImpl impleme // 添加需要扣除的积分到预扣除区 creditsService.addRecordToCreditsDeduction(userHolder.getId(), batchTaskId, CreditsEventsEnum.RELIGHT, cloudTaskDTO.getNums()); // 预插入数据到积分变更表 - creditsService.preInsert(userHolder.getId(), CreditsEventsEnum.RELIGHT.getValue(), batchTaskId, true, null,cloudTaskDTO.getNums() ); + creditsService.preInsert(userHolder.getId(), CreditsEventsEnum.RELIGHT.getName(), batchTaskId, true, null,cloudTaskDTO.getNums() ); } @@ -2275,7 +2275,7 @@ public class DesignServiceImpl extends ServiceImpl impleme // 添加需要扣除的积分到预扣除区 creditsService.addRecordToCreditsDeduction(userHolder.getId(), batchTaskId, CreditsEventsEnum.RELIGHT, cloudTaskDTO.getNums()); // 预插入数据到积分变更表 - creditsService.preInsert(userHolder.getId(), CreditsEventsEnum.RELIGHT.getValue(), batchTaskId, true, null,cloudTaskDTO.getNums() ); + creditsService.preInsert(userHolder.getId(), CreditsEventsEnum.RELIGHT.getName(), batchTaskId, true, null,cloudTaskDTO.getNums() ); } } return batchTaskId; @@ -2288,7 +2288,7 @@ public class DesignServiceImpl extends ServiceImpl impleme Long projectId = cloudTaskDTO.getProjectId(); AuthPrincipalVo userHolder = UserContext.getUserHolder(); - if (null == projectId) { + if (Objects.isNull(projectId)) { Project project = new Project(); project.setName(DesignProcess.POSE_TRANSFER.getValue() + "_" + cloudTaskDTO.getName()); project.setProcess(DesignProcess.POSE_TRANSFER.name()); @@ -2308,12 +2308,13 @@ public class DesignServiceImpl extends ServiceImpl impleme } } Long accountId = UserContext.getUserHolder().getId(); - String taskBatchId = UUID.randomUUID().toString() + "-" + accountId; + String taskBatchId = UUID.randomUUID() + "-" + accountId; CloudTask cloudTask = CopyUtil.copyObject(cloudTaskDTO, CloudTask.class); cloudTask.setProjectId(cloudTask.getProjectId()); cloudTask.setTaskId(taskBatchId); LocalDateTime now = LocalDateTime.now(); + cloudTask.setProjectId(projectId); cloudTask.setCreateTime(now); cloudTask.setUpdateTime(now); cloudTask.setStatus(0); @@ -2593,7 +2594,7 @@ public class DesignServiceImpl extends ServiceImpl impleme qw.lambda().eq(CloudTask::getTaskId, taskId); List cloudTaskList = cloudTaskMapper.selectList(qw); if (((String) progress).startsWith("0/")) { - if (CollectionUtil.isNotEmpty(cloudTaskList) && Objects.nonNull(cloudTaskList.get(0).getStartTime())) { + if (CollectionUtil.isNotEmpty(cloudTaskList) && Objects.isNull(cloudTaskList.get(0).getStartTime())) { CloudTask cloudTask = cloudTaskList.get(0); cloudTask.setStartTime(LocalDateTime.now()); cloudTask.setUpdateTime(LocalDateTime.now()); @@ -2801,8 +2802,8 @@ public class DesignServiceImpl extends ServiceImpl impleme .divide(total, 4, RoundingMode.HALF_UP) // 先计算小数百分比,保留4位防止精度问题 .multiply(BigDecimal.valueOf(100)) // 乘以100变成百分比 .setScale(2, RoundingMode.HALF_UP); // 最终保留2位小数 - - cloudTaskVO.setProcess(percent.toPlainString() + "%"); + String percentage = percent.compareTo(new BigDecimal("100")) > 0 ? "100.00" : percent.toPlainString(); + cloudTaskVO.setProcess(percentage + "%"); } return cloudTaskVO; } diff --git a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java index c7a72d96..bfb0a33a 100644 --- a/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java @@ -48,6 +48,7 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.dao.DuplicateKeyException; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StringUtils; import javax.annotation.Resource; import javax.imageio.ImageIO; @@ -1603,11 +1604,7 @@ public class GenerateServiceImpl extends ServiceImpl i QueryWrapper cloudTaskQueryWrapper = new QueryWrapper<>(); cloudTaskQueryWrapper.lambda().eq(CloudTask::getTaskId, taskIdBatch); CloudTask cloudTask = cloudTaskMapper.selectOne(cloudTaskQueryWrapper); - if (Objects.nonNull(cloudTask) && Objects.nonNull(cloudTask.getStartTime())){ - cloudTask.setStartTime(LocalDateTime.now()); - cloudTask.setUpdateTime(LocalDateTime.now()); - cloudTaskMapper.updateById(cloudTask); - }else if (Objects.nonNull(cloudTask)){ + if (Objects.nonNull(cloudTask)){ cloudTask.setUpdateTime(LocalDateTime.now()); cloudTaskMapper.updateById(cloudTask); } @@ -1617,10 +1614,6 @@ public class GenerateServiceImpl extends ServiceImpl i // }else { // cloudTask.setCompletedNum(cloudTask.getCompletedNum() + 1); // } -// if (progress.equals("OK")) { -// cloudTask.setStatus(1); -// cloudTask.setCompletedNum(cloudTask.getNums()); -// } // cloudTaskMapper.updateById(cloudTask); // } cloudTaskMapper.increaseCompletedNum(taskIdBatch); @@ -1632,13 +1625,42 @@ public class GenerateServiceImpl extends ServiceImpl i // 2、更新redis redisUtil.addToString(key, new Gson().toJson(poseTransformationVO), CommonConstant.GENERATE_RESULT_EXPIRE_TIME); - // 3、执行积分扣除 + /*// 3、执行积分扣除 String accountId = taskId.substring(taskId.lastIndexOf("-") + 1); String uuid = taskId.substring(0, taskId.lastIndexOf("-")); Boolean flag = creditsService.taskCreditsDeduction(Long.parseLong(accountId), taskIdBatch); - if (flag) creditsService.updateChangedCredits(accountId, taskIdBatch); + if (flag) creditsService.updateChangedCredits(accountId, taskIdBatch);*/ } + @Transactional + public void processPoseTransformResultBatch(String progress, String taskId) { + // 1、存储模型返回的数据 + PoseTransformation poseTransformation; + QueryWrapper qw = new QueryWrapper<>(); + qw.eq("unique_id", taskId); + List poseTransformations = poseTransformationMapper.selectList(qw); + log.info("poseTransformations : {}", poseTransformations); + if (poseTransformations != null && poseTransformations.size() > 1) { + log.warn("通过taskId {} 查询到的PoseTransformation的结果不止一条", taskId); + } else if (poseTransformations == null || poseTransformations.isEmpty()) { + return; + } + poseTransformation = poseTransformations.get(0); + String taskIdBatch = poseTransformation.getTaskIdBatch(); + log.info("progress:{}", progress); + log.info("taskIdBatch:{}", taskIdBatch); + if (progress.equals("OK")) { + if (!StringUtils.isEmpty(taskIdBatch)) { + userLikeGroupService.completeTask(taskIdBatch); + } + }else if (progress.startsWith("0/")) { + if (!StringUtils.isEmpty(taskIdBatch)) { + userLikeGroupService.startTask(taskIdBatch); + } + } + } + + /** * 万象专业版 * 1、MoodBoard t2i diff --git a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java index 98bab6ec..da957ce3 100644 --- a/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/UserLikeGroupServiceImpl.java @@ -2920,7 +2920,7 @@ public class UserLikeGroupServiceImpl extends ServiceImpl