From 220841252e98efec8c0972f2672e2647842ea6a1 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 09 十月 2023 10:43:42 +0800
Subject: [PATCH] #检测路径是否可用(fixed)

---
 src/main/java/com/zy/common/utils/NavigateUtils.java  |   12 ++----------
 src/main/java/com/zy/core/thread/NyShuttleThread.java |   16 ++++++++++++----
 2 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java
index 489c168..c086759 100644
--- a/src/main/java/com/zy/common/utils/NavigateUtils.java
+++ b/src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -251,7 +251,7 @@
     /**
      * 妫�娴嬭矾寰勬槸鍚﹀彲鐢�(鍙蛋)
      */
-    public static boolean checkPathIsAvailable(List<NavigateNode> path, Integer shuttleNo, Integer lev) {
+    public static boolean checkPathIsAvailable(List<NavigateNode> path, Integer shuttleNo, Integer lev, List<int[]> whitePoints) {
         NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
         if (shuttleThread == null) {
             return false;
@@ -261,23 +261,15 @@
             return false;
         }
 
-        if (shuttleProtocol.getPoint() == null) {
-            return false;//灏忚溅涓嶅瓨鍦ㄨ妭鐐�
-        }
-
         Integer mapType = NavigationMapType.DFX.id;
         if (shuttleProtocol.getLiftPosition() == 1) {
             //涓嬮檷浣嶇疆
             mapType = NavigationMapType.NORMAL.id;
         }
 
-        NavigateSolution solution = new NavigateSolution(mapType, lev, null, Utils.getShuttlePoints(shuttleNo, lev));//鑾峰彇鏃犵櫧鍚嶅崟鍦板浘(璇ュ湴鍥惧寘鍚皬杞﹀潗鏍�)
+        NavigateSolution solution = new NavigateSolution(mapType, lev, whitePoints, Utils.getShuttlePoints(shuttleNo, lev));//鑾峰彇鏃犵櫧鍚嶅崟鍦板浘(璇ュ湴鍥惧寘鍚皬杞﹀潗鏍�)
         int[][] map = solution.map;
         for (NavigateNode node : path) {
-            if (shuttleProtocol.getPoint().getX() == node.getX() && shuttleProtocol.getPoint().getY() == node.getY()) {
-                continue;//灏忚溅鍧愭爣鍜屽綋鍓嶆娴嬪潗鏍囩浉鍚岋紝鐩存帴璺宠繃锛屼笉妫�娴嬪皬杞︽墍澶勫綋鍓嶅潗鏍�
-            }
-
             int value = map[node.getX()][node.getY()];
             if (value != 0 && value != 3 && value != 5) {//姣嶈建閬�3銆佸瓙杞ㄩ亾0銆佸厖鐢垫々5
                 return false;
diff --git a/src/main/java/com/zy/core/thread/NyShuttleThread.java b/src/main/java/com/zy/core/thread/NyShuttleThread.java
index 1ba299f..23a86ea 100644
--- a/src/main/java/com/zy/core/thread/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/NyShuttleThread.java
@@ -370,6 +370,7 @@
         }
 
         WrkMastMapper wrkMastMapper = SpringUtils.getBean(WrkMastMapper.class);
+        WrkMast wrkMast = wrkMastMapper.selectByWorkNo(wrkNo.intValue());
 
         Object o = redisUtil.get("shuttle_wrk_no_" + wrkNo);
         if (o == null) {
@@ -465,8 +466,15 @@
         }
 
         if (command.getRequest().getBody().get("requestType").equals("move")) {
+            ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆鑺傜偣鐨勭櫧鍚嶅崟
+            if (wrkMast != null && (wrkMast.getIoType() > 100 && wrkMast.getIoType() < 200)) {
+                //鍑哄簱浠诲姟锛屼笉妫�娴嬮鑺傜偣
+                int[] startArr = NavigatePositionConvert.positionToXY(wrkMast.getSourceLocNo());//寮�濮嬭妭鐐�
+                whiteList.add(startArr);
+            }
+
             //妫�娴嬭矾寰勬槸鍚﹀彲琛岃蛋
-            if (!checkPath(command.getNodes(), nextNodes, redisCommand)) {
+            if (!checkPath(command.getNodes(), nextNodes, whiteList)) {
                 return false;
             }
 
@@ -636,17 +644,17 @@
      * 妫�娴嬭矾寰勬槸鍚﹀彲琛岃蛋
      * 濡傛灉璺緞涓虹洰鏍囧簱浣嶏紝浣嗕笉鍙璧帮紝绯荤粺灏嗗皾璇曢噸鏂拌绠楄矾寰�
      */
-    private boolean checkPath(List<NavigateNode> currentNodes, List<NavigateNode> nextNodes, ShuttleRedisCommand redisCommand) {
+    private boolean checkPath(List<NavigateNode> currentNodes, List<NavigateNode> nextNodes, List<int[]> whitePoints) {
         //妫�娴嬭矾寰勬槸鍚﹀彲琛岃蛋(妫�鏌ヨ矾寰勯攣瀹氱姸鎬侊紝妫�娴嬭矾寰勬槸鍚︽湁鍏朵粬灏忚溅)
         //妫�娴嬪綋鍓嶈璧拌矾寰勶紝鍜屼笅涓�姝ヨ矾寰�
-        boolean checkPathIsAvailable = NavigateUtils.checkPathIsAvailable(currentNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
+        boolean checkPathIsAvailable = NavigateUtils.checkPathIsAvailable(currentNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo()), whitePoints);
         if (nextNodes == null) {
             if (checkPathIsAvailable) {
                 return true;//鍙璧�
             }
             return false;
         }else {
-            boolean checkPathIsAvailable2 = NavigateUtils.checkPathIsAvailable(nextNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
+            boolean checkPathIsAvailable2 = NavigateUtils.checkPathIsAvailable(nextNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo()), whitePoints);
             if (checkPathIsAvailable && checkPathIsAvailable2) {
                 return true;//鍙璧�
             }

--
Gitblit v1.9.1