Commit b63d003e839192d219bc141d7b72469eb2108e8c
1 parent
b9a2d4b9
选择巷道, 首选排除任务多余2个的巷道,选择空闲库位多的库位,
Showing
8 changed files
with
165 additions
and
29 deletions
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationService.java
@@ -4,7 +4,43 @@ import java.util.List; | @@ -4,7 +4,43 @@ import java.util.List; | ||
4 | 4 | ||
5 | public interface LocationAllocationService { | 5 | public interface LocationAllocationService { |
6 | 6 | ||
7 | + /** | ||
8 | + * 获得库位分配的库位 | ||
9 | + */ | ||
7 | String allocation(int locationRule, List<String> locationTypeCodeList, int high, String zoneCode, List<Integer> raodWays, String warehouseCode, | 10 | String allocation(int locationRule, List<String> locationTypeCodeList, int high, String zoneCode, List<Integer> raodWays, String warehouseCode, |
8 | String containerCode, String materialAreaCode); | 11 | String containerCode, String materialAreaCode); |
9 | 12 | ||
13 | + String doubleRk(String zoneCode, List<Integer> roadWays, int high, String warehouseCode, List<String> locationTypeCodeList, String materialAreaCode); | ||
14 | + | ||
15 | + String singleRk(String zoneCode, List<Integer> roadWays, int high, String warehouseCode, List<String> locationTypeCodeList, String materialAreaCode); | ||
16 | + | ||
17 | + /** | ||
18 | + * 获取可用巷道 | ||
19 | + * @param roadWays | ||
20 | + * @return | ||
21 | + */ | ||
22 | + Integer getRoadWay(List<Integer> roadWays, String warehouseCode); | ||
23 | + | ||
24 | + /** | ||
25 | + * 获取巷道,选取空闲库位最多作为巷道 | ||
26 | + * @param roadWays | ||
27 | + * @return | ||
28 | + */ | ||
29 | + Integer getRoadWayByMaxFreeLocation(List<Integer> roadWays, String warehouseCode); | ||
30 | + | ||
31 | + /** | ||
32 | + * 排除巷道,如果这个巷道分配了超过2个库位,那么就不往这边分库位了,避免堵死的情况 | ||
33 | + * @param roadWays | ||
34 | + * @param warehouseCode | ||
35 | + * @return | ||
36 | + */ | ||
37 | + List<Integer> removeRoadWaysByPreLocations(List<Integer> roadWays, String warehouseCode); | ||
38 | + | ||
39 | +// /** | ||
40 | +// * 获取巷道,根据入库物料均分原则,选取物料最少的巷道 | ||
41 | +// * @param roadWays | ||
42 | +// * @return | ||
43 | +// */ | ||
44 | +// Integer getRoadWayByMinMaterial(List<Integer> roadWays, String warehouseCode); | ||
45 | + | ||
10 | } | 46 | } |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/LocationAllocationServiceImpl.java
1 | package org.jeecg.modules.wms.api.wcs.service; | 1 | package org.jeecg.modules.wms.api.wcs.service; |
2 | 2 | ||
3 | +import static java.util.stream.Collectors.toList; | ||
4 | + | ||
5 | +import java.util.ArrayList; | ||
6 | +import java.util.Collections; | ||
7 | +import java.util.List; | ||
8 | + | ||
9 | +import javax.annotation.Resource; | ||
10 | + | ||
3 | import org.jeecg.common.exception.JeecgBootException; | 11 | import org.jeecg.common.exception.JeecgBootException; |
4 | -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||
5 | -import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||
6 | import org.jeecg.modules.wms.config.container.entity.Container; | 12 | import org.jeecg.modules.wms.config.container.entity.Container; |
7 | import org.jeecg.modules.wms.config.container.service.IContainerService; | 13 | import org.jeecg.modules.wms.config.container.service.IContainerService; |
8 | import org.jeecg.modules.wms.config.containerType.entity.ContainerType; | 14 | import org.jeecg.modules.wms.config.containerType.entity.ContainerType; |
@@ -11,10 +17,9 @@ import org.jeecg.modules.wms.config.location.entity.Location; | @@ -11,10 +17,9 @@ import org.jeecg.modules.wms.config.location.entity.Location; | ||
11 | import org.jeecg.modules.wms.config.location.service.ILocationService; | 17 | import org.jeecg.modules.wms.config.location.service.ILocationService; |
12 | import org.jeecg.modules.wms.config.locationType.entity.LocationType; | 18 | import org.jeecg.modules.wms.config.locationType.entity.LocationType; |
13 | import org.jeecg.modules.wms.config.locationType.service.ILocationTypeService; | 19 | import org.jeecg.modules.wms.config.locationType.service.ILocationTypeService; |
14 | -import org.jeecg.modules.wms.config.parameterConfiguration.entity.ParameterConfiguration; | ||
15 | import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService; | 20 | import org.jeecg.modules.wms.config.parameterConfiguration.service.IParameterConfigurationService; |
16 | -import org.jeecg.modules.wms.config.zone.entity.Zone; | ||
17 | import org.jeecg.modules.wms.config.zone.service.IZoneService; | 21 | import org.jeecg.modules.wms.config.zone.service.IZoneService; |
22 | +import org.jeecg.modules.wms.task.taskHeader.entity.TaskHeader; | ||
18 | import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService; | 23 | import org.jeecg.modules.wms.task.taskHeader.service.ITaskHeaderService; |
19 | import org.jeecg.utils.StringUtils; | 24 | import org.jeecg.utils.StringUtils; |
20 | import org.jeecg.utils.constant.QuantityConstant; | 25 | import org.jeecg.utils.constant.QuantityConstant; |
@@ -22,12 +27,8 @@ import org.springframework.stereotype.Service; | @@ -22,12 +27,8 @@ import org.springframework.stereotype.Service; | ||
22 | import org.springframework.transaction.annotation.Transactional; | 27 | import org.springframework.transaction.annotation.Transactional; |
23 | import org.springframework.util.StopWatch; | 28 | import org.springframework.util.StopWatch; |
24 | 29 | ||
25 | -import javax.annotation.Resource; | ||
26 | -import java.util.ArrayList; | ||
27 | -import java.util.Collections; | ||
28 | -import java.util.List; | ||
29 | - | ||
30 | -import static java.util.stream.Collectors.toList; | 30 | +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
31 | +import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||
31 | 32 | ||
32 | /** | 33 | /** |
33 | * @author 游杰 | 34 | * @author 游杰 |
@@ -49,6 +50,8 @@ public class LocationAllocationServiceImpl implements LocationAllocationService | @@ -49,6 +50,8 @@ public class LocationAllocationServiceImpl implements LocationAllocationService | ||
49 | private IZoneService zoneService; | 50 | private IZoneService zoneService; |
50 | @Resource | 51 | @Resource |
51 | private IParameterConfigurationService parameterConfigurationService; | 52 | private IParameterConfigurationService parameterConfigurationService; |
53 | + @Resource | ||
54 | + private LocationAllocationService locationAllocationService; | ||
52 | 55 | ||
53 | @Override | 56 | @Override |
54 | @Transactional(rollbackFor = Exception.class) | 57 | @Transactional(rollbackFor = Exception.class) |
@@ -76,9 +79,9 @@ public class LocationAllocationServiceImpl implements LocationAllocationService | @@ -76,9 +79,9 @@ public class LocationAllocationServiceImpl implements LocationAllocationService | ||
76 | List<String> mergelocationTypeCodeList = locationTypeCodeList.stream().filter(item -> locationTypeCodes.contains(item)).collect(toList()); | 79 | List<String> mergelocationTypeCodeList = locationTypeCodeList.stream().filter(item -> locationTypeCodes.contains(item)).collect(toList()); |
77 | switch (locationRule) { | 80 | switch (locationRule) { |
78 | case QuantityConstant.DOUBLE_FORK: | 81 | case QuantityConstant.DOUBLE_FORK: |
79 | - return doubleRk(zoneCode, raodWays, high, warehouseCode, mergelocationTypeCodeList, materialAreaCode); | 82 | + return locationAllocationService.doubleRk(zoneCode, raodWays, high, warehouseCode, mergelocationTypeCodeList, materialAreaCode); |
80 | case QuantityConstant.SINGLE_FORK: | 83 | case QuantityConstant.SINGLE_FORK: |
81 | - return singleRk(zoneCode, raodWays, high, warehouseCode, mergelocationTypeCodeList, materialAreaCode); | 84 | + return locationAllocationService.singleRk(zoneCode, raodWays, high, warehouseCode, mergelocationTypeCodeList, materialAreaCode); |
82 | } | 85 | } |
83 | return null; | 86 | return null; |
84 | } | 87 | } |
@@ -86,7 +89,9 @@ public class LocationAllocationServiceImpl implements LocationAllocationService | @@ -86,7 +89,9 @@ public class LocationAllocationServiceImpl implements LocationAllocationService | ||
86 | /** | 89 | /** |
87 | * 双伸位库位入库分配库位 | 90 | * 双伸位库位入库分配库位 |
88 | */ | 91 | */ |
89 | - private String doubleRk(String zoneCode, List<Integer> roadWays, int high, String warehouseCode, List<String> locationTypeCodeList, String materialAreaCode) { | 92 | + @Override |
93 | + @Transactional(rollbackFor = Exception.class) | ||
94 | + public String doubleRk(String zoneCode, List<Integer> roadWays, int high, String warehouseCode, List<String> locationTypeCodeList, String materialAreaCode) { | ||
90 | if (roadWays == null || roadWays.size() < 1) { | 95 | if (roadWays == null || roadWays.size() < 1) { |
91 | List<Location> locationList = locationService.getLocationListByZoneCode(zoneCode, warehouseCode); | 96 | List<Location> locationList = locationService.getLocationListByZoneCode(zoneCode, warehouseCode); |
92 | roadWays = locationList.stream().map(Location::getRoadWay).distinct().collect(toList()); | 97 | roadWays = locationList.stream().map(Location::getRoadWay).distinct().collect(toList()); |
@@ -121,15 +126,14 @@ public class LocationAllocationServiceImpl implements LocationAllocationService | @@ -121,15 +126,14 @@ public class LocationAllocationServiceImpl implements LocationAllocationService | ||
121 | System.out.println("waste aa:" + stopWatch.getLastTaskTimeMillis()); | 126 | System.out.println("waste aa:" + stopWatch.getLastTaskTimeMillis()); |
122 | stopWatch.start("bbb"); | 127 | stopWatch.start("bbb"); |
123 | roadWays.removeAll(removeRoadWays); | 128 | roadWays.removeAll(removeRoadWays); |
124 | - Collections.shuffle(roadWays); | ||
125 | if (roadWays == null || roadWays.size() == 0) { | 129 | if (roadWays == null || roadWays.size() == 0) { |
126 | throw new JeecgBootException("分配库位时, 巷道为空"); | 130 | throw new JeecgBootException("分配库位时, 巷道为空"); |
127 | } | 131 | } |
128 | - Integer roadWay = roadWays.get(0); | 132 | + Integer roadWay = locationAllocationService.getRoadWay(roadWays, warehouseCode); |
129 | // 优先找外侧库位 | 133 | // 优先找外侧库位 |
130 | LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery(); | 134 | LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery(); |
131 | locationLambda.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay) | 135 | locationLambda.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay) |
132 | - .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).eq(Location::getHigh, high) | 136 | + .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ge(Location::getHigh, high) |
133 | .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode).eq(Location::getRowFlag, QuantityConstant.ROW_OUT) | 137 | .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode).eq(Location::getRowFlag, QuantityConstant.ROW_OUT) |
134 | .in(Location::getLocationTypeCode, locationTypeCodeList).eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING).last(lastString); | 138 | .in(Location::getLocationTypeCode, locationTypeCodeList).eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING).last(lastString); |
135 | List<Location> locationList = locationService.list(locationLambda); | 139 | List<Location> locationList = locationService.list(locationLambda); |
@@ -148,7 +152,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService | @@ -148,7 +152,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService | ||
148 | if (locationList.size() == 0) { | 152 | if (locationList.size() == 0) { |
149 | locationLambda = Wrappers.lambdaQuery(); | 153 | locationLambda = Wrappers.lambdaQuery(); |
150 | locationLambda.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay) | 154 | locationLambda.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay) |
151 | - .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).eq(Location::getHigh, high) | 155 | + .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ge(Location::getHigh, high) |
152 | .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode).eq(Location::getRowFlag, QuantityConstant.ROW_IN) | 156 | .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode).eq(Location::getRowFlag, QuantityConstant.ROW_IN) |
153 | .in(Location::getLocationTypeCode, locationTypeCodeList).eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING).last(lastString); | 157 | .in(Location::getLocationTypeCode, locationTypeCodeList).eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING).last(lastString); |
154 | locationList = locationService.list(locationLambda); | 158 | locationList = locationService.list(locationLambda); |
@@ -173,16 +177,17 @@ public class LocationAllocationServiceImpl implements LocationAllocationService | @@ -173,16 +177,17 @@ public class LocationAllocationServiceImpl implements LocationAllocationService | ||
173 | /** | 177 | /** |
174 | * 单伸位库位入库分配库位 | 178 | * 单伸位库位入库分配库位 |
175 | */ | 179 | */ |
176 | - private String singleRk(String zoneCode, List<Integer> roadWays, int high, String warehouseCode, List<String> locationTypeCodeList, String materialAreaCode) { | 180 | + @Override |
181 | + @Transactional(rollbackFor = Exception.class) | ||
182 | + public String singleRk(String zoneCode, List<Integer> roadWays, int high, String warehouseCode, List<String> locationTypeCodeList, String materialAreaCode) { | ||
177 | if (roadWays == null || roadWays.size() < 1) { | 183 | if (roadWays == null || roadWays.size() < 1) { |
178 | List<Location> locationList = locationService.getLocationListByZoneCode(zoneCode, warehouseCode); | 184 | List<Location> locationList = locationService.getLocationListByZoneCode(zoneCode, warehouseCode); |
179 | roadWays = locationList.stream().map(Location::getRoadWay).distinct().collect(toList()); | 185 | roadWays = locationList.stream().map(Location::getRoadWay).distinct().collect(toList()); |
180 | } | 186 | } |
181 | - Collections.shuffle(roadWays); | ||
182 | - Integer roadWay = roadWays.get(0); | 187 | + Integer roadWay = locationAllocationService.getRoadWay(roadWays, warehouseCode); |
183 | LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); | 188 | LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); |
184 | locationLambdaQueryWrapper.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay) | 189 | locationLambdaQueryWrapper.eq(Location::getZoneCode, zoneCode).eq(Location::getWarehouseCode, warehouseCode).eq(Location::getRoadWay, roadWay) |
185 | - .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).eq(Location::getHigh, high) | 190 | + .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).ge(Location::getHigh, high) |
186 | .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode).in(Location::getLocationTypeCode, locationTypeCodeList) | 191 | .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode).in(Location::getLocationTypeCode, locationTypeCodeList) |
187 | .eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING).last("ORDER BY layer asc, id asc limit 1"); | 192 | .eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING).last("ORDER BY layer asc, id asc limit 1"); |
188 | // 单伸位逻辑简单,只需要找到一个空闲库位 | 193 | // 单伸位逻辑简单,只需要找到一个空闲库位 |
@@ -194,4 +199,67 @@ public class LocationAllocationServiceImpl implements LocationAllocationService | @@ -194,4 +199,67 @@ public class LocationAllocationServiceImpl implements LocationAllocationService | ||
194 | return locationCode; | 199 | return locationCode; |
195 | } | 200 | } |
196 | 201 | ||
202 | + @Override | ||
203 | + @Transactional(rollbackFor = Exception.class) | ||
204 | + public Integer getRoadWay(List<Integer> roadWays, String warehouseCode) { | ||
205 | + if (roadWays.size() == 1) { | ||
206 | + return roadWays.get(0); | ||
207 | + } | ||
208 | + roadWays = locationAllocationService.removeRoadWaysByPreLocations(roadWays, warehouseCode); | ||
209 | + int roadWay = getRoadWayByMaxFreeLocation(roadWays, warehouseCode); | ||
210 | + return roadWay; | ||
211 | + } | ||
212 | + | ||
213 | + @Override | ||
214 | + @Transactional(rollbackFor = Exception.class) | ||
215 | + public Integer getRoadWayByMaxFreeLocation(List<Integer> roadWays, String warehouseCode) { | ||
216 | + List<Integer> locationSizeList = new ArrayList<Integer>(); | ||
217 | + int max = 0; | ||
218 | + // 最多空闲库位的巷道索引 | ||
219 | + int index = 0; | ||
220 | + // 获取每个巷道的可用空闲库位数 | ||
221 | + for (Integer roadWay : roadWays) { | ||
222 | + int size = locationService.getEmptyLocationSizeByRoadWay(roadWay, warehouseCode); | ||
223 | + locationSizeList.add(size); | ||
224 | + } | ||
225 | + // 通过比较每个巷道的库位数,最终找到最大库位数的索引,这个索引是roadWays的第几个。 | ||
226 | + for (int i = 0; i < locationSizeList.size(); i++) { | ||
227 | + int locationSize = locationSizeList.get(i);; | ||
228 | + if (max == 0) { | ||
229 | + max = locationSize; | ||
230 | + index = i; | ||
231 | + } else { | ||
232 | + if (max < locationSize) { | ||
233 | + max = locationSize; | ||
234 | + index = i; | ||
235 | + } | ||
236 | + } | ||
237 | + } | ||
238 | + // 获得空闲库位数 | ||
239 | + int maxRoadWay = roadWays.get(index); | ||
240 | + return maxRoadWay; | ||
241 | + } | ||
242 | + | ||
243 | + @Override | ||
244 | + @Transactional(rollbackFor = Exception.class) | ||
245 | + public List<Integer> removeRoadWaysByPreLocations(List<Integer> roadWays, String warehouseCode) { | ||
246 | + // 同巷道分配的库位大于等于2时,这个巷道就不能再分了 | ||
247 | + LambdaQueryWrapper<TaskHeader> taskHeaderLambdaQueryWrapper = Wrappers.lambdaQuery(); | ||
248 | + taskHeaderLambdaQueryWrapper.lt(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED).ne(TaskHeader::getToLocationCode, | ||
249 | + QuantityConstant.EMPTY_STRING); | ||
250 | + List<TaskHeader> taskHeaderList = taskHeaderService.list(taskHeaderLambdaQueryWrapper); | ||
251 | + if (taskHeaderList.size() != 0) { | ||
252 | + List<Integer> roadWayList = taskHeaderList.stream().map(TaskHeader::getRoadWay).collect(toList()); | ||
253 | + List<Integer> removeRoadWayList = new ArrayList<>(); | ||
254 | + for (Integer roadWay : roadWays) { | ||
255 | + int i = Collections.frequency(roadWayList, roadWay); | ||
256 | + if (i >= 2) { | ||
257 | + removeRoadWayList.add(roadWay); | ||
258 | + } | ||
259 | + } | ||
260 | + roadWays.removeAll(removeRoadWayList); | ||
261 | + } | ||
262 | + return roadWays; | ||
263 | + } | ||
264 | + | ||
197 | } | 265 | } |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/api/wcs/service/WcsServiceImpl.java
@@ -241,6 +241,7 @@ public class WcsServiceImpl implements WcsService { | @@ -241,6 +241,7 @@ public class WcsServiceImpl implements WcsService { | ||
241 | taskHeader = new TaskHeader(); | 241 | taskHeader = new TaskHeader(); |
242 | taskHeader.setId(Integer.parseInt(taskNo)); | 242 | taskHeader.setId(Integer.parseInt(taskNo)); |
243 | taskHeader.setZoneCode(location.getZoneCode()); | 243 | taskHeader.setZoneCode(location.getZoneCode()); |
244 | + taskHeader.setRoadWay(location.getRoadWay()); | ||
244 | taskHeader.setPreTaskNo(preTaskNo); | 245 | taskHeader.setPreTaskNo(preTaskNo); |
245 | taskHeader.setWeight(Integer.parseInt(warecellDomain.getWeight())); | 246 | taskHeader.setWeight(Integer.parseInt(warecellDomain.getWeight())); |
246 | taskHeader.setToLocationCode(locationCode); | 247 | taskHeader.setToLocationCode(locationCode); |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/container/service/impl/ContainerServiceImpl.java
@@ -62,6 +62,9 @@ public class ContainerServiceImpl extends ServiceImpl<ContainerMapper, Container | @@ -62,6 +62,9 @@ public class ContainerServiceImpl extends ServiceImpl<ContainerMapper, Container | ||
62 | 62 | ||
63 | @Override | 63 | @Override |
64 | public Container getContainerByCode(String containCode, String warehouseCode) { | 64 | public Container getContainerByCode(String containCode, String warehouseCode) { |
65 | + if (StringUtils.havaLowerCase(containCode)) { | ||
66 | + throw new JeecgBootException("容器不能有小字母" + containCode); | ||
67 | + } | ||
65 | LambdaQueryWrapper<Container> containerLambdaQueryWrapper = Wrappers.lambdaQuery(); | 68 | LambdaQueryWrapper<Container> containerLambdaQueryWrapper = Wrappers.lambdaQuery(); |
66 | containerLambdaQueryWrapper.eq(Container::getCode, containCode).eq(Container::getWarehouseCode, warehouseCode); | 69 | containerLambdaQueryWrapper.eq(Container::getCode, containCode).eq(Container::getWarehouseCode, warehouseCode); |
67 | Container container = this.getOne(containerLambdaQueryWrapper); | 70 | Container container = this.getOne(containerLambdaQueryWrapper); |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/location/service/ILocationService.java
@@ -3,12 +3,7 @@ package org.jeecg.modules.wms.config.location.service; | @@ -3,12 +3,7 @@ package org.jeecg.modules.wms.config.location.service; | ||
3 | import java.util.List; | 3 | import java.util.List; |
4 | 4 | ||
5 | import org.jeecg.common.api.vo.Result; | 5 | import org.jeecg.common.api.vo.Result; |
6 | -import org.jeecg.modules.wms.config.location.dto.CompareContainerTaskDto; | ||
7 | -import org.jeecg.modules.wms.config.location.dto.CompareLocationDto; | ||
8 | -import org.jeecg.modules.wms.config.location.dto.CompareLocationTaskDto; | ||
9 | -import org.jeecg.modules.wms.config.location.dto.QueryCompareContainerTaskDto; | ||
10 | -import org.jeecg.modules.wms.config.location.dto.QueryCompareLocationDto; | ||
11 | -import org.jeecg.modules.wms.config.location.dto.QueryCompareLocationTaskDto; | 6 | +import org.jeecg.modules.wms.config.location.dto.*; |
12 | import org.jeecg.modules.wms.config.location.entity.BatchLocation; | 7 | import org.jeecg.modules.wms.config.location.entity.BatchLocation; |
13 | import org.jeecg.modules.wms.config.location.entity.Location; | 8 | import org.jeecg.modules.wms.config.location.entity.Location; |
14 | import org.jeecg.modules.wms.config.location.entity.LocationInfo; | 9 | import org.jeecg.modules.wms.config.location.entity.LocationInfo; |
@@ -44,6 +39,8 @@ public interface ILocationService extends IService<Location> { | @@ -44,6 +39,8 @@ public interface ILocationService extends IService<Location> { | ||
44 | 39 | ||
45 | Location getEmptyLocation(Location location); | 40 | Location getEmptyLocation(Location location); |
46 | 41 | ||
42 | + int getEmptyLocationSizeByRoadWay(Integer roadWay, String warehouseCode); | ||
43 | + | ||
47 | Location getEmptyInsideLocation(Location location); | 44 | Location getEmptyInsideLocation(Location location); |
48 | 45 | ||
49 | Location getEmptyOutSideLocation(Location location); | 46 | Location getEmptyOutSideLocation(Location location); |
@@ -66,8 +63,7 @@ public interface ILocationService extends IService<Location> { | @@ -66,8 +63,7 @@ public interface ILocationService extends IService<Location> { | ||
66 | PageUtil<CompareLocationDto> compareWcsLocation(QueryCompareLocationDto queryCompareLocationDto); | 63 | PageUtil<CompareLocationDto> compareWcsLocation(QueryCompareLocationDto queryCompareLocationDto); |
67 | 64 | ||
68 | PageUtil<CompareLocationTaskDto> compareWcsLocationTask(QueryCompareLocationTaskDto queryCompareLocationTaskDto); | 65 | PageUtil<CompareLocationTaskDto> compareWcsLocationTask(QueryCompareLocationTaskDto queryCompareLocationTaskDto); |
69 | - | ||
70 | - PageUtil<CompareContainerTaskDto> compareWcsContainerTask(QueryCompareContainerTaskDto queryCompareLocationTaskDto); | ||
71 | 66 | ||
67 | + PageUtil<CompareContainerTaskDto> compareWcsContainerTask(QueryCompareContainerTaskDto queryCompareLocationTaskDto); | ||
72 | 68 | ||
73 | } | 69 | } |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/config/location/service/impl/LocationServiceImpl.java
@@ -79,6 +79,9 @@ public class LocationServiceImpl extends ServiceImpl<LocationMapper, Location> i | @@ -79,6 +79,9 @@ public class LocationServiceImpl extends ServiceImpl<LocationMapper, Location> i | ||
79 | 79 | ||
80 | @Override | 80 | @Override |
81 | public Location getLocationByCode(String locationCode, String warehouseCode) { | 81 | public Location getLocationByCode(String locationCode, String warehouseCode) { |
82 | + if (StringUtils.havaLowerCase(locationCode)) { | ||
83 | + throw new JeecgBootException("库位不能有小字母" + locationCode); | ||
84 | + } | ||
82 | LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); | 85 | LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); |
83 | locationLambdaQueryWrapper.eq(Location::getCode, locationCode).eq(Location::getEnable, QuantityConstant.STATUS_ENABLE).eq(Location::getWarehouseCode, | 86 | locationLambdaQueryWrapper.eq(Location::getCode, locationCode).eq(Location::getEnable, QuantityConstant.STATUS_ENABLE).eq(Location::getWarehouseCode, |
84 | warehouseCode); | 87 | warehouseCode); |
@@ -187,6 +190,15 @@ public class LocationServiceImpl extends ServiceImpl<LocationMapper, Location> i | @@ -187,6 +190,15 @@ public class LocationServiceImpl extends ServiceImpl<LocationMapper, Location> i | ||
187 | } | 190 | } |
188 | 191 | ||
189 | @Override | 192 | @Override |
193 | + public int getEmptyLocationSizeByRoadWay(Integer roadWay, String warehouseCode) { | ||
194 | + LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); | ||
195 | + locationLambdaQueryWrapper.eq(Location::getRoadWay, roadWay).eq(Location::getWarehouseCode, warehouseCode) | ||
196 | + .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY).eq(Location::getContainerCode, QuantityConstant.EMPTY_STRING); | ||
197 | + int count = count(locationLambdaQueryWrapper); | ||
198 | + return count; | ||
199 | + } | ||
200 | + | ||
201 | + @Override | ||
190 | public Location getEmptyInsideLocation(Location location) { | 202 | public Location getEmptyInsideLocation(Location location) { |
191 | LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); | 203 | LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); |
192 | locationLambdaQueryWrapper.eq(Location::getWarehouseCode, location.getWarehouseCode()).eq(Location::getRoadWay, location.getRoadWay()) | 204 | locationLambdaQueryWrapper.eq(Location::getWarehouseCode, location.getWarehouseCode()).eq(Location::getRoadWay, location.getRoadWay()) |
huaheng-wms-core/src/main/java/org/jeecg/modules/wms/task/taskHeader/entity/TaskHeader.java
@@ -142,6 +142,8 @@ public class TaskHeader implements Serializable { | @@ -142,6 +142,8 @@ public class TaskHeader implements Serializable { | ||
142 | private String exceptionName; | 142 | private String exceptionName; |
143 | @ApiModelProperty(value = "异常状态") | 143 | @ApiModelProperty(value = "异常状态") |
144 | private Integer exceptionState; | 144 | private Integer exceptionState; |
145 | + @ApiModelProperty(value = "巷道") | ||
146 | + private Integer roadWay; | ||
145 | /** 备用字段1 */ | 147 | /** 备用字段1 */ |
146 | @Excel(name = "备用字段1", width = 15) | 148 | @Excel(name = "备用字段1", width = 15) |
147 | @ApiModelProperty(value = "备用字段1") | 149 | @ApiModelProperty(value = "备用字段1") |
huaheng-wms-core/src/main/java/org/jeecg/utils/StringUtils.java
@@ -327,6 +327,24 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { | @@ -327,6 +327,24 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils { | ||
327 | } | 327 | } |
328 | 328 | ||
329 | /** | 329 | /** |
330 | + * 字符串有小写 | ||
331 | + */ | ||
332 | + public static boolean havaLowerCase(String str) { | ||
333 | + int strLen; | ||
334 | + boolean have = false; | ||
335 | + if (str == null || (strLen = str.length()) == 0) { | ||
336 | + return true; | ||
337 | + } | ||
338 | + for (int i = 0; i < strLen; i++) { | ||
339 | + char charAt = str.charAt(i); | ||
340 | + if (Character.isLowerCase(charAt)) { | ||
341 | + return true; | ||
342 | + } | ||
343 | + } | ||
344 | + return false; | ||
345 | + } | ||
346 | + | ||
347 | + /** | ||
330 | * 驼峰式命名法 例如:user_name->userName | 348 | * 驼峰式命名法 例如:user_name->userName |
331 | */ | 349 | */ |
332 | public static String toCamelCase(String s) { | 350 | public static String toCamelCase(String s) { |