From ddca90f571f62787a76764dc8c7899fafd5cff53 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 01 八月 2023 13:01:58 +0800
Subject: [PATCH] 穿梭车出库

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  295 +++++++++++++---------------------------------------------
 1 files changed, 68 insertions(+), 227 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 9137e22..031a41d 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -959,238 +959,79 @@
      */
     public synchronized void shuttleOutExecute() {
         for (WrkMast wrkMast : wrkMastMapper.selectBy2125()) {
-            //鎻愬彇涓�鏉″緟鍑哄簱浠诲姟
-            if (wrkMast != null) {
-                String outStaLocNo = null;//鍑哄簱绔欑偣搴撲綅鍙�
-                //鑾峰彇鍑哄簱绔欑偣
-                for (DevpSlave devpSlave : slaveProperties.getDevp()) {
-                    for (DevpSlave.StaRack staOutRack : devpSlave.getRackOutStn()) {
-                        if (staOutRack.getStaNo().equals(wrkMast.getStaNo())) {
-                            //鍑哄簱绔欑偣鍜屽伐浣滄。鍑哄簱绔欑偣涓�鑷�
-                            outStaLocNo = CommonUtils.getLocNoFromRBL(staOutRack.getRow(), staOutRack.getBay(), staOutRack.getLev());
-                        }
-                    }
-
-                }
-
-                if (wrkMast.getWrkSts() == 21
-                        || wrkMast.getWrkSts() == 25
-                        || wrkMast.getWrkSts() == 31) {
-                    ShuttleThread shuttleThread = null;
-                    HashMap<String, Object> searchIdleShuttle = null;
-
-                    LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
-                    LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-
-                    if (wrkMast.getWrkSts() == 21) {
-                        if (wrkMast.getShuttleNo() == null) {
-                            //瀵绘壘鏈�杩戜笖绌洪棽鐨勫洓鍚戠┛姊溅
-                            searchIdleShuttle = this.searchIdleShuttle(wrkMast);
-                            shuttleThread = (ShuttleThread) searchIdleShuttle.get("result");
-                            if (shuttleThread == null) {
-                                continue;
-                            }
-                            wrkMast.setShuttleNo(shuttleThread.getSlave().getId());//缁欏伐浣滄。鍒嗛厤鍥涘悜绌挎杞﹀彿
-                            wrkMastMapper.updateById(wrkMast);
-                        }else {
-                            //鐩存帴浣跨敤浠诲姟淇濆瓨涓殑灏忚溅
-                            shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-                        }
-                    }else if(wrkMast.getWrkSts() == 25) {//鐘舵��25锛岄渶瑕佸悜灏忚溅涓嬪彂鍛戒护浠庢彁鍗囨満绉诲姩鍑哄幓锛岄渶瑕佸垽鏂彁鍗囨満鐘舵槸鍚︾┖闂层�佹彁鍗囨満鏄惁鍒拌揪鐩爣妤煎眰銆佺洰鏍囨ゼ灞傜珯鐐规槸鍚﹀瓨鍦ㄣ�佺洰鏍囨ゼ灞傜珯鐐规槸鍚︾粰鍑烘彁鍗囨満鍒颁綅淇″彿
-
-                        //鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
-                        if (!liftProtocol.isIdleNoTask()) {
-                            try {
-                                Thread.sleep(1000);//浼戠湢1s
-                            } catch (InterruptedException e) {
-                                throw new RuntimeException(e);
-                            }
-                            continue;//鎻愬崌鏈哄繖
-                        }
-                        //鍒ゆ柇鎻愬崌鏈轰换鍔″彿鍜屽綋鍓嶅伐浣滄。浠诲姟鍙锋槸鍚︿竴鑷�
-                        if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkMast.getWrkNo()) {
-                            continue;
-                        }
-
-                        //鍒ゆ柇鎻愬崌鏈烘ゼ灞傛槸鍚﹀埌浣嶏紝鍒ゆ柇绔欑偣鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙�
-                        String locNo = wrkMast.getSourceLocNo();
-                        int lev = Utils.getLev(locNo);//鐩爣浜岀淮鐮佹墍鍦ㄦゼ灞�
-                        Short liftLev = liftProtocol.getLev();//鎻愬崌鏈烘墍鍦ㄦゼ灞�
-                        if (liftLev == null) {//鎻愬崌鏈哄彲鑳藉湪杈撻�佺嚎妤煎眰
-                            continue;
-                        }
-                        if (liftLev.intValue() != lev) {
-                            continue;//鎻愬崌鏈轰笉鍦ㄧ洰鏍囨ゼ灞傝烦杩�
-                        }
-
-                        Integer staNo = Utils.levToOutInStaNo(lev >= 2 ? lev + 1 : lev);
-                        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 1);
-                        //鑾峰彇鐩爣绔欎俊鎭�
-                        StaProtocol staProtocol1 = devpThread.getStation().get(staNo);
-                        if (staProtocol1 == null) {
-                            continue;//绔欑偣淇℃伅涓嶅瓨鍦�
-                        }
-                        if (!staProtocol1.isLiftArrival()) {
-                            continue;//绔欑偣鎻愬崌鏈哄埌浣嶄俊鍙穎alse
-                        }
-
-                        //缁х画瀹屾垚涔嬪墠灏忚溅鏈畬鎴愮殑浠诲姟
-                        shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-                    } else if (wrkMast.getWrkSts() == 31) {
-                        //缁х画瀹屾垚涔嬪墠灏忚溅鏈畬鎴愮殑浠诲姟
-                        shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
-                    }
-
-                    if (shuttleThread == null) {
-                        continue;
-                    }
-
-                    ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-                    if (shuttleProtocol == null) {
-                        continue;
-                    }
-
-                    if (outStaLocNo == null) {
-                        continue;
-                    }
-
-                    if (wrkMast.getWrkSts() == 21) {
-
-                        if (!shuttleProtocol.isIdle()) {
-                            continue;
-                        }
-
-                        //婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-                        String currentLocNo = shuttleProtocol.getCurrentLocNo();
-
-                        //灏忚溅褰撳墠灞傞珮
-                        Integer currentLev = Utils.getLev(currentLocNo);
-                        //褰撳墠妤煎眰鎻愬崌鏈鸿緭閫佺珯鐐瑰簱浣嶅彿
-                        String liftSiteLocNo = Utils.levToOutInStaLocNo(currentLev);
-
-                        ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-                        //鍥涘悜绌挎杞﹀彿
-                        assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());
-                        //浠诲姟鍙�
-                        assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
-                        //鍏ュ嚭搴撴ā寮�
-                        assignCommand.setTaskMode(ShuttleTaskModeType.PAK_OUT.id.shortValue());
-                        assignCommand.setSourceLocNo(currentLocNo);
-
-                        //鍒ゆ柇灏忚溅鍜屽簱浣嶆槸鍚﹀湪鍚屼竴灞�
-                        if (currentLev == Utils.getLev(wrkMast.getSourceLocNo())) {
-                            //鍚屼竴灞�(灏嗗皬杞︾Щ鍔ㄥ埌璐х墿浣嶇疆)
-
-                            List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), liftSiteLocNo, assignCommand, shuttleThread);
-                            if (commands == null) {
-                                //鏈壘鍒拌矾寰勶紝绛夊緟涓嬩竴娆�
-                                continue;
-                            }
-
-                            //鍒嗛厤鐩爣搴撲綅
-                            shuttleProtocol.setLocNo(wrkMast.getSourceLocNo());
-                            //鍒嗛厤浠诲姟鍙�
-                            shuttleProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());
-                            //鍒嗛厤婧愬簱浣�
-                            shuttleProtocol.setSourceLocNo(currentLocNo);
-                            //鐩爣搴撲綅
-                            assignCommand.setLocNo(wrkMast.getSourceLocNo());
-//                            assignCommand.setCommands(commands);
-                            wrkMast.setWrkSts(26L);//灏忚溅鎼繍涓�
-
-                            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                                //涓嬪彂浠诲姟
-                                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-                            }
-                        }else {
-                            //涓嶅悓灞傦紝灏嗙洰鏍囧簱浣嶅垎閰嶆垚鎻愬崌鏈哄簱浣嶅彿(灏嗗皬杞︾Щ鍔ㄥ埌鎻愬崌鏈轰綅缃�)
-
-                            //灏忚溅鍒版彁鍗囨満鍙f寚浠�
-                            List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftSiteLocNo, ShuttleTaskModeType.PAK_IN.id, assignCommand, shuttleThread);
-                            if (commands == null) {
-                                if (!currentLocNo.equals(liftSiteLocNo)) {//褰撳墠浣嶇疆涔熶笉鍦ㄦ彁鍗囨満鍙�
-                                    continue;//鏈壘鍒拌矾寰�
-                                }
-                                commands = new ArrayList<>();
-                            }
-                            shuttleProtocol.setLocNo(liftSiteLocNo);
-                            //鍒嗛厤浠诲姟鍙�
-                            shuttleProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());
-                            //鍒嗛厤婧愬簱浣�
-                            shuttleProtocol.setSourceLocNo(currentLocNo);
-
-                            //鑾峰彇褰撳墠灏忚溅鎵�鍦ㄦゼ灞傜殑绔欑偣淇℃伅
-                            BasDevp basDevp = basDevpService.queryByLocNo(liftSiteLocNo);
-                            Short endStartCode = Short.parseShort(basDevp.getQrCodeValue());//绔欑偣浜岀淮鐮�
-
-//                            //澧炲姞绉诲姩杩涙彁鍗囨満鍛戒护
-//                            ShuttleCommand moveCommand = shuttleThread.getMoveCommand(endStartCode, liftProtocol.getBarcode(), 1600, ShuttleRunDirection.TOP.id, null, null, 500);
-//                            commands.add(moveCommand);
-
-                            //鐩爣搴撲綅
-                            assignCommand.setLocNo(liftSiteLocNo);
-//                            assignCommand.setCommands(commands);
-                            wrkMast.setWrkSts(22L);//灏忚溅杩佺Щ鐘舵��
-
-                            if (wrkMastMapper.updateById(wrkMast) > 0) {
-                                //涓嬪彂浠诲姟
-                                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-                            }
-                        }
-                    } else if (wrkMast.getWrkSts() == 25) {
-                        if (!shuttleProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
-                            continue;
-                        }
-
-                        wrkMast.setShuttleNo(shuttleProtocol.getShuttleNo().intValue());//缁欏伐浣滄。鍒嗛厤鍥涘悜绌挎杞﹀彿
-
-                        //褰撳墠妤煎眰鎻愬崌鏈鸿緭閫佺珯鐐瑰簱浣嶅彿
-                        String liftSiteLocNo = Utils.levToOutInStaLocNo(liftProtocol.getLev().intValue());
-
-                        ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-                        //鍥涘悜绌挎杞﹀彿
-                        assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());
-                        //浠诲姟鍙�
-                        assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
-                        //鍏ュ嚭搴撴ā寮�
-                        assignCommand.setTaskMode(ShuttleTaskModeType.PAK_OUT.id.shortValue());
-                        assignCommand.setSourceLocNo(liftSiteLocNo);
-
-                        List<ShuttleCommand> commands = this.shuttleAssignCommand(liftSiteLocNo, wrkMast.getSourceLocNo(), liftSiteLocNo, assignCommand, shuttleThread);
-                        if (commands == null) {
-                            continue;//鏈壘鍒拌矾寰�
-                        }
-
-//                        //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝闇�瑕佸涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛
-//                        short startCode = liftProtocol.getBarcode();//鎻愬崌鏈哄唴閮ㄤ簩缁寸爜
-//                        Short distCode = commands.get(0).getStartCodeNum();//鐩爣浜岀淮鐮�
-//                        //鑾峰彇绉诲姩鍛戒护
-//                        ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCode, distCode, 1600, commands.get(0).getRunDirection(), null, null, 500);
-//                        commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶�
-
-                        //鍒嗛厤鐩爣搴撲綅
-                        shuttleProtocol.setLocNo(wrkMast.getSourceLocNo());
-                        //鍒嗛厤浠诲姟鍙�
-                        shuttleProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());
-                        //鍒嗛厤婧愬簱浣�
-                        shuttleProtocol.setSourceLocNo(liftSiteLocNo);
-                        //鐩爣搴撲綅
-                        assignCommand.setLocNo(wrkMast.getSourceLocNo());
-//                        assignCommand.setCommands(commands);
-                        wrkMast.setWrkSts(26L);//灏忚溅鎼繍涓�
-
-                        if (wrkMastMapper.updateById(wrkMast) > 0) {
-                            //涓嬪彂浠诲姟
-                            MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-                        }
-                    }
-
-                }
+            boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑
+            if (!step1) {
+                continue;
             }
         }
     }
 
     /**
+     * 鍑哄簱-灏忚溅鎼嚭搴撲腑
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    public boolean shuttleOutExecuteStep1(WrkMast wrkMast) {
+        //21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓�
+        if (wrkMast.getWrkSts() == 21) {
+            if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
+                dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
+                return false;
+            }
+
+            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            if (shuttleThread == null) {
+                return false;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+            if (shuttleProtocol == null) {
+                return false;
+            }
+            if (!shuttleProtocol.isIdle()) {
+                return false;
+            }
+
+            //鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐�
+            BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getLiftNo());
+            if (targetBasDevp == null) {
+                return false;//缂哄皯绔欑偣淇℃伅
+            }
+
+            //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅
+            if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
+                //灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃�
+                dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄨ緭閫佺珯鐐硅繘琛屽彇璐�
+                return false;
+            }
+
+            //灏忚溅宸叉姷杈捐揣鐗╀綅缃紝杩涜鎼繍璐х墿
+            NyShuttleOperaResult result = NyShuttleOperaUtils.getShuttleTransportCommands(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), wrkMast.getSourceLocNo(), targetBasDevp.getLocNo());
+            if (result == null) {//鍑哄簱璺緞璁$畻澶辫触
+                return false;
+            }
+
+            //鍒涘缓鍒嗛厤鍛戒护
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.PAK_OUT.id.shortValue());//鍑哄簱妯″紡
+            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+            assignCommand.setCommands(result.getCommands());//杩愯鍛戒护
+            assignCommand.setNodes(result.getNodes());//璺緞鑺傜偣
+
+            wrkMast.setWrkSts(22L);//21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓�
+            wrkMast.setModiTime(new Date());
+            if (wrkMastMapper.updateById(wrkMast) > 0) {
+                //涓嬪彂浠诲姟
+                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
+            }
+            return false;
+        }
+        return true;
+    }
+
+    /**
      * 鎼滅储绌洪棽涓旀渶杩戠殑鍥涘悜绌挎杞�(浠ュ伐浣滄。鐩爣搴撲綅涓哄熀鐐硅绠楁渶杩戜笖绌洪棽鐨勮溅)
      */
     public HashMap<String,Object> searchIdleShuttle(WrkMast wrkMast) {

--
Gitblit v1.9.1