From 2d07710d47f88a1d76e12cda1144cb2f288bf5ae Mon Sep 17 00:00:00 2001 From: Junjie <xjj@123> Date: 星期二, 23 四月 2024 13:14:15 +0800 Subject: [PATCH] # --- zy-asrs-wcs/src/main/java/com/zy/asrs/wcs/core/utils/LiftDispatcher.java | 102 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 98 insertions(+), 4 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 f849ab6..928c2e7 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 @@ -1,10 +1,24 @@ package com.zy.asrs.wcs.core.utils; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.zy.asrs.wcs.core.entity.BasLift; +import com.zy.asrs.wcs.core.entity.ShuttleStandby; +import com.zy.asrs.wcs.core.model.NavigateNode; +import com.zy.asrs.wcs.core.model.enums.DeviceCtgType; +import com.zy.asrs.wcs.core.model.enums.NavigationMapType; import com.zy.asrs.wcs.core.model.enums.WorkZoneType; +import com.zy.asrs.wcs.core.service.BasLiftService; +import com.zy.asrs.wcs.core.service.ShuttleStandbyService; import com.zy.asrs.wcs.rcs.cache.SlaveConnection; +import com.zy.asrs.wcs.rcs.entity.Device; import com.zy.asrs.wcs.rcs.model.enums.SlaveType; +import com.zy.asrs.wcs.rcs.model.protocol.LiftProtocol; +import com.zy.asrs.wcs.rcs.service.DeviceService; import com.zy.asrs.wcs.rcs.thread.LiftThread; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + +import java.util.List; /** * Created by vincent on 2023/10/16 @@ -12,10 +26,90 @@ @Service public class LiftDispatcher { - public LiftThread queryLiftForTransport(String staNo) { - WorkZoneType zoneType = WorkZoneType.query(staNo); - LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, zoneType.liftNo); - return liftThread; + @Autowired + private DeviceService deviceService; + @Autowired + private BasLiftService basLiftService; + @Autowired + private ShuttleStandbyService shuttleStandbyService; + + /** + * 鏍规嵁鐩爣浣嶇疆鎼滅储绌洪棽鎻愬崌鏈� + */ + public LiftThread searchIdleLift(String locNo, Long hostId) { + 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; + } + + 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); + Integer originPathAllDistance = NavigateUtils.getOriginPathAllDistance(nodeList);//鎬昏窛绂� + if (originPathAllDistance < finalDistance) { + finalDistance = originPathAllDistance; + recentLiftThread = liftThread; + } + } + + return recentLiftThread; + } + + /** + * 鑾峰彇鎻愬崌鏈轰綅缃� + */ + public String getLiftLocNo(LiftThread liftThread, Integer lev) { + Device device = liftThread.getDevice(); + ShuttleStandby standby = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>() + .eq(ShuttleStandby::getDeviceId, device.getId()) + .eq(ShuttleStandby::getDeviceLev, lev) + .eq(ShuttleStandby::getStatus, 1)); + if (standby == null) { + return null; + } + + String liftLocNo = Utils.getLocNo(Utils.getRow(standby.getDeviceLoc()), Utils.getBay(standby.getDeviceLoc()), lev); + return liftLocNo; + } + + /** + * 鑾峰彇鎻愬崌鏈哄緟鏈轰綅浣嶇疆 + */ + public String getLiftStandByLocNo(LiftThread liftThread, Integer lev) { + Device device = liftThread.getDevice(); + ShuttleStandby standby = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>() + .eq(ShuttleStandby::getDeviceId, device.getId()) + .eq(ShuttleStandby::getDeviceLev, lev) + .eq(ShuttleStandby::getStatus, 1)); + if (standby == null) { + return null; + } + + String liftLocNo = Utils.getLocNo(Utils.getRow(standby.getDeviceStandbyLoc()), Utils.getBay(standby.getDeviceStandbyLoc()), lev); + return liftLocNo; } } -- Gitblit v1.9.1