From 97aa2cd09e92f73cd4dff3d99eaef64e748c80b3 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期三, 28 六月 2023 19:04:32 +0800
Subject: [PATCH] 优化出库小车避让

---
 src/main/java/com/zy/asrs/utils/Utils.java                  |    4 +
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |   59 +++++++++--------------------
 src/main/java/com/zy/core/thread/ShuttleThread.java         |   18 +++++++-
 3 files changed, 37 insertions(+), 44 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 3cecf33..3d831aa 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1086,26 +1086,6 @@
                                 //鏈壘鍒拌矾寰勶紝绛夊緟涓嬩竴娆�
                                 continue;
                             }
-                            //鎵�浣跨敤鐨勮矾寰勮繘琛屼复鏃惰В閿侊紝鐢ㄤ簬鍚庣画璁$畻
-                            NavigateMapData navigateMapData = new NavigateMapData(currentLev);
-                            navigateMapData.writeNavigateNodeToRedisMap(assignCommand.getNodes(), false);//鎵�浣跨敤鐨勮矾寰勮繘琛屼复鏃惰В閿�
-
-                            //浠诲姟鎵ц瀹屽悗锛屽皬杞﹁繘鍏ョЩ寮�鎻愬崌鏈哄彛绔欑偣浣嶇疆锛屼互鍏嶅潬钀�
-                            //鎼滅储涓�鏉℃病鏈夊皬杞︾殑绌哄贩閬擄紝骞惰皟搴﹀皬杞�
-                            int distLev = Utils.getLev(liftSiteLocNo);//閬胯妤煎眰
-                            String startLocNo = "180020" + Utils.getLev(liftSiteLocNo);
-                            ShuttleAssignCommand moveAssignCommand = Utils.searchEmptyGroupToMoveShuttle(distLev, shuttleThread.getSlave().getId(), shuttleThread, startLocNo);
-                            if (moveAssignCommand == null) {//璋冨害灏忚溅鍛戒护涓虹┖
-                                continue;
-                            }
-                            //鎵�浣跨敤鐨勮矾寰勮繘琛屼复鏃惰В閿侊紝鐢ㄤ簬鍚庣画璁$畻
-                            navigateMapData.writeNavigateNodeToRedisMap(moveAssignCommand.getNodes(), false);//鎵�浣跨敤鐨勮矾寰勮繘琛屼复鏃惰В閿�
-                            commands.addAll(moveAssignCommand.getCommands());//灏嗛伩璁╁皬杞︾殑鍛戒护娣诲姞
-                            List<NavigateNode> nodes = assignCommand.getNodes();//灏嗛伩璁╄矾寰勬坊鍔犺繘鑺傜偣璺緞涓�
-                            nodes.addAll(moveAssignCommand.getNodes());//灏嗛伩璁╄矾寰勬坊鍔犺繘鑺傜偣璺緞涓�
-                            assignCommand.setNodes(nodes);
-                            navigateMapData.writeNavigateNodeToRedisMap(nodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹�
-
 
                             //鍒嗛厤鐩爣搴撲綅
                             shuttleProtocol.setLocNo(wrkMast.getSourceLocNo());
@@ -1177,26 +1157,6 @@
                         if (commands == null) {
                             continue;//鏈壘鍒拌矾寰�
                         }
-                        //鎵�浣跨敤鐨勮矾寰勮繘琛屼复鏃惰В閿侊紝鐢ㄤ簬鍚庣画璁$畻
-                        NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(liftSiteLocNo));
-                        navigateMapData.writeNavigateNodeToRedisMap(assignCommand.getNodes(), false);//鎵�浣跨敤鐨勮矾寰勮繘琛屼复鏃惰В閿�
-
-                        //浠诲姟鎵ц瀹屽悗锛屽皬杞﹁繘鍏ョЩ寮�鎻愬崌鏈哄彛绔欑偣浣嶇疆锛屼互鍏嶅潬钀�
-                        //鎼滅储涓�鏉℃病鏈夊皬杞︾殑绌哄贩閬擄紝骞惰皟搴﹀皬杞�
-                        int distLev = Utils.getLev(liftSiteLocNo);//閬胯妤煎眰
-                        String startLocNo = "180020" + Utils.getLev(liftSiteLocNo);
-                        ShuttleAssignCommand moveAssignCommand = Utils.searchEmptyGroupToMoveShuttle(distLev, shuttleThread.getSlave().getId(), shuttleThread, startLocNo);
-                        if (moveAssignCommand == null) {//璋冨害灏忚溅鍛戒护涓虹┖
-                            continue;
-                        }
-                        //鎵�浣跨敤鐨勮矾寰勮繘琛屼复鏃惰В閿侊紝鐢ㄤ簬鍚庣画璁$畻
-                        navigateMapData.writeNavigateNodeToRedisMap(moveAssignCommand.getNodes(), false);//鎵�浣跨敤鐨勮矾寰勮繘琛屼复鏃惰В閿�
-                        commands.addAll(moveAssignCommand.getCommands());//灏嗛伩璁╁皬杞︾殑鍛戒护娣诲姞
-                        List<NavigateNode> nodes = assignCommand.getNodes();//灏嗛伩璁╄矾寰勬坊鍔犺繘鑺傜偣璺緞涓�
-                        nodes.addAll(moveAssignCommand.getNodes());//灏嗛伩璁╄矾寰勬坊鍔犺繘鑺傜偣璺緞涓�
-                        assignCommand.setNodes(nodes);
-                        navigateMapData.writeNavigateNodeToRedisMap(nodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹�
-
 
                         //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝闇�瑕佸涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛
                         short startCode = liftProtocol.getBarcode();//鎻愬崌鏈哄唴閮ㄤ簩缁寸爜
@@ -1373,6 +1333,7 @@
 
                 //灏嗕换鍔℃。鏍囪涓哄畬鎴�
                 WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo().intValue());
+                ShuttleAssignCommand moveAssignCommand = null;//閬胯鍛戒护
                 if (wrkMast != null) {
                     switch (wrkMast.getWrkSts().intValue()) {
                         case 9://9.灏忚溅鍏ュ簱鎼繍涓� ==> 14.鍏ュ簱瀹屾垚
@@ -1385,6 +1346,15 @@
                             wrkMast.setWrkSts(23L);
                             break;
                         case 26://26.灏忚溅鍑哄簱鎼繍涓� ==> 27.灏忚溅鍑哄簱鎼繍瀹屾垚
+                            //浠诲姟鎵ц瀹屽悗锛屽皬杞﹁繘鍏ョЩ寮�鎻愬崌鏈哄彛绔欑偣浣嶇疆锛屼互鍏嶅潬钀�
+                            //鎼滅储涓�鏉℃病鏈夊皬杞︾殑绌哄贩閬擄紝骞惰皟搴﹀皬杞�
+                            int distLev = Utils.getLev(wrkMast.getSourceLocNo());//閬胯妤煎眰
+                            String startLocNo = "180020" + distLev;
+                            moveAssignCommand = Utils.searchEmptyGroupToMoveShuttle(distLev, shuttleThread.getSlave().getId(), shuttleThread, startLocNo);
+                            if (moveAssignCommand == null) {//璋冨害灏忚溅鍛戒护涓虹┖
+                                continue;
+                            }
+
                             wrkMast.setWrkSts(27L);
                             break;
                         default:
@@ -1402,6 +1372,15 @@
                         //浠诲姟鎸囦护娓呴浂
                         shuttleProtocol.setAssignCommand(null);
                         News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
+
+                        if (wrkMast.getWrkSts() == 27) {
+                            if (moveAssignCommand != null) {
+                                //涓嬪彂浠诲姟
+                                shuttleProtocol.setPakMk(true);
+                                MessageQueue.offer(SlaveType.Shuttle, shuttleThread.getSlave().getId(), new Task(3, moveAssignCommand));
+                            }
+                        }
+
                     } else {
                         News.error("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傚洓鍚戠┛姊溅鍙�={}锛屽伐浣滃彿={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo());
                     }
diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java
index 89e907d..d862cba 100644
--- a/src/main/java/com/zy/asrs/utils/Utils.java
+++ b/src/main/java/com/zy/asrs/utils/Utils.java
@@ -9,6 +9,7 @@
 import com.zy.asrs.service.impl.MainServiceImpl;
 import com.zy.common.model.NavigateNode;
 import com.zy.common.model.enums.NavigationMapType;
+import com.zy.common.service.CommonService;
 import com.zy.common.utils.NavigateMapData;
 import com.zy.common.utils.NavigatePositionConvert;
 import com.zy.common.utils.NavigateUtils;
@@ -525,6 +526,7 @@
     public static ShuttleAssignCommand searchEmptyGroupToMoveShuttle(int z, Integer currentShuttleId, ShuttleThread shuttleThread, String startLocNo) {
         LocMastService locMastService = SpringUtils.getBean(LocMastService.class);
         MainServiceImpl mainServiceImpl = SpringUtils.getBean(MainServiceImpl.class);
+        CommonService commonService = SpringUtils.getBean(CommonService.class);
 
         if (shuttleThread == null) {
             return null;
@@ -579,7 +581,7 @@
             //鍒涘缓鍒嗛厤鍛戒护
             ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
             assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-            assignCommand.setTaskNo((short) 9998);//浠诲姟鍙�
+            assignCommand.setTaskNo((short) commonService.getWorkNo(7));//浠诲姟鍙�
             assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id.shortValue());//绉诲姩鍒扮洰鏍囧簱浣�
             assignCommand.setSourceLocNo(startLocNo);//婧愬簱浣�
 
diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java
index d6b95ac..88b5ab8 100644
--- a/src/main/java/com/zy/core/thread/ShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -729,6 +729,9 @@
 //            }
 //        }
 
+        LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
+        LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+
         List<ShuttleCommand> commands = redisCommand.getAssignCommand().getCommands();
         //褰撳墠姝ュ簭
         int commandStep = redisCommand.getCommandStep();
@@ -744,6 +747,14 @@
                 if (command.getDistCodeNum().intValue() == shuttleProtocol.getCurrentCode().intValue()) {
                     //涓婁竴鏉℃寚浠ょ殑鐩爣浣嶇疆鍜屽綋鍓嶅皬杞︿綅缃浉鍚岋紝鍒欒瀹氫笂涓�鏉′换鍔″畬鎴�
                     command.setComplete(true);
+
+                    //涓婁竴鏉℃寚浠よ捣鐐规槸鎻愬崌鏈轰簩缁寸爜锛屽垯娓呴浂鎻愬崌鏈轰换鍔″彿
+                    if (command.getStartCodeNum().intValue() == liftProtocol.getBarcode().intValue()) {
+                        //鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庣┖闂�
+                        if (liftProtocol.isIdleNoTask()) {
+                            liftProtocol.setTaskNo((short) 0);//娓呯┖浠诲姟鍙�
+                        }
+                    }
                 }
             } else if (command.getCommandWord().intValue() == 2) {
                 //鎵樼洏椤跺崌鍛戒护
@@ -805,9 +816,6 @@
             }
         }
 
-        LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
-        LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-        
 
         //鍒ゆ柇灏忚溅褰撳墠浜岀淮鐮佹槸鍚︿负鎻愬崌鏈轰簩缁寸爜
         if (shuttleProtocol.getCurrentCode().intValue() == liftProtocol.getBarcode().intValue()) {
@@ -844,6 +852,9 @@
                 if (!staProtocol.isLiftArrival()) {
                     return false;//绔欑偣鎻愬崌鏈哄埌浣嶄俊鍙穎alse锛岀姝笅鍙戝懡浠�
                 }
+
+                //鏉′欢婊¤冻锛屽崰鐢ㄦ彁鍗囨満
+                liftProtocol.setTaskNo(wrkNo);
             }
         }
 
@@ -1046,6 +1057,7 @@
                 return true;
             }else {
                 if (liftProtocol.getPositionArrivalFeedback$() == shuttleLocNoLev) {
+                    liftProtocol.setTaskNo(wrkNo);//缁欐彁鍗囨満鍐欏伐浣滃彿锛岄槻姝㈣鍗犵敤
                     return true;//鎻愬崌鏈哄埌浣�
                 }
                 executeLift(liftThread, liftProtocol, redisCommand, shuttleLocNoLev);//璋冨害鎻愬崌鏈�

--
Gitblit v1.9.1