|  |  | 
 |  |  |             default: | 
 |  |  |                 throw new CoolException("库位排号分配错误, 源站号:" + sourceStaNo); | 
 |  |  |         } | 
 |  |  |         startupDto.setWorkNo(workNo); | 
 |  |  |         RowLastno rowLastno = rowLastnoService.selectById(whsType); | 
 |  |  |         if (Cools.isEmpty(rowLastno)) { | 
 |  |  |             throw new CoolException("数据异常,请联系管理员"); | 
 |  |  | 
 |  |  |                 LocMast shallowLoc = locMastService.selectById(shallowLocNo); | 
 |  |  |                 if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) { | 
 |  |  |                     if (VersionUtils.locMoveCheckLocType(shallowLoc, locTypeDto)) { | 
 |  |  |                         locMast = shallowLoc; | 
 |  |  |                         crnNo = locMast.getCrnNo(); | 
 |  |  |                         break; | 
 |  |  |                         if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) { | 
 |  |  |                             locMast = shallowLoc; | 
 |  |  |                             crnNo = locMast.getCrnNo(); | 
 |  |  |                             break; | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  | 
 |  |  |                     // 检测目标库位是否为空库位 | 
 |  |  |                     LocMast shallowLoc = locMastService.selectById(shallowLocNo); | 
 |  |  |                     if (shallowLoc != null && shallowLoc.getLocSts().equals("O")) { | 
 |  |  |                         locMast = shallowLoc; | 
 |  |  |                         crnNo = locMast.getCrnNo(); | 
 |  |  |                         break; | 
 |  |  |                         if (basCrnpService.checkSiteError(shallowLoc.getCrnNo(), true)) { | 
 |  |  |                             locMast = shallowLoc; | 
 |  |  |                             crnNo = locMast.getCrnNo(); | 
 |  |  |                             break; | 
 |  |  |                         } | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  | 
 |  |  |  | 
 |  |  |         // 如果没有相近物料,则按规则轮询货架 | 
 |  |  |         if (null == locMast) { | 
 |  |  |             Shelves shelves = new Shelves(rowCount, crn_qty); | 
 |  |  |             // 1-4排 | 
 |  |  |             if (whsType == 1) { | 
 |  |  |                 // 获取目标站所在货架排号 | 
 |  |  |                 Shelves shelves = new Shelves(rowCount, crn_qty); | 
 |  |  |                 curRow = shelves.start(curRow); | 
 |  |  |                 if (curRow < 0) { | 
 |  |  |                     throw new CoolException("检索库位失败,请联系管理员"); | 
 |  |  |                 } | 
 |  |  |                 for (List<Integer> node : shelves.nodes){ | 
 |  |  |                     if (node.contains(curRow)) { | 
 |  |  |                         crnNo = shelves.nodes.indexOf(node) + 1; | 
 |  |  |                 for (int i = 0; i < shelves.group; i ++) { | 
 |  |  |                     curRow = shelves.start(curRow); | 
 |  |  |                     if (curRow < 0) { | 
 |  |  |                         throw new CoolException("检索库位失败,请联系管理员"); | 
 |  |  |                     } | 
 |  |  |                     Integer crnNo1 = shelves.get(curRow); | 
 |  |  |                     if (basCrnpService.checkSiteError(crnNo1, true)) { | 
 |  |  |                         crnNo = crnNo1; | 
 |  |  |                         break; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |                 // 5-8排 | 
 |  |  |             // 5-8排 | 
 |  |  |             } else if (whsType == 2) { | 
 |  |  |                 // 获取目标站所在货架排号 | 
 |  |  |                 Shelves shelves = new Shelves(rowCount, crn_qty); | 
 |  |  |                 curRow = shelves.start(curRow - 4); | 
 |  |  |                 if (curRow < 0) { | 
 |  |  |                     throw new CoolException("检索库位失败,请联系管理员"); | 
 |  |  |                 } | 
 |  |  |                 for (List<Integer> node : shelves.nodes){ | 
 |  |  |                     if (node.contains(curRow)) { | 
 |  |  |                         crnNo = shelves.nodes.indexOf(node) + 1; | 
 |  |  |                 curRow = curRow - 4; | 
 |  |  |                 for (int i = 0; i < shelves.group; i ++) { | 
 |  |  |                     curRow = shelves.start(curRow); | 
 |  |  |                     if (curRow < 0) { | 
 |  |  |                         throw new CoolException("检索库位失败,请联系管理员"); | 
 |  |  |                     } | 
 |  |  |                     Integer crnNo1 = shelves.get(curRow); | 
 |  |  |                     if (basCrnpService.checkSiteError(crnNo1 + 1, true)) { | 
 |  |  |                         // 偏移量补偿 | 
 |  |  |                         curRow = curRow + 4; | 
 |  |  |                         crnNo = crnNo1 + 1; | 
 |  |  |                         break; | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |                 // 偏移量补偿 | 
 |  |  |                 curRow = curRow + 4; | 
 |  |  |                 crnNo = crnNo + 1; | 
 |  |  |                 // 126空板入 1-8排 | 
 |  |  |             // 126空板入 1-8排 | 
 |  |  |             } else { | 
 |  |  |                 // 获取目标站所在货架排号 | 
 |  |  |                 Shelves shelves = new Shelves(rowCount, crn_qty); | 
 |  |  |                 curRow = shelves.start(curRow); | 
 |  |  |                 if (curRow < 0) { | 
 |  |  |                     throw new CoolException("检索库位失败,请联系管理员"); | 
 |  |  |                 } | 
 |  |  |                 for (List<Integer> node : shelves.nodes){ | 
 |  |  |                     if (node.contains(curRow)) { | 
 |  |  |                         crnNo = shelves.nodes.indexOf(node) + 1; | 
 |  |  |                 for (int i = 0; i < shelves.group; i ++) { | 
 |  |  |                     curRow = shelves.start(curRow); | 
 |  |  |                     if (curRow < 0) { | 
 |  |  |                         throw new CoolException("检索库位失败,请联系管理员"); | 
 |  |  |                     } | 
 |  |  |                     Integer crnNo1 = shelves.get(curRow); | 
 |  |  |                     if (basCrnpService.checkSiteError(crnNo1, true)) { | 
 |  |  |                         crnNo = crnNo1; | 
 |  |  |                         break; | 
 |  |  |                     } | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         basCrnpService.checkSiteStatus(crnNo); | 
 |  |  |         if (crnNo == 0) { | 
 |  |  |             throw new CoolException("没有可用的堆垛机"); | 
 |  |  |         } | 
 |  |  |         // 获取目标站 | 
 |  |  |         Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() | 
 |  |  |                 .eq("type_no", staDescId) | 
 |  |  | 
 |  |  |                 .eq("crn_no", crnNo); | 
 |  |  |         StaDesc staDesc = staDescService.selectOne(wrapper); | 
 |  |  |         if (Cools.isEmpty(staDesc)) { | 
 |  |  |             log.error("type_no={},stn_no={},crn_no={}", staDescId, sourceStaNo, crnNo); | 
 |  |  |             throw new CoolException("入库路径不存在"); | 
 |  |  |         } | 
 |  |  |         BasDevp staNo = basDevpService.selectById(staDesc.getCrnStn()); | 
 |  |  |         int inQty = staNo.getInQty()==null?0:staNo.getInQty(); | 
 |  |  |         if (staNo.getAutoing().equals("Y") && inQty<2) { | 
 |  |  |             // 更新库位排号 | 
 |  |  |             rowLastno.setCurrentRow(curRow); | 
 |  |  |             rowLastnoService.updateById(rowLastno); | 
 |  |  |             // 查找库位 | 
 |  |  |             if (locMast == null) { | 
 |  |  |                 if (Utils.isShallowLoc(slaveProperties, curRow)) { | 
 |  |  |                     Integer deepRow = Utils.getDeepRow(slaveProperties, curRow); | 
 |  |  |                     locMast = locMastService.queryFreeLocMast(deepRow, locTypeDto.getLocType1()); | 
 |  |  |                 } | 
 |  |  |                 if (Cools.isEmpty(locMast)) { | 
 |  |  |                     locMast = locMastService.queryFreeLocMast(curRow, locTypeDto.getLocType1()); | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |             if (Cools.isEmpty(locMast)) { | 
 |  |  |                 // 轻货物找轻库位为空时,可以去找重库位仓 | 
 |  |  |                 if (locTypeDto.getLocType1() == 1) { | 
 |  |  |                     locTypeDto.setLocType1((short) 2); | 
 |  |  |                     return getLocNo(null, staDescId, sourceStaNo, matNos, locTypeDto, times); | 
 |  |  |                 } | 
 |  |  |                 if (times >= rowCount) { | 
 |  |  |                     log.error("没有空库位"); | 
 |  |  |                     throw new CoolException("没有空库位"); | 
 |  |  |                 } | 
 |  |  |                 times = times + 1; | 
 |  |  |                 return getLocNo(1, staDescId, sourceStaNo, matNos, locTypeDto, times); | 
 |  |  |             } | 
 |  |  |             String locNo = locMast.getLocNo(); | 
 |  |  |  | 
 |  |  |             // 返回dto | 
 |  |  |             startupDto.setCrnNo(crnNo); | 
 |  |  |             startupDto.setSourceStaNo(sourceStaNo); | 
 |  |  |             startupDto.setStaNo(staNo.getDevNo()); | 
 |  |  |             startupDto.setLocNo(locNo); | 
 |  |  |         } else { | 
 |  |  |         if (!staNo.getAutoing().equals("Y")) { | 
 |  |  |             throw new CoolException("目标站"+staDesc.getCrnStn()+"不可用"); | 
 |  |  |         } | 
 |  |  |         // 更新库位排号 | 
 |  |  |         rowLastno.setCurrentRow(curRow); | 
 |  |  |         rowLastnoService.updateById(rowLastno); | 
 |  |  |         // 查找库位 | 
 |  |  |         if (locMast == null) { | 
 |  |  |             if (Utils.isShallowLoc(slaveProperties, curRow)) { | 
 |  |  |                 Integer deepRow = Utils.getDeepRow(slaveProperties, curRow); | 
 |  |  |                 locMast = locMastService.queryFreeLocMast(deepRow, locTypeDto.getLocType1()); | 
 |  |  |             } | 
 |  |  |             if (Cools.isEmpty(locMast)) { | 
 |  |  |                 locMast = locMastService.queryFreeLocMast(curRow, locTypeDto.getLocType1()); | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  |         if (Cools.isEmpty(locMast)) { | 
 |  |  |             // 轻货物找轻库位为空时,可以去找重库位仓 | 
 |  |  |             if (locTypeDto.getLocType1() == 1) { | 
 |  |  |                 locTypeDto.setLocType1((short) 2); | 
 |  |  |                 return getLocNo(null, staDescId, sourceStaNo, matNos, locTypeDto, times); | 
 |  |  |             } | 
 |  |  |             if (times >= rowCount) { | 
 |  |  |                 log.error("没有空库位"); | 
 |  |  |                 throw new CoolException("没有空库位"); | 
 |  |  |             } | 
 |  |  |             times = times + 1; | 
 |  |  |             return getLocNo(1, staDescId, sourceStaNo, matNos, locTypeDto, times); | 
 |  |  |         } | 
 |  |  |         String locNo = locMast.getLocNo(); | 
 |  |  |  | 
 |  |  |         // 返回dto | 
 |  |  |         startupDto.setWorkNo(workNo); | 
 |  |  |         startupDto.setCrnNo(crnNo); | 
 |  |  |         startupDto.setSourceStaNo(sourceStaNo); | 
 |  |  |         startupDto.setStaNo(staNo.getDevNo()); | 
 |  |  |         startupDto.setLocNo(locNo); | 
 |  |  |         return startupDto; | 
 |  |  |     } | 
 |  |  |  |