From d9248408fbaf28f25dfcf8e5ec3a5372e7a7c5a3 Mon Sep 17 00:00:00 2001 From: Junjie <fallin.jie@qq.com> Date: 星期五, 14 七月 2023 10:48:55 +0800 Subject: [PATCH] RGV路径解锁 --- src/main/java/com/zy/common/utils/RgvUtils.java | 101 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 101 insertions(+), 0 deletions(-) diff --git a/src/main/java/com/zy/common/utils/RgvUtils.java b/src/main/java/com/zy/common/utils/RgvUtils.java index 8ec45be..8284f61 100644 --- a/src/main/java/com/zy/common/utils/RgvUtils.java +++ b/src/main/java/com/zy/common/utils/RgvUtils.java @@ -1,11 +1,112 @@ 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; } + //閿佸畾/瑙i攣璺緞 + public static void lockPath(Integer startPath, Integer endPath, Integer rgvNo, boolean lock) { + List<RgvNode> pathList = getPathList(startPath, endPath);//閫氳繃璧风偣鍜岀洰鏍囩偣鑾峰彇琛岃蛋璺緞 + lockPath(pathList, rgvNo, lock); + } + + //閿佸畾/瑙i攣璺緞 + 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);//瑙i攣 + rgvNode.setRgvNo(0); + } + } + } + } + + //瑙i攣璺緞锛岄�氳繃RGV鍙疯繘琛岃В閿併�傛敞鎰忥細璋冪敤姝ゆ柟娉曚細瑙i攣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);//瑙i攣 + 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 姝f柟鍚� + 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)); + } + } -- Gitblit v1.9.1