From ed265ddfb8f08f69af064a9adf65fcbf06289ffe Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期二, 11 二月 2025 14:07:54 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  507 ++++++++++++++++++++++++--------------------------------
 1 files changed, 219 insertions(+), 288 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 a9887dd..f37188e 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -1,9 +1,12 @@
 package com.zy.asrs.service.impl;
 
 import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.domain.enums.NotifyMsgType;
 import com.zy.asrs.entity.*;
 import com.zy.asrs.mapper.*;
 import com.zy.asrs.service.*;
+import com.zy.asrs.utils.NotifyUtils;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.model.*;
 import com.zy.common.model.enums.NavigationMapType;
@@ -82,6 +85,8 @@
     private ShuttleAction shuttleAction;
     @Autowired
     private ForkLiftAction forkLiftAction;
+    @Autowired
+    private NotifyUtils notifyUtils;
 
 
 //    /**
@@ -842,14 +847,28 @@
                         if (wrkMast.getWrkSts() == WrkStsType.MOVE_SITE.sts) {
                             //302.灏忚溅绉诲姩鑷崇珯鐐� ==> 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴�
                             wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                        } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT.sts) {
+                            //308.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴�
+                            wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts);
+                            shuttleThread.setSyncTaskNo(0);
                         } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SHUTTLE.sts) {
                             //310.灏忚溅绉诲姩涓� ==> 311.灏忚溅绉诲姩瀹屾垚
                             wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);
                             shuttleThread.setSyncTaskNo(0);
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_MOVE_COMPLETE);//瑙﹀彂閫氱煡
                         } else if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_WORKING.sts) {
                             //204.灏忚溅鍏呯數涓� ==> 205.灏忚溅鍏呯數瀹屾垚
                             wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts);
                             shuttleThread.setSyncTaskNo(0);
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
+                        } else if (wrkMast.getWrkSts() == WrkStsType.LOC_MOVE_SHUTTLE_RUN.sts) {
+                            //502.灏忚溅鎼繍涓� ==> 509.绉诲簱瀹屾垚
+                            wrkMast.setWrkSts(WrkStsType.COMPLETE_LOC_MOVE.sts);
+                            shuttleThread.setSyncTaskNo(0);
+                            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_DELIVERY);//瑙﹀彂閫氱煡
+                        } else {
+                            continue;
                         }
 //                        switch (wrkMast.getWrkSts().intValue()) {
 ////                            case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚
@@ -905,6 +924,101 @@
         } catch (Exception e) {
             e.printStackTrace();
         }
+    }
+
+    /**
+     * 鎵ц绉诲簱浠诲姟
+     */
+    public synchronized void shuttleLocMoveExecute() {
+        try {
+            //鏌ヨ绉诲簱浠诲姟
+            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", WrkStsType.NEW_LOC_MOVE.sts));
+            for (WrkMast wrkMast : wrkMasts) {
+                boolean stepToTarget = this.shuttleLocMoveExecuteToTarget(wrkMast);//绉诲簱浠诲姟-灏忚溅鍘荤洰鏍囩偣
+                if (!stepToTarget) {
+                    continue;
+                }
+
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 绉诲簱浠诲姟-灏忚溅鍘荤洰鏍囩偣
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    private boolean shuttleLocMoveExecuteToTarget(WrkMast wrkMast) {
+        //--------------------------------------灏忚溅绉诲姩鑷崇珯鐐�-----------------------------------------//
+        Date now = new Date();
+
+        //灏忚溅绉诲姩鑷崇珯鐐�  501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鎼繍涓�
+        if (wrkMast.getWrkSts() == WrkStsType.NEW_LOC_MOVE.sts) {
+            if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
+                boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╃偣杩涜鍙栬揣
+                News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
+                return false;
+            }
+
+            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            if (shuttleThread == null) {
+                return false;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                return false;
+            }
+
+            if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞︽湭鍒拌揪鍙栬揣浣嶇疆", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+                return false;
+            }
+
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟
+            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+            assignCommand.setAuto(true);//鑷姩妯″紡
+
+            //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
+            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(wrkMast.getSourceLocNo(), wrkMast.getLocNo(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
+            if (commands == null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;
+            }
+
+            List<ShuttleCommand> liftCommand = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true);
+            if (liftCommand == null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇椤跺崌鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;
+            }
+
+            List<ShuttleCommand> liftCommand2 = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false);
+            if (liftCommand2 == null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅鑾峰彇涓嬮檷鍛戒护澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;
+            }
+
+            commands.add(0, liftCommand.get(0));
+            commands.add(liftCommand2.get(0));
+            assignCommand.setCommands(commands);
+
+            wrkMast.setWrkSts(WrkStsType.LOC_MOVE_SHUTTLE_RUN.sts);//灏忚溅鎼繍涓�  501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鎼繍涓�
+            wrkMast.setModiTime(now);
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+            if (wrkMastService.updateById(wrkMast)) {
+                //涓嬪彂浠诲姟
+                shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+                //瑙﹀彂閫氱煡
+                notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_MOVING);
+                return false;
+            }
+            return false;
+        }
+        return true;
     }
 
 //    /**
@@ -1275,8 +1389,7 @@
 //                                break;
                             case 306://306.鎻愬崌鏈烘惉杩愪腑 ==> 307.鎻愬崌鏈烘惉杩愬畬鎴�
                                 wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts);
-                                //璐у弶鎻愬崌鏈洪渶瑕佽烦杩囪縼鍑烘彁鍗囨満娴佺▼
-                                wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts);
+                                forkLiftThread.setSyncTaskNo(0);
                                 break;
                             default:
                         }
@@ -1555,206 +1668,6 @@
 //    }
 
     /**
-     * 鍑哄簱  ===>> 宸ヤ綔妗d俊鎭啓鍏ed鏄剧ず鍣�
-     */
-    public void ledExecute() {
-//        try {
-//            for (LedSlave led : slaveProperties.getLed()) {
-//                // 鑾峰彇杈撻�佺嚎plc绾跨▼
-//                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
-//                // 鍛戒护闆嗗悎
-//                List<LedCommand> commands = new ArrayList<>();
-//                // 宸ヤ綔妗i泦鍚�
-//                List<WrkMast> wrkMasts = new ArrayList<>();
-//                List<WrkMastLog> wrkMastLogs = new ArrayList<>();
-//                for (Integer staNo : led.getStaArr()) {
-//                    // 鑾峰彇鍙夎溅绔欑偣
-//                    StaProtocol staProtocol = devpThread.getStation().get(staNo);
-//                    if (null == staProtocol || null == staProtocol.getWorkNo() || 0 == staProtocol.getWorkNo() || !staProtocol.isLoading()) {
-//                        continue;
-//                    } else {
-//                        staProtocol = staProtocol.clone();
-//                    }
-//                    // 鑾峰彇宸ヤ綔妗f暟鎹�
-//                    WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo());
-//                    Integer wrkNo = staProtocol.getWorkNo().intValue();
-//                    Integer ioType = null;
-//                    String sourceLocNo = null;
-//                    String locNo = null;
-//                    Integer wrkStaNo = null;
-//                    String barcode = null;
-//                    if (wrkMast == null) {
-//                        //鏌ヨ鍘嗗彶妗�
-//                        WrkMastLog wrkMastLog = wrkMastLogMapper.selectLatestByWorkNo(staProtocol.getWorkNo().intValue());
-//                        if (wrkMastLog == null) {
-//                            continue;
-//                        }
-//                        ioType = wrkMastLog.getIoType();
-//                        sourceLocNo = wrkMastLog.getSourceLocNo();
-//                        locNo = wrkMastLog.getLocNo();
-//                        wrkStaNo = wrkMastLog.getStaNo();
-//                        barcode = wrkMastLog.getBarcode();
-//                        wrkMastLogs.add(wrkMastLog);
-//                    }else {
-//                        if (wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) {
-//                            continue;
-//                        }
-//                        ioType = wrkMast.getIoType();
-//                        sourceLocNo = wrkMast.getSourceLocNo();
-//                        locNo = wrkMast.getLocNo();
-//                        wrkStaNo = wrkMast.getStaNo();
-//                        barcode = wrkMast.getBarcode();
-//                        wrkMasts.add(wrkMast);
-//                    }
-//                    // 缁勮鍛戒护
-//                    LedCommand ledCommand = new LedCommand();
-//                    ledCommand.setWorkNo(wrkNo);
-//                    ledCommand.setIoType(ioType);
-//                    // 鍑哄簱妯″紡
-//                    switch (ioType) {
-//                        case 101:
-//                            ledCommand.setTitle("鍏ㄦ澘鍑哄簱");
-//                            break;
-//                        case 103:
-//                            ledCommand.setTitle("鎷f枡鍑哄簱");
-//                            break;
-//                        case 104:
-//                            ledCommand.setTitle("骞舵澘鍑哄簱");
-//                            break;
-//                        case 107:
-//                            ledCommand.setTitle("鐩樼偣鍑哄簱");
-//                            break;
-//                        case 110:
-//                            ledCommand.setTitle("绌烘澘鍑哄簱");
-//                            ledCommand.setEmptyMk(true);
-//                            break;
-//                        default:
-//                            News.error("浠诲姟鍏ュ嚭搴撶被鍨嬮敊璇紒锛侊紒[宸ヤ綔鍙凤細{}] [鍏ュ嚭搴撶被鍨嬶細{}]", wrkNo, ioType);
-//                            break;
-//                    }
-//                    ledCommand.setSourceLocNo(sourceLocNo);
-//                    ledCommand.setLocNo(locNo);
-//                    ledCommand.setStaNo(wrkStaNo);
-//                    ledCommand.setBarcode(barcode);
-//                    if (ioType != 110 && ioType != 10) {
-//                        List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkNo));
-//                        if (!wrkDetls.isEmpty()) {
-//                            wrkDetls.forEach(wrkDetl -> {
-//                                double remainNum = wrkDetl.getStock() - wrkDetl.getAnfme();//鍓╀綑鏁伴噺
-//                                if (remainNum < 0) {
-//                                    remainNum = 0;
-//                                }
-//                                String matnr = wrkDetl.getMatnr();
-//                                Mat mat = matService.selectByMatnr(wrkDetl.getMatnr());
-//                                if (mat != null) {
-//                                    if (!mat.getMatnr().equals(mat.getMatnr2())) {
-//                                        matnr += " - " + mat.getMatnr2();
-//                                    }
-//                                }
-//                                ledCommand.getMatDtos().add(new MatDto(matnr, wrkDetl.getMaktx(), wrkDetl.getAnfme(), remainNum, wrkDetl.getSpecs(), wrkDetl.getSuppCode(), wrkDetl.getOrderNo()));
-//                            });
-//                        }else {
-//                            List<WrkDetlLog> wrkDetlLogs = wrkDetlLogService.selectLatestByWorkNo(wrkNo, barcode);
-//                            for (WrkDetlLog wrkDetlLog : wrkDetlLogs) {
-//                                double remainNum = wrkDetlLog.getStock() - wrkDetlLog.getAnfme();//鍓╀綑鏁伴噺
-//                                if (remainNum < 0) {
-//                                    remainNum = 0;
-//                                }
-//                                String matnr = wrkDetlLog.getMatnr();
-//                                Mat mat = matService.selectByMatnr(wrkDetlLog.getMatnr());
-//                                if (mat != null) {
-//                                    if (!mat.getMatnr().equals(mat.getMatnr2())) {
-//                                        matnr += " - " + mat.getMatnr2();
-//                                    }
-//                                }
-//                                ledCommand.getMatDtos().add(new MatDto(matnr, wrkDetlLog.getMaktx(), wrkDetlLog.getAnfme(), remainNum, wrkDetlLog.getSpecs(), wrkDetlLog.getSuppCode()));
-//                            }
-//                        }
-//                    commands.add(ledCommand);
-//                }
-//                Set<Integer> workNos = null;
-//                if (!wrkMasts.isEmpty()) {
-//                    workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet());
-//                }else {
-//                    workNos = wrkMastLogs.stream().map(WrkMastLog::getWrkNo).collect(Collectors.toSet());
-//                }
-//                // 鑾峰彇LED绾跨▼
-//                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
-//                // 鐩稿悓宸ヤ綔鍙烽泦鍚堝垯杩囨护
-//                if (CollectionUtils.equals(ledThread.getWorkNos(), workNos)) {
-//                    continue;
-//                }
-//                // 鍛戒护涓嬪彂 -------------------------------------------------------------------------------
-//                if (!commands.isEmpty()) {
-//                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(1, commands))) {
-//                        log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-//                        continue;
-//                    } else {
-//                        ledThread.setLedMk(false);
-//                    }
-//                }
-//
-//                try {
-//                    // 淇敼涓绘。led鏍囪
-//                    for (WrkMast wrkMast : wrkMasts) {
-//                        wrkMast.setOveMk("Y");
-//                        wrkMast.setModiTime(new Date());
-//                        if (wrkMastMapper.updateById(wrkMast) == 0) {
-//                            throw new CoolException("鏇存柊宸ヤ綔妗eけ璐�");
-//                        }
-//                    }
-//
-//                    // 鏇存柊绾跨▼褰撳墠宸ヤ綔鍙烽泦鍚�
-//                    ledThread.setWorkNos(workNos);
-//
-//                } catch (Exception e) {
-//                    e.printStackTrace();
-//                    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
-//                }
-//
-//            }
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-    }
-
-    /**
-     * 鍏朵粬  ===>> LED鏄剧ず鍣ㄥ浣嶏紝鏄剧ず榛樿淇℃伅
-     */
-    public void ledReset() {
-//        try {
-//            for (LedSlave led : slaveProperties.getLed()) {
-//                // 鑾峰彇杈撻�佺嚎plc绾跨▼
-//                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId());
-//                // 鍛戒护闆嗗悎
-//                boolean reset = true;
-//                for (Integer staNo : led.getStaArr()) {
-//                    // 鑾峰彇鍙夎溅绔欑偣
-//                    StaProtocol staProtocol = devpThread.getStation().get(staNo);
-//                    if (staProtocol == null) {
-//                        continue;
-//                    }
-//                    if (staProtocol.isLoading()) {
-//                        reset = false;
-//                        break;
-//                    }
-//                }
-//                // 鑾峰彇led绾跨▼
-//                LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId());
-//                // led鏄剧ず榛樿鍐呭
-//                if (reset) {
-//                    ledThread.setLedMk(true);
-//                    if (!MessageQueue.offer(SlaveType.Led, led.getId(), new Task(2, new ArrayList<>()))) {
-//                        log.error("{}鍙稬ED鍛戒护涓嬪彂澶辫触锛侊紒锛乕ip锛歿}] [port锛歿}]", led.getId(), led.getIp(), led.getPort());
-//                    }
-//                }
-//            }
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-    }
-
-    /**
      * 鍥涘悜绌挎杞︾數閲忔娴� ===>> 鍙戣捣鍏呯數
      */
     public synchronized void loopShuttleCharge() {
@@ -1982,6 +1895,8 @@
 
             //涓嬪彂浠诲姟
             shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+
+            notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_POWER_START);//瑙﹀彂閫氱煡
             return false;
         }
         return true;
@@ -2071,6 +1986,11 @@
                     continue;
                 }
 
+                boolean updateShuttleLocation = this.shuttleMoveExecuteStepUpdateShuttleLocation(wrkMast);//鎻愬崌鏈烘惉杩愬畬鎴愭洿鏂板皬杞﹀潗鏍�
+                if (!updateShuttleLocation) {
+                    continue;
+                }
+
                 boolean stepMoveLoc = this.shuttleMoveExecuteStepMoveLoc(wrkMast);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑
                 if (!stepMoveLoc) {
                     continue;
@@ -2133,6 +2053,24 @@
                 return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
             }
 
+            //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�***************
+            List<NavigateNode> targetNodes = ForkLiftUtils.getLiftStaNodes(wrkMast.getStaNo());
+            if (targetNodes == null) {
+                return false;//鏈幏鍙栧埌鑺傜偣
+            }
+            boolean checkPathIsAvailable = navigateUtils.checkPathIsAvailable(targetNodes, shuttleProtocol.getShuttleNo(), Utils.getLev(wrkMast.getLocNo()));
+            if (!checkPathIsAvailable) {
+                News.info("{}浠诲姟锛寋}灏忚溅锛岀洰鏍囩珯鐐硅矾寰勮鍗犵敤锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;//妫�娴嬬洰鏍囩珯鐐硅矾寰勬槸鍚︽湭琚崰鐢�
+            }
+            //灏濊瘯閿佸畾鐩爣绔欒矾寰�
+            boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo(), targetNodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+            if (!result2) {
+                News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勯攣瀹氬け璐ワ紝绂佹娲惧彂", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;//璺緞閿佸畾澶辫触
+            }
+            //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�***************
+
             ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
             assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
             assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟
@@ -2143,36 +2081,24 @@
             List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
             if (commands == null) {
                 News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+
+                //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+                navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo(), targetNodes, false);
                 return false;//璺緞瑙i攣澶辫触
             }
 
             assignCommand.setCommands(commands);
 
-//            //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�***************
-//            List<NavigateNode> targetNodes = ForkLiftUtils.getLiftStaNodes(wrkMast.getStaNo());
-//            if (targetNodes == null) {
-//                return false;//鏈幏鍙栧埌鑺傜偣
-//            }
-//            boolean checkPathIsAvailable = navigateUtils.checkPathIsAvailable(targetNodes, shuttleProtocol.getShuttleNo(), Utils.getLev(wrkMast.getLocNo()));
-//            if (!checkPathIsAvailable) {
-//                News.info("{}浠诲姟锛寋}灏忚溅锛岀洰鏍囩珯鐐硅矾寰勮鍗犵敤锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-//                return false;//妫�娴嬬洰鏍囩珯鐐硅矾寰勬槸鍚︽湭琚崰鐢�
-//            }
-//            //灏濊瘯閿佸畾鐩爣绔欒矾寰�
-//            boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(wrkMast.getLocNo()), shuttleProtocol.getShuttleNo(), targetNodes, true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
-//            if (!result2) {
-//                News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勯攣瀹氬け璐ワ紝绂佹娲惧彂", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-//                return false;//璺緞閿佸畾澶辫触
-//            }
-//            //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�***************
-
             wrkMast.setWrkSts(WrkStsType.MOVE_SITE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓�  301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐�
             wrkMast.setModiTime(now);
             wrkMast.setLiftNo(liftSta.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈�
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
 //            shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗�
             if (wrkMastService.updateById(wrkMast)) {
                 //涓嬪彂浠诲姟
                 shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+                //瑙﹀彂閫氱煡
+                notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_MOVING);
                 return false;
             }
             return false;
@@ -2221,6 +2147,10 @@
                 return false;//缂哄皯绔欑偣淇℃伅
             }
 
+            if (liftSta.getHasTray()) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo());
+                return false;//鏈夋墭鐩樿烦杩�
+            }
 
             //鑾峰彇鎻愬崌鏈哄懡浠�
             List<ForkLiftCommand> liftCommands = forkLiftThread.getShuttleSwitchCommand(wrkMast.getWrkNo(), sourceLiftSta.getLev(), liftSta.getLev());
@@ -2235,10 +2165,65 @@
             assignCommand.setTaskMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id.shortValue());
 
             wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑  303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
             wrkMast.setModiTime(now);
             if (wrkMastService.updateById(wrkMast)) {
                 //涓嬪彂浠诲姟
                 forkLiftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
+            }
+        }
+        return true;
+    }
+
+    /**
+     * 灏忚溅杩佺Щ-鎻愬崌鏈烘惉杩愬畬鎴愭洿鏂板皬杞﹀潗鏍�
+     * 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
+     * ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
+     */
+    private boolean shuttleMoveExecuteStepUpdateShuttleLocation(WrkMast wrkMast) {
+        //--------------------------------------鎻愬崌鏈烘惉杩愪腑-----------------------------------------//
+        Date now = new Date();
+
+        //鎻愬崌鏈烘惉杩愪腑  307.鎻愬崌鏈烘惉杩愬畬鎴� ==> 308.灏忚溅杩佸嚭鎻愬崌鏈轰腑
+        if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts) {
+            //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            if (shuttleThread == null) {
+                return false;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                return false;
+            }
+
+            //灏忚溅澶勪簬绌洪棽鐘舵��
+            if (!shuttleThread.isIdle()) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;
+            }
+
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.UPDATE_LOCATION.id);//鏇存柊鍧愭爣
+            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+            assignCommand.setAuto(true);//鑷姩妯″紡
+            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�
+            assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅
+
+            //鏇存柊灏忚溅鍧愭爣
+            ShuttleCommand command = shuttleThread.getUpdateLocationCommand(wrkMast.getWrkNo(), wrkMast.getLocNo());
+            ArrayList<ShuttleCommand> commands = new ArrayList<>();
+            commands.add(command);
+
+            assignCommand.setCommands(commands);
+
+            wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT.sts);//灏忚溅杩佸嚭鎻愬崌鏈轰腑
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+            wrkMast.setModiTime(now);
+
+            if (wrkMastService.updateById(wrkMast)) {
+                //涓嬪彂浠诲姟
+                shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
             }
         }
         return true;
@@ -2292,51 +2277,33 @@
             List<ShuttleCommand> commands = null;
             //璺ㄦゼ灞傜Щ鍔ㄤ换鍔�
             if (Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
-//                //闇�瑕佸皢鍓嶄袱涓妭鐐逛綔涓虹櫧鍚嶅崟鑺傜偣浼犲叆
-//                //鑾峰彇鐩爣绔�
-//                LiftStaProtocol liftSta = NyLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
-//                if (liftSta == null) {
-//                    return false;//鎵句笉鍒扮珯鐐�
-//                }
-//
-//                List<NavigateNode> targetNodes = NyLiftUtils.getLiftStaNodes(liftSta.getStaNo());
-//                if (targetNodes == null) {
-//                    return false;//鏈幏鍙栧埌鑺傜偣
-//                }
-//
-//                //璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
-//                ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
-//                for (NavigateNode node : targetNodes) {
-//                    whiteList.add(new int[]{node.getX(), node.getY()});
-//                }
-//                commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread, whiteList);
+                //闇�瑕佸皢鍓嶄袱涓妭鐐逛綔涓虹櫧鍚嶅崟鑺傜偣浼犲叆
+                List<NavigateNode> targetNodes = ForkLiftUtils.getLiftStaNodes(wrkMast.getStaNo());
+                if (targetNodes == null) {
+                    return false;//鏈幏鍙栧埌鑺傜偣
+                }
+
+                //璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
+                ArrayList<int[]> whiteList = new ArrayList<>();//璁剧疆璁$畻鑺傜偣鐨勭櫧鍚嶅崟
+                for (NavigateNode node : targetNodes) {
+                    whiteList.add(new int[]{node.getX(), node.getY()});
+                }
+                commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, whiteList, assignCommand, shuttleThread);
             }else {
                 //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠�
                 commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
             }
 
             if (commands == null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                 return false;//璺緞璁$畻澶辫触
             }
 
             assignCommand.setCommands(commands);
 
-//            if (wrkMast.getLiftNo() != null) {
-//                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.getToken().equals(shuttleProtocol.getShuttleNo())) {
-//                    liftProtocol.setToken(0);//閲婃斁鎻愬崌鏈轰护鐗�
-//                }
-//            }
-
             wrkMast.setWrkSts(WrkStsType.MOVE_SHUTTLE.sts);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑  309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓�
             wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
+            wrkMast.setSystemMsg("");//娓呯┖娑堟伅
             wrkMast.setModiTime(now);
 
             if (wrkMastService.updateById(wrkMast)) {
@@ -2346,41 +2313,5 @@
         }
         return true;
     }
-
-//    //鎵弿璁惧PakMk鏍囪鏄惁瓒呮椂
-//    public synchronized void scanDevicePakMk() {
-//        try {
-//            //鎵弿灏忚溅
-//            for (ShuttleSlave slave : slaveProperties.getShuttle()) {
-//                NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId());
-//                NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-//                if (shuttleProtocol == null) {
-//                    continue;
-//                }
-//
-//                if ((System.currentTimeMillis() - shuttleProtocol.getSendTime() > (1000 * 60 * 5)) && shuttleProtocol.getPakMk()) {
-//                    //璁惧瓒呰繃5鍒嗛挓杩樻病澶嶄綅鏍囪
-//                    shuttleProtocol.setPakMk(false);//澶嶄綅鏍囪
-//                }
-//            }
-//
-//            //鎵弿鎻愬崌鏈�
-//            for (LiftSlave slave : slaveProperties.getLift()) {
-//                LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, slave.getId());
-//                LiftProtocol liftProtocol = liftThread.getLiftProtocol();
-//                if (liftProtocol == null) {
-//                    continue;
-//                }
-//
-//                if ((System.currentTimeMillis() - liftProtocol.getSendTime() > (1000 * 60 * 5)) && liftProtocol.getPakMk()) {
-//                    //璁惧瓒呰繃5鍒嗛挓杩樻病澶嶄綅鏍囪
-//                    liftProtocol.setPakMk(false);//澶嶄綅鏍囪
-//                }
-//            }
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//
-//    }
 
 }

--
Gitblit v1.9.1