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