From 73aa66976e35252378be3f09be2474193ccd0bf6 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期五, 05 十二月 2025 17:15:20 +0800
Subject: [PATCH] 修改任务执行步骤状态完成检验

---
 mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java |   75 +++++++++++++++++++++++++++++++++++++
 1 files changed, 74 insertions(+), 1 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 7a04e23..b77deae 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
@@ -112,6 +112,10 @@
     
     // 璁板綍褰撳墠浠诲姟锛歞eviceId -> 浠诲姟淇℃伅
     private final Map<String, MesTaskInfo> currentTasks = new ConcurrentHashMap<>();
+    /**
+     * 璁板綍鏈�杩戜竴娆″凡瀹屾垚浣哅ES鏈浣嶇殑浠诲姟绛惧悕锛岄伩鍏嶉噸澶嶆媺璧�
+     */
+    private final Map<String, CompletedMesRecord> lastCompletedMesRecords = new ConcurrentHashMap<>();
 
     @Autowired
     public LoadVehicleLogicHandler(
@@ -145,6 +149,10 @@
                 // 鍥犱负瀹氭椂鍣ㄥ彲鑳戒細閲嶅璋冪敤锛屾垨鑰呴渶瑕佺瓑寰呬换鍔″畬鎴�
                 if ("feedGlass".equals(operation) && status.isExecuting()) {
                     log.debug("杞﹁締 {} 褰撳墠鐘舵�佷负 EXECUTING锛屼絾鍏佽缁х画鎵ц feedGlass锛堝畾鏃跺櫒閲嶅璋冪敤锛�", deviceId);
+                    // 鍏佽缁х画鎵ц锛屼笉杩斿洖閿欒
+                } else if ("clearGlass".equals(operation) || "clearPlc".equals(operation) || "clear".equals(operation)) {
+                    // 娓呴櫎鎿嶄綔搴旇鍏佽鍦ㄤ换浣曠姸鎬佷笅鎵ц锛屽洜涓哄叾鐩殑灏辨槸閲嶇疆璁惧鐘舵��
+                    log.debug("杞﹁締 {} 褰撳墠鐘舵�佷负 {}锛屼絾鍏佽鎵ц娓呴櫎鎿嶄綔 {}", deviceId, status.getState(), operation);
                     // 鍏佽缁х画鎵ц锛屼笉杩斿洖閿欒
                 } else {
                     return DevicePlcVO.OperationResult.builder()
@@ -1356,6 +1364,25 @@
                         .build();
             }
             
+            // 鏋勫缓褰撳墠MES鏁版嵁绛惧悕锛岀敤浜庡垽鏂槸鍚︿负宸茬‘璁や絾鏈浣嶇殑鏃т换鍔�
+            String mesSignature = buildMesSignature(mesData);
+            CompletedMesRecord completedRecord = lastCompletedMesRecords.get(deviceId);
+            if (completedRecord != null
+                    && mesSignature.equals(completedRecord.signature)) {
+                Integer mesConfirm = parseInteger(mesData.get("mesConfirm"));
+                if (mesConfirm != null && mesConfirm == 1) {
+                    Map<String, Object> waitData = new HashMap<>();
+                    waitData.put("completed", true);
+                    waitData.put("waiting", true);
+                    waitData.put("waitingReason", "mesNotReset");
+                    return DevicePlcVO.OperationResult.builder()
+                            .success(true)
+                            .message("MES宸茬‘璁ゅ畬鎴愪絾鏈浣嶏紙mesSend/mesConfirm锛夛紝绛夊緟澶嶄綅鍚庡啀鎺ユ敹鏂颁换鍔�")
+                            .data(waitData)
+                            .build();
+                }
+            }
+            
             // mesSend=1锛岃褰曟棩蹇�
             log.info("妫�娴嬪埌mesSend=1锛屽紑濮嬭鍙朚ES浠诲姟淇℃伅: deviceId={}", deviceId);
             
@@ -1453,6 +1480,7 @@
             taskInfo.cartime = timeCalc.cartime;
             taskInfo.createdTime = System.currentTimeMillis();
             taskInfo.isOutbound = isOutbound;
+            taskInfo.mesSignature = mesSignature;
             
             // 浠庨厤缃腑璇诲彇鐮存崯鐜荤拑绱㈠紩锛堢敤浜庢祴璇曞満鏅級
             // 閰嶇疆鏍煎紡锛歜rokenGlassIndices: [0, 2] 琛ㄧず绗�1涓拰绗�3涓幓鐠冨簲璇ョ牬鎹�
@@ -2075,9 +2103,14 @@
                 data.put("completed", false);
                 data.put("waiting", true);
                 data.put("waitingReason", "waitingReport");
+                String detail = taskInfo.currentStepDesc;
+                String message = "澶ц溅浠诲姟鎵ц涓紝灏氭湭姹囨姤锛屾棤闇�妫�鏌ョ‘璁�";
+                if (detail != null && !detail.isEmpty()) {
+                    message = detail + "锛�" + message;
+                }
                 return DevicePlcVO.OperationResult.builder()
                         .success(true)
-                        .message("澶ц溅浠诲姟鎵ц涓紝灏氭湭姹囨姤锛屾棤闇�妫�鏌ョ‘璁�")
+                        .message(message)
                         .data(data)
                         .build();
             }
@@ -2118,6 +2151,10 @@
             if (completed) {
                 // MES宸茬‘璁わ紝娓呯┖state鍜屾眹鎶ュ瓧
                 clearTaskStates(deviceConfig, serializer);
+
+                // 璁板綍宸插畬鎴愮殑浠诲姟绛惧悕锛岄伩鍏峂ES鏈浣嶆椂琚噸澶嶆媺璧�
+                lastCompletedMesRecords.put(deviceId,
+                        new CompletedMesRecord(taskInfo.mesSignature, System.currentTimeMillis()));
 
                 // 浠诲姟瀹屾垚锛屾仮澶嶄负绌洪棽鐘舵��
                 statusManager.updateVehicleStatus(
@@ -2321,6 +2358,20 @@
         List<Integer> brokenGlassIndices = null; // 鏍囪涓虹牬鎹熺殑鐜荤拑绱㈠紩鍒楄〃锛�0-based锛岀敤浜庢祴璇曞満鏅級
         Long mesConfirmStartTime = null; // MES纭寮�濮嬬瓑寰呯殑鏃堕棿锛堢敤浜庤秴鏃舵娴嬶級
         String currentStepDesc = null; // 褰撳墠姝ラ鎻忚堪锛堢敤浜庢樉绀鸿缁嗙殑鎵ц鐘舵�侊級
+        String mesSignature = null; // MES鏁版嵁绛惧悕锛岀敤浜庨伩鍏嶆湭澶嶄綅鏃堕噸澶嶆媺璧�
+    }
+
+    /**
+     * 璁板綍宸插畬鎴愪絾MES鏈浣嶇殑浠诲姟淇℃伅
+     */
+    private static class CompletedMesRecord {
+        final String signature;
+        final long completedAt;
+
+        CompletedMesRecord(String signature, long completedAt) {
+            this.signature = signature;
+            this.completedAt = completedAt;
+        }
     }
 
     /**
@@ -2399,5 +2450,27 @@
             log.warn("娓呯┖澶ц溅state瀛楁澶辫触: deviceId={}, error={}", deviceConfig != null ? deviceConfig.getId() : "null", e.getMessage());
         }
     }
+
+    /**
+     * 灏哅ES鏁版嵁鏋勯�犳垚绛惧悕瀛楃涓诧紝鐢ㄤ簬璇嗗埆鏄惁涓哄悓涓�鎵规浠诲姟
+     */
+    private String buildMesSignature(Map<String, Object> mesData) {
+        if (mesData == null || mesData.isEmpty()) {
+            return "empty";
+        }
+        StringBuilder sb = new StringBuilder();
+        sb.append("mesSend=").append(mesData.getOrDefault("mesSend", ""))
+                .append(";mesConfirm=").append(mesData.getOrDefault("mesConfirm", ""));
+        for (int i = 1; i <= 6; i++) {
+            sb.append(";g").append(i).append("=")
+                    .append(mesData.getOrDefault("mesGlassId" + i, ""))
+                    .append(",s").append(mesData.getOrDefault("start" + i, ""))
+                    .append(",t").append(mesData.getOrDefault("target" + i, ""))
+                    .append(",w").append(mesData.getOrDefault("mesWidth" + i, ""))
+                    .append(",h").append(mesData.getOrDefault("mesHeight" + i, ""))
+                    .append(",th").append(mesData.getOrDefault("mesThickness" + i, ""));
+        }
+        return sb.toString();
+    }
 }
 

--
Gitblit v1.8.0