From d56b8093dc9e3e75f8efe1a0f1aa6d821c9c3dfb Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期二, 15 四月 2025 13:30:35 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/kernel/command/ShuttleCommandService.java | 127 +++++++++++++++++++---------------------- 1 files changed, 59 insertions(+), 68 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..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,15 +135,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 +150,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 +195,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 +204,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 +214,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)); @@ -372,17 +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(); - 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; - } - } //鏇存柊鍔ㄤ綔鍙敤寰呮満浣� motion.setTarget(shuttleFromLiftStandbyLoc); @@ -701,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