自动化立体仓库 - WCS系统
Junjie
2024-12-21 2074f1e03c9b2e2ff1d0b57de05becb7f6e0ffb8
#地图文件bug尝试修复
7个文件已修改
167 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/ConsoleController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/utils/Utils.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/utils/NavigateMapData.java 132 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/utils/NavigateMapUtils.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/utils/NavigateSolution.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/utils/NavigateUtils.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/ConsoleController.java
@@ -342,7 +342,6 @@
        BasMap basMap = JSON.parseObject(data.toString(), BasMap.class);
        //解析json地图数据
        ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class);
        navigateMapData.setLev(lev);
        List<List<MapNode>> lists = navigateMapData.filterMap(NavigationMapType.NONE.id, arrayList, lev, null, null);//过滤地图数据
        return R.ok().add(lists);
    }
@@ -398,8 +397,7 @@
        for (int i = 1; i <= 10; i++) {//总共10层楼
            BasMap basMap = basMapService.selectLatestMap(i);
            //载入地图
            navigateMapData.setLev(i);
            List<List<MapNode>> lists = navigateMapData.getJsonData(-1, null, null);//获取完整地图(包括入库出库)
            List<List<MapNode>> lists = navigateMapData.getJsonData(i, -1, null, null);//获取完整地图(包括入库出库)
            if (basMap == null) {
                //数据库中也不存在地图数据,从地图文件中获取
                //存入数据库
@@ -447,8 +445,7 @@
        BasMap basMap = basMapService.selectLatestMap(lev);
        //载入地图
        navigateMapData.setLev(lev);
        List<List<MapNode>> lists = navigateMapData.getJsonData(-1, null, null);//获取完整地图(包括入库出库)
        List<List<MapNode>> lists = navigateMapData.getJsonData(lev, -1, null, null);//获取完整地图(包括入库出库)
        if (basMap == null) {
            //数据库中也不存在地图数据,从地图文件中获取
            //存入数据库
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -890,7 +890,7 @@
//////                            devpThread.setPakMk(staProtocol.getSiteId(), false);
//////                            boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
//////                            if (!result) {
//////                                News.error("发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId());
//////                                News.error("发布命令至输送线队列失败!!! [plc编号{}]", devp.getId());
//////                            }
////
////                            barcodeThread.setBarcode("");//清理条码
@@ -940,8 +940,7 @@
                    if (basMap == null) {
                        //数据库中也不存在地图数据,从地图文件中获取
                        //载入地图
                        navigateMapData.setLev(i);
                        List<List<MapNode>> lists = navigateMapData.getJsonData(-1, null, null);//获取完整地图(包括入库出库)
                        List<List<MapNode>> lists = navigateMapData.getJsonData(i, -1, null, null);//获取完整地图(包括入库出库)
                        //存入数据库
                        basMap = new BasMap();
src/main/java/com/zy/asrs/utils/Utils.java
@@ -452,8 +452,7 @@
            return false;
        }
        navigateMapData.setLev(z);//获取地图数据
        int[][] data = navigateMapData.getData(-1, null, currentShuttleId == null ? null : Utils.getShuttlePoints(0, z));//载入全部车辆
        int[][] data = navigateMapData.getData(z, -1, null, currentShuttleId == null ? null : Utils.getShuttlePoints(0, z));//载入全部车辆
        int moveBay = 23;//避让起始列
        int bay = Utils.getBay(shuttleProtocol.getCurrentLocNo());//小车当前列
src/main/java/com/zy/common/utils/NavigateMapData.java
@@ -27,21 +27,17 @@
@Component
public class NavigateMapData {
    private Integer lev;//地图楼层
//    private Integer lev;//地图楼层
//
//    public Integer getLev() {
//        return lev;
//    }
//
//    public void setLev(Integer lev) {
//        this.lev = lev;
//    }
    public Integer getLev() {
        return lev;
    }
    public void setLev(Integer lev) {
        this.lev = lev;
    }
    public int[][] getData() {
        return getData(NavigationMapType.NONE.id, null, null);//默认读取无过滤的全部地图数据
    }
    public int[][] getData(Integer mapType, List<int[]> whitePoints, List<int[]> shuttlePoints) {
    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);
@@ -72,7 +68,7 @@
            InputStream inputStream = classPathResource.getInputStream();
            byte[] buffer = new byte[inputStream.available()];
            inputStream.read(buffer);
            File file = File.createTempFile("prefix","suffix");
            File file = File.createTempFile("prefix", "suffix");
            try (OutputStream outStream = new FileOutputStream(file)) {
                outStream.write(buffer);
            }
@@ -119,7 +115,7 @@
    /**
     * 尝试从redis获取数据
     */
    public int[][] getDataFromRedis(Integer mapType, List<int[]> whitePoints, List<int[]> shuttlePoints) {
    public int[][] getDataFromRedis(Integer lev, Integer mapType, List<int[]> whitePoints, List<int[]> shuttlePoints) {
        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
        Object o = redisUtil.get(RedisKeyType.MAP.key + lev);
        if (o == null) {
@@ -127,13 +123,13 @@
        }
        BasMap basMap = JSON.parseObject(o.toString(), BasMap.class);
        return this.getDataFormString(basMap.getData(), mapType, whitePoints, shuttlePoints);
        return this.getDataFormString(lev, basMap.getData(), mapType, whitePoints, shuttlePoints);
    }
    /**
     * 从List数据中获取地图
     */
    public int[][] getDataFormString(String data, Integer mapType, List<int[]> whitePoints, List<int[]> shuttlePoints) {
    public int[][] getDataFormString(Integer lev, String data, Integer mapType, List<int[]> whitePoints, List<int[]> shuttlePoints) {
        ArrayList arrayList = JSON.parseObject(data, ArrayList.class);
        List<List<MapNode>> lists = filterMap(mapType, arrayList, lev, whitePoints, shuttlePoints);//过滤地图数据
        int[][] map = new int[lists.size()][];
@@ -152,58 +148,58 @@
        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格式数据
//    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);
//            }
//
//            //解析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;
    }
//            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) {
src/main/java/com/zy/common/utils/NavigateMapUtils.java
@@ -29,7 +29,6 @@
                return true;
            }
            navigateMapData.setLev(lev);
            Object o = redisUtil.get(RedisKeyType.MAP.key + lev);
            if (o == null) {
                return false;
@@ -59,8 +58,7 @@
            }
            //尝试锁定/解锁路径
            navigateMapData.setLev(nodes.get(0).getZ());
            List<List<MapNode>> realMap = navigateMapData.getJsonData(-1, null, null);//获取完整地图(包括入库出库)
            List<List<MapNode>> realMap = navigateMapData.getJsonData(nodes.get(0).getZ(), -1, null, null);//获取完整地图(包括入库出库)
            for (NavigateNode node : nodes) {
                if (node.getZ() != lev) {
                    continue;
src/main/java/com/zy/common/utils/NavigateSolution.java
@@ -16,21 +16,12 @@
    int[][] map = {{}};
    public NavigateSolution() {
        //载入地图
        NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class);
        navigateMapData.setLev(1);
        int[][] data = navigateMapData.getData();
        this.map = data;
    }
    public NavigateSolution(Integer mapType, Integer lev, List<int[]> whitePoints, List<int[]> shuttlePoints) {
        //载入地图指定层高地图
        NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class);
        navigateMapData.setLev(lev);
        int[][] data = navigateMapData.getDataFromRedis(mapType, whitePoints, shuttlePoints);
        int[][] data = navigateMapData.getDataFromRedis(lev, mapType, whitePoints, shuttlePoints);
        if (data == null) {
            data = navigateMapData.getData(mapType, whitePoints, shuttlePoints);
            data = navigateMapData.getData(lev, mapType, whitePoints, shuttlePoints);
        }
        this.map = data;
    }
src/main/java/com/zy/common/utils/NavigateUtils.java
@@ -177,9 +177,8 @@
    //获取从x点到下一点的行走距离
    public static Integer getXToNextDistance(NavigateNode xNode) {
        NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class);
        navigateMapData.setLev(xNode.getZ());
        List<List<MapNode>> lists = navigateMapData.getJsonData(NavigationMapType.NONE.id, null, null);
        List<List<MapNode>> lists = navigateMapData.getJsonData(xNode.getZ(), NavigationMapType.NONE.id, null, null);
        if (lists != null) {
            MapNode mapNode = lists.get(xNode.getX()).get(xNode.getY());
            if (mapNode != null) {