From 6daf900a09adcca981f620744bf89851654d88e0 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 05 八月 2025 09:58:08 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/common/utils/ShuttleOperaUtils.java |  120 +++++++++++++++++++-----------------------------------------
 1 files changed, 38 insertions(+), 82 deletions(-)

diff --git a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
index 6869199..0b3fd1f 100644
--- a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
+++ b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
@@ -17,7 +17,6 @@
 import com.zy.core.enums.MapNodeType;
 import com.zy.core.enums.ShuttleRunDirection;
 import com.zy.core.enums.SlaveType;
-import com.zy.core.model.ShuttleSlave;
 import com.zy.core.model.command.ShuttleAssignCommand;
 import com.zy.core.model.command.ShuttleCommand;
 import com.zy.core.model.protocol.ShuttleProtocol;
@@ -91,11 +90,14 @@
             lockNode.add(node.clone());
         }
 
+        long startTime = System.currentTimeMillis();
         List<ShuttleCommand> commands = new ArrayList<>();
         //鑾峰彇鍒嗘璺緞
-        ArrayList<ArrayList<NavigateNode>> data = navigateUtils.getSectionPath(nodeList);
+        List<List<NavigateNode>> data = navigateUtils.getSectionPath(nodeList);
+        long endTime = System.currentTimeMillis();
+        News.info("getSection path time:{}", (endTime - startTime));
         //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
-        for (ArrayList<NavigateNode> nodes : data) {
+        for (List<NavigateNode> nodes : data) {
             //寮�濮嬭矾寰�
             NavigateNode startPath = nodes.get(0);
 
@@ -113,74 +115,17 @@
         }
 
         assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist
+        assignCommand.setMapTypes(mapTypes);
 
-        boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(startLocNo), shuttleNo, lockNode, true);//閿佸畾璺緞
-        if (!result) {
-            News.error("{} dash {} can't lock path!", startLocNo, endLocNo);
-            shuttleThread.offerSystemMsg("{} dash {} can't lock path!", startLocNo, endLocNo);
-            return null;//璺緞閿佸畾澶辫触
+        //灏忚溅绉诲姩杩炵画涓嬪彂鎸囦护
+        boolean shuttleMoveCommandsContinuously = false;
+        Config shuttleMoveCommandsContinuouslyConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "shuttleMoveCommandsContinuously"));
+        if (shuttleMoveCommandsContinuouslyConfig != null) {
+            if (shuttleMoveCommandsContinuouslyConfig.getValue().equals("Y")) {
+                shuttleMoveCommandsContinuously = true;
+            }
         }
-        return commands;
-    }
-
-    public synchronized List<ShuttleCommand> shuttleInOutLiftCommand(String startLocNo, String endLocNo, List<NavigationMapType> mapTypes, ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread) {
-        NavigateNode startNode = NavigatePositionConvert.locNoToNode(startLocNo);
-        NavigateNode endNode = NavigatePositionConvert.locNoToNode(endLocNo);
-        List<NavigateNode> unlockPath = new ArrayList<>();
-        unlockPath.add(startNode);
-        unlockPath.add(endNode);
-
-        ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
-        if (shuttleProtocol == null) {
-            return null;
-        }
-
-        Integer shuttleNo = shuttleProtocol.getShuttleNo();
-        //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹�/瑙i攣
-        boolean lockResult = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(endLocNo), shuttleProtocol.getShuttleNo(), unlockPath, false);//鎵�浣跨敤鐨勮矾寰勮繘琛岃В閿�
-        if (!lockResult) {
-            News.error("{} dash {} can't find unlock path!", startLocNo, endLocNo);
-            shuttleThread.offerSystemMsg("{} dash {} can't find unlock path!", startLocNo, endLocNo);
-            return null;//瑙i攣澶辫触
-        }
-
-        //鑾峰彇灏忚溅绉诲姩閫熷害
-        Integer runSpeed = Optional.ofNullable(basShuttleService.selectOne(new EntityWrapper<BasShuttle>().eq("shuttle_no", shuttleNo)).getRunSpeed()).orElse(1000);
-        List<NavigateNode> nodeList = navigateUtils.calc(startLocNo, endLocNo, mapTypes, Utils.getShuttlePoints(shuttleNo, Utils.getLev(startLocNo)), null);
-        if (nodeList == null) {
-            News.error("{} dash {} can't find navigate path!", startLocNo, endLocNo);
-            shuttleThread.offerSystemMsg("{} dash {} can't find navigate path!", startLocNo, endLocNo);
-            return null;
-        }
-
-        List<NavigateNode> allNode = new ArrayList<>();
-        for (NavigateNode node : nodeList) {
-            allNode.add(node.clone());
-        }
-
-        List<ShuttleCommand> commands = new ArrayList<>();
-        //鑾峰彇鍒嗘璺緞
-        ArrayList<ArrayList<NavigateNode>> data = navigateUtils.getSectionPath(nodeList);
-        //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
-        for (ArrayList<NavigateNode> nodes : data) {
-            //寮�濮嬭矾寰�
-            NavigateNode startPath = nodes.get(0);
-
-            //鐩爣璺緞
-            NavigateNode endPath = nodes.get(nodes.size() - 1);
-            Integer allDistance = navigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
-            //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-            String startCodeNum = NavigatePositionConvert.xyToPosition(startPath.getX(), startPath.getY(), startPath.getZ());
-            //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
-            String distCodeNum = NavigatePositionConvert.xyToPosition(endPath.getX(), endPath.getY(), endPath.getZ());
-            //鑾峰彇绉诲姩鍛戒护
-            ShuttleCommand command = shuttleThread.getMoveCommand(assignCommand.getDeviceTaskNo(), startCodeNum, distCodeNum, allDistance, ShuttleRunDirection.get(startPath.getDirection()).id.intValue(), runSpeed, nodes);
-            command.setNodes(nodes);//灏嗚璧拌妭鐐规坊鍔犲埌姣忎竴姝ュ懡浠や腑
-            commands.add(command);
-        }
-
-        assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist
-
+        assignCommand.setShuttleMoveCommandsContinuously(shuttleMoveCommandsContinuously);
         return commands;
     }
 
@@ -209,16 +154,16 @@
     }
 
     //妫�娴嬮殰纰嶇墿杞�
-    public synchronized boolean checkObstacle(String locNo, List<Integer> whiteShuttles) {
+    public synchronized boolean checkObstacle(String locNo, List<Integer> whiteShuttles, List<NavigateNode> whiteNodes) {
         int innerCircle = 0;
         int outerCircle = 3;
         Config avoidInnerCircleConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "avoidInnerCircle"));
-        if(avoidInnerCircleConfig != null) {
+        if (avoidInnerCircleConfig != null) {
             innerCircle = Integer.parseInt(avoidInnerCircleConfig.getValue());
         }
 
         Config avoidOuterCircleConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "avoidOuterCircle"));
-        if(avoidOuterCircleConfig != null) {
+        if (avoidOuterCircleConfig != null) {
             outerCircle = Integer.parseInt(avoidOuterCircleConfig.getValue());
         }
 
@@ -246,7 +191,7 @@
         }
 
         //鑾峰彇澶栧湀鑺傜偣
-        List<NavigateNode> outerNodes = getOuterNodes(locNo, outerCircle, whiteShuttlePointList, innerNodes);
+        List<NavigateNode> outerNodes = getOuterNodes(locNo, outerCircle, whiteShuttlePointList, innerNodes, whiteNodes);
 
         //灏嗗唴鍦堣妭鐐逛腑闅滅灏忚溅璋冪
         for (Integer shuttleNo : nodesCar) {
@@ -269,14 +214,14 @@
                 List<NavigateNode> avoidInnerNodes = getInnerNodes(dispatchLocNo, innerCircle, new ArrayList<>());
                 //璁$畻鍐呭湀鏄惁鏈夊皬杞�
                 List<Integer> avoidNodesCar = findNodesCar(avoidInnerNodes);
-                if(!avoidNodesCar.isEmpty()) {
-                   continue;
+                if (!avoidNodesCar.isEmpty()) {
+                    continue;
                 }
                 targetLocNo = dispatchLocNo;
                 break;
             }
 
-            if(targetLocNo == null) {
+            if (targetLocNo == null) {
                 continue;
             }
             shuttleDispatchUtils.dispatchShuttle(null, targetLocNo, shuttleNo);
@@ -323,7 +268,7 @@
         return list;
     }
 
-    private List<NavigateNode> getOuterNodes(String locNo, int outerCircle, List<int[]> whiteShuttlePointList, List<NavigateNode> innerNodes) {
+    private List<NavigateNode> getOuterNodes(String locNo, int outerCircle, List<int[]> whiteShuttlePointList, List<NavigateNode> innerNodes, List<NavigateNode> whiteNodes) {
         List<NavigateNode> outerNodes = new ArrayList<>();
         List<NavigateNode> outerNodesTmp = new ArrayList<>();
         int lev = Utils.getLev(locNo);
@@ -331,7 +276,7 @@
         NavigateNode currentNode = new NavigateNode(pointArr[0], pointArr[1]);
         currentNode.setZ(lev);
 
-        List<List<MapNode>> lists = navigateMapData.getJsonData(lev, -1, null, null);//鑾峰彇瀹屾暣鍦板浘
+        List<List<MapNode>> lists = navigateMapData.getJsonData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);//鑾峰彇瀹屾暣鍦板浘
         int[][] map = navigateMapData.parseJsonDataArr(lists);
         int nodeValue = map[pointArr[0]][pointArr[1]];
         currentNode.setNodeValue(nodeValue);
@@ -348,13 +293,24 @@
         for (NavigateNode node : outerNodesTmp) {
             boolean flag = false;
             for (NavigateNode innerNode : innerNodes) {
-                if(node.getX() == innerNode.getX() && node.getY() == innerNode.getY()) {
+                if (node.getX() == innerNode.getX() && node.getY() == innerNode.getY()) {
                     flag = true;
                     break;
                 }
             }
 
-            if(flag) {
+            if (flag) {
+                continue;
+            }
+
+            for (NavigateNode whiteNode : whiteNodes) {
+                if (node.getX() == whiteNode.getX() && node.getY() == whiteNode.getY()) {
+                    flag = true;
+                    break;
+                }
+            }
+
+            if (flag) {
                 continue;
             }
 
@@ -372,7 +328,7 @@
         currentNode.setZ(lev);
         innerNodes.add(currentNode);
 
-        List<List<MapNode>> lists = navigateMapData.getJsonData(lev, -1, null, null);//鑾峰彇瀹屾暣鍦板浘
+        List<List<MapNode>> lists = navigateMapData.getJsonData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);//鑾峰彇瀹屾暣鍦板浘
         int[][] map = navigateMapData.parseJsonDataArr(lists);
         int nodeValue = map[pointArr[0]][pointArr[1]];
         currentNode.setNodeValue(nodeValue);
@@ -555,7 +511,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锛屽垯涓嶅悎娉�

--
Gitblit v1.9.1