This commit is contained in:
Leo
2025-11-08 15:42:19 +08:00
parent 79082adf8c
commit 654a496478

View File

@@ -1006,32 +1006,57 @@ private String cleanForbiddenPhrases(String text) {
throw new RuntimeException("任务不存在: " + taskId);
}
// 仅重试 待发布(0)/发布失败(3) 的明细
List<BatchPublishItem> allItems = itemMapper.selectBatchPublishItemByTaskId(taskId);
List<BatchPublishItem> itemsToRetry = new ArrayList<>();
// 分类处理:需要重新发布的 和 需要重新上架的
List<BatchPublishItem> itemsToRepublish = new ArrayList<>(); // 待发布(0)/发布失败(3)
List<BatchPublishItem> 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);
}
}
}
}