zy-acs-manager/src/main/java/com/zy/acs/manager/core/scheduler/MapDataWsScheduler.java
@@ -5,7 +5,7 @@ import com.zy.acs.manager.core.domain.BackpackDto; import com.zy.acs.manager.core.domain.MapWsAgvVo; import com.zy.acs.manager.core.domain.MapWsVo; import com.zy.acs.manager.core.service.astart.MapDataDispatcher; import com.zy.acs.manager.core.service.MapService; import com.zy.acs.manager.manager.entity.Agv; import com.zy.acs.manager.manager.entity.AgvDetail; import com.zy.acs.manager.manager.entity.AgvModel; @@ -46,7 +46,7 @@ @Autowired private CodeService codeService; @Autowired private MapDataDispatcher mapDataDispatcher; private MapService mapService; @PostConstruct public void init() { @@ -90,7 +90,7 @@ vo.setBattery(agvDetail.getSoc()); vo.setError(agvDetail.realError()); vo.setDynamicRoute(mapDataDispatcher.queryCodeListFromDynamicNode(null, agv.getUuid())); vo.setDynamicRoute(mapService.queryCodeListFromDynamicNode(null, agv.getUuid())); agvVos.add(vo); } zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/MapService.java
@@ -5,9 +5,11 @@ import com.zy.acs.framework.common.Cools; import com.zy.acs.manager.common.utils.MapDataUtils; import com.zy.acs.manager.core.constant.MapDataConstant; import com.zy.acs.manager.core.domain.SortCodeDto; import com.zy.acs.manager.core.domain.UnlockPathTask; import com.zy.acs.manager.core.service.astart.*; import com.zy.acs.manager.core.service.astart.domain.AStarNavigateNode; import com.zy.acs.manager.core.service.astart.domain.DynamicNode; import com.zy.acs.manager.core.service.floyd.FloydNavigateService; import com.zy.acs.manager.manager.entity.Code; import com.zy.acs.manager.manager.entity.Loc; @@ -21,9 +23,11 @@ import org.springframework.stereotype.Component; import java.util.*; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.IntStream; /** * Created by vincent on 2023/6/14 @@ -364,4 +368,41 @@ return turnMatrixNode == TurnNodeType.TURN.val; } public List<String> queryCodeListFromDynamicNode(Integer lev, String nodeType) { if (Cools.isEmpty(nodeType)) { return new ArrayList<>(); } lev = Optional.ofNullable(lev).orElse(MapDataDispatcher.MAP_DEFAULT_LEV); DynamicNode[][] dynamicMatrix = mapDataDispatcher.getDynamicMatrix(lev); String[][] codeMatrix = mapDataDispatcher.getCodeMatrix(lev); // concurrent ConcurrentLinkedQueue<SortCodeDto> codeList = new ConcurrentLinkedQueue<>(); IntStream.range(0, codeMatrix.length).parallel().forEach(i -> { for (int j = 0; j < codeMatrix[i].length; j++) { DynamicNode dynamicNode = dynamicMatrix[i][j]; if (nodeType.equals(dynamicNode.getVehicle())) { codeList.add(new SortCodeDto(codeMatrix[i][j], dynamicNode.getSerial())); } } }); // synchronize // List<SortCodeDto> codeList = new ArrayList<>(); // for (int i = 0; i < codeMatrix.length; i++) { // for (int j = 0; j < codeMatrix[i].length; j++) { // DynamicNode dynamicNode = dynamicMatrix[i][j]; // if (nodeType.equals(dynamicNode.getVehicle())) { // codeList.add(new SortCodeDto(codeMatrix[i][j], dynamicNode.getSerial())); // } // } // } return codeList.stream() .sorted(Comparator.comparingInt(SortCodeDto::getSerial)) .map(SortCodeDto::getCode) .collect(Collectors.toList()); } } zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/RetreatNavigateService.java
@@ -1,19 +1,16 @@ 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.common.utils.MapDataUtils; import com.zy.acs.manager.core.constant.MapDataConstant; 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; import com.zy.acs.manager.manager.entity.Segment; import com.zy.acs.manager.manager.enums.JamStateType; import com.zy.acs.manager.manager.service.*; @@ -39,8 +36,6 @@ @Autowired private CodeService codeService; @Autowired private RouteService routeService; @Autowired private MapDataDispatcher mapDataDispatcher; @Autowired @@ -113,7 +108,7 @@ if (!Cools.isEmpty(blackList) && blackList.contains(otherWave)) { continue label; } if (1 < mapDataDispatcher.queryCodeListFromDynamicNode(lev, otherWave).size()) { if (1 < mapService.queryCodeListFromDynamicNode(lev, otherWave).size()) { phaseSecond = false; // there is a running way continue label; } else { @@ -269,7 +264,7 @@ if (!Cools.isEmpty(blackList) && blackList.contains(otherWave)) { continue; } if (1 < mapDataDispatcher.queryCodeListFromDynamicNode(lev, otherWave).size()) { if (1 < mapService.queryCodeListFromDynamicNode(lev, otherWave).size()) { if (null != availablePointOfTurn && actualLanesOfTurn > 0) { actualLanesOfTurn --; zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/TrafficService.java
@@ -441,7 +441,7 @@ List<String> otherWaveList = MapDataUtils.hasOtherWave(waveNodeList, agvNo); if (!Cools.isEmpty(otherWaveList)) { for (String otherWave : otherWaveList) { if (1 < mapDataDispatcher.queryCodeListFromDynamicNode(lev, otherWave).size()) { if (1 < mapService.queryCodeListFromDynamicNode(lev, otherWave).size()) { blockVehicleList.add(new BlockVehicleDto(otherWave, false)); } else { blockVehicleList.add(new BlockVehicleDto(otherWave, true)); @@ -585,7 +585,7 @@ List<String> list = GsonUtils.fromJsonToList(jam.getJamPath(), String.class); Agv jamAgv = agvService.getById(jam.getJamAgv()); List<String> jamDynamicNodes = mapDataDispatcher.queryCodeListFromDynamicNode(lev, jamAgv.getUuid()); List<String> jamDynamicNodes = mapService.queryCodeListFromDynamicNode(lev, jamAgv.getUuid()); // jamDynamicNodes has sorted String firstCodeNode = jamDynamicNodes.stream().findFirst().orElse(null); zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java
@@ -6,7 +6,6 @@ import com.zy.acs.common.utils.RedisSupport; import com.zy.acs.framework.common.Cools; import com.zy.acs.framework.exception.CoolException; import com.zy.acs.manager.core.domain.SortCodeDto; 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; @@ -17,9 +16,6 @@ import lombok.extern.slf4j.Slf4j; import java.util.*; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.stream.Collectors; import java.util.stream.IntStream; /** * Created by vincent on 6/6/2024 @@ -481,43 +477,6 @@ } } return codeMatrixIdxList; } public List<String> queryCodeListFromDynamicNode(Integer lev, String nodeType) { if (Cools.isEmpty(nodeType)) { return new ArrayList<>(); } lev = Optional.ofNullable(lev).orElse(MAP_DEFAULT_LEV); DynamicNode[][] dynamicMatrix = getDynamicMatrix(lev); String[][] codeMatrix = this.getCodeMatrix(lev); // concurrent ConcurrentLinkedQueue<SortCodeDto> codeList = new ConcurrentLinkedQueue<>(); IntStream.range(0, codeMatrix.length).parallel().forEach(i -> { for (int j = 0; j < codeMatrix[i].length; j++) { DynamicNode dynamicNode = dynamicMatrix[i][j]; if (nodeType.equals(dynamicNode.getVehicle())) { codeList.add(new SortCodeDto(codeMatrix[i][j], dynamicNode.getSerial())); } } }); // synchronize // List<SortCodeDto> codeList = new ArrayList<>(); // for (int i = 0; i < codeMatrix.length; i++) { // for (int j = 0; j < codeMatrix[i].length; j++) { // DynamicNode dynamicNode = dynamicMatrix[i][j]; // if (nodeType.equals(dynamicNode.getVehicle())) { // codeList.add(new SortCodeDto(codeMatrix[i][j], dynamicNode.getSerial())); // } // } // } return codeList.stream() .sorted(Comparator.comparingInt(SortCodeDto::getSerial)) .map(SortCodeDto::getCode) .collect(Collectors.toList()); } public void modifyDynamicMatrix(Integer lev, List<int[]> codeIdxList, String vehicle) {