整包收货的bug

This commit is contained in:
zhangke 2026-03-11 15:33:07 +08:00
parent b024a8757b
commit 820412f9fe
7 changed files with 84 additions and 150 deletions

View File

@ -426,8 +426,8 @@ public class NormalPGIController extends BaseController {
.setWmsQcReceiveItems(wmsQcReceiveItems)
.setSrmMaterialReceiptScanCodes(srmMaterialReceiptScanCodes)
.setOrderId(order.getId())
.setInventories(inventories)
.setZwm3A17DTOS(zwm3A17DTOS)
// .setInventories(inventories)
// .setZwm3A17DTOS(zwm3A17DTOS)
.setQrCodes(qrCodes)
.setQcMaterialSyncDTOS(qcMaterialSyncDTOS);
dtos.add(dto);
@ -1537,7 +1537,6 @@ public class NormalPGIController extends BaseController {
VUtil.trueThrowBusinessError(ObjectUtil.isNull(pacageScanVO)).throwMessage("打包码不存在");
VUtil.trueThrowBusinessError(pacageScanVO.getPackageStatus() == 0).throwMessage("此打包码尚未打包");
VUtil.trueThrowBusinessError(pacageScanVO.getPackageStatus() == 2).throwMessage("此打包码已完成收货");
List<PDAOrderItemVO> pdaOrderVO = normalPGIControllerService.getPackageContents(request.getPackageCode());
return ApiResult.success(pdaOrderVO);
}
@ -1565,13 +1564,14 @@ public class NormalPGIController extends BaseController {
.list();
if (CollectionUtil.isNotEmpty(warehouseList)) {
List<String> warehouseNoList = warehouseList.stream().map(WmsWarehouse::getName).collect(Collectors.toList());
VUtil.trueThrowBusinessError(true).throwMessage("仓库[" + warehouseNoList.stream().collect(Collectors.joining(";")) + "]");
VUtil.trueThrowBusinessError(true).throwMessage("仓库[" + warehouseNoList.stream().collect(Collectors.joining(";")) + "]不允许免扫码收货");
}
List<WmsPackageItemDetailDTO> dtos = wmsPackageService.getPackageItemDetails(request.getPackageCode());
List<Long> packItemId = dtos.stream().map(WmsPackageItemDetailDTO::getPackageItemId).distinct().collect(Collectors.toList());
//对中码进行一个操作
List<Long> parentIds = dtos.stream().filter(dto -> dto.getPackagingType() == 0)
List<Long> parentIds = dtos.stream().filter(dto -> dto.getPackagingType() == 1)
.map(WmsPackageItemDetailDTO::getBarcodeId).collect(Collectors.toList());
if (CollectionUtil.isNotEmpty(parentIds)) {
@ -1628,16 +1628,17 @@ public class NormalPGIController extends BaseController {
}
qoItem.setScanCodes(scanCodes);
receiptQOS.add(qoItem);
}
qo.setReceiptQOS(receiptQOS);
}
receipts.add(qo);
}
//开始收货
GoodReceipt(receipts, pacageScanVO.getId());
GoodReceipt(receipts, pacageScanVO.getId(), packItemId);
return ApiResult.success();
}
private void GoodReceipt(List<SrmReceiptQO> receipts, Long packageId) {
private void GoodReceipt(List<SrmReceiptQO> receipts, Long packageId, List<Long> packItemId) {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(receipts)).throwMessage("收货参数为空");
List<GoodReceiptDTO> dtos = new ArrayList<>();
for (SrmReceiptQO request : receipts) {
@ -1645,8 +1646,6 @@ public class NormalPGIController extends BaseController {
List<WmsQcReceiveItem> wmsQcReceiveItems = new ArrayList<>();
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<>();
WmsSrmOrder order = wmsSrmOrderService.lambdaQuery().eq(WmsSrmOrder::getNoteNum, request.getDeliveryNo()).one();
VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("收货单不存在");
@ -1670,6 +1669,7 @@ public class NormalPGIController extends BaseController {
.setIsCheck((short) 0)
.setSourceType(0)
.setCreateUserId(UserUtil.getUserId());
//TODO
for (SrmMaterialReceiptQO item : request.getReceiptQOS()) {
if (item.getReceiptNum().equals(BigDecimal.ZERO)) {
continue;
@ -1704,92 +1704,6 @@ public class NormalPGIController extends BaseController {
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()) {
@ -1806,7 +1720,7 @@ public class NormalPGIController extends BaseController {
qrCodeMaster.setReceiptItemId(orderItemId);
qrCodes.add(qrCodeMaster);
}
}
// }
}
//=========
}
@ -1817,13 +1731,31 @@ public class NormalPGIController extends BaseController {
.setWmsQcReceiveItems(wmsQcReceiveItems)
.setSrmMaterialReceiptScanCodes(srmMaterialReceiptScanCodes)
.setOrderId(order.getId())
.setInventories(inventories)
.setZwm3A17DTOS(zwm3A17DTOS)
// .setInventories(inventories)
// .setZwm3A17DTOS(zwm3A17DTOS)
.setPackItemIds(packItemId)
.setQrCodes(qrCodes)
.setQcMaterialSyncDTOS(qcMaterialSyncDTOS);
dtos.add(dto);
}
normalPGIControllerService.takeDeliveryByPackage(dtos, packageId);
List<WmsPackageItem> wmsPackageItems = wmsPackageItemService.lambdaQuery()
.eq(WmsPackageItem::getPackageId, packageId)
.eq(WmsPackageItem::getPackageStatus, 0)
.list();
if (CollectionUtil.isNotEmpty(wmsPackageItems)) {
wmsPackageService.lambdaUpdate()
.set(WmsPackage::getPackageStatus, 3)
.eq(WmsPackage::getId, packageId)
.update();
} else {
wmsPackageService.lambdaUpdate()
.set(WmsPackage::getPackageStatus, 2)
.eq(WmsPackage::getId, packageId)
.update();
}
}
/**
@ -1843,6 +1775,7 @@ public class NormalPGIController extends BaseController {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(request.getItems())).throwMessage("没有收货的物料信息");
List<SrmReceiptQO> receipts = new ArrayList<>();
List<String> orderNos = request.getItems().stream().map(it -> it.getNoteNum()).distinct().toList();
List<Long> packItemId = new ArrayList<>();
for (String orderNo : orderNos) {
SrmReceiptQO receipt = new SrmReceiptQO();
receipt.setDeliveryNo(orderNo);
@ -1852,6 +1785,14 @@ public class NormalPGIController extends BaseController {
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(item.getScanCodes())).throwMessage("[" + item.getItemCode() + "]没有码信息");
//对项目进行处理
for (PDAScanCodeQO code : item.getScanCodes()) {
WmsPackageItem packItem = wmsPackageItemService.lambdaQuery()
.eq(WmsPackageItem::getPackageId, pacageScanVO.getId())
.eq(WmsPackageItem::getBarcodeCode, code.getCodeId())
.one();
VUtil.trueThrowBusinessError(Objects.isNull(packItem)).throwMessage("无效码【" + code.getCodeId() + "");
VUtil.trueThrowBusinessError(packItem.getPackageStatus() == 2).throwMessage("此码【" + code.getCodeId() + "】已完成收货");
packItemId.add(packItem.getId());
WmsQrCodeMaster qrCodeMaster = qrCodeMasterService.lambdaQuery()
.eq(WmsQrCodeMaster::getBarcodeCode, code.getCodeId())
.one();
@ -1877,7 +1818,7 @@ public class NormalPGIController extends BaseController {
receipt.setReceiptQOS(items);
receipts.add(receipt);
}
GoodReceipt(receipts, pacageScanVO.getId());
GoodReceipt(receipts, pacageScanVO.getId(), packItemId);
return ApiResult.success();
}
}

View File

@ -47,14 +47,19 @@ public class GoodReceiptDTO {
private Long orderId;
/**
* 库存数据
* 包装项ID
*/
private List<InventoryDTO> inventories;
private List<Long> packItemIds;
/**
*同步库存到SAP的数据
*/
private List<ZWM3A17DTO> zwm3A17DTOS;
// /**
// * 库存数据
// */
// private List<InventoryDTO> inventories;
// /**
// *同步库存到SAP的数据
// */
// private List<ZWM3A17DTO> zwm3A17DTOS;
/**
* 条码数据

View File

@ -552,13 +552,13 @@ public class NormalPGIControllerService {
public List<PDAOrderItemVO> getPackageContents(@NotNull @NotBlank String packageCode) {
List<PackagePOItemDTO> packagePOItems = wmsPackageService.getPackagePOItems(packageCode);
VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(packagePOItems)).throwMessage("此大包中的物料已完成收货");
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(packagePOItems)).throwMessage("此大包中的物料已完成收货");
List<PDAOrderItemVO> orderItemVOList = new ArrayList<>();
// 遍历订单行项目填充详细信息并从 SAP 获取补充数据
for (PackagePOItemDTO item : packagePOItems) {
PDAOrderItemVO itemVO = new PDAOrderItemVO();
itemVO.setId(item.getSrmOrderId());
itemVO.setId(item.getSrmOrderItemId());
itemVO.setPoLineNumber(item.getPoLineNumber());
itemVO.setPoNum(item.getPoNumber());
itemVO.setItemCode(item.getMaterialCode());
@ -595,33 +595,16 @@ public class NormalPGIControllerService {
takeDelivery(dto.getWmsPoReceipt(), dto.getWmsQcReceive(), dto.getWmsPoReceiptItems(), dto.getWmsQcReceiveItems()
, dto.getSrmMaterialReceiptScanCodes(), dto.getQcMaterialSyncDTOS(), dto.getOrderId()
);
//入库
if (CollectionUtil.isNotEmpty(dto.getInventories())) {
inventoryService.in(dto.getInventories());
}
//过账SAP
if (CollectionUtil.isNotEmpty(dto.getZwm3A17DTOS())) {
for (ZWM3A17DTO zwm3A17DTO : dto.getZwm3A17DTOS()) {
Pair<Pair<String, String>, Pair<String, String>> returnDto = sapService.zwm3a17(zwm3A17DTO);
wmsPoReceiptItemService.lambdaUpdate()
.eq(WmsPoReceiptItem::getPoNum, zwm3A17DTO.getEbeln())
.eq(WmsPoReceiptItem::getReceiveId, zwm3A17DTO.getReceiveId())
.set(WmsPoReceiptItem::getMaterialDoc, returnDto.getKey().getKey())
.set(WmsPoReceiptItem::getMaterialDocYear, returnDto.getValue().getValue())
if (CollectionUtil.isNotEmpty(dto.getPackItemIds())) {
wmsPackageItemService.lambdaUpdate()
.set(WmsPackageItem::getPackageStatus, (short) 2)
.in(WmsPackageItem::getId, dto.getPackItemIds())
.update();
}
}
//编码管理
if (CollectionUtil.isNotEmpty(dto.getQrCodes())) {
qrCodeMasterService.updateBarCode(dto.getQrCodes());
// 修改包装项的收货状态
if (Objects.nonNull(packageId) && packageId > 0) {
List<String> codeIds = dto.getQrCodes().stream().map(WmsQrCodeMaster::getBarcodeCode).toList();
wmsPackageItemService.lambdaUpdate()
.eq(WmsPackageItem::getPackageId, packageId)
.in(WmsPackageItem::getBarcodeCode, codeIds)
.set(WmsPackageItem::getPackageStatus, (short) 2);
}
}
}
}

View File

@ -43,6 +43,7 @@ public class SAPCommonService {
syncParams.setWerks(materialInfoInOrder.getWerks());
syncParams.setLbprt(materialInfoInOrder.getLbprt());
syncParams.setKzkri(materialInfoInOrder.getKzkri());
syncParams.setWarehouseNo(materialInfoInOrder.getWarehouseNo());
//获取仓库信息
// List<String> warehouseNos = new ArrayList<>();

View File

@ -19,7 +19,7 @@ public class PackagePOItemDTO {
/**
* 送货单项ID
*/
private Long srmOrderId;
private Long srmOrderItemId;
/**
* 供应商编号

View File

@ -43,7 +43,9 @@ public class WmsWarehouseServiceImpl extends ServiceImpl<WmsWarehouseMapper, Wms
@Transactional
@Override
public void add(WmsWarehouse wmsWarehouse) {
VUtil.trueThrowBusinessError(lambdaQuery().eq(WmsWarehouse::getNo, wmsWarehouse.getNo()).exists())
VUtil.trueThrowBusinessError(lambdaQuery().eq(WmsWarehouse::getNo, wmsWarehouse.getNo())
.eq(WmsWarehouse::getFactoryId, wmsWarehouse.getFactoryId())
.exists())
.throwMessage("仓库编码已存在");
save(wmsWarehouse);
auditLogService.addInsert(WmsWarehouse.class, wmsWarehouse, wmsWarehouse.getCreateBy());
@ -52,7 +54,9 @@ public class WmsWarehouseServiceImpl extends ServiceImpl<WmsWarehouseMapper, Wms
@Transactional
@Override
public void update(WmsWarehouse wmsWarehouse) {
VUtil.trueThrowBusinessError(lambdaQuery().eq(WmsWarehouse::getNo, wmsWarehouse.getNo()).ne(WmsWarehouse::getId, wmsWarehouse.getId()).exists())
VUtil.trueThrowBusinessError(lambdaQuery().eq(WmsWarehouse::getNo, wmsWarehouse.getNo())
.eq(WmsWarehouse::getFactoryId, wmsWarehouse.getFactoryId())
.ne(WmsWarehouse::getId, wmsWarehouse.getId()).exists())
.throwMessage("仓库编码已存在");
WmsWarehouse old = getById(wmsWarehouse.getId());
VUtil.trueThrowBusinessError(Objects.isNull(old)).throwMessage("仓库不存在");

View File

@ -211,7 +211,7 @@
left join wms_qr_code_master c on b.barcode_code = c.barcode_code
left join wms_qr_code_master d on c.id = d.parent_barcode_id and d.process_stage = 1
left join wms_srm_order_item e on b.srm_order_item_id = e.id
left join user_supplier f on a.supplier_id = f."id"
left join user_supplier f on a.supplier_id = f.user_id
where a.package_code = #{packageCode} and b.package_status = 0
group by c.material_code,
c.material_description,