From 628aa6a42e587e9f337e213f87f922fc2ab2af02 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期二, 02 十二月 2025 17:00:39 +0800
Subject: [PATCH] 修改卧转立扫码到卧转立任务流转,卧转立判断玻璃超时时间

---
 mes-processes/mes-plcSend/src/main/java/com/mes/task/service/impl/MultiDeviceTaskServiceImpl.java |   62 +++++++++++++++++++++++++++----
 1 files changed, 54 insertions(+), 8 deletions(-)

diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/task/service/impl/MultiDeviceTaskServiceImpl.java b/mes-processes/mes-plcSend/src/main/java/com/mes/task/service/impl/MultiDeviceTaskServiceImpl.java
index 2cdac06..278a68f 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/task/service/impl/MultiDeviceTaskServiceImpl.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/task/service/impl/MultiDeviceTaskServiceImpl.java
@@ -20,7 +20,6 @@
 import com.mes.task.service.MultiDeviceTaskService;
 import com.mes.task.service.TaskExecutionEngine;
 import com.mes.task.service.TaskStatusNotificationService;
-import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
@@ -32,13 +31,13 @@
 import java.util.Date;
 import java.util.List;
 import java.util.Locale;
+import java.util.Map;
 
 /**
  * 澶氳澶囦换鍔℃湇鍔″疄鐜�
  */
 @Slf4j
 @Service
-@RequiredArgsConstructor
 public class MultiDeviceTaskServiceImpl extends ServiceImpl<MultiDeviceTaskMapper, MultiDeviceTask>
         implements MultiDeviceTaskService {
 
@@ -48,6 +47,21 @@
     private final TaskExecutionEngine taskExecutionEngine;
     private final TaskStatusNotificationService notificationService;
     private final ObjectMapper objectMapper;
+
+    public MultiDeviceTaskServiceImpl(
+            DeviceGroupConfigService deviceGroupConfigService,
+            DeviceGroupRelationMapper deviceGroupRelationMapper,
+            TaskStepDetailMapper taskStepDetailMapper,
+            TaskExecutionEngine taskExecutionEngine,
+            TaskStatusNotificationService notificationService,
+            ObjectMapper objectMapper) {
+        this.deviceGroupConfigService = deviceGroupConfigService;
+        this.deviceGroupRelationMapper = deviceGroupRelationMapper;
+        this.taskStepDetailMapper = taskStepDetailMapper;
+        this.taskExecutionEngine = taskExecutionEngine;
+        this.notificationService = notificationService;
+        this.objectMapper = objectMapper;
+    }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -66,8 +80,15 @@
         }
 
         TaskParameters parameters = request.getParameters();
-        if (parameters == null || CollectionUtils.isEmpty(parameters.getGlassIds())) {
-            throw new IllegalArgumentException("鑷冲皯闇�瑕侀厤缃竴鏉$幓鐠僆D");
+        if (parameters == null) {
+            parameters = new TaskParameters();
+        }
+
+        // 榛樿鍏佽鍗ц浆绔嬫壂鐮佽澶囧湪浠诲姟鎵ц闃舵鑾峰彇鐜荤拑淇℃伅
+        boolean hasGlassIds = !CollectionUtils.isEmpty(parameters.getGlassIds());
+        if (!hasGlassIds) {
+            log.info("娴嬭瘯浠诲姟鏈彁渚涚幓鐠僆D锛屽皢鍦ㄨ澶囩粍娴佺▼涓敱鍗ц浆绔嬫壂鐮佽澶囬噰闆嗙幓鐠冧俊鎭�: groupId={}",
+                    groupConfig.getId());
         }
 
         // 鍒涘缓浠诲姟璁板綍
@@ -113,11 +134,26 @@
             // 鎵ц浠诲姟
             TaskExecutionResult result = taskExecutionEngine.execute(task, groupConfig, devices, parameters);
             
-            // 鏇存柊浠诲姟缁撴灉
+            // 妫�鏌ヤ换鍔℃暟鎹腑鏄惁鍖呭惈鎸佺画杩愯鐨勬爣璁�
+            Map<String, Object> resultData = result.getData();
+            boolean isContinuousTask = resultData != null && "浠诲姟宸插惎鍔紝瀹氭椂鍣ㄥ湪鍚庡彴杩愯涓�".equals(resultData.get("message"));
+            
+            // 濡傛灉鏄寔缁繍琛岀殑浠诲姟锛堝畾鏃跺櫒妯″紡锛夛紝淇濇寔 RUNNING 鐘舵�侊紝涓嶆洿鏂颁负 COMPLETED
+            if (isContinuousTask && result.isSuccess()) {
+                log.info("浠诲姟宸插惎鍔ㄥ畾鏃跺櫒锛屼繚鎸佽繍琛岀姸鎬�: taskId={}, message={}", 
+                    task.getTaskId(), resultData.get("message"));
+                task.setResultData(writeJson(resultData));
+                updateById(task);
+                // 閫氱煡浠诲姟鐘舵�侊紙淇濇寔 RUNNING锛�
+                notificationService.notifyTaskStatus(task);
+                return;
+            }
+            
+            // 鏇存柊浠诲姟缁撴灉锛堥潪鎸佺画杩愯鐨勪换鍔★級
             task.setStatus(result.isSuccess() ? MultiDeviceTask.Status.COMPLETED.name() : MultiDeviceTask.Status.FAILED.name());
             task.setErrorMessage(result.isSuccess() ? null : result.getMessage());
             task.setEndTime(new Date());
-            task.setResultData(writeJson(result.getData()));
+            task.setResultData(writeJson(resultData));
             updateById(task);
             
             // 閫氱煡浠诲姟瀹屾垚
@@ -161,12 +197,22 @@
         if (task == null) {
             return false;
         }
-        if (!MultiDeviceTask.Status.RUNNING.name().equals(task.getStatus())) {
+        // 鍏佽鍦� RUNNING 鎴� FAILED 鐘舵�佷笅鎵ц鍙栨秷鎿嶄綔
+        String status = task.getStatus();
+        boolean cancellable = MultiDeviceTask.Status.RUNNING.name().equals(status)
+                || MultiDeviceTask.Status.FAILED.name().equals(status);
+        if (!cancellable) {
             return false;
         }
+        // 鏍囪浠诲姟鍙栨秷骞跺仠姝㈡墍鏈夊畾鏃跺櫒
+        taskExecutionEngine.requestTaskCancellation(taskId);
         task.setStatus(MultiDeviceTask.Status.CANCELLED.name());
         task.setEndTime(new Date());
-        return updateById(task);
+        boolean updated = updateById(task);
+        if (updated) {
+            notificationService.notifyTaskStatus(task);
+        }
+        return updated;
     }
 
     @Override

--
Gitblit v1.8.0