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 |  102 ++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 92 insertions(+), 10 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 6792e3a..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,8 +20,8 @@
 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;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
@@ -31,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 {
 
@@ -47,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)
@@ -65,10 +80,18 @@
         }
 
         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());
+        }
+
+        // 鍒涘缓浠诲姟璁板綍
         MultiDeviceTask task = new MultiDeviceTask();
         task.setTaskId(generateTaskId(groupConfig));
         task.setGroupId(String.valueOf(groupConfig.getId()));
@@ -79,28 +102,77 @@
         task.setStartTime(new Date());
         save(task);
 
+        // 寮傛鎵ц浠诲姟锛岀珛鍗宠繑鍥炰换鍔D
+        executeTaskAsync(task, groupConfig, devices, parameters);
+
+        log.info("璁惧缁勪换鍔″凡鍚姩锛堝紓姝ユ墽琛岋級: taskId={}, groupId={}, groupName={}", 
+            task.getTaskId(), groupConfig.getId(), groupConfig.getGroupName());
+        
+        return task;
+    }
+
+    /**
+     * 寮傛鎵ц璁惧缁勪换鍔�
+     * 姣忎釜璁惧缁勪綔涓虹嫭绔嬬嚎绋嬫墽琛岋紝浜掍笉闃诲
+     */
+    @Async("deviceGroupTaskExecutor")
+    public void executeTaskAsync(MultiDeviceTask task, 
+                                  DeviceGroupConfig groupConfig, 
+                                  List<DeviceConfig> devices, 
+                                  TaskParameters parameters) {
         try {
+            log.info("寮�濮嬫墽琛岃澶囩粍浠诲姟: taskId={}, groupId={}, deviceCount={}", 
+                task.getTaskId(), groupConfig.getId(), devices.size());
+            
+            // 鏇存柊浠诲姟鐘舵�佷负杩愯涓�
+            task.setStatus(MultiDeviceTask.Status.RUNNING.name());
+            updateById(task);
+            
             // 閫氱煡浠诲姟寮�濮�
             notificationService.notifyTaskStatus(task);
             
+            // 鎵ц浠诲姟
             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);
             
             // 閫氱煡浠诲姟瀹屾垚
             notificationService.notifyTaskStatus(task);
             
-            return task;
+            log.info("璁惧缁勪换鍔℃墽琛屽畬鎴�: taskId={}, success={}, message={}", 
+                task.getTaskId(), result.isSuccess(), result.getMessage());
+            
         } catch (Exception ex) {
-            log.error("澶氳澶囦换鍔℃墽琛屽紓甯�, taskId={}", task.getTaskId(), ex);
+            log.error("璁惧缁勪换鍔℃墽琛屽紓甯�: taskId={}, groupId={}", task.getTaskId(), groupConfig.getId(), ex);
+            
+            // 鏇存柊浠诲姟鐘舵�佷负澶辫触
             task.setStatus(MultiDeviceTask.Status.FAILED.name());
             task.setErrorMessage(ex.getMessage());
             task.setEndTime(new Date());
             updateById(task);
-            throw new RuntimeException("澶氳澶囦换鍔℃墽琛屽け璐�: " + ex.getMessage(), ex);
+            
+            // 閫氱煡浠诲姟澶辫触
+            notificationService.notifyTaskStatus(task);
         }
     }
 
@@ -125,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