From 9dcde5b27b70a4b0c0885347af5405eb2d1ef089 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期五, 12 十二月 2025 17:00:54 +0800
Subject: [PATCH] 修改前端状态显示变更,保持前端实时更新

---
 mes-web/src/views/plcTest/components/MultiDeviceTest/ExecutionMonitor.vue             |   16 ++++++++++++----
 mes-processes/mes-plcSend/src/main/java/com/mes/task/service/TaskExecutionEngine.java |   23 ++++++++++++++++++++++-
 2 files changed, 34 insertions(+), 5 deletions(-)

diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/task/service/TaskExecutionEngine.java b/mes-processes/mes-plcSend/src/main/java/com/mes/task/service/TaskExecutionEngine.java
index 4c5f2d3..bd81ac1 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/task/service/TaskExecutionEngine.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/task/service/TaskExecutionEngine.java
@@ -1208,7 +1208,17 @@
                     Long processStartTime = getProcessStartTime(context);
                     if (processStartTime == null) {
                         // 绗竴娆℃娴嬪埌鐜荤拑锛岃褰曞紑濮嬪鐞嗘椂闂�
-                        setProcessStartTime(context, System.currentTimeMillis());
+                        long now = System.currentTimeMillis();
+                        setProcessStartTime(context, now);
+                        // 琛ラ綈姝ラ鐨勫紑濮嬫椂闂翠笌鐘舵�侊紝纭繚鍓嶇鑰楁椂姝e父鏄剧ず
+                        if (!TaskStepDetail.Status.RUNNING.name().equals(step.getStatus())) {
+                            step.setStatus(TaskStepDetail.Status.RUNNING.name());
+                        }
+                        if (step.getStartTime() == null) {
+                            step.setStartTime(new Date(now));
+                        }
+                        taskStepDetailMapper.updateById(step);
+                        notificationService.notifyStepUpdate(task.getTaskId(), step);
                         log.debug("澶х悊鐗囩璁惧寮�濮嬪鐞�: taskId={}, deviceId={}, glassCount={}, processTime={}s",
                                 task.getTaskId(), device.getId(), loadedGlassIds.size(), processTimeSeconds);
                         return;
@@ -1234,6 +1244,17 @@
                     // 鏇存柊姝ラ鐘舵��
                     step.setStatus(TaskStepDetail.Status.COMPLETED.name());
                     step.setErrorMessage(null);
+                    // 璁板綍缁撴潫鏃堕棿涓庤�楁椂
+                    if (step.getEndTime() == null) {
+                        step.setEndTime(new Date());
+                    }
+                    if (step.getStartTime() == null) {
+                        // 濡傛灉寮�濮嬫椂闂寸己澶憋紝鐢ㄥ鐞嗗紑濮嬫椂闂存垨缁撴潫鏃堕棿鍏滃簳
+                        step.setStartTime(new Date(processStartTime));
+                    }
+                    if (step.getStartTime() != null && step.getEndTime() != null) {
+                        step.setDurationMs(step.getEndTime().getTime() - step.getStartTime().getTime());
+                    }
                     step.setOutputData(toJson(Collections.singletonMap("glassIds", loadedGlassIds)));
                     taskStepDetailMapper.updateById(step);
                     // 澶х悊鐗囩瀹屾垚鍚庡皾璇曡嚜鍔ㄦ敹灏炬暣涓换鍔�
diff --git a/mes-web/src/views/plcTest/components/MultiDeviceTest/ExecutionMonitor.vue b/mes-web/src/views/plcTest/components/MultiDeviceTest/ExecutionMonitor.vue
index d475c11..b4dfb0c 100644
--- a/mes-web/src/views/plcTest/components/MultiDeviceTest/ExecutionMonitor.vue
+++ b/mes-web/src/views/plcTest/components/MultiDeviceTest/ExecutionMonitor.vue
@@ -179,6 +179,12 @@
 let eventSource = null
 const baseURL = import.meta.env.VITE_API_BASE_URL || ''
 
+// 缁熶竴鐨処D姣旇緝锛岄伩鍏嶆暟瀛�/瀛楃涓蹭笉涓�鑷村鑷碨SE鏇存柊琚拷鐣�
+const isSameId = (a, b) => {
+  if (a == null || b == null) return false
+  return String(a) === String(b)
+}
+
 const fetchTasks = async () => {
   try {
     loading.value = true
@@ -262,9 +268,11 @@
     // 鐩戝惉姝ラ鏇存柊
     eventSource.addEventListener('stepUpdate', (event) => {
       try {
-        const data = JSON.parse(event.data)
+        const raw = JSON.parse(event.data)
+        // 鍚庣鍏ㄩ噺鐩戝惉鏃剁殑鏁版嵁缁撴瀯涓� { taskId, step: { ... } }锛岄渶瑕佸睍寮� step
+        const data = raw?.step ? { ...raw.step, taskId: raw.taskId || raw.step.taskId } : raw
         // 濡傛灉鏁版嵁涓寘鍚� taskId锛屾鏌ユ槸鍚﹀尮閰嶅綋鍓嶆煡鐪嬬殑浠诲姟
-        if (data.taskId && data.taskId === currentTaskId.value) {
+        if (data.taskId && isSameId(data.taskId, currentTaskId.value)) {
           updateStepFromSSE(data)
         } else if (!data.taskId) {
           // 濡傛灉娌℃湁 taskId锛屽彲鑳芥槸姝ラ鏁版嵁鐩存帴浼犻��
@@ -311,7 +319,7 @@
     return
   }
 
-  const taskIndex = tasks.value.findIndex(t => t.taskId === data.taskId)
+  const taskIndex = tasks.value.findIndex(t => isSameId(t.taskId, data.taskId))
   if (taskIndex >= 0) {
     // 鏇存柊浠诲姟 - 淇濈暀鍘熸湁瀛楁锛屽彧鏇存柊SSE浼犳潵鐨勫瓧娈�
     const existingTask = tasks.value[taskIndex]
@@ -344,7 +352,7 @@
   if (!data) return
   
   // 濡傛灉鏁版嵁涓寘鍚� taskId锛屾鏌ユ槸鍚﹀尮閰嶅綋鍓嶆煡鐪嬬殑浠诲姟
-  if (data.taskId && data.taskId !== currentTaskId.value) {
+  if (data.taskId && !isSameId(data.taskId, currentTaskId.value)) {
     return
   }
 

--
Gitblit v1.8.0