From 654a496478ae9fab9273a4e64bdc4ba967c39ab2 Mon Sep 17 00:00:00 2001 From: Leo Date: Sat, 8 Nov 2025 15:42:19 +0800 Subject: [PATCH] 1 --- .../service/impl/BatchPublishServiceImpl.java | 57 +++++++++++++------ 1 file changed, 41 insertions(+), 16 deletions(-) diff --git a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/BatchPublishServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/BatchPublishServiceImpl.java index 9cd8026..8f78c86 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/BatchPublishServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/jarvis/service/impl/BatchPublishServiceImpl.java @@ -1006,32 +1006,57 @@ private String cleanForbiddenPhrases(String text) { throw new RuntimeException("任务不存在: " + taskId); } - // 仅重试 待发布(0)/发布失败(3) 的明细 List allItems = itemMapper.selectBatchPublishItemByTaskId(taskId); - List itemsToRetry = new ArrayList<>(); + + // 分类处理:需要重新发布的 和 需要重新上架的 + List itemsToRepublish = new ArrayList<>(); // 待发布(0)/发布失败(3) + List itemsToRelist = new ArrayList<>(); // 发布成功(2)/上架失败(6) + for (BatchPublishItem it : allItems) { - if (it.getStatus() != null && (it.getStatus() == 0 || it.getStatus() == 3)) { - itemsToRetry.add(it); + if (it.getStatus() != null) { + if (it.getStatus() == 0 || it.getStatus() == 3) { + // 待发布或发布失败,需要重新发布 + itemsToRepublish.add(it); + } else if (it.getStatus() == 2 || it.getStatus() == 6) { + // 发布成功但未上架,或上架失败,需要重新上架 + itemsToRelist.add(it); + } } } - if (itemsToRetry.isEmpty()) { - log.info("任务{} 无需重试,未发现待发布/失败的明细", taskId); + if (itemsToRepublish.isEmpty() && itemsToRelist.isEmpty()) { + log.info("任务{} 无需重试,未发现待处理的明细", taskId); return; } - // 构造最小请求对象,仅提供通用参数用于发布 - BatchPublishRequest req = new BatchPublishRequest(); - try { - BatchPublishRequest.CommonParams commonParams = JSON.parseObject( - task.getCommonParams(), BatchPublishRequest.CommonParams.class); - req.setCommonParams(commonParams); - } catch (Exception e) { - log.warn("解析任务通用参数失败,将使用默认参数: {}", task.getCommonParams(), e); + // 处理需要重新发布的商品 + if (!itemsToRepublish.isEmpty()) { + BatchPublishRequest req = new BatchPublishRequest(); + try { + BatchPublishRequest.CommonParams commonParams = JSON.parseObject( + task.getCommonParams(), BatchPublishRequest.CommonParams.class); + req.setCommonParams(commonParams); + } catch (Exception e) { + log.warn("解析任务通用参数失败,将使用默认参数: {}", task.getCommonParams(), e); + } + log.info("开始重新发布任务{} 的 {} 条明细", taskId, itemsToRepublish.size()); + self.asyncBatchPublish(taskId, itemsToRepublish, req); } - log.info("开始重试任务{} 的 {} 条明细", taskId, itemsToRetry.size()); - self.asyncBatchPublish(taskId, itemsToRetry, req); + // 处理需要重新上架的商品(直接上架,不需要重新发布) + if (!itemsToRelist.isEmpty()) { + log.info("开始重新上架任务{} 的 {} 条明细", taskId, itemsToRelist.size()); + for (BatchPublishItem item : itemsToRelist) { + // 重置状态为发布成功,准备上架 + item.setStatus(2); + item.setErrorMessage(null); + itemMapper.updateBatchPublishItem(item); + appendItemLogSafe(item.getId(), "【重试】准备重新上架"); + + // 立即调度上架(延迟1秒,避免过快) + schedulePublish(item.getId(), 1); + } + } } }