From 04914a9997afbbead6f8adbb9d9c40e05b2edbd1 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期三, 17 十二月 2025 17:04:34 +0800
Subject: [PATCH] 修复调用导入工程失败 重复保存;修复分批出片逻辑

---
 mes-processes/mes-plcSend/src/main/java/com/mes/interaction/vehicle/handler/LoadVehicleLogicHandler.java |   76 ++++++++++++++++++++++++++++++++++----
 1 files changed, 68 insertions(+), 8 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 b77deae..63b1ea4 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
@@ -223,7 +223,7 @@
                     result = handleSetOnlineState(deviceConfig, params, logicParams);
                     break;
                 case "checkMesConfirm":
-                    result = checkMesConfirm(deviceConfig, logicParams);
+                    result = checkMesConfirm(deviceConfig, params, logicParams);
                     break;
                 case "markBroken":
                     result = handleMarkBroken(deviceConfig, params, logicParams);
@@ -1331,10 +1331,22 @@
             MesTaskInfo existingTask = currentTasks.get(deviceId);
             if (existingTask != null) {
                 log.debug("璁惧宸叉湁浠诲姟鍦ㄦ墽琛屼腑锛岃烦杩囨鏌ES浠诲姟: deviceId={}", deviceId);
+                // 浠嶇劧杩斿洖褰撳墠浠诲姟鐨勭幓鐠冨垪琛紝渚涗换鍔″紩鎿庤褰�/瀵硅处鏈壒娆�
+                List<String> batchIds = new ArrayList<>();
+                if (existingTask.glasses != null) {
+                    for (GlassTaskInfo g : existingTask.glasses) {
+                        if (g != null && g.glassId != null && !g.glassId.isEmpty()) {
+                            batchIds.add(g.glassId);
+                        }
+                    }
+                }
                 return DevicePlcVO.OperationResult.builder()
                         .success(true)
                         .message("浠诲姟鎵ц涓紝鏃犻渶閲嶅妫�鏌ES浠诲姟")
-                        .data(Collections.singletonMap("waiting", false))
+                        .data(new HashMap<String, Object>() {{
+                            put("waiting", false);
+                            put("batchGlassIds", batchIds);
+                        }})
                         .build();
             }
             
@@ -1357,6 +1369,7 @@
                 waitData.put("completed", false);
                 waitData.put("waiting", true);
                 waitData.put("waitingReason", "mesSend=0");
+                waitData.put("batchGlassIds", new ArrayList<>());
                 return DevicePlcVO.OperationResult.builder()
                         .success(true)
                         .message("绛夊緟MES鍙戦�佽姹傦紙mesSend=0锛�")
@@ -1500,6 +1513,39 @@
             }
             
             currentTasks.put(deviceId, taskInfo);
+
+            // 濡傛灉鏈夊璁惧浠诲姟涓婁笅鏂囷紝鍒欒褰曟湰娆ES涓嬪彂鐨勭幓鐠僆D鍒楄〃鍒颁笂涓嬫枃锛屼緵鍒嗘壒鏍¢獙浣跨敤
+            if (params != null) {
+                Object ctxObj = params.get("_taskContext");
+                if (ctxObj instanceof com.mes.task.model.TaskExecutionContext) {
+                    com.mes.task.model.TaskExecutionContext ctx = (com.mes.task.model.TaskExecutionContext) ctxObj;
+                    List<String> batchIds = new ArrayList<>();
+                    for (GlassTaskInfo g : glasses) {
+                        if (g != null && g.glassId != null && !g.glassId.isEmpty()) {
+                            batchIds.add(g.glassId);
+                        }
+                    }
+                    // 1. 璁板綍褰撳墠鎵规鐨勭幓鐠僆D
+                    ctx.getSharedData().put("currentMesBatchGlassIds", batchIds);
+                    log.info("璁板綍鏈MES鎵规鐜荤拑鍒楄〃: deviceId={}, batchIds={}", deviceId, batchIds);
+                    
+                    // 2. 鍒濆鍖栨�诲緟鍑虹墖鐜荤拑鍒楄〃锛堜粎绗竴娆″垵濮嬪寲锛屼粠浠诲姟鍙傛暟鑾峰彇锛�
+                    if (!ctx.getSharedData().containsKey("initialGlassIds")) {
+                        // 浠庝换鍔″弬鏁颁腑鑾峰彇鎬诲緟鍑虹墖鐜荤拑ID锛堟牳蹇冿細鎬诲垪琛ㄦ潵鑷换鍔″弬鏁帮紝鑰岄潪MES鎵规锛�
+                        List<String> taskGlassIds = ctx.getParameters().getGlassIds();
+                        if (taskGlassIds != null && !taskGlassIds.isEmpty()) {
+                            ctx.getSharedData().put("initialGlassIds", new ArrayList<>(taskGlassIds));
+                            // 鍒濆鍖栧凡鍑虹墖鍒楄〃涓虹┖
+                            if (!ctx.getSharedData().containsKey("outboundGlassIds")) {
+                                ctx.getSharedData().put("outboundGlassIds", new ArrayList<>());
+                            }
+                            log.info("鍒濆鍖栨�诲緟鍑虹墖鐜荤拑鍒楄〃: deviceId={}, taskGlassIds={}", deviceId, taskGlassIds);
+                        } else {
+                            log.warn("浠诲姟鍙傛暟涓湭鎵惧埌鎬诲緟鍑虹墖鐜荤拑ID鍒楄〃: deviceId={}", deviceId);
+                        }
+                    }
+                }
+            }
             
             // 娓呯┖plcRequest锛堣〃绀哄凡鎺ユ敹浠诲姟锛�
             Map<String, Object> payload = new HashMap<>();
@@ -1537,6 +1583,14 @@
             Map<String, Object> successData = new HashMap<>();
             successData.put("waiting", false);
             successData.put("taskStarted", true);
+            // 灏嗘湰娆ES涓嬪彂鐨勭幓鐠僆D鍒楄〃閫氳繃杩斿洖鍊煎甫鍥烇紙浠诲姟寮曟搸涓嶅啀渚濊禆_taskContext鍐欏叆锛�
+            List<String> batchIdsForReturn = new ArrayList<>();
+            for (GlassTaskInfo g : glasses) {
+                if (g != null && g.glassId != null && !g.glassId.isEmpty()) {
+                    batchIdsForReturn.add(g.glassId);
+                }
+            }
+            successData.put("batchGlassIds", batchIdsForReturn);
             
             return DevicePlcVO.OperationResult.builder()
                     .success(true)
@@ -2040,6 +2094,7 @@
      * 杩斿洖OperationResult.data涓殑 completed 鏍囧織琛ㄧず鏄惁宸茬‘璁ゅ畬鎴�
      */
     public DevicePlcVO.OperationResult checkMesConfirm(DeviceConfig deviceConfig,
+                                                       Map<String, Object> params,
                                                        Map<String, Object> logicParams) {
         if (plcDynamicDataService == null || s7SerializerProvider == null) {
             return DevicePlcVO.OperationResult.builder()
@@ -2062,8 +2117,11 @@
         if (taskInfo == null) {
             log.info("妫�鏌ES纭鏃舵湭鎵惧埌浠诲姟璁板綍锛屽皾璇曡ˉ鍋挎鏌ES浠诲姟: deviceId={}", deviceId);
             try {
+                // 鍏抽敭锛氳ˉ鍋挎鏌ユ椂涔熻閫忎紶params锛堝寘鍚玙taskContext锛夛紝
+                // 鍚﹀垯handleCheckMesTask鏃犳硶鎶婃湰鎵规鐜荤拑ID鍐欏叆currentMesBatchGlassIds锛屼换鍔″紩鎿庢棤娉曠疮鍔犲畬鎴愯繘搴�
+                Map<String, Object> checkParams = params != null ? params : Collections.emptyMap();
                 DevicePlcVO.OperationResult checkResult =
-                        handleCheckMesTask(deviceConfig, Collections.emptyMap(), logicParams);
+                        handleCheckMesTask(deviceConfig, checkParams, logicParams);
                 if (Boolean.TRUE.equals(checkResult.getSuccess())) {
                     taskInfo = currentTasks.get(deviceId);
                     if (taskInfo != null) {
@@ -2149,12 +2207,14 @@
             data.put("completed", completed);
 
             if (completed) {
-                // MES宸茬‘璁わ紝娓呯┖state鍜屾眹鎶ュ瓧
+                // MES宸茬‘璁わ細鏈浜や簰瀹屾垚锛堜笉鍦ㄨ澶囦晶鍒ゆ柇鈥滄槸鍚﹁繕鏈夋洿澶氱幓鐠冣�濓紝鐢变换鍔″紩鎿庣粺涓�缂栨帓锛�
                 clearTaskStates(deviceConfig, serializer);
 
                 // 璁板綍宸插畬鎴愮殑浠诲姟绛惧悕锛岄伩鍏峂ES鏈浣嶆椂琚噸澶嶆媺璧�
-                lastCompletedMesRecords.put(deviceId,
-                        new CompletedMesRecord(taskInfo.mesSignature, System.currentTimeMillis()));
+                if (taskInfo != null && taskInfo.mesSignature != null) {
+                    lastCompletedMesRecords.put(deviceId,
+                            new CompletedMesRecord(taskInfo.mesSignature, System.currentTimeMillis()));
+                }
 
                 // 浠诲姟瀹屾垚锛屾仮澶嶄负绌洪棽鐘舵��
                 statusManager.updateVehicleStatus(
@@ -2173,10 +2233,10 @@
                 plcDynamicDataService.writePlcData(deviceConfig, payload, serializer);
 
                 log.info("MES浠诲姟宸茬‘璁ゅ畬鎴�: deviceId={}", deviceConfig.getDeviceId());
-                String taskType = taskInfo.isOutbound ? "鍑虹墖" : "杩涚墖";
+                String taskType = (taskInfo != null && taskInfo.isOutbound) ? "鍑虹墖" : "杩涚墖";
                 return DevicePlcVO.OperationResult.builder()
                         .success(true)
-                        .message(String.format("%s浠诲姟瀹屾垚锛歁ES宸茬‘璁わ紙mesConfirm=1锛夛紝宸叉竻绌簊tate鍜屾眹鎶ュ瓧锛屽ぇ杞︾┖闂诧紙plcRequest=1锛夛紝鍙互绛夊緟涓嬫浠诲姟", taskType))
+                        .message(String.format("%s浠诲姟浜や簰瀹屾垚锛歁ES宸茬‘璁わ紙mesConfirm=1锛夛紝宸叉竻绌簊tate鍜屾眹鎶ュ瓧锛屽ぇ杞︾┖闂诧紙plcRequest=1锛�", taskType))
                         .data(data)
                         .build();
             }

--
Gitblit v1.8.0