#
Junjie
2023-10-22 bceb4ec708bb800f43d7827c99dade24a550666a
src/main/java/com/zy/common/utils/NavigateMapData.java
@@ -198,7 +198,12 @@
            } else if (mapType == NavigationMapType.DFX.id) {
                //车辆有货
                //读取对应库位数据,将DFX库位状态的节点置为-1(障碍物)
                if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D") || locMast.getLocSts().equals("X")) {
                if (locMast.getLocSts().equals("F")
                        || locMast.getLocSts().equals("D")
                        || locMast.getLocSts().equals("X")
                        || locMast.getLocSts().equals("R")
                        || locMast.getLocSts().equals("P")
                ) {
                    mapNode.setValue(-1);//禁用节点
                }
            } else if (mapType == NavigationMapType.NORMAL.id) {
@@ -234,41 +239,52 @@
     * 写入路径节点数据到redis地图中
     * lock为true 禁用库位,lock为false恢复库位
     */
    public boolean writeNavigateNodeToRedisMap(List<NavigateNode> nodes, boolean lock) {
    public synchronized 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(NavigationMapType.NONE.id, arrayList, lev, null, null);//获取全部地图数据
        for (NavigateNode node : nodes) {
            if (node.getZ() != lev) {
                continue;
        try {
            if (!redisUtil.tryLock("realtimeBasMap_" + lev)) {
                return false;//加锁失败
            }
            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);//恢复库位,普通库位
            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(NavigationMapType.NONE.id, arrayList, lev, null, null);//获取全部地图数据
            NavigateMapData mapData = new NavigateMapData(nodes.get(0).getZ());
            List<List<MapNode>> realMap = mapData.getJsonData(-1, null, null);//获取完整地图(包括入库出库)
            for (NavigateNode node : nodes) {
                if (node.getZ() != lev) {
                    continue;
                }
            }
            listX.set(node.getY(), mapNode);
            lists.set(node.getX(), listX);
                List<MapNode> listX = lists.get(node.getX());
                MapNode mapNode = listX.get(node.getY());
                if (lock) {
                    mapNode.setValue(-999);//禁用库位
                } else {
                    //获取原始节点数据
                    List<MapNode> rows = realMap.get(node.getX());
                    MapNode col = rows.get(node.getY());
                    mapNode.setValue(col.getValue());//恢复库位
                }
                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));
            //解锁
            redisUtil.unlock("realtimeBasMap_" + lev);
        } catch (Exception e) {
            e.printStackTrace();
        }
        basMap.setData(JSON.toJSONString(lists));
        basMap.setUpdateTime(new Date());
        //将数据库地图数据存入redis
        redisUtil.set("realtimeBasMap_" + lev, JSON.toJSONString(basMap));
        return true;
    }