| | |
| | | } |
| | | |
| | | //检测障碍物车 |
| | | public synchronized boolean checkObstacle(String locNo, List<Integer> whiteShuttles) { |
| | | public synchronized boolean checkObstacle(String locNo, List<Integer> whiteShuttles, List<NavigateNode> whiteNodes) { |
| | | int innerCircle = 0; |
| | | int outerCircle = 3; |
| | | Config avoidInnerCircleConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "avoidInnerCircle")); |
| | | if(avoidInnerCircleConfig != null) { |
| | | if (avoidInnerCircleConfig != null) { |
| | | innerCircle = Integer.parseInt(avoidInnerCircleConfig.getValue()); |
| | | } |
| | | |
| | | Config avoidOuterCircleConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "avoidOuterCircle")); |
| | | if(avoidOuterCircleConfig != null) { |
| | | if (avoidOuterCircleConfig != null) { |
| | | outerCircle = Integer.parseInt(avoidOuterCircleConfig.getValue()); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | //获取外圈节点 |
| | | List<NavigateNode> outerNodes = getOuterNodes(locNo, outerCircle, whiteShuttlePointList, innerNodes); |
| | | List<NavigateNode> outerNodes = getOuterNodes(locNo, outerCircle, whiteShuttlePointList, innerNodes, whiteNodes); |
| | | |
| | | //将内圈节点中障碍小车调离 |
| | | for (Integer shuttleNo : nodesCar) { |
| | |
| | | List<NavigateNode> avoidInnerNodes = getInnerNodes(dispatchLocNo, innerCircle, new ArrayList<>()); |
| | | //计算内圈是否有小车 |
| | | List<Integer> avoidNodesCar = findNodesCar(avoidInnerNodes); |
| | | if(!avoidNodesCar.isEmpty()) { |
| | | continue; |
| | | if (!avoidNodesCar.isEmpty()) { |
| | | continue; |
| | | } |
| | | targetLocNo = dispatchLocNo; |
| | | break; |
| | | } |
| | | |
| | | if(targetLocNo == null) { |
| | | if (targetLocNo == null) { |
| | | continue; |
| | | } |
| | | shuttleDispatchUtils.dispatchShuttle(null, targetLocNo, shuttleNo); |
| | |
| | | return list; |
| | | } |
| | | |
| | | private List<NavigateNode> getOuterNodes(String locNo, int outerCircle, List<int[]> whiteShuttlePointList, List<NavigateNode> innerNodes) { |
| | | private List<NavigateNode> getOuterNodes(String locNo, int outerCircle, List<int[]> whiteShuttlePointList, List<NavigateNode> innerNodes, List<NavigateNode> whiteNodes) { |
| | | List<NavigateNode> outerNodes = new ArrayList<>(); |
| | | List<NavigateNode> outerNodesTmp = new ArrayList<>(); |
| | | int lev = Utils.getLev(locNo); |
| | |
| | | for (NavigateNode node : outerNodesTmp) { |
| | | boolean flag = false; |
| | | for (NavigateNode innerNode : innerNodes) { |
| | | if(node.getX() == innerNode.getX() && node.getY() == innerNode.getY()) { |
| | | if (node.getX() == innerNode.getX() && node.getY() == innerNode.getY()) { |
| | | flag = true; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | if(flag) { |
| | | if (flag) { |
| | | continue; |
| | | } |
| | | |
| | | for (NavigateNode whiteNode : whiteNodes) { |
| | | if (node.getX() == whiteNode.getX() && node.getY() == whiteNode.getY()) { |
| | | flag = true; |
| | | break; |
| | | } |
| | | } |
| | | |
| | | if (flag) { |
| | | continue; |
| | | } |
| | | |