Kaynağa Gözat

fix: 任务中心根据阶段状态重新计算整体任务状态

何文松 4 hafta önce
ebeveyn
işleme
fb1600c420

+ 46 - 1
backend/parse-service/src/main/java/com/lingyue/parse/service/ParseTaskCenterService.java

@@ -155,7 +155,8 @@ public class ParseTaskCenterService {
         ParseTaskCenterVO vo = new ParseTaskCenterVO();
         vo.setId(task.getId());
         vo.setDocumentId(task.getDocumentId());
-        vo.setStatus(task.getStatus());
+        // 根据各阶段状态重新计算整体状态,确保状态正确
+        vo.setStatus(computeOverallStatus(task));
         vo.setProgress(task.getProgress());
         vo.setCurrentStep(task.getCurrentStep());
         vo.setErrorMessage(task.getErrorMessage());
@@ -167,6 +168,50 @@ public class ParseTaskCenterService {
         vo.setStages(buildStages(task));
         return vo;
     }
+    
+    /**
+     * 根据各阶段状态计算整体任务状态
+     */
+    private String computeOverallStatus(ParseTask task) {
+        // 如果任何阶段失败,整体状态为失败
+        if (isAnyFailed(task)) {
+            return "failed";
+        }
+        // 如果所有阶段完成,整体状态为完成
+        if (isAllCompleted(task)) {
+            return "completed";
+        }
+        // 如果有阶段正在进行,整体状态为处理中
+        if (isAnyProcessing(task)) {
+            return "processing";
+        }
+        // 否则为等待中
+        return task.getStatus() != null ? task.getStatus() : "pending";
+    }
+    
+    private boolean isAnyFailed(ParseTask task) {
+        return "failed".equals(task.getParseStatus()) ||
+               "failed".equals(task.getRagStatus()) ||
+               "failed".equals(task.getStructuredStatus()) ||
+               "failed".equals(task.getNerStatus()) ||
+               "failed".equals(task.getGraphStatus());
+    }
+    
+    private boolean isAllCompleted(ParseTask task) {
+        return "completed".equals(task.getParseStatus()) &&
+               "completed".equals(task.getRagStatus()) &&
+               "completed".equals(task.getStructuredStatus()) &&
+               "completed".equals(task.getNerStatus()) &&
+               "completed".equals(task.getGraphStatus());
+    }
+    
+    private boolean isAnyProcessing(ParseTask task) {
+        return "processing".equals(task.getParseStatus()) ||
+               "processing".equals(task.getRagStatus()) ||
+               "processing".equals(task.getStructuredStatus()) ||
+               "processing".equals(task.getNerStatus()) ||
+               "processing".equals(task.getGraphStatus());
+    }
 
     /**
      * 构建阶段列表:上传、解析、RAG、结构化、NER、图构建