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.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,26 +429,45 @@ public class NormalPGIController extends BaseController {
if (CollectionUtil.isNotEmpty(scanCode)) {
scanCode.forEach(code -> {
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());
}
}
qrCodeMasters.add(qrCodeMaster);
if (qrCodeMaster.getPackagingType() == 0) {
// 库存
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);
&& 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(item.getItemCode())
.setFactoryNo(wmsPoReceipt.getFactoryCode())
.setWarehouseNo(item.getReceivedWarehouse())
.setBatchNo(code.getBatchNumber())
.setSerialNo(code.getSerialNumbers())
.setNum(code.getCodeNum());
.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(code.getCodeNum()));
inventoryDTO.setNum(inventoryDTO.getNum().add(qrCodeMaster.getQuantity()));
}
ZWM3A17Item1DTO ietm1Dto = item1.stream()
.filter(dto1 ->
@ -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,35 +533,11 @@ public class NormalPGIController extends BaseController {
}
if (CollectionUtil.isNotEmpty(qrCodeMasters)) {
//同步箱码信息到物料码中
List<WmsQrCodeMaster> parents = qrCodeMasters
.stream()
// .filter(qrCode -> qrCode.getPackagingType() == 1)
.filter(qrCode -> qrCode.getPackagingType() != null && qrCode.getPackagingType() == 1)
.toList();
// List<WmsQrCodeMaster> children = qrCodeMasterService.lambdaQuery()
// .in(WmsQrCodeMaster::getParentBarcodeId, parents
// .stream()
// .map(WmsQrCodeMaster::getId)
// .toList()
// )
// .list();
List<WmsQrCodeMaster> 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()))
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());
@ -582,9 +549,7 @@ public class NormalPGIController extends BaseController {
c.setReceiptItemId(p.getReceiptItemId());
});
});
qrCodeMasters.addAll(children);
// qrCodeMasterService.updateBarCode(qrCodeMasters);
qrCodeMasterService.saveOrUpdateBatch(qrCodeMasters);
qrCodeMasterService.updateBarCode(qrCodeMasters);
}
normalPGIControllerService.takeDeliveryConfirm(receiptItems, storageLocationDTOS, inventories, zwm3A17DTOS, request.getTaskId(), scanCodes);
return ApiResult.success();