package com.zy.common.utils; import com.alibaba.fastjson.JSON; import com.core.common.SpringUtils; import com.zy.asrs.entity.RgvNode; import java.util.ArrayList; import java.util.List; public class RgvUtils { //判断行走路径是否被占用 public static boolean isPathUsed(Integer startPath,Integer endPath) { RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class); Object data = redisUtil.get("rgv_map"); List rgvNodes = JSON.parseArray(data.toString(), RgvNode.class);//实时地图 List pathList = getPathList(startPath, endPath);//通过起点和目标点获取行走路径 //提取受控路径 ArrayList list = new ArrayList<>(); for (RgvNode rgvNode : pathList) { //判断路径是否被占用 if (rgvNode.getPath().equals(startPath)) { //起点路径不纳入计算范围 continue; } list.add(rgvNode.getPath()); } for (RgvNode node : rgvNodes) {//遍历实时地图 if (list.contains(node.getPath())) { //路径相同,判断是否被占用 if (node.getLock()) { return true;//只要有一条路径被占用,整体路均不可用 } } } return false; } //锁定/解锁路径 public static void lockPath(Integer startPath, Integer endPath, Integer rgvNo, Integer wrkNo, boolean lock) { List pathList = getPathList(startPath, endPath);//通过起点和目标点获取行走路径 lockPath(pathList, rgvNo, wrkNo, lock); } //锁定/解锁路径 public static void lockPath(List pathList, Integer rgvNo, Integer wrkNo, boolean lock) { RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class); Object data = redisUtil.get("rgv_map"); List rgvNodes = JSON.parseArray(data.toString(), RgvNode.class);//实时地图 ArrayList list = new ArrayList<>(); for (RgvNode rgvNode : pathList) {//提取受控路径 list.add(rgvNode.getPath()); } for (RgvNode rgvNode : rgvNodes) {//遍历实时地图 if (list.contains(rgvNode.getPath())) { //路径相同 if (lock) { rgvNode.setLock(true);//锁定 rgvNode.setRgvNo(rgvNo);//RGV号 rgvNode.setWrkNo(wrkNo);//工作号 } else { rgvNode.setLock(false);//解锁 rgvNode.setRgvNo(0); rgvNode.setRgvNo(0); } } } } //解锁路径,通过RGV号进行解锁。注意:调用此方法会解锁RGV号对应车辆全部路径 public static void unLockPath(Integer rgvNo) { RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class); Object data = redisUtil.get("rgv_map"); List rgvNodes = JSON.parseArray(data.toString(), RgvNode.class);//实时地图 for (RgvNode rgvNode : rgvNodes) {//遍历实时地图 if (rgvNode.getRgvNo().equals(rgvNo)) { //RGV号相同 rgvNode.setLock(false);//解锁 rgvNode.setRgvNo(0); } } } //通过起点和目标点获取行走路径 public static List getPathList(Integer startPath, Integer endPath) { int result = startPath - endPath; ArrayList list = new ArrayList<>(); if (result == 0) { list.add(new RgvNode(startPath)); return list; } if (result > 0) { //起点 - 目标点 > 0 正方向 for (int i = startPath; i >= endPath; i--) { list.add(new RgvNode(i)); } }else { //起点 = 目标点 < 0 负方向 for (int i = startPath; i <= endPath; i++) { list.add(new RgvNode(i)); } } return list; } public static void main(String[] args) { System.out.println(getPathList(5,5)); } }