From ea51b55feb73883040ed8a87b5a4aeb0bf94bb5e Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期一, 15 十二月 2025 17:02:27 +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 b77deae..5ae4704 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);
@@ -2040,6 +2040,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()
@@ -2149,6 +2150,78 @@
             data.put("completed", completed);
 
             if (completed) {
+                // MES宸茬‘璁わ紝妫�鏌ユ槸鍚﹁繕鏈夋湭鍑虹墖鐨勭幓鐠冿紙浠呭鍑虹墖浠诲姟锛�
+                boolean hasMoreGlass = false;
+                int completedCount = 0;
+                int totalCount = 0;
+                
+                if (taskInfo.isOutbound && params != null) {
+                    // 浠嶵askExecutionContext涓幏鍙栧凡鍑虹墖鐨勭幓鐠僆D鍒楄〃鍜屽垵濮嬬幓鐠僆D鍒楄〃
+                    Object contextObj = params.get("_taskContext");
+                    if (contextObj instanceof com.mes.task.model.TaskExecutionContext) {
+                        com.mes.task.model.TaskExecutionContext context = 
+                                (com.mes.task.model.TaskExecutionContext) contextObj;
+                        
+                        @SuppressWarnings("unchecked")
+                        List<String> initialGlassIds = (List<String>) context.getSharedData().get("initialGlassIds");
+                        @SuppressWarnings("unchecked")
+                        List<String> outboundGlassIds = (List<String>) context.getSharedData().get("outboundGlassIds");
+                        
+                        if (initialGlassIds != null && !initialGlassIds.isEmpty()) {
+                            totalCount = initialGlassIds.size();
+                            completedCount = (outboundGlassIds != null) ? outboundGlassIds.size() : 0;
+                            
+                            // 妫�鏌ユ槸鍚︽墍鏈夌幓鐠冮兘宸插嚭鐗�
+                            if (outboundGlassIds == null || !outboundGlassIds.containsAll(initialGlassIds)) {
+                                hasMoreGlass = true;
+                            }
+                        }
+                    }
+                }
+                
+                // 濡傛灉杩樻湁鏈嚭鐗囩殑鐜荤拑锛屼繚鎸乸lcRequest=1锛屾竻鐞嗘湰娆′换鍔$姸鎬侊紝绛夊緟涓嬫浜や簰
+                // 杩欐牱绗簩娆′氦浜掓椂锛宑heckMesTask鍙互妫�娴嬪埌mesSend=1锛屽垱寤烘柊浠诲姟锛屽畬鏁村湴璧颁竴閬嶉�昏緫
+                if (hasMoreGlass) {
+                    // 娓呯┖state鍜屾眹鎶ュ瓧锛堟湰娆′氦浜掑凡瀹屾垚锛�
+                    clearTaskStates(deviceConfig, serializer);
+                    
+                    // 娉ㄦ剰锛氫笉璁板綍lastCompletedMesRecords锛屽洜涓鸿繕鏈夋湭鍑虹墖鐨勭幓鐠冿紝浠诲姟鏈湡姝e畬鎴�
+                    // 杩欐牱绗簩娆′氦浜掓椂锛屽嵆浣縈ES鍙戦�佹柊浠诲姟锛堟柊鐨勭幓鐠僆D锛夛紝涔熶笉浼氳璇垽涓烘棫浠诲姟
+                    
+                    // 浠诲姟瀹屾垚锛屾仮澶嶄负绌洪棽鐘舵�侊紙鏈浜や簰宸插畬鎴愶級
+                    statusManager.updateVehicleStatus(
+                            deviceConfig.getDeviceId(), VehicleState.IDLE);
+                    statusManager.clearVehicleTask(deviceConfig.getDeviceId());
+                    
+                    // 绉婚櫎浠诲姟璁板綍锛堟湰娆′氦浜掑凡瀹屾垚锛岀瓑寰呬笅娆′氦浜掓椂鍒涘缓鏂颁换鍔★級
+                    currentTasks.remove(deviceConfig.getDeviceId());
+                    
+                    // 鍋滄浠诲姟鐩戞帶锛堟湰娆′氦浜掑凡瀹屾垚锛�
+                    handleStopTaskMonitor(deviceConfig);
+                    
+                    // 淇濇寔plcRequest=1锛堝彲浠ユ帴鏀朵笅娆′换鍔★級
+                    Map<String, Object> payload = new HashMap<>();
+                    payload.put("plcRequest", 1);
+                    plcDynamicDataService.writePlcData(deviceConfig, payload, serializer);
+                    
+                    log.info("鍑虹墖浠诲姟鏈浜や簰瀹屾垚锛岃繕鏈夋湭鍑虹墖鐨勭幓鐠冿紝绛夊緟涓嬫浜や簰: deviceId={}, completedCount={}, totalCount={}", 
+                            deviceConfig.getDeviceId(), completedCount, totalCount);
+                    
+                    String progressMessage = String.format("鐩墠瀹屾垚鍑虹墖鐜荤拑鏁伴噺%d/%d锛岀瓑寰呬笅娆′氦浜掍换鍔�", completedCount, totalCount);
+                    data.put("completed", false); // 鏍囪涓烘湭瀹屾垚锛屽洜涓鸿繕鏈夋湭鍑虹墖鐨勭幓鐠�
+                    data.put("waiting", true);
+                    data.put("waitingReason", "moreGlassToOutbound");
+                    data.put("completedCount", completedCount);
+                    data.put("totalCount", totalCount);
+                    
+                    return DevicePlcVO.OperationResult.builder()
+                            .success(true)
+                            .message(String.format("鍑虹墖浠诲姟鏈浜や簰瀹屾垚锛歁ES宸茬‘璁わ紙mesConfirm=1锛夛紝宸叉竻绌簊tate鍜屾眹鎶ュ瓧銆�%s銆傚ぇ杞︾┖闂诧紙plcRequest=1锛夛紝绛夊緟MES鍙戦�佷笅娆′换鍔�", progressMessage))
+                            .data(data)
+                            .build();
+                }
+                
+                // 鎵�鏈夌幓鐠冮兘宸插嚭鐗囷紝姝e父瀹屾垚娴佺▼
                 // MES宸茬‘璁わ紝娓呯┖state鍜屾眹鎶ュ瓧
                 clearTaskStates(deviceConfig, serializer);
 

--
Gitblit v1.8.0