version/db/sqlIndex
@@ -1,17 +1,34 @@ # man_action CREATE INDEX idx_agv_action ON man_action(agv_id, action_sts); CREATE INDEX idx_group_io_time ON man_action(group_id, io_time); CREATE INDEX idx_priority ON man_action(priority); CREATE INDEX idx_action_sts ON man_action(action_sts); # man_action_sts CREATE INDEX idx_action_sts_uuid ON man_action_sts(uuid); # man_action_type CREATE INDEX idx_action_type_uuid ON man_action_type(uuid); # man_agv_model CREATE INDEX idx_agv_model_type ON man_agv_model(type); # man_bus_sts CREATE INDEX idx_bus_sts_uuid ON man_bus_sts(uuid); # man_loc_sts CREATE INDEX idx_loc_sts_uuid ON man_loc_sts(uuid); # man_task_sts CREATE INDEX idx_task_sts_uuid ON man_task_sts(uuid); # man_task_type CREATE INDEX idx_task_type_uuid ON man_task_type(uuid); # man_task CREATE INDEX idx_task_seq_num ON man_task(seq_num); CREATE INDEX idx_task_agv_id ON man_task(agv_id); CREATE INDEX idx_task_agv_id_task_sts ON man_task(agv_id, task_sts); # man_zone CREATE INDEX idx_zone_uuid ON man_zone(uuid); # man_agv_detail CREATE INDEX idx_agv_detail_agv_id ON man_agv_detail(agv_id); CREATE INDEX idx_agv_id_code_pos ON man_agv_detail(agv_id, code, pos); # man_agv CREATE INDEX idx_agv_uuid ON man_agv(uuid); CREATE INDEX idx_agv_deleted_uuid ON man_agv (deleted, uuid); # sys_config CREATE INDEX idx_config_flag ON sys_config(flag); CREATE INDEX idx_config_deleted_flag ON sys_config(deleted, flag); zy-acs-flow/src/map/constants.js
@@ -1,5 +1,5 @@ export const ANIMATE_DURING_TIME = 300; export const ANIMATE_DURING_TIME = 800; export const MAP_DEFAULT_ROTATION = 270; zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
@@ -33,7 +33,7 @@ @Component public class MapDataWsScheduler { public static final int WEBSOCKET_BROADCAST_INTERVAL = 300; public static final int WEBSOCKET_BROADCAST_INTERVAL = 800; private ExecutorService singleThreadExecutor; zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MainService.java
@@ -658,7 +658,6 @@ assert agvSpeedType != null; AgvDetail agvDetail = agvDetailService.selectByAgvId(agvId); assert agvDetail != null; List<Action> actionList = new ArrayList<>(); // start node @@ -697,7 +696,7 @@ nextDirection = workDirection; reverse = true; } if (!lastDirection.equals(nextDirection) || actionList.size() == 0) { if (!lastDirection.equals(nextDirection) || actionList.isEmpty()) { // turn actionList.add(new Action( null, // 编号 zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java
@@ -58,7 +58,9 @@ AStarNavigateNode startNode = new AStarNavigateNode(startMapIdx[0], startMapIdx[1], startCode.getData()); AStarNavigateNode endNode = new AStarNavigateNode(endMapIdx[0], endMapIdx[1], endCode.getData()); // long startTime = System.currentTimeMillis(); AStarNavigateNode finishNode = aStarNavigateService.execute(agvNo, startNode, endNode, lock, blackList, segment); // System.out.println("A Star Spend time :" + (System.currentTimeMillis() - startTime)); if (null == finishNode) { return new ArrayList<>(); } zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/PatrolService.java
@@ -34,7 +34,7 @@ @Service public class PatrolService { private static final int SCHEDULE_TIME_INTERVAL = 300; private static final int SCHEDULE_TIME_INTERVAL = 100; public static final Map<String, ScheduledFuture<?>> AGV_PATROL_MAP = new ConcurrentHashMap<>(); @@ -67,14 +67,11 @@ private void patrolOfMove(String agvNo) { Agv agv = agvService.selectByUuid(agvNo); AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId()); AgvDetail agvDetail = agvDetailService.selectMajorByAgvId(agv.getId()); if (taskService.count(new LambdaQueryWrapper<Task>() .eq(Task::getAgvId, agv.getId()) .and(i -> { i.eq(Task::getTaskSts, TaskStsType.WAITING.val()) .or().eq(Task::getTaskSts, TaskStsType.ASSIGN.val()) .or().eq(Task::getTaskSts, TaskStsType.PROGRESS.val()); })) > 0) { .in(Task::getTaskSts, TaskStsType.ASSIGN.val(), TaskStsType.PROGRESS.val()) ) > 0) { return; } if (!agvService.judgeEnable(agv.getId())) { zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java
@@ -15,7 +15,6 @@ import org.springframework.stereotype.Service; import java.util.*; import java.util.concurrent.CopyOnWriteArrayList; /** * Created by vincent on 6/12/2024 @@ -63,15 +62,23 @@ String[][] codeMatrix = mapDataDispatcher.getCodeMatrix(null); DynamicNode[][] dynamicMatrix = mapDataDispatcher.getDynamicMatrix(null); String[][] waveMatrix = mapDataDispatcher.getWaveMatrix(null); long getNeighborNodesTime = 0; int getNeighborNodesCount = 0; while (!openQueue.isEmpty()) { // 取优先队列顶部元素并且把这个元素从Open表中删除,取F值最小的节点 AStarNavigateNode currentNode = openQueue.poll(); // 终点 if (currentNode.getX() == end.getX() && currentNode.getY() == end.getY()) { // System.out.println("getNeighborNodes spend time: " + getNeighborNodesTime +", count: " + getNeighborNodesCount); return currentNode; } long currentTime = System.currentTimeMillis(); List<AStarNavigateNode> neighbourNodes = this.getNeighborNodes(currentNode, mapMatrix, existNodes); getNeighborNodesTime += System.currentTimeMillis() - currentTime; getNeighborNodesCount ++; for (AStarNavigateNode node : neighbourNodes) { node.setCodeData(codeMatrix[node.getX()][node.getY()]); @@ -97,6 +104,9 @@ assert !vehicle.equals(DynamicNodeType.BLOCK.val); if (!vehicle.equals(DynamicNodeType.ACCESS.val)) { if (!vehicle.equals(agvNo)) { if (lock) { continue; } // 如果存在车辆,则增加权重 2 或者 3,因为拐点会增加权重 1 // vehicle已经为当前segment做过了避让,且避让任务已完成,则权重值增加 @@ -107,10 +117,6 @@ weight += (WEIGHT_CALC_FACTOR * 2); } } if (lock) { continue; } } } @@ -120,7 +126,6 @@ if (!waveNode.equals(WaveNodeType.ENABLE.val)) { List<String> waveNodeList = MapDataUtils.parseWaveNode(waveNode); List<String> otherWaveList = MapDataUtils.hasOtherWave(waveNodeList, agvNo); if (!Cools.isEmpty(otherWaveList)) { if (lock) { @@ -178,7 +183,7 @@ // existNodes.add(node); } } // System.out.println("getNeighborNodes spend time: " + getNeighborNodesTime +", count: " + getNeighborNodesCount); return null; } @@ -191,14 +196,8 @@ int y = currentNode.getY(); AStarNavigateNode parent = currentNode.getParent(); List<AStarNavigateNode> neighbourNodes = new CopyOnWriteArrayList<>(); // List<AStarNavigateNode> possibleNodes = Arrays.asList( // new AStarNavigateNode(x, y + 1), // right // new AStarNavigateNode(x, y - 1), // left // new AStarNavigateNode(x - 1, y), // up // new AStarNavigateNode(x + 1, y) // down // ); // List<AStarNavigateNode> neighbourNodes = new CopyOnWriteArrayList<>(); List<AStarNavigateNode> neighbourNodes = new ArrayList<>(); List<AStarNavigateNode> possibleNodes = new ArrayList<>(); for (int[] d: DIRECTIONS) { @@ -211,10 +210,17 @@ possibleNodes.add(new AStarNavigateNode(nx, ny)); } possibleNodes.parallelStream() .map(extendNode -> extendNeighborNodes(currentNode, extendNode, mapMatrix, existNodes, null, null)) .filter(Objects::nonNull) .forEach(neighbourNodes::add); // possibleNodes.parallelStream() // .map(extendNode -> extendNeighborNodes(currentNode, extendNode, mapMatrix, existNodes, null, null)) // .filter(Objects::nonNull) // .forEach(neighbourNodes::add); for (AStarNavigateNode pn : possibleNodes) { AStarNavigateNode next = extendNeighborNodes(currentNode, pn, mapMatrix, existNodes, null, null); if (next != null) { neighbourNodes.add(next); } } return neighbourNodes; } zy-acs-manager/src/main/java/com/zy/acs/manager/manager/mapper/AgvDetailMapper.java
@@ -6,6 +6,8 @@ public interface AgvDetailMapper extends BaseMapper<AgvDetail> { AgvDetail selectMajorByAgvId(@Param("agvId") Long agvId); int updatePosCode(@Param("id") Long id, @Param("codeId") Long codeId); int updateUnPosCode(@Param("id") Long id, @Param("lastCode") Long lastCode); zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/AgvDetailService.java
@@ -7,6 +7,8 @@ public interface AgvDetailService extends IService<AgvDetail> { AgvDetail selectMajorByAgvId(Long agvId); AgvDetail selectByAgvId(Long agvId); AgvDetail selectByAgvNo(String agvNo); zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvDetailServiceImpl.java
@@ -21,6 +21,11 @@ private AgvModelService agvModelService; @Override public AgvDetail selectMajorByAgvId(Long agvId) { return this.baseMapper.selectMajorByAgvId(agvId); } @Override public AgvDetail selectByAgvId(Long agvId) { return this.getOne(new LambdaQueryWrapper<AgvDetail>().eq(AgvDetail::getAgvId, agvId)); } zy-acs-manager/src/main/java/com/zy/acs/manager/manager/service/impl/AgvServiceImpl.java
@@ -77,10 +77,7 @@ AgvModel agvModel = agvModelService.getById(agv.getAgvModel()); if (0 < segmentService.count(new LambdaQueryWrapper<Segment>() .eq(Segment::getAgvId, agvId) .and( i -> { // i.eq(Segment::getState, SegmentStateType.WAITING.toString()).or() i.eq(Segment::getState, SegmentStateType.RUNNING.toString()); }) .eq(Segment::getState, SegmentStateType.RUNNING.toString()) )) { log.warn("[{}]号Agv正在忙碌 - segment......", agv.getUuid()); return false; @@ -89,7 +86,7 @@ log.warn("[{}]号Agv不是在线状态......", agv.getUuid()); return false; } AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId()); AgvDetail agvDetail = agvDetailService.selectMajorByAgvId(agv.getId()); if (null == agvDetail) { log.warn("[{}]号Agv未收到状态包......", agv.getUuid()); return false; zy-acs-manager/src/main/resources/mapper/manager/AgvDetailMapper.xml
@@ -26,6 +26,13 @@ </where> </sql> <select id="selectMajorByAgvId" resultType="com.zy.acs.manager.manager.entity.AgvDetail"> SELECT id, agv_id, pos, code, last_code, agv_angle, vol, backpack, status, deleted FROM man_agv_detail WHERE agv_id = #{agvId} LIMIT 1 </select> <update id="updatePosCode"> update man_agv_detail set code = #{codeId},