From dad0263459b30dbfa75f06dff062a0c85183517b Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期一, 01 十二月 2025 17:01:51 +0800
Subject: [PATCH] 添加卧转立扫码设备交互逻辑,任务流转

---
 mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java |   82 +++++++++++++++++++++++++++++++++++-----
 1 files changed, 71 insertions(+), 11 deletions(-)

diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java b/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java
index 4a40192..2599607 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java
@@ -16,6 +16,8 @@
 import com.mes.s7.enhanced.EnhancedS7Serializer;
 import com.mes.s7.provider.S7SerializerProvider;
 import com.mes.service.PlcDynamicDataService;
+import com.mes.task.model.TaskExecutionContext;
+import com.mes.interaction.workstation.scanner.handler.HorizontalScannerLogicHandler;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
@@ -256,7 +258,23 @@
         }
         
         // 浠庨厤缃腑鑾峰彇閫熷害锛堝鏋滄湁锛�
-        Double speed = getLogicParam(logicParams, "vehicleSpeed", null);
+        Object speedObj = logicParams != null ? logicParams.get("vehicleSpeed") : null;
+        Double speed = null;
+        if (speedObj != null) {
+            if (speedObj instanceof Double) {
+                speed = (Double) speedObj;
+            } else if (speedObj instanceof Integer) {
+                speed = ((Integer) speedObj).doubleValue();
+            } else if (speedObj instanceof Number) {
+                speed = ((Number) speedObj).doubleValue();
+            } else {
+                try {
+                    speed = Double.parseDouble(String.valueOf(speedObj));
+                } catch (NumberFormatException e) {
+                    log.warn("鏃犳硶瑙f瀽vehicleSpeed: {}", speedObj);
+                }
+            }
+        }
         if (speed != null) {
             task.setSpeed(speed);
             task.calculateEstimatedEndTime();
@@ -284,7 +302,23 @@
 
         // 浠庨�昏緫鍙傛暟涓幏鍙栭厤缃紙浠� extraParams.deviceLogic 璇诲彇锛�
         Integer vehicleCapacity = getLogicParam(logicParams, "vehicleCapacity", 6000);
-        Integer glassIntervalMs = getLogicParam(logicParams, "glassIntervalMs", 1000);
+        // 浼樺厛浣跨敤杩愯鏃跺弬鏁颁腑鐨刧lassIntervalMs锛堜粠浠诲姟鍙傛暟浼犲叆锛夛紝濡傛灉娌℃湁鍒欎娇鐢ㄨ澶囬厤缃殑
+        Integer glassIntervalMs = null;
+        if (params.containsKey("glassIntervalMs") && params.get("glassIntervalMs") != null) {
+            Object intervalObj = params.get("glassIntervalMs");
+            if (intervalObj instanceof Number) {
+                glassIntervalMs = ((Number) intervalObj).intValue();
+            } else if (intervalObj instanceof String) {
+                try {
+                    glassIntervalMs = Integer.parseInt((String) intervalObj);
+                } catch (NumberFormatException e) {
+                    // 蹇界暐
+                }
+            }
+        }
+        if (glassIntervalMs == null) {
+            glassIntervalMs = getLogicParam(logicParams, "glassIntervalMs", 1000);
+        }
         Boolean autoFeed = getLogicParam(logicParams, "autoFeed", true);
         Integer maxRetryCount = getLogicParam(logicParams, "maxRetryCount", 5);
 
@@ -311,11 +345,20 @@
                     .build();
         }
         if (plannedGlasses.isEmpty()) {
+            // 瑁呬笉涓嬶紝閫氱煡鍗ц浆绔嬫壂鐮佽澶囨殏鍋�
+            notifyScannerPause(params, true);
+            log.warn("澶ц溅璁惧瑁呬笉涓嬶紝宸查�氱煡鍗ц浆绔嬫壂鐮佹殏鍋�: deviceId={}, glassCount={}, vehicleCapacity={}", 
+                    deviceConfig.getId(), glassInfos.size(), vehicleCapacity);
             return DevicePlcVO.OperationResult.builder()
                     .success(false)
-                    .message("褰撳墠鐜荤拑灏哄瓒呭嚭杞﹁締瀹归噺锛屾棤娉曡杞�")
+                    .message("褰撳墠鐜荤拑灏哄瓒呭嚭杞﹁締瀹归噺锛屾棤娉曡杞斤紝宸查�氱煡鍗ц浆绔嬫壂鐮佹殏鍋�")
                     .build();
         }
+        
+        // 瑁呭緱涓嬶紝纭繚鍗ц浆绔嬫壂鐮佺户缁繍琛�
+        notifyScannerPause(params, false);
+        
+        // 缁х画鎵ц鍘熸湁閫昏緫
 
         // 鏋勫缓鍐欏叆鏁版嵁
         Map<String, Object> payload = new HashMap<>();
@@ -354,16 +397,13 @@
         log.info("澶ц溅璁惧鐜荤拑涓婃枡: deviceId={}, glassCount={}, position={}, plannedGlassIds={}",
                 deviceConfig.getId(), plcSlots, positionCode, plannedGlasses);
 
-        if (glassIntervalMs != null && glassIntervalMs > 0) {
-            try {
-                Thread.sleep(glassIntervalMs);
-            } catch (InterruptedException e) {
-                Thread.currentThread().interrupt();
-            }
-        }
-
+        // 鍐欏叆PLC锛岃澶ц溅寮�濮嬭鐜荤拑
         DevicePlcVO.OperationResult result = devicePlcOperationService.writeFields(
             deviceConfig.getId(), payload, operationName);
+        
+        // 娉ㄦ剰锛歡lassIntervalMs 鐨勭瓑寰呭簲璇ュ湪鎵规涔嬮棿锛堝湪TaskExecutionEngine涓鐞嗭級锛�
+        // 鑰屼笉鏄湪杩欓噷绛夊緟锛屽洜涓鸿繖閲岀瓑寰呬細闃诲澶ц溅鐨勬甯歌鐜荤拑娴佺▼
+        // 濡傛灉闇�瑕佸湪鍐欏叆鍚庣瓑寰咃紝搴旇鍦ㄦ壒娆′箣闂寸瓑寰咃紝璁╁ぇ杞︽湁鏃堕棿澶勭悊褰撳墠鎵规鐨勭幓鐠�
         
         // 濡傛灉鎵ц鎴愬姛锛屾洿鏂颁綅缃俊鎭埌鐘舵�侊紝骞跺惎鍔ㄧ姸鎬佺洃鎺�
         if (Boolean.TRUE.equals(result.getSuccess())) {
@@ -1754,5 +1794,25 @@
             Thread.currentThread().interrupt();
         }
     }
+    
+    /**
+     * 閫氱煡鍗ц浆绔嬫壂鐮佽澶囨殏鍋滄垨缁х画
+     * @param params 鍙傛暟锛屽寘鍚玙taskContext寮曠敤
+     * @param pause true=鏆傚仠锛宖alse=缁х画
+     */
+    private void notifyScannerPause(Map<String, Object> params, boolean pause) {
+        if (params == null) {
+            return;
+        }
+        
+        Object contextObj = params.get("_taskContext");
+        if (contextObj instanceof TaskExecutionContext) {
+            TaskExecutionContext context = (TaskExecutionContext) contextObj;
+            HorizontalScannerLogicHandler.setPauseFlag(context, pause);
+            log.info("宸查�氱煡鍗ц浆绔嬫壂鐮佽澶噞}: pause={}", pause ? "鏆傚仠" : "缁х画", pause);
+        } else {
+            log.debug("鏈壘鍒癟askExecutionContext锛屾棤娉曢�氱煡鍗ц浆绔嬫壂鐮佽澶囨殏鍋�");
+        }
+    }
 }
 

--
Gitblit v1.8.0