Commit 6e4f19a13376382a1263bd264ed90eb80a80bc4b
1 parent
aaebeb90
修改请求库位的代码
Showing
7 changed files
with
129 additions
and
62 deletions
src/main/java/com/huaheng/api/wcs/service/warecellAllocation/LocationAllocationService.java
... | ... | @@ -8,6 +8,6 @@ public interface LocationAllocationService { |
8 | 8 | |
9 | 9 | |
10 | 10 | String allocation(int locationRule, List<String> locationTypeCodeList, int high, String area, |
11 | - List<String> roadWay, String warehouseCode, String containerCode, String materialAreaCode); | |
11 | + List<String> roadWays, String warehouseCode, String containerCode, String materialAreaCode); | |
12 | 12 | |
13 | 13 | } |
... | ... |
src/main/java/com/huaheng/api/wcs/service/warecellAllocation/LocationAllocationServiceImpl.java
1 | 1 | package com.huaheng.api.wcs.service.warecellAllocation; |
2 | 2 | |
3 | 3 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
4 | +import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; | |
4 | 5 | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
5 | 6 | import com.huaheng.common.constant.Constants; |
6 | 7 | import com.huaheng.common.constant.QuantityConstant; |
... | ... | @@ -16,6 +17,7 @@ import com.huaheng.pc.config.locationType.domain.LocationType; |
16 | 17 | import com.huaheng.pc.config.locationType.service.LocationTypeService; |
17 | 18 | import com.huaheng.pc.config.zone.domain.Zone; |
18 | 19 | import com.huaheng.pc.config.zone.service.ZoneService; |
20 | +import com.huaheng.pc.task.taskHeader.domain.TaskHeader; | |
19 | 21 | import com.huaheng.pc.task.taskHeader.service.TaskHeaderService; |
20 | 22 | import org.springframework.stereotype.Service; |
21 | 23 | |
... | ... | @@ -44,7 +46,7 @@ public class LocationAllocationServiceImpl implements LocationAllocationService |
44 | 46 | |
45 | 47 | @Override |
46 | 48 | public String allocation(int locationRule, List<String> locationTypeCodeList, |
47 | - int high, String area, List<String> raodWays, String warehouseCode, | |
49 | + int high, String area, List<String> roadWays, String warehouseCode, | |
48 | 50 | String containerCode, String materialAreaCode) { |
49 | 51 | LambdaQueryWrapper<Container> containerLambdaQueryWrapper = Wrappers.lambdaQuery(); |
50 | 52 | containerLambdaQueryWrapper.eq(Container::getCode, containerCode) |
... | ... | @@ -84,9 +86,9 @@ public class LocationAllocationServiceImpl implements LocationAllocationService |
84 | 86 | List<String> mergelocationTypeCodeList = locationTypeCodeList.stream().filter(item -> locationTypeCodes.contains(item)).collect(toList()); |
85 | 87 | switch (locationRule) { |
86 | 88 | case QuantityConstant.DOUBLE_FORK: |
87 | - return doubleRk(area, raodWays, high, warehouseCode, mergelocationTypeCodeList, materialAreaCode); | |
89 | + return doubleRk(area, roadWays, high, warehouseCode, mergelocationTypeCodeList, materialAreaCode); | |
88 | 90 | case QuantityConstant.SINGLE_FORK: |
89 | - return singleRk(area, raodWays, high, warehouseCode, mergelocationTypeCodeList, materialAreaCode); | |
91 | + return singleRk(area, roadWays, high, warehouseCode, mergelocationTypeCodeList, materialAreaCode); | |
90 | 92 | } |
91 | 93 | return null; |
92 | 94 | } |
... | ... | @@ -97,71 +99,50 @@ public class LocationAllocationServiceImpl implements LocationAllocationService |
97 | 99 | private String doubleRk(String area, List<String> roadWays, int high, String warehouseCode, |
98 | 100 | List<String> locationTypeCodeList, String materialAreaCode) { |
99 | 101 | |
100 | - LambdaQueryWrapper<Location> locationLambdaQueryWrapper = Wrappers.lambdaQuery(); | |
101 | - locationLambdaQueryWrapper.eq(Location::getArea, area). | |
102 | - eq(Location::getWarehouseCode, warehouseCode) | |
103 | - .in(StringUtils.isNotEmpty(roadWays), Location::getRoadway, roadWays) | |
104 | - .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY) | |
105 | - .eq(Location::getHigh, high) | |
106 | - .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode) | |
107 | - .in(Location::getLocationType, locationTypeCodeList) | |
108 | - .eq(Location::getContainerCode, ""); | |
109 | - List<Location> totalLocationList = locationService.list(locationLambdaQueryWrapper); | |
110 | - if(totalLocationList.size() <= 4) { | |
102 | + if(CollectionUtils.isEmpty(roadWays)){ | |
111 | 103 | return null; |
112 | 104 | } |
113 | - | |
114 | - LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery(); | |
115 | - locationLambda.eq(Location::getArea, area). | |
116 | - eq(Location::getWarehouseCode, warehouseCode) | |
117 | - .in(StringUtils.isNotEmpty(roadWays), Location::getRoadway, roadWays) | |
118 | - .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY) | |
119 | - .eq(Location::getHigh, high) | |
120 | - .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode) | |
121 | - .eq(Location::getRowFlag, QuantityConstant.ROW_OUT) | |
122 | - .in(Location::getLocationType, locationTypeCodeList) | |
123 | - .eq(Location::getContainerCode, ""); | |
124 | - List<Location> locationList = locationService.list(locationLambda); | |
125 | - List<Location> removeLocaationList = new ArrayList<>(); | |
126 | - if(locationList != null && locationList.size() > 0) { | |
127 | - for (Location location1 : locationList) { | |
128 | - if (taskHeaderService.getUncompleteTaskInNear(location1) > 0) { | |
129 | - removeLocaationList.add(location1); | |
130 | - } | |
131 | - } | |
132 | - } | |
133 | - locationList.removeAll(removeLocaationList); | |
134 | - | |
135 | - | |
136 | - | |
137 | - if (locationList == null || locationList.size() == 0) { | |
138 | - locationLambda = Wrappers.lambdaQuery(); | |
139 | - locationLambda.eq(Location::getArea, area). | |
140 | - eq(Location::getWarehouseCode, warehouseCode) | |
141 | - .in(StringUtils.isNotEmpty(roadWays), Location::getRoadway, roadWays) | |
142 | - .eq(Location::getStatus, QuantityConstant.STATUS_LOCATION_EMPTY) | |
105 | + for (String roadWay : roadWays) { | |
106 | + List<Location> roadwaylist=null; | |
107 | + List<String> locationss=new ArrayList<>(); | |
108 | + LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery(); | |
109 | + locationLambda | |
110 | + .eq(Location::getArea, area) | |
111 | + .eq(Location::getWarehouseCode, warehouseCode) | |
143 | 112 | .eq(Location::getHigh, high) |
144 | - .eq(StringUtils.isNotEmpty(materialAreaCode), Location::getMaterialAreaCode, materialAreaCode) | |
145 | - .eq(Location::getRowFlag, QuantityConstant.ROW_IN) | |
113 | + .eq(Location::getRoadway,roadWay) | |
114 | + .eq(Location::getContainerCode,"") | |
146 | 115 | .in(Location::getLocationType, locationTypeCodeList) |
147 | - .eq(Location::getContainerCode, ""); | |
148 | - locationList = locationService.list(locationLambda); | |
149 | - removeLocaationList = new ArrayList<>(); | |
150 | - if(locationList != null && locationList.size() > 0) { | |
151 | - for (Location location1 : locationList) { | |
152 | - if (taskHeaderService.getUncompleteTaskInNear(location1) > 0) { | |
153 | - removeLocaationList.add(location1); | |
116 | + .eq(Location::getStatus,QuantityConstant.STATUS_LOCATION_EMPTY); | |
117 | + roadwaylist = locationService.list(locationLambda); | |
118 | + if(CollectionUtils.isEmpty(roadwaylist)||roadwaylist.size()<11){ | |
119 | + return null; | |
120 | + } | |
121 | + //查出外侧有货或者锁住(即有任务),内测无货的库位 | |
122 | + List<String> locationlist =locationService.selectlistEnpty(roadWay); | |
123 | + if(!locationlist.isEmpty()){ | |
124 | + locationss.addAll(locationlist); | |
125 | + } | |
126 | + | |
127 | + //查出内侧有任务的库位 | |
128 | + List<Location> locations = locationService.selectCode(roadWay); | |
129 | + if(!locations.isEmpty()) { | |
130 | + //筛选内部库位 | |
131 | + for(Location item :locations){ | |
132 | + Location condition = locationService.getInsideNear(item); | |
133 | + if(condition!=null) { | |
134 | + locationss.add(condition.getCode()); | |
154 | 135 | } |
155 | 136 | } |
137 | + | |
156 | 138 | } |
157 | - locationList.removeAll(removeLocaationList); | |
158 | - } | |
159 | - if (locationList == null || locationList.size() == 0) { | |
160 | - return null; | |
139 | + Location location = locationService.getEmptyLocationOne(roadWay, Integer.valueOf(high).toString(), locationss); | |
140 | + if(StringUtils.isNull(location)){ | |
141 | + continue; | |
142 | + } | |
143 | + return location.getCode(); | |
161 | 144 | } |
162 | - Location location = locationList.stream().findFirst().orElse(null); | |
163 | - String locationCode = location.getCode(); | |
164 | - return locationCode; | |
145 | + return null; | |
165 | 146 | } |
166 | 147 | |
167 | 148 | /** |
... | ... |
src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java
... | ... | @@ -49,6 +49,7 @@ import com.huaheng.api.wcs.domain.WcsTask; |
49 | 49 | |
50 | 50 | import javax.annotation.Resource; |
51 | 51 | import java.util.ArrayList; |
52 | +import java.util.Arrays; | |
52 | 53 | import java.util.List; |
53 | 54 | import java.util.stream.Collectors; |
54 | 55 | |
... | ... | @@ -124,6 +125,9 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService |
124 | 125 | if (StringUtils.isNull(wcsTask.getHeight())) { |
125 | 126 | return AjaxResult.error("高为空"); |
126 | 127 | } |
128 | + if(StringUtils.isEmpty(wcsTask.getRoadWay())){ | |
129 | + return AjaxResult.error("巷道为空"); | |
130 | + } | |
127 | 131 | return verticalWarehouseAllocation(wcsTask); |
128 | 132 | } |
129 | 133 | |
... | ... | @@ -132,6 +136,7 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService |
132 | 136 | String area = wcsTask.getArea(); |
133 | 137 | String locationCode = null; |
134 | 138 | String height = wcsTask.getHeight(); |
139 | + List<String> roadWay = Arrays.asList(wcsTask.getRoadWay().split(",")); | |
135 | 140 | if(height == null) { |
136 | 141 | return AjaxResult.error("分配库位时,高度为空"); |
137 | 142 | } |
... | ... | @@ -197,7 +202,7 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService |
197 | 202 | } |
198 | 203 | //1、双升位:值1 2、库位类型:值L 3、高低库位:值0 4、库区:值L 5、巷道:值null 6、仓库 7、托盘号 8、物料分区 |
199 | 204 | locationCode = locationAllocationService.allocation(allocationRule, |
200 | - locationTypeCodeList, high, area, null, warehouseCode, containerCode, materialAreaCode); | |
205 | + locationTypeCodeList, high, area, roadWay, warehouseCode, containerCode, materialAreaCode); | |
201 | 206 | if (StringUtils.isEmpty(locationCode)) { |
202 | 207 | return AjaxResult.error("没有库位可分配"); |
203 | 208 | } |
... | ... |
src/main/java/com/huaheng/pc/config/location/mapper/LocationMapper.java
... | ... | @@ -31,4 +31,15 @@ public interface LocationMapper extends BaseMapper<Location> { |
31 | 31 | int getFirstRowOfZone(@Param("warehouseCode") String warehouseCode, @Param("locationType") String locationType); |
32 | 32 | |
33 | 33 | int getLastRowOfZone(@Param("warehouseCode") String warehouseCode, @Param("locationType") String locationType); |
34 | + | |
35 | + //查出外侧有货,内测无货的库位 | |
36 | + List<String> selectlistEnpty(@Param("roadWay")String roadWay); | |
37 | + | |
38 | + | |
39 | + List<Location> selectCode(@Param("roadWay")String roadWay); | |
40 | + | |
41 | + Location selectModelByHg(@Param("roadWay")String roadWay, @Param("heght")String heght); | |
42 | + | |
43 | + Location selectModelByOld(@Param("roadWay")String roadWay, @Param("heght")String heght,@Param("codes")List<String> codes); | |
44 | + | |
34 | 45 | } |
35 | 46 | \ No newline at end of file |
... | ... |
src/main/java/com/huaheng/pc/config/location/service/LocationService.java
... | ... | @@ -114,4 +114,14 @@ public interface LocationService extends IService<Location>{ |
114 | 114 | public List<Location> remoteList(String type); |
115 | 115 | |
116 | 116 | void upstatus(String code); |
117 | + | |
118 | + List<String> selectlistEnpty(String roadWay); | |
119 | + | |
120 | + List<Location> selectCode(String roadWay); | |
121 | + | |
122 | + Location getEmptyLocationOne(String roadWay,String heght,List<String> codes); | |
123 | + | |
124 | + Location selectModelByHg(String roadWay, String heght); | |
125 | + | |
126 | + Location selectModelByOld(String roadWay, String heght,List<String> codes); | |
117 | 127 | } |
... | ... |
src/main/java/com/huaheng/pc/config/location/service/LocationServiceImpl.java
... | ... | @@ -659,4 +659,37 @@ public class LocationServiceImpl extends ServiceImpl<LocationMapper, Location> i |
659 | 659 | int update = locationMapper.update(user, userUpdateWrapper); |
660 | 660 | System.out.println(update); |
661 | 661 | } |
662 | + | |
663 | + @Override | |
664 | + public List<String> selectlistEnpty(String roadWay) { | |
665 | + return locationMapper.selectlistEnpty(roadWay); | |
666 | + } | |
667 | + | |
668 | + @Override | |
669 | + public List<Location> selectCode(String roadWay) { | |
670 | + return locationMapper.selectCode(roadWay); | |
671 | + } | |
672 | + | |
673 | + @Override | |
674 | + public Location getEmptyLocationOne(String roadWay, String heght, List<String> codes) { | |
675 | + Location location = new Location(); | |
676 | + if(codes.isEmpty()){ | |
677 | + location = | |
678 | + locationService.selectModelByHg(roadWay,heght); | |
679 | + }else { | |
680 | + location = | |
681 | + locationService.selectModelByOld(roadWay, heght,codes); | |
682 | + } | |
683 | + return location; | |
684 | + } | |
685 | + | |
686 | + @Override | |
687 | + public Location selectModelByHg(String roadWay, String heght) { | |
688 | + return locationMapper.selectModelByHg(roadWay,heght); | |
689 | + } | |
690 | + | |
691 | + @Override | |
692 | + public Location selectModelByOld(String roadWay, String heght, List<String> codes) { | |
693 | + return locationMapper.selectModelByOld(roadWay, heght,codes); | |
694 | + } | |
662 | 695 | } |
... | ... |
src/main/resources/mybatis/config/LocationMapper.xml
... | ... | @@ -161,5 +161,32 @@ |
161 | 161 | select max(iRow) from location where warehouseCode=#{warehouseCode} and locationType = #{locationType} |
162 | 162 | </select> |
163 | 163 | |
164 | + <select id="selectlistEnpty" resultType="java.lang.String"> | |
165 | + SELECT a.code from (SELECT * from location where rowFlag=1 and containerCode='' and zoneCode='L' and roadWay =#{roadWay}) a | |
166 | + INNER JOIN (SELECT * from location where rowFlag=0 and (containerCode != '' or `status`='lock') and zoneCode='L' and roadWay =#{roadWay}) b on a.iColumn=b.iColumn and a.iLayer=b.iLayer | |
167 | + </select> | |
168 | + | |
169 | + | |
170 | + <select id="selectCode" resultType="com.huaheng.pc.config.location.domain.Location"> | |
171 | + select l.* from location l inner join task_header t on t.status !=100 and l.roadWay=#{roadWay} and l.zoneCode='L' and l.rowFlag=1 and (t.fromLocation = l.code or t.toLocation =l.code) | |
172 | + </select> | |
173 | + | |
174 | + <select id="selectModelByHg" resultType="com.huaheng.pc.config.location.domain.Location"> | |
175 | + select * from location where locationType='L' and containerCode ='' and status='empty' | |
176 | + and roadWay = #{roadWay} and high=#{heght} | |
177 | + order by rowFlag desc,iColumn desc,iLayer asc limit 1 | |
178 | + | |
179 | + </select> | |
180 | + | |
181 | + | |
182 | + <select id="selectModelByOld" resultType="com.huaheng.pc.config.location.domain.Location"> | |
183 | + select * from location where locationType='L' and containerCode ='' and status='empty' | |
184 | + and roadWay = #{roadWay} and high=#{heght} | |
185 | + and code not in | |
186 | + <foreach item="item" index="index" collection="codes" open="(" separator="," close=")"> | |
187 | + #{item} | |
188 | + </foreach> | |
189 | + order by rowFlag desc,iColumn desc,iLayer asc limit 1 | |
190 | + </select> | |
164 | 191 | |
165 | 192 | </mapper> |
166 | 193 | \ No newline at end of file |
... | ... |