| | |
| | | mapDataDispatcher.modifyDynamicMatrix(lev, pathList, agvNo); |
| | | } |
| | | |
| | | public synchronized void unlockPath(String agvNo, List<String> nodeList) { |
| | | try { |
| | | StopWatch stopWatch = new StopWatch(); |
| | | stopWatch.start(); |
| | | |
| | | if (Cools.isEmpty(agvNo, nodeList)) { |
| | | return; |
| | | } |
| | | |
| | | List<String> pathList = actionService.getPathListByAgv(agvNo).stream().distinct().collect(Collectors.toList()); |
| | | |
| | | List<String> inTrace = new ArrayList<>(); |
| | | |
| | | Set<String> outsideTrace = new HashSet<>(); |
| | | |
| | | if (Cools.isEmpty(pathList)) { |
| | | outsideTrace.addAll(nodeList); |
| | | } else { |
| | | |
| | | int size = nodeList.size(); |
| | | for (String code : pathList) { |
| | | |
| | | |
| | | Iterator<String> iterator = nodeList.iterator(); |
| | | while (iterator.hasNext()) { |
| | | |
| | | String next = iterator.next(); |
| | | |
| | | if (next.equals(code)) { |
| | | if (!inTrace.contains(next)) { |
| | | inTrace.add(next); |
| | | } |
| | | |
| | | iterator.remove(); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | assert inTrace.size() + nodeList.size() <= size; |
| | | |
| | | if (!Cools.isEmpty(nodeList)) { |
| | | outsideTrace.addAll(nodeList); |
| | | } |
| | | |
| | | if (!Cools.isEmpty(inTrace)) { |
| | | |
| | | String last = inTrace.get(inTrace.size() - 1); |
| | | |
| | | int idx = pathList.indexOf(last); |
| | | inTrace = pathList.subList(0, idx + 1); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | List<String> resetCodeList = new ArrayList<>(); |
| | | |
| | | Integer lev = null; |
| | | |
| | | DynamicNode[][] dynamicMatrix = mapDataDispatcher.getDynamicMatrix(lev); |
| | | |
| | | for (String code : inTrace) { |
| | | int[] node = mapDataDispatcher.getCodeMatrixIdx(lev, code); |
| | | DynamicNode dynamicNode = dynamicMatrix[node[0]][node[1]]; |
| | | |
| | | if (dynamicNode.getVehicle().equals(agvNo)) { |
| | | resetCodeList.add(code); |
| | | } |
| | | } |
| | | |
| | | for (String code : outsideTrace) { |
| | | int[] node = mapDataDispatcher.getCodeMatrixIdx(lev, code); |
| | | DynamicNode dynamicNode = dynamicMatrix[node[0]][node[1]]; |
| | | |
| | | if (dynamicNode.getVehicle().equals(agvNo)) { |
| | | resetCodeList.add(code); |
| | | } |
| | | } |
| | | |
| | | if (!Cools.isEmpty(resetCodeList)) { |
| | | |
| | | mapDataDispatcher.clearDynamicMatrixByCodeList(lev, resetCodeList); |
| | | } |
| | | |
| | | stopWatch.stop(); |
| | | if (stopWatch.getTime() > 50) { |
| | | log.info("解锁路径函数花费时间为:{}毫秒......", stopWatch.getTime()); |
| | | } |
| | | |
| | | } catch (Exception e) { |
| | | log.error("TrafficService.unlockPath", e); |
| | | } |
| | | |
| | | } |
| | | |
| | | public synchronized void unlockPath(String agvNo, String codeData) { |
| | | try { |
| | | StopWatch stopWatch = new StopWatch(); |