| | |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * A*算法地图获取类 |
| | |
| | | @Component |
| | | public class NavigateMapData { |
| | | |
| | | @Autowired |
| | | private RedisUtil redisUtil; |
| | | @Autowired |
| | | private DeviceConfigService deviceConfigService; |
| | | @Autowired |
| | |
| | | * 尝试从redis获取数据 |
| | | */ |
| | | public int[][] getDataFromRedis(Integer lev, List<NavigationMapType> mapTypes, List<int[]> whitePoints, List<int[]> shuttlePoints) { |
| | | RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class); |
| | | Object o = redisUtil.get(RedisKeyType.MAP.key + lev); |
| | | if (o == null) { |
| | | return null; |
| | |
| | | return map; |
| | | } |
| | | |
| | | //获取JSON格式数据 |
| | | //获取实时地图-JSON格式数据 |
| | | public List<List<MapNode>> getJsonData(Integer lev, List<NavigationMapType> mapTypes, List<int[]> whitePoints, List<int[]> shuttlePoints) { |
| | | try { |
| | | Object data = redisUtil.get(RedisKeyType.MAP.key + lev); |
| | | if (data == null) { |
| | | return null; |
| | | } |
| | | |
| | | BasMap basMap = JSON.parseObject(data.toString(), BasMap.class); |
| | | //解析json地图数据 |
| | | ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class); |
| | | List<List<MapNode>> lists = filterMap(mapTypes, arrayList, lev, whitePoints, shuttlePoints);//过滤地图数据 |
| | | return lists; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | //获取原始地图-JSON格式数据 |
| | | public List<List<MapNode>> getJsonOriginData(Integer lev, List<NavigationMapType> mapTypes, List<int[]> whitePoints, List<int[]> shuttlePoints) { |
| | | try { |
| | | BasMap basMap = basMapService.selectLatestMap(lev); |
| | | String originData = basMap.getOriginData(); |
| | |
| | | lists = loadShuttle(lists, shuttlePoints); |
| | | } |
| | | |
| | | if (mapType.equals(NavigationMapType.SHUTTLE)) { |
| | | if (mapType.equals(NavigationMapType.LIFT)) { |
| | | //加载货叉提升机点位 |
| | | lists = loadForkLift(lists, lev); |
| | | } |
| | | |
| | | if(mapType.equals(NavigationMapType.PATH_LOCK)) { |
| | | //加载路径锁 |
| | | lists = loadPathLock(lists, lev); |
| | | } |
| | | } |
| | | |
| | |
| | | return lists; |
| | | } |
| | | |
| | | //加载路径锁 |
| | | public List<List<MapNode>> loadPathLock(List<List<MapNode>> lists, Integer lev) { |
| | | try { |
| | | HashMap<String, Object> lockMap = new HashMap<>(); |
| | | Object o = redisUtil.get(RedisKeyType.LOCK_MAP_NODES.key + lev); |
| | | if (o != null) { |
| | | lockMap = (HashMap<String, Object>) o; |
| | | } |
| | | |
| | | for (Map.Entry<String, Object> entry : lockMap.entrySet()) { |
| | | String key = entry.getKey(); |
| | | int row = Utils.getRow(key); |
| | | int bay = Utils.getBay(key); |
| | | |
| | | List<MapNode> list = lists.get(row); |
| | | MapNode mapNode = list.get(bay); |
| | | |
| | | //节点设置成路径锁 |
| | | mapNode.setValue(MapNodeType.LOCK.id); |
| | | |
| | | //更新list |
| | | list.set(bay, mapNode); |
| | | lists.set(row, list); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return lists; |
| | | } |
| | | |
| | | } |