From db32ffbad65906185ba768a3dc7364337473b1b2 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期日, 27 七月 2025 20:48:14 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java                |    2 +-
 src/main/java/com/zy/common/utils/NavigateMapUtils.java              |    1 -
 src/main/java/com/zy/asrs/task/main/ShuttleTaskExecuteScheduler.java |    2 +-
 src/main/java/com/zy/core/thread/impl/NyShuttleThread.java           |    2 +-
 src/main/java/com/zy/common/utils/ShuttleOperaUtils.java             |    2 +-
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java          |   19 +++++++++++++++++--
 src/main/java/com/zy/core/action/ShuttleAction.java                  |    8 +++++++-
 src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java  |   21 +++++++++++++++++++++
 src/main/java/com/zy/core/thread/TrafficControlThread.java           |    2 ++
 9 files changed, 51 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 3f01cfd..6843a68 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -386,6 +386,13 @@
                 return false;
             }
 
+            //妫�娴嬫槸鍚﹀瓨鍦ㄧЩ鍔ㄤ换鍔�
+            WrkMast moveWorking = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
+            if (moveWorking != null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀瓨鍦ㄧЩ鍔ㄤ换鍔�", wrkMast.getWrkNo());
+                return false;
+            }
+
             ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
             assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
             assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟
@@ -492,6 +499,13 @@
                 return false;
             }
 
+            //妫�娴嬫槸鍚﹀瓨鍦ㄧЩ鍔ㄤ换鍔�
+            WrkMast moveWorking = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
+            if (moveWorking != null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀瓨鍦ㄧЩ鍔ㄤ换鍔�", wrkMast.getWrkNo());
+                return false;
+            }
+
             //妫�娴嬮殰纰嶇墿杞�
             boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
                 add(shuttleProtocol.getShuttleNo());
@@ -506,9 +520,10 @@
             assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟
             assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
             assignCommand.setAuto(true);//鑷姩妯″紡
+            assignCommand.setLocNo(wrkMast.getLocNo());
 
             //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
-            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(wrkMast.getSourceLocNo(), wrkMast.getLocNo(), NavigationMapType.getDfxWithDevice(), assignCommand, shuttleThread);
+            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(wrkMast.getSourceLocNo(), wrkMast.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.DFX), assignCommand, shuttleThread);
             if (commands == null) {
                 News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                 return false;
@@ -1807,7 +1822,7 @@
             assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅
 
             //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠�
-            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.getNormalWithDevice(), assignCommand, shuttleThread);
+            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), assignCommand, shuttleThread);
             if (commands == null) {
                 News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                 return false;//璺緞璁$畻澶辫触
diff --git a/src/main/java/com/zy/asrs/task/main/ShuttleTaskExecuteScheduler.java b/src/main/java/com/zy/asrs/task/main/ShuttleTaskExecuteScheduler.java
index bb208ee..08b9822 100644
--- a/src/main/java/com/zy/asrs/task/main/ShuttleTaskExecuteScheduler.java
+++ b/src/main/java/com/zy/asrs/task/main/ShuttleTaskExecuteScheduler.java
@@ -12,7 +12,7 @@
     private ShuttleTaskUtils shuttleTaskUtils;
 
     @Scheduled(cron = "0/3 * * * * ? ")
-    public void shuttleFinished() {
+    public synchronized void shuttleFinished() {
         //鍥涘悜绌挎杞︿换鍔″畬鎴�
         shuttleTaskUtils.shuttleFinished();
     }
diff --git a/src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java b/src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java
index 82b497c..a048e94 100644
--- a/src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java
+++ b/src/main/java/com/zy/asrs/utils/ShuttleTaskUtils.java
@@ -37,7 +37,7 @@
     /**
      * 鍥涘悜绌挎杞︿换鍔″畬鎴�
      */
-    public void shuttleFinished() {
+    public synchronized void shuttleFinished() {
         try {
             List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
                     .eq("device_type", String.valueOf(SlaveType.Shuttle)));
diff --git a/src/main/java/com/zy/common/utils/NavigateMapUtils.java b/src/main/java/com/zy/common/utils/NavigateMapUtils.java
index 8b043c4..ea621f2 100644
--- a/src/main/java/com/zy/common/utils/NavigateMapUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateMapUtils.java
@@ -96,7 +96,6 @@
                 lockMap.remove(key);
             }
         }
-        lockMap.putAll(lockMap);
         redisUtil.set(RedisKeyType.LOCK_MAP_NODES.key + lev, lockMap);
         return true;
     }
diff --git a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
index 6108c6f..c421287 100644
--- a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
+++ b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
@@ -500,7 +500,7 @@
 
     private boolean is_valid(int[][] map, int x, int y) {
         if (x < 0 || x >= map.length
-                || y < 0 || y >= map[0].length) {
+                || y < 0 || y >= map[1].length) {
             return false;
         }
         // 濡傛灉缁撶偣鐨勪綅缃皬浜�0锛屽垯涓嶅悎娉�
diff --git a/src/main/java/com/zy/core/action/ShuttleAction.java b/src/main/java/com/zy/core/action/ShuttleAction.java
index 2fb9616..d25b6cb 100644
--- a/src/main/java/com/zy/core/action/ShuttleAction.java
+++ b/src/main/java/com/zy/core/action/ShuttleAction.java
@@ -158,6 +158,11 @@
 
         //绉诲姩鍛戒护锛岄攣瀹氳矾寰�
         if (command.getMode() == ShuttleCommandModeType.MOVE.id) {
+            TrafficControlThread trafficControlThread = (TrafficControlThread) SlaveConnection.get(SlaveType.TrafficControl, 1);
+            if (trafficControlThread == null) {
+                return false;
+            }
+
             List<NavigateNode> nodes = JSON.parseArray(JSON.toJSONString(command.getNodes()), NavigateNode.class);
             //鐢宠绠″埗
             boolean apply = applyTrafficControl(commands, nodes, shuttleNo, taskNo);
@@ -178,6 +183,7 @@
             if (!result) {
                 News.error("{} device can't lock path!", shuttleNo);
                 shuttleThread.offerSystemMsg("{} device can't lock path!", shuttleNo);
+                trafficControlThread.trafficReportError(shuttleNo, taskNo);
                 return false;//璺緞閿佸畾澶辫触
             }
         }
@@ -411,11 +417,11 @@
                 return false;
             }
             if (targetPoints.contains(Utils.getRow(currentLocNo) + "-" + Utils.getBay(currentLocNo))) {
-                command.setComplete(true);
                 boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(shuttleProtocol.getCurrentLocNo()), shuttleProtocol.getShuttleNo(), nodes, false);//瑙i攣璺緞
                 if (!result) {
                     return false;//瑙i攣澶辫触
                 }
+                command.setComplete(true);
             }else {
                 return false;
             }
diff --git a/src/main/java/com/zy/core/thread/TrafficControlThread.java b/src/main/java/com/zy/core/thread/TrafficControlThread.java
index 35082eb..3314b13 100644
--- a/src/main/java/com/zy/core/thread/TrafficControlThread.java
+++ b/src/main/java/com/zy/core/thread/TrafficControlThread.java
@@ -22,6 +22,8 @@
 
     boolean trafficReport(List<NavigateNode> nodeList, Integer shuttleNo, Integer taskNo);
 
+    boolean trafficReportError(Integer shuttleNo, Integer taskNo);
+
     boolean cancelTrafficControl(Integer shuttleNo, Integer taskNo);
 
     boolean forceCancelTrafficControl(Integer shuttleNo);
diff --git a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
index 0baeb1e..19af9d7 100644
--- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -942,7 +942,7 @@
             }
 
             ShuttleCommand firstCommand = originCommands.get(0);
-            ShuttleCommand endCommand = originCommands.get(commands.size() - 1);
+            ShuttleCommand endCommand = originCommands.get(originCommands.size() - 1);
 
             if (firstCommand.getMode() != ShuttleCommandModeType.PALLET_LIFT.id) {
                 return false;
diff --git a/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java b/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java
index 9d92ed2..9a3a6de 100644
--- a/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java
+++ b/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java
@@ -36,6 +36,7 @@
     private HashMap<Integer, HashMap<String, List<Integer>>> levNodesMap = null;
 
 
+    private HashMap<Integer,Long> shuttleReportErrorMap = new HashMap<>();
     private HashMap<Integer,Long> pathIdleShuttleMap = new HashMap<>();
     private HashMap<Integer,Long> applyRecordsMap = new HashMap<>();
     private HashMap<String, List<NavigateNode>> taskNodesMap = new HashMap<>();
@@ -597,6 +598,7 @@
 
                     controlDataModel.setTotalNodeList(newTotalNodeList);
                     trafficControlDataList.set(i, controlDataModel);
+                    shuttleReportErrorMap.remove(shuttleNo);
                     return true;
                 }
             }
@@ -605,6 +607,25 @@
     }
 
     @Override
+    public boolean trafficReportError(Integer shuttleNo, Integer taskNo) {
+        ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
+        if (shuttleThread == null) {
+            return false;
+        }
+
+        if(shuttleReportErrorMap.containsKey(shuttleNo)) {
+            Long errorTime = shuttleReportErrorMap.get(shuttleNo);
+            if((System.currentTimeMillis() - errorTime) > 1000 * 10) {
+                shuttleReportErrorMap.remove(shuttleNo);
+                shuttleThread.restartCalcPath();
+            }
+        }else {
+            shuttleReportErrorMap.put(shuttleNo, System.currentTimeMillis());
+        }
+        return true;
+    }
+
+    @Override
     public synchronized boolean cancelTrafficControl(Integer shuttleNo, Integer taskNo) {
         //妫�娴嬭溅瀛愭槸鍚﹀瓨鍦ㄧ鍒�
         for (int i = 0; i < trafficControlDataList.size(); i++) {

--
Gitblit v1.9.1