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 | 1414 ++++++++++++++++++++++++++++------------------------------
 1 files changed, 681 insertions(+), 733 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 360ff12..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;
@@ -55,6 +58,8 @@
     @Autowired
     private BasShuttleErrService basShuttleErrService;
     @Autowired
+    private BasLiftErrService basLiftErrService;
+    @Autowired
     private CommonService commonService;
     @Autowired
     private BasMapService basMapService;
@@ -80,6 +85,8 @@
     private ShuttleAction shuttleAction;
     @Autowired
     private ForkLiftAction forkLiftAction;
+    @Autowired
+    private NotifyUtils notifyUtils;
 
 
 //    /**
@@ -837,45 +844,60 @@
                     //灏嗕换鍔℃。鏍囪涓哄畬鎴�
                     WrkMast wrkMast = wrkMastService.selectByWorkNo(shuttleProtocol.getTaskNo());
                     if (wrkMast != null) {
-                        switch (wrkMast.getWrkSts().intValue()) {
-//                            case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚
-//                                wrkMast.setWrkSts(9L);
-//                                shuttleProtocol.setTaskNo(0);
-//                                if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
-//                                    //閲婃斁灏忚溅浠ょ墝
-//                                    shuttleProtocol.setToken(0);
-//                                }
-//                                break;
-//                            case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚
-//                                wrkMast.setWrkSts(23L);
-//                                shuttleProtocol.setTaskNo(0);
-//                                if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
-//                                    //閲婃斁灏忚溅浠ょ墝
-//                                    shuttleProtocol.setToken(0);
-//                                }
-//                                break;
-                            case 302://302.灏忚溅绉诲姩鑷崇珯鐐� ==> 303.灏忚溅绉诲姩鑷崇珯鐐瑰畬鎴�
-                                wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts);
-                                break;
-                            case 110://310.灏忚溅绉诲姩涓� ==> 311.灏忚溅绉诲姩瀹屾垚
-                                wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);
-                                shuttleThread.setTaskNo(0);
-                                break;
-                            default:
+                        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.鍏ュ簱瀹屾垚
+////                                wrkMast.setWrkSts(9L);
+////                                shuttleProtocol.setTaskNo(0);
+////                                if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
+////                                    //閲婃斁灏忚溅浠ょ墝
+////                                    shuttleProtocol.setToken(0);
+////                                }
+////                                break;
+////                            case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚
+////                                wrkMast.setWrkSts(23L);
+////                                shuttleProtocol.setTaskNo(0);
+////                                if (shuttleProtocol.getToken().equals(wrkMast.getWrkNo())) {
+////                                    //閲婃斁灏忚溅浠ょ墝
+////                                    shuttleProtocol.setToken(0);
+////                                }
+////                                break;
+//                            case 302:
+//                                wrkMast.setWrkSts(WrkStsType.MOVE_SITE_COMPLETE.sts);
+//                                break;
+//                            case WrkStsType.MOVE_SHUTTLE.sts:
+//                                wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);
+//                                shuttleThread.setSyncTaskNo(0);
+//                                break;
+//                            default:
+//                        }
 
                         if (wrkMastService.updateById(wrkMast)) {
-                            if (wrkMast.getWrkSts() == 111) {
-                                // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-                                if (wrkMastLogMapper.save(wrkMast.getWrkNo()) <= 0) {
-                                    log.info("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={0}]澶辫触", wrkMast.getWrkNo());
-                                }
-                                // 鍒犻櫎宸ヤ綔涓绘。
-                                if (!wrkMastService.deleteById(wrkMast)) {
-                                    log.info("鍒犻櫎宸ヤ綔涓绘。[workNo={0}]澶辫触", wrkMast.getWrkNo());
-                                }
-                            }
-
                             //璁剧疆鍥涘悜绌挎杞︿负绌洪棽鐘舵��
                             shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE);
                             News.info("鍥涘悜绌挎杞﹀凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅銆傚洓鍚戠┛姊溅鍙�={}", shuttleProtocol.getShuttleNo());
@@ -902,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;
     }
 
 //    /**
@@ -1272,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:
                         }
@@ -1293,221 +1409,162 @@
         }
     }
 
-//    /**
-//     * 寮傚父淇℃伅璁板綍
-//     */
-//    public void recErr() {
-//        try {
-//            this.recShuttleErr();
-//            this.recLiftErr();
-//        } catch (Exception e) {
-//            News.error("recErr fail", e);
-//        }
-//    }
+    /**
+     * 寮傚父淇℃伅璁板綍
+     */
+    public void recErr() {
+        try {
+            this.recShuttleErr();
+            this.recLiftErr();
+        } catch (Exception e) {
+            News.error("recErr fail", e);
+        }
+    }
 
-//    /**
-//     * 鍥涘悜绌挎杞﹀紓甯镐俊鎭褰�
-//     */
-//    private void recShuttleErr() {
-//        Date now = new Date();
-//        for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
-//            // 鑾峰彇鍥涘悜绌挎杞︿俊鎭�
-//            NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId());
-//            if (shuttleThread == null) {
-//                continue;
-//            }
-//            NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-//            if (shuttleProtocol == null) {
-//                continue;
-//            }
-//
-//            if (shuttleProtocol.getTaskNo() != 0) {
-//                //鏈変换鍔�
-//                BasShuttleErrLog latest = basShuttleErrLogService.findLatestByTaskNo(shuttleSlave.getId(), shuttleProtocol.getTaskNo());
-//                // 鏈夊紓甯�
-//                if (latest == null) {
-//                    if (shuttleProtocol.getErrState() != null && shuttleProtocol.getErrState() == 1) {
-//                        WrkMast wrkMast = wrkMastMapper.selectById(shuttleProtocol.getTaskNo());
-//                        if (wrkMast == null) {
-//                            continue;
-//                        }
-//                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getErrCode());
-//                        String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
-//                        BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
-//                                null,    // 缂栧彿
-//                                wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
-//                                now,    // 鍙戠敓鏃堕棿
-//                                null,    // 缁撴潫鏃堕棿
-//                                wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
-//                                wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
-//                                shuttleSlave.getId(),    // 鍥涘悜绌挎杞�
-//                                null,    // plc
-//                                wrkMast.getLocNo(),    // 鐩爣搴撲綅
-//                                wrkMast.getStaNo(),    // 鐩爣绔�
-//                                wrkMast.getSourceStaNo(),    // 婧愮珯
-//                                wrkMast.getSourceLocNo(),    // 婧愬簱浣�
-//                                wrkMast.getBarcode(),    // 鏉$爜
-//                                shuttleProtocol.getErrCode(),    // 寮傚父鐮�
-//                                errName,    // 寮傚父
-//                                1,    // 寮傚父鎯呭喌
-//                                now,    // 娣诲姞鏃堕棿
-//                                null,    // 娣诲姞浜哄憳
-//                                now,    // 淇敼鏃堕棿
-//                                null,    // 淇敼浜哄憳
-//                                "浠诲姟涓紓甯�",    // 澶囨敞
-//                                JSON.toJSONString(shuttleProtocol)    // 绯荤粺鐘舵�佹暟鎹�
-//                        );
-//                        if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
-//                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
-//                        }
-//                    }
-//                } else {
-//                    // 寮傚父淇
-//                    if (shuttleProtocol.getErrState() == null || shuttleProtocol.getErrState() == 0) {
-//                        latest.setEndTime(now);
-//                        latest.setUpdateTime(now);
-//                        latest.setStatus(2);
-//                        if (!basShuttleErrLogService.updateById(latest)) {
-//                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId());
-//                        }
-//                    }
-//                }
-//            }else {
-////                //鏃犱换鍔�
-////                BasShuttleErrLog latest = basShuttleErrLogService.findLatest(shuttleSlave.getId());
-////                // 鏈夊紓甯�
-////                if (shuttleProtocol.getStatusErrorCode() != null && shuttleProtocol.getStatusErrorCode() > 0) {
-////                    // 璁板綍鏂板紓甯�
-////                    if (latest == null || (latest.getErrCode() != shuttleProtocol.getStatusErrorCode().intValue())) {
-////                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getStatusErrorCode().intValue());
-////                        String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
-////                        BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
-////                                null,    // 缂栧彿
-////                                null,    // 宸ヤ綔鍙�
-////                                now,    // 鍙戠敓鏃堕棿
-////                                null,    // 缁撴潫鏃堕棿
-////                                null,    // 宸ヤ綔鐘舵��
-////                                null,    // 鍏ュ嚭搴撶被鍨�
-////                                shuttleSlave.getId(),    // 鍥涘悜绌挎杞�
-////                                null,    // plc
-////                                null,    // 鐩爣搴撲綅
-////                                null,    // 鐩爣绔�
-////                                null,    // 婧愮珯
-////                                null,    // 婧愬簱浣�
-////                                null,    // 鏉$爜
-////                                (int)shuttleProtocol.getStatusErrorCode(),    // 寮傚父鐮�
-////                                errName,    // 寮傚父
-////                                1,    // 寮傚父鎯呭喌
-////                                now,    // 娣诲姞鏃堕棿
-////                                null,    // 娣诲姞浜哄憳
-////                                now,    // 淇敼鏃堕棿
-////                                null,    // 淇敼浜哄憳
-////                                "鏃犱换鍔″紓甯�"    // 澶囨敞
-////                        );
-////                        if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
-////                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
-////                        }
-////                    }
-////                    // 鏃犲紓甯�
-////                } else {
-////                    // 寮傚父淇
-////                    if (latest != null && latest.getStatus() == 1) {
-////                        latest.setEndTime(now);
-////                        latest.setUpdateTime(now);
-////                        latest.setStatus(2);
-////                        if (!basShuttleErrLogService.updateById(latest)) {
-////                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId());
-////                        }
-////                    }
-////                }
-//            }
-//        }
-//    }
-//
-//    /**
-//     * 鎻愬崌鏈哄紓甯镐俊鎭褰�
-//     */
-//    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());
-//                        }
-//                    }
-//                }
-//            }
-//        }
-//    }
+    /**
+     * 鍥涘悜绌挎杞﹀紓甯镐俊鎭褰�
+     */
+    private void recShuttleErr() {
+        Date now = new Date();
+        for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
+            // 鑾峰彇鍥涘悜绌挎杞︿俊鎭�
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId());
+            if (shuttleThread == null) {
+                continue;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                continue;
+            }
+
+            if (shuttleProtocol.getTaskNo() != 0) {
+                //鏈変换鍔�
+                BasShuttleErrLog latest = basShuttleErrLogService.findLatestByTaskNo(shuttleSlave.getId(), shuttleProtocol.getTaskNo());
+                // 鏈夊紓甯�
+                if (latest == null) {
+                    if (shuttleProtocol.getErrorCode() != null && Integer.parseInt(shuttleProtocol.getErrorCode()) != 0) {
+                        WrkMast wrkMast = wrkMastService.selectByWorkNo(shuttleProtocol.getTaskNo());
+                        if (wrkMast == null) {
+                            continue;
+                        }
+                        int errorCode = Integer.parseInt(shuttleProtocol.getErrorCode());
+                        BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(errorCode);
+                        String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
+                        BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
+                                null,    // 缂栧彿
+                                wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
+                                now,    // 鍙戠敓鏃堕棿
+                                null,    // 缁撴潫鏃堕棿
+                                wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
+                                wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
+                                shuttleSlave.getId(),    // 鍥涘悜绌挎杞�
+                                null,    // plc
+                                wrkMast.getLocNo(),    // 鐩爣搴撲綅
+                                wrkMast.getStaNo(),    // 鐩爣绔�
+                                wrkMast.getSourceStaNo(),    // 婧愮珯
+                                wrkMast.getSourceLocNo(),    // 婧愬簱浣�
+                                wrkMast.getBarcode(),    // 鏉$爜
+                                errorCode,    // 寮傚父鐮�
+                                errName,    // 寮傚父
+                                1,    // 寮傚父鎯呭喌
+                                now,    // 娣诲姞鏃堕棿
+                                null,    // 娣诲姞浜哄憳
+                                now,    // 淇敼鏃堕棿
+                                null,    // 淇敼浜哄憳
+                                "浠诲姟涓紓甯�",    // 澶囨敞
+                                JSON.toJSONString(shuttleProtocol)    // 绯荤粺鐘舵�佹暟鎹�
+                        );
+                        if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
+                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
+                        }
+                    }
+                } else {
+                    // 寮傚父淇
+                    if (shuttleProtocol.getErrorCode() == null || Integer.parseInt(shuttleProtocol.getErrorCode()) == 0) {
+                        latest.setEndTime(now);
+                        latest.setUpdateTime(now);
+                        latest.setStatus(2);
+                        if (!basShuttleErrLogService.updateById(latest)) {
+                            News.error("鍥涘悜绌挎杞lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", shuttleSlave.getId(), latest.getId());
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * 鎻愬崌鏈哄紓甯镐俊鎭褰�
+     */
+    private void recLiftErr() {
+        Date now = new Date();
+        for (ForkLiftSlave forkLiftSlave : slaveProperties.getForkLift()) {
+            // 鑾峰彇鎻愬崌鏈轰俊鎭�
+            ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, forkLiftSlave.getId());
+            if (forkLiftThread == null) {
+                continue;
+            }
+            ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
+            if (forkLiftProtocol == null) {
+                continue;
+            }
+
+            if (forkLiftProtocol.getTaskNo() != 0) {
+                //鏈変换鍔�
+                BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(forkLiftSlave.getId(), forkLiftProtocol.getTaskNo());
+                // 鏈夊紓甯�
+                if (latest == null) {
+                    if (forkLiftProtocol.getErrorCode() != null && forkLiftProtocol.getErrorCode() != 0) {
+                        WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo());
+                        if (wrkMast == null) {
+                            continue;
+                        }
+
+                        BasLiftErr basLiftErr = basLiftErrService.queryByCode(forkLiftProtocol.getErrorCode());
+                        String errName = basLiftErr==null? "鏈煡寮傚父":basLiftErr.getErrName();
+
+                        BasLiftErrLog basLiftErrLog = new BasLiftErrLog(
+                                null,    // 缂栧彿
+                                wrkMast.getWrkNo(),    // 宸ヤ綔鍙�
+                                now,    // 鍙戠敓鏃堕棿
+                                null,    // 缁撴潫鏃堕棿
+                                wrkMast.getWrkSts(),    // 宸ヤ綔鐘舵��
+                                wrkMast.getIoType(),    // 鍏ュ嚭搴撶被鍨�
+                                forkLiftSlave.getId(),    // 鎻愬崌鏈�
+                                null,    // plc
+                                wrkMast.getLocNo(),    // 鐩爣搴撲綅
+                                wrkMast.getStaNo(),    // 鐩爣绔�
+                                wrkMast.getSourceStaNo(),    // 婧愮珯
+                                wrkMast.getSourceLocNo(),    // 婧愬簱浣�
+                                wrkMast.getBarcode(),    // 鏉$爜
+                                null,    // 寮傚父鐮�
+                                errName,    // 寮傚父
+                                1,    // 寮傚父鎯呭喌
+                                now,    // 娣诲姞鏃堕棿
+                                null,    // 娣诲姞浜哄憳
+                                now,    // 淇敼鏃堕棿
+                                null,    // 淇敼浜哄憳
+                                "浠诲姟涓紓甯�",    // 澶囨敞
+                                JSON.toJSONString(forkLiftProtocol)    // 绯荤粺鐘舵�佹暟鎹�
+                        );
+                        if (!basLiftErrLogService.insert(basLiftErrLog)) {
+                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", forkLiftSlave.getId(), errName);
+                        }
+                    }
+                } else {
+                    // 寮傚父淇
+                    if (forkLiftProtocol.getErrorCode() == null || forkLiftProtocol.getErrorCode() == 0) {
+                        latest.setEndTime(now);
+                        latest.setUpdateTime(now);
+                        latest.setStatus(2);
+                        if (!basLiftErrLogService.updateById(latest)) {
+                            News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", forkLiftSlave.getId(), latest.getId());
+                        }
+                    }
+                }
+            }
+        }
+    }
 
     // -------------------------------------------------------------------------------
 
@@ -1611,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() {
@@ -1835,58 +1692,59 @@
 
                 //灏忚溅鎵�鍦ㄦゼ灞�
                 int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());
-//                ShuttleChargeType shuttleCharge = null;
-//
-//                //鎼滅储灏忚溅鎵�鍦ㄦゼ灞傛湁娌℃湁鍏呯數妗�
-//                for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
-//                    if (lev != Utils.getLev(chargeType.locNo)) {
-//                        continue;//灏忚溅鍜屽厖鐢垫々涓嶅湪鍚屼竴灞�
-//                    }
-//
-//                    //灏忚溅鍜屽厖鐢垫々鍦ㄥ悓涓�灞�
-//                    if (wrkChargeService.selectWorkingOfCharge(chargeType.id) == null) {
-//                        shuttleCharge = chargeType;
-//                        break;
-//                    }
-//                }
-//
-//                if (shuttleCharge == null) {
-//                    //鍚屾ゼ灞傛病鏈夋壘鍒板厖鐢垫々锛屾壘鍙敤鍏呯數妗�
-//                    //灏忚溅鍚屾ゼ灞傛病鏈夊厖鐢垫々锛屽彧瑕佸厖鐢垫々鍙敤灏辩敓鎴愬厖鐢典换鍔�
-//                    for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
-//                        if (wrkChargeService.selectWorkingOfCharge(chargeType.id) == null) {
-//                            //鍒ゆ柇褰撳墠鍏呯數妗╂ゼ灞傛槸鍚︽湁灏忚溅锛屽鏈夊皬杞︼紝涓嶅垎閰嶈鍏呯數妗�
-//                            int chargeLev = Utils.getLev(chargeType.locNo);//鍏呯數妗╂ゼ灞�
-//                            boolean checkLevHasShuttle = Utils.checkLevHasShuttle(chargeLev);//妫�娴嬫ゼ灞傛槸鍚︽湁绌挎杞�
-//                            if (checkLevHasShuttle) {
-//                                //褰撳墠鍏呯數妗╂ゼ灞傛湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗�
-//                                continue;
-//                            }
-//
-//                            shuttleCharge = chargeType;
-//                            break;
-//                        }
-//                    }
-//                }
-//
-//                if (shuttleCharge == null) {
-//                    continue;
-//                }
-//
-//                String chargeLocNo = shuttleCharge.locNo;
-//                wrkCharge = new WrkCharge();
-//                wrkCharge.setShuttleNo(shuttle.getId());
-//                wrkCharge.setCharge(shuttleCharge.id);
-//                wrkCharge.setWrkNo(commonService.getChargeWorkNo(4));
-//                wrkCharge.setWrkSts(51L);   // 51.鍑嗗鍏呯數
-//                wrkCharge.setIoPri((double) 10);
-//                wrkCharge.setLocNo(chargeLocNo);
-//                wrkCharge.setMemo("charge");
-//                wrkCharge.setAppeTime(new Date());
-//                if (!wrkChargeService.insert(wrkCharge)) {
-//                    News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", shuttle.getId());
-//                    continue;
-//                }
+                ShuttleChargeType shuttleCharge = null;
+
+                //鎼滅储灏忚溅鎵�鍦ㄦゼ灞傛湁娌℃湁鍏呯數妗�
+                for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
+                    if (lev != Utils.getLev(chargeType.locNo)) {
+                        continue;//灏忚溅鍜屽厖鐢垫々涓嶅湪鍚屼竴灞�
+                    }
+
+                    //灏忚溅鍜屽厖鐢垫々鍦ㄥ悓涓�灞�
+                    if (wrkMastService.selectChargeWorkingByChargeSta(chargeType.id) == null) {
+                        shuttleCharge = chargeType;
+                        break;
+                    }
+                }
+
+                if (shuttleCharge == null) {
+                    //鍚屾ゼ灞傛病鏈夋壘鍒板厖鐢垫々锛屾壘鍙敤鍏呯數妗�
+                    //灏忚溅鍚屾ゼ灞傛病鏈夊厖鐢垫々锛屽彧瑕佸厖鐢垫々鍙敤灏辩敓鎴愬厖鐢典换鍔�
+                    for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
+                        if (wrkMastService.selectChargeWorkingByChargeSta(chargeType.id) == null) {
+                            //鍒ゆ柇褰撳墠鍏呯數妗╂ゼ灞傛槸鍚︽湁灏忚溅锛屽鏈夊皬杞︼紝涓嶅垎閰嶈鍏呯數妗�
+                            int chargeLev = Utils.getLev(chargeType.locNo);//鍏呯數妗╂ゼ灞�
+                            boolean checkLevHasShuttle = Utils.checkLevHasShuttle(chargeLev);//妫�娴嬫ゼ灞傛槸鍚︽湁绌挎杞�
+                            if (checkLevHasShuttle) {
+                                //褰撳墠鍏呯數妗╂ゼ灞傛湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗�
+                                continue;
+                            }
+
+                            shuttleCharge = chargeType;
+                            break;
+                        }
+                    }
+                }
+
+                if (shuttleCharge == null) {
+                    continue;
+                }
+
+                String chargeLocNo = shuttleCharge.locNo;
+                wrkMast = new WrkMast();
+                wrkMast.setMk(String.valueOf(shuttleCharge.id));
+                wrkMast.setWrkNo(commonService.getWorkNo(WrkIoType.SHUTTLE_CHARGE.id));
+                wrkMast.setWrkSts(WrkStsType.NEW_CHARGE.sts);
+                wrkMast.setIoType(WrkIoType.SHUTTLE_CHARGE.id);//300.鍏呯數
+                wrkMast.setIoPri((double) 999);
+                wrkMast.setLocNo(chargeLocNo);
+                wrkMast.setShuttleNo(shuttle.getId());
+                wrkMast.setMemo("charge");
+                wrkMast.setAppeTime(new Date());
+                if (!wrkMastService.insert(wrkMast)) {
+                    News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", shuttle.getId());
+                    continue;
+                }
 
                 News.info("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟鎴愬姛!!!", shuttle.getId());
             }
@@ -1895,135 +1753,220 @@
         }
     }
 
-//    /**
-//     * 鎵ц鍥涘悜绌挎杞﹀厖鐢典换鍔�
-//     */
-//    public synchronized void executeShuttleCharge() {
-//        try {
-//            for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
-//                WrkCharge wrkCharge = wrkChargeService.selectWorking(shuttle.getId());
-//                if (wrkCharge == null) {
-//                    continue;
-//                }
-//
-//                NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkCharge.getShuttleNo());
-//                if (shuttleThread == null) {
-//                    continue;
-//                }
-//                NyShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
-//                if (shuttleProtocol == null) {
-//                    continue;
-//                }
-//
-//                if (wrkCharge.getWrkSts() == 51) {
-//                    if (!shuttleProtocol.isIdleNoCharge()) {
-//                        continue;
-//                    }
-//
-//                    if (shuttleProtocol.getSuspendState() == 1) {
-//                        continue;//绠″埗涓�
-//                    }
-//
-//                    if (!shuttleProtocol.getCurrentLocNo().equals(wrkCharge.getLocNo())) {
-//                        //灏忚溅涓嶅湪鍏呯數妗╀綅缃�
-//                        shuttleDispatchUtils.dispatchShuttle(wrkCharge.getWrkNo(), wrkCharge.getLocNo(), shuttle.getId());//璋冨害灏忚溅鍘诲厖鐢垫々
-//                        continue;
-//                    }
-//
-//                    //灏忚溅宸茬粡鍦ㄥ厖鐢垫々浣嶇疆锛屼笅鍙戝厖鐢靛懡浠�
-//                    NyShuttleHttpCommand chargeCommand = NyHttpUtils.getChargeCommand(shuttle.getId(), wrkCharge.getWrkNo(), true);
-//                    ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>();
-//                    commands.add(chargeCommand);
-//                    //鍒涘缓鍒嗛厤鍛戒护
-//                    ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-//                    assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-//                    assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());//浠诲姟鍙�
-//                    assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//鍑哄簱妯″紡
-//                    assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-//                    assignCommand.setCommands(commands);//杩愯鍛戒护
-//
-//                    wrkCharge.setWrkSts(52L);//51.鐢熸垚鍏呯數浠诲姟 => 52.灏忚溅鍘诲厖鐢典腑
-//                    wrkCharge.setModiTime(new Date());
-//                    if (wrkChargeMapper.updateById(wrkCharge) > 0) {
-//                        //涓嬪彂浠诲姟
-//                        MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-//                    }
-//                } else if (wrkCharge.getWrkSts() == 52) {
-//                    //妫�娴嬪皬杞︽槸鍚︽弧鐢�
-//
-//                    //鑾峰彇婊$數闃堝��
-//                    int maxPower = 95;
-//                    EntityWrapper<Config> wrapper = new EntityWrapper<>();
-//                    wrapper.eq("code", "chargeMaxValue");
-//                    Config config = configService.selectOne(wrapper);
-//                    if (config != null) {
-//                        maxPower = Integer.parseInt(config.getValue());
-//                    }
-//
-//                    if (shuttleProtocol.getPowerPercent() < maxPower) {
-//                        continue;
-//                    }
-//
-//                    //***************鍒ゆ柇鏄惁婊″厖鏍″噯***************
-//                    EntityWrapper<Config> wrapper1 = new EntityWrapper<>();
-//                    wrapper.eq("code", "shuttleMaxPowerVerify");
-//                    Config config1 = configService.selectOne(wrapper1);
-//                    if (config1 != null) {
-//                        if (config1.getValue().equals("true")) {
-//                            if (shuttleProtocol.getVoltage() < 5630) {
-//                                continue;//鐢靛帇涓嶅缁х画鍏呯數
-//                            }
-//                        }
-//                    }
-//                    //***************鍒ゆ柇鏄惁婊″厖鏍″噯***************
-//
-//                    //灏忚溅婊$數锛岀粨鏉熷厖鐢典换鍔�
-//                    NyShuttleHttpCommand chargeCommand = NyHttpUtils.getChargeCommand(shuttle.getId(), wrkCharge.getWrkNo(), false);
-//                    ArrayList<NyShuttleHttpCommand> commands = new ArrayList<>();
-//                    commands.add(chargeCommand);
-//                    //鍒涘缓鍒嗛厤鍛戒护
-//                    ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-//                    assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
-//                    assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());//浠诲姟鍙�
-//                    assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id.shortValue());//鍑哄簱妯″紡
-//                    assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
-//                    assignCommand.setCommands(commands);//杩愯鍛戒护
-//
-//                    //涓嬪彂浠诲姟
-//                    MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
-//                    try {
-//                        Thread.sleep(3000);
-//                    } catch (Exception e) {
-//                        e.printStackTrace();
-//                    }
-//
-//                    wrkCharge.setWrkSts(53L);//52.灏忚溅鍘诲厖鐢典腑 => 53.灏忚溅鍏呯數瀹屾垚
-//                    wrkCharge.setModiTime(new Date());
-//                    if (wrkChargeMapper.updateById(wrkCharge) > 0) {
-//                        shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE.id);
-//                        shuttleProtocol.setTaskNo(0);
-//                        shuttleProtocol.setPakMk(false);
-//                    }
-//                } else if (wrkCharge.getWrkSts() == 53) {
-//                    if (shuttleProtocol.getChargState() == 0) {//灏忚溅澶勪簬鏈厖鐢电姸鎬�
-//                        boolean result = Utils.searchEmptyGroupToMoveShuttle(Utils.getLev(wrkCharge.getLocNo()), shuttleThread.getSlave().getId(), shuttleThread);
-//                        if (!result) {
-//                            continue;
-//                        }
-//
-//                        wrkCharge.setWrkSts(60L);//53.灏忚溅鍏呯數瀹屾垚 => 60.鍏呯數浠诲姟瀹屾垚
-//                        wrkCharge.setModiTime(new Date());
-//                        if (wrkChargeMapper.updateById(wrkCharge) > 0) {
-//
-//                        }
-//                    }
-//                }
-//
-//            }
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//        }
-//    }
+    /**
+     * 鎵ц鍥涘悜绌挎杞﹀厖鐢典换鍔�
+     */
+    public synchronized void executeShuttleCharge() {
+        try {
+            //鏌ヨ灏忚溅鍏呯數浠诲姟
+            for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
+                WrkMast wrkMast = wrkMastService.selectChargeWorking(shuttle.getId());
+                if(wrkMast == null) {
+                    continue;
+                }
+
+                boolean result1 = this.executeShuttleChargeStepGoToChargeSta(wrkMast);//灏忚溅绛夊緟鍏呯數妗�
+                if (!result1) {
+                    continue;
+                }
+
+                boolean result2 = this.executeShuttleChargeStepArrivalChargeSta(wrkMast);//灏忚溅鍒拌揪鍏呯數妗�
+                if (!result2) {
+                    continue;
+                }
+
+                boolean result3 = this.executeShuttleChargeStepStartCharge(wrkMast);//灏忚溅寮�濮嬪厖鐢�
+                if (!result3) {
+                    continue;
+                }
+
+                boolean result4 = this.executeShuttleChargeStepStopCharge(wrkMast);//灏忚溅鍋滄鍏呯數
+                if (!result4) {
+                    continue;
+                }
+
+                boolean result5 = this.executeShuttleChargeStepLeaveCharge(wrkMast);//灏忚溅绂诲紑鍏呯數妗�
+                if (!result5) {
+                    continue;
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 灏忚溅鍓嶅線鍏呯數妗�
+     */
+    private synchronized boolean executeShuttleChargeStepGoToChargeSta(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == WrkStsType.NEW_CHARGE.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 (shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) {
+                //灏忚溅鍦ㄥ厖鐢垫々浣嶇疆
+                wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts);
+                wrkMast.setModiTime(new Date());
+                wrkMastService.updateById(wrkMast);
+                return false;
+            }
+
+            //璋冨害灏忚溅鍘诲厖鐢垫々
+            boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getLocNo(), wrkMast.getShuttleNo());
+            if (!dispatched) {
+                return false;
+            }
+
+            wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN.sts);//灏忚溅鍓嶅線鍏呯數妗�
+            wrkMast.setModiTime(new Date());
+            wrkMastService.updateById(wrkMast);
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * 灏忚溅鍒拌揪鍏呯數妗�
+     */
+    private synchronized boolean executeShuttleChargeStepArrivalChargeSta(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_RUN.sts) {
+            ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+            if (shuttleThread == null) {
+                return false;
+            }
+            ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+            if (shuttleProtocol == null) {
+                return false;
+            }
+
+            //鍒ゆ柇鏄惁瀛樺湪鏈畬鎴愮殑绉诲姩浠诲姟
+            WrkMast moveWrk = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
+            if(moveWrk != null) {
+                return false;
+            }
+
+            if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) {
+                return false;
+            }
+
+            //灏忚溅鍦ㄥ厖鐢垫々浣嶇疆
+            wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_RUN_COMPLETE.sts);//灏忚溅鍒拌揪鍏呯數妗�
+            wrkMast.setModiTime(new Date());
+            wrkMastService.updateById(wrkMast);
+
+            return false;
+        }
+        return true;
+    }
+
+    //灏忚溅寮�濮嬪厖鐢�
+    private synchronized boolean executeShuttleChargeStepStartCharge(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_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;
+            }
+
+            //灏忚溅宸茬粡鍦ㄥ厖鐢垫々浣嶇疆锛屼笅鍙戝厖鐢靛懡浠�
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id);//鍑哄簱妯″紡
+            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+
+            List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleChargeCommand(assignCommand, shuttleThread, true);
+            assignCommand.setCommands(commands);//杩愯鍛戒护
+
+            wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_WORKING.sts);
+            wrkMast.setModiTime(new Date());
+            if (!wrkMastService.updateById(wrkMast)) {
+                return false;
+            }
+
+            //涓嬪彂浠诲姟
+            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;
+    }
+
+    //灏忚溅鍋滄鍏呯數
+    private synchronized boolean executeShuttleChargeStepStopCharge(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_WORKING.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.isChargingCompleted()) {
+                return false;
+            }
+
+            //灏忚溅宸茬粡鍦ㄥ厖鐢垫々浣嶇疆锛屼笅鍙戝仠姝㈠厖鐢靛懡浠�
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
+            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.CHARGE.id);//鍑哄簱妯″紡
+            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�(灏忚溅褰撳墠浣嶇疆)
+
+            List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleChargeCommand(assignCommand, shuttleThread, false);
+            assignCommand.setCommands(commands);//杩愯鍛戒护
+
+            //涓嬪彂浠诲姟
+            shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+            return false;
+        }
+        return true;
+    }
+
+    //灏忚溅绂诲紑鍏呯數妗�
+    private synchronized boolean executeShuttleChargeStepLeaveCharge(WrkMast wrkMast) {
+        if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_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;
+            }
+
+            ShuttleChargeType chargeType = ShuttleChargeType.get(Integer.parseInt(wrkMast.getMk()));
+            if(chargeType == null) {
+                return false;
+            }
+
+            //璋冨害灏忚溅鍘诲緟鏈轰綅
+            boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), chargeType.waitLocNo, wrkMast.getShuttleNo());
+            if (!dispatched) {
+                return false;
+            }
+
+            wrkMast.setWrkSts(WrkStsType.COMPLETE_CHARGE.sts);
+            wrkMast.setModiTime(new Date());
+            if (wrkMastService.updateById(wrkMast)) {
+                return false;
+            }
+            return false;
+        }
+        return true;
+    }
 
     /**
      * 鎵ц灏忚溅绉诲簱浠诲姟
@@ -2040,6 +1983,11 @@
 
                 boolean stepLiftMove = this.shuttleMoveExecuteStepLiftMove(wrkMast);//鎻愬崌鏈烘惉杩愪腑
                 if (!stepLiftMove) {
+                    continue;
+                }
+
+                boolean updateShuttleLocation = this.shuttleMoveExecuteStepUpdateShuttleLocation(wrkMast);//鎻愬崌鏈烘惉杩愬畬鎴愭洿鏂板皬杞﹀潗鏍�
+                if (!updateShuttleLocation) {
                     continue;
                 }
 
@@ -2077,7 +2025,7 @@
 
             //灏忚溅澶勪簬绌洪棽鐘舵��
             if (!shuttleThread.isIdle()) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                 return false;
             }
 
@@ -2101,24 +2049,9 @@
             //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満)
             WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftSta.getLiftNo());
             if (liftWrkMast != null) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getLiftNo());
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getLiftNo());
                 return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
             }
-
-            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
-            assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟
-            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
-            assignCommand.setAuto(true);//鑷姩妯″紡
-
-            //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
-            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
-            if (commands == null) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
-                return false;//璺緞瑙i攣澶辫触
-            }
-
-            assignCommand.setCommands(commands);
 
             //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�***************
             List<NavigateNode> targetNodes = ForkLiftUtils.getLiftStaNodes(wrkMast.getStaNo());
@@ -2138,13 +2071,34 @@
             }
             //*************灏濊瘯閿佸畾鐩爣绔欒矾寰�***************
 
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟
+            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+            assignCommand.setAuto(true);//鑷姩妯″紡
+
+            //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
+            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);
+
             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;
@@ -2172,14 +2126,14 @@
                 return false;
             }
             if (!forkLiftThread.isIdle()) {
-                News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                 return false;
             }
             //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
             WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo());
             if (liftWrkMast != null) {
                 if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚�
-                    News.info("{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
+                    News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
                     return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
                 }
             }
@@ -2189,10 +2143,14 @@
             //鑾峰彇鐩爣绔�
             ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
             if (sourceLiftSta == null || liftSta == null) {
-                News.info("{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo());
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo());
                 return false;//缂哄皯绔欑偣淇℃伅
             }
 
+            if (liftSta.getHasTray()) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo());
+                return false;//鏈夋墭鐩樿烦杩�
+            }
 
             //鑾峰彇鎻愬崌鏈哄懡浠�
             List<ForkLiftCommand> liftCommands = forkLiftThread.getShuttleSwitchCommand(wrkMast.getWrkNo(), sourceLiftSta.getLev(), liftSta.getLev());
@@ -2207,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;
@@ -2240,7 +2253,7 @@
 
             //灏忚溅澶勪簬绌洪棽鐘舵��
             if (!shuttleThread.isIdle()) {
-                News.info("{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽皬杞﹀繖纰屼腑锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                 return false;
             }
 
@@ -2250,17 +2263,6 @@
                 wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
                 wrkMast.setModiTime(now);
                 wrkMastService.updateById(wrkMast);
-
-                if (wrkMast.getWrkSts() == WrkStsType.COMPLETE_MOVE.sts) {
-                    // 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
-                    if (wrkMastLogMapper.save(wrkMast.getWrkNo()) <= 0) {
-                        log.info("淇濆瓨宸ヤ綔鍘嗗彶妗workNo={}]澶辫触", wrkMast.getWrkNo());
-                    }
-                    // 鍒犻櫎宸ヤ綔涓绘。
-                    if (!wrkMastService.deleteById(wrkMast)) {
-                        log.info("鍒犻櫎宸ヤ綔涓绘。[workNo={}]澶辫触", wrkMast.getWrkNo());
-                    }
-                }
                 return false;
             }
 
@@ -2275,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)) {
@@ -2329,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