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,26 +429,45 @@ 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());
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() InventoryInDTO inventoryDTO = inventories.stream()
.filter(inventoriesDTO -> inventoriesDTO.getMaterialNo().equals(item.getItemCode()) .filter(inventoriesDTO -> inventoriesDTO.getMaterialNo().equals(item.getItemCode())
&& inventoriesDTO.getBatchNo().equals(code.getBatchNumber()) && inventoriesDTO.getBatchNo().equals(qrCodeMaster.getBatchNo())
&& inventoriesDTO.getSerialNo().equals(code.getSerialNumbers()) && inventoriesDTO.getSerialNo().equals(qrCodeMaster.getSerialNo())
&& inventoriesDTO.getFactoryNo().equals(wmsPoReceipt.getFactoryCode()) && inventoriesDTO.getFactoryNo().equals(qrCodeMaster.getFactoryCode())
&& inventoriesDTO.getWarehouseNo().equals(item.getReceivedWarehouse()) && inventoriesDTO.getWarehouseNo().equals(qrCodeMaster.getStorageLocation())
).findFirst().orElse(null); && StrUtil.equals(inventoriesDTO.getBinLocation(), qrCodeMaster.getBinLocation())
).findFirst()
.orElse(null);
if (Objects.isNull(inventoryDTO)) { if (Objects.isNull(inventoryDTO)) {
inventoryDTO = new InventoryInDTO() inventoryDTO = new InventoryInDTO()
.setMaterialNo(item.getItemCode()) .setMaterialNo(qrCodeMaster.getMaterialCode())
.setFactoryNo(wmsPoReceipt.getFactoryCode()) .setFactoryNo(qrCodeMaster.getFactoryCode())
.setWarehouseNo(item.getReceivedWarehouse()) .setWarehouseNo(qrCodeMaster.getStorageLocation())
.setBatchNo(code.getBatchNumber()) .setBatchNo(qrCodeMaster.getBatchNo())
.setSerialNo(code.getSerialNumbers()) .setSerialNo(qrCodeMaster.getSerialNo())
.setNum(code.getCodeNum()); .setNum(qrCodeMaster.getQuantity());
inventories.add(inventoryDTO); inventories.add(inventoryDTO);
} else { } else {
inventoryDTO.setNum(inventoryDTO.getNum().add(code.getCodeNum())); inventoryDTO.setNum(inventoryDTO.getNum().add(qrCodeMaster.getQuantity()));
} }
ZWM3A17Item1DTO ietm1Dto = item1.stream() ZWM3A17Item1DTO ietm1Dto = item1.stream()
.filter(dto1 -> .filter(dto1 ->
@ -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,35 +533,11 @@ 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()
// .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()))
.forEach(c -> { .forEach(c -> {
c.setProcessStage(p.getProcessStage()); c.setProcessStage(p.getProcessStage());
c.setLastScanBy(UserUtil.getUserId()); c.setLastScanBy(UserUtil.getUserId());
@ -582,9 +549,7 @@ public class NormalPGIController extends BaseController {
c.setReceiptItemId(p.getReceiptItemId()); c.setReceiptItemId(p.getReceiptItemId());
}); });
}); });
qrCodeMasters.addAll(children); qrCodeMasterService.updateBarCode(qrCodeMasters);
// 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();