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 |   90 ++++++++++++++++++++++++++++++++------------
 1 files changed, 65 insertions(+), 25 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 6bc7288..9f5533e 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -182,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;
             }
@@ -373,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;
                 }
@@ -515,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;
             }
@@ -1387,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;
             }
@@ -1489,7 +1489,7 @@
             }
 
             //鎼滅储鏈�杩戜笖鏃犳晠闅滄彁鍗囨満
-            LiftStaProtocol recentLiftStation = liftDispatchUtils.getRecentLiftStation(shuttleProtocol.getShuttleNo(), Utils.getLev(wrkMast.getLocNo()));
+            LiftStaProtocol recentLiftStation = liftDispatchUtils.getRecentLiftStation(shuttleProtocol.getShuttleNo(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
             if(recentLiftStation == null) {
                 News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂茶緭閫佺珯鐐�", shuttleProtocol.getShuttleNo(), wrkMast.getLocNo());
                 return false;
@@ -1499,12 +1499,6 @@
             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(), recentLiftStation.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 1);
@@ -1523,6 +1517,14 @@
                 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);
@@ -1624,8 +1626,9 @@
                 return false;
             }
 
+            Object object = redisUtil.get(RedisKeyType.LIFT_MOVE_TO_SHUTTLE_LIMIT.key + wrkMast.getWrkNo());
             int targetLev = Utils.getLev(shuttleProtocol.getCurrentLocNo());
-            if (liftProtocol.getLev() != targetLev) {
+            if (object == null || liftProtocol.getLev() != targetLev) {
                 //鑾峰彇鎻愬崌鏈哄懡浠�
                 LiftCommand liftCommand = liftThread.getMoveCommand(wrkMast.getWrkNo(), liftProtocol.getLev(), targetLev);
                 ArrayList<LiftCommand> commands = new ArrayList<>();
@@ -1640,17 +1643,22 @@
                 //涓嬪彂浠诲姟
                 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, "inLift");
+            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攣澶辫触
@@ -1761,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);

--
Gitblit v1.9.1