From 78478aecdc7b125e16cae01954f3a0ad25644b17 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 21 四月 2025 17:02:28 +0800
Subject: [PATCH] #调度避障算法

---
 src/main/java/com/zy/common/utils/ShuttleOperaUtils.java    |  450 +++++++++++++++++++++++++++++++------------------
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |   36 ++++
 2 files changed, 319 insertions(+), 167 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 6699984..ffb8a10 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -179,6 +179,15 @@
                 return false;
             }
 
+            //妫�娴嬮殰纰嶇墿杞�
+            boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
+                add(shuttleProtocol.getShuttleNo());
+            }});
+            if (checkObstacle) {
+                News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
+                return false;
+            }
+
             ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
             assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
             assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟
@@ -351,6 +360,15 @@
                 //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃�
                 shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
                 News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;
+            }
+
+            //妫�娴嬮殰纰嶇墿杞�
+            boolean checkObstacle = shuttleOperaUtils.checkObstacle(liftSta.getLocNo(), new ArrayList<Integer>() {{
+                add(shuttleProtocol.getShuttleNo());
+            }});
+            if (checkObstacle) {
+                News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
                 return false;
             }
 
@@ -1361,6 +1379,15 @@
                 return false;
             }
 
+            //妫�娴嬮殰纰嶇墿杞�
+            boolean checkObstacle = shuttleOperaUtils.checkObstacle(basShuttleCharge.getWaitLocNo(), new ArrayList<Integer>() {{
+                add(shuttleProtocol.getShuttleNo());
+            }});
+            if (checkObstacle) {
+                News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
+                return false;
+            }
+
             //璋冨害灏忚溅鍘诲緟鏈轰綅
             boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), basShuttleCharge.getWaitLocNo(), wrkMast.getShuttleNo());
             if (!dispatched) {
@@ -1744,6 +1771,15 @@
                 return false;//璺緞璁$畻澶辫触
             }
 
+            //妫�娴嬮殰纰嶇墿杞�
+            boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
+                add(shuttleProtocol.getShuttleNo());
+            }});
+            if (checkObstacle) {
+                News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
+                return false;
+            }
+
             assignCommand.setCommands(commands);
 
             wrkMast.setWrkSts(WrkStsType.MOVE_SHUTTLE.sts);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑  309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓�
diff --git a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
index 9451d91..9292a44 100644
--- a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
+++ b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java
@@ -1,22 +1,31 @@
 package com.zy.common.utils;
 
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.core.common.SpringUtils;
+import com.core.exception.CoolException;
 import com.zy.asrs.entity.BasShuttle;
 import com.zy.asrs.service.BasShuttleService;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.NavigateNode;
+import com.zy.common.model.enums.NavigationMapType;
 import com.zy.core.News;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.dispatcher.ShuttleDispatchUtils;
+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;
+import com.zy.core.properties.SlaveProperties;
 import com.zy.core.thread.ShuttleThread;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Optional;
+import java.util.*;
 
 /**
  * 鍥涘悜杞︽搷浣滃伐鍏风被
@@ -31,6 +40,14 @@
     private NavigateUtils navigateUtils;
     @Autowired
     private NavigateMapUtils navigateMapUtils;
+    @Autowired
+    private NavigateMapData navigateMapData;
+    @Autowired
+    private ConfigService configService;
+    @Autowired
+    private SlaveProperties slaveProperties;
+    @Autowired
+    private ShuttleDispatchUtils shuttleDispatchUtils;
 
     public synchronized List<ShuttleCommand> getStartToTargetCommands(String startLocNo, String endLocNo, Integer mapType, ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread) {
         return getStartToTargetCommands(startLocNo, endLocNo, mapType, null, assignCommand, shuttleThread);
@@ -189,6 +206,269 @@
         return commands;
     }
 
+    //妫�娴嬮殰纰嶇墿杞�
+    public synchronized boolean checkObstacle(String locNo, List<Integer> whiteShuttles) {
+        int innerCircle = 0;
+        int outerCircle = 3;
+        Config avoidInnerCircleConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "avoidInnerCircle"));
+        if(avoidInnerCircleConfig != null) {
+            innerCircle = Integer.parseInt(avoidInnerCircleConfig.getValue());
+        }
+
+        Config avoidOuterCircleConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "avoidOuterCircle"));
+        if(avoidOuterCircleConfig != null) {
+            outerCircle = Integer.parseInt(avoidOuterCircleConfig.getValue());
+        }
+
+        ArrayList<int[]> whiteShuttlePointList = new ArrayList<>();
+        for (Integer shuttle : whiteShuttles) {
+            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle);
+            if (shuttleThread == null) {
+                continue;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                continue;
+            }
+            String currentLocNo = shuttleProtocol.getCurrentLocNo();
+            int[] shuttleArr = NavigatePositionConvert.positionToXY(currentLocNo);
+            whiteShuttlePointList.add(shuttleArr);
+        }
+
+        //鑾峰彇鍐呭湀鑺傜偣
+        List<NavigateNode> innerNodes = getInnerNodes(locNo, innerCircle, whiteShuttlePointList);
+        List<Integer> nodesCar = findNodesCar(innerNodes);
+        if (nodesCar.isEmpty()) {
+            return false;//鍐呭湀涓棤杞�
+        }
+
+        //鑾峰彇澶栧湀鑺傜偣
+        List<NavigateNode> outerNodes = getOuterNodes(locNo, outerCircle, whiteShuttlePointList, innerNodes);
+
+        //灏嗗唴鍦堣妭鐐逛腑闅滅灏忚溅璋冪
+        for (Integer shuttleNo : nodesCar) {
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
+            if (shuttleThread == null) {
+                continue;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                continue;
+            }
+            if (!shuttleThread.isIdle()) {
+                continue;
+            }
+
+            int nextInt = new Random().nextInt(outerNodes.size());
+            NavigateNode randomNode = outerNodes.get(nextInt);
+            String randomLocNo = NavigatePositionConvert.nodeToLocNo(randomNode);
+            shuttleDispatchUtils.dispatchShuttle(null, randomLocNo, shuttleNo);
+        }
+
+        return true;//鍐呭湀涓湁杞�
+    }
+
+    //鎼滅储鑺傜偣鍐呯殑灏忚溅缂栧彿
+    private List<Integer> findNodesCar(List<NavigateNode> nodes) {
+        List<Integer> list = new ArrayList<>();
+
+        HashMap<String, Integer> carMap = new HashMap<>();
+        for (ShuttleSlave slave : slaveProperties.getShuttle()) {
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId());
+            if (shuttleThread == null) {
+                continue;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                continue;
+            }
+            String currentLocNo = shuttleProtocol.getCurrentLocNo();
+            if (currentLocNo == null) {
+                continue;
+            }
+
+            carMap.put(currentLocNo, slave.getId());
+        }
+
+        for (NavigateNode node : nodes) {
+            String locNo = NavigatePositionConvert.nodeToLocNo(node);
+            if (carMap.containsKey(locNo)) {
+                list.add(carMap.get(locNo));
+            }
+        }
+
+        return list;
+    }
+
+    private List<NavigateNode> getOuterNodes(String locNo, int outerCircle, List<int[]> whiteShuttlePointList, List<NavigateNode> innerNodes) {
+        List<NavigateNode> outerNodes = new ArrayList<>();
+        List<NavigateNode> outerNodesTmp = new ArrayList<>();
+        int lev = Utils.getLev(locNo);
+        int[] pointArr = NavigatePositionConvert.positionToXY(locNo);
+        NavigateNode currentNode = new NavigateNode(pointArr[0], pointArr[1]);
+
+        int[][] map = navigateMapData.getDataFromRedis(lev, NavigationMapType.NORMAL.id, null, whiteShuttlePointList);
+        int nodeValue = map[pointArr[0]][pointArr[1]];
+        currentNode.setNodeValue(nodeValue);
+
+        for (int i = 0; i < outerCircle; i++) {
+            int idx = i + 1;
+            List<NavigateNode> list = extend_nodes(map, currentNode, idx);
+            if (list.isEmpty()) {
+                continue;
+            }
+            outerNodesTmp.addAll(list);
+        }
+
+        for (NavigateNode node : outerNodesTmp) {
+            boolean flag = false;
+            for (NavigateNode innerNode : innerNodes) {
+                if(node.getX() == innerNode.getX() && node.getY() == innerNode.getY()) {
+                    flag = true;
+                    break;
+                }
+            }
+
+            if(flag) {
+                continue;
+            }
+
+            outerNodes.add(node);
+        }
+
+        return outerNodes;
+    }
+
+    private List<NavigateNode> getInnerNodes(String locNo, int innerCircle, List<int[]> whiteShuttlePointList) {
+        List<NavigateNode> innerNodes = new ArrayList<>();
+        int lev = Utils.getLev(locNo);
+        int[] pointArr = NavigatePositionConvert.positionToXY(locNo);
+        NavigateNode currentNode = new NavigateNode(pointArr[0], pointArr[1]);
+        currentNode.setZ(lev);
+        innerNodes.add(currentNode);
+
+        int[][] map = navigateMapData.getDataFromRedis(lev, NavigationMapType.NORMAL.id, null, whiteShuttlePointList);
+        int nodeValue = map[pointArr[0]][pointArr[1]];
+        currentNode.setNodeValue(nodeValue);
+
+        for (int i = 0; i < innerCircle; i++) {
+            int idx = i + 1;
+            List<NavigateNode> list = extend_nodes(map, currentNode, idx);
+            if (list.isEmpty()) {
+                continue;
+            }
+            innerNodes.addAll(list);
+        }
+
+        return innerNodes;
+    }
+
+    private List<NavigateNode> extend_nodes(int[][] map, NavigateNode startNode, int innerCircleIdx) {
+        //榛樿鍦板浘姣嶈建鏂瑰悜x
+        String mapDirection = "x";
+        ConfigService configService = SpringUtils.getBean(ConfigService.class);
+        if (configService != null) {
+            Config config = configService.selectOne(new EntityWrapper<Config>()
+                    .eq("code", "direction_map")
+                    .eq("status", 1));
+            if (config != null) {
+                mapDirection = config.getValue();
+            }
+        }
+
+        ArrayList<NavigateNode> nodes = new ArrayList<>();
+        int x = startNode.getX();
+        int y = startNode.getY();
+        int z = startNode.getZ();
+
+        if (mapDirection.equals("x")) {//姣嶈建x鏂瑰悜
+            if (map[x][y] == MapNodeType.MAIN_PATH.id) {
+                //姣嶈建鎵嶈兘杩涜涓婁笅绉诲姩
+                if (is_valid(map, x + innerCircleIdx, y)) {
+                    NavigateNode node = new NavigateNode(x + innerCircleIdx, y);
+                    node.setNodeValue(map[x + innerCircleIdx][y]);
+                    node.setZ(z);
+                    nodes.add(node);
+                }
+                if (is_valid(map, x - innerCircleIdx, y)) {
+                    NavigateNode node = new NavigateNode(x - innerCircleIdx, y);
+                    node.setNodeValue(map[x - innerCircleIdx][y]);
+                    node.setZ(z);
+                    nodes.add(node);
+                }
+            }
+
+            if (map[x][y] == MapNodeType.NORMAL_PATH.id || map[x][y] == MapNodeType.MAIN_PATH.id || map[x][y] == MapNodeType.CONVEYOR_CAR_GO.id || map[x][y] == MapNodeType.CHARGE.id || map[x][y] == MapNodeType.LIFT.id) {
+                //瀛愯建鍜屾瘝杞ㄣ�佸皬杞﹀彲璧拌緭閫佺嚎銆佸厖鐢垫々銆佹彁鍗囨満鎵嶈兘杩涜宸﹀彸绉诲姩
+                if (is_valid(map, x, y + innerCircleIdx)) {
+                    NavigateNode node = new NavigateNode(x, y + innerCircleIdx);
+                    node.setNodeValue(map[x][y + innerCircleIdx]);
+                    node.setZ(z);
+                    nodes.add(node);
+                }
+
+                if (is_valid(map, x, y - innerCircleIdx)) {
+                    NavigateNode node = new NavigateNode(x, y - innerCircleIdx);
+                    node.setNodeValue(map[x][y - innerCircleIdx]);
+                    node.setZ(z);
+                    nodes.add(node);
+                }
+            }
+        }else if (mapDirection.equals("y")) {//姣嶈建y鏂瑰悜
+            if (map[x][y] == MapNodeType.MAIN_PATH.id) {
+                //姣嶈建鎵嶈兘杩涜宸﹀彸绉诲姩
+                if (is_valid(map, x, y + innerCircleIdx)) {
+                    NavigateNode node = new NavigateNode(x, y + innerCircleIdx);
+                    node.setNodeValue(map[x][y + innerCircleIdx]);
+                    node.setZ(z);
+                    nodes.add(node);
+                }
+
+                if (is_valid(map, x, y - innerCircleIdx)) {
+                    NavigateNode node = new NavigateNode(x, y - innerCircleIdx);
+                    node.setNodeValue(map[x][y - innerCircleIdx]);
+                    node.setZ(z);
+                    nodes.add(node);
+                }
+            }
+
+            if (map[x][y] == MapNodeType.NORMAL_PATH.id || map[x][y] == MapNodeType.MAIN_PATH.id || map[x][y] == MapNodeType.CONVEYOR_CAR_GO.id || map[x][y] == MapNodeType.CHARGE.id || map[x][y] == MapNodeType.LIFT.id) {
+                //瀛愯建鍜屾瘝杞ㄣ�佸皬杞﹀彲璧拌緭閫佺嚎銆佸厖鐢垫々銆佹彁鍗囨満鎵嶈兘杩涜涓婁笅绉诲姩
+                if (is_valid(map, x + innerCircleIdx, y)) {
+                    NavigateNode node = new NavigateNode(x + innerCircleIdx, y);
+                    node.setNodeValue(map[x + innerCircleIdx][y]);
+                    node.setZ(z);
+                    nodes.add(node);
+                }
+                if (is_valid(map, x - innerCircleIdx, y)) {
+                    NavigateNode node = new NavigateNode(x - innerCircleIdx, y);
+                    node.setNodeValue(map[x - innerCircleIdx][y]);
+                    node.setZ(z);
+                    nodes.add(node);
+                }
+            }
+        }else {
+            throw new CoolException("寮傚父鍦板浘鏂瑰悜");
+        }
+
+        return nodes;
+    }
+
+    private boolean is_valid(int[][] map, int x, int y) {
+        if (x < 0 || x >= map.length
+                || y < 0 || y >= map[0].length) {
+            return false;
+        }
+        // 濡傛灉缁撶偣鐨勪綅缃皬浜�0锛屽垯涓嶅悎娉�
+        if (map[x][y] < 0) {
+            return false;
+        }
+
+        //浠ヤ笂鎯呭喌閮芥病鏈夊垯鍚堟硶
+        return true;
+    }
+
 //    private boolean checkSimilarityPath(Motion motion, ShuttleAssignCommand assignCommand) {
 //        String movePath = motion.getMovePath();
 //        if (Cools.isEmpty(movePath)) {
@@ -235,170 +515,6 @@
 //        }
 //
 //        return true;
-//    }
-
-//    /**
-//     * 璁$畻骞惰幏鍙栧皬杞︿粠璧风偣鈥斺�斾腑闂寸偣鈥斺�旂洰鏍囩偣涔嬮棿鎼繍璐х墿鍔ㄤ綔鍛戒护
-//     * @param shuttleNo 灏忚溅鍙�
-//     * @param wrkNo 宸ヤ綔鍙�
-//     * @param startPoint 璧风偣锛堝皬杞﹀綋鍓嶄綅缃級
-//     * @param targetPoint 鐩爣鐐癸紙璐х墿鐩爣浣嶇疆锛�
-//     */
-//    public static synchronized ShuttleOperaResult getShuttleTransportCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String targetPoint) {
-//        //琛岃蛋璺緞
-//        ArrayList<NavigateNode> nodes = new ArrayList<>();
-//        //鍛戒护闆嗗悎
-//        ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>();
-//
-//        //璁$畻璧风偣鍒扮洰鏍囩偣鍛戒护
-//        ShuttleOperaResult result = getStartToTargetCommands(shuttleNo, wrkNo, startPoint, targetPoint, NavigationMapType.DFX.id);
-//        if (result == null) {
-//            //璁$畻缁撴灉蹇呴』涓嶄负绌猴紝鍚﹀垯璁$畻澶辫触
-//            return null;
-//        }
-//        nodes.addAll(result.getNodes());
-//        //璧风偣浣嶇疆涓嬪彂涓�鏉¢《鍗囧懡浠ゅ皢璐х墿杩涜鎼繍
-//        commands.add(NyHttpUtils.getPalletLiftCommand(shuttleNo, wrkNo, true));
-//        commands.addAll(result.getCommands());//璧风偣鍒扮洰鏍囩偣绉诲姩鍛戒护
-//        //褰撳皬杞﹁璧板埌鐩爣鐐瑰悗锛岄渶瑕佷笅鍙戜竴鏉′笅闄嶅懡浠ゅ皢璐х墿鏀剧疆
-//        commands.add(NyHttpUtils.getPalletLiftCommand(shuttleNo, wrkNo, false));
-//        return result(commands, nodes);
-//    }
-//
-//    /**
-//     * 璁$畻骞惰幏鍙栧皬杞︿粠璧风偣鈥斺�斾腑闂寸偣鈥斺�旂洰鏍囩偣涔嬮棿鎼繍璐х墿鍔ㄤ綔鍛戒护
-//     * @param shuttleNo 灏忚溅鍙�
-//     * @param wrkNo 宸ヤ綔鍙�
-//     * @param startPoint 璧风偣锛堝皬杞﹀綋鍓嶄綅缃級
-//     * @param middlePoint 涓棿鐐癸紙璐х墿浣嶇疆锛�
-//     * @param targetPoint 鐩爣鐐癸紙璐х墿鐩爣浣嶇疆锛�
-//     */
-//    public static synchronized ShuttleOperaResult getShuttleTransportCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String middlePoint, String targetPoint) {
-//        //琛岃蛋璺緞
-//        ArrayList<NavigateNode> nodes = new ArrayList<>();
-//        //鍛戒护闆嗗悎
-//        ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>();
-//
-//        if (!startPoint.equals(middlePoint)) {//璧风偣鍜屼腑闂寸偣涓嶄竴鑷达紝闇�瑕佽绠楄捣鐐瑰埌涓棿鐐硅矾寰�
-//            //璁$畻璧风偣鍒颁腑闂寸偣鍛戒护
-//            ShuttleOperaResult result1 = getStartToTargetCommands(shuttleNo, wrkNo, startPoint, middlePoint, NavigationMapType.NORMAL.id);
-//            if (result1 == null) {
-//                //璁$畻缁撴灉蹇呴』涓嶄负绌猴紝鍚﹀垯璁$畻澶辫触
-//                return null;
-//            }
-//            nodes.addAll(result1.getNodes());
-//            commands.addAll(result1.getCommands());
-//        }
-//
-//        //璁$畻涓棿鐐瑰埌鐩爣鐐瑰懡浠�
-//        ShuttleOperaResult result2 = getStartToTargetCommands(shuttleNo, wrkNo, middlePoint, targetPoint, NavigationMapType.DFX.id);
-//        if (result2 == null) {
-//            //璁$畻缁撴灉蹇呴』涓嶄负绌猴紝鍚﹀垯璁$畻澶辫触
-//            return null;
-//        }
-//        nodes.addAll(result2.getNodes());
-//        //褰撳皬杞﹁璧板埌涓棿鐐瑰悗锛岄渶瑕佷笅鍙戜竴鏉¢《鍗囧懡浠ゅ皢璐х墿杩涜鎼繍
-//        commands.add(NyHttpUtils.getPalletLiftCommand(shuttleNo, wrkNo, true));
-//        commands.addAll(result2.getCommands());//涓棿鐐瑰埌鐩爣鐐圭Щ鍔ㄥ懡浠�
-//        //褰撳皬杞﹁璧板埌鐩爣鐐瑰悗锛岄渶瑕佷笅鍙戜竴鏉′笅闄嶅懡浠ゅ皢璐х墿鏀剧疆
-//        commands.add(NyHttpUtils.getPalletLiftCommand(shuttleNo, wrkNo, false));
-//        return result(commands, nodes);
-//    }
-//
-//    /**
-//     * 鑾峰彇璧风偣鍒扮洰鏍囩偣琛岃蛋鍛戒护
-//     */
-//    public synchronized ShuttleOperaResult getStartToTargetCommands(Integer shuttleNo, Integer wrkNo, String startPoint, String targetPoint, Integer mapType) {
-//        NavigateMapUtils navigateMapUtils = SpringUtils.getBean(NavigateMapUtils.class);
-//        //璁$畻璧风偣鍒扮洰鏍囩偣琛岃蛋鑺傜偣
-//        List<NavigateNode> calc = NavigateUtils.calc(startPoint, targetPoint, mapType, Utils.getShuttlePoints(shuttleNo, Utils.getLev(startPoint)), null);
-//        if (calc == null) {
-//            return null;
-//        }
-//
-//        //鍛戒护闆嗗悎
-//        ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>();
-//        List<NavigateNode> allNode = new ArrayList<>();
-//
-//        //鑾峰彇鍒嗘璺緞
-//        ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc);
-//        //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
-//        for (ArrayList<NavigateNode> nodes : data) {
-//            //寮�濮嬭矾寰�
-//            NavigateNode startPath = nodes.get(0);
-//            //鐩爣璺緞
-//            NavigateNode targetPath = nodes.get(nodes.size() - 1);
-//            //鑾峰彇绉诲姩鍛戒护
-//            NyShuttleHttpCommand moveCommand = NyHttpUtils.getMoveCommand(shuttleNo, wrkNo, startPath, targetPath);
-//            moveCommand.setNodes(nodes);//灏嗚璧拌妭鐐规坊鍔犲埌姣忎竴姝ュ懡浠や腑
-//            commands.add(moveCommand);
-//
-//            allNode.addAll(nodes);
-//        }
-//
-//        boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(startPoint), shuttleNo, allNode, true);//閿佸畾璺緞
-//        if (!result) {
-//            return null;//璺緞閿佸畾澶辫触
-//        }
-//        return result(commands, calc);
-//    }
-//
-//    /**
-//     * 鑾峰彇璧风偣鍒扮洰鏍囩偣琛岃蛋鍛戒护(鍙紶鐧藉悕鍗�)
-//     */
-//    public static synchronized ShuttleOperaResult getStartToTargetCommandsByWhites(Integer shuttleNo, Integer wrkNo, String startPoint, String targetPoint, Integer mapType, List<int[]> whites) {
-//        NavigateMapUtils navigateMapUtils = SpringUtils.getBean(NavigateMapUtils.class);
-//        //璁$畻璧风偣鍒扮洰鏍囩偣琛岃蛋鑺傜偣
-//        List<NavigateNode> calc = NavigateUtils.calc(startPoint, targetPoint, mapType, Utils.getShuttlePoints(shuttleNo, Utils.getLev(startPoint)), whites);
-//        if (calc == null) {
-//            return null;
-//        }
-//
-//        //鍛戒护闆嗗悎
-//        ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>();
-//        List<NavigateNode> allNode = new ArrayList<>();
-//
-//        //鑾峰彇鍒嗘璺緞
-//        ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc);
-//        //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
-//        for (ArrayList<NavigateNode> nodes : data) {
-//            //寮�濮嬭矾寰�
-//            NavigateNode startPath = nodes.get(0);
-//            //鐩爣璺緞
-//            NavigateNode targetPath = nodes.get(nodes.size() - 1);
-//            //鑾峰彇绉诲姩鍛戒护
-//            NyShuttleHttpCommand moveCommand = NyHttpUtils.getMoveCommand(shuttleNo, wrkNo, startPath, targetPath);
-//            moveCommand.setNodes(nodes);//灏嗚璧拌妭鐐规坊鍔犲埌姣忎竴姝ュ懡浠や腑
-//            commands.add(moveCommand);
-//
-//            allNode.addAll(nodes);
-//        }
-//
-//        //閿佸畾璺緞鏃跺墧闄ょ櫧鍚嶅崟鑺傜偣
-//        ArrayList<NavigateNode> nodes = new ArrayList<>();
-//        for (NavigateNode node : allNode) {
-//            boolean flag = false;
-//            for (int[] white : whites) {
-//                if (node.getX() == white[0] && node.getY() == white[1]) {
-//                    flag = true;//瀛樺湪鐧藉悕鍗曡妭鐐�
-//                    break;//璺宠繃鐧藉悕鍗曡妭鐐�
-//                }
-//            }
-//
-//            if (!flag) {
-//                nodes.add(node);
-//            }
-//        }
-//        boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(startPoint), shuttleNo, nodes, true);//閿佸畾璺緞
-//        if (!result) {
-//            return null;//璺緞閿佸畾澶辫触
-//        }
-//        return result(commands, calc);
-//    }
-//
-//    //杩斿洖缁撴灉闆�
-//    public static ShuttleOperaResult result(List<NyShuttleHttpCommand> commands, List<NavigateNode> nodes) {
-//        return new ShuttleOperaResult(commands, nodes);
 //    }
 
 }

--
Gitblit v1.9.1