src/main/java/com/zy/asrs/entity/RgvNode.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/common/utils/RgvUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/entity/RgvNode.java
@@ -9,6 +9,8 @@ private Boolean lock = false;//路径锁定 private Integer rgvNo = 0;//RGV号 public RgvNode(Integer path) { this.path = path; } src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -632,7 +632,7 @@ } //判断行走路径是否被占用 Integer staNo = wrkMast.getStaNo(); Integer staNo = wrkMast.getSourceStaNo(); BasDevp basDevp = basDevpService.selectById(staNo); if (basDevp == null) { continue;//目标站不存在 @@ -641,8 +641,13 @@ int startPath = rgvProtocol.getRgvPos().intValue(); //目标路径值 int endPath = basDevp.getLocType3().intValue(); boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath); boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用 if (pathUsed) { //行走路径被占用,禁止下发命令 continue; } //行走路径空闲,锁定路径 RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), true); // 命令下发区 -------------------------------------------------------------------------- RgvCommand rgvCommand = new RgvCommand(); @@ -672,6 +677,24 @@ continue; } //判断行走路径是否被占用 Integer staNo = wrkMast.getStaNo(); BasDevp basDevp = basDevpService.selectById(staNo); if (basDevp == null) { continue;//目标站不存在 } //起始路径 int startPath = rgvProtocol.getRgvPos().intValue(); //目标路径值 int endPath = basDevp.getLocType3().intValue(); boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用 if (pathUsed) { //行走路径被占用,禁止下发命令 continue; } //行走路径空闲,锁定路径 RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), true); // 命令下发区 -------------------------------------------------------------------------- RgvCommand rgvCommand = new RgvCommand(); rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV编号 @@ -696,6 +719,24 @@ if (rgvProtocol.getTaskNo1() != 0 || rgvProtocol.getLoaded1() != 0) {//RGV是否无任务、RGV是否无货 continue; } //判断行走路径是否被占用 Integer staNo = wrkMast.getSourceStaNo(); BasDevp basDevp = basDevpService.selectById(staNo); if (basDevp == null) { continue;//目标站不存在 } //起始路径 int startPath = rgvProtocol.getRgvPos().intValue(); //目标路径值 int endPath = basDevp.getLocType3().intValue(); boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用 if (pathUsed) { //行走路径被占用,禁止下发命令 continue; } //行走路径空闲,锁定路径 RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), true); // 命令下发区 -------------------------------------------------------------------------- RgvCommand rgvCommand = new RgvCommand(); @@ -725,6 +766,24 @@ continue; } //判断行走路径是否被占用 Integer staNo = wrkMast.getStaNo(); BasDevp basDevp = basDevpService.selectById(staNo); if (basDevp == null) { continue;//目标站不存在 } //起始路径 int startPath = rgvProtocol.getRgvPos().intValue(); //目标路径值 int endPath = basDevp.getLocType3().intValue(); boolean pathUsed = RgvUtils.isPathUsed(startPath, endPath);//判断行走路径是否被占用 if (pathUsed) { //行走路径被占用,禁止下发命令 continue; } //行走路径空闲,锁定路径 RgvUtils.lockPath(startPath, endPath, rgvProtocol.getRgvNo(), true); // 命令下发区 -------------------------------------------------------------------------- RgvCommand rgvCommand = new RgvCommand(); rgvCommand.setRgvNo(wrkMast.getRgvNo()); // RGV编号 src/main/java/com/zy/common/utils/RgvUtils.java
@@ -1,11 +1,98 @@ 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, boolean lock) { List<RgvNode> pathList = getPathList(startPath, endPath);//通过起点和目标点获取行走路径 lockPath(pathList, rgvNo, lock); } //锁定/解锁路径 public static void lockPath(List<RgvNode> pathList, Integer rgvNo, 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); } else { 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)); } }