| | |
| | | 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<RgvNode> rgvNodes = JSON.parseArray(data.toString(), RgvNode.class);//实时地图 |
| | | List<RgvNode> pathList = getPathList(startPath, endPath);//通过起点和目标点获取行走路径 |
| | | //提取受控路径 |
| | | ArrayList<Integer> 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<RgvNode> pathList = getPathList(startPath, endPath);//通过起点和目标点获取行走路径 |
| | | lockPath(pathList, rgvNo, wrkNo, lock); |
| | | } |
| | | |
| | | //锁定/解锁路径 |
| | | public static void lockPath(List<RgvNode> pathList, Integer rgvNo, Integer wrkNo, boolean lock) { |
| | | RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class); |
| | | Object data = redisUtil.get("rgv_map"); |
| | | List<RgvNode> rgvNodes = JSON.parseArray(data.toString(), RgvNode.class);//实时地图 |
| | | ArrayList<Integer> 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<RgvNode> 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<RgvNode> getPathList(Integer startPath, Integer endPath) { |
| | | int result = startPath - endPath; |
| | | ArrayList<RgvNode> 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)); |
| | | } |
| | | |
| | | } |