From 63b01db83d9aad8a15276b4236a9a22e4aeef065 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 05 五月 2026 12:30:59 +0800
Subject: [PATCH] # Agent数据分析V3.0.1.7

---
 src/main/java/com/zy/core/thread/impl/ZySiemensCrnV2Thread.java |   86 ++++++++++++++++++++++++++++++-------------
 1 files changed, 60 insertions(+), 26 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/impl/ZySiemensCrnV2Thread.java b/src/main/java/com/zy/core/thread/impl/ZySiemensCrnV2Thread.java
index 2541dd5..b6e6ee3 100644
--- a/src/main/java/com/zy/core/thread/impl/ZySiemensCrnV2Thread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZySiemensCrnV2Thread.java
@@ -12,6 +12,7 @@
 import com.zy.common.utils.RedisUtil;
 import com.zy.core.cache.MessageQueue;
 import com.zy.core.cache.OutputQueue;
+import com.zy.core.enums.CrnModeType;
 import com.zy.core.enums.CrnTaskModeType;
 import com.zy.core.enums.RedisKeyType;
 import com.zy.core.enums.SlaveType;
@@ -22,7 +23,9 @@
 import com.zy.core.network.DeviceConnectPool;
 import com.zy.core.network.ZyCrnV2ConnectDriver;
 import com.zy.core.network.entity.ZyCrnStatusEntity;
+import com.zy.core.service.WrkCommandRollbackService;
 import com.zy.core.thread.CrnThread;
+import com.zy.core.task.DeviceAsyncLogPublisher;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 
@@ -41,10 +44,12 @@
     private ZyCrnV2ConnectDriver zyCrnConnectDriver;
     private CrnProtocol crnProtocol;
     private int deviceLogCollectTime = 200;
+    private final DeviceAsyncLogPublisher deviceAsyncLogPublisher;
 
     public ZySiemensCrnV2Thread(DeviceConfig deviceConfig, RedisUtil redisUtil) {
         this.deviceConfig = deviceConfig;
         this.redisUtil = redisUtil;
+        this.deviceAsyncLogPublisher = SpringUtils.getBean(DeviceAsyncLogPublisher.class);
     }
 
     @Override
@@ -58,7 +63,7 @@
                 try {
                     deviceLogCollectTime = Utils.getDeviceLogCollectTime();
                     readStatus();
-                    Thread.sleep(50);
+                    Thread.sleep(100);
                 } catch (Exception e) {
                     log.error("CrnThread Fail", e);
                 }
@@ -149,6 +154,7 @@
     private void readStatus(){
         ZyCrnStatusEntity crnStatus = zyCrnConnectDriver.getStatus();
         if (crnStatus == null) {
+            crnProtocol.setMode(CrnModeType.NONE);
             OutputQueue.CRN.offer(MessageFormat.format("銆恵0}銆戣鍙栧爢鍨涙満plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort()));
             return;
         }
@@ -163,6 +169,7 @@
         crnProtocol.setWalkPos(crnStatus.getWalkPos());
         crnProtocol.setLoaded(crnStatus.getLoaded());
         crnProtocol.setAlarm(crnStatus.getAlarm());
+        crnProtocol.setLaserValue(crnStatus.getLaserValue());
         crnProtocol.setTemp1(crnStatus.getTemp1());
         crnProtocol.setTemp2(crnStatus.getTemp2());
         crnProtocol.setTemp3(crnStatus.getTemp3());
@@ -195,7 +202,7 @@
             deviceDataLog.setDeviceNo(crnProtocol.getCrnNo());
             deviceDataLog.setCreateTime(new Date());
 
-            redisUtil.set(RedisKeyType.DEVICE_LOG_KEY.key + System.currentTimeMillis(), deviceDataLog, 60 * 60 * 24);
+            deviceAsyncLogPublisher.publishLatest(deviceDataLog);
             //鏇存柊閲囬泦鏃堕棿
             crnProtocol.setDeviceDataLog(System.currentTimeMillis());
         }
@@ -251,14 +258,15 @@
 
     @Override
     public CrnCommand getPickAndPutCommand(String sourceLocNo, String targetLocNo, Integer taskNo, Integer crnNo) {
+        BasCrnp basCrnp = getBasCrnp(crnNo);
         CrnCommand crnCommand = new CrnCommand();
         crnCommand.setCrnNo(crnNo); // 鍫嗗灈鏈虹紪鍙�
         crnCommand.setTaskNo(taskNo); // 宸ヤ綔鍙�
         crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE.id); // 浠诲姟妯″紡:  搴撲綅绉昏浆
-        crnCommand.setSourcePosX(Utils.getRow(sourceLocNo));     // 婧愬簱浣嶆帓
+        crnCommand.setSourcePosX(resolveCommandRow(sourceLocNo, basCrnp));     // 婧愬簱浣嶆帓
         crnCommand.setSourcePosY(Utils.getBay(sourceLocNo));     // 婧愬簱浣嶅垪
         crnCommand.setSourcePosZ(Utils.getLev(sourceLocNo));     // 婧愬簱浣嶅眰
-        crnCommand.setDestinationPosX(Utils.getRow(targetLocNo));     // 鐩爣搴撲綅鎺�
+        crnCommand.setDestinationPosX(resolveCommandRow(targetLocNo, basCrnp));     // 鐩爣搴撲綅鎺�
         crnCommand.setDestinationPosY(Utils.getBay(targetLocNo));     // 鐩爣搴撲綅鍒�
         crnCommand.setDestinationPosZ(Utils.getLev(targetLocNo));     // 鐩爣搴撲綅灞�
         crnCommand.setCommand(1);     // 浠诲姟纭
@@ -267,19 +275,37 @@
 
     @Override
     public CrnCommand getMoveCommand(String targetLocNo, Integer taskNo, Integer crnNo) {
+        Integer targetRow = resolveCommandRow(targetLocNo, crnNo);
         CrnCommand crnCommand = new CrnCommand();
         crnCommand.setCrnNo(crnNo); // 鍫嗗灈鏈虹紪鍙�
         crnCommand.setTaskNo(taskNo); // 宸ヤ綔鍙�
         crnCommand.setAckFinish(0);  // 浠诲姟瀹屾垚纭浣�
         crnCommand.setTaskMode(CrnTaskModeType.CRN_MOVE.id); // 浠诲姟妯″紡:  鍫嗗灈鏈虹Щ鍔�
-        crnCommand.setSourcePosX(Utils.getRow(targetLocNo));     // 鐩爣搴撲綅鎺�
+        crnCommand.setSourcePosX(targetRow);     // 鐩爣搴撲綅鎺�
         crnCommand.setSourcePosY(Utils.getBay(targetLocNo));     // 鐩爣搴撲綅鍒�
         crnCommand.setSourcePosZ(Utils.getLev(targetLocNo));     // 鐩爣搴撲綅灞�
-        crnCommand.setDestinationPosX(Utils.getRow(targetLocNo));     // 鐩爣搴撲綅鎺�
+        crnCommand.setDestinationPosX(targetRow);     // 鐩爣搴撲綅鎺�
         crnCommand.setDestinationPosY(Utils.getBay(targetLocNo));     // 鐩爣搴撲綅鍒�
         crnCommand.setDestinationPosZ(Utils.getLev(targetLocNo));     // 鐩爣搴撲綅灞�
         crnCommand.setCommand(1);     // 浠诲姟纭
         return crnCommand;
+    }
+
+    private Integer resolveCommandRow(String locNo, Integer crnNo) {
+        return resolveCommandRow(locNo, getBasCrnp(crnNo));
+    }
+
+    private Integer resolveCommandRow(String locNo, BasCrnp basCrnp) {
+        Integer locationRow = Utils.getRow(locNo);
+        if (basCrnp == null) {
+            return locationRow;
+        }
+        return basCrnp.getCommandRow(locationRow);
+    }
+
+    private BasCrnp getBasCrnp(Integer crnNo) {
+        BasCrnpService basCrnpService = SpringUtils.getBean(BasCrnpService.class);
+        return basCrnpService.getById(crnNo);
     }
 
     @Override
@@ -307,27 +333,35 @@
             response = zyCrnConnectDriver.sendCommand(command);
             return response;
         } finally {
-            String sourceLocNo = Utils.getLocNo(command.getSourcePosX(), command.getSourcePosY(), command.getSourcePosZ());
-            String targetLocNo = Utils.getLocNo(command.getDestinationPosX(), command.getDestinationPosY(), command.getDestinationPosZ());
-            BasCrnpOptService bean = SpringUtils.getBean(BasCrnpOptService.class);
-            ZyCrnStatusEntity statusEntity = zyCrnConnectDriver.getStatus();
-            BasCrnpOpt basCrnpOpt = new BasCrnpOpt(
-                    command.getTaskNo().intValue(),
-                    command.getCrnNo(),
-                    new Date(),
-                    String.valueOf(command.getTaskMode()),
-                    sourceLocNo,
-                    targetLocNo,
-                    null,
-                    null,
-                    null,
-                    JSON.toJSONString(command),
-                    JSON.toJSONString(statusEntity),
-                    1,
-                    JSON.toJSONString(response)
-            );
-            if (bean != null) {
+            if (command != null) {
+                String sourceLocNo = Utils.getLocNo(command.getSourcePosX(), command.getSourcePosY(), command.getSourcePosZ());
+                String targetLocNo = Utils.getLocNo(command.getDestinationPosX(), command.getDestinationPosY(), command.getDestinationPosZ());
+                BasCrnpOptService bean = SpringUtils.getBean(BasCrnpOptService.class);
+                ZyCrnStatusEntity statusEntity = zyCrnConnectDriver.getStatus();
+                BasCrnpOpt basCrnpOpt = new BasCrnpOpt(
+                        command.getTaskNo(),
+                        command.getCrnNo(),
+                        new Date(),
+                        String.valueOf(command.getTaskMode()),
+                        sourceLocNo,
+                        targetLocNo,
+                        null,
+                        null,
+                        null,
+                        JSON.toJSONString(command),
+                        JSON.toJSONString(statusEntity),
+                        1,
+                        JSON.toJSONString(response)
+                );
                 bean.save(basCrnpOpt);
+                try {
+                    WrkCommandRollbackService rollbackService = SpringUtils.getBean(WrkCommandRollbackService.class);
+                    if (rollbackService != null) {
+                        rollbackService.handleSingleCrnSendResult(command, response, "鍗曞伐浣嶅爢鍨涙満V2");
+                    }
+                } catch (Exception e) {
+                    log.error("澶勭悊鍗曞伐浣峍2鍛戒护涓嬪彂缁撴灉澶辫触, wrkNo={}", command.getTaskNo(), e);
+                }
             }
         }
     }

--
Gitblit v1.9.1