完成收货直接入库的逻辑

This commit is contained in:
zhangke 2026-03-07 21:45:13 +08:00
parent 70aae6bdcc
commit e29f43f20f
1 changed files with 215 additions and 34 deletions

View File

@ -213,11 +213,39 @@ public class NormalPGIController extends BaseController {
List<SrmMaterialReceiptScanCodes> srmMaterialReceiptScanCodes = new ArrayList<>();
List<QCMaterialSyncDTO> qcMaterialSyncDTOS = new ArrayList<>();
List<InventoryDTO> inventories = new ArrayList<>();
List<ZWM3A17DTO> zwm3A17DTOS = new ArrayList<>();
List<WmsQrCodeMaster> qrCodes = new ArrayList<>();
for (SrmMaterialReceiptQO item : request) {
if (item.getReceiptNum().equals(BigDecimal.ZERO))
continue;
// 处理二维码
for (PDAScanCodeQO code : item.getScanCodes()) {
WmsQrCodeMaster qrCodeMaster = qrCodeMasterService.lambdaQuery()
.eq(WmsQrCodeMaster::getBarcodeCode, code.getCodeId())
.one();
VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "");
if (qrCodeMaster.getPackagingType().equals(1)) {
code.setCodeNum(BigDecimal.ZERO);
List<WmsQrCodeMaster> childCode= qrCodeMasterService.lambdaQuery()
.eq(WmsQrCodeMaster::getParentBarcodeId, qrCodeMaster.getId())
.list();
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(childCode)).throwMessage("箱码【" + code.getCodeId() + "】为空箱");
for (WmsQrCodeMaster child : childCode)
{
item.getScanCodes().add(new PDAScanCodeQO()
.setBatchNumber(child.getBatchNo())
.setSerialNumbers(child.getSerialNo())
.setCodeId(child.getBarcodeCode())
.setCodeNum(child.getQuantity())
.setCodeContent(child.getPackagingType().toString())
);
}
}
}
SAPSyncParamsDTO materialInfoInOrder = sapSyncParamsDTOS.stream()
.filter(sapSyncParamsDTO ->
@ -238,44 +266,173 @@ public class NormalPGIController extends BaseController {
// 如果是质检单
if (isQuality) {
setQcMaterialSyncDto(qcMaterialSyncDTOS, item, order, codes, materialInfoInOrder, wmsQcReceiveItems, wmsQcReceive.getId(), orderItemId);
for (PDAScanCodeQO code : item.getScanCodes()) {
// 处理条码
WmsQrCodeMaster qrCodeMaster = wmsQrCodeMasterService.lambdaQuery()
.eq(WmsQrCodeMaster::getBarcodeCode, code.getCodeId())
.one();
VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "");
qrCodeMaster.setLastScanTime(LocalDateTime.now());
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
qrCodeMaster.setProcessStage(BarCodeProcessStage.Checking.getState());
qrCodeMaster.setReceiptItemId(orderItemId);
qrCodes.add(qrCodeMaster);
}
} else {
//判断是否存在没有启用储位管理的仓库
WmsWarehouse warehouse = wmsWarehouseService.lambdaQuery().eq(WmsWarehouse::getNo, item.getReceivedWarehouse()).one();
if (!warehouse.getIsDisableLocation()) {
//设置收货明细项
setPoReceiveByIn(item, wmsPoReceiptItems, wmsPoReceipt.getId(), materialInfoInOrder, orderItemId);
//设置SAP过账接口
ZWM3A17DTO zwm3A17DTO = zwm3A17DTOS.stream()
.filter(zwm3A17DTO1 -> zwm3A17DTO1.getEbeln().equals(item.getPoNum()))
.findFirst()
.orElse(null);
if (Objects.isNull(zwm3A17DTO)) {
zwm3A17DTO = new ZWM3A17DTO()
.setEbeln(item.getPoNum())
.setUsnam(UserUtil.getUserName())
.setReceiveId(orderItemId)
.setItem1(new ArrayList<>())
.setItem2(new ArrayList<>());
zwm3A17DTOS.add(zwm3A17DTO);
}
List<ZWM3A17Item1DTO> item1 = zwm3A17DTO.getItem1();
List<ZWM3A17Item2DTO> item2 = zwm3A17DTO.getItem2();
for (PDAScanCodeQO code : item.getScanCodes()) {
// 处理条码
WmsQrCodeMaster qrCodeMaster = wmsQrCodeMasterService.lambdaQuery()
.eq(WmsQrCodeMaster::getBarcodeCode, code.getCodeId())
.one();
VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "");
qrCodeMaster.setLastScanTime(LocalDateTime.now());
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
qrCodeMaster.setProcessStage(BarCodeProcessStage.InBound.getState());
qrCodeMaster.setReceiptItemId(orderItemId);
qrCodes.add(qrCodeMaster);
if (qrCodeMaster.getPackagingType().equals(1)) {
continue;
}
// 库存
InventoryDTO 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 InventoryDTO()
.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()));
}
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())
.setFLAG("")
.setSERNR(code.getSerialNumbers()));
}
//...................
} else {
setPoReceive(item, wmsPoReceiptItems, wmsPoReceipt.getId(), materialInfoInOrder, orderItemId);
for (PDAScanCodeQO code : item.getScanCodes()) {
// 处理条码
WmsQrCodeMaster qrCodeMaster = wmsQrCodeMasterService.lambdaQuery()
.eq(WmsQrCodeMaster::getBarcodeCode, code.getCodeId())
.one();
VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "");
qrCodeMaster.setLastScanTime(LocalDateTime.now());
qrCodeMaster.setLastScanBy(UserUtil.getUserId());
qrCodeMaster.setLastScanByname(UserUtil.getUserName());
qrCodeMaster.setStorageLocation(materialInfoInOrder.getWarehouseNo());
qrCodeMaster.setProcessStage(BarCodeProcessStage.Received.getState());
qrCodeMaster.setReceiptItemId(orderItemId);
qrCodes.add(qrCodeMaster);
}
}
}
}
// 盘点条码是否重复
Map<String, Long> duplicateCodes = srmMaterialReceiptScanCodes.stream()
.collect(Collectors.groupingBy(
SrmMaterialReceiptScanCodes::getCodeId,
Collectors.counting()
))
.entrySet()
.stream()
.filter(entry -> entry.getValue() > 1)
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue
));
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(duplicateCodes)).throwMessage("存在重复条码");
qrCodeMasterService.saveBatch(
srmMaterialReceiptScanCodes
.stream()
.map(it -> new WmsQrCodeMaster()
.setBarcodeCode(KeyUtil.next())
.setProcessStage(BarCodeProcessStage.Received.getState())
.setBarcodeType(BarCodeType.Disassemble.getState())
.setMaterialCode(it.getCodeId())
.setMaterialDescription("")
.setPackagingType((short) 0)
.setQuantity(it.getCodeNum())
.setReceiptItemId(it.getReceiveItemId())
.setCreateUserId(UserUtil.getUserId())
.setCreateUserName(UserUtil.getUserName())
.setCreateTime(LocalDateTime.now())
)
.toList()
);
// Map<String, Long> duplicateCodes = srmMaterialReceiptScanCodes.stream()
// .collect(Collectors.groupingBy(
// SrmMaterialReceiptScanCodes::getCodeId,
// Collectors.counting()
// ))
// .entrySet()
// .stream()
// .filter(entry -> entry.getValue() > 1)
// .collect(Collectors.toMap(
// Map.Entry::getKey,
// Map.Entry::getValue
// ));
//
// VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(duplicateCodes)).throwMessage("存在重复条码");
// qrCodeMasterService.saveBatch(
// srmMaterialReceiptScanCodes
// .stream()
// .map(it -> new WmsQrCodeMaster()
// .setBarcodeCode(KeyUtil.next())
// .setProcessStage(BarCodeProcessStage.Received.getState())
// .setBarcodeType(BarCodeType.Disassemble.getState())
// .setMaterialCode(it.getCodeId())
// .setMaterialDescription("")
// .setPackagingType((short) 0)
// .setQuantity(it.getCodeNum())
// .setReceiptItemId(it.getReceiveItemId())
// .setCreateUserId(UserUtil.getUserId())
// .setCreateUserName(UserUtil.getUserName())
// .setCreateTime(LocalDateTime.now())
// )
// .toList()
// );
normalPGIControllerService.takeDelivery(wmsPoReceipt, wmsQcReceive, wmsPoReceiptItems, wmsQcReceiveItems, srmMaterialReceiptScanCodes, qcMaterialSyncDTOS, order.getId());
List<GoodReceiptDTO> dtos = new ArrayList<>();
GoodReceiptDTO dto = new GoodReceiptDTO()
.setWmsPoReceipt(wmsPoReceipt)
.setWmsQcReceive(wmsQcReceive)
.setWmsPoReceiptItems(wmsPoReceiptItems)
.setWmsQcReceiveItems(wmsQcReceiveItems)
.setSrmMaterialReceiptScanCodes(srmMaterialReceiptScanCodes)
.setOrderId(order.getId())
.setInventories(inventories)
.setZwm3A17DTOS(zwm3A17DTOS)
.setQrCodes(qrCodes)
.setQcMaterialSyncDTOS(qcMaterialSyncDTOS);
dtos.add(dto);
normalPGIControllerService.takeDeliveryByPackage(dtos, null);
return ApiResult.success();
}
@ -1693,6 +1850,30 @@ public class NormalPGIController extends BaseController {
for (SrmMaterialReceiptQO item : items) {
// 盘点是否有条码
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(item.getScanCodes())).throwMessage("[" + item.getItemCode() + "]没有码信息");
//对项目进行处理
for (PDAScanCodeQO code : item.getScanCodes()) {
WmsQrCodeMaster qrCodeMaster = qrCodeMasterService.lambdaQuery()
.eq(WmsQrCodeMaster::getBarcodeCode, code.getCodeId())
.one();
VUtil.trueThrowBusinessError(Objects.isNull(qrCodeMaster)).throwMessage("无效码【" + code.getCodeId() + "");
if (qrCodeMaster.getPackagingType().equals(1)) {
code.setCodeNum(BigDecimal.ZERO);
List<WmsQrCodeMaster> childCode= qrCodeMasterService.lambdaQuery()
.eq(WmsQrCodeMaster::getParentBarcodeId, qrCodeMaster.getId())
.list();
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(childCode)).throwMessage("箱码【" + code.getCodeId() + "】为空箱");
for (WmsQrCodeMaster child : childCode)
{
item.getScanCodes().add(new PDAScanCodeQO()
.setBatchNumber(child.getBatchNo())
.setSerialNumbers(child.getSerialNo())
.setCodeId(child.getBarcodeCode())
.setCodeNum(child.getQuantity())
.setCodeContent(child.getPackagingType().toString())
);
}
}
}
}
receipt.setReceiptQOS(items);
receipts.add(receipt);