From 925b834a3341dbe9f486964a7ad5d1affd7a404d Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 24 十月 2023 13:33:05 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/common/utils/NavigateMapUtils.java         |   73 ++++++++++++++++++
 src/main/java/com/zy/asrs/utils/Utils.java                      |   41 ++++++++++
 src/main/java/com/zy/core/model/protocol/NyShuttleProtocol.java |    6 +
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java     |    8 +-
 src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java     |    8 ++
 src/main/java/com/zy/core/thread/NyShuttleThread.java           |    7 -
 src/main/java/com/zy/common/utils/NavigateMapData.java          |   53 -------------
 7 files changed, 135 insertions(+), 61 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index be2cce5..e70ce0f 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -108,6 +108,8 @@
     private BasLiftOptService basLiftOptService;
     @Autowired
     private ConfigService configService;
+    @Autowired
+    private NavigateMapUtils navigateMapUtils;
 
 
     /**
@@ -2701,9 +2703,8 @@
             if (!checkPathIsAvailable) {
                 return false;//妫�娴嬬洰鏍囩珯鐐硅矾寰勬槸鍚︽湭琚崰鐢�
             }
-            NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(wrkMast.getLocNo()));
             //灏濊瘯閿佸畾鐩爣绔欒矾寰�
-            boolean result2 = navigateMapData.writeNavigateNodeToRedisMap(targetNodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+            boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), targetNodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
             if (!result2) {
                 return false;//璺緞閿佸畾澶辫触
             }
@@ -3078,13 +3079,12 @@
             }
 
             //*************灏濊瘯瑙i攣鐩爣绔欒矾寰�***************
-            NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(wrkMast.getLocNo()));
             List<NavigateNode> targetNodes = NyLiftUtils.getLiftStaNodes(liftSta.getStaNo());
             if (targetNodes == null) {
                 return false;//鏈幏鍙栧埌鑺傜偣
             }
             //灏濊瘯瑙i攣鐩爣绔欒矾寰�
-            boolean result = navigateMapData.writeNavigateNodeToRedisMap(targetNodes, false);//鎵�浣跨敤鐨勮矾寰勮繘琛岃В閿�
+            boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), targetNodes, false);//鎵�浣跨敤鐨勮矾寰勮繘琛岃В閿�
             if (!result) {
                 return false;//璺緞瑙i攣澶辫触
             }
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index c1c8732..1966c36 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -506,4 +506,45 @@
         return false;//鎸囧畾妤煎眰娌℃湁绌挎杞�
     }
 
+    //妫�娴嬪簱浣嶇粍鏄惁瀛樺湪灏忚溅锛屽瓨鍦ㄨ繑鍥炲皬杞﹀彿銆�
+    public static Integer checkGroupLocHasShuttle(List<String> groupLoc) {
+        if (groupLoc == null) {
+            return null;
+        }
+
+        if (groupLoc.isEmpty()) {
+            return null;
+        }
+
+        SlaveProperties slaveProperties = SpringUtils.getBean(SlaveProperties.class);
+        if (slaveProperties == null) {
+            return null;
+        }
+
+        for (String loc : groupLoc) {
+            for (ShuttleSlave slave : slaveProperties.getShuttle()) {
+                NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId());
+                if (shuttleThread == null) {
+                    continue;
+                }
+
+                NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+                if (shuttleProtocol == null) {
+                    continue;
+                }
+
+                if (shuttleProtocol.getCurrentLocNo() == null) {
+                    continue;
+                }
+
+                if (shuttleProtocol.getCurrentLocNo().equals(loc)) {
+                    //瀛樺湪灏忚溅
+                    return slave.getId();
+                }
+            }
+        }
+
+        return null;
+    }
+
 }
diff --git a/src/main/java/com/zy/common/utils/NavigateMapData.java b/src/main/java/com/zy/common/utils/NavigateMapData.java
index 3b4be08..6b706e1 100644
--- a/src/main/java/com/zy/common/utils/NavigateMapData.java
+++ b/src/main/java/com/zy/common/utils/NavigateMapData.java
@@ -235,57 +235,4 @@
         return lists;
     }
 
-    /**
-     * 鍐欏叆璺緞鑺傜偣鏁版嵁鍒皉edis鍦板浘涓�
-     * lock涓簍rue 绂佺敤搴撲綅锛宭ock涓篺alse鎭㈠搴撲綅
-     */
-    public synchronized boolean writeNavigateNodeToRedisMap(List<NavigateNode> nodes, boolean lock) {
-        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
-        try {
-            if (!redisUtil.tryLock("realtimeBasMap_" + lev)) {
-                return false;//鍔犻攣澶辫触
-            }
-
-            Object o = redisUtil.get("realtimeBasMap_" + lev);
-            if (o == null) {
-                return false;
-            }
-
-            BasMap basMap = JSON.parseObject(o.toString(), BasMap.class);
-            ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class);
-            List<List<MapNode>> lists = filterMap(NavigationMapType.NONE.id, arrayList, lev, null, null);//鑾峰彇鍏ㄩ儴鍦板浘鏁版嵁
-
-            NavigateMapData mapData = new NavigateMapData(nodes.get(0).getZ());
-            List<List<MapNode>> realMap = mapData.getJsonData(-1, null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
-            for (NavigateNode node : nodes) {
-                if (node.getZ() != lev) {
-                    continue;
-                }
-
-                List<MapNode> listX = lists.get(node.getX());
-                MapNode mapNode = listX.get(node.getY());
-                if (lock) {
-                    mapNode.setValue(-999);//绂佺敤搴撲綅
-                } else {
-                    //鑾峰彇鍘熷鑺傜偣鏁版嵁
-                    List<MapNode> rows = realMap.get(node.getX());
-                    MapNode col = rows.get(node.getY());
-                    mapNode.setValue(col.getValue());//鎭㈠搴撲綅
-                }
-
-                listX.set(node.getY(), mapNode);
-                lists.set(node.getX(), listX);
-            }
-            basMap.setData(JSON.toJSONString(lists));
-            basMap.setUpdateTime(new Date());
-            //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis
-            redisUtil.set("realtimeBasMap_" + lev, JSON.toJSONString(basMap));
-            //瑙i攣
-            redisUtil.unlock("realtimeBasMap_" + lev);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return true;
-    }
-
 }
diff --git a/src/main/java/com/zy/common/utils/NavigateMapUtils.java b/src/main/java/com/zy/common/utils/NavigateMapUtils.java
new file mode 100644
index 0000000..c817f28
--- /dev/null
+++ b/src/main/java/com/zy/common/utils/NavigateMapUtils.java
@@ -0,0 +1,73 @@
+package com.zy.common.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.core.common.SpringUtils;
+import com.zy.asrs.entity.BasMap;
+import com.zy.common.model.MapNode;
+import com.zy.common.model.NavigateNode;
+import com.zy.common.model.enums.NavigationMapType;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@Component
+public class NavigateMapUtils {
+
+    /**
+     * 鍐欏叆璺緞鑺傜偣鏁版嵁鍒皉edis鍦板浘涓�
+     * lock涓簍rue 绂佺敤搴撲綅锛宭ock涓篺alse鎭㈠搴撲綅
+     */
+    public synchronized boolean writeNavigateNodeToRedisMap(Integer lev, List<NavigateNode> nodes, boolean lock) {
+        RedisUtil redisUtil = SpringUtils.getBean(RedisUtil.class);
+        try {
+            NavigateMapData navigateMapData = new NavigateMapData(lev);
+
+            if (!redisUtil.tryLock("realtimeBasMap_" + lev)) {
+                return false;//鍔犻攣澶辫触
+            }
+
+            Object o = redisUtil.get("realtimeBasMap_" + lev);
+            if (o == null) {
+                return false;
+            }
+
+            BasMap basMap = JSON.parseObject(o.toString(), BasMap.class);
+            ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class);
+            List<List<MapNode>> lists = navigateMapData.filterMap(NavigationMapType.NONE.id, arrayList, lev, null, null);//鑾峰彇鍏ㄩ儴鍦板浘鏁版嵁
+
+            NavigateMapData mapData = new NavigateMapData(nodes.get(0).getZ());
+            List<List<MapNode>> realMap = mapData.getJsonData(-1, null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
+            for (NavigateNode node : nodes) {
+                if (node.getZ() != lev) {
+                    continue;
+                }
+
+                List<MapNode> listX = lists.get(node.getX());
+                MapNode mapNode = listX.get(node.getY());
+                if (lock) {
+                    mapNode.setValue(-999);//绂佺敤搴撲綅
+                } else {
+                    //鑾峰彇鍘熷鑺傜偣鏁版嵁
+                    List<MapNode> rows = realMap.get(node.getX());
+                    MapNode col = rows.get(node.getY());
+                    mapNode.setValue(col.getValue());//鎭㈠搴撲綅
+                }
+
+                listX.set(node.getY(), mapNode);
+                lists.set(node.getX(), listX);
+            }
+            basMap.setData(JSON.toJSONString(lists));
+            basMap.setUpdateTime(new Date());
+            //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis
+            redisUtil.set("realtimeBasMap_" + lev, JSON.toJSONString(basMap));
+            //瑙i攣
+            redisUtil.unlock("realtimeBasMap_" + lev);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return true;
+    }
+
+}
diff --git a/src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java b/src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java
index e13f369..525078e 100644
--- a/src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java
+++ b/src/main/java/com/zy/common/utils/ShuttleDispatchUtils.java
@@ -69,6 +69,14 @@
      * 璋冨害杞﹁締
      */
     public boolean dispatchShuttle(Integer wrkNo, String locNo) {
+        //妫�娴嬬洰鏍囧簱浣嶇粍鏄惁瀛樺湪灏忚溅锛屽瀛樺湪灏忚溅鍒欑洿鎺ユ寚瀹氳杞�
+        List<String> groupLoc = Utils.getGroupLoc(locNo);
+        Integer groupShuttleNo = Utils.checkGroupLocHasShuttle(groupLoc);
+        if (groupShuttleNo != null) {
+            //瀛樺湪灏忚溅锛岀洿鎺ヨ皟搴﹁杞�
+            return shuttleMoveGenerate(wrkNo, locNo, groupShuttleNo);
+        }
+
         ArrayList<NyShuttleThread> sameLev = new ArrayList<>();//鐩稿悓妤煎眰鐨勭┛姊溅
         ArrayList<NyShuttleThread> diffLev = new ArrayList<>();//涓嶅悓妤煎眰鐨勭┛姊溅
 
diff --git a/src/main/java/com/zy/core/model/protocol/NyShuttleProtocol.java b/src/main/java/com/zy/core/model/protocol/NyShuttleProtocol.java
index ac78e39..9278e36 100644
--- a/src/main/java/com/zy/core/model/protocol/NyShuttleProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/NyShuttleProtocol.java
@@ -582,4 +582,10 @@
             }
         }
     }
+
+    public void setShuttleNo(Short shuttleNo) {
+        if (shuttleNo != 0) {
+            this.shuttleNo = shuttleNo;
+        }
+    }
 }
diff --git a/src/main/java/com/zy/core/thread/NyShuttleThread.java b/src/main/java/com/zy/core/thread/NyShuttleThread.java
index 8c24a1b..a84ca61 100644
--- a/src/main/java/com/zy/core/thread/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/NyShuttleThread.java
@@ -370,6 +370,7 @@
             return false;
         }
 
+        NavigateMapUtils navigateMapUtils = SpringUtils.getBean(NavigateMapUtils.class);
         WrkMastMapper wrkMastMapper = SpringUtils.getBean(WrkMastMapper.class);
         WrkMast wrkMast = wrkMastMapper.selectByWorkNo(wrkNo.intValue());
 
@@ -388,8 +389,6 @@
         }
 
         checkIOSta(commands, commandStep);//妫�娴嬪皬杞︽槸鍚﹁繘鍑烘彁鍗囨満杈撻�佺珯
-
-        NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(shuttleProtocol.getCurrentLocNo()));
 
         boolean isLock = false;//鏄惁瑙i攣璺緞
         //鍙栧嚭鍛戒护
@@ -414,7 +413,7 @@
 //                        nodes.addAll(command.getNodes());
 //                    }
                     if (nodes != null) {
-                        boolean result = navigateMapData.writeNavigateNodeToRedisMap(nodes, false);//瑙i攣璺緞
+                        boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(shuttleProtocol.getCurrentLocNo()), nodes, false);//瑙i攣璺緞
                         if (!result) {
                             return false;//瑙i攣澶辫触
                         }
@@ -503,7 +502,7 @@
                 nodes.addAll(nextNodes);
             }
             if (nodes != null) {
-                boolean result = navigateMapData.writeNavigateNodeToRedisMap(nodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+                boolean result = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(shuttleProtocol.getCurrentLocNo()), nodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
                 if (!result) {
                     return false;//璺緞閿佸畾澶辫触
                 }

--
Gitblit v1.9.1