From b63790fa580ea78777f16bff6bc79373d675dd10 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期四, 21 八月 2025 16:50:47 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java  |  119 ---------
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java     |  164 +++---------
 src/main/java/com/zy/core/model/protocol/LiftProtocol.java      |   22 +
 src/main/java/com/zy/core/dispatcher/LiftDispatchUtils.java     |  110 +++++++++
 src/main/webapp/views/lift.html                                 |    2 
 src/main/java/com/zy/core/dispatcher/ForkLiftDispatchUtils.java |  127 ++++++++++
 src/main/java/com/zy/core/action/LiftAction.java                |   40 +++
 src/main/java/com/zy/core/enums/LiftDeviceStatusType.java       |   42 +++
 src/main/java/com/zy/core/enums/WrkIoType.java                  |    2 
 src/main/java/com/zy/core/MainProcess.java                      |   11 
 src/main/java/com/zy/asrs/service/impl/ForkMainServiceImpl.java |   30 +-
 src/main/java/com/zy/common/utils/NavigateSolution.java         |    4 
 src/main/java/com/zy/core/thread/impl/NyLiftThread.java         |   10 
 13 files changed, 416 insertions(+), 267 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/ForkMainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/ForkMainServiceImpl.java
index c69b0b5..7386072 100644
--- a/src/main/java/com/zy/asrs/service/impl/ForkMainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/ForkMainServiceImpl.java
@@ -15,11 +15,13 @@
 import com.zy.core.action.ForkLiftAction;
 import com.zy.core.action.ShuttleAction;
 import com.zy.core.cache.SlaveConnection;
+import com.zy.core.dispatcher.ForkLiftDispatchUtils;
 import com.zy.core.dispatcher.ShuttleDispatchUtils;
 import com.zy.core.enums.*;
 import com.zy.core.model.command.*;
 import com.zy.core.model.protocol.ForkLiftProtocol;
 import com.zy.core.model.protocol.ForkLiftStaProtocol;
+import com.zy.core.model.protocol.LiftStaProtocol;
 import com.zy.core.model.protocol.ShuttleProtocol;
 import com.zy.core.thread.ForkLiftThread;
 import com.zy.core.thread.ShuttleThread;
@@ -35,7 +37,6 @@
 
 /**
  * 绔嬩綋浠撳簱WCS绯荤粺涓绘祦绋嬩笟鍔�
- * Created by vincent on 2020/8/6
  */
 @Slf4j
 @Service("forkMainService")
@@ -62,8 +63,6 @@
     @Autowired
     private ConfigService configService;
     @Autowired
-    private NavigateMapUtils navigateMapUtils;
-    @Autowired
     private NavigateMapData navigateMapData;
     @Autowired
     private NavigateUtils navigateUtils;
@@ -79,6 +78,8 @@
     private BasShuttleChargeService basShuttleChargeService;
     @Autowired
     private DeviceConfigService deviceConfigService;
+    @Autowired
+    private ForkLiftDispatchUtils forkLiftDispatchUtils;
 
     /**
      * 鍒濆鍖栧疄鏃跺湴鍥�
@@ -897,7 +898,7 @@
                             News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", forkLiftProtocol.getLiftNo(), forkLiftProtocol.getWrkNo());
                         }
                     }else {
-                        boolean checkPreviewDispatchForkLift = commonService.checkWorkNoContainMk(forkLiftProtocol.getWrkNo(), WrkIoType.FORKLIFT_MOVE.id);
+                        boolean checkPreviewDispatchForkLift = commonService.checkWorkNoContainMk(forkLiftProtocol.getWrkNo(), WrkIoType.PREVIEW_LIFT_MOVE.id);
                         if (checkPreviewDispatchForkLift) {
                             //灞炰簬鎻愬崌鏈洪璋冨害绉诲姩浠诲姟
                             //鏃犲伐浣滄。鏀拺锛岀洿鎺ョ‘璁ゅ畬鎴�
@@ -1490,24 +1491,25 @@
                 return false;
             }
 
-            //鑾峰彇婧愯緭閫佺珯
-            ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
-            if (liftSta == null) {
-                return false;//鎵句笉鍒扮珯鐐�
+            //鎼滅储鏈�杩戜笖鏃犳晠闅滄彁鍗囨満
+            ForkLiftStaProtocol recentLiftStation = forkLiftDispatchUtils.getRecentLiftStation(shuttleProtocol.getShuttleNo(), Utils.getLev(wrkMast.getLocNo()));
+            if(recentLiftStation == null) {
+                News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂茶緭閫佺珯鐐�", shuttleProtocol.getShuttleNo(), wrkMast.getLocNo());
+                return false;
             }
 
-            if (liftSta.getHasTray()) {
+            if (recentLiftStation.getHasTray()) {
                 News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾簮绔欏瓨鍦ㄦ墭鐩�", wrkMast.getWrkNo());
                 return false;
             }
 
-            if (liftSta.getHasCar()) {
+            if (recentLiftStation.getHasCar()) {
                 News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾簮绔欏瓨鍦ㄥ皬杞�", wrkMast.getWrkNo());
                 return false;
             }
 
             //鑾峰彇鐩爣杈撻�佺珯
-            ForkLiftStaProtocol liftStaTarget = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
+            ForkLiftStaProtocol liftStaTarget = ForkLiftUtils.getLiftStaByLev(recentLiftStation.getLiftNo(), Utils.getLev(wrkMast.getLocNo()));
             if (liftStaTarget == null) {
                 return false;//鎵句笉鍒扮珯鐐�
             }
@@ -1529,7 +1531,7 @@
             assignCommand.setAuto(true);//鑷姩妯″紡
 
             //璁$畻杩戠偣浣嶇疆
-            String endLocation = navigateUtils.calcEndLocation(shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 1);
+            String endLocation = navigateUtils.calcEndLocation(shuttleProtocol.getCurrentLocNo(), recentLiftStation.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 1);
             if (endLocation == null) {
                 News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹁繎鐐逛綅缃绠楀け璐�", wrkMast.getWrkNo());
                 return false;
@@ -1554,6 +1556,8 @@
             assignCommand.setCommands(commands);
 
             wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓�  301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷宠繎鐐逛腑
+            wrkMast.setSourceStaNo(recentLiftStation.getStaNo());
+            wrkMast.setStaNo(liftStaTarget.getStaNo());
             wrkMast.setModiTime(now);
             wrkMast.setSystemMsg("");//娓呯┖娑堟伅
             if (wrkMastService.updateById(wrkMast)) {
@@ -2000,7 +2004,7 @@
             }
 
             //绉诲姩
-            int workNo = commonService.getWorkNo(WrkIoType.FORKLIFT_MOVE.id);//鑾峰彇浠诲姟鍙�
+            int workNo = commonService.getWorkNo(WrkIoType.PREVIEW_LIFT_MOVE.id);//鑾峰彇浠诲姟鍙�
 
             //鑾峰彇鎻愬崌鏈哄懡浠�
             ForkLiftCommand liftCommand = forkLiftThread.getMoveCommand(workNo, forkLiftProtocol.getLev(), Utils.getLev(wrkMast.getSourceLocNo()));
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 2d0c45f..6bc7288 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -15,6 +15,7 @@
 import com.zy.core.action.LiftAction;
 import com.zy.core.action.ShuttleAction;
 import com.zy.core.cache.SlaveConnection;
+import com.zy.core.dispatcher.LiftDispatchUtils;
 import com.zy.core.dispatcher.ShuttleDispatchUtils;
 import com.zy.core.enums.*;
 import com.zy.core.model.command.*;
@@ -57,8 +58,6 @@
     @Autowired
     private ConfigService configService;
     @Autowired
-    private NavigateMapUtils navigateMapUtils;
-    @Autowired
     private NavigateMapData navigateMapData;
     @Autowired
     private NavigateUtils navigateUtils;
@@ -74,6 +73,8 @@
     private BasShuttleChargeService basShuttleChargeService;
     @Autowired
     private DeviceConfigService deviceConfigService;
+    @Autowired
+    private LiftDispatchUtils liftDispatchUtils;
 
     /**
      * 鍒濆鍖栧疄鏃跺湴鍥�
@@ -568,9 +569,9 @@
     }
 
     /**
-     * 璐у弶鎻愬崌鏈轰换鍔�
+     * 鎻愬崌鏈轰换鍔�
      */
-    public synchronized void forkLiftIoExecute() {
+    public synchronized void liftIoExecute() {
         try {
             //鎼滅储鏄惁鏈夊緟澶勭悊鐨勪换鍔�
             List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
@@ -844,61 +845,63 @@
     }
 
     /**
-     * 璐у弶鎻愬崌鏈轰换鍔″畬鎴�
+     * 鎻愬崌鏈轰换鍔″畬鎴�
      */
-    public synchronized void forkLiftFinished() {
+    public synchronized void liftFinished() {
         try {
-            List<DeviceConfig> forkliftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
-                    .eq("device_type", String.valueOf(SlaveType.ForkLift)));
-            for (DeviceConfig device : forkliftList) {
+            List<DeviceConfig> liftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+                    .eq("device_type", String.valueOf(SlaveType.Lift)));
+            for (DeviceConfig device : liftList) {
                 //鑾峰彇鎻愬崌鏈轰俊鎭�
-                ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, device.getDeviceNo());
-                if(forkLiftThread == null) {
+                LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, device.getDeviceNo());
+                if(liftThread == null) {
                     continue;
                 }
-                ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
-                if (forkLiftProtocol == null) {
+                LiftProtocol liftProtocol = liftThread.getStatus();
+                if (liftProtocol == null) {
                     continue;
                 }
 
                 //鎻愬崌鏈轰负绛夊緟纭涓旂┖闂�
-                if (forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.WAITING.id
-                        && forkLiftProtocol.getWrkNo() != 0
+                if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id
+                        && liftProtocol.getTaskNo() != 0
                 ) {
                     //灏嗕换鍔℃。鏍囪涓哄畬鎴�
-                    WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo());
+                    WrkMast wrkMast = wrkMastService.selectByWorkNo(liftProtocol.getTaskNo());
                     if (wrkMast != null) {
                         if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN.sts) {
                             //3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴�
                             wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts);
                             wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
-                            forkLiftThread.setSyncTaskNo(0);
+                        }else if (wrkMast.getWrkSts() == WrkStsType.MOVE_NEARBY_COMPLETE.sts) {
+                            //303.灏忚溅绉诲姩鑷宠繎鐐瑰畬鎴� -- 璋冨害鎻愬崌鏈哄埌灏忚溅灞�
                         } else if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_LIFT_RUN.sts) {
-                            //104.鎻愬崌鏈烘惉杩愪腑 ==> 109.鍑哄簱瀹屾垚
+                            //304.鎻愬崌鏈烘惉杩愪腑 ==> 109.鍑哄簱瀹屾垚
                             wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts);
                             wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
-                            forkLiftThread.setSyncTaskNo(0);
-                            redisUtil.set(RedisKeyType.FORK_LIFT_PUT_COMPLETE.key + forkLiftProtocol.getLiftNo(), wrkMast.getWmsWrkNo(), 60 * 3);
                         } else if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_RUN.sts) {
                             //306.鎻愬崌鏈烘惉杩愪腑 ==> 307.鎻愬崌鏈烘惉杩愬畬鎴�
                             wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts);
-                            forkLiftThread.setSyncTaskNo(0);
+                        } else {
+                            News.error("鎻愬崌鏈虹‘璁ゅけ璐ワ紝鎻愬崌鏈哄彿={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo());
+                            return;
                         }
+
                         wrkMast.setModiTime(new Date());
                         if (wrkMastService.updateById(wrkMast)) {
-                            forkLiftThread.reset();
-                            News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", forkLiftProtocol.getLiftNo());
+                            liftThread.reset();
+                            News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
                         } else {
-                            News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", forkLiftProtocol.getLiftNo(), forkLiftProtocol.getWrkNo());
+                            News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo());
                         }
                     }else {
-                        boolean checkPreviewDispatchForkLift = commonService.checkWorkNoContainMk(forkLiftProtocol.getWrkNo(), WrkIoType.FORKLIFT_MOVE.id);
+                        boolean checkPreviewDispatchForkLift = commonService.checkWorkNoContainMk(liftProtocol.getTaskNo(), WrkIoType.PREVIEW_LIFT_MOVE.id);
                         if (checkPreviewDispatchForkLift) {
                             //灞炰簬鎻愬崌鏈洪璋冨害绉诲姩浠诲姟
                             //鏃犲伐浣滄。鏀拺锛岀洿鎺ョ‘璁ゅ畬鎴�
-                            forkLiftThread.setSyncTaskNo(0);
-                            forkLiftThread.reset();
-                            News.info("宸茬‘璁ゆ彁鍗囨満棰勮皟搴︾Щ鍔ㄤ换鍔°�傛彁鍗囨満鍙�={}", forkLiftProtocol.getLiftNo());
+                            liftThread.setSyncTaskNo(0);
+                            liftThread.reset();
+                            News.info("宸茬‘璁ゆ彁鍗囨満棰勮皟搴︾Щ鍔ㄤ换鍔°�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
                         }
                     }
                 }
@@ -1485,25 +1488,15 @@
                 return false;
             }
 
-            //鑾峰彇婧愯緭閫佺珯
-            LiftStaProtocol liftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
-            if (liftSta == null) {
-                return false;//鎵句笉鍒扮珯鐐�
-            }
-
-            if (liftSta.getHasCar()) {
-                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾簮绔欏瓨鍦ㄥ皬杞�", wrkMast.getWrkNo());
+            //鎼滅储鏈�杩戜笖鏃犳晠闅滄彁鍗囨満
+            LiftStaProtocol recentLiftStation = liftDispatchUtils.getRecentLiftStation(shuttleProtocol.getShuttleNo(), Utils.getLev(wrkMast.getLocNo()));
+            if(recentLiftStation == null) {
+                News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂茶緭閫佺珯鐐�", shuttleProtocol.getShuttleNo(), wrkMast.getLocNo());
                 return false;
             }
 
-            //鑾峰彇鐩爣杈撻�佺珯
-            LiftStaProtocol liftStaTarget = LiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
-            if (liftStaTarget == null) {
-                return false;//鎵句笉鍒扮珯鐐�
-            }
-
-            if (liftStaTarget.getHasCar()) {
-                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪灏忚溅", wrkMast.getWrkNo());
+            LiftStaProtocol targetLiftSta = LiftUtils.getLiftStaByLev(recentLiftStation.getLiftNo(), Utils.getLev(wrkMast.getLocNo()));
+            if(targetLiftSta == null) {
                 return false;
             }
 
@@ -1514,7 +1507,7 @@
             assignCommand.setAuto(true);//鑷姩妯″紡
 
             //璁$畻杩戠偣浣嶇疆
-            String endLocation = navigateUtils.calcEndLocation(shuttleProtocol.getCurrentLocNo(), liftSta.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 1);
+            String endLocation = navigateUtils.calcEndLocation(shuttleProtocol.getCurrentLocNo(), recentLiftStation.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 1);
             if (endLocation == null) {
                 News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹁繎鐐逛綅缃绠楀け璐�", wrkMast.getWrkNo());
                 return false;
@@ -1523,6 +1516,8 @@
             //灏忚溅宸插湪杩戠偣浣嶇疆鏃犻渶鍓嶅線
             if (shuttleProtocol.getCurrentLocNo().equals(endLocation)) {
                 wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY_COMPLETE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓�  301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 303.灏忚溅绉诲姩鑷宠繎鐐瑰畬鎴�
+                wrkMast.setSourceStaNo(recentLiftStation.getStaNo());
+                wrkMast.setStaNo(targetLiftSta.getStaNo());
                 wrkMast.setModiTime(now);
                 wrkMast.setSystemMsg("");//娓呯┖娑堟伅
                 wrkMastService.updateById(wrkMast);
@@ -1539,6 +1534,8 @@
             assignCommand.setCommands(commands);
 
             wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓�  301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷宠繎鐐逛腑
+            wrkMast.setSourceStaNo(recentLiftStation.getStaNo());
+            wrkMast.setStaNo(targetLiftSta.getStaNo());
             wrkMast.setModiTime(now);
             wrkMast.setSystemMsg("");//娓呯┖娑堟伅
             if (wrkMastService.updateById(wrkMast)) {
@@ -1627,7 +1624,7 @@
                 return false;
             }
 
-            int targetLev = Utils.getLev(wrkMast.getLocNo());
+            int targetLev = Utils.getLev(shuttleProtocol.getCurrentLocNo());
             if (liftProtocol.getLev() != targetLev) {
                 //鑾峰彇鎻愬崌鏈哄懡浠�
                 LiftCommand liftCommand = liftThread.getMoveCommand(wrkMast.getWrkNo(), liftProtocol.getLev(), targetLev);
@@ -1639,7 +1636,7 @@
                 assignCommand.setCommands(commands);
                 assignCommand.setLiftNo(wrkMast.getLiftNo());
                 assignCommand.setTaskNo(wrkMast.getWrkNo());
-                assignCommand.setTaskMode(ForkLiftTaskModeType.MOVE.id);
+                assignCommand.setTaskMode(LiftTaskModeType.MOVE.id);
                 //涓嬪彂浠诲姟
                 liftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
                 News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満鍦▄}灞傦紝鎻愬崌鏈轰笉鍦ㄥ皬杞﹀眰锛岃皟搴︾Щ鍔ㄤ腑", wrkMast.getWrkNo(), liftProtocol.getLev(), wrkMast.getLiftNo());
@@ -1724,7 +1721,7 @@
             assignCommand.setCommands(commands);
             assignCommand.setLiftNo(wrkMast.getLiftNo());
             assignCommand.setTaskNo(wrkMast.getWrkNo());
-            assignCommand.setTaskMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id);
+            assignCommand.setTaskMode(LiftTaskModeType.SHUTTLE_SWITCH.id);
 
             wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑  305.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑
             wrkMast.setSystemMsg("");//娓呯┖娑堟伅
@@ -1855,77 +1852,6 @@
             }
         }
         return true;
-    }
-
-    //鑷姩鍒囨崲鍑哄叆搴撴ā寮�
-    public void autoSwitchForkLiftIOMode() {
-//        List<DeviceConfig> forkliftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
-//                .eq("device_type", String.valueOf(SlaveType.ForkLift)));
-//        for (DeviceConfig device : forkliftList) {
-//            Integer liftNo = device.getDeviceNo();
-//            ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo);
-//            if (forkLiftThread == null) {
-//                continue;
-//            }
-//            ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
-//            if (forkLiftProtocol == null) {
-//                continue;
-//            }
-//
-//            List<Integer> liftAllStaNo = ForkLiftUtils.getLiftAllStaNo(liftNo);
-//            if (liftAllStaNo.isEmpty()) {
-//                continue;
-//            }
-//
-//            List<Integer> conveyorBindLiftAllStaNo = ForkLiftUtils.getConveyorBindLiftAllStaNo(liftNo);
-//            if (conveyorBindLiftAllStaNo.isEmpty()) {
-//                continue;
-//            }
-//
-//            //鑾峰彇鍏ュ簱浠诲姟
-//            List<WrkMast> inWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
-//                    .in("sta_no", liftAllStaNo)
-//                    .in("wrk_sts"
-//                            , WrkStsType.NEW_INBOUND.sts
-//                            , WrkStsType.INBOUND_DEVICE_RUN.sts
-//                            , WrkStsType.INBOUND_LIFT_RUN.sts
-//                            , WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts
-//                            , WrkStsType.INBOUND_SHUTTLE_RUN.sts
-//                            , WrkStsType.INBOUND_SHUTTLE_RUN_COMPLETE.sts
-//                    ));
-//
-//            //鑾峰彇鍑哄簱浠诲姟
-//            List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
-//                    .in("sta_no", conveyorBindLiftAllStaNo)
-//                    .in("wrk_sts"
-//                            , WrkStsType.NEW_OUTBOUND.sts
-//                            , WrkStsType.OUTBOUND_SHUTTLE_RUN.sts
-//                            , WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts
-//                            , WrkStsType.OUTBOUND_LIFT_RUN.sts
-//                            , WrkStsType.OUTBOUND_LIFT_RUN_COMPLETE.sts
-//                    ));
-//
-//            if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.NONE)) {
-//                //鏈煡妯″紡
-//                if (!inWrkMasts.isEmpty()) {
-//                    forkLiftThread.switchIOMode(ForkLiftIoModeType.IN);
-//                } else if (!outWrkMasts.isEmpty()) {
-//                    forkLiftThread.switchIOMode(ForkLiftIoModeType.OUT);
-//                }else {
-//                    forkLiftThread.switchIOMode(ForkLiftIoModeType.IN);
-//                }
-//            } else if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.IN)) {
-//                //鍏ュ簱妯″紡
-//                if (inWrkMasts.isEmpty() && !outWrkMasts.isEmpty()) {
-//                    forkLiftThread.switchIOMode(ForkLiftIoModeType.OUT);
-//                }
-//            } else if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) {
-//                //鍑哄簱妯″紡
-//                if (outWrkMasts.isEmpty() && !inWrkMasts.isEmpty()) {
-//                    forkLiftThread.switchIOMode(ForkLiftIoModeType.IN);
-//                }
-//            }
-//        }
     }
 
 }
diff --git a/src/main/java/com/zy/common/utils/NavigateSolution.java b/src/main/java/com/zy/common/utils/NavigateSolution.java
index 6910520..681c54d 100644
--- a/src/main/java/com/zy/common/utils/NavigateSolution.java
+++ b/src/main/java/com/zy/common/utils/NavigateSolution.java
@@ -205,7 +205,7 @@
                 }
             }
 
-            if (map[x][y] == MapNodeType.NORMAL_PATH.id || map[x][y] == MapNodeType.MAIN_PATH.id || map[x][y] == MapNodeType.CONVEYOR_CAR_GO.id || map[x][y] == MapNodeType.CHARGE.id || map[x][y] == MapNodeType.LIFT.id) {
+            if (map[x][y] == MapNodeType.NORMAL_PATH.id || map[x][y] == MapNodeType.MAIN_PATH.id || map[x][y] == MapNodeType.CONVEYOR_CAR_GO.id || map[x][y] == MapNodeType.CONVEYOR.id || map[x][y] == MapNodeType.CHARGE.id || map[x][y] == MapNodeType.LIFT.id) {
                 //瀛愯建鍜屾瘝杞ㄣ�佸皬杞﹀彲璧拌緭閫佺嚎銆佸厖鐢垫々銆佹彁鍗囨満鎵嶈兘杩涜宸﹀彸绉诲姩
                 if (is_valid(x, y + 1)) {
                     NavigateNode node = new NavigateNode(x, y + 1);
@@ -233,7 +233,7 @@
                 }
             }
 
-            if (map[x][y] == MapNodeType.NORMAL_PATH.id || map[x][y] == MapNodeType.MAIN_PATH.id || map[x][y] == MapNodeType.CONVEYOR_CAR_GO.id || map[x][y] == MapNodeType.CHARGE.id || map[x][y] == MapNodeType.LIFT.id) {
+            if (map[x][y] == MapNodeType.NORMAL_PATH.id || map[x][y] == MapNodeType.MAIN_PATH.id || map[x][y] == MapNodeType.CONVEYOR_CAR_GO.id || map[x][y] == MapNodeType.CONVEYOR.id || map[x][y] == MapNodeType.CHARGE.id || map[x][y] == MapNodeType.LIFT.id) {
                 //瀛愯建鍜屾瘝杞ㄣ�佸皬杞﹀彲璧拌緭閫佺嚎銆佸厖鐢垫々銆佹彁鍗囨満鎵嶈兘杩涜涓婁笅绉诲姩
                 if (is_valid(x + 1, y)) {
                     NavigateNode node = new NavigateNode(x + 1, y);
diff --git a/src/main/java/com/zy/core/MainProcess.java b/src/main/java/com/zy/core/MainProcess.java
index e748408..4e7e797 100644
--- a/src/main/java/com/zy/core/MainProcess.java
+++ b/src/main/java/com/zy/core/MainProcess.java
@@ -66,10 +66,10 @@
 //                    mainService.shuttleFinished();
                     //鎵ц绉诲簱浠诲姟
                     mainService.shuttleLocMoveExecute();
-                    //璐у弶鎻愬崌鏈轰换鍔�
-                    mainService.forkLiftIoExecute();
-                    //璐у弶鎻愬崌鏈轰换鍔″畬鎴�
-                    mainService.forkLiftFinished();
+                    //鎻愬崌鏈轰换鍔�
+                    mainService.liftIoExecute();
+                    //鎻愬崌鏈轰换鍔″畬鎴�
+                    mainService.liftFinished();
                     //鎵ц灏忚溅绉诲姩浠诲姟
                     mainService.shuttleMoveExecute();
                     // 寮傚父淇℃伅璁板綍
@@ -77,9 +77,6 @@
                     // 绌挎杞� ===>> 灏忚溅鐢甸噺妫�娴嬪厖鐢�
                     mainService.loopShuttleCharge();
                     mainService.executeShuttleCharge();
-
-                    //鑷姩鍒囨崲鍑哄叆搴撴ā寮�
-                    mainService.autoSwitchForkLiftIOMode();
 
                     // 闂撮殧
                     Thread.sleep(200);
diff --git a/src/main/java/com/zy/core/action/LiftAction.java b/src/main/java/com/zy/core/action/LiftAction.java
index 1c2f1c4..81a20b7 100644
--- a/src/main/java/com/zy/core/action/LiftAction.java
+++ b/src/main/java/com/zy/core/action/LiftAction.java
@@ -8,6 +8,7 @@
 import com.zy.common.utils.RedisUtil;
 import com.zy.core.News;
 import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.LiftProtocolStatusType;
 import com.zy.core.enums.LiftTaskModeType;
 import com.zy.core.enums.RedisKeyType;
 import com.zy.core.enums.SlaveType;
@@ -121,6 +122,45 @@
             redisCommand.setCommandStep(commandStep);
             // 鏇存柊redis鏁版嵁
             redisUtil.set(RedisKeyType.LIFT_WORK_FLAG.key + taskNo, JSON.toJSONString(redisCommand));
+        }else {
+            if (!liftThread.isDeviceIdle()) {
+                return false;
+            }
+
+            LiftCommand lastCommand = commands.get(commandStep - 1);
+            if (lastCommand.getMode() == LiftTaskModeType.PICK_PUT.id) {
+                if (liftProtocol.getLev() == lastCommand.getPut()) {
+                    lastCommand.setComplete(true);
+                }
+            } else if (lastCommand.getMode() == LiftTaskModeType.SHUTTLE_SWITCH.id) {
+                if (liftProtocol.getLev() == lastCommand.getPut()) {
+                    lastCommand.setComplete(true);
+                }
+            } else if (lastCommand.getMode() == LiftTaskModeType.MOVE.id) {
+                if (liftProtocol.getLev() == lastCommand.getPut()) {
+                    lastCommand.setComplete(true);
+                }
+            }
+
+            //浠诲姟鏁版嵁淇濆瓨鍒皉edis
+            redisUtil.set(RedisKeyType.LIFT_WORK_FLAG.key + redisCommand.getWrkNo(), JSON.toJSONString(redisCommand));
+
+            if (!lastCommand.getComplete()) {
+                //涓婁竴鏉′换鍔℃湭瀹屾垚锛岀姝笅鍙戝懡浠�
+                return false;
+            }
+
+            //鍒ゆ柇鏄惁涓烘渶鍚庝竴鏉″懡浠や笖鍛戒护鎵ц瀹屾垚锛屾姏鍑虹瓑寰呯‘璁ょ姸鎬�
+            LiftCommand endCommand = commands.get(commands.size() - 1);
+            if (endCommand.getComplete()) {
+                //宸叉墽琛屽畬鎴�
+                //鍒犻櫎redis
+                redisUtil.del(RedisKeyType.LIFT_WORK_FLAG.key + redisCommand.getWrkNo());
+
+                //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting
+                liftThread.setProtocolStatus(LiftProtocolStatusType.WAITING);
+                News.info("鎻愬崌鏈轰换鍔℃墽琛屼笅鍙戝畬鎴愭墽琛岀粨鏉燂紝鎻愬崌鏈哄彿={}锛屼换鍔℃暟鎹�={}", redisCommand.getLiftNo(), JSON.toJSON(redisCommand));
+            }
         }
 
         return true;
diff --git a/src/main/java/com/zy/core/dispatcher/ForkLiftDispatchUtils.java b/src/main/java/com/zy/core/dispatcher/ForkLiftDispatchUtils.java
new file mode 100644
index 0000000..16ed602
--- /dev/null
+++ b/src/main/java/com/zy/core/dispatcher/ForkLiftDispatchUtils.java
@@ -0,0 +1,127 @@
+package com.zy.core.dispatcher;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.DeviceConfig;
+import com.zy.asrs.service.DeviceConfigService;
+import com.zy.asrs.utils.Utils;
+import com.zy.common.model.NavigateNode;
+import com.zy.common.model.enums.NavigationMapType;
+import com.zy.common.utils.ForkLiftUtils;
+import com.zy.common.utils.NavigateUtils;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.protocol.ForkLiftProtocol;
+import com.zy.core.model.protocol.ForkLiftStaProtocol;
+import com.zy.core.model.protocol.ShuttleProtocol;
+import com.zy.core.thread.ForkLiftThread;
+import com.zy.core.thread.ShuttleThread;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鎻愬崌鏈鸿皟搴﹀伐鍏�
+ */
+@Component
+public class ForkLiftDispatchUtils {
+
+    @Autowired
+    private DeviceConfigService deviceConfigService;
+    @Autowired
+    private NavigateUtils navigateUtils;
+
+    /**
+     * 鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満杈撻�佺珯鐐�
+     */
+    public ForkLiftStaProtocol getRecentLiftStation(Integer shuttleNo, Integer targetLev) {
+        //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+        ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
+        if (shuttleThread == null) {
+            return null;
+        }
+        ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+        if (shuttleProtocol == null) {
+            return null;
+        }
+
+        List<DeviceConfig> forkliftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+                .eq("device_type", String.valueOf(SlaveType.ForkLift)));
+
+        //鑾峰彇灏忚溅鍚屼竴妤煎眰鐨勭珯鐐�
+        ArrayList<ForkLiftStaProtocol> list = new ArrayList<>();
+        int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());//灏忚溅妤煎眰
+        for (DeviceConfig device : forkliftList) {
+            ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, device.getDeviceNo());
+            if (forkLiftThread == null) {
+                continue;
+            }
+            ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
+            if (forkLiftProtocol == null) {
+                continue;
+            }
+            if (forkLiftProtocol.getErrorCode() > 0) {
+                continue;
+            }
+
+            ForkLiftStaProtocol forkLiftStaProtocol = ForkLiftUtils.getLiftStaByLev(device.getDeviceNo(), lev);
+            if (forkLiftStaProtocol == null) {
+                continue;
+            }
+
+            //鍒ゆ柇褰撳墠灞傛槸鍚︽棤鎵樼洏
+            if (forkLiftStaProtocol.getHasTray()) {
+                continue;
+            }
+
+            if (forkLiftStaProtocol.getHasCar()) {
+                continue;
+            }
+
+            //鍒ゆ柇鐩爣妤煎眰绔欑偣鏄惁鏃犳墭鐩�
+            ForkLiftStaProtocol targetLiftStaProtocol = ForkLiftUtils.getLiftStaByLev(device.getDeviceNo(), targetLev);
+            if (targetLiftStaProtocol == null) {
+                continue;
+            }
+
+            if (targetLiftStaProtocol.getHasTray()) {
+                continue;//鏈夋墭鐩樿烦杩�
+            }
+
+            if (targetLiftStaProtocol.getHasCar()) {
+                continue;
+            }
+
+            list.add(forkLiftStaProtocol);
+        }
+
+        if (list.isEmpty()) {
+            return null;
+        }
+
+        String currentLocNo = shuttleProtocol.getCurrentLocNo();//灏忚溅浣嶇疆
+        Integer recentAllDistance = 9999999;
+        ForkLiftStaProtocol recentSta = null;//鏈�杩戠珯鐐�
+        //鎼滅储璺濈灏忚溅鏈�杩戠殑绔欑偣
+        for (ForkLiftStaProtocol forkLiftStaProtocol : list) {
+            Integer staNo = forkLiftStaProtocol.getStaNo();//绔欑偣鍙�
+            String locNo = forkLiftStaProtocol.getLocNo();//绔欑偣搴撲綅鍙�
+
+            //褰撳墠绌挎杞︾嚎绋嬪埌鐩爣鍦扮偣璺濈
+            List<NavigateNode> currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.getMapTypes(NavigationMapType.NORMAL), Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)), null);//浣跨敤姝e父閫氶亾鍦板浘
+            if (currentShuttlePath == null) {
+                continue;
+            }
+            Integer currentAllDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
+            if (currentAllDistance < recentAllDistance) {
+                //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠珯鐐�
+                recentSta = forkLiftStaProtocol;
+                recentAllDistance = currentAllDistance;
+            }
+        }
+
+        return recentSta;
+    }
+
+}
diff --git a/src/main/java/com/zy/core/dispatcher/LiftDispatchUtils.java b/src/main/java/com/zy/core/dispatcher/LiftDispatchUtils.java
new file mode 100644
index 0000000..d058729
--- /dev/null
+++ b/src/main/java/com/zy/core/dispatcher/LiftDispatchUtils.java
@@ -0,0 +1,110 @@
+package com.zy.core.dispatcher;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.zy.asrs.entity.DeviceConfig;
+import com.zy.asrs.service.DeviceConfigService;
+import com.zy.asrs.utils.Utils;
+import com.zy.common.model.NavigateNode;
+import com.zy.common.model.enums.NavigationMapType;
+import com.zy.common.utils.LiftUtils;
+import com.zy.common.utils.NavigateUtils;
+import com.zy.core.cache.SlaveConnection;
+import com.zy.core.enums.SlaveType;
+import com.zy.core.model.protocol.LiftProtocol;
+import com.zy.core.model.protocol.LiftStaProtocol;
+import com.zy.core.model.protocol.ShuttleProtocol;
+import com.zy.core.thread.LiftThread;
+import com.zy.core.thread.ShuttleThread;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 鎻愬崌鏈鸿皟搴﹀伐鍏�
+ */
+@Component
+public class LiftDispatchUtils {
+
+    @Autowired
+    private DeviceConfigService deviceConfigService;
+    @Autowired
+    private NavigateUtils navigateUtils;
+
+    /**
+     * 鑾峰彇绌挎杞︽渶杩戜笖鏃犳晠闅滄彁鍗囨満杈撻�佺珯鐐�
+     */
+    public LiftStaProtocol getRecentLiftStation(Integer shuttleNo, Integer targetLev) {
+        //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+        ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
+        if (shuttleThread == null) {
+            return null;
+        }
+        ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+        if (shuttleProtocol == null) {
+            return null;
+        }
+
+        List<DeviceConfig> liftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+                .eq("device_type", String.valueOf(SlaveType.Lift)));
+
+        //鑾峰彇灏忚溅鍚屼竴妤煎眰鐨勭珯鐐�
+        ArrayList<LiftStaProtocol> list = new ArrayList<>();
+        int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());//灏忚溅妤煎眰
+        for (DeviceConfig device : liftList) {
+            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, device.getDeviceNo());
+            if (liftThread == null) {
+                continue;
+            }
+            LiftProtocol liftProtocol = liftThread.getStatus();
+            if (liftProtocol == null) {
+                continue;
+            }
+            if (liftProtocol.getErrorCode() > 0) {
+                continue;
+            }
+
+            //鍒ゆ柇鐩爣妤煎眰绔欑偣鏄惁鏃犳墭鐩�
+            LiftStaProtocol targetLiftStaProtocol = LiftUtils.getLiftStaByLev(device.getDeviceNo(), targetLev);
+            if (targetLiftStaProtocol == null) {
+                continue;
+            }
+
+            //鐩爣灞傛湁灏忚溅
+            if (targetLiftStaProtocol.getHasCar()) {
+                continue;
+            }
+
+            list.add(targetLiftStaProtocol);
+        }
+
+        if (list.isEmpty()) {
+            return null;
+        }
+
+        String currentLocNo = shuttleProtocol.getCurrentLocNo();//灏忚溅浣嶇疆
+        Integer recentAllDistance = 9999999;
+        LiftStaProtocol recentSta = null;//鏈�杩戠珯鐐�
+        //鎼滅储璺濈灏忚溅鏈�杩戠殑绔欑偣
+        for (LiftStaProtocol liftStaProtocol : list) {
+            Integer staNo = liftStaProtocol.getStaNo();//绔欑偣鍙�
+            String locNo = liftStaProtocol.getLocNo();//绔欑偣搴撲綅鍙�
+
+            //褰撳墠绌挎杞︾嚎绋嬪埌鐩爣鍦扮偣璺濈
+            List<NavigateNode> currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.getMapTypes(NavigationMapType.NORMAL), Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)), null);//浣跨敤姝e父閫氶亾鍦板浘
+            if (currentShuttlePath == null) {
+                continue;
+            }
+            Integer currentAllDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
+            if (currentAllDistance < recentAllDistance) {
+                //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠珯鐐�
+                recentSta = liftStaProtocol;
+                recentAllDistance = currentAllDistance;
+            }
+        }
+
+        return recentSta;
+    }
+
+}
diff --git a/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java b/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java
index a62c8e2..18ec992 100644
--- a/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java
+++ b/src/main/java/com/zy/core/dispatcher/ShuttleDispatchUtils.java
@@ -17,17 +17,13 @@
 import com.zy.common.model.NavigateNode;
 import com.zy.common.model.enums.NavigationMapType;
 import com.zy.common.service.CommonService;
-import com.zy.common.utils.ForkLiftUtils;
 import com.zy.common.utils.NavigateUtils;
 import com.zy.core.News;
 import com.zy.core.cache.SlaveConnection;
 import com.zy.core.enums.SlaveType;
 import com.zy.core.enums.WrkIoType;
 import com.zy.core.enums.WrkStsType;
-import com.zy.core.model.ForkLiftSlave;
-import com.zy.core.model.ShuttleSlave;
 import com.zy.core.model.protocol.*;
-import com.zy.core.thread.ForkLiftThread;
 import com.zy.core.thread.ShuttleThread;
 import com.zy.system.entity.Config;
 import com.zy.system.service.ConfigService;
@@ -251,27 +247,6 @@
             }
         }
 
-        Integer sourceStaNo = null;//灏忚溅鎹㈠眰婧愮珯鐐�
-        Integer staNo = null;//灏忚溅鎹㈠眰鐩爣绔欑偣
-        if (Utils.getLev(locNo) != Utils.getLev(shuttleProtocol.getCurrentLocNo())) {
-            //鐩爣搴撲綅鍜屽皬杞﹀簱浣嶅浜庝笉鍚屼竴妤煎眰锛岄渶瑕侀�氳繃鎻愬崌鏈鸿皟搴�
-            //鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満杈撻�佺珯鐐�
-            ForkLiftStaProtocol liftSta = this.getRecentLiftSta(shuttleNo, Utils.getLev(locNo));
-            if (liftSta == null) {
-                News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂茶緭閫佺珯鐐�", shuttleNo, locNo);
-                return false;//娌℃湁鍙敤涓旂┖闂茬殑杈撻�佺珯鐐�
-            }
-            sourceStaNo = liftSta.getStaNo();//婧愮珯鐐�
-
-            ForkLiftStaProtocol targetLiftSta = ForkLiftUtils.getLiftStaByLev(liftSta.getLiftNo(), Utils.getLev(locNo));
-            if (targetLiftSta == null) {
-                News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夌洰鏍囩珯鐐�", shuttleNo, locNo);
-                return false;//娌℃湁鎵惧埌鐩爣绔欑偣
-            }
-            //鐩爣绔欑偣
-            staNo = targetLiftSta.getStaNo();//鐩爣绔�
-        }
-
         // 鑾峰彇宸ヤ綔鍙�
         int workNo = commonService.getWorkNo(WrkIoType.SHUTTLE_MOVE.id);
         // 淇濆瓨宸ヤ綔妗�
@@ -284,8 +259,6 @@
         wrkMast.setShuttleNo(shuttleNo);//绌挎杞﹀彿
         wrkMast.setSourceLocNo(shuttleProtocol.getCurrentLocNo()); // 婧愬簱浣� => 灏忚溅褰撳墠搴撲綅鍙�
         wrkMast.setLocNo(locNo); // 鐩爣搴撲綅
-        wrkMast.setSourceStaNo(sourceStaNo);//婧愮珯
-        wrkMast.setStaNo(staNo);//鐩爣绔�
         wrkMast.setAppeTime(now);
         wrkMast.setModiTime(now);
         boolean res = wrkMastService.insert(wrkMast);
@@ -419,98 +392,6 @@
 
 
         return levCount < Integer.parseInt(config.getValue());
-    }
-
-    /**
-     * 鑾峰彇绌挎杞︽渶杩戜笖绌洪棽鐨勬彁鍗囨満杈撻�佺珯鐐�
-     */
-    public ForkLiftStaProtocol getRecentLiftSta(Integer shuttleNo, Integer targetLev) {
-        //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
-        ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
-        if (shuttleThread == null) {
-            return null;
-        }
-        ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
-        if (shuttleProtocol == null) {
-            return null;
-        }
-
-        List<DeviceConfig> forkliftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
-                .eq("device_type", String.valueOf(SlaveType.ForkLift)));
-
-        //鑾峰彇灏忚溅鍚屼竴妤煎眰鐨勭珯鐐�
-        ArrayList<ForkLiftStaProtocol> list = new ArrayList<>();
-        int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());//灏忚溅妤煎眰
-        for (DeviceConfig device : forkliftList) {
-            ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, device.getDeviceNo());
-            if (forkLiftThread == null) {
-                continue;
-            }
-            ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
-            if (forkLiftProtocol == null) {
-                continue;
-            }
-            if (!forkLiftThread.isIdle()) {
-                continue;
-            }
-
-            ForkLiftStaProtocol forkLiftStaProtocol = ForkLiftUtils.getLiftStaByLev(device.getDeviceNo(), lev);
-            if (forkLiftStaProtocol == null) {
-                continue;
-            }
-
-            //鍒ゆ柇褰撳墠灞傛槸鍚︽棤鎵樼洏
-            if (forkLiftStaProtocol.getHasTray()) {
-                continue;
-            }
-
-            if (forkLiftStaProtocol.getHasCar()) {
-                continue;
-            }
-
-            //鍒ゆ柇鐩爣妤煎眰绔欑偣鏄惁鏃犳墭鐩�
-            ForkLiftStaProtocol targetLiftStaProtocol = ForkLiftUtils.getLiftStaByLev(device.getDeviceNo(), targetLev);
-            if (targetLiftStaProtocol == null) {
-                continue;
-            }
-
-            if (targetLiftStaProtocol.getHasTray()) {
-                continue;//鏈夋墭鐩樿烦杩�
-            }
-
-            if (targetLiftStaProtocol.getHasCar()) {
-                continue;
-            }
-
-            list.add(forkLiftStaProtocol);
-        }
-
-        if (list.isEmpty()) {
-            return null;
-        }
-
-        String currentLocNo = shuttleProtocol.getCurrentLocNo();//灏忚溅浣嶇疆
-        Integer recentAllDistance = 9999999;
-        ForkLiftStaProtocol recentSta = null;//鏈�杩戠珯鐐�
-        //鎼滅储璺濈灏忚溅鏈�杩戠殑绔欑偣
-        for (ForkLiftStaProtocol forkLiftStaProtocol : list) {
-            Integer staNo = forkLiftStaProtocol.getStaNo();//绔欑偣鍙�
-            String locNo = forkLiftStaProtocol.getLocNo();//绔欑偣搴撲綅鍙�
-
-            //褰撳墠绌挎杞︾嚎绋嬪埌鐩爣鍦扮偣璺濈
-            List<NavigateNode> currentShuttlePath = navigateUtils.calc(currentLocNo, locNo, NavigationMapType.getMapTypes(NavigationMapType.NORMAL), Utils.getShuttlePoints(shuttleNo, Utils.getLev(currentLocNo)), null);//浣跨敤姝e父閫氶亾鍦板浘
-            if (currentShuttlePath == null) {
-                continue;
-            }
-            Integer currentAllDistance = navigateUtils.getOriginPathAllDistance(currentShuttlePath);//璁$畻褰撳墠璺緞琛岃蛋鎬昏窛绂�
-            if (currentAllDistance < recentAllDistance) {
-                //濡傛灉褰撳墠妤煎眰鐨勮溅璺緞鏇村皬锛屽垯鏇存柊鏈�杩戠珯鐐�
-                recentSta = forkLiftStaProtocol;
-                recentAllDistance = currentAllDistance;
-            }
-        }
-
-        return recentSta;
     }
 
     /**
diff --git a/src/main/java/com/zy/core/enums/LiftDeviceStatusType.java b/src/main/java/com/zy/core/enums/LiftDeviceStatusType.java
new file mode 100644
index 0000000..8d80cd2
--- /dev/null
+++ b/src/main/java/com/zy/core/enums/LiftDeviceStatusType.java
@@ -0,0 +1,42 @@
+package com.zy.core.enums;
+
+public enum LiftDeviceStatusType {
+    NONE(-1, "绂荤嚎"),
+    IDLE(0, "绌洪棽"),
+    BUSY(1, "蹇欑"),
+    WAITING(98, "绛夊緟纭"),
+    ERROR(99, "鏁呴殰"),
+    ;
+
+    public Integer id;
+    public String desc;
+
+    LiftDeviceStatusType(Integer id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public static LiftDeviceStatusType get(Integer id) {
+        if (null == id) {
+            return NONE;
+        }
+        for (LiftDeviceStatusType type : LiftDeviceStatusType.values()) {
+            if (type.id.equals(id)) {
+                return type;
+            }
+        }
+        return NONE;
+    }
+
+    public static LiftDeviceStatusType get(LiftDeviceStatusType type) {
+        if (null == type) {
+            return NONE;
+        }
+        for (LiftDeviceStatusType type2 : LiftDeviceStatusType.values()) {
+            if (type2 == type) {
+                return type2;
+            }
+        }
+        return NONE;
+    }
+}
diff --git a/src/main/java/com/zy/core/enums/WrkIoType.java b/src/main/java/com/zy/core/enums/WrkIoType.java
index 5926868..70dfeb2 100644
--- a/src/main/java/com/zy/core/enums/WrkIoType.java
+++ b/src/main/java/com/zy/core/enums/WrkIoType.java
@@ -9,7 +9,7 @@
     SHUTTLE_MOVE(200, "灏忚溅绉诲姩"),
     LOC_MOVE(201, "绉诲簱浠诲姟"),
     SHUTTLE_CHARGE(300, "灏忚溅鍏呯數"),
-    FORKLIFT_MOVE(98, "鎻愬崌鏈洪璋冨害绉诲姩浠诲姟"),
+    PREVIEW_LIFT_MOVE(98, "鎻愬崌鏈洪璋冨害绉诲姩浠诲姟"),
     MANUAL(99, "鎵嬪姩浠诲姟"),
     ;
 
diff --git a/src/main/java/com/zy/core/model/protocol/LiftProtocol.java b/src/main/java/com/zy/core/model/protocol/LiftProtocol.java
index 2c5ffd1..c5b94b5 100644
--- a/src/main/java/com/zy/core/model/protocol/LiftProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/LiftProtocol.java
@@ -39,12 +39,22 @@
     /**
      * 浠诲姟鐘舵��
      */
-    private Integer protocolStatus = LiftProtocolStatusType.NONE.id;
+    private Integer protocolStatus = LiftProtocolStatusType.IDLE.id;
 
     /**
      * 浠诲姟鐘舵�佹灇涓�
      */
-    private LiftProtocolStatusType protocolStatusType = LiftProtocolStatusType.NONE;
+    private LiftProtocolStatusType protocolStatusType = LiftProtocolStatusType.IDLE;
+
+    /**
+     * 璁惧鐘舵��
+     */
+    private Integer deviceStatus = LiftDeviceStatusType.NONE.id;
+
+    /**
+     * 璁惧鐘舵�佹灇涓�
+     */
+    private LiftDeviceStatusType deviceStatusType = LiftDeviceStatusType.NONE;
 
     /**
      * 浠诲姟妯″紡
@@ -222,6 +232,14 @@
         return LiftProtocolStatusType.get(this.protocolStatus).desc;
     }
 
+    public String getDeviceStatus$() {
+        if (this.deviceStatus == null) {
+            return "";
+        }
+
+        return LiftDeviceStatusType.get(this.deviceStatus).desc;
+    }
+
     public String getTaskMode$() {
         if (this.taskMode == null) {
             return "";
diff --git a/src/main/java/com/zy/core/thread/impl/NyLiftThread.java b/src/main/java/com/zy/core/thread/impl/NyLiftThread.java
index e5a01e7..0ff3b77 100644
--- a/src/main/java/com/zy/core/thread/impl/NyLiftThread.java
+++ b/src/main/java/com/zy/core/thread/impl/NyLiftThread.java
@@ -160,7 +160,7 @@
             if (null == liftProtocol) {
                 liftProtocol = new LiftProtocol();
                 liftProtocol.setLiftNo(device.getDeviceNo());
-                liftProtocol.setProtocolStatus(LiftProtocolStatusType.NONE);
+                liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE);
 
                 InnerLiftExtend innerLiftExtend = new InnerLiftExtend();
                 liftProtocol.setExtend(innerLiftExtend);
@@ -171,8 +171,8 @@
             liftProtocol.setModel(data.getInteger("model"));
             //PLC浠诲姟鍙�
             liftProtocol.setPlcTaskNo(data.getInteger("plcTaskNo"));
-            //浠诲姟鐘舵��
-            liftProtocol.setProtocolStatus(data.getInteger("protocolStatus"));
+            //璁惧鐘舵��
+            liftProtocol.setDeviceStatus(data.getInteger("deviceStatus"));
             //浠诲姟妯″紡
             liftProtocol.setTaskMode(data.getInteger("taskMode"));
             //鍙栬揣鏁版嵁
@@ -397,6 +397,8 @@
             }
 
             this.liftProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿
+            this.setSyncTaskNo(0);
+            this.setProtocolStatus(LiftProtocolStatusType.IDLE);
             response.setMessage(JSON.toJSONString(result));
             response.setResult(true);
             return response;
@@ -422,7 +424,7 @@
         InnerLiftExtend extend = (InnerLiftExtend) this.liftProtocol.getExtend();
 
         boolean res = this.liftProtocol.getProtocolStatus() == LiftProtocolStatusType.IDLE.id
-                && this.liftProtocol.getPlcTaskNo() == 0
+//                && this.liftProtocol.getPlcTaskNo() == 0
                 && this.liftProtocol.getTaskNo() == 0
                 && this.liftProtocol.getModel() == 2
                 && this.liftProtocol.getErrorCode() == 0
diff --git a/src/main/webapp/views/lift.html b/src/main/webapp/views/lift.html
index a2362b1..1d9253e 100644
--- a/src/main/webapp/views/lift.html
+++ b/src/main/webapp/views/lift.html
@@ -114,6 +114,7 @@
                                 <th class="py-3 px-4">宸ヤ綔鍙�</th>
                                 <th class="py-3 px-4">PLC宸ヤ綔鍙�</th>
                                 <th class="py-3 px-4">璁惧妯″紡</th>
+                                <th class="py-3 px-4">璁惧鐘舵��</th>
                                 <th class="py-3 px-4">浠诲姟鐘舵��</th>
                                 <th class="py-3 px-4">浠诲姟妯″紡</th>
                                 <th class="py-3 px-4">鍙栬揣鏁版嵁</th>
@@ -132,6 +133,7 @@
                                     <td class="py-3 px-4">{{ item.taskNo }}</td>
                                     <td class="py-3 px-4">{{ item.plcTaskNo }}</td>
                                     <td class="py-3 px-4">{{ item.model$ }}</td>
+                                    <td class="py-3 px-4">{{ item.deviceStatus$ }}</td>
                                     <td class="py-3 px-4">{{ item.protocolStatus$ }}</td>
                                     <td class="py-3 px-4">{{ item.taskMode$ }}</td>
                                     <td class="py-3 px-4">{{ item.pick }}</td>

--
Gitblit v1.9.1