From c97e67b2b569bf9845acbe6a088b7a2b0f8d6a11 Mon Sep 17 00:00:00 2001 From: Junjie <540245094@qq.com> Date: 星期二, 05 八月 2025 09:22:15 +0800 Subject: [PATCH] # --- src/main/java/com/zy/common/utils/NavigateMapUtils.java | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/zy/common/utils/NavigateMapUtils.java b/src/main/java/com/zy/common/utils/NavigateMapUtils.java index 733f56c..49c72a9 100644 --- a/src/main/java/com/zy/common/utils/NavigateMapUtils.java +++ b/src/main/java/com/zy/common/utils/NavigateMapUtils.java @@ -2,19 +2,57 @@ import com.zy.asrs.utils.Utils; import com.zy.common.model.NavigateNode; +import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.RedisKeyType; +import com.zy.core.enums.SlaveType; +import com.zy.core.model.protocol.ShuttleProtocol; +import com.zy.core.thread.ShuttleThread; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; @Component public class NavigateMapUtils { @Autowired private RedisUtil redisUtil; + + public synchronized boolean clearPath(Integer shuttleNo) { + ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo); + if (shuttleThread == null) { + return false; + } + + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); + if (shuttleProtocol == null) { + return false; + } + + String currentLocNo = shuttleProtocol.getCurrentLocNo(); + int lev = Utils.getLev(currentLocNo); + + HashMap<String, Object> lockMap = new HashMap<>(); + Object o = redisUtil.get(RedisKeyType.LOCK_MAP_NODES.key + lev); + if (o != null) { + lockMap = (HashMap<String, Object>) o; + } + + List<NavigateNode> list = new ArrayList<>(); + for (Map.Entry<String, Object> entry : lockMap.entrySet()) { + String locNo = entry.getKey(); + Integer value = (Integer) entry.getValue(); + if (value.equals(shuttleNo)) { + NavigateNode navigateNode = NavigatePositionConvert.locNoToNode(locNo); + list.add(navigateNode); + } + } + + return writeNavigateNodeToRedisMap(lev, shuttleNo, list, false); + } /** * 鍐欏叆璺緞鑺傜偣鏁版嵁鍒皉edis鍦板浘涓� @@ -58,7 +96,10 @@ //鍒ゆ柇鑺傜偣鏄惁琚攣瀹� if(lockMap.containsKey(key)) { - return false; + Integer deviceNo = (Integer) lockMap.get(key); + if (!shuttleNo.equals(deviceNo)) {//绛夊緟閿佸畾鐨勮妭鐐瑰凡琚綋鍓嶅皬杞﹂攣瀹氾紝璁ゅ畾閿佸畾鎴愬姛 + return false; + } } tmpMap.put(key, shuttleNo); @@ -93,7 +134,6 @@ lockMap.remove(key); } } - lockMap.putAll(lockMap); redisUtil.set(RedisKeyType.LOCK_MAP_NODES.key + lev, lockMap); return true; } -- Gitblit v1.9.1