|  |  | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         // 已经存在吊车执行任务时,则过滤 | 
 |  |  |         if (wrkMastMapper.selectWorking(slave.getId()) != null) { | 
 |  |  |             return; | 
 |  |  |         } | 
 |  |  |         // 双深库位且浅库位有货,则需先对浅库位进行库位移转 | 
 |  |  |         if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) { | 
 |  |  |             String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo()); | 
 |  |  |             LocMast shallowLoc = locMastService.selectById(shallowLocNo); | 
 |  |  |             // O.空库位、Q.拣料/盘点/并板再入库、S.入库预约、X.禁用 直接搬! | 
 |  |  |             if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) { | 
 |  |  |                 WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); | 
 |  |  |                 if (null == waitWrkMast) { | 
 |  |  |                     log.error("{}库位异常,未检索到相应工作档!", shallowLocNo); | 
 |  |  |                 } else { | 
 |  |  |                     if(waitWrkMast.getWrkSts() == 11) { | 
 |  |  |                         waitWrkMast.setIoPri(15D); | 
 |  |  |                         waitWrkMast.setModiTime(new Date()); | 
 |  |  |                         if (wrkMastMapper.updateById(waitWrkMast) == 0) { | 
 |  |  |                             log.error("调整工作档优先级失败!工作号={}", waitWrkMast.getWrkNo()); | 
 |  |  |                         } | 
 |  |  |                     } else { | 
 |  |  |  | 
 |  |  |         // 命令下发区 -------------------------------------------------------------------------- | 
 |  |  |         CrnCommand crnCommand = new CrnCommand(); | 
 |  |  |         crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 | 
 |  |  |         crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 | 
 |  |  |         crnCommand.setAckFinish((short) 0);  // 任务完成确认位 | 
 |  |  |         crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转 | 
 |  |  |         crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 源库位排 | 
 |  |  |         crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 源库位列 | 
 |  |  |         crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 源库位层 | 
 |  |  |         crnCommand.setDestinationPosX(sta.getRow1().shortValue());     // 目标库位排 | 
 |  |  |         crnCommand.setDestinationPosY(sta.getBay1().shortValue());     // 目标库位列 | 
 |  |  |         crnCommand.setDestinationPosZ(sta.getLev1().shortValue());     // 目标库位层 | 
 |  |  |         if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { | 
 |  |  |             log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); | 
 |  |  |         } else { | 
 |  |  |             // 修改工作档状态 11.生成出库ID => 12.吊车出库中 | 
 |  |  |             Date now = new Date(); | 
 |  |  |             wrkMast.setWrkSts(12L); | 
 |  |  |             wrkMast.setCrnStrTime(now); | 
 |  |  |             wrkMast.setModiTime(now); | 
 |  |  |             if (wrkMastMapper.updateById(wrkMast) == 0) { | 
 |  |  |                 log.error("【库位移转】 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo()); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) { | 
 |  |  | //                            WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); | 
 |  |  |                 //2022-08-16 modify,不根据updmk标记移库任务(容易被取消导致堵塞),查询工作档是否存在任务 | 
 |  |  |                 WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo); | 
 |  |  |                 // 此标记避免多次执行移库任务 | 
 |  |  | //                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk()) | 
 |  |  | //                                || Cools.isEmpty(waitWrkMast)) { | 
 |  |  |                 if (Cools.isEmpty(waitWrkMast)) { | 
 |  |  |                     wrkMast.setUpdMk("Y"); | 
 |  |  |                     wrkMastMapper.updateById(wrkMast); | 
 |  |  |                     // 生成工作档,将浅库位移转到新的库位中 | 
 |  |  |                     moveLocForDeepLoc(slave, shallowLoc); | 
 |  |  |                 } | 
 |  |  |                 log.error("{}任务出库失败,浅库位堵塞!浅库位号:{}", wrkMast.getWrkNo(),shallowLocNo); | 
 |  |  |  | 
 |  |  |             } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")){ | 
 |  |  |                 WrkMast waitWrkMast = wrkMastMapper.selectByLocNo1(shallowLocNo); | 
 |  |  |                 if (null != waitWrkMast && waitWrkMast.getWrkSts()==4) { | 
 |  |  |                 } | 
 |  |  |             }else if(shallowLoc.getLocSts().equals("O")){ | 
 |  |  |                 // 已经存在吊车执行任务时,则过滤 | 
 |  |  |                 if (wrkMastMapper.selectWorking(slave.getId()) != null) { | 
 |  |  |                     return; | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |                 // 命令下发区 -------------------------------------------------------------------------- | 
 |  |  |                 CrnCommand crnCommand = new CrnCommand(); | 
 |  |  |                 crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 | 
 |  |  |                 crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 | 
 |  |  |                 crnCommand.setAckFinish((short) 0);  // 任务完成确认位 | 
 |  |  |                 crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转 | 
 |  |  |                 crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 源库位排 | 
 |  |  |                 crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 源库位列 | 
 |  |  |                 crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 源库位层 | 
 |  |  |                 crnCommand.setDestinationPosX(sta.getRow1().shortValue());     // 目标库位排 | 
 |  |  |                 crnCommand.setDestinationPosY(sta.getBay1().shortValue());     // 目标库位列 | 
 |  |  |                 crnCommand.setDestinationPosZ(sta.getLev1().shortValue());     // 目标库位层 | 
 |  |  |                 if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { | 
 |  |  |                     log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); | 
 |  |  |                 } else { | 
 |  |  |                     // 修改工作档状态 11.生成出库ID => 12.吊车出库中 | 
 |  |  |                     Date now = new Date(); | 
 |  |  |                     wrkMast.setWrkSts(12L); | 
 |  |  |                     wrkMast.setCrnStrTime(now); | 
 |  |  |                     wrkMast.setModiTime(now); | 
 |  |  |                     if (wrkMastMapper.updateById(wrkMast) == 0) { | 
 |  |  |                         log.error("【库位移转】 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo()); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         }else { | 
 |  |  |             // 已经存在吊车执行任务时,则过滤 | 
 |  |  |             if (wrkMastMapper.selectWorking(slave.getId()) != null) { | 
 |  |  |                 return; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             // 命令下发区 -------------------------------------------------------------------------- | 
 |  |  |             CrnCommand crnCommand = new CrnCommand(); | 
 |  |  |             crnCommand.setCrnNo(slave.getId()); // 堆垛机编号 | 
 |  |  |             crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 工作号 | 
 |  |  |             crnCommand.setAckFinish((short) 0);  // 任务完成确认位 | 
 |  |  |             crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 任务模式:  库位移转 | 
 |  |  |             crnCommand.setSourcePosX(sourceSta.getRow1().shortValue());     // 源库位排 | 
 |  |  |             crnCommand.setSourcePosY(sourceSta.getBay1().shortValue());     // 源库位列 | 
 |  |  |             crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue());     // 源库位层 | 
 |  |  |             crnCommand.setDestinationPosX(sta.getRow1().shortValue());     // 目标库位排 | 
 |  |  |             crnCommand.setDestinationPosY(sta.getBay1().shortValue());     // 目标库位列 | 
 |  |  |             crnCommand.setDestinationPosZ(sta.getLev1().shortValue());     // 目标库位层 | 
 |  |  |             if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) { | 
 |  |  |                 log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand)); | 
 |  |  |             } else { | 
 |  |  |                 // 修改工作档状态 11.生成出库ID => 12.吊车出库中 | 
 |  |  |                 Date now = new Date(); | 
 |  |  |                 wrkMast.setWrkSts(12L); | 
 |  |  |                 wrkMast.setCrnStrTime(now); | 
 |  |  |                 wrkMast.setModiTime(now); | 
 |  |  |                 if (wrkMastMapper.updateById(wrkMast) == 0) { | 
 |  |  |                     log.error("【库位移转】 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo()); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |  | 
 |  |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** |