From 628aa6a42e587e9f337e213f87f922fc2ab2af02 Mon Sep 17 00:00:00 2001
From: huang <1532065656@qq.com>
Date: 星期二, 02 十二月 2025 17:00:39 +0800
Subject: [PATCH] 修改卧转立扫码到卧转立任务流转,卧转立判断玻璃超时时间

---
 mes-processes/mes-plcSend/src/main/java/com/mes/interaction/workstation/transfer/handler/HorizontalTransferLogicHandler.java |   56 +++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 47 insertions(+), 9 deletions(-)

diff --git a/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/workstation/transfer/handler/HorizontalTransferLogicHandler.java b/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/workstation/transfer/handler/HorizontalTransferLogicHandler.java
index 85b9dc3..c942e41 100644
--- a/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/workstation/transfer/handler/HorizontalTransferLogicHandler.java
+++ b/mes-processes/mes-plcSend/src/main/java/com/mes/interaction/workstation/transfer/handler/HorizontalTransferLogicHandler.java
@@ -83,7 +83,9 @@
             switch (operation) {
                 case "checkAndProcess":
                 case "process":
-                    return handleCheckAndProcess(deviceConfig, config, logicParams);
+                    // 杩欓噷蹇呴』鎶� params 浼犺繘鍘伙紝浠ヤ究鍦ㄥ璁惧浠诲姟娴佺▼涓�
+                    // 鑳藉閫氳繃 _taskContext 灏嗗崸杞珛杈撳嚭鐨勭幓鐠僆D鍐欏叆浠诲姟涓婁笅鏂�
+                    return handleCheckAndProcess(deviceConfig, config, logicParams, params);
                 case "startMonitor":
                     return handleStartMonitor(deviceConfig, config, logicParams);
                 case "stopMonitor":
@@ -109,7 +111,8 @@
     private DevicePlcVO.OperationResult handleCheckAndProcess(
             DeviceConfig deviceConfig,
             WorkstationLogicConfig config,
-            Map<String, Object> logicParams) {
+            Map<String, Object> logicParams,
+            Map<String, Object> params) {
         
         String deviceId = deviceConfig.getDeviceId();
         EnhancedS7Serializer serializer = s7SerializerProvider.getSerializer(deviceConfig);
@@ -129,9 +132,13 @@
             log.info("鏌ヨ鍒版渶杩戞壂鐮佺殑鐜荤拑: deviceId={}, count={}", 
                     deviceId, recentGlasses.size());
 
-            // 2. 鏇存柊缂撳啿闃熷垪鍜屾渶鍚庢壂鐮佹椂闂�
-            updateBuffer(deviceId, recentGlasses);
-            lastScanTime.put(deviceId, new AtomicLong(System.currentTimeMillis()));
+            // 2. 鏇存柊缂撳啿闃熷垪锛涗粎鍦ㄦ湁鈥滄柊鐜荤拑鈥濆姞鍏ョ紦鍐叉椂鎵嶆洿鏂版渶鍚庢壂鐮佹椂闂�
+            boolean hasNewGlass = updateBuffer(deviceId, recentGlasses);
+            if (hasNewGlass) {
+                lastScanTime
+                        .computeIfAbsent(deviceId, k -> new AtomicLong())
+                        .set(System.currentTimeMillis());
+            }
 
             // 3. 妫�鏌ユ槸鍚﹂渶瑕佺珛鍗冲鐞嗭紙瀹归噺宸叉弧鎴�30s鍐呮棤鏂扮幓鐠冿級
             List<GlassBufferItem> buffer = glassBuffer.get(deviceId);
@@ -162,8 +169,34 @@
                 return writeResult;
             }
 
-            // 7. 浠庣紦鍐查槦鍒椾腑绉婚櫎宸插鐞嗙殑鐜荤拑
+            // 鍗ц浆绔嬫壒娆″凡鎴愬姛鍐欏叆PLC锛屽皢鏈壒娆$幓鐠僆D鍐欏叆浠诲姟涓婁笅鏂囷紝渚涘ぇ杞﹁繘鐗囦娇鐢�
+            try {
+                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> batchGlassIds = batch.stream()
+                                .map(GlassInfo::getGlassId)
+                                .filter(Objects::nonNull)
+                                .collect(Collectors.toList());
+                        if (!batchGlassIds.isEmpty()) {
+                            ctx.getSharedData().put("transferReadyGlassIds",
+                                    new java.util.ArrayList<>(batchGlassIds));
+                            log.info("鍗ц浆绔嬪凡杈撳嚭鎵规鐜荤拑鍒颁换鍔′笂涓嬫枃: deviceId={}, glassIds={}",
+                                    deviceConfig.getId(), batchGlassIds);
+                        }
+                    }
+                }
+            } catch (Exception e) {
+                log.warn("鍗ц浆绔嬪啓鍏ヤ换鍔′笂涓嬫枃transferReadyGlassIds澶辫触: deviceId={}", deviceConfig.getId(), e);
+            }
+
+            // 7. 浠庣紦鍐查槦鍒椾腑绉婚櫎宸插鐞嗙殑鐜荤拑骞舵洿鏂扮姸鎬�
             removeProcessedGlasses(deviceId, batch);
+            glassInfoService.updateGlassStatus(
+                    batch.stream().map(GlassInfo::getGlassId).collect(Collectors.toList()),
+                    GlassInfo.Status.PROCESSED);
 
             String msg = String.format("鎵规宸插啓鍏LC: glassCount=%d, glassIds=%s", 
                     batch.size(), 
@@ -197,7 +230,7 @@
             Date twoMinutesAgo = new Date(System.currentTimeMillis() - 120000);
             
             LambdaQueryWrapper<GlassInfo> wrapper = new LambdaQueryWrapper<>();
-            wrapper.eq(GlassInfo::getStatus, GlassInfo.Status.ACTIVE)
+            wrapper.in(GlassInfo::getStatus, GlassInfo.Status.PENDING, GlassInfo.Status.ACTIVE)
                    .ge(GlassInfo::getCreatedTime, twoMinutesAgo)
                    .orderByDesc(GlassInfo::getCreatedTime)
                    .last("LIMIT 20"); // 闄愬埗鏌ヨ鏁伴噺锛岄伩鍏嶈繃澶�
@@ -223,8 +256,9 @@
 
     /**
      * 鏇存柊缂撳啿闃熷垪
+     * @return 鏄惁鏈夋柊鐨勭幓鐠冭鍔犲叆缂撳啿锛堢敤浜庡垽鏂槸鍚﹀埛鏂� lastScanTime锛�
      */
-    private void updateBuffer(String deviceId, List<GlassInfo> newGlasses) {
+    private boolean updateBuffer(String deviceId, List<GlassInfo> newGlasses) {
         List<GlassBufferItem> buffer = glassBuffer.computeIfAbsent(
                 deviceId, k -> new CopyOnWriteArrayList<>());
         
@@ -232,13 +266,16 @@
                 .map(item -> item.glassInfo.getGlassId())
                 .collect(Collectors.toSet());
         
+        boolean hasNewGlass = false;
         for (GlassInfo glass : newGlasses) {
             if (!existingIds.contains(glass.getGlassId())) {
                 buffer.add(new GlassBufferItem(glass, System.currentTimeMillis()));
+                hasNewGlass = true;
                 log.debug("娣诲姞鐜荤拑鍒扮紦鍐查槦鍒�: deviceId={}, glassId={}", 
                         deviceId, glass.getGlassId());
             }
         }
+        return hasNewGlass;
     }
 
     /**
@@ -375,7 +412,8 @@
         // 鍚姩鐩戞帶浠诲姟
         ScheduledFuture<?> future = monitorExecutor.scheduleWithFixedDelay(() -> {
             try {
-                handleCheckAndProcess(deviceConfig, config, logicParams);
+                // 鐩戞帶浠诲姟涓嶅湪澶氳澶囦换鍔′笂涓嬫枃涓繍琛岋紝杩欓噷涓嶉渶瑕佷紶鍏� params/_taskContext
+                handleCheckAndProcess(deviceConfig, config, logicParams, null);
             } catch (Exception e) {
                 log.error("鐩戞帶浠诲姟鎵ц寮傚父: deviceId={}", deviceId, e);
             }

--
Gitblit v1.8.0