From 792236ef78c2cdd3a989fb40a7f2e2487c4e17b6 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期三, 26 十一月 2025 17:06:11 +0800
Subject: [PATCH] 添加各个设备基础可配置参数

---
 mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java |   77 +++++++++++++++++++++++++++++---------
 1 files changed, 58 insertions(+), 19 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 aed9919..4a40192 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
@@ -302,7 +302,14 @@
         Boolean triggerRequest = (Boolean) params.getOrDefault("triggerRequest", autoFeed);
 
         List<GlassInfo> plannedGlasses = planGlassLoading(glassInfos, vehicleCapacity,
-                getLogicParam(logicParams, "defaultGlassLength", 2000));
+                deviceConfig.getDeviceId());
+        if (plannedGlasses == null) {
+            // 鐜荤拑娌℃湁闀垮害鏃惰繑鍥瀗ull琛ㄧず閿欒
+            return DevicePlcVO.OperationResult.builder()
+                    .success(false)
+                    .message("鐜荤拑淇℃伅缂哄皯闀垮害鏁版嵁锛屾棤娉曡繘琛屽閲忚绠椼�傝妫�鏌ES绋嬪簭鏄惁姝g‘鎻愪緵鐜荤拑闀垮害銆�")
+                    .build();
+        }
         if (plannedGlasses.isEmpty()) {
             return DevicePlcVO.OperationResult.builder()
                     .success(false)
@@ -551,13 +558,6 @@
         defaultParams.put("taskMonitorIntervalMs", 1000); // 浠诲姟鐩戞帶闂撮殧锛堟绉掞級
         defaultParams.put("mesConfirmTimeoutMs", 30000); // MES纭瓒呮椂锛堟绉掞級
         
-        // 鍑虹墖浠诲姟鐩稿叧閰嶇疆
-        // outboundSlotRanges: 鍑虹墖浠诲姟鐨剆tartSlot鑼冨洿锛屼緥濡俒1, 101]琛ㄧず鏍煎瓙1~101閮芥槸鍑虹墖浠诲姟
-        // 濡傛灉涓嶉厤缃紝鍒欓�氳繃鍒ゆ柇startSlot鏄惁鍦╬ositionMapping涓潵鍖哄垎杩涚墖/鍑虹墖
-        List<Integer> outboundSlotRanges = new ArrayList<>();
-        outboundSlotRanges.add(1);   // 鏈�灏忔牸瀛愮紪鍙�
-        outboundSlotRanges.add(101); // 鏈�澶ф牸瀛愮紪鍙�
-        defaultParams.put("outboundSlotRanges", outboundSlotRanges);
         
         // gridPositionMapping: 鏍煎瓙缂栧彿鍒颁綅缃殑鏄犲皠琛紙鍙�夛級
         // 濡傛灉涓嶉厤缃紝鍒欐牸瀛愮紪鍙风洿鎺ヤ綔涓轰綅缃��
@@ -644,16 +644,32 @@
         return null;
     }
 
+    /**
+     * 瑙勫垝鐜荤拑瑁呰浇
+     * @param source 婧愮幓鐠冨垪琛�
+     * @param vehicleCapacity 杞﹁締瀹归噺
+     * @param deviceId 璁惧ID锛堢敤浜庢棩蹇楋級
+     * @return 瑙勫垝鍚庣殑鐜荤拑鍒楄〃锛屽鏋滅幓鐠冩病鏈夐暱搴﹀垯杩斿洖null锛堢敤浜庢祴璇昅ES绋嬪簭锛�
+     */
     private List<GlassInfo> planGlassLoading(List<GlassInfo> source,
                                              int vehicleCapacity,
-                                             Integer defaultGlassLength) {
+                                             String deviceId) {
         List<GlassInfo> planned = new ArrayList<>();
         int usedLength = 0;
         int capacity = Math.max(vehicleCapacity, 1);
-        int fallbackLength = defaultGlassLength != null && defaultGlassLength > 0 ? defaultGlassLength : 2000;
 
         for (GlassInfo info : source) {
-            int length = info.getLength() != null && info.getLength() > 0 ? info.getLength() : fallbackLength;
+            Integer glassLength = info.getLength();
+            
+            if (glassLength == null || glassLength <= 0) {
+                // 鐜荤拑娌℃湁闀垮害锛岀洿鎺ユ姤閿欙紙鐢ㄤ簬娴嬭瘯MES绋嬪簭锛�
+                log.error("鐜荤拑[{}]缂哄皯闀垮害鏁版嵁锛屾棤娉曡繘琛屽閲忚绠椼�俤eviceId={}锛岃妫�鏌ES绋嬪簭鏄惁姝g‘鎻愪緵鐜荤拑闀垮害銆�", 
+                        info.getGlassId(), deviceId);
+                return null;
+            }
+            
+            int length = glassLength;
+            
             if (planned.isEmpty()) {
                 planned.add(info.withLength(length));
                 usedLength = length;
@@ -1269,15 +1285,19 @@
         // 杩欓噷绠�鍖栧鐞嗭細濡傛灉startSlot涓嶅湪positionMapping涓紝涓旀槸鏁板瓧锛屽彲鑳芥槸鏍煎瓙缂栧彿
         // 鍙互閫氳繃閰嶇疆鎸囧畾鏍煎瓙缂栧彿鑼冨洿锛屾垨鑰呴�氳繃鏌ユ壘鍚岀粍璁惧鍒ゆ柇
         
-        // 鏂规硶3锛氶�氳繃閰嶇疆鎸囧畾鍑虹墖浠诲姟鐨剆tartSlot鑼冨洿
+        // 鏂规硶3锛氶�氳繃閰嶇疆鎸囧畾杞﹁締杩愬姩鏍煎瓙鑼冨洿锛堝吋瀹规棫閰嶇疆outboundSlotRanges锛�
         @SuppressWarnings("unchecked")
-        List<Integer> outboundSlotRanges = getLogicParam(logicParams, "outboundSlotRanges", null);
-        if (outboundSlotRanges != null && !outboundSlotRanges.isEmpty()) {
-            // 濡傛灉閰嶇疆浜嗗嚭鐗噑lot鑼冨洿锛屾鏌tartSlot鏄惁鍦ㄨ寖鍥村唴
-            // 渚嬪锛歔1, 101] 琛ㄧず鏍煎瓙1~101閮芥槸鍑虹墖浠诲姟
-            if (outboundSlotRanges.size() >= 2) {
-                int minSlot = outboundSlotRanges.get(0);
-                int maxSlot = outboundSlotRanges.get(1);
+        List<Integer> vehicleSlotRange = getLogicParam(logicParams, "vehicleSlotRange", null);
+        if (vehicleSlotRange == null || vehicleSlotRange.isEmpty()) {
+            // 鍏煎鏃ч厤缃�
+            vehicleSlotRange = getLogicParam(logicParams, "outboundSlotRanges", null);
+        }
+        if (vehicleSlotRange != null && !vehicleSlotRange.isEmpty()) {
+            // 濡傛灉閰嶇疆浜嗚溅杈嗚繍鍔ㄦ牸瀛愯寖鍥达紝妫�鏌tartSlot鏄惁鍦ㄨ寖鍥村唴
+            // 渚嬪锛歔1, 101] 琛ㄧず杞﹁締鍙兘鍦ㄦ牸瀛�1~101涔嬮棿杩愬姩
+            if (vehicleSlotRange.size() >= 2) {
+                int minSlot = vehicleSlotRange.get(0);
+                int maxSlot = vehicleSlotRange.get(1);
                 if (startSlot >= minSlot && startSlot <= maxSlot) {
                     return true;
                 }
@@ -1361,6 +1381,25 @@
      */
     private TimeCalculation calculateTime(Integer currentPos, Integer startPos, 
                                           Integer targetPos, Map<String, Object> logicParams) {
+        // 楠岃瘉杞﹁締杩愬姩鏍煎瓙鑼冨洿
+        @SuppressWarnings("unchecked")
+        List<Integer> vehicleSlotRange = getLogicParam(logicParams, "vehicleSlotRange", null);
+        if (vehicleSlotRange == null || vehicleSlotRange.isEmpty()) {
+            // 鍏煎鏃ч厤缃�
+            vehicleSlotRange = getLogicParam(logicParams, "outboundSlotRanges", null);
+        }
+        if (vehicleSlotRange != null && vehicleSlotRange.size() >= 2) {
+            int minSlot = vehicleSlotRange.get(0);
+            int maxSlot = vehicleSlotRange.get(1);
+            // 楠岃瘉startPos鍜宼argetPos鏄惁鍦ㄥ厑璁哥殑鑼冨洿鍐�
+            if (startPos != null && (startPos < minSlot || startPos > maxSlot)) {
+                log.warn("璧峰浣嶇疆 {} 瓒呭嚭杞﹁締杩愬姩鏍煎瓙鑼冨洿 [{}, {}]", startPos, minSlot, maxSlot);
+            }
+            if (targetPos != null && (targetPos < minSlot || targetPos > maxSlot)) {
+                log.warn("鐩爣浣嶇疆 {} 瓒呭嚭杞﹁締杩愬姩鏍煎瓙鑼冨洿 [{}, {}]", targetPos, minSlot, maxSlot);
+            }
+        }
+        
         // 鑾峰彇閫熷害锛堟牸/绉掞紝grid/s锛�
         Double speed = getLogicParam(logicParams, "vehicleSpeed", 1.0);
         if (speed == null || speed <= 0) {

--
Gitblit v1.8.0