From c6bca77cf2603ceebc07fec7ece783c2f9bca74e Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期六, 10 六月 2023 19:24:53 +0800 Subject: [PATCH] Base地图更新 --- src/main/java/com/zy/common/utils/NavigateMapData.java | 176 ++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 138 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/zy/common/utils/NavigateMapData.java b/src/main/java/com/zy/common/utils/NavigateMapData.java index 38e2a3f..2fa688e 100644 --- a/src/main/java/com/zy/common/utils/NavigateMapData.java +++ b/src/main/java/com/zy/common/utils/NavigateMapData.java @@ -1,16 +1,33 @@ package com.zy.common.utils; import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; +import com.core.common.SpringUtils; +import com.zy.asrs.entity.BasMap; +import com.zy.common.model.MapNode; +import com.zy.common.model.NavigateNode; import com.zy.core.enums.ShuttleTaskModeType; +import org.springframework.stereotype.Component; import java.io.*; import java.util.ArrayList; +import java.util.Date; +import java.util.List; /** * A*绠楁硶鍦板浘鑾峰彇绫� */ +@Component public class NavigateMapData { + + private Integer lev;//鍦板浘妤煎眰 + + public NavigateMapData() { + this.lev = 1; + } + + public NavigateMapData(Integer lev) { + this.lev = lev; + } public int[][] getData() { return getData(ShuttleTaskModeType.PAK_IN.id); @@ -18,14 +35,7 @@ public int[][] getData(Integer mapType) { try { - String mapFilename = ""; - if (mapType == ShuttleTaskModeType.PAK_IN.id) { - //鍏ュ簱鍦板浘 - mapFilename = "mapIn.json"; - }else { - //鍑哄簱鍦板浘 - mapFilename = "mapOut.json"; - } + String mapFilename = "map_" + lev + ".json"; String fileName = this.getClass().getClassLoader().getResource(mapFilename).getPath();//鑾峰彇鏂囦欢璺緞 File file = new File(fileName); @@ -41,16 +51,15 @@ //瑙f瀽json鍦板浘鏁版嵁 ArrayList arrayList = JSON.parseObject(stringBuffer.toString(), ArrayList.class); - int[][] map = new int[arrayList.size()][]; + List<List<MapNode>> lists = filterMap(mapType, arrayList);//杩囨护鍦板浘鏁版嵁 + int[][] map = new int[lists.size()][]; int j = 0; - for (Object obj : arrayList) { - ArrayList list = JSON.parseObject(obj.toString(), ArrayList.class); + for (List<MapNode> list : lists) { int[] tmp = new int[list.size()]; int i = 0; - for (Object o : list) { - JSONObject jsonObject = JSON.parseObject(o.toString()); + for (MapNode mapNode : list) { //灏嗘暟鎹坊鍔犺繘浜岀淮鏁扮粍 - tmp[i++] = Integer.parseInt(jsonObject.get("value").toString()); + tmp[i++] = mapNode.getValue(); } //鏁版嵁娣诲姞杩涗竴缁存暟缁� map[j++] = tmp; @@ -66,17 +75,46 @@ return null; } - //鑾峰彇JSON鏍煎紡鏁版嵁 - public ArrayList<ArrayList<JSONObject>> getJsonData(Integer mapType) { - try { - String mapFilename = ""; - if (mapType == ShuttleTaskModeType.PAK_IN.id) { - //鍏ュ簱鍦板浘 - mapFilename = "mapIn.json"; - }else { - //鍑哄簱鍦板浘 - mapFilename = "mapOut.json"; + /** + * 灏濊瘯浠巖edis鑾峰彇鏁版嵁 + */ + public int[][] getDataFromRedis(Integer mapType) { + RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class); + Object o = redisUtil.get("realtimeBasMap_" + lev); + if (o == null) { + return null; + } + + BasMap basMap = JSON.parseObject(o.toString(), BasMap.class); + return this.getDataFormString(basMap.getData(), mapType); + } + + /** + * 浠嶭ist鏁版嵁涓幏鍙栧湴鍥� + */ + public int[][] getDataFormString(String data, Integer mapType) { + ArrayList arrayList = JSON.parseObject(data, ArrayList.class); + List<List<MapNode>> lists = filterMap(mapType, arrayList);//杩囨护鍦板浘鏁版嵁 + int[][] map = new int[lists.size()][]; + int j = 0; + for (List<MapNode> list : lists) { + int[] tmp = new int[list.size()]; + int i = 0; + for (MapNode mapNode : list) { + //灏嗘暟鎹坊鍔犺繘浜岀淮鏁扮粍 + tmp[i++] = mapNode.getValue(); } + //鏁版嵁娣诲姞杩涗竴缁存暟缁� + map[j++] = tmp; + } + + return map; + } + + //鑾峰彇JSON鏍煎紡鏁版嵁 + public List<List<MapNode>> getJsonData(Integer mapType) { + try { + String mapFilename = "map_" + lev + ".json"; String fileName = this.getClass().getClassLoader().getResource(mapFilename).getPath();//鑾峰彇鏂囦欢璺緞 File file = new File(fileName); @@ -90,22 +128,11 @@ } br.close(); - //杩斿洖鐨勭粨鏋滈泦 - ArrayList<ArrayList<JSONObject>> returnLists = new ArrayList<>(); - //瑙f瀽json鍦板浘鏁版嵁 ArrayList arrayList = JSON.parseObject(stringBuffer.toString(), ArrayList.class); - for (Object obj : arrayList) { - ArrayList list = JSON.parseObject(obj.toString(), ArrayList.class); - ArrayList<JSONObject> maps = new ArrayList<>(); - for (Object o : list) { - JSONObject jsonObject = JSON.parseObject(o.toString()); - maps.add(jsonObject); - } - returnLists.add(maps); - } + List<List<MapNode>> lists = filterMap(mapType, arrayList);//杩囨护鍦板浘鏁版嵁 - return returnLists; + return lists; } else { System.out.println("鏂囦欢涓嶅瓨鍦�!"); } @@ -115,4 +142,77 @@ return null; } + /** + * 杩囨护鍦板浘鏁版嵁锛屽叆搴撴搷浣滃垯杩囨护鍑哄簱鐨勭鐢ㄥ簱浣嶏紝鍑哄簱鎿嶄綔鍒欒繃婊ゅ叆搴撶殑绂佺敤搴撲綅 + */ + public List<List<MapNode>> filterMap(Integer mapType,List arrayList) { + List<List<MapNode>> lists = new ArrayList<>(); + for (int i = 0; i < arrayList.size(); i++) { + Object obj = arrayList.get(i); + List<MapNode> list = JSON.parseArray(obj.toString(), MapNode.class); + for (int j = 0; j < list.size(); j++) { + MapNode mapNode = list.get(j); + if (mapType == ShuttleTaskModeType.PAK_IN.id) { + //鍏ュ簱鍦板浘 + if (mapNode.getData().equals("IN_X")) { + //绂佹浣跨敤鐨勫簱浣嶏紝璁剧疆涓�-1 + mapNode.setValue(-1); + } + }else if(mapType == ShuttleTaskModeType.PAK_OUT.id){ + //鍑哄簱鍦板浘 + if (mapNode.getData().equals("OUT_X")) { + //绂佹浣跨敤鐨勫簱浣嶏紝璁剧疆涓�-1 + mapNode.setValue(-1); + } + } + list.set(j, mapNode); + } + lists.add(list); + } + + return lists; + } + + /** + * 鍐欏叆璺緞鑺傜偣鏁版嵁鍒皉edis鍦板浘涓� + * lock涓簍rue 绂佺敤搴撲綅锛宭ock涓篺alse鎭㈠搴撲綅 + */ + public boolean writeNavigateNodeToRedisMap(List<NavigateNode> nodes, boolean lock) { + RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class); + Object o = redisUtil.get("realtimeBasMap_" + lev); + if (o == null) { + return false; + } + + BasMap basMap = JSON.parseObject(o.toString(), BasMap.class); + ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class); + List<List<MapNode>> lists = filterMap(-1, arrayList);//鑾峰彇鍏ㄩ儴鍦板浘鏁版嵁 + + for (NavigateNode node : nodes) { + if (node.getZ() != lev) { + continue; + } + + List<MapNode> listX = lists.get(node.getX()); + MapNode mapNode = listX.get(node.getY()); + if (lock) { + mapNode.setValue(-999);//绂佺敤搴撲綅 + }else { + if (node.getX() == 11 || node.getX() == 19) { + mapNode.setValue(3);//鎭㈠搴撲綅锛屾瘝杞ㄩ亾 + }else { + mapNode.setValue(0);//鎭㈠搴撲綅锛屾櫘閫氬簱浣� + } + } + + listX.set(node.getY(), mapNode); + lists.set(node.getX(), listX); + } + basMap.setData(JSON.toJSONString(lists)); + basMap.setUpdateTime(new Date()); + //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis + redisUtil.set("realtimeBasMap_" + lev, JSON.toJSONString(basMap)); + return true; + } + } -- Gitblit v1.9.1