From 314729da5f6f84a6112344a2210aadfeeb2bac0c Mon Sep 17 00:00:00 2001
From: zjj <3272660260@qq.com>
Date: 星期一, 21 四月 2025 10:35:43 +0800
Subject: [PATCH] #出库找待机位优化

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java                 |    4 ++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MapNodeType.java              |   49 ++++++++++++++++++++++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java               |   10 ++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java                |   13 +++---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java            |    1 
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java              |   19 +++++++++
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java |   21 ++++++++++
 7 files changed, 108 insertions(+), 9 deletions(-)

diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
index 0ed9518..b24f12a 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/AnalyzeService.java
@@ -477,10 +477,9 @@
             //绌挎杞﹀嚭鎻愬崌鏈哄緟鏈轰綅搴撲綅鍙�
             String standbyLocNoFrom = shuttleStandbyFrom.getDeviceStandbyLoc();
 
-            //绌挎杞﹀嚭鎻愬崌鏈哄悗灏忚溅寰呮満浣�
-            List<String> standbyLocs = shuttleStandbyFrom.getStandbyLoc$();//鑾峰彇鍏ㄩ儴寰呮満浣�
-            //鑾峰彇鍙敤寰呮満浣�
-            String shuttleFromLiftStandbyLoc = shuttleDispatcher.searchAvailableLocNo(Integer.valueOf(shuttleDevice.getDeviceNo()), shuttleDevice.getHostId(), shuttleThread.getStatus().getCurrentLocNo(), standbyLocs);
+            //绌挎杞﹀嚭鎻愬崌鏈哄悗鍏ㄩ儴寰呮満浣�
+            String standbyLocs = shuttleStandbyFrom.getStandbyLoc();//鑾峰彇鍏ㄩ儴寰呮満浣�
+
 
             //鑾峰彇鍑哄簱浠诲姟绫诲瀷
             TaskCtg taskCtg = taskCtgService.getOne(new LambdaQueryWrapper<TaskCtg>()
@@ -635,7 +634,7 @@
                         })),
                         MotionDto.build((dto -> {
                             dto.setShuttleNo(shuttleDevice.getId().intValue());
-                            dto.setLocNo(shuttleFromLiftStandbyLoc);
+                            dto.setLocNo(standbyLocs);
                         })),
                         MotionCtgType.SHUTTLE_MOVE
                 ));
@@ -904,9 +903,9 @@
                         })),
                         MotionDto.build((dto -> {
                             dto.setShuttleNo(shuttleDevice.getId().intValue());
-                            dto.setLocNo(shuttleFromLiftStandbyLoc);
+                            dto.setLocNo(standbyLocs);
                         })),
-                        MotionCtgType.SHUTTLE_MOVE
+                        MotionCtgType.SHUTTLE_MOVE_STANDBY
                 ));
 
                 // 杈撻�佺嚎杩愯緭鑷冲嚭搴撳彛
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
index d827bd6..d4f494a 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/KernelService.java
@@ -323,6 +323,10 @@
                 case SHUTTLE_TRANSPORT_TO_CONVEYOR:
                     motion.setDockNo(String.valueOf(target.getStaNo()));
                     break;
+                case SHUTTLE_MOVE_STANDBY://绌挎杞︾Щ鍔ㄥ埌寰呮満浣�
+                    motion.setTarget(null);//绛夊緟鑷姩鎼滅储
+                    motion.setTemp(target.getLocNo());//鍏ㄩ儴寰呮満浣�
+                    break;
                 default:
                     break;
             }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
index 8fafb60..cd23078 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java
@@ -1,5 +1,6 @@
 package com.zy.asrs.wcs.core.kernel.command;
 
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zy.asrs.framework.common.Cools;
 import com.zy.asrs.framework.exception.CoolException;
@@ -18,6 +19,7 @@
 import com.zy.asrs.wcs.rcs.News;
 import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
 import com.zy.asrs.wcs.core.entity.Motion;
+import com.zy.asrs.wcs.rcs.entity.Device;
 import com.zy.asrs.wcs.rcs.model.enums.ShuttleProtocolStatusType;
 import com.zy.asrs.wcs.rcs.model.enums.SlaveType;
 import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol;
@@ -58,6 +60,8 @@
     private LiftAction liftAction;
     @Autowired
     private LiftDispatcher liftDispatcher;
+    @Autowired
+    private ShuttleDispatcher shuttleDispatcher;
 
     // 璁$畻
     public Boolean accept(Motion motion) {
@@ -70,7 +74,7 @@
         if (null == shuttleProtocol) {
             return false;
         }
-
+        Device shuttleDevice = shuttleThread.getDevice();
         if (!shuttleThread.isIdle(new ExecuteSupport() {
             @Override
             public Boolean judgement() {
@@ -223,6 +227,21 @@
                 shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_UPDATE_LOCATION;
                 shuttleCommands.add(shuttleThread.getUpdateLocationCommand(motion.getTaskNo(), motion.getTarget()));
                 break;
+            case SHUTTLE_MOVE_STANDBY://绌挎杞︾Щ鍔ㄥ埌寰呮満浣�
+                shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE_LOC_NO;
+
+                //鑾峰彇鍏ㄩ儴寰呮満浣�
+                List<String> standbyLocs = JSON.parseArray(motion.getTemp(), String.class);
+                //鑾峰彇鍙敤寰呮満浣�
+                String shuttleFromLiftStandbyLoc = shuttleDispatcher.searchAvailableLocNo(Integer.valueOf(shuttleDevice.getDeviceNo()), shuttleDevice.getHostId(), shuttleThread.getStatus().getCurrentLocNo(), standbyLocs);
+                shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), shuttleFromLiftStandbyLoc, NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
+
+                //鏇存柊鍔ㄤ綔鍙敤寰呮満浣�
+                motion.setTarget(shuttleFromLiftStandbyLoc);
+                motion.setUpdateTime(new Date());
+                motionService.updateById(motion);
+
+                break;
             default:
                 throw new CoolException(motion.getMotionCtgEl() + "娌℃湁鎸囧畾浠诲姟浣滀笟娴佺▼锛侊紒锛�");
         }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MapNodeType.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MapNodeType.java
new file mode 100644
index 0000000..45615c9
--- /dev/null
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MapNodeType.java
@@ -0,0 +1,49 @@
+package com.zy.asrs.wcs.core.model.enums;
+
+public enum MapNodeType {
+
+    DISABLE(-1, "绂佺敤"),
+    NORMAL_PATH(0, "璐т綅"),
+    START_POINT(1, "璧风偣"),
+    TARGET_POINT(2, "缁堢偣"),
+    MAIN_PATH(3, "姣嶈建"),
+    CONVEYOR(4, "杈撻�佺珯鐐�"),
+    CHARGE(5, "鍏呯數妗�"),
+    CONVEYOR_CAR_GO(6, "灏忚溅鍙蛋杈撻�佺珯鐐�"),
+    CAR(66, "灏忚溅"),
+    LIFT(67, "鎻愬崌鏈�"),
+    LOCK(-999, "閿佸畾鑺傜偣"),
+    ;
+
+    public Integer id;
+    public String desc;
+
+    MapNodeType(Integer id, String desc) {
+        this.id = id;
+        this.desc = desc;
+    }
+
+    public static MapNodeType get(Short id) {
+        if (null == id) {
+            return null;
+        }
+        for (MapNodeType type : MapNodeType.values()) {
+            if (type.id.equals(id.intValue())) {
+                return type;
+            }
+        }
+        return null;
+    }
+
+    public static MapNodeType get(MapNodeType type) {
+        if (null == type) {
+            return null;
+        }
+        for (MapNodeType type1 : MapNodeType.values()) {
+            if (type1 == type) {
+                return type1;
+            }
+        }
+        return null;
+    }
+}
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java
index 9129fa2..97dbb55 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/model/enums/MotionCtgType.java
@@ -40,6 +40,7 @@
     SHUTTLE_MOVE_TO_LIFT(SHUTTLE),
     SHUTTLE_MOVE_FROM_CONVEYOR(SHUTTLE),
     SHUTTLE_MOVE_TO_CONVEYOR(SHUTTLE),
+    SHUTTLE_MOVE_STANDBY(SHUTTLE),
 
     SHUTTLE_MOVE_FROM_LIFT_TO_CONVEYOR(SHUTTLE),
 
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
index 4cbfc4a..67536be 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/NavigateSolution.java
@@ -4,8 +4,10 @@
 import com.zy.asrs.framework.common.SpringUtils;
 import com.zy.asrs.framework.exception.CoolException;
 import com.zy.asrs.wcs.core.model.NavigateNode;
+import com.zy.asrs.wcs.core.model.enums.MapNodeType;
 import com.zy.asrs.wcs.system.entity.Dict;
 import com.zy.asrs.wcs.system.service.DictService;
+
 
 import java.util.ArrayList;
 import java.util.List;
@@ -204,7 +206,13 @@
             return false;
         }
         // 濡傛灉缁撶偣鐨勪綅缃皬浜�0锛屽垯涓嶅悎娉�
-        if (map[x][y] < 0) return false;
+        if (map[x][y] < 0) {
+            return false;
+        }
+
+        if (map[x][y] == MapNodeType.CAR.id) {//鑺傜偣鏄皬杞�
+            return false;
+        }
         NavigateNode navigateNode = new NavigateNode(x, y);
         if (is_exist(navigateNode)) {
             return false;
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
index c307a4d..fd56853 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/ShuttleDispatcher.java
@@ -488,6 +488,25 @@
 
         return levCount < Integer.parseInt(dict.getValue());
     }
+    //鍒嗘瀽鍑哄簱璺緞寰呮満搴撲綅
+    public String analyzeOutPathWaitLoc(String startLoc, String targetLoc, Device shuttleDevice) {
+        //璁$畻璺緞骞跺垎瑙f垚涓ゆ鍔ㄤ綔
+        List<NavigateNode> nodeList = NavigateUtils.calc(startLoc, targetLoc, NavigationMapType.DFX.id, Utils.getShuttlePoints(Integer.parseInt(shuttleDevice.getDeviceNo()), Utils.getLev(startLoc)));
+        if (nodeList == null) {
+            News.error("{} dash {} can't find navigate path!", startLoc, targetLoc);
+            return null;
+        }
+        //鑾峰彇鍒嗘璺緞
+        ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(nodeList);
+        if (data.size() <= 1) {
+            return null;//涓ょ偣涔嬮棿鍙湁涓�娈佃矾寰�
+        }
 
+        //鍙栧嚭鍊掓暟绗簩娈佃矾寰�
+        ArrayList<NavigateNode> navigateNodes = data.get(data.size() - 2);
+        NavigateNode startNode = navigateNodes.get(0);
+        String lastPathStartLoc = Utils.getLocNo(startNode.getX(), startNode.getY(), startNode.getZ());
+        return lastPathStartLoc;
+    }
 
 }

--
Gitblit v1.9.1