diff --git a/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/LocationAllocationServiceImpl.java b/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/LocationAllocationServiceImpl.java index e8b41c2..2d44749 100644 --- a/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/LocationAllocationServiceImpl.java +++ b/src/main/java/com/huaheng/api/wcs/service/warecellAllocation/LocationAllocationServiceImpl.java @@ -80,13 +80,12 @@ public class LocationAllocationServiceImpl implements LocationAllocationService .eq(Location::getRoadway, DYNAMIC_ROADWAY) .eq(Location::getStatus, STATUS_LOCATION_EMPTY) .eq(Location::getHigh, high) - .eq(Location::getContainerCode, "") + .eq(Location::getContainerCode, EMPTY_STRING) .ne(Location::getIColumn, "26")//26列机器臂夹不到,只有大托盘的右侧可以刚好放到 .orderByAsc(Location::getILayer) .orderByDesc(Location::getRowFlag) .orderByAsc(Location::getIColumn) - .orderByAsc(Location::getIRow) - .last(" limit 20"); + .orderByAsc(Location::getIRow); List<Location> list = locationService.list(wrapper); if (list.size() <= reserveNumber) { return "可能是库位不够用了,请检查预留库位数"; @@ -95,13 +94,14 @@ public class LocationAllocationServiceImpl implements LocationAllocationService //大托盘占两个库位 if (containerType.equals(CONTAINER_TYPE_X) || containerType.equals(CONTAINER_TYPE_W)) { for (Location location : list) { - if (location.getIColumn() % 2 != 0 && location.getTemporaryType().startsWith(SMALL_CONTAINER_TYPE)) { + //大托盘只放奇数列,且右侧有空库位,且当前库位类型不是小托盘 + if (location.getIColumn() % 2 != 0 && !location.getTemporaryType().startsWith(SMALL_CONTAINER_TYPE)) { Location rightLocation = locationService.getRightEmptyLocation(location); if (rightLocation != null) { //禁用库位 int updateCount = locationService.updateStatusNew(rightLocation.getCode(), DEFAULT_WAREHOUSE, STATUS_LOCATION_DISABLE, STATUS_LOCATION_EMPTY); if (updateCount != 1) { - throw new ServiceException("禁用库位失败"); + throw new ServiceException("分配库位时,禁用库位失败"); } if (location.getTemporaryType().equals(UNDEFINED_CONTAINER_TYPE)) { //设置相邻临时库位类型 @@ -113,7 +113,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService } return null; } else { - //分配小托盘库位 + //分配小托盘库位,将大托盘库位过滤掉 //小托盘不分配25列,最好让大托盘放在25列 list = list.stream().filter(location -> location.getIColumn() != 25 && !String.valueOf(location.getTemporaryType()).startsWith(BIG_CONTAINER_TYPE)).collect(Collectors.toList()); @@ -132,19 +132,26 @@ public class LocationAllocationServiceImpl implements LocationAllocationService //设置相邻临时库位类型 @Override @Transactional(rollbackFor = Exception.class) - void setTemporaryLocationType(Location location, boolean isBigContainer) { + public void setTemporaryLocationType(Location location, boolean isBigContainer) { List<Location> setTemporaryTypeList = new ArrayList<>(); String prefix = isBigContainer ? BIG_CONTAINER_TYPE : SMALL_CONTAINER_TYPE; setTemporaryTypeList.add(location); - setTemporaryTypeList.add(getLocationByOffset(location, 0, 1)); - setTemporaryTypeList.add(getLocationByOffset(location, 1, 1)); - setTemporaryTypeList.add(getLocationByOffset(location, 1, 0)); - + if (location.getIRow() % 2 == 0) { + //6、8行,因为是优先分配深库位,所以其实6和7行两个浅库位是进不来 + setTemporaryTypeList.add(getLocationByOffset(location, 0, -1)); + setTemporaryTypeList.add(getLocationByOffset(location, 1, -1)); + setTemporaryTypeList.add(getLocationByOffset(location, 1, 0)); + } else { + //5、7行 + setTemporaryTypeList.add(getLocationByOffset(location, 0, 1)); + setTemporaryTypeList.add(getLocationByOffset(location, 1, 1)); + setTemporaryTypeList.add(getLocationByOffset(location, 1, 0)); + } for (Location temporaryLocation : setTemporaryTypeList) { if (temporaryLocation != null) { temporaryLocation.setTemporaryType(prefix + "-" + location.getCode() + "-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd-HH:mm:ss"))); - if (locationService.updateById(temporaryLocation)) { + if (!locationService.updateById(temporaryLocation)) { throw new ServiceException("设置临时库位类型失败"); } } @@ -156,8 +163,13 @@ public class LocationAllocationServiceImpl implements LocationAllocationService wrapper .eq(Location::getILayer, baseLocation.getILayer()) .eq(Location::getIColumn, baseLocation.getIColumn() + columnOffset) - .eq(Location::getIRow, baseLocation.getIRow() + rowOffset); - return locationService.getOne(wrapper); + .eq(Location::getIRow, baseLocation.getIRow() + rowOffset) + .eq(Location::getTemporaryType, UNDEFINED_CONTAINER_TYPE); + Location location = locationService.getOne(wrapper); + if (location == null) { + throw new ServiceException("设置临时库位类型失败,该库位托盘类型不为0:" + baseLocation.getCode()); + } + return location; } diff --git a/src/main/java/com/huaheng/common/constant/QuantityConstant.java b/src/main/java/com/huaheng/common/constant/QuantityConstant.java index 650e009..1bc56df 100644 --- a/src/main/java/com/huaheng/common/constant/QuantityConstant.java +++ b/src/main/java/com/huaheng/common/constant/QuantityConstant.java @@ -551,7 +551,7 @@ public class QuantityConstant { */ public static final String CONTAINER_TYPE_X = "X"; public static final String CONTAINER_TYPE_W = "W"; - //一厂二期5号巷道为动态分配大小托盘 + //todo 一厂二期5号巷道为动态分配大小托盘,二厂也有,到时候需要修改代码 public static final String DYNAMIC_ROADWAY = "5"; /**