From 463b9e4b68b8ab62a11c6985081fd5d62692cc79 Mon Sep 17 00:00:00 2001
From: cpT <1@123>
Date: 星期四, 29 一月 2026 19:42:07 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/plugin/NormalProcess.java                |    8 ----
 src/main/java/com/zy/core/plugin/XiaosongProcess.java              |    8 ----
 src/main/java/com/zy/core/network/ZyStationConnectDriver.java      |   18 ++++++++
 src/main/java/com/zy/core/network/real/ZyStationV3RealConnect.java |    3 +
 src/main/java/com/zy/core/utils/WmsOperateUtils.java               |    2 
 src/main/java/com/zy/core/enums/RedisKeyType.java                  |    2 +
 src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java  |   29 ++++++++++++--
 7 files changed, 47 insertions(+), 23 deletions(-)

diff --git a/src/main/java/com/zy/core/enums/RedisKeyType.java b/src/main/java/com/zy/core/enums/RedisKeyType.java
index 3dcf3ce..88281e4 100644
--- a/src/main/java/com/zy/core/enums/RedisKeyType.java
+++ b/src/main/java/com/zy/core/enums/RedisKeyType.java
@@ -10,6 +10,7 @@
     LIFT_FLAG("lift_"),
 
     DUAL_CRN_COMMAND_("dual_crn_command_"),
+    DUAL_CRN_COMMAND_STATION_TASK_NO("dual_crn_command_station_task_no_"),
 
     QUEUE_CRN("queue_crn_"),
     QUEUE_DUAL_CRN("queue_dual_crn_"),
@@ -49,6 +50,7 @@
     CHECK_SHALLOW_LOC_STATUS_LIMIT("check_shallow_loc_status_limit_"),
     GENERATE_ENABLE_IN_STATION_DATA_LIMIT("generate_enable_in_station_data_limit_"),
     GENERATE_STATION_BACK_LIMIT("generate_station_back_limit_"),
+    STATION_EXECUTE_COMMAND_LOCK("station_execute_command_lock"),
 
     DUAL_CRN_PICK_WAIT_NEXT_TASK("dual_crn_pick_wait_next_task_"),
     DUAL_CRN_OUT_TASK_STATION_INFO("dual_crn_out_task_station_info_"),
diff --git a/src/main/java/com/zy/core/network/ZyStationConnectDriver.java b/src/main/java/com/zy/core/network/ZyStationConnectDriver.java
index 78be50b..59d0d1b 100644
--- a/src/main/java/com/zy/core/network/ZyStationConnectDriver.java
+++ b/src/main/java/com/zy/core/network/ZyStationConnectDriver.java
@@ -3,6 +3,7 @@
 import com.zy.asrs.entity.DeviceConfig;
 import com.zy.common.utils.RedisUtil;
 import com.zy.core.ThreadHandler;
+import com.zy.core.enums.RedisKeyType;
 import com.zy.core.model.CommandResponse;
 import com.zy.core.model.command.StationCommand;
 import com.zy.core.network.api.ZyStationConnectApi;
@@ -114,7 +115,22 @@
     }
 
     public CommandResponse sendCommand(StationCommand command) {
-        return zyStationConnectApi.sendCommand(deviceConfig.getDeviceNo(), command);
+        while (true) {
+            Object lock = redisUtil.get(RedisKeyType.STATION_EXECUTE_COMMAND_LOCK.key);
+            if(lock != null) {
+                try {
+                    Thread.sleep(500);
+                }catch (Exception e) {
+                    e.printStackTrace();
+                }
+            }else {
+                redisUtil.set(RedisKeyType.STATION_EXECUTE_COMMAND_LOCK.key, "lock", 60 * 5);
+                break;
+            }
+        }
+        CommandResponse commandResponse = zyStationConnectApi.sendCommand(deviceConfig.getDeviceNo(), command);
+        redisUtil.del(RedisKeyType.STATION_EXECUTE_COMMAND_LOCK.key);
+        return commandResponse;
     }
 
     public CommandResponse sendOriginCommand(String address, short[] data) {
diff --git a/src/main/java/com/zy/core/network/real/ZyStationV3RealConnect.java b/src/main/java/com/zy/core/network/real/ZyStationV3RealConnect.java
index 56283bd..a3ba391 100644
--- a/src/main/java/com/zy/core/network/real/ZyStationV3RealConnect.java
+++ b/src/main/java/com/zy/core/network/real/ZyStationV3RealConnect.java
@@ -15,6 +15,7 @@
 import com.zy.common.utils.RedisUtil;
 import com.zy.core.News;
 import com.zy.core.cache.OutputQueue;
+import com.zy.core.enums.RedisKeyType;
 import com.zy.core.enums.StationCommandType;
 import com.zy.core.model.CommandResponse;
 import com.zy.core.model.StationObjModel;
@@ -315,7 +316,7 @@
     }
 
     @Override
-    public CommandResponse sendOriginCommand(String address, short[] data) {
+    public synchronized CommandResponse sendOriginCommand(String address, short[] data) {
         CommandResponse commandResponse = new CommandResponse(false);
         if (null == data || data.length == 0) {
             commandResponse.setMessage("鏁版嵁涓虹┖");
diff --git a/src/main/java/com/zy/core/plugin/NormalProcess.java b/src/main/java/com/zy/core/plugin/NormalProcess.java
index 77541c8..2154359 100644
--- a/src/main/java/com/zy/core/plugin/NormalProcess.java
+++ b/src/main/java/com/zy/core/plugin/NormalProcess.java
@@ -171,14 +171,6 @@
                                 taskParam.setTaskPri(dto.getTaskPri());
                                 taskParam.setBarcode(barcode);
                                 WrkMast wrkMast = commonService.createInTask(taskParam);
-
-                                StationCommand command = stationThread.getCommand(StationCommandType.WRITE_INFO,
-                                        wrkMast.getWrkNo(), stationId, stationId, 0);
-                                if (command == null) {
-                                    News.taskInfo(wrkMast.getWrkNo(), "鑾峰彇杈撻�佺嚎鍛戒护澶辫触");
-                                    continue;
-                                }
-                                MessageQueue.offer(SlaveType.Devp, basDevp.getDevpNo(), new Task(2, command));
                                 stationProtocol.setSystemWarning("");
                             } else {
                                 // 鎺ュ彛杩斿洖闈�200锛岄噸鏂板彂璧疯姹�
diff --git a/src/main/java/com/zy/core/plugin/XiaosongProcess.java b/src/main/java/com/zy/core/plugin/XiaosongProcess.java
index f208869..87a8091 100644
--- a/src/main/java/com/zy/core/plugin/XiaosongProcess.java
+++ b/src/main/java/com/zy/core/plugin/XiaosongProcess.java
@@ -181,14 +181,6 @@
                                 taskParam.setTaskPri(dto.getTaskPri());
                                 taskParam.setBarcode(barcode);
                                 WrkMast wrkMast = commonService.createInTask(taskParam);
-
-                                StationCommand command = stationThread.getCommand(StationCommandType.WRITE_INFO,
-                                        wrkMast.getWrkNo(), stationId, stationId, 0);
-                                if (command == null) {
-                                    News.taskInfo(wrkMast.getWrkNo(), "鑾峰彇杈撻�佺嚎鍛戒护澶辫触");
-                                    continue;
-                                }
-                                MessageQueue.offer(SlaveType.Devp, basDevp.getDevpNo(), new Task(2, command));
                                 stationProtocol.setSystemWarning("");
                             } else {
                                 // 鎺ュ彛杩斿洖闈�200锛岄噸鏂板彂璧疯姹�
diff --git a/src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java b/src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java
index 4917e58..7bf7e62 100644
--- a/src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java
+++ b/src/main/java/com/zy/core/thread/impl/ZySiemensDualCrnThread.java
@@ -92,6 +92,7 @@
                         map.put("commands", commandList);
                         map.put("idx", 1);
                         redisUtil.set(RedisKeyType.DUAL_CRN_COMMAND_.key + command.getTaskNo(), JSON.toJSONString(map, SerializerFeature.DisableCircularReferenceDetect), 60 * 60 * 24);
+                        redisUtil.set(RedisKeyType.DUAL_CRN_COMMAND_STATION_TASK_NO.key + crnProtocol.getCrnNo() + "_" + command.getStation(), command.getTaskNo(), 60 * 60 * 24);
                         sendCommand(command);
                     } else if (step == 3) {
                         sendCommand((DualCrnCommand) task.getData());
@@ -123,8 +124,18 @@
                         }
                     }
 
-                    if(crnProtocol.getTaskNo() > 0 && crnProtocol.getStatus().equals(DualCrnStatusType.FETCH_COMPLETE.id)) {
-                        Integer taskNo = crnProtocol.getTaskNo();
+                    if(crnProtocol.getTaskNo() == 0 && crnProtocol.getStatus().equals(DualCrnStatusType.FETCH_COMPLETE.id)) {
+                        Integer taskNo = null;
+                        Object stationObj = redisUtil.get(RedisKeyType.DUAL_CRN_COMMAND_STATION_TASK_NO.key + crnProtocol.getCrnNo() + "_" + 1);
+                        if(stationObj != null) {
+                            taskNo = Integer.parseInt(String.valueOf(stationObj));
+                        }
+
+                        if (taskNo == null) {
+                            News.error("鍙屽伐浣嶅爢鍨涙満锛屽伐浣�1绌洪棽绛夊緟涓嬪彂鍛戒护锛屼絾鏈壘鍒板伐浣滃彿銆傚爢鍨涙満鍙�={}", crnProtocol.getCrnNo());
+                            continue;
+                        }
+
                         Object commandObj = redisUtil.get(RedisKeyType.DUAL_CRN_COMMAND_.key + taskNo);
                         if (commandObj == null) {
                             News.error("鍙屽伐浣嶅爢鍨涙満锛屽伐浣�1绌洪棽绛夊緟涓嬪彂鍛戒护锛屼絾鏈壘鍒板懡浠ゃ�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crnProtocol.getCrnNo(), taskNo);
@@ -181,8 +192,18 @@
                         redisUtil.set(RedisKeyType.DUAL_CRN_COMMAND_.key + taskNo, commandMap.toJSONString(), 60 * 60 * 24);
                     }
 
-                    if(crnProtocol.getTaskNoTwo() > 0 && crnProtocol.getStatusTwo() == DualCrnStatusType.IDLE.id) {
-                        Integer taskNo = crnProtocol.getTaskNoTwo();
+                    if(crnProtocol.getTaskNoTwo() == 0 && crnProtocol.getStatusTwo().equals(DualCrnStatusType.FETCH_COMPLETE.id)) {
+                        Integer taskNo = null;
+                        Object stationObj = redisUtil.get(RedisKeyType.DUAL_CRN_COMMAND_STATION_TASK_NO.key + crnProtocol.getCrnNo() + "_" + 2);
+                        if(stationObj != null) {
+                            taskNo = Integer.parseInt(String.valueOf(stationObj));
+                        }
+
+                        if (taskNo == null) {
+                            News.error("鍙屽伐浣嶅爢鍨涙満锛屽伐浣�1绌洪棽绛夊緟涓嬪彂鍛戒护锛屼絾鏈壘鍒板伐浣滃彿銆傚爢鍨涙満鍙�={}", crnProtocol.getCrnNo());
+                            continue;
+                        }
+
                         Object commandObj = redisUtil.get(RedisKeyType.DUAL_CRN_COMMAND_.key + taskNo);
                         if (commandObj == null) {
                             News.error("鍙屽伐浣嶅爢鍨涙満锛屽伐浣�2绌洪棽绛夊緟涓嬪彂鍛戒护锛屼絾鏈壘鍒板懡浠ゃ�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crnProtocol.getCrnNo(), taskNo);
diff --git a/src/main/java/com/zy/core/utils/WmsOperateUtils.java b/src/main/java/com/zy/core/utils/WmsOperateUtils.java
index 42e682a..4ef1979 100644
--- a/src/main/java/com/zy/core/utils/WmsOperateUtils.java
+++ b/src/main/java/com/zy/core/utils/WmsOperateUtils.java
@@ -93,7 +93,7 @@
 
             requestParam.put("barcode", barcode);
             requestParam.put("sourceStaNo", stationNo);
-            requestParam.put("locType1", locType1);
+            requestParam.put("locType1", locType1 == null ? 1 : locType1);
             requestParam.put("row", Utils.getInTaskEnableRow(sourceStaNo));
 
             response = new HttpHandler.Builder()

--
Gitblit v1.9.1