#
Junjie
2025-02-13 472c4348d47fa8fb96c6296016b9117c5d32486d
src/main/java/com/zy/common/utils/NavigateMapData.java
@@ -5,9 +5,18 @@
import com.zy.asrs.entity.BasMap;
import com.zy.asrs.entity.LocMast;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.utils.Utils;
import com.zy.common.model.MapNode;
import com.zy.common.model.enums.NavigationMapType;
import com.zy.core.cache.SlaveConnection;
import com.zy.core.enums.MapNodeType;
import com.zy.core.enums.RedisKeyType;
import com.zy.core.enums.SlaveType;
import com.zy.core.model.ForkLiftSlave;
import com.zy.core.model.protocol.ForkLiftStaProtocol;
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;
@@ -20,6 +29,9 @@
 */
@Component
public class NavigateMapData {
    @Autowired
    private SlaveProperties slaveProperties;
    public int[][] getData(Integer lev, Integer mapType, List<int[]> whitePoints, List<int[]> shuttlePoints) {
        try {
@@ -221,7 +233,8 @@
                //解析json地图数据
                ArrayList arrayList = JSON.parseObject(stringBuffer.toString(), ArrayList.class);
                List<List<MapNode>> lists = filterMap(mapType, arrayList, lev, whitePoints, shuttlePoints);//过滤地图数据
                //重建数据格式
                List<List<MapNode>> lists = rebuildData(arrayList);
                if (!file.delete()) {
                    System.out.println("临时文件删除失败");
@@ -245,6 +258,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<>();
        //重建数据格式
@@ -258,57 +291,71 @@
            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);
        //获取当前楼层库位数据
        List<LocMast> locMasts = locMastService.selectLocByLev(lev);
        for (LocMast locMast : locMasts) {
            Integer row = locMast.getRow1();
            Integer bay = locMast.getBay1();
        try {
            //获取当前楼层库位数据
            List<LocMast> locMasts = locMastService.selectLocByLev(lev);
            for (LocMast locMast : locMasts) {
                Integer row = locMast.getRow1();
                Integer bay = locMast.getBay1();
            boolean whiteFlag = false;//默认不存在白名单
            if (whitePoints != null) {
                for (int[] whitePoint : whitePoints) {
                    if (whitePoint[0] == row && whitePoint[1] == bay) {
                        //存在白名单
                        whiteFlag = true;
                        break;
                boolean whiteFlag = false;//默认不存在白名单
                if (whitePoints != null) {
                    for (int[] whitePoint : whitePoints) {
                        if (whitePoint[0] == row && whitePoint[1] == bay) {
                            //存在白名单
                            whiteFlag = true;
                            break;
                        }
                    }
                }
            }
            if (whiteFlag) {
                continue;//存在白名单,不执行下列过滤方案
            }
            List<MapNode> list = lists.get(row);
            MapNode mapNode = list.get(bay);
            if (mapType == NavigationMapType.NONE.id) {
                //不过滤任何数据
            } else if (mapType == NavigationMapType.DFX.id) {
                //车辆有货
                //读取对应库位数据,将DFX库位状态的节点置为-1(障碍物)
                if (locMast.getLocSts().equals("F")
                        || locMast.getLocSts().equals("D")
                        || locMast.getLocSts().equals("X")
                        || locMast.getLocSts().equals("R")
                        || locMast.getLocSts().equals("P")
                ) {
                    mapNode.setValue(-1);//禁用节点
                if (whiteFlag) {
                    continue;//存在白名单,不执行下列过滤方案
                }
            } else if (mapType == NavigationMapType.NORMAL.id) {
                //过滤库位状态X
                if (locMast.getLocSts().equals("X")) {
                    mapNode.setValue(-1);//禁用节点
                }
            }
            //更新list
            list.set(bay, mapNode);
            lists.set(row, list);
                List<MapNode> list = lists.get(row);
                MapNode mapNode = list.get(bay);
                if (mapType == NavigationMapType.NONE.id) {
                    //不过滤任何数据
                } else if (mapType == NavigationMapType.DFX.id) {
                    //车辆有货
                    //读取对应库位数据,将DFX库位状态的节点置为-1(障碍物)
                    if (locMast.getLocSts().equals("F")
                            || locMast.getLocSts().equals("D")
                            || locMast.getLocSts().equals("X")
                            || locMast.getLocSts().equals("R")
                            || locMast.getLocSts().equals("P")
                    ) {
                        mapNode.setValue(MapNodeType.DISABLE.id);//禁用节点
                    }
                } else if (mapType == NavigationMapType.NORMAL.id) {
                    //过滤库位状态X
                    if (locMast.getLocSts().equals("X")) {
                        mapNode.setValue(MapNodeType.DISABLE.id);//禁用节点
                    }
                }
                //更新list
                list.set(bay, mapNode);
                lists.set(row, list);
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
        return lists;
    }
    //加载车辆
    public List<List<MapNode>> loadShuttle(List<List<MapNode>> lists, List<int[]> shuttlePoints) {
        //加载车辆坐标到地图中
        if (shuttlePoints != null) {
            for (int[] points : shuttlePoints) {
@@ -316,13 +363,18 @@
                int y = points[1];
                List<MapNode> list = lists.get(x);
                MapNode mapNode = list.get(y);
                mapNode.setValue(66);//设置为车辆代码66
                mapNode.setValue(MapNodeType.CAR.id);//设置为车辆代码66
                //更新list
                list.set(y, mapNode);
                lists.set(x, list);
            }
        }
        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);//获取完整地图
@@ -342,7 +394,49 @@
                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()) {
                ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, forkLiftSlave.getId());
                if (forkLiftThread == null) {
                    continue;
                }
                for (ForkLiftStaProtocol staProtocol : forkLiftThread.getForkLiftStaProtocols()) {
                    if (staProtocol.getLev() != lev) {
                        continue;
                    }
                    int row = Utils.getRow(staProtocol.getLocNo());
                    int bay = Utils.getBay(staProtocol.getLocNo());
                    List<MapNode> list = lists.get(row);
                    MapNode mapNode = list.get(bay);
                    if (mapType == NavigationMapType.DFX.id) {
                        //车辆有货
                        if (staProtocol.getHasTray() != null && staProtocol.getHasTray()) {
                            mapNode.setValue(MapNodeType.DISABLE.id);
                        }
                    } else {
                        if (staProtocol.getHasCar() != null && staProtocol.getHasCar()) {
                            mapNode.setValue(MapNodeType.CAR.id);
                        }
                    }
                    //更新list
                    list.set(bay, mapNode);
                    lists.set(row, list);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return lists;
    }