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 | 63 +++++++++++++++++++++++++++++++ 1 files changed, 63 insertions(+), 0 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 b58abda..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 @@ -3,6 +3,7 @@ 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.common.SpringUtils; import com.zy.asrs.framework.exception.CoolException; import com.zy.asrs.wcs.common.ExecuteSupport; import com.zy.asrs.wcs.core.action.LiftAction; @@ -24,6 +25,8 @@ import com.zy.asrs.wcs.rcs.thread.DevpThread; import com.zy.asrs.wcs.rcs.thread.LiftThread; import com.zy.asrs.wcs.rcs.thread.ShuttleThread; +import com.zy.asrs.wcs.system.entity.Dict; +import com.zy.asrs.wcs.system.service.DictService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -65,6 +68,8 @@ private ShuttleDispatcher shuttleDispatcher; @Autowired private NavigateUtils navigateUtils; + @Autowired + private DictService dictService; // 璁$畻 public Boolean accept(Motion motion) { @@ -128,6 +133,11 @@ } shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.NORMAL.id, assignCommand, shuttleThread); shuttleTaskModeType = ShuttleTaskModeType.SHUTTLE_MOVE; + + if (!checkSimilarityPath(motion, assignCommand)) { + return false; + } + break; case SHUTTLE_TRANSPORT://绌挎杞﹁浇璐ц璧� // 濡傛灉宸茬粡鍦ㄥ綋鍓嶆潯鐮佸垯杩囨护 @@ -138,6 +148,10 @@ } shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread); shuttleTaskModeType = ShuttleTaskModeType.TRANSPORT; + + if (!checkSimilarityPath(motion, assignCommand)) { + return false; + } if (motion.getReleaseLift() == 2) {//鎵ц涓噴鏀炬彁鍗囨満 task.setLiftNo(0); @@ -179,15 +193,30 @@ } shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread); shuttleTaskModeType = ShuttleTaskModeType.TRANSPORT_TO_CONVEYOR; + + if (!checkSimilarityPath(motion, assignCommand)) { + return false; + } + break; case SHUTTLE_MOVE_LIFT_PALLET://绌挎杞﹂《鍗囧苟绉诲姩 shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread); shuttleTaskModeType = ShuttleTaskModeType.MOVE_PALLET_LIFT; + + if (!checkSimilarityPath(motion, assignCommand)) { + return false; + } + shuttleCommands.add(0, shuttleThread.getLiftCommand(motion.getTaskNo(), true)); break; case SHUTTLE_MOVE_DOWN_PALLET://绌挎杞︾Щ鍔ㄥ苟鎵樼洏涓嬮檷 shuttleCommands = this.shuttleAssignCommand(motion.getOrigin(), motion.getTarget(), NavigationMapType.DFX.id, assignCommand, shuttleThread); shuttleTaskModeType = ShuttleTaskModeType.MOVE_PALLET_DOWN; + + if (!checkSimilarityPath(motion, assignCommand)) { + return false; + } + shuttleCommands.add(shuttleCommands.size(), shuttleThread.getLiftCommand(motion.getTaskNo(), false)); break; case SHUTTLE_MOVE_FROM_LIFT://鍑烘彁鍗囨満 @@ -296,6 +325,10 @@ //鑾峰彇鍙敤寰呮満浣� 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); + + if (!checkSimilarityPath(motion, assignCommand)) { + return false; + } //鏇存柊鍔ㄤ綔鍙敤寰呮満浣� motion.setTarget(shuttleFromLiftStandbyLoc); @@ -614,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; + } + } -- Gitblit v1.9.1