diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/deletebrand/service/DeleteBrandRunService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/deletebrand/service/DeleteBrandRunService.java index a562275..93da7b3 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/deletebrand/service/DeleteBrandRunService.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/deletebrand/service/DeleteBrandRunService.java @@ -98,6 +98,7 @@ public class DeleteBrandRunService { List items = new ArrayList<>(); int parsedSuccessCount = 0; int parsedFailedCount = 0; + int processableFileCount = 0; Map parsedPayloadByFileIdentity = new LinkedHashMap<>(); Map storeMatchByShopName = new LinkedHashMap<>(); @@ -143,15 +144,18 @@ public class DeleteBrandRunService { } } - String fileIdentity = resolveFileIdentity(sourceFile); - DeleteBrandParsedFileCacheDto cacheDto = new DeleteBrandParsedFileCacheDto(); - cacheDto.setFileKey(sourceFile.getFileKey()); - cacheDto.setSourceFilename(sourceFile.getOriginalFilename()); - cacheDto.setShopName(item.getShopName()); - cacheDto.setTotalRows(parsed.totalRows()); - cacheDto.setCountries(parsed.countries()); - cacheDto.setPreviewRows(parsed.previewRows()); - parsedPayloadByFileIdentity.put(fileIdentity, cacheDto); + if (item.isMatched()) { + String fileIdentity = resolveFileIdentity(sourceFile); + DeleteBrandParsedFileCacheDto cacheDto = new DeleteBrandParsedFileCacheDto(); + cacheDto.setFileKey(sourceFile.getFileKey()); + cacheDto.setSourceFilename(sourceFile.getOriginalFilename()); + cacheDto.setShopName(item.getShopName()); + cacheDto.setTotalRows(parsed.totalRows()); + cacheDto.setCountries(parsed.countries()); + cacheDto.setPreviewRows(parsed.previewRows()); + parsedPayloadByFileIdentity.put(fileIdentity, cacheDto); + processableFileCount++; + } item.setSuccess(true); parsedSuccessCount++; @@ -195,8 +199,8 @@ public class DeleteBrandRunService { task.setFailedFileCount(parsedFailedCount); task.setResultJson(JSONUtil.toJsonStr(items)); task.setUpdatedAt(LocalDateTime.now()); - task.setSourceFileCount(parsedSuccessCount); - if (parsedSuccessCount <= 0) { + task.setSourceFileCount(processableFileCount); + if (processableFileCount <= 0) { task.setStatus("FAILED"); task.setErrorMessage(parsedFailedCount > 0 ? "全部文件解析或匹配失败" : null); task.setFinishedAt(LocalDateTime.now()); diff --git a/frontend-vue/src/pages/brand/components/BrandDeleteBrandTab.vue b/frontend-vue/src/pages/brand/components/BrandDeleteBrandTab.vue index 182e4f7..1519d57 100644 --- a/frontend-vue/src/pages/brand/components/BrandDeleteBrandTab.vue +++ b/frontend-vue/src/pages/brand/components/BrandDeleteBrandTab.vue @@ -469,8 +469,7 @@ function getQueueStatus(item: DeleteBrandResultItem) { } function canDownloadTaskResult(item: DeleteBrandResultItem) { - // 核心修复:只要单个项目已经成功(后端返回了下载地址或标记为成功),就允许下载,哪怕整包任务还在“执行中” - if (item.downloadUrl || item.success) return true + if (item.downloadUrl) return true const taskId = item.taskId if (!taskId) return false