Commit 3a0d3b0c64c03976214422a5fdc04b4d1398d927
Merge remote-tracking branch 'origin/develop' into develop
Showing
6 changed files
with
155 additions
and
32 deletions
src/main/java/com/huaheng/mobile/receipt/MobileBatchReceiptController.java
... | ... | @@ -266,6 +266,36 @@ public class MobileBatchReceiptController { |
266 | 266 | throw new JSONException("没有找到入库单"); |
267 | 267 | } |
268 | 268 | |
269 | + LambdaQueryWrapper<ReceiptContainerHeader> lambda = Wrappers.lambdaQuery(); | |
270 | + lambda.eq(ReceiptContainerHeader::getContainerCode, containerCode) | |
271 | + .lt(ReceiptContainerHeader::getStatus, QuantityConstant.RECEIPT_CONTAINER_FINISHED); | |
272 | + List<ReceiptContainerHeader> list = receiptContainerHeaderService.list(lambda); | |
273 | + if (list.size() >= 1){ | |
274 | + throw new ServiceException("容器已经生成任务,不能放物料了!"); | |
275 | + } | |
276 | + ReceiptContainerHeader receiptContainerHeader = new ReceiptContainerHeader(); | |
277 | + //如果不存在记录则新建记录 | |
278 | + receiptContainerHeader.setWarehouseCode(ShiroUtils.getWarehouseCode()); | |
279 | + receiptContainerHeader.setCompanyCode(companyCode); | |
280 | + receiptContainerHeader.setContainerCode(containerCode); | |
281 | + Container container2 = containerService.findAllByCode(containerCode); | |
282 | + receiptContainerHeader.setContainerType(container2.getContainerType()); | |
283 | + receiptContainerHeader.setTaskType(String.valueOf(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT)); | |
284 | + receiptContainerHeader.setFromLocation(container2.getLocationCode()); | |
285 | + receiptContainerHeader.setToLocation(locationCode); | |
286 | + receiptContainerHeader.setCreatedBy(ShiroUtils.getLoginName()); | |
287 | + receiptContainerHeader.setLastUpdatedBy(ShiroUtils.getLoginName()); | |
288 | + receiptContainerHeader.setStatus((short)10); | |
289 | + | |
290 | + if (!receiptContainerHeaderService.save(receiptContainerHeader)){ | |
291 | + throw new ServiceException("入库组盘头表保存失败"); | |
292 | + } | |
293 | + | |
294 | + receiptHeader.setFirstStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING); | |
295 | + receiptHeader.setLastStatus(QuantityConstant.RECEIPT_HEADER_RECEIVING); | |
296 | + receiptHeaderService.update(receiptHeader, receiptHeaderQueryWrapper); | |
297 | + | |
298 | + | |
269 | 299 | for(ReceiptBill receiptBill : receiptBills) { |
270 | 300 | |
271 | 301 | TaskDetail taskDetail = new TaskDetail(); |
... | ... | @@ -304,6 +334,33 @@ public class MobileBatchReceiptController { |
304 | 334 | |
305 | 335 | receiptDetail2.setOpenQty(qty); |
306 | 336 | receiptDetailService.update(receiptDetail2, receiptDetail2QueryWrapper); |
337 | + | |
338 | + ReceiptContainerDetail receiptContainerDetail = new ReceiptContainerDetail(); | |
339 | + receiptContainerDetail.setReceiptContainerId(receiptContainerHeader.getId()); | |
340 | + receiptContainerDetail.setWarehouseCode(ShiroUtils.getWarehouseCode()); | |
341 | + receiptContainerDetail.setReceiptId(receiptHeader.getId()); | |
342 | + receiptContainerDetail.setReceiptDetailId(receiptDetail2.getId()); | |
343 | + receiptContainerDetail.setReceiptCode(receiptHeader.getCode()); | |
344 | + receiptContainerDetail.setReceiptType(receiptHeader.getReceiptType()); | |
345 | + receiptContainerDetail.setLocationCode(locationCode); | |
346 | + receiptContainerDetail.setContainerCode(containerCode); | |
347 | + receiptContainerDetail.setContainerType(container.getContainerType()); | |
348 | + receiptContainerDetail.setCompanyCode(companyCode); | |
349 | + | |
350 | + LambdaQueryWrapper<Material> materialQueryWrapper = Wrappers.lambdaQuery(); | |
351 | + materialQueryWrapper.eq(Material::getCode, receiptBill.getMaterialCode()) | |
352 | + .eq(Material::getDeleted, 0); | |
353 | + Material material = materialService.getOne(materialQueryWrapper); | |
354 | + | |
355 | + receiptContainerDetail.setMaterialCode(material.getCode()); | |
356 | + receiptContainerDetail.setMaterialName(material.getName()); | |
357 | + receiptContainerDetail.setMaterialSpec(material.getSpec()); | |
358 | + receiptContainerDetail.setMaterialUnit(material.getUnit()); | |
359 | + receiptContainerDetail.setQty(receiptBill.getQty()); | |
360 | + receiptContainerDetail.setStatus(10); | |
361 | + receiptContainerDetail.setCreatedBy(ShiroUtils.getLoginName()); | |
362 | + receiptContainerDetail.setLastUpdatedBy(ShiroUtils.getLoginName()); | |
363 | + receiptContainerDetailService.save(receiptContainerDetail); | |
307 | 364 | } |
308 | 365 | |
309 | 366 | } else { |
... | ... | @@ -450,7 +507,7 @@ public class MobileBatchReceiptController { |
450 | 507 | container.setWarehouseCode(ShiroUtils.getWarehouseCode()); |
451 | 508 | LambdaQueryWrapper lambdaQueryWrapper = Wrappers.lambdaQuery(container); |
452 | 509 | container = containerService.getOne(lambdaQueryWrapper); |
453 | - if(container==null) { | |
510 | + if(container == null) { | |
454 | 511 | return AjaxResult.error("容器不存在"); |
455 | 512 | } |
456 | 513 | if (!StringUtils.isNotEmpty(container.getLocationCode())) { |
... | ... | @@ -475,7 +532,7 @@ public class MobileBatchReceiptController { |
475 | 532 | } |
476 | 533 | //判断托盘是否已经存在任务 |
477 | 534 | LambdaQueryWrapper<TaskHeader> headerQueryWrapper = Wrappers.lambdaQuery(); |
478 | - headerQueryWrapper.ne(TaskHeader::getStatus, 100) | |
535 | + headerQueryWrapper.ne(TaskHeader::getStatus, QuantityConstant.TASK_STATUS_COMPLETED.intValue()) | |
479 | 536 | .eq(TaskHeader::getContainerCode, containerCode); |
480 | 537 | Integer taskCount = taskHeaderService.count(headerQueryWrapper); |
481 | 538 | if (taskCount != null && taskCount.intValue() > 0) { |
... | ... | @@ -486,7 +543,7 @@ public class MobileBatchReceiptController { |
486 | 543 | TaskHeader taskHeader = new TaskHeader(); |
487 | 544 | taskHeader.setWarehouseCode(loc.getWarehouseCode()); |
488 | 545 | taskHeader.setCompanyCode(companyCode);//货主 |
489 | - if(type == 200) { | |
546 | + if(type == QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT.intValue()) { | |
490 | 547 | taskHeader.setInternalTaskType(QuantityConstant.TASK_INTENERTYPE_SHELF); |
491 | 548 | taskHeader.setTaskType(QuantityConstant.TASK_TYPE_SUPPLEMENTRECEIPT); |
492 | 549 | } else { |
... | ... | @@ -526,6 +583,7 @@ public class MobileBatchReceiptController { |
526 | 583 | LambdaQueryWrapper<ReceiptHeader> receiptHeaderQueryWrapper = Wrappers.lambdaQuery(); |
527 | 584 | receiptHeaderQueryWrapper.eq(ReceiptHeader::getCompanyCode, companyCode) |
528 | 585 | .eq(ReceiptHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) |
586 | + .ne(ReceiptHeader::getReceiptType, "PPI") | |
529 | 587 | .le(ReceiptHeader::getCreated, now) |
530 | 588 | .gt(ReceiptHeader::getCreated, start) |
531 | 589 | .orderByDesc(ReceiptHeader::getCreated); |
... | ... |
src/main/java/com/huaheng/pc/receipt/receiptContainerHeader/service/ReceiptContainerHeaderServiceImpl.java
... | ... | @@ -494,6 +494,7 @@ public class ReceiptContainerHeaderServiceImpl extends ServiceImpl<ReceiptContai |
494 | 494 | recorder.setTaskType(String.valueOf(QuantityConstant.TASK_TYPE_WHOLERECEIPT)); |
495 | 495 | recorder.setStatus((short) 0); |
496 | 496 | recorder.setCreatedBy(ShiroUtils.getLoginName()); |
497 | + recorder.setLastUpdatedBy(ShiroUtils.getLoginName()); | |
497 | 498 | |
498 | 499 | LambdaQueryWrapper<ReceiptContainerHeader> receiptContainerHeaderLambada = Wrappers.lambdaQuery(); |
499 | 500 | receiptContainerHeaderLambada.eq(ReceiptContainerHeader::getContainerCode, receiptContainerCode) |
... | ... |
src/main/java/com/huaheng/pc/task/taskHeader/service/TaskHeaderServiceImpl.java
... | ... | @@ -580,8 +580,10 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
580 | 580 | cycleCountDetailService.updataDetailStatus(item.getBillDetailId(), QuantityConstant.CYCLECOUNT_STATUS_EXECUTING); |
581 | 581 | } |
582 | 582 | } |
583 | - if (!taskDetailService.saveOrUpdateBatch(taskDetails)) { | |
584 | - throw new ServiceException("更新任务明细失败"); | |
583 | + if(taskDetails != null && taskDetails.size() > 0) { | |
584 | + if (!taskDetailService.saveOrUpdateBatch(taskDetails)) { | |
585 | + throw new ServiceException("更新任务明细失败"); | |
586 | + } | |
585 | 587 | } |
586 | 588 | |
587 | 589 | // //修改入库明细 |
... | ... | @@ -675,7 +677,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
675 | 677 | if (task.getInternalTaskType().equals(QuantityConstant.TASK_INTENERTYPE_SHELF) ) { |
676 | 678 | //入库任务 |
677 | 679 | this.completeReceiptTask(task); |
678 | -// combineInventory(task); | |
680 | + combineInventory(task); | |
679 | 681 | } |
680 | 682 | if (task.getInternalTaskType().equals(QuantityConstant.TASK_INTENERTYPE_PICKING) && |
681 | 683 | (task.getTaskType().equals(QuantityConstant.TASK_TYPE_WHOLESHIPMENT) || task.getTaskType().equals(QuantityConstant.TASK_TYPE_SORTINGSHIPMENT))) { |
... | ... | @@ -717,7 +719,7 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
717 | 719 | } |
718 | 720 | LambdaQueryWrapper<InventoryHeader> inventoryHeaderErapper = Wrappers.lambdaQuery(); |
719 | 721 | inventoryHeaderErapper.eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) |
720 | - .eq(InventoryHeader::getLocationCode, task.getFromLocation()) | |
722 | + .eq(InventoryHeader::getLocationCode, task.getToLocation()) | |
721 | 723 | .eq(InventoryHeader::getContainerCode, task.getContainerCode()); |
722 | 724 | InventoryHeader header = inventoryHeaderService.getOne(inventoryHeaderErapper); |
723 | 725 | |
... | ... | @@ -745,12 +747,12 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
745 | 747 | //将未完成的任务数量更新到库存表 |
746 | 748 | if (DataUtils.getInteger(map.get("status")) < QuantityConstant.TASK_STATUS_COMPLETED) { |
747 | 749 | |
748 | - | |
749 | 750 | LambdaQueryWrapper<InventoryDetail> inventory = Wrappers.lambdaQuery(); |
750 | 751 | inventory.eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) |
751 | - .eq(InventoryDetail::getLocationCode, task.getFromLocation()) | |
752 | + .eq(InventoryDetail::getLocationCode, task.getToLocation()) | |
752 | 753 | .eq(InventoryDetail::getMaterialCode, DataUtils.getString(map.get("materialCode"))) |
753 | - .eq(InventoryDetail::getContainerCode, DataUtils.getString(map.get("containerCode"))); | |
754 | + .eq(InventoryDetail::getContainerCode, DataUtils.getString(map.get("containerCode"))) | |
755 | + .eq(InventoryDetail::getContainerCode, DataUtils.getString(map.get("batch"))); | |
754 | 756 | InventoryDetail detail = inventoryDetailService.getOne(inventory); |
755 | 757 | if (detail == null) { |
756 | 758 | //库存明细添加 |
... | ... | @@ -890,21 +892,41 @@ public class TaskHeaderServiceImpl extends ServiceImpl<TaskHeaderMapper, TaskHea |
890 | 892 | return AjaxResult.success("完成入库任务"); |
891 | 893 | } |
892 | 894 | |
893 | -// private void combineInventory(TaskHeader task) { | |
894 | -// LambdaQueryWrapper<InventoryHeader> inventoryHeaderErapper = Wrappers.lambdaQuery(); | |
895 | -// inventoryHeaderErapper.eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) | |
896 | -// .eq(InventoryHeader::getLocationCode, task.getFromLocation()) | |
897 | -// .eq(InventoryHeader::getContainerCode, task.getContainerCode()); | |
898 | -// InventoryHeader header = inventoryHeaderService.getOne(inventoryHeaderErapper); | |
899 | -// if(header != null) { | |
900 | -// LambdaQueryWrapper<InventoryDetail> inventory = Wrappers.lambdaQuery(); | |
901 | -// inventory.eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) | |
902 | -// .eq(InventoryDetail::getLocationCode, task.getFromLocation()) | |
903 | -// .eq(InventoryDetail::getMaterialCode, DataUtils.getString(map.get("materialCode"))) | |
904 | -// .eq(InventoryDetail::getContainerCode, DataUtils.getString(map.get("containerCode"))); | |
905 | -// List<InventoryDetail> detail = inventoryDetailService.list(inventory); | |
906 | -// } | |
907 | -// } | |
895 | + @Transactional(rollbackFor = Exception.class) | |
896 | + public void combineInventory(TaskHeader task) { | |
897 | + LambdaQueryWrapper<InventoryHeader> inventoryHeaderErapper = Wrappers.lambdaQuery(); | |
898 | + inventoryHeaderErapper.eq(InventoryHeader::getWarehouseCode, ShiroUtils.getWarehouseCode()) | |
899 | + .eq(InventoryHeader::getLocationCode, task.getToLocation()) | |
900 | + .eq(InventoryHeader::getContainerCode, task.getContainerCode()); | |
901 | + InventoryHeader header = inventoryHeaderService.getOne(inventoryHeaderErapper); | |
902 | + if(header != null) { | |
903 | + LambdaQueryWrapper<InventoryDetail> inventory = Wrappers.lambdaQuery(); | |
904 | + inventory.eq(InventoryDetail::getWarehouseCode, ShiroUtils.getWarehouseCode()) | |
905 | + .eq(InventoryDetail::getLocationCode, task.getFromLocation()) | |
906 | + .eq(InventoryDetail::getContainerCode, task.getContainerCode()); | |
907 | + List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventory); | |
908 | + for(int i=0; i < inventoryDetailList.size() -1; i++) { | |
909 | + for(int j = inventoryDetailList.size() - 1; j > i; j--) { | |
910 | + if(inventoryDetailList.get(i).getMaterialCode().equals(inventoryDetailList.get(j).getMaterialCode())) { | |
911 | + BigDecimal totalQty = inventoryDetailList.get(i).getQty().add(inventoryDetailList.get(j).getQty()); | |
912 | + inventoryDetailList.get(i).setQty(totalQty); | |
913 | + inventoryDetailList.remove(j); | |
914 | + LambdaQueryWrapper<InventoryDetail> wrapper = Wrappers.lambdaQuery(); | |
915 | + wrapper.eq(InventoryDetail::getId, inventoryDetailList.get(i).getId()); | |
916 | + inventoryDetailService.update(inventoryDetailList.get(i), wrapper); | |
917 | + } | |
918 | + } | |
919 | + } | |
920 | + BigDecimal totalQty = new BigDecimal(0); | |
921 | + for(InventoryDetail inventoryDetail : inventoryDetailList) { | |
922 | + totalQty = totalQty.add(inventoryDetail.getQty()); | |
923 | + } | |
924 | + header.setTotalQty(totalQty); | |
925 | + LambdaQueryWrapper<InventoryHeader> wrapper = Wrappers.lambdaQuery(); | |
926 | + wrapper.eq(InventoryHeader::getId, header.getId()); | |
927 | + inventoryHeaderService.update(header, wrapper); | |
928 | + } | |
929 | + } | |
908 | 930 | |
909 | 931 | /** |
910 | 932 | * 移动端创建入库任务 |
... | ... |
src/main/resources/application.yml
src/main/resources/templates/receipt/receiptDetail/add.html
... | ... | @@ -25,7 +25,7 @@ |
25 | 25 | </div> |
26 | 26 | </div> |
27 | 27 | <div class="form-group"> |
28 | - <label class="col-sm-3 control-label">总数量:</label> | |
28 | + <label class="col-sm-3 control-label">数量:</label> | |
29 | 29 | <div class="col-sm-8"> |
30 | 30 | <input id="totalQty" name="totalQty" class="form-control" type="text"> |
31 | 31 | </div> |
... | ... | @@ -134,7 +134,7 @@ |
134 | 134 | <!--</div>--> |
135 | 135 | <div class="form-group"> |
136 | 136 | <div class="form-control-static col-sm-offset-9"> |
137 | - <button type="submit" class="btn btn-primary" >提交</button> | |
137 | + <button type="submit" class="btn btn-primary" >提交</button> | |
138 | 138 | <button onclick="$.modal.close()" class="btn btn-danger" type="button">关闭</button> |
139 | 139 | </div> |
140 | 140 | </div> |
... | ... | @@ -160,13 +160,54 @@ |
160 | 160 | } |
161 | 161 | }, |
162 | 162 | submitHandler: function(form) { |
163 | - var tableValue = $("#form-receiptDetail-add").serialize(); | |
164 | - tableValue = formValueReplace(tableValue, "inventorySts", $("#inventorySts option:selected").val()); | |
165 | - tableValue = formValueReplace(tableValue, "qcCheck", $("#qcCheck option:selected").val()); | |
166 | - $.operate.save(prefix + "/add", tableValue); | |
163 | + $.ajax({ | |
164 | + cache : true, | |
165 | + type : "POST", | |
166 | + url : prefix + "/add", | |
167 | + data : { | |
168 | + "receiptId": $("input[name='receiptId']").val(), | |
169 | + "receiptCode": $("input[name='receiptCode']").val(), | |
170 | + "companyId": $("input[name='companyId']").val(), | |
171 | + "companyCode": $("input[name='companyCode']").val(), | |
172 | + "sourceLine": $("input[name='sourceLine']").val(), | |
173 | + // "materialId": $("input[name='materialId']").val(), | |
174 | + "materialCode": $("input[name='materialCode']").val(), | |
175 | + "batch": $("input[name='batch']").val(), | |
176 | + "lot": $("input[name='lot']").val(), | |
177 | + "project": $("input[name='project']").val(), | |
178 | + "manufactureDate": $("input[name='manufactureDate']").val(), | |
179 | + "expirationDate": $("input[name='expirationDate']").val(), | |
180 | + "inventorySts": $("#inventorySts option:selected").val(), | |
181 | + "totalQty": $("input[name='totalQty']").val(), | |
182 | + "price": $("input[name='price']").val(), | |
183 | + // "userDef1": $("input[name='userDef1']").val(), | |
184 | + // "userDef2": $("input[name='userDef2']").val(), | |
185 | + // "userDef3": $("input[name='userDef3']").val() | |
186 | + }, | |
187 | + async : false, | |
188 | + error : function(request) { | |
189 | + $.modal.alertError("请求失败!"); | |
190 | + }, | |
191 | + success : function(data) { | |
192 | + // $.operate.saveSuccess(data); | |
193 | + ajaxSuccess(data); | |
194 | + } | |
195 | + }); | |
167 | 196 | } |
168 | 197 | }); |
169 | 198 | |
199 | + function ajaxSuccess(result) { | |
200 | + if (result.code == web_status.SUCCESS) { | |
201 | + $.modal.msgSuccess(result.msg); | |
202 | + var index = parent.layer.getFrameIndex(window.name); | |
203 | + parent.layer.close(index); | |
204 | + window.parent.loadDetail(); | |
205 | + } else { | |
206 | + $.modal.alertError(result.msg); | |
207 | + } | |
208 | + $.modal.closeLoading(); | |
209 | + } | |
210 | + | |
170 | 211 | $(function () { |
171 | 212 | layui.use('laydate', function() { |
172 | 213 | var laydate = layui.laydate; |
... | ... |
src/main/resources/templates/receipt/receiptHeader/add.html
... | ... | @@ -8,7 +8,7 @@ |
8 | 8 | <div class="form-group"> |
9 | 9 | <label class="col-sm-3 control-label">入库类型:</label> |
10 | 10 | <div class="col-sm-8"> |
11 | - <select id="receiptType" name="receiptType" class="form-control" th:with="receiptHeaderType=${@receiptTypeService.getType()}"> | |
11 | + <select id="receiptType" name="receiptType" class="form-control" th:with="receiptHeaderType=${@receiptTypeService.getType()}"> | |
12 | 12 | <option th:each="dict : ${receiptHeaderType}" th:text="${dict['name']}" th:value="${dict['code']}"></option> |
13 | 13 | </select> |
14 | 14 | </div> |
... | ... |