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