Commit 28ae94f0a36922d9768c0d6ea890c187bcd6e742

Authored by 易文鹏
1 parent 0f1a3383

fix: 1、获取所有库位时,去除limit 20。

2、设置每一条相邻临时托盘类型都必须为0,否则报错。
     3、8行库位设置邻临时托盘类型到第9行问题,偶数行6和8应该往上设置的,已修正。
src/main/java/com/huaheng/api/wcs/service/warecellAllocation/LocationAllocationServiceImpl.java
... ... @@ -80,13 +80,12 @@ public class LocationAllocationServiceImpl implements LocationAllocationService
80 80 .eq(Location::getRoadway, DYNAMIC_ROADWAY)
81 81 .eq(Location::getStatus, STATUS_LOCATION_EMPTY)
82 82 .eq(Location::getHigh, high)
83   - .eq(Location::getContainerCode, "")
  83 + .eq(Location::getContainerCode, EMPTY_STRING)
84 84 .ne(Location::getIColumn, "26")//26列机器臂夹不到,只有大托盘的右侧可以刚好放到
85 85 .orderByAsc(Location::getILayer)
86 86 .orderByDesc(Location::getRowFlag)
87 87 .orderByAsc(Location::getIColumn)
88   - .orderByAsc(Location::getIRow)
89   - .last(" limit 20");
  88 + .orderByAsc(Location::getIRow);
90 89 List<Location> list = locationService.list(wrapper);
91 90 if (list.size() <= reserveNumber) {
92 91 return "可能是库位不够用了,请检查预留库位数";
... ... @@ -95,13 +94,14 @@ public class LocationAllocationServiceImpl implements LocationAllocationService
95 94 //大托盘占两个库位
96 95 if (containerType.equals(CONTAINER_TYPE_X) || containerType.equals(CONTAINER_TYPE_W)) {
97 96 for (Location location : list) {
98   - if (location.getIColumn() % 2 != 0 && location.getTemporaryType().startsWith(SMALL_CONTAINER_TYPE)) {
  97 + //大托盘只放奇数列,且右侧有空库位,且当前库位类型不是小托盘
  98 + if (location.getIColumn() % 2 != 0 && !location.getTemporaryType().startsWith(SMALL_CONTAINER_TYPE)) {
99 99 Location rightLocation = locationService.getRightEmptyLocation(location);
100 100 if (rightLocation != null) {
101 101 //禁用库位
102 102 int updateCount = locationService.updateStatusNew(rightLocation.getCode(), DEFAULT_WAREHOUSE, STATUS_LOCATION_DISABLE, STATUS_LOCATION_EMPTY);
103 103 if (updateCount != 1) {
104   - throw new ServiceException("禁用库位失败");
  104 + throw new ServiceException("分配库位时,禁用库位失败");
105 105 }
106 106 if (location.getTemporaryType().equals(UNDEFINED_CONTAINER_TYPE)) {
107 107 //设置相邻临时库位类型
... ... @@ -113,7 +113,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService
113 113 }
114 114 return null;
115 115 } else {
116   - //分配小托盘库位
  116 + //分配小托盘库位,将大托盘库位过滤掉
117 117 //小托盘不分配25列,最好让大托盘放在25列
118 118 list = list.stream().filter(location -> location.getIColumn() != 25
119 119 && !String.valueOf(location.getTemporaryType()).startsWith(BIG_CONTAINER_TYPE)).collect(Collectors.toList());
... ... @@ -132,19 +132,26 @@ public class LocationAllocationServiceImpl implements LocationAllocationService
132 132 //设置相邻临时库位类型
133 133 @Override
134 134 @Transactional(rollbackFor = Exception.class)
135   - void setTemporaryLocationType(Location location, boolean isBigContainer) {
  135 + public void setTemporaryLocationType(Location location, boolean isBigContainer) {
136 136 List<Location> setTemporaryTypeList = new ArrayList<>();
137 137 String prefix = isBigContainer ? BIG_CONTAINER_TYPE : SMALL_CONTAINER_TYPE;
138 138  
139 139 setTemporaryTypeList.add(location);
140   - setTemporaryTypeList.add(getLocationByOffset(location, 0, 1));
141   - setTemporaryTypeList.add(getLocationByOffset(location, 1, 1));
142   - setTemporaryTypeList.add(getLocationByOffset(location, 1, 0));
143   -
  140 + if (location.getIRow() % 2 == 0) {
  141 + //6、8行,因为是优先分配深库位,所以其实6和7行两个浅库位是进不来
  142 + setTemporaryTypeList.add(getLocationByOffset(location, 0, -1));
  143 + setTemporaryTypeList.add(getLocationByOffset(location, 1, -1));
  144 + setTemporaryTypeList.add(getLocationByOffset(location, 1, 0));
  145 + } else {
  146 + //5、7行
  147 + setTemporaryTypeList.add(getLocationByOffset(location, 0, 1));
  148 + setTemporaryTypeList.add(getLocationByOffset(location, 1, 1));
  149 + setTemporaryTypeList.add(getLocationByOffset(location, 1, 0));
  150 + }
144 151 for (Location temporaryLocation : setTemporaryTypeList) {
145 152 if (temporaryLocation != null) {
146 153 temporaryLocation.setTemporaryType(prefix + "-" + location.getCode() + "-" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd-HH:mm:ss")));
147   - if (locationService.updateById(temporaryLocation)) {
  154 + if (!locationService.updateById(temporaryLocation)) {
148 155 throw new ServiceException("设置临时库位类型失败");
149 156 }
150 157 }
... ... @@ -156,8 +163,13 @@ public class LocationAllocationServiceImpl implements LocationAllocationService
156 163 wrapper
157 164 .eq(Location::getILayer, baseLocation.getILayer())
158 165 .eq(Location::getIColumn, baseLocation.getIColumn() + columnOffset)
159   - .eq(Location::getIRow, baseLocation.getIRow() + rowOffset);
160   - return locationService.getOne(wrapper);
  166 + .eq(Location::getIRow, baseLocation.getIRow() + rowOffset)
  167 + .eq(Location::getTemporaryType, UNDEFINED_CONTAINER_TYPE);
  168 + Location location = locationService.getOne(wrapper);
  169 + if (location == null) {
  170 + throw new ServiceException("设置临时库位类型失败,该库位托盘类型不为0:" + baseLocation.getCode());
  171 + }
  172 + return location;
161 173 }
162 174  
163 175  
... ...
src/main/java/com/huaheng/common/constant/QuantityConstant.java
... ... @@ -551,7 +551,7 @@ public class QuantityConstant {
551 551 */
552 552 public static final String CONTAINER_TYPE_X = "X";
553 553 public static final String CONTAINER_TYPE_W = "W";
554   - //一厂二期5号巷道为动态分配大小托盘
  554 + //todo 一厂二期5号巷道为动态分配大小托盘,二厂也有,到时候需要修改代码
555 555 public static final String DYNAMIC_ROADWAY = "5";
556 556  
557 557 /**
... ...