LocationAllocationServiceImpl.java
4.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package com.huaheng.api.wcs.service.warecellAllocation;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.huaheng.common.exception.service.ServiceException;
import com.huaheng.common.utils.StringUtils;
import com.huaheng.pc.config.location.domain.Location;
import com.huaheng.pc.config.location.service.LocationService;
import com.huaheng.pc.config.locationType.domain.LocationType;
import com.huaheng.pc.task.taskHeader.service.TaskHeaderService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class LocationAllocationServiceImpl implements LocationAllocationService {
@Resource
private LocationService locationService;
@Resource
private TaskHeaderService taskHeaderService;
@Override
public String allocation(String locationRule, String roadWay, String warehouseCode, List<LocationType> locationTypeList) {
if (StringUtils.isEmpty(locationRule)) {
return null;
}
switch (locationRule) {
case "DoubleRK":
return doubleRk(roadWay, warehouseCode, locationTypeList);
case "SingleRK":
return singleRk(roadWay, warehouseCode, locationTypeList);
}
return null;
}
/*
* 双伸位库位入库分配库位
*/
private String doubleRk(String roadWay, String warehouseCode, List<LocationType> locationTypeList) {
LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery();
locationLambda.eq(Location::getRoadway, roadWay).
eq(Location::getWarehouseCode, warehouseCode)
.eq(Location::getStatus, "empty")
.eq(Location::getRowFlag, 1)
.eq(Location::getContainerCode, "");
List<Location> locationList = locationService.list(locationLambda);
List<Location> removeLocaationList = new ArrayList<>();
for (Location location1 : locationList) {
if (taskHeaderService.getUncompleteTaskInNear(location1) > 0) {
removeLocaationList.add(location1);
} else {
break;
}
}
locationList.removeAll(removeLocaationList);
if (locationList == null || locationList.size() == 0) {
locationLambda = Wrappers.lambdaQuery();
locationLambda.eq(Location::getRoadway, roadWay).
eq(Location::getWarehouseCode, warehouseCode)
.eq(Location::getStatus, "empty")
.eq(Location::getRowFlag, 0)
.eq(Location::getContainerCode, "");
locationList = locationService.list(locationLambda);
removeLocaationList = new ArrayList<>();
for (Location location1 : locationList) {
if (taskHeaderService.getUncompleteTaskInNear(location1) > 0) {
removeLocaationList.add(location1);
} else {
break;
}
}
locationList.removeAll(removeLocaationList);
}
String locationCode = filter(locationList, locationTypeList, roadWay);
return locationCode;
}
private String singleRk(String roadWay, String warehouseCode, List<LocationType> locationTypeList) {
LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery();
locationLambda.eq(Location::getRoadway, roadWay).
eq(Location::getWarehouseCode, warehouseCode)
.eq(Location::getStatus, "empty")
.eq(Location::getContainerCode, "");
List<Location> locationList = locationService.list(locationLambda);
String locationCode = filter(locationList, locationTypeList, roadWay);
return locationCode;
}
private String filter(List<Location> locationList, List<LocationType> locationTypeList, String roadway) {
List<String> codeList = locationTypeList.stream().map(t -> t.getCode()).collect(Collectors.toList());
List<Location> newLocation = locationList.stream().filter(t -> codeList.contains(t.getLocationType()) && t.getRoadway().equals(roadway)).collect(Collectors.toList());
if (newLocation.isEmpty()) {
return null;
} else {
return newLocation.get(0).getCode();
}
}
}