From 81188cbe3d51e951ce4c853edb886272a4eb51a3 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期三, 11 十二月 2024 15:59:00 +0800
Subject: [PATCH] #path similarity

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java |  108 ++++++++++++++----------------------
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java                 |   59 +++++++++++++++++++
 2 files changed, 101 insertions(+), 66 deletions(-)

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 d484864..f3e8394 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
@@ -109,14 +109,6 @@
             return false;
         }
 
-        Double similarityRef = 0.9D;
-        Dict similarityRefDict = dictService.getOne(new LambdaQueryWrapper<Dict>()
-                .eq(Dict::getFlag, "similarityRef")
-                .eq(Dict::getStatus, 1));
-        if (similarityRefDict != null) {
-            similarityRef = Double.parseDouble(similarityRefDict.getValue());
-        }
-
         ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
         assignCommand.setShuttleNo(deviceNo);
         assignCommand.setTaskNo(motion.getTaskNo());
@@ -130,10 +122,6 @@
 
         LiftThread liftThread = null;
         LiftProtocol liftProtocol = null;
-        String movePath = null;
-        List<NavigateNode> originPath = null;
-        List<NavigateNode> finalPath = null;
-        Double similarity = null;
 
         switch (Objects.requireNonNull(MotionCtgType.get(motion.getMotionCtgEl()))){
             case SHUTTLE_MOVE:
@@ -146,15 +134,8 @@
                 shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
                 shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE;
 
-                movePath = motion.getMovePath();
-                if (!Cools.isEmpty(movePath)) {
-                    originPath = JSON.parseArray(movePath, NavigateNode.class);
-                    finalPath = assignCommand.getNodes();
-                    similarity = navigateUtils.similarityPath(originPath, finalPath);
-                    if(similarity <= similarityRef) {
-                        News.error("{} dash {} path similarity mismatch!", motion.getOrigin(), motion.getTarget());
-                        return false;
-                    }
+                if (!checkSimilarityPath(motion, assignCommand)) {
+                    return false;
                 }
 
                 break;
@@ -168,15 +149,8 @@
                 shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
                 shuttleTaskModeType = ShuttleTaskModeType.TRANSPORT;
 
-                movePath = motion.getMovePath();
-                if (!Cools.isEmpty(movePath)) {
-                    originPath = JSON.parseArray(movePath, NavigateNode.class);
-                    finalPath = assignCommand.getNodes();
-                    similarity = navigateUtils.similarityPath(originPath, finalPath);
-                    if(similarity <= similarityRef) {
-                        News.error("{} dash {} path similarity mismatch!", motion.getOrigin(), motion.getTarget());
-                        return false;
-                    }
+                if (!checkSimilarityPath(motion, assignCommand)) {
+                    return false;
                 }
 
                 if (motion.getReleaseLift() == 2) {//鎵ц涓噴鏀炬彁鍗囨満
@@ -220,15 +194,8 @@
                 shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
                 shuttleTaskModeType = ShuttleTaskModeType.TRANSPORT_TO_CONVEYOR;
 
-                movePath = motion.getMovePath();
-                if (!Cools.isEmpty(movePath)) {
-                    originPath = JSON.parseArray(movePath, NavigateNode.class);
-                    finalPath = assignCommand.getNodes();
-                    similarity = navigateUtils.similarityPath(originPath, finalPath);
-                    if(similarity <= similarityRef) {
-                        News.error("{} dash {} path similarity mismatch!", motion.getOrigin(), motion.getTarget());
-                        return false;
-                    }
+                if (!checkSimilarityPath(motion, assignCommand)) {
+                    return false;
                 }
 
                 break;
@@ -236,15 +203,8 @@
                 shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
                 shuttleTaskModeType = ShuttleTaskModeType.MOVE_PALLET_LIFT;
 
-                movePath = motion.getMovePath();
-                if (!Cools.isEmpty(movePath)) {
-                    originPath = JSON.parseArray(movePath, NavigateNode.class);
-                    finalPath = assignCommand.getNodes();
-                    similarity = navigateUtils.similarityPath(originPath, finalPath);
-                    if(similarity <= similarityRef) {
-                        News.error("{} dash {} path similarity mismatch!", motion.getOrigin(), motion.getTarget());
-                        return false;
-                    }
+                if (!checkSimilarityPath(motion, assignCommand)) {
+                    return false;
                 }
 
                 shuttleCommands.add(0, shuttleThread.getLiftCommand(motion.getTaskNo(), true));
@@ -253,15 +213,8 @@
                 shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
                 shuttleTaskModeType = ShuttleTaskModeType.MOVE_PALLET_DOWN;
 
-                movePath = motion.getMovePath();
-                if (!Cools.isEmpty(movePath)) {
-                    originPath = JSON.parseArray(movePath, NavigateNode.class);
-                    finalPath = assignCommand.getNodes();
-                    similarity = navigateUtils.similarityPath(originPath, finalPath);
-                    if(similarity <= similarityRef) {
-                        News.error("{} dash {} path similarity mismatch!", motion.getOrigin(), motion.getTarget());
-                        return false;
-                    }
+                if (!checkSimilarityPath(motion, assignCommand)) {
+                    return false;
                 }
 
                 shuttleCommands.add(shuttleCommands.size(), shuttleThread.getLiftCommand(motion.getTaskNo(), false));
@@ -373,15 +326,8 @@
                 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);
 
-                movePath = motion.getMovePath();
-                if (!Cools.isEmpty(movePath)) {
-                    originPath = JSON.parseArray(movePath, NavigateNode.class);
-                    finalPath = assignCommand.getNodes();
-                    similarity = navigateUtils.similarityPath(originPath, finalPath);
-                    if(similarity <= similarityRef) {
-                        News.error("{} dash {} path similarity mismatch!", motion.getOrigin(), motion.getTarget());
-                        return false;
-                    }
+                if (!checkSimilarityPath(motion, assignCommand)) {
+                    return false;
                 }
 
                 //鏇存柊鍔ㄤ綔鍙敤寰呮満浣�
@@ -701,5 +647,35 @@
         return commands;
     }
 
+    private boolean checkSimilarityPath(Motion motion, ShuttleAssignCommand assignCommand) {
+        String movePath = motion.getMovePath();
+        if (Cools.isEmpty(movePath)) {
+            return false;
+        }
+
+        Double similarityRef = 0.9D;
+        Dict similarityRefDict = dictService.getOne(new LambdaQueryWrapper<Dict>()
+                .eq(Dict::getFlag, "similarityRef")
+                .eq(Dict::getStatus, 1));
+        if (similarityRefDict != null) {
+            similarityRef = Double.parseDouble(similarityRefDict.getValue());
+        }
+
+        List<NavigateNode> originPath = JSON.parseArray(movePath, NavigateNode.class);
+        List<NavigateNode> finalPath = assignCommand.getNodes();
+
+        if (finalPath == null) {
+            return false;
+        }
+
+        Double similarity = navigateUtils.similarityPath(originPath, finalPath);
+        if (similarity <= similarityRef) {
+            News.error("{} dash {} path similarity mismatch!", motion.getOrigin(), motion.getTarget());
+            return false;
+        }
+
+        return true;
+    }
+
 
 }
diff --git a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java
index 50f9538..af6aa85 100644
--- a/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java
+++ b/zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java
@@ -41,6 +41,65 @@
      * 鏍规嵁鐩爣浣嶇疆鎼滅储绌洪棽鎻愬崌鏈�
      * transfer: 鏄惁鍙崲灞�
      */
+    public LiftThread searchLift(String locNo, Long hostId, Boolean transfer) {
+        LiftThread recentLiftThread = null;
+        Integer finalDistance = Integer.MAX_VALUE;
+        List<Device> list = deviceService.list(new LambdaQueryWrapper<Device>()
+                .eq(Device::getDeviceType, DeviceCtgType.LIFT.val())
+                .eq(Device::getHostId, hostId)
+                .eq(Device::getStatus, 1));
+        for (Device device : list) {
+            LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, device.getId().intValue());
+            if (liftThread == null) {
+                continue;
+            }
+
+            LiftProtocol liftProtocol = liftThread.getStatus();
+            if (liftProtocol == null) {
+                continue;
+            }
+
+            if (!liftThread.isIdle()) {
+                continue;
+            }
+
+            if (transfer) {
+                BasLift basLift = basLiftService.getOne(new LambdaQueryWrapper<BasLift>().eq(BasLift::getLiftNo, device.getDeviceNo()).eq(BasLift::getHostId, hostId));
+                if (basLift == null) {
+                    continue;
+                }
+                if (basLift.getTransfer() != 1) {
+                    continue;//鎻愬崌鏈鸿璁剧疆鎴愪笉鍙崲灞�
+                }
+            }
+
+            ShuttleStandby standby = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>()
+                    .eq(ShuttleStandby::getDeviceId, device.getId())
+                    .eq(ShuttleStandby::getDeviceLev, Utils.getLev(locNo))
+                    .eq(ShuttleStandby::getStatus, 1));
+            if (standby == null) {
+                continue;
+            }
+
+            String liftLocNo = Utils.getLocNo(Utils.getRow(standby.getDeviceStandbyLoc()), Utils.getBay(standby.getDeviceStandbyLoc()), Utils.getLev(locNo));
+            List<NavigateNode> nodeList = navigateUtils.calc(locNo, liftLocNo, NavigationMapType.NONE.id, null);
+            if (nodeList == null) {
+                continue;
+            }
+            Integer originPathAllDistance = navigateUtils.getOriginPathAllDistance(nodeList);//鎬昏窛绂�
+            if (originPathAllDistance < finalDistance) {
+                finalDistance = originPathAllDistance;
+                recentLiftThread = liftThread;
+            }
+        }
+
+        return recentLiftThread;
+    }
+
+    /**
+     * 鏍规嵁鐩爣浣嶇疆鎼滅储绌洪棽鎻愬崌鏈�
+     * transfer: 鏄惁鍙崲灞�
+     */
     public LiftThread searchIdleLift(String locNo, Long hostId, Boolean transfer) {
         LiftThread recentLiftThread = null;
         Integer finalDistance = Integer.MAX_VALUE;

--
Gitblit v1.9.1