| | |
| | | import com.zy.asrs.wcs.rcs.model.enums.SlaveType; |
| | | import com.zy.asrs.wcs.rcs.model.protocol.ShuttleProtocol; |
| | | import com.zy.asrs.wcs.rcs.service.DeviceService; |
| | | 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; |
| | |
| | | continue; |
| | | } |
| | | |
| | | Device recentTransferLift = Utils.getRecentTransferLift(locNo, Integer.parseInt(device.getDeviceNo())); |
| | | if (recentTransferLift == null) { |
| | | //获取距离目标位置最近的空闲可换层提升机 |
| | | LiftThread liftThread = liftDispatcher.searchIdleLift(locNo, task.getHostId(), true); |
| | | if (liftThread == null) { |
| | | continue; |
| | | } |
| | | Device recentTransferLift = liftThread.getDevice(); |
| | | |
| | | //获取小车楼层提升机待机位 |
| | | ShuttleStandby shuttleStandby = shuttleStandbyService.getOne(new LambdaQueryWrapper<ShuttleStandby>() |
| | |
| | | } |
| | | |
| | | // 挂载任务权重 |
| | | List<Task> tasks = taskService.selectWorkingByShuttle(Integer.valueOf(device.getDeviceNo())); |
| | | List<Task> tasks = taskService.selectWorkingByShuttle(Integer.valueOf(device.getDeviceNo()), null); |
| | | if (!Cools.isEmpty(tasks)) { |
| | | currDistance += tasks.size() * WEIGHT; |
| | | } |
| | |
| | | } |
| | | |
| | | int lev = Utils.getLev(locNo);//当前楼层 |
| | | JSONArray standbyLoc = JSON.parseArray(idleLoc); |
| | | if (lev > standbyLoc.size()) { |
| | | List<String> standbyLoc = JSON.parseArray(idleLoc, String.class); |
| | | if (standbyLoc.isEmpty()) { |
| | | throw new CoolException("避让数据异常"); |
| | | } |
| | | |
| | | Object object = standbyLoc.get(lev - 1); |
| | | List<String> locs = JSON.parseArray(object.toString(), String.class); |
| | | if (locs.isEmpty()) { |
| | | throw new CoolException("避让数据为空"); |
| | | //获取当前层避让位置 |
| | | List<String> currentLevStandByLoc = new ArrayList<>(); |
| | | for (String loc : standbyLoc) { |
| | | if (Utils.getLev(loc) == lev) { |
| | | currentLevStandByLoc.add(loc); |
| | | } |
| | | } |
| | | if (currentLevStandByLoc.isEmpty()) { |
| | | throw new CoolException("当前层无避让位置"); |
| | | } |
| | | |
| | | Integer finalDistance = ShuttleDispatcher.INF; |
| | | String recentLoc = null; |
| | | for (String loc : locs) { |
| | | for (String loc : currentLevStandByLoc) { |
| | | //当前穿梭车到避让位计算 |
| | | List<NavigateNode> currentShuttlePath = NavigateUtils.calc( |
| | | locNo |