From f656de144ce68b49401a3bfc12bd6e1c33cbd281 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 25 七月 2023 13:55:16 +0800
Subject: [PATCH] 捡料

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  298 +++++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 267 insertions(+), 31 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 b9d9799..08aad9e 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -3,6 +3,7 @@
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.core.common.Cools;
 import com.core.common.SpringUtils;
 import com.core.exception.CoolException;
@@ -200,16 +201,17 @@
                     }
 
                     // 杩囨护鐩樼偣/鎷f枡/骞舵澘浠诲姟
-//                    if (null != wrkMastMapper.selectPickStepByBarcode(barcode)) {
-//                        continue;
-//                    }
+                    WrkMast wrkMast1 = wrkMastMapper.selectPickStepByBarcode(barcode);
+                    if (null != wrkMast1) {
+                        continue;
+                    }
 
                     // 鍒ゆ柇閲嶅宸ヤ綔妗�
-//                    WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
-//                    if (wrkMast != null) {
-//                        News.error("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast.getWrkNo());
-//                        continue;
-//                    }
+                    WrkMast wrkMast2 = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode);
+                    if (wrkMast2 != null) {
+                        News.error("宸ヤ綔妗d腑宸插瓨鍦ㄨ绔欑姸鎬佷负锛� 2.璁惧涓婅蛋 锛夌殑鏁版嵁,宸ヤ綔鍙�={}", wrkMast2.getWrkNo());
+                        continue;
+                    }
 
                     try {
                         LocTypeDto locTypeDto = new LocTypeDto(staProtocol);
@@ -382,6 +384,7 @@
     /**
      * 鎷f枡銆佸苟鏉裤�佺洏鐐瑰啀鍏ュ簱
      */
+    @Transactional
     public synchronized void stnToCrnStnPick(){
         for (DevpSlave devp : slaveProperties.getDevp()) {
             // 閬嶅巻鎷f枡鍏ュ簱鍙�
@@ -397,25 +400,20 @@
                 }
                 if (staProtocol.isAutoing()
                         && staProtocol.isLoading()
-                        && staProtocol.isInEnable()
-                        // 0 - 9990 鎴栬�� 9996
-                        && (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990)
+                        && (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9999)
                         && staProtocol.getStaNo().equals(staProtocol.getSiteId().shortValue())
                         && staProtocol.isPakMk()){
 
                     // 鑾峰彇鏉$爜鎵弿浠俊鎭�
-//                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
-//                    if (barcodeThread == null) {
-//                        continue;
-//                    }
+                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode());
+                    if (barcodeThread == null) {
+                        continue;
+                    }
+                    String barcode = barcodeThread.getBarcode();
 
                     WrkMast wrkMast = null;
-                    if (staProtocol.getWorkNo() > 0 && staProtocol.getWorkNo() < 9990) {
-                        wrkMast = wrkMastMapper.selectPickStep(staProtocol.getWorkNo());
-                        if (null == wrkMast) {
-                            continue;
-                        }
-                    } else {
+                    wrkMast = wrkMastMapper.selectPickStepByBarcode(barcode);
+                    if (wrkMast == null) {
                         continue;
                     }
 //                    if (staProtocol.getWorkNo() == 9996) {
@@ -455,6 +453,7 @@
 //                            News.error("{}鏉$爜閿欒锛屾殏鏃犳嫞鏂欎换鍔★紒", barcode);
 //                        }
 //                    }
+
                     if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107)
                         || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo()) ) {
                         continue;
@@ -509,14 +508,22 @@
                             wrkMast.setSourceStaNo(pickSta.getStaNo()); // 婧愮珯
                             wrkMast.setStaNo(dto.getStaNo()); // 鐩爣绔�
                             wrkMast.setCrnNo(dto.getCrnNo());
-                            wrkMast.setLocNo(dto.getLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
-                            wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
+                            wrkMast.setLocNo(sourceLocNo); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
+                            wrkMast.setShuttleNo(null); // 绌挎杞︽竻绌�
                             wrkMast.setModiTime(new Date());
                             if (wrkMastMapper.updateById(wrkMast) == 0) {
                                 throw new CoolException(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
                             }
                             if (wrkMastMapper.setSteEmpty(wrkMast.getWrkNo()) == 0) {
                                 throw new CoolException(wrkMast.getWrkNo() + "鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
+                            }
+
+                            // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
+                            LocMast locMast = locMastService.selectById(sourceLocNo);
+                            locMast.setLocSts("Q");
+                            locMast.setModiTime(new Date());
+                            if (!locMastService.updateById(locMast)) {
+                                throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
                             }
 
                             // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
@@ -938,13 +945,13 @@
                 middlePath = nodes.get(nodes.size() - 3);
                 //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
                 middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());
-                middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
+                middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
             } else if (nodes.size() > 5) {//涓鐮佷紶鍊掓暟绗簩涓�
                 //涓棿璺緞
                 middlePath = nodes.get(nodes.size() - 2);
                 //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
                 middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());
-                middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
+                middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
             }
 
             //鐩爣璺緞
@@ -1008,13 +1015,13 @@
                     middlePath = nodes.get(nodes.size() - 3);
                     //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
                     middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());
-                    middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
+                    middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
                 } else if (nodes.size() > 5) {//涓鐮佷紶鍊掓暟绗簩涓�
                     //涓棿璺緞
                     middlePath = nodes.get(nodes.size() - 2);
                     //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
                     middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());
-                    middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
+                    middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
                 }
 
                 //鐩爣璺緞
@@ -1060,13 +1067,13 @@
                 middlePath = nodes.get(nodes.size() - 3);
                 //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
                 middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());
-                middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
+                middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
             } else if (nodes.size() > 5) {//涓鐮佷紶鍊掓暟绗簩涓�
                 //涓棿璺緞
                 middlePath = nodes.get(nodes.size() - 2);
                 //閫氳繃xy鍧愭爣灏忚溅浜岀淮鐮�
                 middleCodeNum = NavigatePositionConvert.xyToPosition(middlePath.getX(), middlePath.getY(), middlePath.getZ());
-                middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
+                middleToDistDistance = NavigateUtils.getMiddleToDistDistance(nodes, middlePath);//璁$畻涓棿鐐瑰埌鐩爣鐐硅璧拌窛绂�
             }
 
             //鐩爣璺緞
@@ -1343,12 +1350,15 @@
 
         //鍒ゆ柇鍏朵粬绌洪棽绌挎杞︽槸鍚︾浠诲姟鏈�杩�
         String distLocNo = null;//鐩爣鍦扮偣锛屽叆搴�=銆嬫彁鍗囨満鍙o紝鍑哄簱=銆嬭揣鐗╁簱浣嶅彿
-        if (wrkMast.getIoType() < 101) {
+        if (wrkMast.getIoType() < 101 && wrkMast.getIoType() != 11) {
             //鍏ュ簱
             distLocNo = Utils.levToOutInStaLocNo(lev);
-        }else {
+        }else if(wrkMast.getIoType() >= 101){
             //鍑哄簱
             distLocNo = locNo;
+        } else if (wrkMast.getIoType() == 11) {
+            //搴撲綅绉昏浆
+            distLocNo = wrkMast.getSourceLocNo();
         }
 
         //鍒ゆ柇褰撳墠浠诲姟鎵�鍦ㄦゼ灞傛槸鍚︽湁鍏朵粬浠诲姟宸茬粡鍒嗛厤浜嗗皬杞︼紝濡傛湁鍒欑洿鎺ョ敤璇ュ皬杞�(涓�灞傛ゼ浠呭垎閰嶄竴鍙拌溅)
@@ -2013,6 +2023,232 @@
     }
 
     /**
+     * 搴撲綅绉昏浆
+     */
+    public synchronized void locToLocExecute() {
+        //鑾峰彇鍑哄叆搴撳伐浣滄。
+        List<WrkMast> wrkMasts = wrkMastMapper.selectInOutWrkMast();
+        if (wrkMasts.size() > 0) {
+            //鏈夊嚭鍏ュ簱浠诲姟锛屽繀椤荤瓑寰呬换鍔℃墽琛屽畬姣曞啀鎵ц搴撲綅绉昏浆
+            return;
+        }
+
+        //鏌ヨ搴撲綅绉昏浆宸ヤ綔妗�
+        List<WrkMast> wrkMasts1 = wrkMastMapper.selectLocToLocWrkMast();
+        for (WrkMast wrkMast : wrkMasts1) {
+
+            boolean step1 = this.locToLocExecuteStep1(wrkMast);//缁戝畾灏忚溅
+            if (!step1) {
+                continue;
+            }
+
+            boolean step2 = this.locToLocExecuteStep2(wrkMast);//璋冨害灏忚溅鍒扮洰鏍囨ゼ灞�
+            if (!step2) {
+                continue;
+            }
+
+            boolean step3 = this.locToLocExecuteStep3(wrkMast);//鍚屾ゼ灞傚簱浣嶇Щ杞�
+            if (!step3) {
+                continue;
+            }
+
+        }
+    }
+
+    /**
+     * 缁戝畾灏忚溅骞惰皟搴﹁溅
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    private boolean locToLocExecuteStep1(WrkMast wrkMast) {
+        if (wrkMast.getShuttleNo() == null) {//缁欏簱浣嶇Щ杞粦瀹氱┛姊溅鍙�
+            //瀵绘壘鏈�杩戜笖绌洪棽鐨勫洓鍚戠┛姊溅
+            HashMap<String,Object> searchIdleShuttle = this.searchIdleShuttle(wrkMast);
+            ShuttleThread shuttleThread = (ShuttleThread) searchIdleShuttle.get("result");
+            if (shuttleThread == null) {
+                //娌℃湁鎵惧埌绌洪棽绌挎杞�
+                return false;
+            }
+            wrkMast.setShuttleNo(shuttleThread.getSlave().getId());//缁欏伐浣滄。鍒嗛厤鍥涘悜绌挎杞﹀彿
+            wrkMastMapper.updateById(wrkMast);
+        }
+        return true;
+    }
+
+    /**
+     * 璋冨害灏忚溅鍒扮洰鏍囨ゼ灞�
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    private boolean locToLocExecuteStep2(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == 1 && wrkMast.getShuttleNo() != null) {
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+            if (!shuttleProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
+                return false;//灏忚溅澶勪簬涓嶇┖闂茬姸鎬�
+            }
+
+            String currentLocNo = shuttleProtocol.getCurrentLocNo();//灏忚溅褰撳墠搴撲綅鍙�
+            int shuttleLev = Utils.getLev(currentLocNo);//灏忚溅鎵�鍦ㄦゼ灞�
+
+            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
+            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+
+            //鍒ゆ柇灏忚溅鏄惁鍐嶇洰鏍囨ゼ灞�
+            if (shuttleLev != Utils.getLev(wrkMast.getLocNo())) {
+                //灏忚溅鍜岀洰鏍囦笉鍦ㄥ悓涓�妤煎眰
+
+                //鎻愬崌鏈哄彛绔欑偣搴撲綅鍙�
+                String liftSiteLocNo = Utils.levToOutInStaLocNo(shuttleLev);
+
+                //鍒涘缓鍒嗛厤鍛戒护
+                ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+                assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+                assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
+                assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());//鍏ュ嚭搴撴ā寮�
+                assignCommand.setSourceLocNo(currentLocNo);//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+
+                //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞
+                List<ShuttleCommand> commands = this.shuttleAssignCommand(shuttleProtocol.getLocNo(), liftSiteLocNo, NavigationMapType.NONE.id, assignCommand, shuttleThread);
+                if (commands == null) {
+                    return false;//鏈壘鍒拌矾寰�
+                }
+
+                //鑾峰彇褰撳墠灏忚溅鎵�鍦ㄦゼ灞傜殑绔欑偣淇℃伅
+                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);
+
+                //鍒嗛厤鐩爣搴撲綅
+                shuttleProtocol.setLocNo(liftSiteLocNo);
+                //鐩爣搴撲綅
+                assignCommand.setLocNo(liftSiteLocNo);
+                assignCommand.setCommands(commands);
+                wrkMast.setWrkSts(5L);//灏忚溅杩佺Щ鐘舵��
+
+                if (wrkMastMapper.updateById(wrkMast) > 0) {
+                    //涓嬪彂浠诲姟
+                    MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 鍚屾ゼ灞傚簱浣嶇Щ杞�
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    private boolean locToLocExecuteStep3(WrkMast wrkMast) {
+        if (wrkMast.getShuttleNo() == null) {
+            return false;
+        }
+
+        ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+        ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+        if (!shuttleProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
+            return false;//灏忚溅澶勪簬涓嶇┖闂茬姸鎬�
+        }
+
+        LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, 1);
+        LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+
+        DevpThread devpThread = null;
+        for (DevpSlave devp : slaveProperties.getDevp()){
+            // 鑾峰彇鍏ュ簱绔欎俊鎭�
+            devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
+        }
+
+        //鍒ゆ柇灏忚溅鏄惁鍦ㄥ伐浣滄。浠诲姟鐩爣妤煎眰
+        String currentLocNo = shuttleProtocol.getCurrentLocNo();//灏忚溅褰撳墠搴撲綅鍙�
+        int shuttleLev = Utils.getLev(currentLocNo);//灏忚溅鎵�鍦ㄦゼ灞�
+        if (shuttleLev != Utils.getLev(wrkMast.getLocNo())) {
+            return false;//涓嶅湪鍚屼竴妤煎眰
+        }
+
+        if (wrkMast.getWrkSts() == 1 || wrkMast.getWrkSts() == 8) {
+            //璋冨害灏忚溅鎵ц鍚屾ゼ灞傜Щ搴撲换鍔�
+
+            //鍒涘缓鍒嗛厤鍛戒护
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.PAK_IN.id.shortValue());//鍏ュ嚭搴撴ā寮�
+            assignCommand.setSourceLocNo(currentLocNo);//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+
+            List<ShuttleCommand> commands = new ArrayList<>();
+
+            if (wrkMast.getWrkSts() == 8) {//8.鎻愬崌鏈鸿縼绉诲皬杞﹀畬鎴愶紝闇�瑕佸皢灏忚溅绉诲嚭鎻愬崌鏈�
+                //鍒ゆ柇鎻愬崌鏈烘槸鍚︾┖闂�
+                if (!liftProtocol.isIdleNoTask()) {
+                    return false;//鎻愬崌鏈哄繖
+                }
+                //鍒ゆ柇鎻愬崌鏈轰换鍔″彿鍜屽綋鍓嶅伐浣滄。浠诲姟鍙锋槸鍚︿竴鑷�
+                if (liftProtocol.getTaskNo().intValue() != 0 && liftProtocol.getTaskNo().intValue() != wrkMast.getWrkNo()) {
+                    return false;
+                }
+
+                //鍒ゆ柇鎻愬崌鏈烘ゼ灞傛槸鍚﹀埌浣嶏紝鍒ゆ柇绔欑偣鏄惁缁欏嚭鎻愬崌鏈哄埌浣嶄俊鍙�
+                String locNo = wrkMast.getLocNo();
+                int lev = Utils.getLev(locNo);//鐩爣浜岀淮鐮佹墍鍦ㄦゼ灞�
+                int liftLev = liftProtocol.getLev().intValue();//鎻愬崌鏈烘墍鍦ㄦゼ灞�
+                if (liftLev != lev) {
+                    return false;//鎻愬崌鏈轰笉鍦ㄧ洰鏍囨ゼ灞傝烦杩�
+                }
+
+                Integer staNo = Utils.levToOutInStaNo(lev >= 2 ? lev + 1 : lev);
+                //鑾峰彇鐩爣绔欎俊鎭�
+                StaProtocol staProtocol1 = devpThread.getStation().get(staNo);
+                if (staProtocol1 == null) {
+                    return false;//绔欑偣淇℃伅涓嶅瓨鍦�
+                }
+                if (!staProtocol1.isLiftArrival()) {
+                    return false;//绔欑偣鎻愬崌鏈哄埌浣嶄俊鍙穎alse
+                }
+
+                BasDevp basDevp = basDevpService.selectById(staNo);
+                short startCode = liftProtocol.getBarcode();//鎻愬崌鏈哄唴閮ㄤ簩缁寸爜
+                Short distCode = Short.parseShort(basDevp.getQrCodeValue());//鎻愬崌鏈哄彛绔欑偣浜岀淮鐮�
+                Short runDirection = ShuttleRunDirection.BOTTOM.id;//杩愯鏂瑰悜
+                //鑾峰彇鍛戒护
+                ShuttleCommand moveCommand = shuttleThread.getMoveCommand(startCode, distCode, 1600, runDirection, null, null, 500);
+                commands.add(0, moveCommand);//灏嗚鎸囦护娣诲姞鍒伴槦澶�
+
+                currentLocNo = basDevp.getLocNo();//浣跨敤杈撻�佺珯鐐瑰彛浣滀负璧风偣鍧愭爣
+            }
+
+            //鐩存帴璁$畻杞﹀埌婧愬簱浣嶅埌鐩爣搴撲綅璺緞
+            List<ShuttleCommand> commands1 = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), wrkMast.getLocNo(), assignCommand, shuttleThread);
+            if (commands1 == null) {
+                return false;//鎵句笉鍒拌矾寰勭瓑寰呬笅涓�娆�
+            }
+            commands.addAll(commands1);
+
+            //鍒嗛厤浠诲姟鍙�
+            shuttleProtocol.setTaskNo(wrkMast.getWrkNo().shortValue());
+            //鍒嗛厤婧愬簱浣�
+            shuttleProtocol.setSourceLocNo(wrkMast.getSourceLocNo());
+
+            assignCommand.setCommands(commands);
+            //鍒嗛厤鐩爣搴撲綅
+            shuttleProtocol.setLocNo(wrkMast.getLocNo());
+            //鐩爣搴撲綅
+            assignCommand.setLocNo(wrkMast.getLocNo());
+            wrkMast.setWrkSts(9L);//灏忚溅鍏ュ簱涓�
+            if (wrkMastMapper.updateById(wrkMast) > 0) {
+                //涓嬪彂浠诲姟
+                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
+            }
+        }
+
+        return true;
+    }
+
+    /**
      * 寮傚父淇℃伅璁板綍
      */
     public void recErr() {

--
Gitblit v1.9.1