소스 검색

fix(任务中心): 修复任务记录创建时机

- ParseController.startParseByDocumentId 立即创建任务记录(状态 pending)
- ParseTaskCenterService 新增 createTask 方法
- ParseService.saveParseTask 添加日志
- 前端 taskCenter store 增加延迟等待任务创建
何文松 1 개월 전
부모
커밋
ea4d1a8f79

+ 5 - 1
backend/parse-service/src/main/java/com/lingyue/parse/controller/ParseController.java

@@ -82,7 +82,11 @@ public class ParseController {
             return AjaxResult.error("该文档正在解析中,请勿重复提交");
         }
         
-        // 提交解析任务(状态由 ParseService 内部管理)
+        // 先创建任务记录(让用户立即在任务中心看到)
+        String taskId = taskCenterService.createTask(documentId, document.getName());
+        log.info("解析任务记录已创建: taskId={}, documentId={}", taskId, documentId);
+        
+        // 提交解析任务(异步执行)
         parseTaskExecutor.submitParseTask(documentId, filePath);
         log.info("解析任务已提交: documentId={}, filePath={}", documentId, filePath);
         

+ 17 - 8
backend/parse-service/src/main/java/com/lingyue/parse/service/ParseService.java

@@ -54,14 +54,23 @@ public class ParseService {
      * 保存解析任务
      */
     public ParseTask saveParseTask(ParseTask parseTask) {
-        if (parseTask.getId() == null) {
-            parseTask.setId(java.util.UUID.randomUUID().toString().replace("-", ""));
-            parseTask.setCreateTime(new java.util.Date());
-            parseTask.setStartedAt(new java.util.Date());
-            parseTaskRepository.insert(parseTask);
-        } else {
-            parseTask.setUpdateTime(new java.util.Date());
-            parseTaskRepository.updateById(parseTask);
+        try {
+            if (parseTask.getId() == null) {
+                parseTask.setId(java.util.UUID.randomUUID().toString().replace("-", ""));
+                parseTask.setCreateTime(new java.util.Date());
+                parseTask.setStartedAt(new java.util.Date());
+                parseTaskRepository.insert(parseTask);
+                log.info("解析任务创建成功: taskId={}, documentId={}, status={}", 
+                        parseTask.getId(), parseTask.getDocumentId(), parseTask.getStatus());
+            } else {
+                parseTask.setUpdateTime(new java.util.Date());
+                parseTaskRepository.updateById(parseTask);
+                log.debug("解析任务更新成功: taskId={}, status={}, progress={}", 
+                        parseTask.getId(), parseTask.getStatus(), parseTask.getProgress());
+            }
+        } catch (Exception e) {
+            log.error("保存解析任务失败: documentId={}, error={}", parseTask.getDocumentId(), e.getMessage(), e);
+            throw e;
         }
         return parseTask;
     }

+ 36 - 0
backend/parse-service/src/main/java/com/lingyue/parse/service/ParseTaskCenterService.java

@@ -24,6 +24,42 @@ public class ParseTaskCenterService {
 
     private final ParseTaskRepository parseTaskRepository;
 
+    /**
+     * 创建任务记录(让用户立即在任务中心看到)
+     * 
+     * @param documentId 文档ID
+     * @param documentName 文档名称
+     * @return 任务ID
+     */
+    public String createTask(String documentId, String documentName) {
+        // 检查是否已存在
+        ParseTask existing = parseTaskRepository.findByDocumentId(documentId);
+        if (existing != null) {
+            // 如果已存在,重置状态
+            existing.setStatus("pending");
+            existing.setProgress(0);
+            existing.setCurrentStep(null);
+            existing.setErrorMessage(null);
+            existing.setStartedAt(null);
+            existing.setCompletedAt(null);
+            existing.setUpdateTime(new java.util.Date());
+            parseTaskRepository.updateById(existing);
+            return existing.getId();
+        }
+        
+        // 创建新任务
+        ParseTask task = new ParseTask();
+        task.setId(java.util.UUID.randomUUID().toString().replace("-", ""));
+        task.setDocumentId(documentId);
+        task.setStatus("pending");
+        task.setProgress(0);
+        task.setCreateTime(new java.util.Date());
+        parseTaskRepository.insert(task);
+        
+        log.info("创建解析任务记录: taskId={}, documentId={}", task.getId(), documentId);
+        return task.getId();
+    }
+
     /**
      * 分页查询任务列表
      */

+ 8 - 3
frontend/vue-demo/src/stores/taskCenter.js

@@ -29,13 +29,18 @@ export const useTaskCenterStore = defineStore('taskCenter', {
 
   actions: {
     /**
-     * 任务开始时调用:打开任务中心并聚焦"运行中"
+     * 任务开始时调用:打开任务中心并显示全部任务
      */
     async notifyTaskStarted({ documentId } = {}) {
       this.open = true
-      this.activeTab = 'processing'
       this.selectedId = null
       this.detail = null
+      // 先设置为全部,确保能看到任务
+      this.activeTab = 'all'
+      
+      // 等待一小段时间让后端任务创建完成
+      await new Promise(resolve => setTimeout(resolve, 500))
+      
       this.fetchRunningCount()
       this.fetchStatusTotals()
       await this.fetchList({ pageNum: 1, pageSize: 20 })
@@ -43,7 +48,7 @@ export const useTaskCenterStore = defineStore('taskCenter', {
 
       // 如果传入了 documentId,尝试选中该任务
       if (documentId) {
-        // 等待一小段时间让任务创建完成
+        // 等待一小段时间让任务创建完成
         setTimeout(async () => {
           try {
             const detail = await taskCenterApi.getByDocumentId(documentId)