| | |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.zy.acs.framework.common.Cools; |
| | | import com.zy.acs.framework.exception.CoolException; |
| | | import com.zy.acs.common.constant.RedisConstant; |
| | | 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.common.utils.MapDataUtils; |
| | | 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.Route; |
| | | import com.zy.acs.manager.manager.enums.StatusType; |
| | | import com.zy.acs.manager.manager.service.CodeService; |
| | | import com.zy.acs.manager.manager.service.RouteService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.event.EventListener; |
| | | import org.springframework.boot.context.event.ApplicationReadyEvent; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Optional; |
| | | import javax.annotation.PostConstruct; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * Created by vincent on 6/6/2024 |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | public class MapDataDispatcher { |
| | | |
| | | public static final Integer MAP_DEFAULT_LEV = 1; |
| | | |
| | | private final RedisSupport redis = RedisSupport.defaultRedisSupport; |
| | | |
| | | public static final Boolean CACHE_CODE_MATRIX = Boolean.FALSE; |
| | | List<Double> xIdxList; |
| | | List<Double> yIdxList; |
| | | |
| | | private String[][] codeMatrix; |
| | | |
| | | public static final Boolean CACHE_MAP_MATRIX = Boolean.FALSE; |
| | | |
| | | private int[][] mapMatrix; |
| | | |
| | | public static final Boolean CACHE_TURN_MATRIX = Boolean.FALSE; |
| | | |
| | | private int[][] turnMatrix; |
| | | |
| | | public static final Boolean CACHE_CDA_MATRIX = Boolean.FALSE; |
| | | private Double[][][] cdaMatrix; |
| | | |
| | | private String[][] cdaMatrix; |
| | | public Map<String, Boolean> routeCdaMap = new HashMap<>(); |
| | | |
| | | private final CodeService codeService; |
| | | @Autowired |
| | | private CodeService codeService; |
| | | |
| | | private final RouteService routeService; |
| | | @Autowired |
| | | private RouteService routeService; |
| | | |
| | | public MapDataDispatcher(CodeService codeService, RouteService routeService) { |
| | | this.codeService = codeService; |
| | | this.routeService = routeService; |
| | | @PostConstruct |
| | | public void init() { |
| | | String[][] codeMatrix = this.getCodeMatrix(null); |
| | | this.initRouteMap(null); |
| | | if (codeMatrix.length > 0) { |
| | | this.getMapMatrix(null, null); |
| | | this.getTurnMatrix(null); |
| | | this.getCdaMatrix(null); |
| | | this.getDynamicMatrix(null); |
| | | } |
| | | } |
| | | |
| | | public String[][] getWaveMatrix(Integer lev) { |
| | |
| | | redis.setValue(RedisConstant.AGV_MAP_ASTAR_DYNAMIC_FLAG, String.valueOf(lev), JSON.toJSONString(dynamicMatrix)); |
| | | } |
| | | |
| | | public String[][] getCdaMatrix(Integer lev) { |
| | | public Double[][][] getCdaMatrix(Integer lev) { |
| | | lev = Optional.ofNullable(lev).orElse(MAP_DEFAULT_LEV); |
| | | String[][] cdaMatrix; |
| | | |
| | | if (!CACHE_CDA_MATRIX) { |
| | | if (null == this.cdaMatrix) { |
| | | cdaMatrix = this.initCdaMatrix(lev); |
| | | setCdaMatrix(lev, cdaMatrix); |
| | | } else { |
| | | cdaMatrix = this.cdaMatrix; |
| | | } |
| | | } else { |
| | | // redis |
| | | if (null == this.cdaMatrix) { |
| | | String cdaMatrixStr = redis.getValue(RedisConstant.AGV_MAP_ASTAR_CDA_FLAG, String.valueOf(lev)); |
| | | if (Cools.isEmpty(cdaMatrixStr)) { |
| | | cdaMatrix = this.initCdaMatrix(lev); |
| | | setCdaMatrix(lev, cdaMatrix); |
| | | } else { |
| | | cdaMatrix = JSON.parseObject(cdaMatrixStr, String[][].class); |
| | | if (!Cools.isEmpty(cdaMatrixStr)) { |
| | | String[][] cdaStrMatrix = JSON.parseObject(cdaMatrixStr, String[][].class); |
| | | this.cdaMatrix = MapDataUtils.preComputeCdaMatrix(cdaStrMatrix); |
| | | } |
| | | } |
| | | if (null == cdaMatrix) { |
| | | // init |
| | | if (null == this.cdaMatrix) { |
| | | String[][] initCdaMatrix = this.initCdaMatrix(lev); |
| | | setCdaMatrix(lev, initCdaMatrix); |
| | | } |
| | | // valid |
| | | if (null == this.cdaMatrix) { |
| | | throw new CoolException("the floor " + lev + " cannot found cda matrix !!!"); |
| | | } |
| | | return cdaMatrix; |
| | | return this.cdaMatrix; |
| | | } |
| | | |
| | | public void setCdaMatrix(Integer lev, String[][] cdaMatrix) { |
| | | if (!CACHE_CDA_MATRIX) { |
| | | this.cdaMatrix = cdaMatrix; |
| | | } else { |
| | | redis.setValue(RedisConstant.AGV_MAP_ASTAR_CDA_FLAG, String.valueOf(lev), JSON.toJSONString(cdaMatrix)); |
| | | } |
| | | public void setCdaMatrix(Integer lev, String[][] cdaStrMatrix) { |
| | | redis.setValue(RedisConstant.AGV_MAP_ASTAR_CDA_FLAG, String.valueOf(lev), JSON.toJSONString(cdaStrMatrix)); |
| | | this.cdaMatrix = MapDataUtils.preComputeCdaMatrix(cdaStrMatrix); |
| | | } |
| | | |
| | | public int[][] getTurnMatrix(Integer lev) { |
| | | lev = Optional.ofNullable(lev).orElse(MAP_DEFAULT_LEV); |
| | | int[][] turnMatrix; |
| | | if (!CACHE_TURN_MATRIX) { |
| | | if (null == this.turnMatrix) { |
| | | turnMatrix = this.initTurnMatrix(lev); |
| | | setTurnMatrix(lev, turnMatrix); |
| | | } else { |
| | | turnMatrix = this.turnMatrix; |
| | | } |
| | | } else { |
| | | // redis |
| | | if (null == this.turnMatrix) { |
| | | String turnMatrixStr = redis.getValue(RedisConstant.AGV_MAP_ASTAR_TURN_FLAG, String.valueOf(lev)); |
| | | if (Cools.isEmpty(turnMatrixStr)) { |
| | | turnMatrix = this.initTurnMatrix(lev); |
| | | setTurnMatrix(lev, turnMatrix); |
| | | } else { |
| | | turnMatrix = JSON.parseObject(turnMatrixStr, int[][].class); |
| | | if (!Cools.isEmpty(turnMatrixStr)) { |
| | | this.turnMatrix = JSON.parseObject(turnMatrixStr, int[][].class); |
| | | } |
| | | } |
| | | if (null == turnMatrix) { |
| | | // init |
| | | if (null == this.turnMatrix) { |
| | | int[][] initTurnMatrix = this.initTurnMatrix(lev); |
| | | setTurnMatrix(lev, initTurnMatrix); |
| | | } |
| | | // valid |
| | | if (null == this.turnMatrix) { |
| | | throw new CoolException("the floor " + lev + " cannot found turn matrix !!!"); |
| | | } |
| | | return turnMatrix; |
| | | return this.turnMatrix; |
| | | } |
| | | |
| | | public void setTurnMatrix(Integer lev, int[][] turnMatrix) { |
| | | if (!CACHE_TURN_MATRIX) { |
| | | this.turnMatrix = turnMatrix; |
| | | } else { |
| | | redis.setValue(RedisConstant.AGV_MAP_ASTAR_TURN_FLAG, String.valueOf(lev), JSON.toJSONString(turnMatrix)); |
| | | } |
| | | redis.setValue(RedisConstant.AGV_MAP_ASTAR_TURN_FLAG, String.valueOf(lev), JSON.toJSONString(turnMatrix)); |
| | | this.turnMatrix = turnMatrix; |
| | | } |
| | | |
| | | public int[][] getMapMatrix(Integer lev, List<String> lockNodes) { |
| | | lev = Optional.ofNullable(lev).orElse(MAP_DEFAULT_LEV); |
| | | int[][] mapMatrix; |
| | | if (!CACHE_MAP_MATRIX) { |
| | | if (null == this.mapMatrix) { |
| | | mapMatrix = this.initMapMatrix(lev); |
| | | setMapMatrix(lev, mapMatrix); |
| | | } else { |
| | | mapMatrix = this.mapMatrix; |
| | | } |
| | | } else { |
| | | // redis |
| | | if (null == this.mapMatrix) { |
| | | String mapMatrixStr = redis.getValue(RedisConstant.AGV_MAP_ASTAR_FLAG, String.valueOf(lev)); |
| | | if (Cools.isEmpty(mapMatrixStr)) { |
| | | mapMatrix = this.initMapMatrix(lev); |
| | | setMapMatrix(lev, mapMatrix); |
| | | } else { |
| | | mapMatrix = JSON.parseObject(mapMatrixStr, int[][].class); |
| | | if (!Cools.isEmpty(mapMatrixStr)) { |
| | | this.mapMatrix = JSON.parseObject(mapMatrixStr, int[][].class); |
| | | } |
| | | } |
| | | if (null == mapMatrix) { |
| | | // init |
| | | if (null == this.mapMatrix) { |
| | | int[][] initMapMatrix = this.initMapMatrix(lev); |
| | | setMapMatrix(lev, initMapMatrix); |
| | | } |
| | | // valid |
| | | if (null == this.mapMatrix) { |
| | | throw new CoolException("the floor " + lev + " cannot found map matrix !!!"); |
| | | } |
| | | if (!Cools.isEmpty(lockNodes)) { |
| | | mapMatrix = filterMapData(mapMatrix, lev, lockNodes); |
| | | } |
| | | return mapMatrix; |
| | | return this.mapMatrix; |
| | | } |
| | | |
| | | public void setMapMatrix(Integer lev, int[][] mapMatrix) { |
| | | if (!CACHE_MAP_MATRIX) { |
| | | this.mapMatrix = mapMatrix; |
| | | } else { |
| | | redis.setValue(RedisConstant.AGV_MAP_ASTAR_FLAG, String.valueOf(lev), JSON.toJSONString(mapMatrix)); |
| | | } |
| | | redis.setValue(RedisConstant.AGV_MAP_ASTAR_FLAG, String.valueOf(lev), JSON.toJSONString(mapMatrix)); |
| | | this.mapMatrix = mapMatrix; |
| | | } |
| | | |
| | | public String[][] getCodeMatrix(Integer lev) { |
| | | lev = Optional.ofNullable(lev).orElse(MAP_DEFAULT_LEV); |
| | | String[][] codeMatrix; |
| | | if (!CACHE_CODE_MATRIX) { |
| | | if (null == this.codeMatrix) { |
| | | codeMatrix = this.initCodeMatrix(lev); |
| | | setCodeMatrix(lev, codeMatrix); |
| | | } else { |
| | | codeMatrix = this.codeMatrix; |
| | | } |
| | | } else { |
| | | // redis |
| | | if (null == this.codeMatrix) { |
| | | String codeMatrixStr = redis.getValue(RedisConstant.AGV_MAP_ASTAR_CODE_FLAG, String.valueOf(lev)); |
| | | if (Cools.isEmpty(codeMatrixStr)) { |
| | | codeMatrix = this.initCodeMatrix(lev); |
| | | setCodeMatrix(lev, codeMatrix); |
| | | } else { |
| | | codeMatrix = JSON.parseObject(codeMatrixStr, String[][].class); |
| | | if (!Cools.isEmpty(codeMatrixStr)) { |
| | | this.codeMatrix = JSON.parseObject(codeMatrixStr, String[][].class); |
| | | } |
| | | } |
| | | if (null == codeMatrix) { |
| | | // init |
| | | if (null == this.codeMatrix) { |
| | | String[][] initCodeMatrix = this.initCodeMatrix(lev); |
| | | setCodeMatrix(lev, initCodeMatrix); |
| | | } |
| | | // valid |
| | | if (null == this.codeMatrix) { |
| | | throw new CoolException("the floor " + lev + " cannot found code matrix !!!"); |
| | | } |
| | | return codeMatrix; |
| | | return this.codeMatrix; |
| | | } |
| | | |
| | | public void setCodeMatrix(Integer lev, String[][] codeMatrix) { |
| | | if (!CACHE_CODE_MATRIX) { |
| | | this.codeMatrix = codeMatrix; |
| | | } else { |
| | | redis.setValue(RedisConstant.AGV_MAP_ASTAR_CODE_FLAG, String.valueOf(lev), JSON.toJSONString(codeMatrix)); |
| | | } |
| | | redis.setValue(RedisConstant.AGV_MAP_ASTAR_CODE_FLAG, String.valueOf(lev), JSON.toJSONString(codeMatrix)); |
| | | this.codeMatrix = codeMatrix; |
| | | } |
| | | |
| | | public String[][] initWaveMatrix(Integer lev) { |
| | |
| | | } |
| | | |
| | | public synchronized DynamicNode[][] initDynamicMatrix(Integer lev) { |
| | | log.info("There is initializing Dynamic Matrix......"); |
| | | lev = Optional.ofNullable(lev).orElse(MAP_DEFAULT_LEV); |
| | | |
| | | String[][] codeMatrix = getCodeMatrix(lev); |
| | | if (null == codeMatrix || codeMatrix.length == 0) { |
| | | return new DynamicNode[0][0]; |
| | | } |
| | | DynamicNode[][] dynamicMatrix = new DynamicNode[codeMatrix.length][codeMatrix[0].length]; |
| | | |
| | | for (int i = 0; i < codeMatrix.length; i++) { |
| | |
| | | } |
| | | |
| | | public synchronized String[][] initCdaMatrix(Integer lev) { |
| | | log.info("There is initializing Cda Matrix......"); |
| | | lev = Optional.ofNullable(lev).orElse(MAP_DEFAULT_LEV); |
| | | |
| | | if (Cools.isEmpty(xIdxList, yIdxList)) { |
| | | this.initCodeMatrix(lev); |
| | | } |
| | | |
| | | String[][] codeMatrix = getCodeMatrix(lev); |
| | | String[][] cdaMatrix = new String[codeMatrix.length][codeMatrix[0].length]; |
| | |
| | | for (int i = 0; i < codeMatrix.length; i++) { |
| | | for (int j = 0; j < codeMatrix[i].length; j++) { |
| | | if (CodeNodeType.NONE.val.equals(codeMatrix[i][j])) { |
| | | cdaMatrix[i][j] = CdaNodeType.DISABLE.val; |
| | | List<Double> cdaArr = new ArrayList<>(); |
| | | cdaArr.add(xIdxList.get(j)); |
| | | cdaArr.add(yIdxList.get(i)); |
| | | cdaMatrix[i][j] = JSON.toJSONString(cdaArr); |
| | | } else { |
| | | Code currCode = codeService.selectByData(codeMatrix[i][j]); |
| | | Code currCode = codeService.getCacheByData(codeMatrix[i][j]); |
| | | if (null != currCode) { |
| | | List<Double> cdaArr = new ArrayList<>(); |
| | | cdaArr.add(currCode.getX()); |
| | |
| | | } |
| | | |
| | | public synchronized int[][] initTurnMatrix(Integer lev) { |
| | | log.info("There is initializing Turn Matrix......"); |
| | | lev = Optional.ofNullable(lev).orElse(MAP_DEFAULT_LEV); |
| | | |
| | | String[][] codeMatrix = getCodeMatrix(lev); |
| | |
| | | if (CodeNodeType.NONE.val.equals(codeMatrix[i][j])) { |
| | | turnMatrix[i][j] = TurnNodeType.NONE.val; |
| | | } else { |
| | | Code currCode = codeService.selectByData(codeMatrix[i][j]); |
| | | Code currCode = codeService.getCacheByData(codeMatrix[i][j]); |
| | | List<String> neighborCodeList = routeService.findCodeDataOfSingle(currCode.getId()); |
| | | |
| | | switch (neighborCodeList.size()) { |
| | |
| | | |
| | | |
| | | public synchronized int[][] initMapMatrix(Integer lev) { |
| | | log.info("There is initializing Map Matrix......"); |
| | | lev = Optional.ofNullable(lev).orElse(MAP_DEFAULT_LEV); |
| | | |
| | | String[][] codeMatrix = getCodeMatrix(lev); |
| | |
| | | return mapMatrix; |
| | | } |
| | | |
| | | public boolean validRouteCdaKey(String routeCdaKey) { |
| | | if (Cools.isEmpty(routeCdaKey)) { |
| | | return false; |
| | | } |
| | | Boolean result = this.routeCdaMap.get(routeCdaKey); |
| | | if (null == result) { |
| | | return false; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | public synchronized void initRouteMap(Integer lev) { |
| | | log.info("There is initializing Route Map......"); |
| | | lev = Optional.ofNullable(lev).orElse(MAP_DEFAULT_LEV); |
| | | Set<String> routeKeys = redis.getMapKeys(RedisConstant.AGV_MAP_ROUTE_HASH_FLAG); |
| | | Set<String> routeCdaKeys = redis.getMapKeys(RedisConstant.AGV_MAP_ROUTE_CDA_HASH_FLAG); |
| | | |
| | | List<Route> routeList = routeService.list(new LambdaQueryWrapper<Route>().eq(Route::getStatus, StatusType.ENABLE.val)); |
| | | if (routeKeys.size() == routeList.size() && routeKeys.size() == routeCdaKeys.size()) { |
| | | for (String routeCdaKey : routeCdaKeys) { |
| | | this.routeCdaMap.put(routeCdaKey, Boolean.TRUE); |
| | | } |
| | | return; |
| | | } |
| | | for (Route route : routeList) { |
| | | Code startCode = codeService.getCacheById(route.getStartCode()); |
| | | int[] startCodeIdx = getCodeMatrixIdx(lev, startCode.getData()); |
| | | Code endCode = codeService.getCacheById(route.getEndCode()); |
| | | int[] codeMatrixIdx = getCodeMatrixIdx(lev, endCode.getData()); |
| | | |
| | | String routeKey = RouteGenerator.generateRouteKey(startCode.getData(), endCode.getData()); |
| | | if (Cools.isEmpty(routeKey)) { |
| | | continue; |
| | | } |
| | | redis.setMap(RedisConstant.AGV_MAP_ROUTE_HASH_FLAG, routeKey, Boolean.TRUE); |
| | | |
| | | String routeCdaKey = RouteGenerator.generateRouteCdaKey(startCodeIdx, codeMatrixIdx); |
| | | if (Cools.isEmpty(routeCdaKey)) { |
| | | continue; |
| | | } |
| | | redis.setMap(RedisConstant.AGV_MAP_ROUTE_CDA_HASH_FLAG, routeCdaKey, Boolean.TRUE); |
| | | this.routeCdaMap.put(routeCdaKey, Boolean.TRUE); |
| | | } |
| | | } |
| | | |
| | | public synchronized String[][] initCodeMatrix(Integer lev) { |
| | | log.info("【ASTAR】正在计算矩阵数据......"); |
| | | log.info("There is initializing Code Matrix......"); |
| | | lev = Optional.ofNullable(lev).orElse(MAP_DEFAULT_LEV); |
| | | List<Code> codeList = codeService.list(new LambdaQueryWrapper<Code>() |
| | | .eq(Code::getStatus, 1) |
| | | .orderByAsc(Code::getY) |
| | | .orderByAsc(Code::getX) |
| | | ); |
| | | // int xCount = codeService.selectDistinctCountFromX(); |
| | | // int yCount = codeService.selectDistinctCountFromY(); |
| | | // // [][] 第一个是排的数量 第二个是列的数量 |
| | | // String[][] codeMatrix = new String[yCount][xCount]; |
| | | |
| | | List<Double> xIdxList = new ArrayList<>(); |
| | | List<Double> yIdxList = new ArrayList<>(); |
| | | xIdxList = new ArrayList<>(); |
| | | yIdxList = new ArrayList<>(); |
| | | for (Code code : codeList) { |
| | | Double x = code.getX(); |
| | | Double y = code.getY(); |
| | |
| | | // [][] 第一个是排的数量 第二个是列的数量 |
| | | String[][] codeMatrix = new String[yIdxList.size()][xIdxList.size()]; |
| | | |
| | | int idxX = -1; |
| | | int idxY = -1; |
| | | double lastX = -1; |
| | | double lastY = -1; |
| | | for (Code code : codeList) { |
| | | Double x = code.getX(); |
| | | Double y = code.getY(); |
| | | // if (y != lastY) { |
| | | // idxY ++; |
| | | // idxX = 0; |
| | | // lastY = y; |
| | | // lastX = x; |
| | | // } |
| | | // if (x != lastX) { |
| | | // idxX++; |
| | | // lastX = x; |
| | | // } |
| | | // codeMatrix[idxY][idxX] = code.getData(); |
| | | |
| | | codeMatrix[yIdxList.indexOf(y)][xIdxList.indexOf(x)] = code.getData(); |
| | | } |
| | |
| | | return null; |
| | | } |
| | | |
| | | public List<String> queryCodeListFromDynamicNode(Integer lev, String nodeType) { |
| | | List<String> nodes = new ArrayList<>(); |
| | | if (Cools.isEmpty(nodeType)) { |
| | | return nodes; |
| | | public List<int[]> getCodeMatrixIdxList(Integer lev, List<String> codeDataList) { |
| | | if (Cools.isEmpty(codeDataList)) { |
| | | return new ArrayList<>(); |
| | | } |
| | | lev = Optional.ofNullable(lev).orElse(MAP_DEFAULT_LEV); |
| | | DynamicNode[][] dynamicMatrix = getDynamicMatrix(lev); |
| | | String[][] codeMatrix = this.getCodeMatrix(lev); |
| | | |
| | | List<int[]> codeMatrixIdxList = new ArrayList<>(); |
| | | |
| | | Map<String, int[]> map = new HashMap<>(); |
| | | Set<String> codeDataSet = new HashSet<>(codeDataList); |
| | | |
| | | for (int i = 0; i < codeMatrix.length; i++) { |
| | | for (int j = 0; j < codeMatrix[i].length; j++) { |
| | | if (nodeType.equals(dynamicMatrix[i][j].getVehicle())) { |
| | | nodes.add(codeMatrix[i][j]); |
| | | String codeData = codeMatrix[i][j]; |
| | | if (codeDataSet.contains(codeData)) { |
| | | map.put(codeData, new int[]{i, j}); |
| | | } |
| | | } |
| | | } |
| | | return nodes; |
| | | |
| | | for (String codeData : codeDataList) { |
| | | int[] codeMatrixIdx = map.get(codeData); |
| | | if (codeMatrixIdx != null) { |
| | | codeMatrixIdxList.add(codeMatrixIdx); |
| | | } |
| | | } |
| | | return codeMatrixIdxList; |
| | | } |
| | | |
| | | public void modifyDynamicMatrix(Integer lev, List<String> codeList, String vehicle) { |
| | | this.modifyDynamicMatrix(lev, codeList, vehicle, false); |
| | | public void modifyDynamicMatrix(Integer lev, List<int[]> codeIdxList, String vehicle) { |
| | | this.modifyDynamicMatrix(lev, codeIdxList, vehicle, false); |
| | | } |
| | | |
| | | public synchronized void modifyDynamicMatrix(Integer lev, List<String> codeList, String vehicle, boolean reset) { |
| | | public synchronized void modifyDynamicMatrix(Integer lev, List<int[]> codeIdxList, String vehicle, boolean reset) { |
| | | if (Cools.isEmpty(vehicle)) { |
| | | return; |
| | | } |
| | | lev = Optional.ofNullable(lev).orElse(MAP_DEFAULT_LEV); |
| | | DynamicNode[][] dynamicMatrix = getDynamicMatrix(lev); |
| | | |
| | | if (!reset) { |
| | | if (Cools.isEmpty(codeList, vehicle)) { |
| | | return; |
| | | } |
| | | // long time = System.currentTimeMillis() / 1000; |
| | | int serial = 1; |
| | | for (String code : codeList) { |
| | | int[] node = getCodeMatrixIdx(lev, code); |
| | | dynamicMatrix[node[0]][node[1]] = new DynamicNode(vehicle, serial); |
| | | for (int[] codeMatrixIdx : codeIdxList) { |
| | | dynamicMatrix[codeMatrixIdx[0]][codeMatrixIdx[1]] = new DynamicNode(vehicle, serial); |
| | | serial++; |
| | | } |
| | | } else { |
| | | if (Cools.isEmpty(vehicle)) { |
| | | return; |
| | | } |
| | | for (int i = 0; i < dynamicMatrix.length; i++) { |
| | | for (int j = 0; j < dynamicMatrix[i].length; j++) { |
| | | DynamicNode dynamicNode = dynamicMatrix[i][j]; |
| | |
| | | setDynamicMatrix(lev, dynamicMatrix); |
| | | } |
| | | |
| | | public void clearDynamicMatrixByCodeList(Integer lev, List<String> codeList) { |
| | | this.modifyDynamicMatrix(lev, codeList, DynamicNodeType.ACCESS.val); |
| | | public void clearDynamicMatrixByCodeList(Integer lev, List<int[]> codeIdxList) { |
| | | this.modifyDynamicMatrix(lev, codeIdxList, DynamicNodeType.ACCESS.val); |
| | | } |
| | | |
| | | public int[][] filterMapData(int[][] mapMatrix, Integer lev, List<String> lockNodes) { |