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