|  |  |  | 
|---|
|  |  |  | //未找到路径,等待下一次 | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //所使用的路径进行临时解锁,用于后续计算 | 
|---|
|  |  |  | NavigateMapData navigateMapData = new NavigateMapData(currentLev); | 
|---|
|  |  |  | navigateMapData.writeNavigateNodeToRedisMap(assignCommand.getNodes(), false);//所使用的路径进行临时解锁 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //任务执行完后,小车进入移开提升机口站点位置,以免坠落 | 
|---|
|  |  |  | //搜索一条没有小车的空巷道,并调度小车 | 
|---|
|  |  |  | int distLev = Utils.getLev(liftSiteLocNo);//避让楼层 | 
|---|
|  |  |  | String startLocNo = "180020" + Utils.getLev(liftSiteLocNo); | 
|---|
|  |  |  | ShuttleAssignCommand moveAssignCommand = Utils.searchEmptyGroupToMoveShuttle(distLev, shuttleThread.getSlave().getId(), shuttleThread, startLocNo); | 
|---|
|  |  |  | if (moveAssignCommand == null) {//调度小车命令为空 | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //所使用的路径进行临时解锁,用于后续计算 | 
|---|
|  |  |  | navigateMapData.writeNavigateNodeToRedisMap(moveAssignCommand.getNodes(), false);//所使用的路径进行临时解锁 | 
|---|
|  |  |  | commands.addAll(moveAssignCommand.getCommands());//将避让小车的命令添加 | 
|---|
|  |  |  | List<NavigateNode> nodes = assignCommand.getNodes();//将避让路径添加进节点路径中 | 
|---|
|  |  |  | nodes.addAll(moveAssignCommand.getNodes());//将避让路径添加进节点路径中 | 
|---|
|  |  |  | assignCommand.setNodes(nodes); | 
|---|
|  |  |  | navigateMapData.writeNavigateNodeToRedisMap(nodes, true);//所使用的路径进行锁定 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //分配目标库位 | 
|---|
|  |  |  | shuttleProtocol.setLocNo(wrkMast.getSourceLocNo()); | 
|---|
|  |  |  | 
|---|
|  |  |  | if (commands == null) { | 
|---|
|  |  |  | continue;//未找到路径 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //所使用的路径进行临时解锁,用于后续计算 | 
|---|
|  |  |  | NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(liftSiteLocNo)); | 
|---|
|  |  |  | navigateMapData.writeNavigateNodeToRedisMap(assignCommand.getNodes(), false);//所使用的路径进行临时解锁 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //任务执行完后,小车进入移开提升机口站点位置,以免坠落 | 
|---|
|  |  |  | //搜索一条没有小车的空巷道,并调度小车 | 
|---|
|  |  |  | int distLev = Utils.getLev(liftSiteLocNo);//避让楼层 | 
|---|
|  |  |  | String startLocNo = "180020" + Utils.getLev(liftSiteLocNo); | 
|---|
|  |  |  | ShuttleAssignCommand moveAssignCommand = Utils.searchEmptyGroupToMoveShuttle(distLev, shuttleThread.getSlave().getId(), shuttleThread, startLocNo); | 
|---|
|  |  |  | if (moveAssignCommand == null) {//调度小车命令为空 | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //所使用的路径进行临时解锁,用于后续计算 | 
|---|
|  |  |  | navigateMapData.writeNavigateNodeToRedisMap(moveAssignCommand.getNodes(), false);//所使用的路径进行临时解锁 | 
|---|
|  |  |  | commands.addAll(moveAssignCommand.getCommands());//将避让小车的命令添加 | 
|---|
|  |  |  | List<NavigateNode> nodes = assignCommand.getNodes();//将避让路径添加进节点路径中 | 
|---|
|  |  |  | nodes.addAll(moveAssignCommand.getNodes());//将避让路径添加进节点路径中 | 
|---|
|  |  |  | assignCommand.setNodes(nodes); | 
|---|
|  |  |  | navigateMapData.writeNavigateNodeToRedisMap(nodes, true);//所使用的路径进行锁定 | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //此时车在提升机内部,需要多下达一步指令让车移动到提升机口 | 
|---|
|  |  |  | short startCode = liftProtocol.getBarcode();//提升机内部二维码 | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //将任务档标记为完成 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo().intValue()); | 
|---|
|  |  |  | ShuttleAssignCommand moveAssignCommand = null;//避让命令 | 
|---|
|  |  |  | if (wrkMast != null) { | 
|---|
|  |  |  | switch (wrkMast.getWrkSts().intValue()) { | 
|---|
|  |  |  | case 9://9.小车入库搬运中 ==> 14.入库完成 | 
|---|
|  |  |  | 
|---|
|  |  |  | wrkMast.setWrkSts(23L); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 26://26.小车出库搬运中 ==> 27.小车出库搬运完成 | 
|---|
|  |  |  | //任务执行完后,小车进入移开提升机口站点位置,以免坠落 | 
|---|
|  |  |  | //搜索一条没有小车的空巷道,并调度小车 | 
|---|
|  |  |  | int distLev = Utils.getLev(wrkMast.getSourceLocNo());//避让楼层 | 
|---|
|  |  |  | String startLocNo = "180020" + distLev; | 
|---|
|  |  |  | moveAssignCommand = Utils.searchEmptyGroupToMoveShuttle(distLev, shuttleThread.getSlave().getId(), shuttleThread, startLocNo); | 
|---|
|  |  |  | if (moveAssignCommand == null) {//调度小车命令为空 | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wrkMast.setWrkSts(27L); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | 
|---|
|  |  |  | //任务指令清零 | 
|---|
|  |  |  | shuttleProtocol.setAssignCommand(null); | 
|---|
|  |  |  | News.info("四向穿梭车已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 27) { | 
|---|
|  |  |  | if (moveAssignCommand != null) { | 
|---|
|  |  |  | //下发任务 | 
|---|
|  |  |  | shuttleProtocol.setPakMk(true); | 
|---|
|  |  |  | MessageQueue.offer(SlaveType.Shuttle, shuttleThread.getSlave().getId(), new Task(3, moveAssignCommand)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | News.error("四向穿梭车已确认且任务完成状态,复位失败,但未找到工作档。四向穿梭车号={},工作号={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo()); | 
|---|
|  |  |  | } | 
|---|