From 901f9ca15fb0ce3bcf2ebf956c569c260050c561 Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期一, 07 四月 2025 13:10:54 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java | 90 ++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 85 insertions(+), 5 deletions(-) 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 28df8f4..3489ab7 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 @@ -34,6 +34,70 @@ private BasLiftService basLiftService; @Autowired private ShuttleStandbyService shuttleStandbyService; + @Autowired + private NavigateUtils navigateUtils; + + /** + * 鏍规嵁鐩爣浣嶇疆鎼滅储鎻愬崌鏈� + * 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 (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)); + + if (locNo.equals(liftLocNo)) { + finalDistance = 100; + recentLiftThread = liftThread; + continue; + } + + 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; + } /** * 鏍规嵁鐩爣浣嶇疆鎼滅储绌洪棽鎻愬崌鏈� @@ -80,11 +144,11 @@ } 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); + List<NavigateNode> nodeList = navigateUtils.calc(locNo, liftLocNo, NavigationMapType.NONE.id, null); if (nodeList == null) { continue; } - Integer originPathAllDistance = NavigateUtils.getOriginPathAllDistance(nodeList);//鎬昏窛绂� + Integer originPathAllDistance = navigateUtils.getOriginPathAllDistance(nodeList);//鎬昏窛绂� if (originPathAllDistance < finalDistance) { finalDistance = originPathAllDistance; recentLiftThread = liftThread; @@ -144,15 +208,15 @@ return standby.getLockPath$(); } - public Integer getLiftLevOffset(Integer deviceId,Integer lev) { + public Integer getLiftLevOffset(Integer deviceId, Integer lev) { BasLift basLift = basLiftService.getOne(new LambdaQueryWrapper<BasLift>().eq(BasLift::getDeviceId, deviceId)); if (basLift != null) { - if(Cools.isEmpty(basLift.getLevOffset())) { + if (Cools.isEmpty(basLift.getLevOffset())) { return lev; } List<BasLiftLevOffsetDto> levOffsetDtos = JSON.parseArray(basLift.getLevOffset(), BasLiftLevOffsetDto.class); for (BasLiftLevOffsetDto offsetDto : levOffsetDtos) { - if(lev == offsetDto.getLogicLev()){ + if (lev == offsetDto.getLogicLev()) { return offsetDto.getRealLev(); } } @@ -160,4 +224,20 @@ return lev; } + public Integer getLiftLevLogic(Integer deviceId, Integer lev) { + BasLift basLift = basLiftService.getOne(new LambdaQueryWrapper<BasLift>().eq(BasLift::getDeviceId, deviceId)); + if (basLift != null) { + if (Cools.isEmpty(basLift.getLevOffset())) { + return lev; + } + List<BasLiftLevOffsetDto> levOffsetDtos = JSON.parseArray(basLift.getLevOffset(), BasLiftLevOffsetDto.class); + for (BasLiftLevOffsetDto offsetDto : levOffsetDtos) { + if (lev == offsetDto.getRealLev()) { + return offsetDto.getLogicLev(); + } + } + } + return lev; + } + } -- Gitblit v1.9.1