From 6a5e440f1f91535b901f856b56d27cfe36840813 Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期三, 11 十二月 2024 16:41:53 +0800
Subject: [PATCH] #path similarity

---
 zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java |  105 +++++++++++++++++++++++++++-------------------------
 1 files changed, 54 insertions(+), 51 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 f595685..ad64f8b 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
@@ -16,6 +16,7 @@
 import com.zy.asrs.wcs.core.utils.*;
 import com.zy.asrs.wcs.rcs.News;
 import com.zy.asrs.wcs.rcs.cache.SlaveConnection;
+import com.zy.asrs.wcs.rcs.constant.DeviceRedisConstant;
 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;
@@ -109,14 +110,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 +123,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,12 +135,7 @@
                 shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread);
                 shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE;
 
-                movePath = motion.getMovePath();
-                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());
+                if (!checkSimilarityPath(motion, assignCommand)) {
                     return false;
                 }
 
@@ -166,12 +150,7 @@
                 shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
                 shuttleTaskModeType = ShuttleTaskModeType.TRANSPORT;
 
-                movePath = motion.getMovePath();
-                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());
+                if (!checkSimilarityPath(motion, assignCommand)) {
                     return false;
                 }
 
@@ -216,12 +195,7 @@
                 shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
                 shuttleTaskModeType = ShuttleTaskModeType.TRANSPORT_TO_CONVEYOR;
 
-                movePath = motion.getMovePath();
-                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());
+                if (!checkSimilarityPath(motion, assignCommand)) {
                     return false;
                 }
 
@@ -230,12 +204,7 @@
                 shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
                 shuttleTaskModeType = ShuttleTaskModeType.MOVE_PALLET_LIFT;
 
-                movePath = motion.getMovePath();
-                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());
+                if (!checkSimilarityPath(motion, assignCommand)) {
                     return false;
                 }
 
@@ -245,12 +214,7 @@
                 shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread);
                 shuttleTaskModeType = ShuttleTaskModeType.MOVE_PALLET_DOWN;
 
-                movePath = motion.getMovePath();
-                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());
+                if (!checkSimilarityPath(motion, assignCommand)) {
                     return false;
                 }
 
@@ -362,15 +326,6 @@
                 //鑾峰彇鍙敤寰呮満浣�
                 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();
-                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;
-                }
 
                 //鏇存柊鍔ㄤ綔鍙敤寰呮満浣�
                 motion.setTarget(shuttleFromLiftStandbyLoc);
@@ -689,5 +644,53 @@
         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) {
+            Object object = redisUtil.get(DeviceRedisConstant.SIMILARITY_TIMES + motion.getTaskNo());
+            if (object == null) {
+                redisUtil.set(DeviceRedisConstant.SIMILARITY_TIMES + motion.getTaskNo(), System.currentTimeMillis(), 60 * 60 * 24);
+            }else {
+                long similarityTimeoutRef = 20L;//榛樿瓒呮椂20s
+                Dict similarityTimeoutDict = dictService.getOne(new LambdaQueryWrapper<Dict>()
+                        .eq(Dict::getFlag, "similarityTimeout")
+                        .eq(Dict::getStatus, 1));
+                if (similarityTimeoutDict != null) {
+                    similarityTimeoutRef = Long.parseLong(similarityTimeoutDict.getValue());
+                }
+
+                long recordTime = Long.parseLong(object.toString());
+                if (System.currentTimeMillis() - recordTime > (60 * similarityTimeoutRef)) {
+                    //瓒呮椂锛岀洿鎺ユ斁琛�
+                    return true;
+                }
+            }
+            News.error("{} dash {} path similarity mismatch!", motion.getOrigin(), motion.getTarget());
+            return false;
+        }
+
+        return true;
+    }
+
 
 }

--
Gitblit v1.9.1