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));
|
}
|
|
}
|