From 6e02d92c3b9c240fa78a343b67ddf0db12d840e6 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期五, 22 八月 2025 17:00:56 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |  252 +++++++++++++++++++++----------------------------
 1 files changed, 109 insertions(+), 143 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 09cefc6..9f5533e 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;
 
     /**
      * 鍒濆鍖栧疄鏃跺湴鍥�
@@ -181,10 +182,10 @@
             }
 
             //妫�娴嬮殰纰嶇墿杞�
-            boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
+            int checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
                 add(shuttleProtocol.getShuttleNo());
             }}, new ArrayList<>());
-            if (checkObstacle) {
+            if (checkObstacle > 0) {
                 News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
                 return false;
             }
@@ -372,10 +373,10 @@
             //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅
             if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
                 //妫�娴嬮殰纰嶇墿杞�
-                boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getSourceLocNo(), new ArrayList<Integer>() {{
+                int checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getSourceLocNo(), new ArrayList<Integer>() {{
                     add(shuttleProtocol.getShuttleNo());
                 }}, new ArrayList<>());
-                if (checkObstacle) {
+                if (checkObstacle > 0) {
                     News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
                     return false;
                 }
@@ -514,10 +515,10 @@
             }
 
             //妫�娴嬮殰纰嶇墿杞�
-            boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
+            int checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
                 add(shuttleProtocol.getShuttleNo());
             }}, new ArrayList<>());
-            if (checkObstacle) {
+            if (checkObstacle > 0) {
                 News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
                 return false;
             }
@@ -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());
                         }
                     }
                 }
@@ -1384,10 +1387,10 @@
             }
 
             //妫�娴嬮殰纰嶇墿杞�
-            boolean checkObstacle = shuttleOperaUtils.checkObstacle(basShuttleCharge.getWaitLocNo(), new ArrayList<Integer>() {{
+            int checkObstacle = shuttleOperaUtils.checkObstacle(basShuttleCharge.getWaitLocNo(), new ArrayList<Integer>() {{
                 add(shuttleProtocol.getShuttleNo());
             }}, new ArrayList<>());
-            if (checkObstacle) {
+            if (checkObstacle > 0) {
                 News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
                 return false;
             }
@@ -1485,36 +1488,20 @@
                 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(shuttleProtocol.getCurrentLocNo()));
+            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;
             }
-
-            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
-            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
-            assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟
-            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
-            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,11 +1510,21 @@
             //灏忚溅宸插湪杩戠偣浣嶇疆鏃犻渶鍓嶅線
             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);
                 return true;
             }
+
+            ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+            assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
+            assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟
+            assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�
+            assignCommand.setLocNo(endLocation);
+            assignCommand.setAuto(true);//鑷姩妯″紡
 
             //鑾峰彇灏忚溅鍒拌繎鐐硅璧板懡浠�
             List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), endLocation, NavigationMapType.getMapTypes(NavigationMapType.NORMAL, NavigationMapType.SHUTTLE), assignCommand, shuttleThread);
@@ -1539,6 +1536,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,8 +1626,9 @@
                 return false;
             }
 
-            int targetLev = Utils.getLev(wrkMast.getLocNo());
-            if (liftProtocol.getLev() != targetLev) {
+            Object object = redisUtil.get(RedisKeyType.LIFT_MOVE_TO_SHUTTLE_LIMIT.key + wrkMast.getWrkNo());
+            int targetLev = Utils.getLev(shuttleProtocol.getCurrentLocNo());
+            if (object == null || liftProtocol.getLev() != targetLev) {
                 //鑾峰彇鎻愬崌鏈哄懡浠�
                 LiftCommand liftCommand = liftThread.getMoveCommand(wrkMast.getWrkNo(), liftProtocol.getLev(), targetLev);
                 ArrayList<LiftCommand> commands = new ArrayList<>();
@@ -1639,21 +1639,26 @@
                 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());
+                redisUtil.set(RedisKeyType.LIFT_MOVE_TO_SHUTTLE_LIMIT.key + wrkMast.getWrkNo(), "lift_moving", 60 * 3);
                 return false;
             }
+
+            String liftLocNo = liftThread.getCurrentLocNo();
 
             ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
             assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
             assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟
             assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+            assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�
+            assignCommand.setLocNo(liftLocNo);
             assignCommand.setAuto(true);//鑷姩妯″紡
 
             //鑾峰彇灏忚溅鍒版彁鍗囨満琛岃蛋鍛戒护
-            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftThread.getCurrentLocNo(), NavigationMapType.getNormalWithDevice(), assignCommand, shuttleThread);
+            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftLocNo, NavigationMapType.getNormalWithDevice(), assignCommand, shuttleThread, "inLift");
             if (commands == null) {
                 News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
                 return false;//璺緞瑙i攣澶辫触
@@ -1724,7 +1729,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("");//娓呯┖娑堟伅
@@ -1764,25 +1769,57 @@
                 return false;
             }
 
+            if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
+                Object object = redisUtil.get(RedisKeyType.SHUTTLE_UPDATE_LOCATION.key + shuttleProtocol.getShuttleNo());
+                if(object != null) {
+                    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);
+                //涓嬪彂浠诲姟
+                shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+                redisUtil.set(RedisKeyType.SHUTTLE_UPDATE_LOCATION.key + shuttleProtocol.getShuttleNo(), "update", 10);
+                return false;
+            }
+
+            String targetLocNo = navigateUtils.calcFirstLocation(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 5);
+            if (targetLocNo == null) {//鍑烘彁鍗囨満杩戠偣璁$畻澶辫触
+                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.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟
             assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
             assignCommand.setAuto(true);//鑷姩妯″紡
             assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�
-            assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅
+            assignCommand.setLocNo(targetLocNo);//鐩爣搴撲綅
 
-            //鏇存柊灏忚溅鍧愭爣
-            ShuttleCommand command = shuttleThread.getUpdateLocationCommand(wrkMast.getWrkNo(), wrkMast.getLocNo());
-            ArrayList<ShuttleCommand> commands = new ArrayList<>();
-            commands.add(command);
-
+            //鑾峰彇灏忚溅鍒拌繎鐐瑰懡浠�
+            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), targetLocNo, NavigationMapType.getMapTypes(NavigationMapType.NORMAL), assignCommand, shuttleThread);
+            if (commands == null) {
+                News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
+                return false;//璺緞璁$畻澶辫触
+            }
             assignCommand.setCommands(commands);
 
             wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT.sts);//灏忚溅杩佸嚭鎻愬崌鏈轰腑
             wrkMast.setSystemMsg("");//娓呯┖娑堟伅
             wrkMast.setModiTime(now);
-
             if (wrkMastService.updateById(wrkMast)) {
                 //涓嬪彂浠诲姟
                 shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
@@ -1855,77 +1892,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);
-//                }
-//            }
-//        }
     }
 
 }

--
Gitblit v1.9.1