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 ++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 40 insertions(+), 3 deletions(-) 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