From f74685c4d1116a9c8b419e7edb1227500fa2544c Mon Sep 17 00:00:00 2001 From: xupei Date: Mon, 29 Dec 2025 16:19:42 +0800 Subject: [PATCH 1/7] =?UTF-8?q?BUGFIX:=20=E5=88=9B=E5=BB=BA=E8=B6=85?= =?UTF-8?q?=E8=BF=873=E5=88=86=E9=92=9F=E7=9A=84=E6=90=AD=E9=85=8D?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E8=AE=BE=E7=BD=AE=E4=B8=BA=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../lanecarford/common/enums/StatusEnum.java | 5 +- .../lanecarford/dto/OutfitCallbackDTO.java | 2 +- .../service/impl/StyleServiceImpl.java | 126 ++++++++++++++---- .../aida/lanecarford/vo/OutfitResultVO.java | 2 + 4 files changed, 104 insertions(+), 31 deletions(-) diff --git a/src/main/java/com/aida/lanecarford/common/enums/StatusEnum.java b/src/main/java/com/aida/lanecarford/common/enums/StatusEnum.java index 2582866..f5efc29 100644 --- a/src/main/java/com/aida/lanecarford/common/enums/StatusEnum.java +++ b/src/main/java/com/aida/lanecarford/common/enums/StatusEnum.java @@ -21,7 +21,10 @@ public enum StatusEnum { FAILED(2), @Schema(description = "运行中") - RUNNING(3); + RUNNING(3), + + @Schema(description = "重试中") + RETRYING(4); private int code; diff --git a/src/main/java/com/aida/lanecarford/dto/OutfitCallbackDTO.java b/src/main/java/com/aida/lanecarford/dto/OutfitCallbackDTO.java index 8df956b..f59056f 100644 --- a/src/main/java/com/aida/lanecarford/dto/OutfitCallbackDTO.java +++ b/src/main/java/com/aida/lanecarford/dto/OutfitCallbackDTO.java @@ -10,7 +10,7 @@ public class OutfitCallbackDTO { private String outfit_id; - // 取值范围:ok || failed || stop + // 取值范围:ok || failed || stop || retrying private String status; private String path; diff --git a/src/main/java/com/aida/lanecarford/service/impl/StyleServiceImpl.java b/src/main/java/com/aida/lanecarford/service/impl/StyleServiceImpl.java index b32c298..7abde60 100644 --- a/src/main/java/com/aida/lanecarford/service/impl/StyleServiceImpl.java +++ b/src/main/java/com/aida/lanecarford/service/impl/StyleServiceImpl.java @@ -101,6 +101,7 @@ public class StyleServiceImpl extends ServiceImpl implements String key = RedisURIConstants.outfitResultCache + requestId; OutfitResultVO outfitResultVO = new OutfitResultVO(style.getId(), requestId, StatusEnum.PENDING.name()); + outfitResultVO.setCreateTimeStamp(System.currentTimeMillis()); cacheUtil.setCache(key, outfitResultVO, RedisURIConstants.verifyCodeTimeout); } return requestIds; @@ -133,40 +134,60 @@ public class StyleServiceImpl extends ServiceImpl implements return; } - if ("ok".equals(callbackDTO.getStatus()) || "stop".equals(callbackDTO.getStatus())) { - // 1. 判断path是否为空,是 -> 不做任何处理 - if (StringUtil.isNullOrEmpty(callbackDTO.getPath())) { - return; + // 1. 判断path是否为空,是 -> 不做任何处理 + if (!"retrying".equals(callbackDTO.getStatus()) + && !"failed".equals(callbackDTO.getStatus()) + && StringUtil.isNullOrEmpty(callbackDTO.getPath())) { + return; + } + + if (StringUtil.isNullOrEmpty(callbackDTO.getOutfit_id())) { + log.error("回调参数中,outfit_id为空"); + return; + } + + String requestId = callbackDTO.getOutfit_id(); + + // 2. 获取outfit_id,查询数据库 + String key = RedisURIConstants.outfitResultCache + requestId; + Object outfitResult = cacheUtil.getCache(key); + if (Objects.isNull(outfitResult)) { + log.error("未知搭配请求"); + return; + } + + // 3.更新path, items, 状态 + // 由于数据变化较频繁,考虑存到redis + if (outfitResult instanceof OutfitResultVO) { + ((OutfitResultVO) outfitResult).setPath(minioUtil.getPresignedUrl(callbackDTO.getPath(), CommonConstants.MINIO_PATH_TIMEOUT)); + String status; + switch(callbackDTO.getStatus()) { + case "ok": + status = StatusEnum.RUNNING.name(); + break; + case "stop": + status = StatusEnum.SUCCEEDED.name(); + break; + case "failed": + status = StatusEnum.FAILED.name(); + break; + case "retrying": + status = StatusEnum.PENDING.name(); + ((OutfitResultVO) outfitResult).setCreateTimeStamp(System.currentTimeMillis()); + ((OutfitResultVO) outfitResult).setPath(null); + break; + default: + log.error("outfit_id为{},回调状态未知{}", requestId, callbackDTO.getStatus()); + status = "failed"; } - if (StringUtil.isNullOrEmpty(callbackDTO.getOutfit_id())) { - log.error("回调参数中,outfit_id为空"); - return; - } - - String requestId = callbackDTO.getOutfit_id(); - - // 2. 获取outfit_id,查询数据库 - String key = RedisURIConstants.outfitResultCache + requestId; - Object outfitResult = cacheUtil.getCache(key); - if (Objects.isNull(outfitResult)) { - log.error("未知搭配请求"); - return; - } - - // 3.更新path, items, 状态 - // 由于数据变化较频繁,考虑存到redis - if (outfitResult instanceof OutfitResultVO) { - ((OutfitResultVO) outfitResult).setPath(minioUtil.getPresignedUrl(callbackDTO.getPath(), CommonConstants.MINIO_PATH_TIMEOUT)); - String status = "ok".equals(callbackDTO.getStatus()) ? StatusEnum.RUNNING.name() : StatusEnum.SUCCEEDED.name(); - ((OutfitResultVO) outfitResult).setStatus(status); - cacheUtil.setCache(key, outfitResult, RedisURIConstants.outfitResultTimeout); - } + ((OutfitResultVO) outfitResult).setStatus(status); + cacheUtil.setCache(key, outfitResult, RedisURIConstants.outfitResultTimeout); } // 生成结束或失败时更新数据库 if ("stop".equals(callbackDTO.getStatus()) || "failed".equals(callbackDTO.getStatus())) { - String requestId = callbackDTO.getOutfit_id(); +// String requestId = callbackDTO.getOutfit_id(); LambdaQueryWrapper