diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/service/AppearancePatentTaskService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/service/AppearancePatentTaskService.java index 015a7da..5bd3790 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/service/AppearancePatentTaskService.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/appearancepatent/service/AppearancePatentTaskService.java @@ -1093,12 +1093,13 @@ public class AppearancePatentTaskService { } } boolean failed = finalError != null && !finalError.isBlank(); - task.setStatus(failed ? STATUS_FAILED : STATUS_SUCCESS); + boolean waitingForAssemble = !failed && assembleWorkbook && !shouldAssembleSynchronously(); + task.setStatus(waitingForAssemble ? STATUS_RUNNING : (failed ? STATUS_FAILED : STATUS_SUCCESS)); task.setSuccessFileCount(failed ? 0 : 1); task.setFailedFileCount(failed ? 1 : 0); task.setErrorMessage(finalError); task.setUpdatedAt(LocalDateTime.now()); - task.setFinishedAt(LocalDateTime.now()); + task.setFinishedAt(waitingForAssemble ? null : LocalDateTime.now()); fileTaskMapper.updateById(task); if (result != null) { result.setSuccess(failed ? 0 : 1); @@ -1576,6 +1577,12 @@ public class AppearancePatentTaskService { assembleResultWorkbook(task, result); saveFileBuildProgress(task, job, totalProgressUnits, totalProgressUnits - 1, "Uploading result file"); fileResultMapper.updateById(result); + task.setStatus(STATUS_SUCCESS); + task.setErrorMessage(null); + task.setUpdatedAt(LocalDateTime.now()); + task.setFinishedAt(LocalDateTime.now()); + fileTaskMapper.updateById(task); + taskCacheService.deleteTaskCache(task.getId()); saveFileBuildProgress(task, job, totalProgressUnits, totalProgressUnits, "Result file generated"); } 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 7dc571b..d2f557d 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 @@ -1572,6 +1572,7 @@ public class DeleteBrandRunService { } int successCount = 0; + boolean waitingForAssemble = false; List finalItems = new ArrayList<>(); for (Map.Entry entry : parsedPayload.entrySet()) { String fileIdentity = entry.getKey(); @@ -1599,6 +1600,7 @@ public class DeleteBrandRunService { fileResultMapper.updateById(resultEntity); if (!alreadyAssembled) { taskFileJobService.enqueueAssembleResult(task.getId(), MODULE_TYPE, resultEntity.getId(), fileIdentity); + waitingForAssemble = true; } DeleteBrandResultItemVo item = new DeleteBrandResultItemVo(); @@ -1627,17 +1629,20 @@ public class DeleteBrandRunService { successCount++; } - task.setStatus("SUCCESS"); + if (!waitingForAssemble) { + waitingForAssemble = taskFileJobService.countUnfinishedAssembleJobs(task.getId(), MODULE_TYPE) > 0L; + } + task.setStatus(waitingForAssemble ? "RUNNING" : "SUCCESS"); task.setSuccessFileCount(successCount); task.setFailedFileCount(Math.max(0, parsedPayload.size() - successCount)); task.setErrorMessage(null); task.setResultJson(toCompactTaskResultJsonForDb(finalItems)); task.setUpdatedAt(LocalDateTime.now()); - task.setFinishedAt(LocalDateTime.now()); + task.setFinishedAt(waitingForAssemble ? null : LocalDateTime.now()); fileTaskMapper.updateById(task); deleteBrandTaskCacheService.saveTaskCache(task); deleteBrandTaskCacheService.saveProgress(task.getId(), Map.of( - "phase", "success", + "phase", waitingForAssemble ? DeleteBrandTaskCacheService.PHASE_UPLOADING : "success", "file_index", String.valueOf(parsedPayload.size()), "file_total", String.valueOf(parsedPayload.size()), "finished_files", String.valueOf(successCount), @@ -1720,6 +1725,10 @@ public class DeleteBrandRunService { if (job == null || job.getTaskId() == null) { return; } + FileTaskEntity task = fileTaskMapper.selectById(job.getTaskId()); + if (task != null && MODULE_TYPE.equals(task.getModuleType())) { + tryFinalizeTaskFromTerminalResults(task); + } cleanupCompletedTaskDataIfNoPendingFileJobs(job.getTaskId()); } diff --git a/backend-java/src/main/java/com/nanri/aiimage/modules/similarasin/service/SimilarAsinTaskService.java b/backend-java/src/main/java/com/nanri/aiimage/modules/similarasin/service/SimilarAsinTaskService.java index 9279684..83be79d 100644 --- a/backend-java/src/main/java/com/nanri/aiimage/modules/similarasin/service/SimilarAsinTaskService.java +++ b/backend-java/src/main/java/com/nanri/aiimage/modules/similarasin/service/SimilarAsinTaskService.java @@ -1139,12 +1139,13 @@ public class SimilarAsinTaskService { } } boolean failed = finalError != null && !finalError.isBlank(); - task.setStatus(failed ? STATUS_FAILED : STATUS_SUCCESS); + boolean waitingForAssemble = !failed && assembleWorkbook && !shouldAssembleSynchronously(); + task.setStatus(waitingForAssemble ? STATUS_RUNNING : (failed ? STATUS_FAILED : STATUS_SUCCESS)); task.setSuccessFileCount(failed ? 0 : 1); task.setFailedFileCount(failed ? 1 : 0); task.setErrorMessage(finalError); task.setUpdatedAt(LocalDateTime.now()); - task.setFinishedAt(LocalDateTime.now()); + task.setFinishedAt(waitingForAssemble ? null : LocalDateTime.now()); fileTaskMapper.updateById(task); if (result != null) { result.setSuccess(failed ? 0 : 1); @@ -1580,6 +1581,12 @@ public class SimilarAsinTaskService { assembleResultWorkbook(task, result); saveFileBuildProgress(task, job, totalProgressUnits, totalProgressUnits - 1, "Uploading result file"); fileResultMapper.updateById(result); + task.setStatus(STATUS_SUCCESS); + task.setErrorMessage(null); + task.setUpdatedAt(LocalDateTime.now()); + task.setFinishedAt(LocalDateTime.now()); + fileTaskMapper.updateById(task); + taskCacheService.deleteTaskCache(task.getId()); saveFileBuildProgress(task, job, totalProgressUnits, totalProgressUnits, "Result file generated"); }