|  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 堆垛机演示  ===>> 库位移转 | 
 |  |  |      */ | 
 |  |  |     public synchronized void crnDemoOfLocMove(){ | 
 |  |  |         for (CrnSlave crn : slaveProperties.getCrn()) { | 
 |  |  |             if (!crn.getDemo()) { continue; }   // 必须为演示状态 | 
 |  |  |  | 
 |  |  |             CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); | 
 |  |  |             CrnProtocol crnProtocol = crnThread.getCrnProtocol(); | 
 |  |  |             if (crnProtocol == null) { continue; } | 
 |  |  |  | 
 |  |  |             // 只有当堆垛机空闲 并且 无任务时才继续执行 | 
 |  |  |             if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { | 
 |  |  |                 // 获取移库工作档信息 | 
 |  |  |                 WrkMast wrkMast = wrkMastMapper.selectLocMove(crn.getId()); | 
 |  |  |                 if (null != wrkMast) { continue; } | 
 |  |  |  | 
 |  |  |                 LocMast sourceLoc = locMastService.queryDemoSourceLoc(crn.getId()); | 
 |  |  |                 LocMast loc = locMastService.queryDemoLoc(crn.getId()); | 
 |  |  |                 if (null == sourceLoc || null == loc) { continue; } | 
 |  |  |  | 
 |  |  |                 String sourceLocNo = sourceLoc.getLocNo(); | 
 |  |  |                 String locNo = loc.getLocNo(); | 
 |  |  |  | 
 |  |  |                 // 获取工作号 | 
 |  |  |                 int workNo = commonService.getWorkNo(WorkNoType.PICK.type); | 
 |  |  |                 // 保存工作档 | 
 |  |  |                 wrkMast = new WrkMast(); | 
 |  |  |                 wrkMast.setWrkNo(workNo); | 
 |  |  |                 wrkMast.setIoTime(new Date()); | 
 |  |  |                 wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID | 
 |  |  |                 wrkMast.setIoType(11); // 入出库状态: 11.库格移载 | 
 |  |  |                 wrkMast.setIoPri(13D); | 
 |  |  |                 wrkMast.setCrnNo(crn.getId()); | 
 |  |  |                 wrkMast.setSourceLocNo(sourceLocNo); // 源库位 | 
 |  |  |                 wrkMast.setLocNo(locNo); // 目标库位 | 
 |  |  |                 wrkMast.setFullPlt("N"); // 满板:Y | 
 |  |  |                 wrkMast.setPicking("N"); // 拣料 | 
 |  |  |                 wrkMast.setExitMk("N"); // 退出 | 
 |  |  |                 wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D")?"Y":"N"); // 空板 | 
 |  |  |                 wrkMast.setBarcode(sourceLoc.getBarcode()); // 托盘码 | 
 |  |  |                 wrkMast.setLinkMis("N"); | 
 |  |  |                 wrkMast.setAppeTime(new Date()); | 
 |  |  |                 wrkMast.setModiTime(new Date()); | 
 |  |  |                 int res = wrkMastMapper.insert(wrkMast); | 
 |  |  |                 if (res == 0) { | 
 |  |  |                     throw new CoolException("保存工作档失败"); | 
 |  |  |                 } | 
 |  |  |                 // 工作档明细保存 | 
 |  |  |                 List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo)); | 
 |  |  |                 for (LocDetl locDetl : locDetls) { | 
 |  |  |                     WrkDetl wrkDetl = new WrkDetl(); | 
 |  |  |                     wrkDetl.sync(locDetl); | 
 |  |  |                     wrkDetl.setWrkNo(workNo); | 
 |  |  |                     wrkDetl.setIoTime(new Date()); | 
 |  |  |                     wrkDetl.setAnfme(locDetl.getAnfme()); | 
 |  |  |                     wrkDetl.setAppeTime(new Date()); | 
 |  |  |                     wrkDetl.setModiTime(new Date()); | 
 |  |  |                     if (!wrkDetlService.insert(wrkDetl)) { | 
 |  |  |                         throw new CoolException("保存工作档明细失败"); | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 // 修改源库位状态 | 
 |  |  |                 if (sourceLoc.getLocSts().equals("D") || sourceLoc.getLocSts().equals("F")) { | 
 |  |  |                     sourceLoc.setLocSts("R"); // R.出库预约 | 
 |  |  |                     sourceLoc.setModiTime(new Date()); | 
 |  |  |                     if (!locMastService.updateById(sourceLoc)){ | 
 |  |  |                         throw new CoolException("更新源库位状态失败"); | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |                     throw new CoolException("源库位出库失败"); | 
 |  |  |                 } | 
 |  |  |                 // 修改目标库位状态 | 
 |  |  |                 if (loc.getLocSts().equals("O")) { | 
 |  |  |                     loc.setLocSts("S"); // S.入库预约 | 
 |  |  |                     loc.setModiTime(new Date()); | 
 |  |  |                     if (!locMastService.updateById(loc)) { | 
 |  |  |                         throw new CoolException("更新目标库位状态失败"); | 
 |  |  |                     } | 
 |  |  |                 } else { | 
 |  |  |                     throw new CoolException("移转失败"); | 
 |  |  |                 } | 
 |  |  |  | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |