|  |  | 
 |  |  |      */ | 
 |  |  |     @Transactional | 
 |  |  |     public StartupDto getLocNo(Integer whsType, Integer staDescId, Integer sourceStaNo, List<String> matNos, LocTypeDto locTypeDto, int times) { | 
 |  |  |         whsType = getWhsType(sourceStaNo, times); | 
 |  |  |         StartupDto startupDto = new StartupDto(); | 
 |  |  |         // 生成工作号 | 
 |  |  |         int workNo = getWorkNo(0); | 
 |  |  | 
 |  |  |         // 如果没有相近物料,则按规则轮询货架 | 
 |  |  |         if (null == locMast) { | 
 |  |  |             Shelves shelves = new Shelves(rowCount, crn_qty); | 
 |  |  |             // 1-4排 | 
 |  |  |             if (whsType == 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; | 
 |  |  |                     } | 
 |  |  |             for (int i = 0; i < shelves.group; i ++) { | 
 |  |  |                 curRow = shelves.start(curRow); | 
 |  |  |                 if (curRow < 0) { | 
 |  |  |                     throw new CoolException("检索库位失败,请联系管理员"); | 
 |  |  |                 } | 
 |  |  |             // 5-8排 | 
 |  |  |             } else if (whsType == 2) { | 
 |  |  |                 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; | 
 |  |  |                     } | 
 |  |  |  | 
 |  |  |                 } | 
 |  |  |             // 126空板入 1-8排 | 
 |  |  |             } else { | 
 |  |  |                 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; | 
 |  |  |                     } | 
 |  |  |                 Integer crnNo1 = shelves.get(curRow); | 
 |  |  |                 if (basCrnpService.checkSiteError(crnNo1, true)) { | 
 |  |  |                     crnNo = crnNo1; | 
 |  |  |                     break; | 
 |  |  |                 } | 
 |  |  |             } | 
 |  |  |         } | 
 |  |  | 
 |  |  |             if (Utils.isShallowLoc(slaveProperties, curRow)) { | 
 |  |  |                 Integer deepRow = Utils.getDeepRow(slaveProperties, curRow); | 
 |  |  |                 locMast = locMastService.queryFreeLocMast(deepRow, locTypeDto.getLocType1()); | 
 |  |  |                 // todo:luxiaotao 如果用浅排找到的深库位,那么则需要判断这个深库位对应的浅库位是否有货(F、X、D) | 
 |  |  |                 // 因库位移转、需预留空库位 | 
 |  |  |                 if (!locMastService.checkEmptyCount(locMast)) { | 
 |  |  |                     locMast = null; | 
 |  |  | 
 |  |  |             if (times < rowCount) { | 
 |  |  |                 times = times + 1; | 
 |  |  |                 return getLocNo(1, staDescId, sourceStaNo, matNos, locTypeDto, times); | 
 |  |  |             } else { | 
 |  |  |                 times = 0; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             // 轻货物找轻库位为空时,可以去找重库位仓 | 
 |  |  |             if (locTypeDto.getLocType1() == 1) { | 
 |  |  |                 locTypeDto.setLocType1((short) 2); | 
 |  |  |                 return getLocNo(null, staDescId, sourceStaNo, matNos, locTypeDto, times); | 
 |  |  |                 return getLocNo(1, staDescId, sourceStaNo, matNos, locTypeDto, times); | 
 |  |  |             } | 
 |  |  |             log.error("系统没有空库位!!! 尺寸规格: {}, 轮询次数:{}", JSON.toJSONString(locTypeDto), times); | 
 |  |  |             throw new CoolException("没有空库位"); | 
 |  |  | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     /** | 
 |  |  |      * 根据入库站获取库位排号分配 | 
 |  |  |      */ | 
 |  |  |     private Integer getWhsType(Integer sourceStaNo, int times) { | 
 |  |  |         if (true) { | 
 |  |  |             return 4; | 
 |  |  |         } | 
 |  |  |         if (times >= 16) { | 
 |  |  |             return 4; | 
 |  |  |         } | 
 |  |  |         switch (sourceStaNo) { | 
 |  |  |             case 173: | 
 |  |  |             case 176: | 
 |  |  |             case 180: | 
 |  |  |             case 185: | 
 |  |  |                 return 1; | 
 |  |  |             case 189: | 
 |  |  |             case 194: | 
 |  |  |             case 198: | 
 |  |  |             case 202: | 
 |  |  |                 return 2; | 
 |  |  |             case 206: | 
 |  |  | //            case 211: | 
 |  |  | //            case 215: | 
 |  |  | //            case 219: | 
 |  |  | //            case 223: | 
 |  |  |             case 227: | 
 |  |  |                 return 3; | 
 |  |  |             case 305: | 
 |  |  |             case 303: | 
 |  |  |             case 301: | 
 |  |  |                 return 4; | 
 |  |  |             default: | 
 |  |  |                 throw new CoolException("根据入库站获取库位排号分配失败,入库站:" + sourceStaNo); | 
 |  |  |         } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |