|  |  |  | 
|---|
|  |  |  | //        return locNo; | 
|---|
|  |  |  | //    } | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public InTaskMsgDto getLocNo(TaskInParam param) throws Exception{ | 
|---|
|  |  |  | public InTaskMsgDto getLocNo(TaskInParam param) throws Exception { | 
|---|
|  |  |  | String matnr = null; | 
|---|
|  |  |  | String batch = null; | 
|---|
|  |  |  | List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>().eq(WaitPakin::getBarcode, param.getBarcode())); | 
|---|
|  |  |  | 
|---|
|  |  |  | //根据立库类型获取获取库位 | 
|---|
|  |  |  | if (warehouseArea.getType().equals(WarehType.WAREHOUSE_TYPE_CRN.val)) { | 
|---|
|  |  |  | //堆垛机 | 
|---|
|  |  |  | dto = getLocNoCrn(deviceBind, warehouseArea.getId(), param.getSourceStaNo(), matnr, batch, locTypeDto, 0, param.getIoType()); | 
|---|
|  |  |  | dto = getLocNoCrn(param.getOrgLoc(),deviceBind, warehouseArea.getId(), param.getSourceStaNo(), matnr, batch, locTypeDto, 0, param.getIoType()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } else if (warehouseArea.getType().equals(WarehType.WAREHOUSE_TYPE_FOUR_DIRECTIONS.val)) { | 
|---|
|  |  |  | //四向库 | 
|---|
|  |  |  | 
|---|
|  |  |  | return dto; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private InTaskMsgDto getLocNoCrn(DeviceBind deviceBind, Long area, Integer sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) { | 
|---|
|  |  |  | private InTaskMsgDto getLocNoCrn(String orgLoc,DeviceBind deviceBind, Long area, Integer sourceStaNo, String matnr, String batch, LocTypeDto locTypeDto, int times, Integer ioType) { | 
|---|
|  |  |  | if (Cools.isEmpty(matnr)) {  //物料号 | 
|---|
|  |  |  | matnr = ""; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | throw new CoolException("无可用堆垛机"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //入库靠近摆放 | 
|---|
|  |  |  | if (ioType == 1 && deviceBind.getBeSimilar().equals("1") && !Cools.isEmpty(matnr)) { | 
|---|
|  |  |  | if (ioType == 1 && deviceBind.getBeSimilar().equals("1") && !Cools.isEmpty(matnr) && Cools.isEmpty(orgLoc)) { | 
|---|
|  |  |  | if (nearRow != curRow) { | 
|---|
|  |  |  | List<LocItem> locItems = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getMatnrCode, matnr)); | 
|---|
|  |  |  | for (LocItem locItem : locItems) { | 
|---|
|  |  |  | Loc loc1 = locService.getById(locItem.getLocId()); | 
|---|
|  |  |  | if (LocUtils.isShallowLoc(slaveProperties, loc1.getCode())) { | 
|---|
|  |  |  | if (LocUtils.isShallowLoc(loc1.getCode())) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String shallowLocNo = LocUtils.getShallowLoc(slaveProperties, loc1.getCode()); | 
|---|
|  |  |  | String shallowLocNo = LocUtils.getShallowLoc(loc1.getCode()); | 
|---|
|  |  |  | // 检测目标库位是否为空库位 | 
|---|
|  |  |  | Loc shallowLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLocNo)); | 
|---|
|  |  |  | if (shallowLoc != null && shallowLoc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) { | 
|---|
|  |  |  | 
|---|
|  |  |  | .orderByAsc(Loc::getLev) | 
|---|
|  |  |  | .orderByAsc(Loc::getCol) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | Loc orgMoveLoc = null; | 
|---|
|  |  |  | if (!Cools.isEmpty(orgLoc)) { | 
|---|
|  |  |  | orgMoveLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, orgLoc)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for (Loc locMast1 : locMasts) { | 
|---|
|  |  |  | if (!LocUtils.locMoveCheckLocTypeComplete(locMast1, locTypeDto)) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String shallowLoc = LocUtils.getDeepLoc(slaveProperties, locMast1.getCode()); | 
|---|
|  |  |  | String shallowLoc = LocUtils.getDeepLoc(locMast1.getCode()); | 
|---|
|  |  |  | if ((ioType == 1 && deviceBind.getBeSimilar().equals("1"))) { | 
|---|
|  |  |  | //相似物料打开,判断深库位有没有货,没货就放深库位,有货就不操作 | 
|---|
|  |  |  | Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>() | 
|---|
|  |  |  | 
|---|
|  |  |  | .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type) | 
|---|
|  |  |  | .eq(Loc::getAreaId, area) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!Cools.isEmpty(locMast2)) { | 
|---|
|  |  |  | if (null != orgMoveLoc){ | 
|---|
|  |  |  | if (!locMast2.getChannel().equals(orgMoveLoc.getChannel())) { | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | loc = locMast2; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | .in(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type, LocStsType.LOC_STS_TYPE_F.type) | 
|---|
|  |  |  | .eq(Loc::getAreaId, area) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!Cools.isEmpty(locMast2)) { | 
|---|
|  |  |  | if (null != orgMoveLoc){ | 
|---|
|  |  |  | if (!locMast2.getChannel().equals(orgMoveLoc.getChannel())) { | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | loc = locMast1; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | 
|---|
|  |  |  | .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type) | 
|---|
|  |  |  | .eq(Loc::getAreaId, area) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!Cools.isEmpty(locMast2)) { | 
|---|
|  |  |  | if (null != orgMoveLoc){ | 
|---|
|  |  |  | if (!locMast2.getChannel().equals(orgMoveLoc.getChannel())) { | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | loc = locMast2; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (deviceBind.getBeSimilar().equals("1")) { | 
|---|
|  |  |  | String shallowLoc = LocUtils.getDeepLoc(slaveProperties, locMast1.getCode()); | 
|---|
|  |  |  | String shallowLoc = LocUtils.getDeepLoc(locMast1.getCode()); | 
|---|
|  |  |  | Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>() | 
|---|
|  |  |  | .eq(Loc::getCode, shallowLoc) | 
|---|
|  |  |  | .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type) | 
|---|
|  |  |  | .eq(Loc::getAreaId, area) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!Cools.isEmpty(locMast2)) { | 
|---|
|  |  |  | if (null != orgMoveLoc){ | 
|---|
|  |  |  | if (!locMast2.getChannel().equals(orgMoveLoc.getChannel())) { | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | loc = locMast2; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | 
|---|
|  |  |  | .in(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type, LocStsType.LOC_STS_TYPE_D.type) | 
|---|
|  |  |  | .eq(Loc::getAreaId, area) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!Cools.isEmpty(locMast2)) { | 
|---|
|  |  |  | if (null != orgMoveLoc){ | 
|---|
|  |  |  | if (!locMast2.getChannel().equals(orgMoveLoc.getChannel())) { | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | loc = locMast1; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | // 当前巷道无空库位时,递归调整至下一巷道,检索全部巷道无果后,跳出递归 | 
|---|
|  |  |  | if (times < rowCount * 2) { | 
|---|
|  |  |  | times = times + 1; | 
|---|
|  |  |  | return getLocNoCrn(deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, times, ioType); | 
|---|
|  |  |  | return getLocNoCrn(orgLoc,deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, times, ioType); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 2.库位当前所属尺寸无空库位时,调整尺寸参数,向上兼容检索库位 | 
|---|
|  |  |  | if (locTypeDto.getLocType1() < 3) { | 
|---|
|  |  |  | int i = locTypeDto.getLocType1() + 1; | 
|---|
|  |  |  | locTypeDto.setLocType1(i); | 
|---|
|  |  |  | return getLocNoCrn(deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, 0, ioType); | 
|---|
|  |  |  | return getLocNoCrn(orgLoc,deviceBind, area, sourceStaNo, matnr, batch, locTypeDto, 0, ioType); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | throw new CoolException("没有空库位"); | 
|---|
|  |  |  | } | 
|---|