feat(pgi): 添加普通物料收货单控制器功能

- 实现送货单列表查询和详情获取接口
- 添加PDA扫码收货确认功能
- 集成SAP物料信息同步机制
- 实现普通物料上架任务管理
- 添加采购物料入库确认流程
- 集成条码扫描和二维码处理功能
- 实现质检单和非质检单分别处理逻辑
- 添加储位管理和库存同步功能
- 实现一键收货查询功能
- 集成序列号和批次号验证机制
This commit is contained in:
曹鹏飞 2026-04-01 14:21:18 +08:00
parent be8c7cedb6
commit 443cbfd194
1 changed files with 88 additions and 123 deletions

View File

@ -10,7 +10,6 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil; 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.pojo.dto.*;
import com.nflg.wms.admin.repository.OutMaterialScanRecordRespository; import com.nflg.wms.admin.repository.OutMaterialScanRecordRespository;
import com.nflg.wms.admin.repository.SrmMaterialReceiptNoScanCodesRepository; import com.nflg.wms.admin.repository.SrmMaterialReceiptNoScanCodesRepository;
@ -50,7 +49,10 @@ import java.math.BigDecimal;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime; 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.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -427,57 +429,76 @@ public class NormalPGIController extends BaseController {
if (CollectionUtil.isNotEmpty(scanCode)) { if (CollectionUtil.isNotEmpty(scanCode)) {
scanCode.forEach(code -> { scanCode.forEach(code -> {
// 库存 WmsQrCodeMaster qrCodeMaster = qrCodeMasterService.getByCode(code.getCodeId());
InventoryInDTO inventoryDTO = inventories.stream() VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("条码不存在");
.filter(inventoriesDTO -> inventoriesDTO.getMaterialNo().equals(item.getItemCode()) qrCodeMaster.setProcessStage(BarCodeProcessStage.InBound.getState())
&& inventoriesDTO.getBatchNo().equals(code.getBatchNumber()) .setLastScanBy(UserUtil.getUserId())
&& inventoriesDTO.getSerialNo().equals(code.getSerialNumbers()) .setLastScanByname(UserUtil.getUserName())
&& inventoriesDTO.getFactoryNo().equals(wmsPoReceipt.getFactoryCode()) .setLastScanTime(LocalDateTime.now());
&& inventoriesDTO.getWarehouseNo().equals(item.getReceivedWarehouse()) if (CollectionUtil.isNotEmpty(qo.getItems())) {
).findFirst().orElse(null); InCostCenterBackSubmitItemQRQO qrqo = qo.getItems()
.stream()
if (Objects.isNull(inventoryDTO)) { .filter(iit -> iit.getQrCode().contains(code.getCodeId()))
inventoryDTO = new InventoryInDTO() .findFirst()
.setMaterialNo(item.getItemCode()) .orElse(null);
.setFactoryNo(wmsPoReceipt.getFactoryCode()) if (Objects.nonNull(qrqo)) {
.setWarehouseNo(item.getReceivedWarehouse()) qrCodeMaster.setBinLocation(qrqo.getBinNo());
.setBatchNo(code.getBatchNumber()) }
.setSerialNo(code.getSerialNumbers())
.setNum(code.getCodeNum());
inventories.add(inventoryDTO);
} else {
inventoryDTO.setNum(inventoryDTO.getNum().add(code.getCodeNum()));
} }
ZWM3A17Item1DTO ietm1Dto = item1.stream() qrCodeMasters.add(qrCodeMaster);
.filter(dto1 -> if (qrCodeMaster.getPackagingType() == 0) {
dto1.getEBELP().equals(item.getPoLineNumber()) // 库存
&& dto1.getMATNR().equals(item.getItemCode()) InventoryInDTO inventoryDTO = inventories.stream()
&& dto1.getMeins().equals(item.getUomCode()) .filter(inventoriesDTO -> inventoriesDTO.getMaterialNo().equals(item.getItemCode())
&& dto1.getCHARG().equals(code.getBatchNumber()) && inventoriesDTO.getBatchNo().equals(qrCodeMaster.getBatchNo())
&& dto1.getWERKS().equals(wmsPoReceipt.getFactoryCode()) && inventoriesDTO.getSerialNo().equals(qrCodeMaster.getSerialNo())
&& dto1.getLGORT().equals(item.getReceivedWarehouse()) && inventoriesDTO.getFactoryNo().equals(qrCodeMaster.getFactoryCode())
).findFirst().orElse(null); && inventoriesDTO.getWarehouseNo().equals(qrCodeMaster.getStorageLocation())
if (Objects.isNull(ietm1Dto)) { && StrUtil.equals(inventoriesDTO.getBinLocation(), qrCodeMaster.getBinLocation())
item1.add(new ZWM3A17Item1DTO() ).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()) .setEBELP(item.getPoLineNumber())
.setMATNR(item.getItemCode()) .setFLAG("")
.setERFMG(code.getCodeNum()) .setSERNR(code.getSerialNumbers()));
.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() scanCodes.add(code);
.setEBELP(item.getPoLineNumber())
.setFLAG("")
.setSERNR(code.getSerialNumbers()));
scanCodes.add(code);
// WmsQrCodeMaster wmsQrCodeMaster = new WmsQrCodeMaster() // WmsQrCodeMaster wmsQrCodeMaster = new WmsQrCodeMaster()
// .setBarcodeCode(code.getCodeId()) // .setBarcodeCode(code.getCodeId())
// .setBarcodeType((short) 1) // .setBarcodeType((short) 1)
@ -485,36 +506,6 @@ public class NormalPGIController extends BaseController {
// .setLastScanBy(UserUtil.getUserId()) // .setLastScanBy(UserUtil.getUserId())
// .setLastScanByname(UserUtil.getUserName()) // .setLastScanByname(UserUtil.getUserName())
// .setLastScanTime(LocalDateTime.now()); // .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 { } else {
@ -542,49 +533,23 @@ public class NormalPGIController extends BaseController {
} }
if (CollectionUtil.isNotEmpty(qrCodeMasters)) { if (CollectionUtil.isNotEmpty(qrCodeMasters)) {
//同步箱码信息到物料码中 //同步箱码信息到物料码中
List<WmsQrCodeMaster> parents = qrCodeMasters qrCodeMasters.stream()
.stream() .filter(qr -> qr.getPackagingType() == 1)
// .filter(qrCode -> qrCode.getPackagingType() == 1) .forEach(p -> {
.filter(qrCode -> qrCode.getPackagingType() != null && qrCode.getPackagingType() == 1) qrCodeMasters.stream()
.toList(); .filter(qr -> Objects.equals(qr.getParentBarcodeId(), p.getId()))
// List<WmsQrCodeMaster> children = qrCodeMasterService.lambdaQuery() .forEach(c -> {
// .in(WmsQrCodeMaster::getParentBarcodeId, parents c.setProcessStage(p.getProcessStage());
// .stream() c.setLastScanBy(UserUtil.getUserId());
// .map(WmsQrCodeMaster::getId) c.setLastScanByname(UserUtil.getUserName());
// .toList() c.setLastScanTime(LocalDateTime.now());
// ) c.setFactoryCode(p.getFactoryCode());
// .list(); c.setStorageLocation(p.getStorageLocation());
c.setBinLocation(p.getBinLocation());
List<WmsQrCodeMaster> children; c.setReceiptItemId(p.getReceiptItemId());
if (CollectionUtil.isNotEmpty(parents)) { });
children = qrCodeMasterService.lambdaQuery() });
.in(WmsQrCodeMaster::getParentBarcodeId, qrCodeMasterService.updateBarCode(qrCodeMasters);
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);
} }
normalPGIControllerService.takeDeliveryConfirm(receiptItems, storageLocationDTOS, inventories, zwm3A17DTOS, request.getTaskId(), scanCodes); normalPGIControllerService.takeDeliveryConfirm(receiptItems, storageLocationDTOS, inventories, zwm3A17DTOS, request.getTaskId(), scanCodes);
return ApiResult.success(); return ApiResult.success();