Commit 63c7fdb64c8fcb99b12224e445e94e01df33f86f
1 parent
279a7c36
1.库位分配兼容空托盘入库
2.出库加上出库站台字段
Showing
7 changed files
with
104 additions
and
84 deletions
src/main/java/com/huaheng/api/wcs/service/warecellAllocation/WarecellAllocationServiceImpl.java
... | ... | @@ -146,55 +146,76 @@ public class WarecellAllocationServiceImpl implements WarecellAllocationService |
146 | 146 | //去重 |
147 | 147 | receiptContainerDetailList = receiptContainerDetailList.stream().distinct().collect(Collectors.toList()); |
148 | 148 | |
149 | - /* 循环入库组盘明细,重新分配库位*/ | |
150 | - for (ReceiptContainerDetail receiptContainerDetail : receiptContainerDetailList) { | |
151 | - ReceiptContainerHeader receiptContainerHeader = receiptContainerHeaderService.getById(receiptContainerDetail.getReceiptContainerId()); | |
152 | - | |
153 | - String locatingRule = this.taskPositioning(receiptContainerDetail); | |
154 | - | |
155 | - LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambda = Wrappers.lambdaQuery(); | |
156 | - filterConfigDetailLambda.eq(FilterConfigDetail::getCode, locatingRule) | |
157 | - .eq(FilterConfigDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); | |
158 | - FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(filterConfigDetailLambda); | |
159 | - String[] locatingRules = filterConfigDetail.getStatement().split("cut"); | |
160 | - | |
161 | - //根据定位规则查询库位编码 | |
162 | - LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery(); | |
163 | - locationLambda.last(locatingRules[0]); | |
164 | - locationLambda.eq(Location::getRoadway, wcsTask.getDestination()); | |
165 | - List<Location> locationList = locationService.list(locationLambda); | |
166 | - if(locationList == null || locationList.size() == 0) { | |
167 | - locationLambda.last(locatingRules[1]); | |
168 | - locationList = locationService.list(locationLambda); | |
169 | - }; | |
170 | - locationCode = filter(locationList, locationTypeList, wcsTask.getDestination()); | |
171 | - if (StringUtils.isEmpty(locationCode)){ | |
172 | - throw new ServiceException("没有库位可分配"); | |
173 | - } | |
174 | - | |
175 | - if (StringUtils.isNotEmpty(locationCode)){ | |
176 | - locationService.updateStatus(locationCode, "lock"); | |
177 | - if (StringUtils.isNotEmpty(taskHeader.getToLocation()) && !locationCode.equals(taskHeader.getToLocation())){ | |
178 | - locationService.updateStatus(taskHeader.getToLocation(), "empty"); | |
149 | + if(receiptContainerDetailList != null && receiptContainerDetailList.size() > 0) { | |
150 | + /* 循环入库组盘明细,重新分配库位*/ | |
151 | + for (ReceiptContainerDetail receiptContainerDetail : receiptContainerDetailList) { | |
152 | + String locatingRule = null; | |
153 | + ReceiptContainerHeader receiptContainerHeader= null; | |
154 | + if(receiptContainerDetail != null) { | |
155 | + receiptContainerHeader = receiptContainerHeaderService.getById(receiptContainerDetail.getReceiptContainerId()); | |
156 | + locatingRule = this.taskPositioning(receiptContainerDetail); | |
157 | + } | |
158 | + if (StringUtils.isEmpty(locatingRule)){ | |
159 | + //物料类别中定位规则为空时,查询入库首选项 | |
160 | + LambdaQueryWrapper<ConfigValue> configValueLambda = Wrappers.lambdaQuery(); | |
161 | + configValueLambda.eq(ConfigValue::getWarehouseCode, ShiroUtils.getWarehouseCode()) | |
162 | + .eq(ConfigValue::getModuleType, "receipt") | |
163 | + .eq(ConfigValue::getRecordType, "入库首选项"); | |
164 | + ConfigValue configValue = configValueService.getOne(configValueLambda); | |
165 | + LambdaQueryWrapper<ReceiptPreference> receiptPreferenceLambda = Wrappers.lambdaQuery(); | |
166 | + receiptPreferenceLambda.eq(ReceiptPreference::getCode, configValue.getValue()) | |
167 | + .eq(ReceiptPreference::getWarehouseCode, ShiroUtils.getWarehouseCode()); | |
168 | + ReceiptPreference receiptPreference = receiptPreferenceService.getOne(receiptPreferenceLambda); | |
169 | + locatingRule = receiptPreferenceService.getOne(receiptPreferenceLambda).getLocationRule(); | |
170 | + } | |
171 | + LambdaQueryWrapper<FilterConfigDetail> filterConfigDetailLambda = Wrappers.lambdaQuery(); | |
172 | + filterConfigDetailLambda.eq(FilterConfigDetail::getCode, locatingRule) | |
173 | + .eq(FilterConfigDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); | |
174 | + FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(filterConfigDetailLambda); | |
175 | + String[] locatingRules = filterConfigDetail.getStatement().split("cut"); | |
176 | + | |
177 | + //根据定位规则查询库位编码 | |
178 | + LambdaQueryWrapper<Location> locationLambda = Wrappers.lambdaQuery(); | |
179 | + locationLambda.last(locatingRules[0]); | |
180 | + locationLambda.eq(Location::getRoadway, wcsTask.getDestination()); | |
181 | + List<Location> locationList = locationService.list(locationLambda); | |
182 | + if (locationList == null || locationList.size() == 0) { | |
183 | + locationLambda.last(locatingRules[1]); | |
184 | + locationList = locationService.list(locationLambda); | |
185 | + } | |
186 | + ; | |
187 | + locationCode = filter(locationList, locationTypeList, wcsTask.getDestination()); | |
188 | + if (StringUtils.isEmpty(locationCode)) { | |
189 | + throw new ServiceException("没有库位可分配"); | |
179 | 190 | } |
180 | - } else { | |
181 | - throw new ServiceException("定位失败,请检查定位规则是否正确"); | |
182 | - } | |
183 | 191 | |
184 | - //更新库位编码到组盘头表 | |
185 | - receiptContainerHeader.setToLocation(locationCode); | |
186 | - if (!receiptContainerHeaderService.updateById(receiptContainerHeader)){ | |
187 | - throw new ServiceException("更新库位失败"); | |
188 | - } | |
192 | + if (StringUtils.isNotEmpty(locationCode)) { | |
193 | + locationService.updateStatus(locationCode, "lock"); | |
194 | + if (StringUtils.isNotEmpty(taskHeader.getToLocation()) && !locationCode.equals(taskHeader.getToLocation())) { | |
195 | + locationService.updateStatus(taskHeader.getToLocation(), "empty"); | |
196 | + } | |
197 | + } else { | |
198 | + throw new ServiceException("定位失败,请检查定位规则是否正确"); | |
199 | + } | |
200 | + if(receiptContainerDetail != null) { | |
201 | + //更新库位编码到组盘头表 | |
202 | + receiptContainerHeader.setToLocation(locationCode); | |
203 | + if (!receiptContainerHeaderService.updateById(receiptContainerHeader)) { | |
204 | + throw new ServiceException("更新库位失败"); | |
205 | + } | |
189 | 206 | |
190 | - //把库位编码赋到该入库组盘头表下的所有明细 | |
191 | - LambdaQueryWrapper<ReceiptContainerDetail> lambda = Wrappers.lambdaQuery(); | |
192 | - lambda.eq(ReceiptContainerDetail::getReceiptContainerId, receiptContainerHeader.getId()) | |
193 | - .eq(ReceiptContainerDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); | |
194 | - List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(lambda); | |
195 | - for (ReceiptContainerDetail receiptContainerDetail2: receiptContainerDetails) { | |
196 | - receiptContainerDetail2.setLocationCode(locationCode); | |
197 | - if (!receiptContainerDetailService.updateById(receiptContainerDetail2)){throw new ServiceException("更新库位编码到入库组盘明细");} | |
207 | + //把库位编码赋到该入库组盘头表下的所有明细 | |
208 | + LambdaQueryWrapper<ReceiptContainerDetail> lambda = Wrappers.lambdaQuery(); | |
209 | + lambda.eq(ReceiptContainerDetail::getReceiptContainerId, receiptContainerHeader.getId()) | |
210 | + .eq(ReceiptContainerDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()); | |
211 | + List<ReceiptContainerDetail> receiptContainerDetails = receiptContainerDetailService.list(lambda); | |
212 | + for (ReceiptContainerDetail receiptContainerDetail2 : receiptContainerDetails) { | |
213 | + receiptContainerDetail2.setLocationCode(locationCode); | |
214 | + if (!receiptContainerDetailService.updateById(receiptContainerDetail2)) { | |
215 | + throw new ServiceException("更新库位编码到入库组盘明细"); | |
216 | + } | |
217 | + } | |
218 | + } | |
198 | 219 | } |
199 | 220 | } |
200 | 221 | |
... | ... |
src/main/java/com/huaheng/pc/config/locationType/controller/LocationTypeController.java
... | ... | @@ -104,15 +104,15 @@ public class LocationTypeController extends BaseController |
104 | 104 | if(StringUtils.isEmpty(locationType.getCode())){ |
105 | 105 | return AjaxResult.error("库位类型为空"); |
106 | 106 | } |
107 | - if(StringUtils.isEmpty(locationType.getZoneCode())){ | |
108 | - return AjaxResult.error("库位类型对应的区域为空"); | |
109 | - } | |
110 | - //查找location,是否存在 | |
111 | - | |
112 | - if(!zoneService.exists(locationType.getZoneCode(),ShiroUtils.getWarehouseCode())) | |
113 | - { | |
114 | - return AjaxResult.error("库位类型对应的区域:"+locationType.getZoneCode()+" 不在系统管制范围,请核对"); | |
115 | - } | |
107 | +// if(StringUtils.isEmpty(locationType.getZoneCode())){ | |
108 | +// return AjaxResult.error("库位类型对应的区域为空"); | |
109 | +// } | |
110 | +// //查找location,是否存在 | |
111 | +// | |
112 | +// if(!zoneService.exists(locationType.getZoneCode(),ShiroUtils.getWarehouseCode())) | |
113 | +// { | |
114 | +// return AjaxResult.error("库位类型对应的区域:"+locationType.getZoneCode()+" 不在系统管制范围,请核对"); | |
115 | +// } | |
116 | 116 | |
117 | 117 | locationType.setWarehouseCode(ShiroUtils.getWarehouseCode()); |
118 | 118 | locationType.setCreatedBy(ShiroUtils.getLoginName()); |
... | ... |
src/main/java/com/huaheng/pc/config/locationType/domain/LocationType.java
... | ... | @@ -30,11 +30,6 @@ public class LocationType implements Serializable { |
30 | 30 | @TableField(value = "warehouseCode") |
31 | 31 | private String warehouseCode; |
32 | 32 | /** |
33 | - * 区域编码 | |
34 | - */ | |
35 | - @TableField(value = "zoneCode") | |
36 | - private String zoneCode; | |
37 | - /** | |
38 | 33 | * 描述 |
39 | 34 | */ |
40 | 35 | @TableField(value = "name") |
... | ... |
src/main/java/com/huaheng/pc/task/taskHeader/domain/TaskHeader.java
... | ... | @@ -110,6 +110,14 @@ public class TaskHeader implements Serializable { |
110 | 110 | private Integer status; |
111 | 111 | |
112 | 112 | /** |
113 | + * 出库站台 | |
114 | + */ | |
115 | + @TableField(value = "stationCode") | |
116 | + @ApiModelProperty(value="出库站台") | |
117 | + private String stationCode; | |
118 | + | |
119 | + | |
120 | + /** | |
113 | 121 | * 波次号 |
114 | 122 | */ |
115 | 123 | @TableField(value = "waveId") |
... | ... | @@ -309,4 +317,6 @@ public class TaskHeader implements Serializable { |
309 | 317 | @TableField(value = "weight") |
310 | 318 | private String weight; |
311 | 319 | private static final long serialVersionUID = 1L; |
320 | + | |
321 | + | |
312 | 322 | } |
313 | 323 | \ No newline at end of file |
... | ... |
src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
... | ... | @@ -444,8 +444,8 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
444 | 444 | if(task.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLERECEIPT) || task.getTaskType().equals(QuantityConstant.TASK_TYPE_EMPTYRECEIPT)){ |
445 | 445 | if(StringUtils.isEmpty(task.getToLocation())){ |
446 | 446 | //自动分配库位 |
447 | - AjaxResult ajaxResult = this.setLocationCode(task.getId(),0 ); | |
448 | - task.setToLocation((String)ajaxResult.getData()); | |
447 | + // AjaxResult ajaxResult = this.setLocationCode(task.getId(),0 ); | |
448 | + // task.setToLocation((String)ajaxResult.getData()); | |
449 | 449 | } |
450 | 450 | } |
451 | 451 | //如果没有库位不能完成 |
... | ... |
src/main/java/com/huaheng/pc/task/taskHeader/service/WorkTaskService.java
... | ... | @@ -91,24 +91,22 @@ public class WorkTaskService { |
91 | 91 | if (receiptPreferences.isEmpty()) { |
92 | 92 | return AjaxResult.error("入库首选项不存在"); |
93 | 93 | } |
94 | - if (StringUtils.isEmpty(receiptPreferences.get(0).getEmptyLocRule())) { | |
95 | - return AjaxResult.error("入库首选项为绑定空库位规则,目标库位不允许为空"); | |
96 | - } | |
97 | - | |
98 | - LambdaQueryWrapper<FilterConfigDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(); | |
99 | - lambdaQueryWrapper.eq(FilterConfigDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) | |
100 | - .eq(FilterConfigDetail::getCode, receiptPreferences.get(0).getEmptyLocRule()); | |
101 | - FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(lambdaQueryWrapper); | |
102 | - if (StringUtils.isNull(filterConfigDetail)) { | |
103 | - return AjaxResult.error("首选项绑定的空库位规则不存在"); | |
104 | - } | |
105 | - QueryWrapper<Location> queryWrapper = new QueryWrapper<>(); | |
106 | - queryWrapper.eq("1",1).last(filterConfigDetail.getStatement()); | |
107 | - Location location = locationService.getOne(queryWrapper); | |
108 | - if (StringUtils.isNull(location)) { | |
109 | - return AjaxResult.error("没有库位可分配"); | |
94 | + if (StringUtils.isNotEmpty(receiptPreferences.get(0).getEmptyLocRule())) { | |
95 | + LambdaQueryWrapper<FilterConfigDetail> lambdaQueryWrapper = Wrappers.lambdaQuery(); | |
96 | + lambdaQueryWrapper.eq(FilterConfigDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) | |
97 | + .eq(FilterConfigDetail::getCode, receiptPreferences.get(0).getEmptyLocRule()); | |
98 | + FilterConfigDetail filterConfigDetail = filterConfigDetailService.getOne(lambdaQueryWrapper); | |
99 | + if (StringUtils.isNull(filterConfigDetail)) { | |
100 | + return AjaxResult.error("首选项绑定的空库位规则不存在"); | |
101 | + } | |
102 | + QueryWrapper<Location> queryWrapper = new QueryWrapper<>(); | |
103 | + queryWrapper.eq("1",1).last(filterConfigDetail.getStatement()); | |
104 | + Location location = locationService.getOne(queryWrapper); | |
105 | + if (StringUtils.isNull(location)) { | |
106 | + return AjaxResult.error("没有库位可分配"); | |
107 | + } | |
108 | + destinationLocation = location.getCode(); | |
110 | 109 | } |
111 | - destinationLocation = location.getCode(); | |
112 | 110 | } |
113 | 111 | |
114 | 112 | //判断托盘是否已经存在任务 |
... | ... | @@ -430,7 +428,7 @@ public class WorkTaskService { |
430 | 428 | * @param sourceLocation 库位 |
431 | 429 | * @return |
432 | 430 | */ |
433 | - @Transactional(rollbackFor = Exception.class) | |
431 | + @Transactional | |
434 | 432 | public AjaxResult createEmptyCheckOut(String containerCode, String sourceLocation) { |
435 | 433 | /* 容器编码*/ |
436 | 434 | String conCode = null; |
... | ... |
src/main/resources/templates/inventory/inventoryHeader/inventoryHeader.html
... | ... | @@ -66,10 +66,6 @@ |
66 | 66 | shiro:hasPermission="inventory:inventoryHeader:emptyIn"> |
67 | 67 | <i class="fa fa-level-down"></i> 空托入库 |
68 | 68 | </a> |
69 | - <a class="btn btn-outline btn-default btn-rounded" onclick="emptyCheckOut()" | |
70 | - shiro:hasPermission="inventory:inventoryHeader:emptyCheckOut"> | |
71 | - <i class="fa fa fa-eye"></i> 空托出库查看 | |
72 | - </a> | |
73 | 69 | <a class="btn btn-outline btn-info btn-rounded" onclick="emptyOut()" |
74 | 70 | shiro:hasPermission="inventory:inventoryHeader:emptyOut"> |
75 | 71 | <i class="fa fa-level-up"></i> 空托出库 |
... | ... |