| | |
| | | package com.zy.acs.manager.core.service; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.zy.acs.common.constant.RedisConstant; |
| | | import com.zy.acs.common.utils.RedisSupport; |
| | | import com.zy.acs.common.utils.Utils; |
| | | import com.zy.acs.framework.common.Cools; |
| | |
| | | import com.zy.acs.manager.core.domain.Lane; |
| | | import com.zy.acs.manager.core.service.astart.*; |
| | | import com.zy.acs.manager.core.service.astart.domain.DynamicNode; |
| | | import com.zy.acs.manager.core.utils.RouteGenerator; |
| | | import com.zy.acs.manager.manager.entity.Code; |
| | | import com.zy.acs.manager.manager.entity.Jam; |
| | | import com.zy.acs.manager.manager.entity.Route; |
| | |
| | | RetreatNavigateNode finialNode = null; |
| | | |
| | | PriorityQueue<RetreatNavigateNode> openQueue = new PriorityQueue<>(); |
| | | ArrayList<RetreatNavigateNode> existNodes = new ArrayList<>(); |
| | | Set<RetreatNavigateNode> existNodes = new HashSet<>(); |
| | | |
| | | openQueue.add(start); |
| | | existNodes.add(start); |
| | | boolean phaseSecond = true; |
| | | |
| | | while (openQueue.size() > 0 && null == finialNode) { |
| | | while (!openQueue.isEmpty() && null == finialNode) { |
| | | |
| | | RetreatNavigateNode currentNode = openQueue.poll(); |
| | | |
| | |
| | | int actualLanesOfTurn = 0; |
| | | int filterPointOfTurnTimes = 0; |
| | | |
| | | while (openQueue.size() > 0 && null == finialNode) { |
| | | while (!openQueue.isEmpty() && null == finialNode) { |
| | | |
| | | RetreatNavigateNode currentNode = openQueue.poll(); |
| | | List<RetreatNavigateNode> enableNodes = new ArrayList<>(); |
| | |
| | | } |
| | | |
| | | // 获取四周节点 |
| | | private ArrayList<RetreatNavigateNode> getNeighborNodes(RetreatNavigateNode currentNode, List<RetreatNavigateNode> existNodes) { |
| | | private ArrayList<RetreatNavigateNode> getNeighborNodes(RetreatNavigateNode currentNode, Set<RetreatNavigateNode> existNodes) { |
| | | |
| | | int x = currentNode.getX(); |
| | | int y = currentNode.getY(); |
| | |
| | | return neighbourNodes; |
| | | } |
| | | |
| | | private RetreatNavigateNode extendNeighborNodes(RetreatNavigateNode currentNode, RetreatNavigateNode extendNode, List<RetreatNavigateNode> existNodes, Integer dx, Integer dy) { |
| | | private RetreatNavigateNode extendNeighborNodes(RetreatNavigateNode currentNode, RetreatNavigateNode extendNode, Set<RetreatNavigateNode> existNodes, Integer dx, Integer dy) { |
| | | RetreatNavigateNode nextNode; |
| | | |
| | | if (null == dx || null == dy) { |
| | |
| | | return extendNeighborNodes(currentNode, nextNode, existNodes, dx, dy); |
| | | |
| | | } else { |
| | | if (this.isExist(nextNode, existNodes)) { |
| | | if (existNodes.contains(nextNode)) { |
| | | return null; |
| | | } |
| | | |
| | |
| | | nextNode.setCodeData(nextNodeCodeData); |
| | | |
| | | // 判断通过性 |
| | | Route route = routeService.findByCodeOfBoth( |
| | | codeService.selectByData(currentNodeCodeData).getId(), |
| | | codeService.selectByData(nextNodeCodeData).getId() |
| | | ); |
| | | if (null == route) { |
| | | String routeKey = RouteGenerator.generateRouteKey(currentNodeCodeData, nextNodeCodeData); |
| | | Object routeVal = redis.getMap(RedisConstant.AGV_MAP_ROUTE_HASH_FLAG, routeKey); |
| | | if (routeVal == null || !(Boolean) routeVal) { |
| | | return null; |
| | | } |
| | | |
| | | } |
| | | |
| | | return nextNode; |
| | | } |
| | | |
| | | private boolean isExist(RetreatNavigateNode node, List<RetreatNavigateNode> existNodes) { |
| | | for (RetreatNavigateNode existNode : existNodes) { |
| | | if (this.isSame(node, existNode)) { |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | private boolean isSame(RetreatNavigateNode o1, RetreatNavigateNode o2) { |