自动化立体仓库 - WCS系统
999
zhangc
2025-04-18 a3606d53403475ee05664058b343310c57249d2e
src/main/java/com/zy/common/utils/NavigateMapData.java
@@ -4,6 +4,7 @@
import com.core.common.SpringUtils;
import com.zy.asrs.entity.BasMap;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.service.BasMapService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.utils.Utils;
import com.zy.common.model.MapNode;
@@ -17,7 +18,6 @@
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.ForkLiftThread;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Component;
import java.io.*;
@@ -32,76 +32,31 @@
    @Autowired
    private SlaveProperties slaveProperties;
    @Autowired
    private BasMapService basMapService;
    public int[][] getData(Integer lev, Integer mapType, List<int[]> whitePoints, List<int[]> shuttlePoints) {
        try {
//            RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
//            Object object = redisUtil.get(RedisKeyType.BASIC_MAP.key + lev);
//            if (object == null) {
//                return null;
//            }
//
//            //解析json地图数据
//            ArrayList arrayList = JSON.parseObject(object.toString(), ArrayList.class);
//            List<List<MapNode>> lists = filterMap(mapType, arrayList, lev, whitePoints, shuttlePoints);//过滤地图数据
//            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;
            BasMap basMap = basMapService.selectLatestMap(lev);
            String originData = basMap.getOriginData();
            String mapFilename = "map_" + lev + ".json";
            ClassPathResource classPathResource = new ClassPathResource(mapFilename);
            InputStream inputStream = classPathResource.getInputStream();
            byte[] buffer = new byte[inputStream.available()];
            inputStream.read(buffer);
            File file = File.createTempFile("prefix", "suffix");
            try (OutputStream outStream = new FileOutputStream(file)) {
                outStream.write(buffer);
            //解析json地图数据
            ArrayList arrayList = JSON.parseObject(originData, ArrayList.class);
            List<List<MapNode>> lists = filterMap(mapType, arrayList, lev, whitePoints, shuttlePoints);//过滤地图数据
            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;
            }
            StringBuffer stringBuffer = new StringBuffer();
            if (file.isFile() && file.exists()) {
                InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "GBK");
                BufferedReader br = new BufferedReader(isr);
                String lineTxt = null;
                while ((lineTxt = br.readLine()) != null) {
                    stringBuffer.append(lineTxt);
                }
                br.close();
                //解析json地图数据
                ArrayList arrayList = JSON.parseObject(stringBuffer.toString(), ArrayList.class);
                List<List<MapNode>> lists = filterMap(mapType, arrayList, lev, whitePoints, shuttlePoints);//过滤地图数据
                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;
                }
                if (!file.delete()) {
                    System.out.println("临时文件删除失败");
                }
                return map;
            } else {
                System.out.println("文件不存在!");
            }
            return map;
        } catch (Exception e) {
            e.printStackTrace();
        }
@@ -144,105 +99,16 @@
        return map;
    }
//    //获取JSON格式数据
//    public List<List<MapNode>> getJsonData(Integer mapType, List<int[]> whitePoints, List<int[]> shuttlePoints) {
//        try {
////            RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
////            Object object = redisUtil.get(RedisKeyType.BASIC_MAP.key + lev);
////            if (object == null) {
////                return null;
////            }
////
////            //解析json地图数据
////            ArrayList arrayList = JSON.parseObject(object.toString(), ArrayList.class);
////            List<List<MapNode>> lists = filterMap(mapType, arrayList, lev, whitePoints, shuttlePoints);//过滤地图数据
////            return lists;
//
//
//            String mapFilename = "map_" + lev + ".json";
//            ClassPathResource classPathResource = new ClassPathResource(mapFilename);
//            InputStream inputStream = classPathResource.getInputStream();
//            byte[] buffer = new byte[inputStream.available()];
//            inputStream.read(buffer);
//            File file = File.createTempFile("prefix","suffix");
//            try (OutputStream outStream = new FileOutputStream(file)) {
//                outStream.write(buffer);
//            }
//
//            StringBuffer stringBuffer = new StringBuffer();
//            if (file.isFile() && file.exists()) {
//                InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "GBK");
//                BufferedReader br = new BufferedReader(isr);
//                String lineTxt = null;
//                while ((lineTxt = br.readLine()) != null) {
//                    stringBuffer.append(lineTxt);
//                }
//                br.close();
//
//                //解析json地图数据
//                ArrayList arrayList = JSON.parseObject(stringBuffer.toString(), ArrayList.class);
//                List<List<MapNode>> lists = filterMap(mapType, arrayList, lev, whitePoints, shuttlePoints);//过滤地图数据
//
//                if (!file.delete()) {
//                    System.out.println("临时文件删除失败");
//                }
//
//                return lists;
//            } else {
//                System.out.println("文件不存在!");
//            }
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
    //获取JSON格式数据
    public List<List<MapNode>> getJsonData(Integer lev, Integer mapType, List<int[]> whitePoints, List<int[]> shuttlePoints) {
        try {
//            RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
//            Object object = redisUtil.get(RedisKeyType.BASIC_MAP.key + lev);
//            if (object == null) {
//                return null;
//            }
//
//            //解析json地图数据
//            ArrayList arrayList = JSON.parseObject(object.toString(), ArrayList.class);
//            List<List<MapNode>> lists = filterMap(mapType, arrayList, lev, whitePoints, shuttlePoints);//过滤地图数据
//            return lists;
            String mapFilename = "map_" + lev + ".json";
            ClassPathResource classPathResource = new ClassPathResource(mapFilename);
            InputStream inputStream = classPathResource.getInputStream();
            byte[] buffer = new byte[inputStream.available()];
            inputStream.read(buffer);
            File file = File.createTempFile("prefix","suffix");
            try (OutputStream outStream = new FileOutputStream(file)) {
                outStream.write(buffer);
            }
            StringBuffer stringBuffer = new StringBuffer();
            if (file.isFile() && file.exists()) {
                InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "GBK");
                BufferedReader br = new BufferedReader(isr);
                String lineTxt = null;
                while ((lineTxt = br.readLine()) != null) {
                    stringBuffer.append(lineTxt);
                }
                br.close();
                //解析json地图数据
                ArrayList arrayList = JSON.parseObject(stringBuffer.toString(), ArrayList.class);
                List<List<MapNode>> lists = filterMap(mapType, arrayList, lev, whitePoints, shuttlePoints);//过滤地图数据
                if (!file.delete()) {
                    System.out.println("临时文件删除失败");
                }
                return lists;
            } else {
                System.out.println("文件不存在!");
            }
            BasMap basMap = basMapService.selectLatestMap(lev);
            String originData = basMap.getOriginData();
            //解析json地图数据
            ArrayList arrayList = JSON.parseObject(originData, ArrayList.class);
            //重建数据格式
            List<List<MapNode>> lists = rebuildData(arrayList);
            return lists;
        } catch (Exception e) {
            e.printStackTrace();
        }
@@ -257,6 +123,26 @@
     * @param shuttlePoints 穿梭车节点,需要加载进地图
     */
    public List<List<MapNode>> filterMap(Integer mapType, List arrayList, Integer lev, List<int[]> whitePoints, List<int[]> shuttlePoints) {
        //重建数据格式
        List<List<MapNode>> lists = rebuildData(arrayList);
        //载入库位信息
        lists = loadLocMast(mapType, lists, lev, whitePoints);
        //加载车辆
        lists = loadShuttle(lists, shuttlePoints);
//        //加载货叉提升机点位
//        lists = loadForkLift(lists, mapType, lev);
        //加载白名单节点
        lists = loadWhite(lists, lev, whitePoints);
        return lists;
    }
    //重建数据格式
    public List<List<MapNode>> rebuildData(List arrayList) {
        List<List<MapNode>> lists = new ArrayList<>();
        //重建数据格式
@@ -270,6 +156,11 @@
            lists.add(list);
        }
        return lists;
    }
    //载入库位信息
    public List<List<MapNode>> loadLocMast(Integer mapType, List<List<MapNode>> lists, Integer lev, List<int[]> whitePoints) {
        //过滤数据
        LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
        try {
@@ -325,6 +216,11 @@
            e.printStackTrace();
        }
        return lists;
    }
    //加载车辆
    public List<List<MapNode>> loadShuttle(List<List<MapNode>> lists, List<int[]> shuttlePoints) {
        //加载车辆坐标到地图中
        if (shuttlePoints != null) {
            for (int[] points : shuttlePoints) {
@@ -339,6 +235,11 @@
            }
        }
        return lists;
    }
    //加载白名单节点
    public List<List<MapNode>> loadWhite(List<List<MapNode>> lists, Integer lev, List<int[]> whitePoints) {
        //加载白名单节点
        if (whitePoints != null) {
            List<List<MapNode>> realMap = getJsonData(lev, -1, null, null);//获取完整地图
@@ -358,7 +259,11 @@
                lists.set(x, list);
            }
        }
        return lists;
    }
    //加载货叉提升机点位
    public List<List<MapNode>> loadForkLift(List<List<MapNode>> lists, Integer mapType, Integer lev) {
        try {
            //加载货叉提升机放货点位数据
            for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) {
@@ -368,6 +273,9 @@
                }
                for (ForkLiftStaProtocol staProtocol : forkLiftThread.getForkLiftStaProtocols()) {
                    if (staProtocol.getLev() != lev) {
                        continue;
                    }
                    int row = Utils.getRow(staProtocol.getLocNo());
                    int bay = Utils.getBay(staProtocol.getLocNo());
@@ -379,7 +287,7 @@
                        if (staProtocol.getHasTray() != null && staProtocol.getHasTray()) {
                            mapNode.setValue(MapNodeType.DISABLE.id);
                        }
                    }else {
                    } else {
                        if (staProtocol.getHasCar() != null && staProtocol.getHasCar()) {
                            mapNode.setValue(MapNodeType.CAR.id);
                        }
@@ -391,10 +299,9 @@
                }
            }
        }catch (Exception e) {
        } catch (Exception e) {
            e.printStackTrace();
        }
        return lists;
    }