From 2bdbfd1ac24d4e9a87daf6fb8b99ec32264d5752 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期六, 21 十二月 2024 11:25:27 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java | 182 ++++++++++++++++++++------------------------- 1 files changed, 81 insertions(+), 101 deletions(-) diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java index 1f21be5..62dc062 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/MapDataDispatcher.java @@ -8,15 +8,15 @@ 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; +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 java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; /** @@ -29,19 +29,11 @@ private final RedisSupport redis = RedisSupport.defaultRedisSupport; - public static final Boolean CACHE_CODE_MATRIX = Boolean.TRUE; - private String[][] codeMatrix; - - public static final Boolean CACHE_MAP_MATRIX = Boolean.FALSE; private int[][] mapMatrix; - public static final Boolean CACHE_TURN_MATRIX = Boolean.TRUE; - private int[][] turnMatrix; - - public static final Boolean CACHE_CDA_MATRIX = Boolean.TRUE; private String[][] cdaMatrix; @@ -96,138 +88,106 @@ public String[][] 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)) { + this.cdaMatrix = JSON.parseObject(cdaMatrixStr, String[][].class); } } - 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)); - } + redis.setValue(RedisConstant.AGV_MAP_ASTAR_CDA_FLAG, String.valueOf(lev), JSON.toJSONString(cdaMatrix)); + this.cdaMatrix = cdaMatrix; } 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) { @@ -370,6 +330,25 @@ return mapMatrix; } + 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); + List<Route> routeList = routeService.list(new LambdaQueryWrapper<Route>().eq(Route::getStatus, StatusType.ENABLE.val)); + if (routeKeys.size() == routeList.size()) { + return; + } + for (Route route : routeList) { + Code startCode = codeService.getById(route.getStartCode()); + Code endCode = codeService.getById(route.getEndCode()); + String routeKey = RouteGenerator.generateRouteKey(startCode.getData(), endCode.getData()); + if (Cools.isEmpty(routeKey)) { + continue; + } + redis.setMap(RedisConstant.AGV_MAP_ROUTE_HASH_FLAG, routeKey, Boolean.TRUE); + } + } + public synchronized String[][] initCodeMatrix(Integer lev) { log.info("There is initializing Code Matrix......"); lev = Optional.ofNullable(lev).orElse(MAP_DEFAULT_LEV); @@ -487,10 +466,11 @@ 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); + dynamicMatrix[node[0]][node[1]] = new DynamicNode(vehicle, serial, time); serial++; } } else { -- Gitblit v1.9.1