From 1da55d544dffc8d8b2e88efb4532776e71b0b11c Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期五, 15 九月 2023 16:39:09 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  416 +++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 305 insertions(+), 111 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 e47ec88..70fc05b 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -69,6 +69,8 @@
     @Autowired
     private BasShuttleErrLogService basShuttleErrLogService;
     @Autowired
+    private BasLiftErrLogService basLiftErrLogService;
+    @Autowired
     private BasShuttleErrService basShuttleErrService;
     @Autowired
     private BasCrnErrorMapper basCrnErrorMapper;
@@ -878,14 +880,17 @@
                                 shuttleProtocol.setToken(0);
                             }
                             break;
-                        case 102://102.灏忚溅鍒版彁鍗囨満涓� ==> 103.灏忚溅鍒版彁鍗囨満瀹屾垚
+                        case 102://102.灏忚溅绉诲姩鑷崇珯鐐� ==> 103.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴�
                             wrkMast.setWrkSts(103L);
                             break;
-                        case 106://106.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 107.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴�
-                            wrkMast.setWrkSts(107L);
+                        case 104://104.灏忚溅杩佸叆鎻愬崌鏈轰腑 ==> 105.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴�
+                            wrkMast.setWrkSts(105L);
                             break;
-                        case 108://108.灏忚溅绉诲姩涓� ==> 109.灏忚溅绉诲姩瀹屾垚
+                        case 108://108.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴�
                             wrkMast.setWrkSts(109L);
+                            break;
+                        case 110://110.灏忚溅绉诲姩涓� ==> 111.灏忚溅绉诲姩瀹屾垚
+                            wrkMast.setWrkSts(111L);
                             if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) {
                                 //閲婃斁灏忚溅浠ょ墝
                                 shuttleProtocol.setToken(0);
@@ -1133,8 +1138,8 @@
                                 liftProtocol.setToken(0);
                             }
                             break;
-                        case 104://104.鎻愬崌鏈烘惉杩愪腑 ==> 105.鎻愬崌鏈烘惉杩愬畬鎴�
-                            wrkMast.setWrkSts(105L);
+                        case 106://106.鎻愬崌鏈烘惉杩愪腑 ==> 107.鎻愬崌鏈烘惉杩愬畬鎴�
+                            wrkMast.setWrkSts(107L);
                             break;
                         default:
                     }
@@ -1453,6 +1458,7 @@
     public void recErr() {
         try {
             this.recShuttleErr();
+            this.recLiftErr();
         } catch (Exception e) {
             News.error("recErr fail", e);
         }
@@ -1573,6 +1579,91 @@
 //                        }
 //                    }
 //                }
+            }
+        }
+    }
+
+    /**
+     * 鎻愬崌鏈哄紓甯镐俊鎭褰�
+     */
+    private void recLiftErr() {
+        Date now = new Date();
+        for (LiftSlave liftSlave : slaveProperties.getLift()) {
+            // 鑾峰彇鎻愬崌鏈轰俊鎭�
+            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
+            if (liftThread == null) {
+                continue;
+            }
+            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+            if (liftProtocol == null) {
+                continue;
+            }
+
+            if (liftProtocol.getTaskNo() != 0) {
+                //鏈変换鍔�
+                BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(liftSlave.getId(), liftProtocol.getTaskNo().intValue());
+                // 鏈夊紓甯�
+                if (latest == null) {
+                    if (liftProtocol.getDeviceError() != null && liftProtocol.getDeviceError()) {
+                        WrkMast wrkMast = wrkMastMapper.selectById(liftProtocol.getTaskNo());
+                        if (wrkMast == null) {
+                            continue;
+                        }
+
+                        String errName = "";
+                        if (liftProtocol.getFrontOverrun()) {
+                            errName = "鍓嶈秴闄�";
+                        } else if (liftProtocol.getBackOverrun()) {
+                            errName = "鍚庤秴闄�";
+                        } else if (liftProtocol.getLeftOverrun()) {
+                            errName = "宸﹁秴闄�";
+                        } else if (liftProtocol.getRightOverrun()) {
+                            errName = "鍙宠秴闄�";
+                        } else if (liftProtocol.getOverHeight()) {
+                            errName = "瓒呴珮";
+                        } else if (liftProtocol.getOverWeight()) {
+                            errName = "瓒呴噸";
+                        }
+
+                        BasLiftErrLog basLiftErrLog = new BasLiftErrLog(
+                                null,    // 缂栧彿
+                                wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
+                                now,    // 鍙戠敓鏃堕棿
+                                null,    // 缁撴潫鏃堕棿
+                                wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
+                                wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
+                                liftSlave.getId(),    // 鎻愬崌鏈�
+                                null,    // plc
+                                wrkMast.getLocNo(),    // 鐩爣搴撲綅
+                                wrkMast.getStaNo(),    // 鐩爣绔�
+                                wrkMast.getSourceStaNo(),    // 婧愮珯
+                                wrkMast.getSourceLocNo(),    // 婧愬簱浣�
+                                wrkMast.getBarcode(),    // 鏉$爜
+                                null,    // 寮傚父鐮�
+                                errName,    // 寮傚父
+                                1,    // 寮傚父鎯呭喌
+                                now,    // 娣诲姞鏃堕棿
+                                null,    // 娣诲姞浜哄憳
+                                now,    // 淇敼鏃堕棿
+                                null,    // 淇敼浜哄憳
+                                "浠诲姟涓紓甯�",    // 澶囨敞
+                                JSON.toJSONString(liftProtocol)    // 绯荤粺鐘舵�佹暟鎹�
+                        );
+                        if (!basLiftErrLogService.insert(basLiftErrLog)) {
+                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", liftSlave.getId(), errName);
+                        }
+                    }
+                } else {
+                    // 寮傚父淇
+                    if (liftProtocol.getDeviceError() == null || !liftProtocol.getDeviceError()) {
+                        latest.setEndTime(now);
+                        latest.setUpdateTime(now);
+                        latest.setStatus(2);
+                        if (!basLiftErrLogService.updateById(latest)) {
+                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", liftSlave.getId(), latest.getId());
+                        }
+                    }
+                }
             }
         }
     }
@@ -1975,38 +2066,44 @@
         //鏌ヨ灏忚溅绉诲簱浠诲姟
         List<WrkMast> wrkMasts = wrkMastMapper.selectShuttleMoveWrk();
         for (WrkMast wrkMast : wrkMasts) {
-            boolean step1 = this.shuttleMoveExecuteStep1(wrkMast);//灏忚溅绉诲姩鍒版彁鍗囨満涓�
-            if (!step1) {
+            boolean stepMoveSta = this.shuttleMoveExecuteStepMoveSta(wrkMast);//灏忚溅绉诲姩鍒扮珯鐐�
+            if (!stepMoveSta) {
                 continue;
             }
 
-            boolean step2 = this.shuttleMoveExecuteStep2(wrkMast);//鎻愬崌鏈烘惉杩愪腑
-            if (!step2) {
+            boolean stepIntoLift = this.shuttleMoveExecuteStepIntoLift(wrkMast);//灏忚溅杩佸叆鎻愬崌鏈�
+            if (!stepIntoLift) {
                 continue;
             }
 
-            boolean step3 = this.shuttleMoveExecuteStep3(wrkMast);//灏忚溅杩佸嚭鎻愬崌鏈轰腑
-            if (!step3) {
+            boolean stepLiftMove = this.shuttleMoveExecuteStepLiftMove(wrkMast);//鎻愬崌鏈烘惉杩愪腑
+            if (!stepLiftMove) {
                 continue;
             }
 
-            boolean step4 = this.shuttleMoveExecuteStep4(wrkMast);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑
-            if (!step4) {
+            boolean stepOutLift = this.shuttleMoveExecuteStepOutLift(wrkMast);//灏忚溅杩佸嚭鎻愬崌鏈�
+            if (!stepOutLift) {
                 continue;
             }
+
+            boolean stepMoveLoc = this.shuttleMoveExecuteStepMoveLoc(wrkMast);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑
+            if (!stepMoveLoc) {
+                continue;
+            }
+
         }
     }
 
     /**
-     * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒版彁鍗囨満涓�
+     * 灏忚溅杩佺Щ-灏忚溅绉诲姩鍒扮珯鐐�
      * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
      * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
      */
-    private boolean shuttleMoveExecuteStep1(WrkMast wrkMast) {
-        //--------------------------------------灏忚溅绉诲姩鍒版彁鍗囨満涓�-----------------------------------------//
+    private boolean shuttleMoveExecuteStepMoveSta(WrkMast wrkMast) {
+        //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------//
         Date now = new Date();
 
-        //灏忚溅绉诲姩鍒版彁鍗囨満涓�  101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅鍒版彁鍗囨満涓�
+        //灏忚溅绉诲姩鑷崇珯鐐�  101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅绉诲姩鑷崇珯鐐逛腑
         if (wrkMast.getWrkSts() == 101) {
             //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
             NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
@@ -2029,71 +2126,26 @@
             }
 
             if (Utils.getLev(wrkMast.getLocNo()) == shuttleProtocol.getPoint().getZ()) {
-                //鐩爣搴撲綅鍜屽皬杞﹀簱浣嶅浜庡悓涓�妤煎眰锛岄渶瑕侀�氳繃鎻愬崌鏈鸿皟搴�
-                return true;//鐩存帴杩涘叆108.灏忚溅绉诲姩涓�
+                //鐩爣搴撲綅鍜屽皬杞﹀簱浣嶅浜庡悓涓�妤煎眰锛屼笉闇�瑕侀�氳繃鎻愬崌鏈鸿皟搴�
+                wrkMast.setWrkSts(109L);// 109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓�
+                wrkMast.setModiTime(now);
+                shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗�
+                if (wrkMastMapper.updateById(wrkMast) > 0) {
+                    //涓嬪彂浠诲姟
+                    return true;//鐩存帴杩涘叆109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓�
+                }
+                return false;
             }
 
-            //璁$畻璺濈灏忚溅鏈�杩戠殑鎻愬崌鏈虹珯鐐�
-            //鏌ヨ灏忚溅鎵�鍦ㄦゼ灞傛彁鍗囨満杈撻�佺珯鐐�
-            int recentAllDistance = 9999999;//榛樿鏈�杩戣窛绂�
-            BasDevp recentDevp = null;//鏈�杩戠珯鐐�
-            List<BasDevp> basDevps = basDevpService.selectHasLiftNoByLev(shuttleProtocol.getPoint().getZ());
-            for (BasDevp basDevp : basDevps) {
-                LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, basDevp.getLiftNo());
-                if (liftThread == null) {
-                    continue;
-                }
-                LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-                if (liftProtocol == null) {
-                    continue;
-                }
-                if (!liftProtocol.isIdle()) {
-                    continue;
-                }
-
-                //璁$畻璺緞
-                List<NavigateNode> calc = NavigateUtils.calc(shuttleProtocol.getCurrentLocNo(), basDevp.getLocNo(), NavigationMapType.NORMAL.id, Utils.getShuttlePoints(shuttleThread.getSlave().getId(), Utils.getLev(shuttleProtocol.getCurrentLocNo())));
-                if (calc == null) {
-                    continue;//璁$畻澶辫触锛屾壘涓嬩竴涓珯鐐�
-                }
-
-                Integer allDistance = NavigateUtils.getOriginPathAllDistance(calc);//鏍规嵁鍘熷鑺傜偣缁撴灉锛岃绠楁�昏璧拌窛绂�
-                if (recentAllDistance > allDistance) {
-                    recentAllDistance = allDistance;//鏇存柊璺濈
-                    recentDevp = basDevp;//鏇存柊杈撻�佺珯鐐�
-                }
+            //鑾峰彇鐩爣杈撻�佺珯
+            BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo());
+            if (basDevp == null) {
+                return false;//鎵句笉鍒拌緭閫佺珯鐐�
             }
-
-            if (recentDevp == null) {
-                //娌℃湁鎵惧埌鍙敤杈撻�佺珯鐐�
-                return false;//绛夊緟涓嬩竴娆¤疆璇�
-            }
-
-            //鑾峰彇鎻愬崌鏈烘暟鎹�
-            BasLift basLift = basLiftService.selectById(recentDevp.getLiftNo());
-            if (basLift == null) {
-                return false;//娌℃湁鎻愬崌鏈烘暟鎹�
-            }
-            if (basLift.getPoint() == null) {
-                return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍�
-            }
-            //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
-            WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(basLift.getLiftNo());
-            if (liftWrkMast != null) {
-                return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
-            }
-            NavigateNode liftNode = new NavigateNode(basLift.getPoint().getX(), basLift.getPoint().getY());
-            liftNode.setZ(basLift.getPoint().getZ());
 
             //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
-            NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), recentDevp.getLocNo());
-            //鑾峰彇灏忚溅杩涙彁鍗囨満琛岃蛋鍛戒护
-            NyShuttleHttpCommand moveCommand = NyHttpUtils.getInOutLiftCommand(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), NavigatePositionConvert.locNoToNode(recentDevp.getLocNo()), liftNode, true);
-            if (result.getCommands() == null) {
-                return false;//璺緞璁$畻澶辫触
-            }
+            NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), shuttleProtocol.getCurrentLocNo(), basDevp.getLocNo());
             List<NyShuttleHttpCommand> commands = result.getCommands();
-            commands.add(moveCommand);//娣诲姞灏忚溅杩佸叆鎻愬崌鏈哄懡浠�
 
             ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
             assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
@@ -2103,31 +2155,53 @@
             assignCommand.setCommands(commands);
             assignCommand.setNodes(result.getNodes());
 
-            wrkMast.setWrkSts(102L);//灏忚溅绉诲姩鍒版彁鍗囨満涓�  101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅鍒版彁鍗囨満涓�
-            wrkMast.setLiftNo(basLift.getLiftNo());//鎻愬崌鏈哄彿(閿佸畾鎻愬崌鏈洪槻姝㈣鍏朵粬浠诲姟鎶㈠崰)
+            wrkMast.setWrkSts(102L);//灏忚溅绉诲姩鍒版彁鍗囨満涓�  101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅绉诲姩鑷崇珯鐐�
             wrkMast.setModiTime(now);
             shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗�
             if (wrkMastMapper.updateById(wrkMast) > 0) {
                 //涓嬪彂浠诲姟
                 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
+                return false;
             }
+            return false;
         }
         return true;
     }
 
     /**
-     * 灏忚溅杩佺Щ-鎻愬崌鏈烘惉杩愪腑
+     * 灏忚溅杩佺Щ-灏忚溅杩佸叆鎻愬崌鏈�
      * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
      * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
      */
-    private boolean shuttleMoveExecuteStep2(WrkMast wrkMast) {
-        //--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------//
+    private boolean shuttleMoveExecuteStepIntoLift(WrkMast wrkMast) {
+        //--------------------------------------灏忚溅杩佸叆鎻愬崌鏈�-----------------------------------------//
         Date now = new Date();
 
-        //鎻愬崌鏈烘惉杩愪腑  103.灏忚溅鍒版彁鍗囨満瀹屾垚 ==> 104.鎻愬崌鏈烘惉杩愪腑
+        //灏忚溅绉诲姩鍒版彁鍗囨満涓�  103.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 104.灏忚溅杩佸叆鎻愬崌鏈轰腑
         if (wrkMast.getWrkSts() == 103) {
+            //鑾峰彇鐩爣杈撻�佺珯
+            BasDevp basDevp = basDevpService.selectById(wrkMast.getStaNo());
+            if (basDevp == null) {
+                return false;//鎵句笉鍒拌緭閫佺珯鐐�
+            }
 
-            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
+            //鑾峰彇鎻愬崌鏈烘暟鎹�
+            BasLift basLift = basLiftService.selectById(basDevp.getLiftNo());
+            if (basLift == null) {
+                return false;//娌℃湁鎻愬崌鏈烘暟鎹�
+            }
+
+            if (basLift.getPoint() == null) {
+                return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍�
+            }
+
+            //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
+            WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(basLift.getLiftNo());
+            if (liftWrkMast != null) {
+                return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
+            }
+
+            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, basDevp.getLiftNo());
             if (liftThread == null) {
                 return false;
             }
@@ -2137,10 +2211,6 @@
             }
             if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
                 return false;
-            }
-            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰�
-            if (liftProtocol.getToken() != 0) {
-                return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔�
             }
 
             //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
@@ -2155,6 +2225,130 @@
 
             //灏忚溅澶勪簬绌洪棽鐘舵��
             if (!shuttleProtocol.isIdleNoCharge()) {
+                return false;
+            }
+
+            //鍒ゆ柇鎻愬崌鏈烘ゼ灞�
+            if (liftProtocol.getLev().intValue() != shuttleProtocol.getPoint().getZ()) {
+                //鎻愬崌鏈轰笉鍦ㄥ皬杞︽ゼ灞�
+                //璋冨害鎻愬崌鏈�
+
+                //鑾峰彇婧愮珯瀵瑰簲鐨勮緭閫佺珯鐐�
+                BasDevp sourceBasDevp = basDevpService.selectByLevAndLiftNo(liftProtocol.getLev().intValue(), liftProtocol.getLiftNo().intValue());
+                //鑾峰彇鎻愬崌鏈哄懡浠�
+                NyLiftCommand liftCommand = NyLiftUtils.getLiftCommand(liftProtocol.getLiftNo().intValue(), NyLiftTaskModelType.MOVE_CAR.id, sourceBasDevp.getDevNo(), basDevp.getDevNo(), wrkMast.getWrkNo());
+
+                ArrayList<NyLiftCommand> commands = new ArrayList<>();
+                commands.add(liftCommand);
+
+                //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
+                LiftAssignCommand assignCommand = new LiftAssignCommand();
+                assignCommand.setCommands(commands);
+                assignCommand.setLiftNo(liftProtocol.getLiftNo());
+                assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
+                assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_CAR.id.shortValue());
+
+                wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤
+                wrkMast.setModiTime(now);
+                liftProtocol.setToken(wrkMast.getShuttleNo());//鎻愬崌鏈轰护鐗岀粦瀹氬綋鍓嶅皬杞�
+                if (wrkMastMapper.updateById(wrkMast) > 0) {
+                    //涓嬪彂浠诲姟
+                    MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
+                }
+                return false;//绛夊緟鎻愬崌鏈哄埌灏忚溅妤煎眰
+            }
+
+            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠灏忚溅
+            if (liftProtocol.getToken() != wrkMast.getShuttleNo()) {
+                return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔�
+            }
+
+            //鍒ゆ柇灏忚溅鏄惁涓哄綋鍓嶄换鍔$嫭鍗�
+            if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) {
+                return false;
+            }
+
+            //绔欑偣鑺傜偣
+            NavigateNode staNode = NavigatePositionConvert.locNoToNode(basDevp.getLocNo());
+
+            //鎻愬崌鏈鸿妭鐐�
+            NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY());
+            liftNode.setZ(basLift.getPoint$().getZ());
+
+            //鑾峰彇灏忚溅杩涙彁鍗囨満琛岃蛋鍛戒护
+            NyShuttleHttpCommand moveCommand = NyHttpUtils.getInOutLiftCommand(wrkMast.getShuttleNo(), wrkMast.getWrkNo(), staNode, liftNode, true);
+            List<NyShuttleHttpCommand> commands = new ArrayList<>();
+            commands.add(moveCommand);
+            List<NavigateNode> nodes = new ArrayList<>();//琛岃蛋鑺傜偣璺緞
+            nodes.add(staNode);
+            nodes.add(liftNode);
+
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO.id.shortValue());//灏忚溅绉诲簱浠诲姟
+            assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());//浠诲姟鍙�
+            assignCommand.setAuto(true);//鑷姩妯″紡
+            assignCommand.setCommands(commands);
+            assignCommand.setNodes(nodes);
+
+            wrkMast.setWrkSts(104L);//灏忚溅绉诲姩鍒版彁鍗囨満涓�  103.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 104.灏忚溅杩佸叆鎻愬崌鏈轰腑
+            wrkMast.setModiTime(now);
+            if (wrkMastMapper.updateById(wrkMast) > 0) {
+                //涓嬪彂浠诲姟
+                MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
+                return false;
+            }
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * 灏忚溅杩佺Щ-鎻愬崌鏈烘惉杩愪腑
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    private boolean shuttleMoveExecuteStepLiftMove(WrkMast wrkMast) {
+        //--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------//
+        Date now = new Date();
+
+        //鎻愬崌鏈烘惉杩愪腑  105.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 106.鎻愬崌鏈烘惉杩愪腑
+        if (wrkMast.getWrkSts() == 105) {
+
+            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
+            if (liftThread == null) {
+                return false;
+            }
+            LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+            if (liftProtocol == null) {
+                return false;
+            }
+            if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
+                return false;
+            }
+            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠灏忚溅
+            if (liftProtocol.getToken() != wrkMast.getShuttleNo()) {
+                return false;//鎻愬崌鏈轰护鐗屽拰褰撳墠灏忚溅涓嶄竴鑷达紝绂佹娲惧彂
+            }
+
+            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            if (shuttleThread == null) {
+                return false;
+            }
+            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
+            if (shuttleProtocol == null) {
+                return false;
+            }
+
+            //灏忚溅澶勪簬绌洪棽鐘舵��
+            if (!shuttleProtocol.isIdleNoCharge()) {
+                return false;
+            }
+
+            //鍒ゆ柇灏忚溅鏄惁涓哄綋鍓嶄换鍔$嫭鍗�
+            if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) {
                 return false;
             }
 
@@ -2179,10 +2373,9 @@
             assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
             assignCommand.setTaskMode(NyLiftTaskModelType.MOVE_CAR.id.shortValue());
 
-            wrkMast.setWrkSts(104L);//鎻愬崌鏈烘惉杩愪腑  103.灏忚溅鍒版彁鍗囨満瀹屾垚 ==> 104.鎻愬崌鏈烘惉杩愪腑
+            wrkMast.setWrkSts(106L);//鎻愬崌鏈烘惉杩愪腑  105.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 106.鎻愬崌鏈烘惉杩愪腑
             wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤
             wrkMast.setModiTime(now);
-            liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗�
             if (wrkMastMapper.updateById(wrkMast) > 0) {
                 //涓嬪彂浠诲姟
                 MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
@@ -2193,16 +2386,15 @@
     }
 
     /**
-     * 灏忚溅杩佺Щ-灏忚溅杩佸嚭鎻愬崌鏈轰腑
+     * 灏忚溅杩佺Щ-灏忚溅杩佸嚭鎻愬崌鏈�
      * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
      * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
      */
-    private boolean shuttleMoveExecuteStep3(WrkMast wrkMast) {
-        //--------------------------------------灏忚溅杩佸嚭鎻愬崌鏈轰腑-----------------------------------------//
+    private boolean shuttleMoveExecuteStepOutLift(WrkMast wrkMast) {
+        //--------------------------------------灏忚溅杩佸嚭鎻愬崌鏈�-----------------------------------------//
         Date now = new Date();
-
-        //灏忚溅杩佸嚭鎻愬崌鏈轰腑  105.鎻愬崌鏈烘惉杩愬畬鎴� ==> 106.灏忚溅杩佸嚭鎻愬崌鏈轰腑
-        if (wrkMast.getWrkSts() == 105) {
+        //灏忚溅绉诲姩鍒版彁鍗囨満涓�  107.鎻愬崌鏈烘惉杩愬畬鎴� ==> 108.灏忚溅杩佸嚭鎻愬崌鏈轰腑
+        if (wrkMast.getWrkSts() == 107) {
 
             LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
             if (liftThread == null) {
@@ -2216,9 +2408,9 @@
                 return false;
             }
 
-            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠浠诲姟
-            if (liftProtocol.getToken() != wrkMast.getWrkNo()) {
-                return false;
+            //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠灏忚溅
+            if (liftProtocol.getToken() != wrkMast.getShuttleNo()) {
+                return false;//鎻愬崌鏈轰护鐗屽拰褰撳墠灏忚溅涓嶄竴鑷达紝绂佹娲惧彂
             }
 
             //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
@@ -2236,7 +2428,7 @@
                 return false;
             }
 
-            //鍒ゆ柇灏忚溅浠ょ墝鏄惁涓哄綋鍓嶄换鍔�
+            //鍒ゆ柇灏忚溅鏄惁涓哄綋鍓嶄换鍔$嫭鍗�
             if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) {
                 return false;
             }
@@ -2248,15 +2440,15 @@
             }
 
             //鑾峰彇鎻愬崌鏈烘暟鎹�
-            BasLift basLift = basLiftService.selectById(targetBasDevp.getLiftNo());
+            BasLift basLift = basLiftService.selectById(liftProtocol.getLiftNo().intValue());
             if (basLift == null) {
                 return false;//娌℃湁鎻愬崌鏈烘暟鎹�
             }
             if (basLift.getPoint() == null) {
                 return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍�
             }
-            NavigateNode liftNode = new NavigateNode(basLift.getPoint().getX(), basLift.getPoint().getY());
-            liftNode.setZ(basLift.getPoint().getZ());
+            NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY());
+            liftNode.setZ(basLift.getPoint$().getZ());
 
             List<NyShuttleHttpCommand> commands = new ArrayList<>();
             //鑾峰彇灏忚溅鍑烘彁鍗囨満琛岃蛋鍛戒护
@@ -2271,12 +2463,14 @@
             assignCommand.setCommands(commands);
             assignCommand.setNodes(null);
 
-            wrkMast.setWrkSts(106L);//灏忚溅杩佸嚭鎻愬崌鏈轰腑  105.鎻愬崌鏈烘惉杩愬畬鎴� ==> 106.灏忚溅杩佸嚭鎻愬崌鏈轰腑
+            wrkMast.setWrkSts(108L);//灏忚溅杩佸嚭鎻愬崌鏈轰腑  107.鎻愬崌鏈烘惉杩愬畬鎴� ==> 108.灏忚溅杩佸嚭鎻愬崌鏈轰腑
             wrkMast.setModiTime(now);
             if (wrkMastMapper.updateById(wrkMast) > 0) {
                 //涓嬪彂浠诲姟
                 MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
+                return false;
             }
+            return false;
         }
         return true;
     }
@@ -2286,12 +2480,12 @@
      * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
      * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
      */
-    private boolean shuttleMoveExecuteStep4(WrkMast wrkMast) {
+    private boolean shuttleMoveExecuteStepMoveLoc(WrkMast wrkMast) {
         //--------------------------------------灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑-----------------------------------------//
         Date now = new Date();
 
-        //灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑  107.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 108.灏忚溅绉诲姩涓�
-        if (wrkMast.getWrkSts() == 107) {
+        //灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑  109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓�
+        if (wrkMast.getWrkSts() == 109) {
 
             LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
             if (liftThread == null) {
@@ -2336,12 +2530,12 @@
             if (basLift.getPoint() == null) {
                 return false;//娌℃湁璁剧疆鎻愬崌鏈虹偣浣嶅潗鏍�
             }
-            NavigateNode liftNode = new NavigateNode(basLift.getPoint().getX(), basLift.getPoint().getY());
-            liftNode.setZ(basLift.getPoint().getZ());
+            NavigateNode liftNode = new NavigateNode(basLift.getPoint$().getX(), basLift.getPoint$().getY());
+            liftNode.setZ(basLift.getPoint$().getZ());
 
             //鑾峰彇灏忚溅浠庤緭閫佺珯鍒扮洰鏍囧簱浣嶅懡浠�
             NyShuttleOperaResult result = NyShuttleOperaUtils.getStartToTargetCommands(shuttleThread.getSlave().getId(), wrkMast.getWrkNo(), targetBasDevp.getLocNo(), wrkMast.getLocNo());
-            if (result.getCommands() == null) {
+            if (result == null) {
                 return false;//璺緞璁$畻澶辫触
             }
             List<NyShuttleHttpCommand> commands = result.getCommands();
@@ -2354,7 +2548,7 @@
             assignCommand.setCommands(commands);
             assignCommand.setNodes(result.getNodes());
 
-            wrkMast.setWrkSts(108L);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑  107.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 108.灏忚溅绉诲姩涓�
+            wrkMast.setWrkSts(110L);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑  109.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 110.灏忚溅绉诲姩涓�
             wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
             wrkMast.setModiTime(now);
             liftProtocol.setToken(0);//閲婃斁鎻愬崌鏈轰护鐗�

--
Gitblit v1.9.1