From 1edc46cc37adb14e30c80c22491d770bfe9214d1 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 29 六月 2023 11:35:59 +0800
Subject: [PATCH] 优化寻车,出库问题

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |   99 +++++++++++++++++++++++++++----------------------
 1 files changed, 54 insertions(+), 45 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..a2060cb 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -53,6 +53,8 @@
     @Autowired
     private WrkMastMapper wrkMastMapper;
     @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
     private WrkDetlService wrkDetlService;
     @Autowired
     private LocMastService locMastService;
@@ -1086,26 +1088,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 +1159,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();//鎻愬崌鏈哄唴閮ㄤ簩缁寸爜
@@ -1318,16 +1280,23 @@
             //鍚屼竴妤煎眰锛屾病鏈夌┖闂茬┛姊溅锛屽彧鑳戒粠鍏朵粬妤煎眰璋冨害
             //瀵绘壘绂讳换鍔℃渶杩戠殑绌挎杞�
             for (ShuttleThread shuttleThread : diffLev) {
-                if (recentShuttle == null) {//鏈�杩戠┛姊溅涓虹┖锛屽垯榛樿璧嬩簣涓烘渶杩戠┛姊溅
-                    recentShuttle = shuttleThread;
-                }
 
                 //褰撳墠绌挎杞﹀簱浣嶅彿
                 String currentLocNo = shuttleThread.getShuttleProtocol().getCurrentLocNo();
                 int currentLev = Utils.getLev(currentLocNo);
+                List<LocMast> locMasts = wrkMastService.selectNoShuttleWrkByLev(currentLev);//鍒ゆ柇褰撳墠绌挎杞︽ゼ灞傛槸鍚︽湁寰呭垎閰嶈溅杈嗙殑浠诲姟锛屽鏋滄湁鍒欎笉鍒嗛厤杩欒締杞�
+                if (locMasts.size() > 0) {
+                    //瀛樺湪鍏朵粬浠诲姟锛岃烦杩囪繖杈嗚溅
+                    continue;
+                }
+
+                if (recentShuttle == null) {//鏈�杩戠┛姊溅涓虹┖锛屽垯榛樿璧嬩簣涓烘渶杩戠┛姊溅
+                    recentShuttle = shuttleThread;
+                }
                 //鐩墠鏈�杩戠┛姊溅搴撲綅鍙�
                 String recentLocNo = recentShuttle.getShuttleProtocol().getCurrentLocNo();
                 int recentLev = Utils.getLev(recentLocNo);
+
 
                 //褰撳墠鏈�杩戝洓鍚戠┛姊溅鍒板綋鍓嶈溅瀛愭墍鍦ㄦゼ灞傜殑鎻愬崌鏈哄彛璺濈
                 List<NavigateNode> recentShuttlePath = NavigateUtils.calc(recentLocNo, Utils.levToOutInStaLocNo(recentLev), NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleThread.getSlave().getId(), recentLev));//鎼滅储绌洪棽绌挎杞︼紝浣跨敤姝e父閫氶亾鍦板浘
@@ -1371,8 +1340,11 @@
                 //鏍囪澶嶄綅
                 shuttleProtocol.setPakMk(true);
 
+                ShuttleAssignCommand assignCommand = shuttleProtocol.getAssignCommand();
+
                 //灏嗕换鍔℃。鏍囪涓哄畬鎴�
                 WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo().intValue());
+                ShuttleAssignCommand moveAssignCommand = null;//閬胯鍛戒护
                 if (wrkMast != null) {
                     switch (wrkMast.getWrkSts().intValue()) {
                         case 9://9.灏忚溅鍏ュ簱鎼繍涓� ==> 14.鍏ュ簱瀹屾垚
@@ -1385,6 +1357,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,8 +1383,34 @@
                         //浠诲姟鎸囦护娓呴浂
                         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());
+                    }
+                }
+
+                if (assignCommand != null) {
+                    if (assignCommand.getTaskMode().intValue() == ShuttleTaskModeType.AVOID.id) {
+                        //閬胯浠诲姟
+                        //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
+                        shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
+                        //浠诲姟鍙锋竻闆�
+                        shuttleProtocol.setTaskNo((short) 0);
+                        //婧愬簱浣嶆竻闆�
+                        shuttleProtocol.setSourceLocNo(null);
+                        //鐩爣搴撲綅娓呴浂
+                        shuttleProtocol.setLocNo(null);
+                        //浠诲姟鎸囦护娓呴浂
+                        shuttleProtocol.setAssignCommand(null);
+                        News.info("鍥涘悜绌挎杞﹂伩璁╀换鍔″凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
                     }
                 }
 
@@ -1765,6 +1772,8 @@
                                 throw new CoolException("鏇存柊plc绔欑偣淇℃伅澶辫触");
                             }
                             wrkMast.setWrkSts(4L);
+                            //浠诲姟鍙锋竻闆�
+                            liftProtocol.setTaskNo((short) 0);
                             break;
                         case 7://7.鎻愬崌鏈鸿縼绉诲皬杞︿腑 ==> 8.鎻愬崌鏈鸿縼绉诲皬杞﹀畬鎴�
                             if (liftProtocol.getLev().intValue() != lev) {
@@ -1784,6 +1793,8 @@
                             }
                             wrkMast.setWrkSts(29L);
                             wrkMast.setWrkSts(34L);//34.鍑哄簱瀹屾垚锛屾殏鏃跺厛鐩存帴瀹屾垚鍑哄簱宸ヤ綔妗o紝鍚庣画闇�瑕佹牴鎹緭閫佺嚎缁欏嚭鐨勭姸鎬佹潵纭畾34.鍑哄簱瀹屾垚鐘舵��
+                            //浠诲姟鍙锋竻闆�
+                            liftProtocol.setTaskNo((short) 0);
                             break;
                         default:
                     }
@@ -1793,8 +1804,6 @@
                         liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
                         //浠诲姟鎸囦护娓呴浂
                         liftProtocol.setAssignCommand(null);
-                        //浠诲姟鍙锋竻闆�
-                        liftProtocol.setTaskNo((short) 0);
                         News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
                     } else {
                         News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo());

--
Gitblit v1.9.1