From 443cbfd1941e97efa6852b49933a87e0480206e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 1 Apr 2026 14:21:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(pgi):=20=E6=B7=BB=E5=8A=A0=E6=99=AE?= =?UTF-8?q?=E9=80=9A=E7=89=A9=E6=96=99=E6=94=B6=E8=B4=A7=E5=8D=95=E6=8E=A7?= =?UTF-8?q?=E5=88=B6=E5=99=A8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 实现送货单列表查询和详情获取接口 - 添加PDA扫码收货确认功能 - 集成SAP物料信息同步机制 - 实现普通物料上架任务管理 - 添加采购物料入库确认流程 - 集成条码扫描和二维码处理功能 - 实现质检单和非质检单分别处理逻辑 - 添加储位管理和库存同步功能 - 实现一键收货查询功能 - 集成序列号和批次号验证机制 --- .../admin/controller/NormalPGIController.java | 211 ++++++++---------- 1 file changed, 88 insertions(+), 123 deletions(-) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java index 3c0d753e..6e3b74f7 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java @@ -10,7 +10,6 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.crypto.digest.DigestUtil; -import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.nflg.wms.admin.pojo.dto.*; import com.nflg.wms.admin.repository.OutMaterialScanRecordRespository; import com.nflg.wms.admin.repository.SrmMaterialReceiptNoScanCodesRepository; @@ -50,7 +49,10 @@ import java.math.BigDecimal; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -427,57 +429,76 @@ public class NormalPGIController extends BaseController { if (CollectionUtil.isNotEmpty(scanCode)) { scanCode.forEach(code -> { - // 库存 - InventoryInDTO inventoryDTO = inventories.stream() - .filter(inventoriesDTO -> inventoriesDTO.getMaterialNo().equals(item.getItemCode()) - && inventoriesDTO.getBatchNo().equals(code.getBatchNumber()) - && inventoriesDTO.getSerialNo().equals(code.getSerialNumbers()) - && inventoriesDTO.getFactoryNo().equals(wmsPoReceipt.getFactoryCode()) - && inventoriesDTO.getWarehouseNo().equals(item.getReceivedWarehouse()) - ).findFirst().orElse(null); - - if (Objects.isNull(inventoryDTO)) { - inventoryDTO = new InventoryInDTO() - .setMaterialNo(item.getItemCode()) - .setFactoryNo(wmsPoReceipt.getFactoryCode()) - .setWarehouseNo(item.getReceivedWarehouse()) - .setBatchNo(code.getBatchNumber()) - .setSerialNo(code.getSerialNumbers()) - .setNum(code.getCodeNum()); - inventories.add(inventoryDTO); - } else { - inventoryDTO.setNum(inventoryDTO.getNum().add(code.getCodeNum())); + WmsQrCodeMaster qrCodeMaster = qrCodeMasterService.getByCode(code.getCodeId()); + VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("条码不存在"); + qrCodeMaster.setProcessStage(BarCodeProcessStage.InBound.getState()) + .setLastScanBy(UserUtil.getUserId()) + .setLastScanByname(UserUtil.getUserName()) + .setLastScanTime(LocalDateTime.now()); + if (CollectionUtil.isNotEmpty(qo.getItems())) { + InCostCenterBackSubmitItemQRQO qrqo = qo.getItems() + .stream() + .filter(iit -> iit.getQrCode().contains(code.getCodeId())) + .findFirst() + .orElse(null); + if (Objects.nonNull(qrqo)) { + qrCodeMaster.setBinLocation(qrqo.getBinNo()); + } } - ZWM3A17Item1DTO ietm1Dto = item1.stream() - .filter(dto1 -> - dto1.getEBELP().equals(item.getPoLineNumber()) - && dto1.getMATNR().equals(item.getItemCode()) - && dto1.getMeins().equals(item.getUomCode()) - && dto1.getCHARG().equals(code.getBatchNumber()) - && dto1.getWERKS().equals(wmsPoReceipt.getFactoryCode()) - && dto1.getLGORT().equals(item.getReceivedWarehouse()) - ).findFirst().orElse(null); - if (Objects.isNull(ietm1Dto)) { - item1.add(new ZWM3A17Item1DTO() + qrCodeMasters.add(qrCodeMaster); + if (qrCodeMaster.getPackagingType() == 0) { + // 库存 + InventoryInDTO inventoryDTO = inventories.stream() + .filter(inventoriesDTO -> inventoriesDTO.getMaterialNo().equals(item.getItemCode()) + && inventoriesDTO.getBatchNo().equals(qrCodeMaster.getBatchNo()) + && inventoriesDTO.getSerialNo().equals(qrCodeMaster.getSerialNo()) + && inventoriesDTO.getFactoryNo().equals(qrCodeMaster.getFactoryCode()) + && inventoriesDTO.getWarehouseNo().equals(qrCodeMaster.getStorageLocation()) + && StrUtil.equals(inventoriesDTO.getBinLocation(), qrCodeMaster.getBinLocation()) + ).findFirst() + .orElse(null); + if (Objects.isNull(inventoryDTO)) { + inventoryDTO = new InventoryInDTO() + .setMaterialNo(qrCodeMaster.getMaterialCode()) + .setFactoryNo(qrCodeMaster.getFactoryCode()) + .setWarehouseNo(qrCodeMaster.getStorageLocation()) + .setBatchNo(qrCodeMaster.getBatchNo()) + .setSerialNo(qrCodeMaster.getSerialNo()) + .setNum(qrCodeMaster.getQuantity()); + inventories.add(inventoryDTO); + } else { + inventoryDTO.setNum(inventoryDTO.getNum().add(qrCodeMaster.getQuantity())); + } + ZWM3A17Item1DTO ietm1Dto = item1.stream() + .filter(dto1 -> + dto1.getEBELP().equals(item.getPoLineNumber()) + && dto1.getMATNR().equals(item.getItemCode()) + && dto1.getMeins().equals(item.getUomCode()) + && dto1.getCHARG().equals(code.getBatchNumber()) + && dto1.getWERKS().equals(wmsPoReceipt.getFactoryCode()) + && dto1.getLGORT().equals(item.getReceivedWarehouse()) + ).findFirst().orElse(null); + if (Objects.isNull(ietm1Dto)) { + item1.add(new ZWM3A17Item1DTO() + .setEBELP(item.getPoLineNumber()) + .setMATNR(item.getItemCode()) + .setERFMG(code.getCodeNum()) + .setMEINS(item.getUomCode()) + .setCHARG(code.getBatchNumber()) + .setWERKS(wmsPoReceipt.getFactoryCode()) + .setLGORT(item.getReceivedWarehouse()) + .setKZKRI("") + ); + } else { + ietm1Dto.setERFMG(ietm1Dto.getERFMG().add(code.getCodeNum())); + } + + item2.add(new ZWM3A17Item2DTO() .setEBELP(item.getPoLineNumber()) - .setMATNR(item.getItemCode()) - .setERFMG(code.getCodeNum()) - .setMEINS(item.getUomCode()) - .setCHARG(code.getBatchNumber()) - .setWERKS(wmsPoReceipt.getFactoryCode()) - .setLGORT(item.getReceivedWarehouse()) - .setKZKRI("") - ); - } else { - ietm1Dto.setERFMG(ietm1Dto.getERFMG().add(code.getCodeNum())); - } + .setFLAG("") + .setSERNR(code.getSerialNumbers())); - item2.add(new ZWM3A17Item2DTO() - .setEBELP(item.getPoLineNumber()) - .setFLAG("") - .setSERNR(code.getSerialNumbers())); - - scanCodes.add(code); + scanCodes.add(code); // WmsQrCodeMaster wmsQrCodeMaster = new WmsQrCodeMaster() // .setBarcodeCode(code.getCodeId()) // .setBarcodeType((short) 1) @@ -485,36 +506,6 @@ public class NormalPGIController extends BaseController { // .setLastScanBy(UserUtil.getUserId()) // .setLastScanByname(UserUtil.getUserName()) // .setLastScanTime(LocalDateTime.now()); - - WmsQrCodeMaster wmsQrCodeMaster = new WmsQrCodeMaster(); - WmsQrCodeMaster existCode = qrCodeMasterService.lambdaQuery() - .eq(WmsQrCodeMaster::getBarcodeCode, code.getCodeId()) - .one(); - if (existCode != null) { - wmsQrCodeMaster = existCode; - } else { - wmsQrCodeMaster.setId(IdWorker.getId()); - } - wmsQrCodeMaster - .setBarcodeCode(code.getCodeId()) - .setBarcodeType((short) 1) - .setMaterialCode(item.getItemCode()) - .setMaterialDescription(item.getItemName()) - .setProcessStage(BarCodeProcessStage.InBound.getState()) - .setReceiptItemId(item.getId()) - .setLastScanBy(UserUtil.getUserId()) - .setLastScanByname(UserUtil.getUserName()) - .setLastScanTime(LocalDateTime.now()); - - qrCodeMasters.add(wmsQrCodeMaster); - if (CollectionUtil.isNotEmpty(qo.getItems())) { - InCostCenterBackSubmitItemQRQO qrqo = qo.getItems() - .stream() - .filter(iit -> iit.getQrCode().contains(code.getCodeId())) - .findFirst() - .orElse(null); - VUtil.trueThrowBusinessError(Objects.isNull(qrqo)).throwMessage("条码" + code.getCodeId() + "已收货但不在本次扫码列表中"); - wmsQrCodeMaster.setBinLocation(qrqo.getBinNo()); } }); } else { @@ -542,49 +533,23 @@ public class NormalPGIController extends BaseController { } if (CollectionUtil.isNotEmpty(qrCodeMasters)) { //同步箱码信息到物料码中 - List parents = qrCodeMasters - .stream() -// .filter(qrCode -> qrCode.getPackagingType() == 1) - .filter(qrCode -> qrCode.getPackagingType() != null && qrCode.getPackagingType() == 1) - .toList(); -// List children = qrCodeMasterService.lambdaQuery() -// .in(WmsQrCodeMaster::getParentBarcodeId, parents -// .stream() -// .map(WmsQrCodeMaster::getId) -// .toList() -// ) -// .list(); - - List children; - if (CollectionUtil.isNotEmpty(parents)) { - children = qrCodeMasterService.lambdaQuery() - .in(WmsQrCodeMaster::getParentBarcodeId, - parents.stream() - .map(WmsQrCodeMaster::getId) - .toList() - ) - .list(); - } else { - children = new ArrayList<>(); - } - - parents.forEach(p -> { - children.stream() - .filter(c -> c.getParentBarcodeId().equals(p.getId())) - .forEach(c -> { - c.setProcessStage(p.getProcessStage()); - c.setLastScanBy(UserUtil.getUserId()); - c.setLastScanByname(UserUtil.getUserName()); - c.setLastScanTime(LocalDateTime.now()); - c.setFactoryCode(p.getFactoryCode()); - c.setStorageLocation(p.getStorageLocation()); - c.setBinLocation(p.getBinLocation()); - c.setReceiptItemId(p.getReceiptItemId()); - }); - }); - qrCodeMasters.addAll(children); -// qrCodeMasterService.updateBarCode(qrCodeMasters); - qrCodeMasterService.saveOrUpdateBatch(qrCodeMasters); + qrCodeMasters.stream() + .filter(qr -> qr.getPackagingType() == 1) + .forEach(p -> { + qrCodeMasters.stream() + .filter(qr -> Objects.equals(qr.getParentBarcodeId(), p.getId())) + .forEach(c -> { + c.setProcessStage(p.getProcessStage()); + c.setLastScanBy(UserUtil.getUserId()); + c.setLastScanByname(UserUtil.getUserName()); + c.setLastScanTime(LocalDateTime.now()); + c.setFactoryCode(p.getFactoryCode()); + c.setStorageLocation(p.getStorageLocation()); + c.setBinLocation(p.getBinLocation()); + c.setReceiptItemId(p.getReceiptItemId()); + }); + }); + qrCodeMasterService.updateBarCode(qrCodeMasters); } normalPGIControllerService.takeDeliveryConfirm(receiptItems, storageLocationDTOS, inventories, zwm3A17DTOS, request.getTaskId(), scanCodes); return ApiResult.success();