From 2b97e11ec9159f276fa054b080393e38ab69ba9a Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 10 八月 2023 10:57:40 +0800
Subject: [PATCH] 检测路径是否可行走。如果路径为目标库位,但不可行走,系统将尝试重新计算路径

---
 src/main/java/com/zy/core/thread/NyShuttleThread.java          |   43 ++++++++++++++++++++-
 src/main/java/com/zy/common/utils/NavigatePositionConvert.java |   41 ++------------------
 2 files changed, 45 insertions(+), 39 deletions(-)

diff --git a/src/main/java/com/zy/common/utils/NavigatePositionConvert.java b/src/main/java/com/zy/common/utils/NavigatePositionConvert.java
index c3a8435..7c5aa60 100644
--- a/src/main/java/com/zy/common/utils/NavigatePositionConvert.java
+++ b/src/main/java/com/zy/common/utils/NavigatePositionConvert.java
@@ -33,6 +33,11 @@
         return node;
     }
 
+    //璺緞绠楁硶鑺傜偣杞琖CS绯荤粺搴撲綅鍙�
+    public static String nodeToLocNo(NavigateNode node) {
+        return xyzToLocNo(node.getX(), node.getY(), node.getZ());
+    }
+
     //WCS鍧愭爣杞琖CS搴撲綅鍙�
     public static String xyzToLocNo(int x, int y, int z) {
         String locNo = Utils.getLocNo(x, y, z);
@@ -62,42 +67,6 @@
         //鐗涚溂Y杞� => WCS绯荤粺X杞村叕寮�
         int x1 = y - 10;
         return new int[]{x1, y1, z};
-    }
-
-    //xyz杞磋浆鍧愭爣缂栧彿
-    public static Short xyToPosition(int x, int y, int z) {
-        StringBuffer sb = new StringBuffer();
-        if (x < 10) {
-            sb.append("0");
-        }
-        sb.append(x);
-
-        if (y < 10) {
-            sb.append("00");
-        }else if (y < 100) {
-            sb.append("0");
-        }
-        sb.append(y);
-
-        if (z < 10) {
-            sb.append("0");
-        }
-        sb.append(z);
-        String position = sb.toString();//搴撲綅鍙�
-
-        //搴撲綅鍙疯浆灏忚溅浜岀淮鐮�
-        LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
-        LocMast locMast = locMastService.queryByLoc(position);
-        if (locMast == null) {
-            //褰撳墠搴撲綅鍙锋煡涓嶅埌锛屽彲鑳芥槸绔欑偣搴撲綅鍙�
-            BasDevpService basDevpService = SpringUtils.getBean(BasDevpService.class);
-            BasDevp basDevp = basDevpService.queryByLocNo(position);
-            if (basDevp == null) {
-                return null;
-            }
-            return Short.parseShort(basDevp.getQrCodeValue());
-        }
-        return Short.parseShort(locMast.getQrCodeValue());
     }
 
     public static int[] coverPosition(int col,int row) {
diff --git a/src/main/java/com/zy/core/thread/NyShuttleThread.java b/src/main/java/com/zy/core/thread/NyShuttleThread.java
index 73dd3ae..1ab039c 100644
--- a/src/main/java/com/zy/core/thread/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/NyShuttleThread.java
@@ -10,6 +10,7 @@
 
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.NavigateNode;
+import com.zy.common.model.NyShuttleOperaResult;
 import com.zy.common.utils.*;
 import com.zy.core.News;
 import com.zy.core.ThreadHandler;
@@ -306,8 +307,8 @@
         }
 
         ShuttleRedisCommand redisCommand = JSON.parseObject(o.toString(), ShuttleRedisCommand.class);
-        List<NyShuttleHttpCommand> commands = redisCommand.getAssignCommand().getCommands();
         ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();
+        List<NyShuttleHttpCommand> commands = redisCommand.getAssignCommand().getCommands();
         //褰撳墠姝ュ簭
         int commandStep = redisCommand.getCommandStep();
         if (commands.size() == 0) {
@@ -365,7 +366,7 @@
         }
 
         //妫�娴嬭矾寰勬槸鍚﹀彲琛岃蛋
-        if (!checkPath(command.getNodes(), nextNodes)) {
+        if (!checkPath(command.getNodes(), nextNodes, redisCommand)) {
             return false;
         }
 
@@ -554,8 +555,9 @@
 
     /**
      * 妫�娴嬭矾寰勬槸鍚﹀彲琛岃蛋
+     * 濡傛灉璺緞涓虹洰鏍囧簱浣嶏紝浣嗕笉鍙璧帮紝绯荤粺灏嗗皾璇曢噸鏂拌绠楄矾寰�
      */
-    private boolean checkPath(List<NavigateNode> currentNodes, List<NavigateNode> nextNodes) {
+    private boolean checkPath(List<NavigateNode> currentNodes, List<NavigateNode> nextNodes, ShuttleRedisCommand redisCommand) {
         //妫�娴嬭矾寰勬槸鍚﹀彲琛岃蛋(妫�鏌ヨ矾寰勯攣瀹氱姸鎬侊紝妫�娴嬭矾寰勬槸鍚︽湁鍏朵粬灏忚溅)
         //妫�娴嬪綋鍓嶈璧拌矾寰勶紝鍜屼笅涓�姝ヨ矾寰�
         boolean checkPathIsAvailable = NavigateUtils.checkPathIsAvailable(currentNodes, shuttleProtocol.getShuttleNo().intValue(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
@@ -563,6 +565,41 @@
         if (checkPathIsAvailable && checkPathIsAvailable2) {
             return true;//鍙璧�
         }
+
+        ShuttleAssignCommand assignCommand = redisCommand.getAssignCommand();
+        NavigateNode currentTarget = currentNodes.get(currentNodes.size() - 1);
+        String currentLocNo = NavigatePositionConvert.nodeToLocNo(currentTarget);
+        NavigateNode nextTarget = nextNodes.get(nextNodes.size() - 1);
+        String nextLocNo = NavigatePositionConvert.nodeToLocNo(nextTarget);
+        if (assignCommand.getLocNo().equals(currentLocNo) || assignCommand.getLocNo().equals(nextLocNo)) {
+            //褰撳墠璺緞鏈�鍚庝竴涓妭鐐规槸鐩爣搴撲綅锛岃繘琛岃矾寰勬娴嬶紝濡傛灉涓嶅彲琛岃蛋锛岄噸鏂拌绠楄矾寰�
+            //涓嶅彲琛岃蛋锛岄噸鏂拌绠楄矾寰�
+            NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getShuttleNo().intValue(), shuttleProtocol.getTaskNo(), shuttleProtocol.getCurrentLocNo(), assignCommand.getLocNo());
+            if (result == null) {
+                return false;//璺緞璁$畻澶辫触锛屼笉鍙璧�
+            }
+
+            List<NyShuttleHttpCommand> newCommands = result.getCommands();//鏂拌矾寰�
+
+            //褰撳墠姝ュ簭
+            int commandStep = redisCommand.getCommandStep();
+            List<NyShuttleHttpCommand> commands = assignCommand.getCommands();
+
+            commands.remove(commandStep);//绉婚櫎褰撳墠姝ュ簭鎸囦护
+            if (assignCommand.getLocNo().equals(currentLocNo)) {
+                //褰撳墠璺緞锛岄渶瑕佸啀澶氱Щ闄や笅涓�姝ユ寚浠�
+                commands.remove(commandStep + 1);
+            }
+
+            //灏嗘柊璺緞娣诲姞杩涙寚浠ら泦鍚�
+            commands.addAll(commandStep, newCommands);
+            assignCommand.setCommands(commands);
+            redisCommand.setAssignCommand(assignCommand);
+            //浠诲姟鏁版嵁淇濆瓨鍒皉edis
+            redisUtil.set("shuttle_wrk_no_" + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
+            return false;//褰撳墠涓嶅彲琛岃蛋锛岀瓑寰呬笅涓�娆℃墽琛岃蛋鏂拌矾寰�
+        }
+
         return false;//涓嶅彲琛岃蛋
     }
 

--
Gitblit v1.9.1