|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 入库  ===>>  堆垛机搬入小车 | 
|---|
|  |  |  | * 入出库  ===>>  堆垛机搬入小车 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public void carMoveIn(WrkMast wrkMast, Integer steNo, CrnProtocol crnProtocol) { | 
|---|
|  |  |  | // 获取堆垛机信息 | 
|---|
|  |  |  | 
|---|
|  |  |  | // 堆垛机空闲 | 
|---|
|  |  |  | if (crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() == 0) { | 
|---|
|  |  |  | LocMast locMast; | 
|---|
|  |  |  | // 入库搬 | 
|---|
|  |  |  | if (wrkMast.getWrkSts() <= 10) { | 
|---|
|  |  |  | locMast = locMastService.selectById(wrkMast.getLocNo()); | 
|---|
|  |  |  | // 堆垛机命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | 
|---|
|  |  |  | log.error("修改工作档状态 3.小车待搬 => 4.迁入小车 失败!!,工作号={}", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 出库搬 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | locMast = locMastService.selectById(wrkMast.getSourceLocNo()); | 
|---|
|  |  |  | // 堆垛机命令下发区 -------------------------------------------------------------------------- | 
|---|
|  |  |  | CrnCommand crnCommand = new CrnCommand(); | 
|---|
|  |  |  | crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 堆垛机编号 | 
|---|
|  |  |  | crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 | 
|---|
|  |  |  | crnCommand.setAckFinish((short) 0);  // 任务完成确认位 | 
|---|
|  |  |  | crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转 | 
|---|
|  |  |  | crnCommand.setSourcePosX(steProtocol.getRow());     // 源库位排 | 
|---|
|  |  |  | crnCommand.setSourcePosY(steProtocol.getBay());     // 源库位列 | 
|---|
|  |  |  | crnCommand.setSourcePosZ(steProtocol.getLev());     // 源库位层 | 
|---|
|  |  |  | crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo()).shortValue());     // 目标库位排 | 
|---|
|  |  |  | crnCommand.setDestinationPosY(locMast.getBay1().shortValue());     // 目标库位列 | 
|---|
|  |  |  | crnCommand.setDestinationPosZ(locMast.getLev1().shortValue());     // 目标库位层 | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { | 
|---|
|  |  |  | log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 修改工作档状态 12.小车待搬 => 13.迁入小车 | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | wrkMast.setWrkSts(13L); | 
|---|
|  |  |  | wrkMast.setCrnStrTime(now); | 
|---|
|  |  |  | wrkMast.setModiTime(now); | 
|---|
|  |  |  | if (wrkMastMapper.updateById(wrkMast) == 0) { | 
|---|
|  |  |  | log.error("修改工作档状态 12.小车待搬 => 13.迁入小车 失败!!,工作号={}", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 堆垛机搬运小车 | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 3L) { | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 12L) { | 
|---|
|  |  |  | this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 堆垛机针对于小车迁移工作的完成 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Async | 
|---|
|  |  |  | public void carMoveFinished() { | 
|---|
|  |  |  | for (CrnSlave crn : slaveProperties.getCrn()) { | 
|---|
|  |  |  | // 获取堆垛机信息 | 
|---|
|  |  |  | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); | 
|---|
|  |  |  | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); | 
|---|
|  |  |  | if (crnProtocol == null) { continue; } | 
|---|
|  |  |  | //  状态:等待确认 并且  任务完成位 = 1 | 
|---|
|  |  |  | if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { | 
|---|
|  |  |  | // 获取入库待确认工作档 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectPakInStep45(crnProtocol.getTaskNo().intValue()); | 
|---|
|  |  |  | if (wrkMast == null) { | 
|---|
|  |  |  | log.error("堆垛机处于等待确认且任务完成状态,但未找到工作档。堆垛机号={},工作号={}", crn.getId(), crnProtocol.getTaskNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 入库 + 库位转移  ==> 6.小车待入 | 
|---|
|  |  |  | if ((wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 5) || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)){ | 
|---|
|  |  |  | wrkMast.setWrkSts(6L); | 
|---|
|  |  |  | } else  { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | wrkMast.setCrnEndTime(now); | 
|---|
|  |  |  | wrkMast.setModiTime(now); | 
|---|
|  |  |  | // 修改成功后复位堆垛机 | 
|---|
|  |  |  | if (wrkMastMapper.updateById(wrkMast) > 0) { | 
|---|
|  |  |  | // 堆垛机复位 | 
|---|
|  |  |  | crnThread.setResetFlag(true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 执行对工作档的完成操作 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Async | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 迁入小车 完成 | 
|---|
|  |  |  | // 入库 ===>> 迁入小车 完成 | 
|---|
|  |  |  | } else if (wrkMast.getWrkSts() == 4) { | 
|---|
|  |  |  | // 4.迁入小车 ==> 6.小车待入 | 
|---|
|  |  |  | wrkMast.setWrkSts(6L); | 
|---|
|  |  |  | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | log.error("修改工作档状态 4.迁入小车 => 6.小车待入 失败!!,工作号={}", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 迁出小车 完成 | 
|---|
|  |  |  | // 入库 ===>> 迁出小车 完成 | 
|---|
|  |  |  | } else if (wrkMast.getWrkSts() == 5) { | 
|---|
|  |  |  | // 5.迁出小车 ==> 6.小车待入 | 
|---|
|  |  |  | wrkMast.setWrkSts(6L); | 
|---|
|  |  |  | 
|---|
|  |  |  | crnThread.setResetFlag(true); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | log.error("修改工作档状态 5.迁出小车 => 6.小车待入 失败!!,工作号={}", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 出库 ===>> 迁入小车 完成 | 
|---|
|  |  |  | } else if (wrkMast.getWrkSts() == 13) { | 
|---|
|  |  |  | // 13.迁入小车 ==> 14.小车搬出库 | 
|---|
|  |  |  | wrkMast.setWrkSts(14L); | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | wrkMast.setCrnEndTime(now); | 
|---|
|  |  |  | wrkMast.setModiTime(now); | 
|---|
|  |  |  | // 修改成功后复位堆垛机 | 
|---|
|  |  |  | if (wrkMastMapper.updateById(wrkMast) > 0) { | 
|---|
|  |  |  | // 堆垛机复位 | 
|---|
|  |  |  | crnThread.setResetFlag(true); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | log.error("修改工作档状态 13.迁入小车 ==> 14.小车搬出库 失败!!,工作号={}", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | if (steProtocol == null) { continue; } | 
|---|
|  |  |  | if (steProtocol.getStatusType().equals(SteStatusType.WAITING) && steProtocol.getTaskNo() != 0) { | 
|---|
|  |  |  | // 查询是否有待入库的任务 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectPakInStep8(steProtocol.getSteNo().intValue()); | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectCarWaiting(steProtocol.getTaskNo()); | 
|---|
|  |  |  | if (wrkMast == null) { continue; } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | switch (wrkMast.getWrkSts().intValue()) { | 
|---|
|  |  |  | 
|---|
|  |  |  | steThread.setResetFlag(true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 11: | 
|---|
|  |  |  | // 修改工作档状态 11.生成出库ID => 12.小车待搬 | 
|---|
|  |  |  | wrkMast.setWrkSts(12L); | 
|---|
|  |  |  | wrkMast.setModiTime(now); | 
|---|
|  |  |  | if (wrkMastMapper.updateById(wrkMast) == 0) { | 
|---|
|  |  |  | log.error("修改工作档状态 11.生成出库ID => 12.小车待搬 失败!!,工作号={}", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | steThread.setResetFlag(true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 14: | 
|---|
|  |  |  | // 修改工作档状态 14.小车搬出库 => 15.等待吊车 | 
|---|
|  |  |  | wrkMast.setWrkSts(15L); | 
|---|