From 0f2eaeeb387850acfede95c5c061b5392dae8688 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 28 六月 2023 16:58:25 +0800
Subject: [PATCH] 寻路算法和避障

---
 src/main/java/com/zy/core/thread/ShuttleThread.java |  170 ++++++++++++++++++++++++++++----------------------------
 1 files changed, 85 insertions(+), 85 deletions(-)

diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java
index 7d23d51..d6b95ac 100644
--- a/src/main/java/com/zy/core/thread/ShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -423,9 +423,9 @@
                     //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞
                     //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护
                     LocMast currentLocMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString());
-                    List<NavigateNode> firstMastResult = NavigateUtils.calc(currentLocMast.getLocNo(), assignCommand.getSourceLocNo(), NavigationMapType.NORMAL.id);//灏忚溅鍒颁腑鐐癸紝澶勪簬鏃犺揣鐘舵�侊紝浣跨敤姝e父閫氶亾鍦板浘
-
-                    if (firstMastResult != null) {
+                    List<NavigateNode> firstMastResult = NavigateUtils.calc(currentLocMast.getLocNo(), assignCommand.getSourceLocNo(), NavigationMapType.NORMAL.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(currentLocMast.getLocNo())));//灏忚溅鍒颁腑鐐癸紝澶勪簬鏃犺揣鐘舵�侊紝浣跨敤姝e父閫氶亾鍦板浘
+                    boolean checkResult = Utils.checkShuttlePath(firstMastResult, shuttleProtocol.getShuttleNo().intValue());
+                    if (firstMastResult != null && checkResult) {
                         allNode.addAll(firstMastResult);//灏嗚妭鐐硅繘琛屼繚瀛�
                         //鑾峰彇鍒嗘璺緞
                         ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(firstMastResult);
@@ -459,9 +459,9 @@
                     }
 
                     //璁$畻涓偣鍒扮粓鐐硅矾寰�
-                    List<NavigateNode> secMastResult = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), NavigationMapType.DFX.id);//灏忚溅浠庝腑鐐瑰埌缁堢偣锛屽浜庢湁璐х姸鎬侊紝浣跨敤DFX鍦板浘
-
-                    if (secMastResult != null) {
+                    List<NavigateNode> secMastResult = NavigateUtils.calc(assignCommand.getSourceLocNo(), assignCommand.getLocNo(), NavigationMapType.DFX.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(assignCommand.getSourceLocNo())));//灏忚溅浠庝腑鐐瑰埌缁堢偣锛屽浜庢湁璐х姸鎬侊紝浣跨敤DFX鍦板浘
+                    boolean checkResult2 = Utils.checkShuttlePath(secMastResult, shuttleProtocol.getShuttleNo().intValue());
+                    if (secMastResult != null && checkResult2) {
                         allNode.addAll(secMastResult);//灏嗚妭鐐硅繘琛屼繚瀛�
                         //鑾峰彇鍒嗘璺緞
                         ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(secMastResult);
@@ -544,9 +544,9 @@
                     }
 
                     LocMast locMast = locMastService.queryByQrCode(startQr);
-                    List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), assignCommand.getLocNo(), NavigationMapType.NONE.id);//鎵嬪姩鍛戒护-绉诲姩鍛戒护锛屼娇鐢ㄦ棤杩囨护鍦板浘
-
-                    if (result != null) {
+                    List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), assignCommand.getLocNo(), NavigationMapType.NONE.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(locMast.getLocNo())));//鎵嬪姩鍛戒护-绉诲姩鍛戒护锛屼娇鐢ㄦ棤杩囨护鍦板浘
+                    boolean checkResult3 = Utils.checkShuttlePath(result, shuttleProtocol.getShuttleNo().intValue());
+                    if (result != null && checkResult3) {
                         //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
                         navigateMapData = new NavigateMapData(Utils.getLev(locMast.getLocNo()));
                         navigateMapData.writeNavigateNodeToRedisMap(result, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
@@ -580,10 +580,10 @@
                     int lev = Utils.getLev(locMast1.getLocNo());//绌挎杞﹀綋鍓嶉珮搴�
                     String liftSiteLocNo = Utils.levToOutInStaLocNo(lev);//褰撳墠妤煎眰绔欑偣搴撲綅鍙�
                     LocMast liftSitelocMast = locMastService.selectById(liftSiteLocNo);
-                    List<NavigateNode> result1 = NavigateUtils.calc(locMast1.getLocNo(), liftSiteLocNo, NavigationMapType.NONE.id);//绉诲姩鍒版彁鍗囨満锛屼娇鐢ㄦ棤杩囨护鍦板浘
-
+                    List<NavigateNode> result1 = NavigateUtils.calc(locMast1.getLocNo(), liftSiteLocNo, NavigationMapType.NONE.id, Utils.getShuttlePoints(assignCommand.getShuttleNo().intValue(), Utils.getLev(locMast1.getLocNo())));//绉诲姩鍒版彁鍗囨満锛屼娇鐢ㄦ棤杩囨护鍦板浘
+                    boolean checkResult4 = Utils.checkShuttlePath(result1, shuttleProtocol.getShuttleNo().intValue());
                     Short endStartCode = null;
-                    if (result1 != null) {
+                    if (result1 != null && checkResult4) {
                         //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
                         navigateMapData = new NavigateMapData(Utils.getLev(locMast1.getLocNo()));
                         navigateMapData.writeNavigateNodeToRedisMap(result1, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
@@ -656,78 +656,78 @@
             return false;
         }
 
-        List<ShuttleCommand> errorCommands = redisCommand.getErrorCommands();
-        if (errorCommands.size() > 0) {
-            //浼樺厛鎵ц璇ユ寚浠�
-            ShuttleCommand errorCommand = errorCommands.get(0);//鍙栧嚭鎸囦护
-
-            if(errorCommand.getCommandWord() == 1){//姝e父琛岃蛋鍛戒护锛岄渶瑕佸厛鎵ц瀹屾壘搴撲綅鍛戒护鍚庯紝鍐嶆墽琛�
-                LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
-                LocMast locMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString());
-                LocMast distLocMast = locMastService.queryByQrCode(errorCommand.getStartCodeNum().toString());
-                if (shuttleProtocol.getCurrentCode().equals(errorCommand.getStartCodeNum())) {
-                    //璧风偣鍜岀粓鐐瑰睘浜庡悓涓�搴撲綅锛屾棤闇�鍐嶆墽琛岀Щ鍔ㄦ搷浣�
-                    errorCommands.remove(0);//绉婚櫎璇ュ懡浠�
-                    redisCommand.setErrorCommands(new ArrayList<ShuttleCommand>());
-                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING);
-                    //褰撳墠姝ュ簭
-                    int commandStep = redisCommand.getCommandStep();
-                    //姝ュ簭鍥為��
-                    commandStep--;
-                    redisCommand.setCommandStep(commandStep);
-                    //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-                    redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
-                    shuttleProtocol.setPakMk(true);
-                    return true;
-                }else {
-                    List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), distLocMast.getLocNo(), NavigationMapType.DFX.id);//閿欒鎭㈠锛屼娇鐢―FX鍦板浘
-                    if (result != null) {
-                        //鑾峰彇鍒嗘璺緞
-                        ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result);
-                        //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
-                        for (ArrayList<NavigateNode> nodes : data) {
-                            //寮�濮嬭矾寰�
-                            NavigateNode startPath = nodes.get(0);
-                            //鐩爣璺緞
-                            NavigateNode endPath = nodes.get(nodes.size() - 1);
-                            Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
-
-                            String qrCodeValue = distLocMast.getQrCodeValue();
-                            errorCommand.setCommandWord((short) 1);
-                            errorCommand.setStartCodeNum(shuttleProtocol.getCurrentCode());
-                            errorCommand.setMiddleCodeNum((short) 1);
-                            errorCommand.setDistCodeNum((short) Integer.parseInt(qrCodeValue));
-                            errorCommand.setStartToDistDistance(allDistance);
-                            errorCommand.setRunSpeed((short) 1000);
-                            errorCommand.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id);
-                            errorCommand.setForceMoveDistance(0);
-                            errorCommand.setIOControl((short) 0);
-                            errorCommand.setCommandEnd((short) 1);
-                            break;
-                        }
-                    }
-                }
-
-                shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING);
-                //褰撳墠姝ュ簭
-                int commandStep = redisCommand.getCommandStep();
-                //姝ュ簭鍥為��
-                commandStep--;
-                redisCommand.setCommandStep(commandStep);
-            }
-
-            if (!write(errorCommand)) {
-                News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(errorCommand));
-                return false;
-            } else {
-                News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(errorCommand));
-                errorCommands.remove(0);
-                redisCommand.setErrorCommands(errorCommands);
-                //浠诲姟鏁版嵁淇濆瓨鍒皉edis
-                redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
-                return true;
-            }
-        }
+//        List<ShuttleCommand> errorCommands = redisCommand.getErrorCommands();
+//        if (errorCommands.size() > 0) {
+//            //浼樺厛鎵ц璇ユ寚浠�
+//            ShuttleCommand errorCommand = errorCommands.get(0);//鍙栧嚭鎸囦护
+//
+//            if(errorCommand.getCommandWord() == 1){//姝e父琛岃蛋鍛戒护锛岄渶瑕佸厛鎵ц瀹屾壘搴撲綅鍛戒护鍚庯紝鍐嶆墽琛�
+//                LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
+//                LocMast locMast = locMastService.queryByQrCode(shuttleProtocol.getCurrentCode().toString());
+//                LocMast distLocMast = locMastService.queryByQrCode(errorCommand.getStartCodeNum().toString());
+//                if (shuttleProtocol.getCurrentCode().equals(errorCommand.getStartCodeNum())) {
+//                    //璧风偣鍜岀粓鐐瑰睘浜庡悓涓�搴撲綅锛屾棤闇�鍐嶆墽琛岀Щ鍔ㄦ搷浣�
+//                    errorCommands.remove(0);//绉婚櫎璇ュ懡浠�
+//                    redisCommand.setErrorCommands(new ArrayList<ShuttleCommand>());
+//                    shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING);
+//                    //褰撳墠姝ュ簭
+//                    int commandStep = redisCommand.getCommandStep();
+//                    //姝ュ簭鍥為��
+//                    commandStep--;
+//                    redisCommand.setCommandStep(commandStep);
+//                    //浠诲姟鏁版嵁淇濆瓨鍒皉edis
+//                    redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
+//                    shuttleProtocol.setPakMk(true);
+//                    return true;
+//                }else {
+//                    List<NavigateNode> result = NavigateUtils.calc(locMast.getLocNo(), distLocMast.getLocNo(), NavigationMapType.DFX.id, Utils.getShuttlePoints(errorCommand.getShuttleNo().intValue()));//閿欒鎭㈠锛屼娇鐢―FX鍦板浘
+//                    if (result != null) {
+//                        //鑾峰彇鍒嗘璺緞
+//                        ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(result);
+//                        //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护
+//                        for (ArrayList<NavigateNode> nodes : data) {
+//                            //寮�濮嬭矾寰�
+//                            NavigateNode startPath = nodes.get(0);
+//                            //鐩爣璺緞
+//                            NavigateNode endPath = nodes.get(nodes.size() - 1);
+//                            Integer allDistance = NavigateUtils.getCurrentPathAllDistance(nodes);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
+//
+//                            String qrCodeValue = distLocMast.getQrCodeValue();
+//                            errorCommand.setCommandWord((short) 1);
+//                            errorCommand.setStartCodeNum(shuttleProtocol.getCurrentCode());
+//                            errorCommand.setMiddleCodeNum((short) 1);
+//                            errorCommand.setDistCodeNum((short) Integer.parseInt(qrCodeValue));
+//                            errorCommand.setStartToDistDistance(allDistance);
+//                            errorCommand.setRunSpeed((short) 1000);
+//                            errorCommand.setRunDirection(ShuttleRunDirection.get(startPath.getDirection()).id);
+//                            errorCommand.setForceMoveDistance(0);
+//                            errorCommand.setIOControl((short) 0);
+//                            errorCommand.setCommandEnd((short) 1);
+//                            break;
+//                        }
+//                    }
+//                }
+//
+//                shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.WORKING);
+//                //褰撳墠姝ュ簭
+//                int commandStep = redisCommand.getCommandStep();
+//                //姝ュ簭鍥為��
+//                commandStep--;
+//                redisCommand.setCommandStep(commandStep);
+//            }
+//
+//            if (!write(errorCommand)) {
+//                News.error("鍥涘悜绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(errorCommand));
+//                return false;
+//            } else {
+//                News.info("鍥涘悜绌挎杞﹀懡浠や笅鍙戞垚鍔燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(errorCommand));
+//                errorCommands.remove(0);
+//                redisCommand.setErrorCommands(errorCommands);
+//                //浠诲姟鏁版嵁淇濆瓨鍒皉edis
+//                redisUtil.set("shuttle_wrk_no_" + wrkNo, JSON.toJSONString(redisCommand));
+//                return true;
+//            }
+//        }
 
         List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands();
         //褰撳墠姝ュ簭
@@ -817,7 +817,7 @@
                 if (!liftProtocol.isIdleNoTask()) {
                     return false;//鎻愬崌鏈哄繖锛岀姝笅鍙戝懡浠�
                 }
-                if (liftProtocol.getTaskNo().intValue() != wrkNo) {
+                if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkNo) {
                     //鎻愬崌鏈哄伐浣滃彿鍜屽綋鍓嶅伐浣滀笉鐩稿悓锛岀姝笅鍙戝懡浠�
                     return false;
                 }

--
Gitblit v1.9.1