|  |  | 
 |  |  |                     && shuttleProtocol.getTaskNo() != 0 | 
 |  |  |                     && shuttleProtocol.getBusyStatus() == 0 | 
 |  |  |             ) { | 
 |  |  |                 //标记复位 | 
 |  |  |                 shuttleProtocol.setPakMk(true); | 
 |  |  |  | 
 |  |  |                 ShuttleAssignCommand assignCommand = shuttleProtocol.getAssignCommand(); | 
 |  |  |  | 
 |  |  |                 //将任务档标记为完成 | 
 |  |  |                 WrkMast wrkMast = wrkMastMapper.selectByWorkNo(shuttleProtocol.getTaskNo().intValue()); | 
 |  |  |                 ShuttleAssignCommand moveAssignCommand = null;//避让命令 | 
 |  |  |                 if (wrkMast != null) { | 
 |  |  |                     switch (wrkMast.getWrkSts().intValue()) { | 
 |  |  |                         case 9://9.小车入库搬运中 ==> 14.入库完成 | 
 |  |  |                             wrkMast.setWrkSts(14L); | 
 |  |  |                         case 5://5.小车搬运中 ==> 9.入库完成 | 
 |  |  |                             wrkMast.setWrkSts(9L); | 
 |  |  |                             //任务号清零 | 
 |  |  |                             shuttleProtocol.setTaskNo((short) 0); | 
 |  |  |                             break; | 
 |  |  |                         case 5://5.迁移小车至提升机口 ==> 6.迁移小车至提升机口完成 | 
 |  |  |                             wrkMast.setWrkSts(6L); | 
 |  |  |                             break; | 
 |  |  |                         case 22://22.迁移小车至提升机口 ==> 23.迁移小车至提升机口完成 | 
 |  |  |                         case 22://22.小车搬运中 ==> 23.小车搬运完成 | 
 |  |  |                             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); | 
 |  |  |                             //任务号清零 | 
 |  |  |                             shuttleProtocol.setTaskNo((short) 0); | 
 |  |  |                         case 102://102.小车到提升机中 ==> 103.小车到提升机完成 | 
 |  |  |                             wrkMast.setWrkSts(103L); | 
 |  |  |                             break; | 
 |  |  |                         case 106://106.小车迁出提升机中 ==> 107.小车迁出提升机完成 | 
 |  |  |                             wrkMast.setWrkSts(107L); | 
 |  |  |                             break; | 
 |  |  |                         case 108://108.小车移动中 ==> 109.小车移动完成 | 
 |  |  |                             wrkMast.setWrkSts(109L); | 
 |  |  |                             break; | 
 |  |  |                         default: | 
 |  |  |                     } | 
 |  |  | 
 |  |  |                         //任务指令清零 | 
 |  |  |                         shuttleProtocol.setAssignCommand(null); | 
 |  |  |                         News.info("四向穿梭车已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo()); | 
 |  |  |  | 
 |  |  |                         if (wrkMast.getWrkSts() == 27) { | 
 |  |  |                             if (moveAssignCommand != null) { | 
 |  |  |                                 try { | 
 |  |  |                                     Thread.sleep(4000); | 
 |  |  |                                     //下发任务 | 
 |  |  |                                     shuttleProtocol.setPakMk(true); | 
 |  |  |                                     MessageQueue.offer(SlaveType.Shuttle, shuttleThread.getSlave().getId(), new Task(3, moveAssignCommand)); | 
 |  |  |                                 } catch (InterruptedException e) { | 
 |  |  |                                     throw new RuntimeException(e); | 
 |  |  |                                 } | 
 |  |  |                             } | 
 |  |  |                         } | 
 |  |  |  | 
 |  |  |                     } else { | 
 |  |  |                         News.error("四向穿梭车已确认且任务完成状态,复位失败,但未找到工作档。四向穿梭车号={},工作号={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo()); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 if (assignCommand != null) { | 
 |  |  |                     if (assignCommand.getTaskMode().intValue() == ShuttleTaskModeType.AVOID.id) { | 
 |  |  |                         //避让任务 | 
 |  |  |                         //设置四向穿梭车为空闲状态 | 
 |  |  |                         shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); | 
 |  |  |                         //任务号清零 | 
 |  |  |                         shuttleProtocol.setTaskNo((short) 0); | 
 |  |  |                         //源库位清零 | 
 |  |  |                         shuttleProtocol.setSourceLocNo(null); | 
 |  |  |                         //目标库位清零 | 
 |  |  |                         shuttleProtocol.setLocNo(null); | 
 |  |  |                         //任务指令清零 | 
 |  |  |                         shuttleProtocol.setAssignCommand(null); | 
 |  |  |                         News.info("四向穿梭车避让任务已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo()); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             //四向穿梭车状态为充电状态 | 
 |  |  |             if (shuttleProtocol.getProtocolStatus() == ShuttleProtocolStatusType.CHARGING_WAITING.id  //充电标识 | 
 |  |  |                     && shuttleProtocol.getTaskNo() != 0) { | 
 |  |  |                 //查询是否有充电任务 | 
 |  |  |                 WrkCharge wrkCharge = wrkChargeMapper.selectByWorkNo(shuttleProtocol.getTaskNo().intValue()); | 
 |  |  |                 if (wrkCharge != null) { | 
 |  |  |                     switch (wrkCharge.getWrkSts().intValue()) { | 
 |  |  |                         case 52://四向穿梭车迁移到提升机口 | 
 |  |  |                             wrkCharge.setWrkSts(53L);//迁移完成 | 
 |  |  |                             shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING); | 
 |  |  |                             break; | 
 |  |  |                         case 56://小车去充电桩中 | 
 |  |  |                             wrkCharge.setWrkSts(57L);//到达充电桩 | 
 |  |  |                             break; | 
 |  |  |                         default: | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     if (wrkChargeMapper.updateById(wrkCharge) > 0) { | 
 |  |  |                         if (wrkCharge.getWrkSts() == 60) { | 
 |  |  |                             //设置四向穿梭车为空闲状态 | 
 |  |  |                             shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); | 
 |  |  |                         } | 
 |  |  |                         if (wrkCharge.getWrkSts() != 57) { | 
 |  |  |                             //任务号清零 | 
 |  |  |                             shuttleProtocol.setTaskNo((short) 0); | 
 |  |  |                             //源库位清零 | 
 |  |  |                             shuttleProtocol.setSourceLocNo(null); | 
 |  |  |                             //目标库位清零 | 
 |  |  |                             shuttleProtocol.setLocNo(null); | 
 |  |  |                             //标记复位 | 
 |  |  |                             shuttleProtocol.setPakMk(true); | 
 |  |  |                             //任务指令清零 | 
 |  |  |                             shuttleProtocol.setAssignCommand(null); | 
 |  |  |                         } | 
 |  |  |                         News.info("四向穿梭车已确认且任务完成状态,复位。四向穿梭车号={}", shuttleProtocol.getShuttleNo()); | 
 |  |  |                     } else { | 
 |  |  |                         News.error("四向穿梭车已确认且任务完成状态,复位失败,但未找到工作档。四向穿梭车号={},工作号={}", shuttleProtocol.getShuttleNo(), shuttleProtocol.getTaskNo()); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         } | 
 |  |  | 
 |  |  |                     && !liftProtocol.getBusy() | 
 |  |  |             ) { | 
 |  |  |  | 
 |  |  |                 DevpThread devpThread = null; | 
 |  |  |                 Integer devpId = null; | 
 |  |  |                 for (DevpSlave devp : slaveProperties.getDevp()){ | 
 |  |  |                     // 获取入库站信息 | 
 |  |  |                     devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
 |  |  |                     devpId = devp.getId(); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 //将任务档标记为完成 | 
 |  |  |                 WrkMast wrkMast = wrkMastMapper.selectByWorkNo372428(liftProtocol.getTaskNo().intValue()); | 
 |  |  |                 WrkMast wrkMast = wrkMastMapper.selectByWorkNo324104(liftProtocol.getTaskNo().intValue()); | 
 |  |  |                 if (wrkMast != null) { | 
 |  |  |                     //判断提升机是否到达任务楼层 | 
 |  |  |                     String locNo = wrkMast.getIoType() < 101 ? wrkMast.getLocNo() : wrkMast.getSourceLocNo(); | 
 |  |  |                     int lev = Utils.getLev(locNo);//任务目标楼层 | 
 |  |  |  | 
 |  |  |                     //标记复位 | 
 |  |  |                     liftProtocol.setPakMk(true); | 
 |  |  |  | 
 |  |  |                     switch (wrkMast.getWrkSts().intValue()) { | 
 |  |  |                         case 3://3.提升机搬运中 ==> 4.提升机搬运完成 | 
 |  |  |                             if (liftProtocol.getLev().intValue() != lev) { | 
 |  |  |                                 continue;//提升机没有到达目标 | 
 |  |  |                             } | 
 |  |  |                             //给目标站设置工作号 | 
 |  |  |                             StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getStaNo());//目标站 | 
 |  |  |                             staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); | 
 |  |  |                             staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); | 
 |  |  |                             boolean result = MessageQueue.offer(SlaveType.Devp, devpId, new Task(2, staProtocol)); | 
 |  |  |                             if (!result) { | 
 |  |  |                                 throw new CoolException("更新plc站点信息失败"); | 
 |  |  |                             } | 
 |  |  |                             wrkMast.setWrkSts(4L); | 
 |  |  |                             //任务号清零 | 
 |  |  |                             liftProtocol.setTaskNo((short) 0); | 
 |  |  |                             wrkMast.setLiftNo(null);//提升机解锁 | 
 |  |  |                             break; | 
 |  |  |                         case 7://7.提升机迁移小车中 ==> 8.提升机迁移小车完成 | 
 |  |  |                             if (liftProtocol.getLev().intValue() != lev) { | 
 |  |  |                                 continue;//提升机没有到达目标 | 
 |  |  |                             } | 
 |  |  |                             wrkMast.setWrkSts(8L); | 
 |  |  |                             break; | 
 |  |  |                         case 24://24.提升机迁移小车中 ==> 25.提升机迁移小车完成 | 
 |  |  |                             if (liftProtocol.getLev().intValue() != lev) { | 
 |  |  |                                 continue;//提升机没有到达目标 | 
 |  |  |                             } | 
 |  |  |                         case 24://24.提升机搬运中 ==> 25.提升机搬运完成 | 
 |  |  |                             wrkMast.setWrkSts(25L); | 
 |  |  |                             break; | 
 |  |  |                         case 28://28.提升机搬运中 ==> 29.提升机搬运完成 | 
 |  |  | //                            if (liftProtocol.getPositionArrivalFeedback().intValue() != 2) { | 
 |  |  | //                                continue;//提升机是否达到输送线楼层 | 
 |  |  | //                            } | 
 |  |  |                             wrkMast.setWrkSts(29L); | 
 |  |  |                             wrkMast.setWrkSts(34L);//34.出库完成,暂时先直接完成出库工作档,后续需要根据输送线给出的状态来确定34.出库完成状态 | 
 |  |  |                             //任务号清零 | 
 |  |  |                             liftProtocol.setTaskNo((short) 0); | 
 |  |  |                             wrkMast.setLiftNo(null);//提升机解锁 | 
 |  |  |                         case 104://104.提升机搬运中 ==> 105.提升机搬运完成 | 
 |  |  |                             wrkMast.setWrkSts(105L); | 
 |  |  |                             break; | 
 |  |  |                         default: | 
 |  |  |                     } | 
 |  |  | 
 |  |  |                     } else { | 
 |  |  |                         News.error("提升机已确认且任务完成状态,复位失败,但未找到工作档。提升机号={},工作号={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo()); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 //查询是否有充电任务 | 
 |  |  |                 WrkCharge wrkCharge = wrkChargeMapper.selectByWorkNo(liftProtocol.getTaskNo().intValue()); | 
 |  |  |                 if (wrkCharge != null) { | 
 |  |  |                     //标记复位 | 
 |  |  |                     liftProtocol.setPakMk(true); | 
 |  |  |                      | 
 |  |  |                     switch (wrkCharge.getWrkSts().intValue()) { | 
 |  |  |                         case 54://提升机搬运中 | 
 |  |  |                             wrkCharge.setWrkSts(55L);//提升机搬运完成 | 
 |  |  |                             break; | 
 |  |  |                         default: | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                     if (wrkChargeMapper.updateById(wrkCharge) > 0) { | 
 |  |  |                         //设置提升机为空闲状态 | 
 |  |  |                         liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); | 
 |  |  |                         //任务号清零 | 
 |  |  |                         liftProtocol.setTaskNo((short) 0); | 
 |  |  |                         //标记复位 | 
 |  |  |                         liftProtocol.setPakMk(true); | 
 |  |  |                         //任务指令清零 | 
 |  |  |                         liftProtocol.setAssignCommand(null); | 
 |  |  |                         News.info("提升机已确认且任务完成状态,复位。提升机号={}", liftProtocol.getLiftNo()); | 
 |  |  |                     } else { | 
 |  |  |                         News.error("提升机已确认且任务完成状态,复位失败,但未找到工作档。提升机号={},工作号={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo()); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 //不是入出库调度任务、工作档任务,进行提升机的复位 | 
 |  |  |                 if (liftProtocol.getAssignCommand() != null) { | 
 |  |  |                     //设置提升机为空闲状态 | 
 |  |  |                     liftProtocol.setProtocolStatus(LiftProtocolStatusType.IDLE); | 
 |  |  |                     //判断是否为四向穿梭车调度提升机,如是则无需清理任务号 | 
 |  |  | //                    if (!liftProtocol.getSecurityMk()) { | 
 |  |  | //                        //任务号清零 | 
 |  |  | //                        liftProtocol.setTaskNo((short) 0); | 
 |  |  | //                    } | 
 |  |  |                     //标记复位 | 
 |  |  |                     liftProtocol.setPakMk(true); | 
 |  |  |                     //任务指令清零 | 
 |  |  |                     liftProtocol.setAssignCommand(null); | 
 |  |  |                     News.info("提升机已确认且任务完成状态,复位。提升机号={}", liftProtocol.getLiftNo()); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } | 
 |  |  | 
 |  |  |             if (basLift.getPoint() == null) { | 
 |  |  |                 return false;//没有设置提升机点位坐标 | 
 |  |  |             } | 
 |  |  |             //判断提升机是否有其他任务 | 
 |  |  |             WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(basLift.getLiftNo()); | 
 |  |  |             if (liftWrkMast != null) { | 
 |  |  |                 return false;//当前提升机存在未完成任务,等待下一次轮询 | 
 |  |  |             } | 
 |  |  |             NavigateNode liftNode = new NavigateNode(basLift.getPoint().getX(), basLift.getPoint().getY()); | 
 |  |  |             liftNode.setZ(basLift.getPoint().getZ()); | 
 |  |  |  | 
 |  |  | 
 |  |  |             assignCommand.setNodes(result.getNodes()); | 
 |  |  |  | 
 |  |  |             wrkMast.setWrkSts(102L);//小车移动到提升机中  101.生成小车移库任务 ==> 102.小车到提升机中 | 
 |  |  |             wrkMast.setLiftNo(basLift.getLiftNo());//提升机号 | 
 |  |  |             wrkMast.setLiftNo(basLift.getLiftNo());//提升机号(锁定提升机防止被其他任务抢占) | 
 |  |  |             wrkMast.setModiTime(now); | 
 |  |  |             if (wrkMastMapper.updateById(wrkMast) > 0) { | 
 |  |  |                 //下发任务 | 
 |  |  | 
 |  |  |             assignCommand.setNodes(result.getNodes()); | 
 |  |  |  | 
 |  |  |             wrkMast.setWrkSts(108L);//小车移动到目标库位中  107.小车迁出提升机完成 ==> 108.小车移动中 | 
 |  |  |             wrkMast.setLiftNo(null);//释放提升机 | 
 |  |  |             wrkMast.setModiTime(now); | 
 |  |  |             if (wrkMastMapper.updateById(wrkMast) > 0) { | 
 |  |  |                 //下发任务 |