From d9a0b7a278e76f9738f8eeb05ce13a4ef8e5cbcf Mon Sep 17 00:00:00 2001 From: Junjie <540245094@qq.com> Date: 星期四, 31 七月 2025 14:49:50 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/action/ShuttleAction.java | 104 ++++++++++++++++++++++++--------------------------- 1 files changed, 49 insertions(+), 55 deletions(-) diff --git a/src/main/java/com/zy/core/action/ShuttleAction.java b/src/main/java/com/zy/core/action/ShuttleAction.java index a47484b..d25b6cb 100644 --- a/src/main/java/com/zy/core/action/ShuttleAction.java +++ b/src/main/java/com/zy/core/action/ShuttleAction.java @@ -69,11 +69,8 @@ return false; } - //娓呯┖涓嬪彂绱㈠紩 - Set<String> keys = redisUtil.searchKeys(RedisKeyType.SHUTTLE_SEND_COMMAND_INDEX.key + shuttleNo); - for (String key : keys) { - redisUtil.del(key); - } + //Clear Traffic Control + trafficControlThread.forceCancelTrafficControl(shuttleNo); ShuttleRedisCommand redisCommand = new ShuttleRedisCommand(); @@ -161,6 +158,11 @@ //绉诲姩鍛戒护锛岄攣瀹氳矾寰� if (command.getMode() == ShuttleCommandModeType.MOVE.id) { + TrafficControlThread trafficControlThread = (TrafficControlThread) SlaveConnection.get(SlaveType.TrafficControl, 1); + if (trafficControlThread == null) { + return false; + } + List<NavigateNode> nodes = JSON.parseArray(JSON.toJSONString(command.getNodes()), NavigateNode.class); //鐢宠绠″埗 boolean apply = applyTrafficControl(commands, nodes, shuttleNo, taskNo); @@ -181,6 +183,7 @@ if (!result) { News.error("{} device can't lock path!", shuttleNo); shuttleThread.offerSystemMsg("{} device can't lock path!", shuttleNo); + trafficControlThread.trafficReportError(shuttleNo, taskNo); return false;//璺緞閿佸畾澶辫触 } } @@ -211,9 +214,6 @@ } shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.WORKING); - - //瀛樺偍涓嬪彂鎸囦护绱㈠紩 - redisUtil.set(RedisKeyType.SHUTTLE_SEND_COMMAND_INDEX.key + shuttleNo + "_" + taskNo + "_" + commandStep, commandStep); commandStep += 1; //鏇存柊redis鏁版嵁 @@ -255,69 +255,60 @@ return 0; } - //涓婁竴鏉℃寚浠� - String searchKey = RedisKeyType.SHUTTLE_SEND_COMMAND_INDEX.key + shuttleNo + "_" + redisCommand.getWrkNo() + "_"; - Set<String> keys = redisUtil.searchKeys(searchKey); - TreeSet<Integer> treeSet = new TreeSet<>(); - for (String key : keys) { - String[] split = key.split(searchKey); - treeSet.add(Integer.parseInt(split[1])); + boolean supportContinuously = false; + int checkIdx = commandStep - 2; + if (checkIdx < 0) { + checkIdx = commandStep - 1; } - if (treeSet.isEmpty()) { - return 1; + ShuttleCommand last2Command = commands.get(checkIdx); + if(last2Command.getComplete()){ + supportContinuously = true; + checkIdx = commandStep - 1; } - String firstKey = searchKey + treeSet.first(); - Integer lastCommandIdx = (Integer) redisUtil.get(firstKey); - ShuttleCommand lastCommand = commands.get(lastCommandIdx); + ShuttleCommand lastCommand = commands.get(checkIdx); if (!lastCommand.getComplete()) { //妫�娴嬫洿鏂板懡浠ゅ畬鎴� - boolean checked = updateCommandComplete(lastCommandIdx, commands, shuttleNo); + boolean checked = updateCommandComplete(checkIdx, commands, shuttleNo); if (checked) { - //鍒犻櫎绱㈠紩 - redisUtil.del(firstKey); - // 鏇存柊redis鏁版嵁 redisUtil.set(RedisKeyType.SHUTTLE_WORK_FLAG.key + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand, SerializerFeature.DisableCircularReferenceDetect)); }else { //灏忚溅绉诲姩杩炵画涓嬪彂鎸囦护 if (assignCommand.getShuttleMoveCommandsContinuously()) { - if (treeSet.size() <= 1) { - if(commandStep >= commands.size()) { - return 0; - } + if (!supportContinuously) { + return 0; + } - //绉诲姩鎸囦护 - if(lastCommand.getMode() != ShuttleCommandModeType.MOVE.id) { - return 0; - } + //绉诲姩鎸囦护 + if(lastCommand.getMode() != ShuttleCommandModeType.MOVE.id) { + return 0; + } - List<NavigateNode> nodes = lastCommand.getNodes(); - NavigateNode startNode = nodes.get(0); - if (!startNode.getLinePartAllowGo()) {//鐩寸嚎娈甸儴鍒嗭紝鍏佽鐩存帴琛岃蛋 - return 0; - } + List<NavigateNode> nodes = lastCommand.getNodes(); + NavigateNode startNode = nodes.get(0); + if (!startNode.getLinePartAllowGo()) {//鐩寸嚎娈甸儴鍒嗭紝鍏佽鐩存帴琛岃蛋 + return 0; + } - //鐩寸嚎娈垫暟鎹爣璇� - Long linePartFlag = startNode.getLinePartFlag(); + //鐩寸嚎娈垫暟鎹爣璇� + Long linePartFlag = startNode.getLinePartFlag(); - //鍙栨寚浠� - ShuttleCommand currentCommand = commands.get(commandStep); - if(currentCommand.getMode() != ShuttleCommandModeType.MOVE.id) { - return 0; - } + //鍙栨寚浠� + ShuttleCommand currentCommand = commands.get(commandStep); + if(currentCommand.getMode() != ShuttleCommandModeType.MOVE.id) { + return 0; + } - List<NavigateNode> currentNodes = currentCommand.getNodes(); - NavigateNode currentStartNode = currentNodes.get(0); - if(!currentStartNode.getLinePartAllowGo()) {//鐩寸嚎娈甸儴鍒嗭紝鍏佽鐩存帴琛岃蛋 - return 0; - } + List<NavigateNode> currentNodes = currentCommand.getNodes(); + NavigateNode currentStartNode = currentNodes.get(0); + if(!currentStartNode.getLinePartAllowGo()) {//鐩寸嚎娈甸儴鍒嗭紝鍏佽鐩存帴琛岃蛋 + return 0; + } - if(currentStartNode.getLinePartFlag().equals(linePartFlag)) { - //鏁版嵁鏍囪瘑涓�鑷� - return 2;//鍏佽灏忚溅绉诲姩杩炵画涓嬪彂鎸囦护 - } - + if(currentStartNode.getLinePartFlag().equals(linePartFlag)) { + //鏁版嵁鏍囪瘑涓�鑷� + return 2;//鍏佽灏忚溅绉诲姩杩炵画涓嬪彂鎸囦护 } } @@ -422,12 +413,15 @@ trafficControlThread.trafficReport(command.getNodesDeepCopy(), shuttleNo, shuttleProtocol.getTaskNo()); String currentLocNo = shuttleProtocol.getCurrentLocNo(); + if (currentLocNo == null) { + return false; + } if (targetPoints.contains(Utils.getRow(currentLocNo) + "-" + Utils.getBay(currentLocNo))) { - command.setComplete(true); boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(shuttleProtocol.getCurrentLocNo()), shuttleProtocol.getShuttleNo(), nodes, false);//瑙i攣璺緞 if (!result) { return false;//瑙i攣澶辫触 } + command.setComplete(true); }else { return false; } -- Gitblit v1.9.1