diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java index c0211b5b..ae0259be 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalPGIController.java @@ -49,10 +49,7 @@ import java.math.BigDecimal; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -128,7 +125,6 @@ public class NormalPGIController extends BaseController { /** * 送货单列表 - * * @param request * @return */ @@ -140,7 +136,6 @@ public class NormalPGIController extends BaseController { /** * 送货单详情 - * * @param orderId 订单ID * @return */ @@ -157,7 +152,6 @@ public class NormalPGIController extends BaseController { /** * 获取扫码的详情信息 - * * @param orderItemId 订单项ID * @return */ @@ -172,7 +166,6 @@ public class NormalPGIController extends BaseController { /** * 扫描送货单号获取送货单详情(PDA) - * * @param orderNo 送货单号 * @return */ @@ -186,7 +179,6 @@ public class NormalPGIController extends BaseController { /** * 收货确认(PDA使用) - * * @param request * @return */ @@ -323,7 +315,6 @@ public class NormalPGIController extends BaseController { /** * 普通物料的上架任务(PDA) - * * @param orederNo 送货单号或是任务单号 * @return */ @@ -351,7 +342,6 @@ public class NormalPGIController extends BaseController { /** * 采购物料入库确认(PDA) - * * @param request * @return */ @@ -373,11 +363,8 @@ public class NormalPGIController extends BaseController { .list(); VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(wmsPoReceiptItems)).throwMessage("获取入库详情失败"); List receiptItems = new ArrayList<>(); - List storageLocationDTOS = new ArrayList<>(); List inventories = new ArrayList<>(); List zwm3A17DTOS = new ArrayList<>(); - List scanCodes = new ArrayList<>(); - List qrCodeMasters = new ArrayList<>(); for (WmsPoReceiptItem item : wmsPoReceiptItems) { PoReceiveTaskItemConfirmQO qo = request.getItems().stream() .filter(q -> q.getId().equals(item.getId())) @@ -385,23 +372,12 @@ public class NormalPGIController extends BaseController { .orElse(null); if (Objects.isNull(qo)) continue; -// item.setCrossQty(qo.getCrossQty()); item.setReceivedWarehouse(qo.getReceivedWarehouse()); item.setInQty(item.getReceiptNum()); item.setUpdateTime(LocalDateTime.now()); item.setUpdateUserId(UserUtil.getUserId()); item.setUpdateUserName(UserUtil.getUserName()); receiptItems.add(item); - //储位处理 -// if (StrUtil.isNotBlank(qo.getStorageLocationNew()) && qo.getStorageLocation().equals(qo.getStorageLocationNew())) { -// List bins = Arrays.asList(item.getStorageLocation().split("/")); -// storageLocationDTOS.add(new StorageLocationDTO() -// .setBinNos(bins) -// .setMaterialNo(item.getItemCode()) -// .setWarehouseNo(item.getReceivedWarehouse()) -// .setFactory(wmsPoReceipt.getFactoryCode()) -// ); -// } // SAP 和条码处理 //传入SAP的信息 @@ -418,35 +394,84 @@ public class NormalPGIController extends BaseController { zwm3A17DTOS.add(zwm3A17DTO); } + Map codeBinNoMap = request.getItems().stream() + .map(PoReceiveTaskItemConfirmQO::getItems) + .flatMap(List::stream) + .collect(Collectors.toMap(InCostCenterBackSubmitItemQRQO::getQrCode, InCostCenterBackSubmitItemQRQO::getBinNo)); + List qrCodeMasters = qrCodeMasterService.getByCodes(codeBinNoMap.keySet()); + List tmpQrCodes = qrCodeMasters.stream() + .filter(qrCodeMaster -> !Objects.equals(qrCodeMaster.getProcessStage(), BarCodeProcessStage.Received.getState())) + .map(WmsQrCodeMaster::getBarcodeCode) + .toList(); + VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(tmpQrCodes)) + .throwMessage("条码状态异常:" + String.join(",", tmpQrCodes)); + List tmpQrCodes1 = qrCodeMasters.stream() + .filter(qrCodeMaster -> qrCodeMaster.getPackagingType() == 1) + .map(WmsQrCodeMaster::getId) + .toList(); + if (CollectionUtil.isNotEmpty(tmpQrCodes1)) { + //查询子码 + qrCodeMasters.addAll(qrCodeMasterService.lambdaQuery() + .eq(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.Received.getState()) + .in(WmsQrCodeMaster::getParentBarcodeId, tmpQrCodes1) + .notIn(WmsQrCodeMaster::getBarcodeCode, codeBinNoMap.keySet()) + .list() + ); + } + Set tmpQrCodes2 = qrCodeMasters.stream() + .map(WmsQrCodeMaster::getParentBarcodeId) + .filter(parentBarcodeId -> parentBarcodeId > 0) + .collect(Collectors.toSet()); + tmpQrCodes1.forEach(tmpQrCodes2::remove); + if (CollectionUtil.isNotEmpty(tmpQrCodes2)) { + //处理子码的父码 + List parentQrCodeMasters = qrCodeMasterService.listByIds(tmpQrCodes2); + List childQrCodeMasters = qrCodeMasterService.lambdaQuery() + .eq(WmsQrCodeMaster::getProcessStage, BarCodeProcessStage.Received.getState()) + .in(WmsQrCodeMaster::getParentBarcodeId, tmpQrCodes2) + .list(); + parentQrCodeMasters.removeIf(p -> + !childQrCodeMasters.stream() + .filter(c -> Objects.equals(c.getParentBarcodeId(), p.getId())) + .map(WmsQrCodeMaster::getId) + .collect(Collectors.toSet()) + .equals( + qrCodeMasters.stream() + .filter(qrCodeMaster -> Objects.equals(qrCodeMaster.getParentBarcodeId(), p.getId())) + .map(WmsQrCodeMaster::getId) + .collect(Collectors.toSet()) + ) + ); + //如果父码的子码都已扫码 + if (CollectionUtil.isNotEmpty(parentQrCodeMasters)) { + qrCodeMasters.addAll(parentQrCodeMasters); + } + } + qrCodeMasters.sort(Comparator.comparing(WmsQrCodeMaster::getPackagingType).reversed()); + qrCodeMasters.forEach(qrCodeMaster -> { + qrCodeMaster.setProcessStage(BarCodeProcessStage.InBound.getState()); + qrCodeMaster.setStorageLocation(qo.getReceivedWarehouse()); + qrCodeMaster.setLastScanBy(UserUtil.getUserId()); + qrCodeMaster.setLastScanByname(UserUtil.getUserName()); + qrCodeMaster.setLastScanTime(LocalDateTime.now()); + String binNo = codeBinNoMap.get(qrCodeMaster.getBarcodeCode()); + if (StrUtil.isNotBlank(binNo)) { + qrCodeMaster.setBinLocation(binNo); + if (qrCodeMaster.getPackagingType() == 1) { + qrCodeMasters.stream() + .filter(qr -> Objects.equals(qr.getParentBarcodeId(), qrCodeMaster.getId())) + .forEach(qr -> qr.setBinLocation(binNo)); + } + } + }); + qrCodeMasterService.updateBarCode(qrCodeMasters); + List item1 = zwm3A17DTO.getItem1(); List item2 = zwm3A17DTO.getItem2(); - List scanCode = srmMaterialReceiptScanCodesRepository.findByReceiveItemId(item.getId()); - if (CollectionUtil.isNotEmpty(scanCode)) { - scanCode = scanCode.stream().filter(code -> code.getIsIntoStorage() == false) - .toList(); - } - - 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) { + qrCodeMasters.stream() + .filter(qrCodeMaster -> qrCodeMaster.getPackagingType() == 0) + .forEach(qrCodeMaster -> { // 库存 InventoryInDTO inventoryDTO = inventories.stream() .filter(inventoriesDTO -> inventoriesDTO.getMaterialNo().equals(item.getItemCode()) @@ -474,7 +499,7 @@ public class NormalPGIController extends BaseController { dto1.getEBELP().equals(item.getPoLineNumber()) && dto1.getMATNR().equals(item.getItemCode()) && dto1.getMeins().equals(item.getUomCode()) - && dto1.getCHARG().equals(code.getBatchNumber()) + && dto1.getCHARG().equals(qrCodeMaster.getBatchNo()) && dto1.getWERKS().equals(wmsPoReceipt.getFactoryCode()) && dto1.getLGORT().equals(item.getReceivedWarehouse()) ).findFirst().orElse(null); @@ -482,76 +507,24 @@ public class NormalPGIController extends BaseController { item1.add(new ZWM3A17Item1DTO() .setEBELP(item.getPoLineNumber()) .setMATNR(item.getItemCode()) - .setERFMG(code.getCodeNum()) + .setERFMG(qrCodeMaster.getQuantity()) .setMEINS(item.getUomCode()) - .setCHARG(code.getBatchNumber()) + .setCHARG(qrCodeMaster.getBatchNo()) .setWERKS(wmsPoReceipt.getFactoryCode()) .setLGORT(item.getReceivedWarehouse()) .setKZKRI("") ); } else { - ietm1Dto.setERFMG(ietm1Dto.getERFMG().add(code.getCodeNum())); + ietm1Dto.setERFMG(ietm1Dto.getERFMG().add(qrCodeMaster.getQuantity())); } item2.add(new ZWM3A17Item2DTO() .setEBELP(item.getPoLineNumber()) .setFLAG("") - .setSERNR(code.getSerialNumbers())); - - scanCodes.add(code); -// WmsQrCodeMaster wmsQrCodeMaster = new WmsQrCodeMaster() -// .setBarcodeCode(code.getCodeId()) -// .setBarcodeType((short) 1) -// .setProcessStage(BarCodeProcessStage.InBound.getState()) -// .setLastScanBy(UserUtil.getUserId()) -// .setLastScanByname(UserUtil.getUserName()) -// .setLastScanTime(LocalDateTime.now()); - } - }); - } else { - // 库存 - InventoryInDTO inventoryDTO = new InventoryInDTO() - .setMaterialNo(item.getItemCode()) - .setFactoryNo(wmsPoReceipt.getFactoryCode()) - .setWarehouseNo(item.getReceivedWarehouse()) - .setBatchNo("") - .setSerialNo("") - .setNum(item.getInQty()); - inventories.add(inventoryDTO); - - item1.add(new ZWM3A17Item1DTO() - .setEBELP(item.getPoLineNumber()) - .setMATNR(item.getItemCode()) - .setERFMG(item.getInQty()) - .setMEINS(item.getUomCode()) - .setCHARG("") - .setWERKS(wmsPoReceipt.getFactoryCode()) - .setLGORT(item.getReceivedWarehouse()) - .setKZKRI("") - ); - } - } - if (CollectionUtil.isNotEmpty(qrCodeMasters)) { - //同步箱码信息到物料码中 - 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()); - c.setLastScanByname(UserUtil.getUserName()); - c.setLastScanTime(LocalDateTime.now()); - c.setFactoryCode(p.getFactoryCode()); - c.setStorageLocation(p.getStorageLocation()); - c.setBinLocation(p.getBinLocation()); - c.setReceiptItemId(p.getReceiptItemId()); - }); + .setSERNR(qrCodeMaster.getSerialNo())); }); - qrCodeMasterService.updateBarCode(qrCodeMasters); } - normalPGIControllerService.takeDeliveryConfirm(receiptItems, storageLocationDTOS, inventories, zwm3A17DTOS, request.getTaskId(), scanCodes); + normalPGIControllerService.takeDeliveryConfirm(receiptItems, inventories, zwm3A17DTOS, request.getTaskId()); return ApiResult.success(); } @@ -574,7 +547,6 @@ public class NormalPGIController extends BaseController { /** * 收货直接入库的(未启用储位管理) - * * @return */ private void setPoReceiveByIn(SrmMaterialReceiptQO item, @@ -824,7 +796,6 @@ public class NormalPGIController extends BaseController { /** * 一键收货查询 - * * @param request * @return */ @@ -1001,7 +972,6 @@ public class NormalPGIController extends BaseController { /** * 一键收货(无码) - * * @param request * @return */ @@ -1113,7 +1083,6 @@ public class NormalPGIController extends BaseController { /** * 采购物料上架确认(无码) - * * @param request * @return */ @@ -1419,7 +1388,6 @@ public class NormalPGIController extends BaseController { /** * 通过打包码获取到打包码的信息 - * * @param request * @return */ @@ -1438,7 +1406,6 @@ public class NormalPGIController extends BaseController { /** * 获取打包码对应的送货单信息 - * * @param request * @return */ @@ -1451,7 +1418,6 @@ public class NormalPGIController extends BaseController { /** * 根据送货单单号和大码的ID获取到具体的物料信息 - * * @param request * @return */ @@ -1464,7 +1430,6 @@ public class NormalPGIController extends BaseController { /** * 根据送货单单号和大码的ID获取到具体的物料信息 - * * @param request id= 大码的ID * @return */ @@ -1486,7 +1451,6 @@ public class NormalPGIController extends BaseController { /** * 通过打包码获取到物料信息 - * * @param request * @return */ @@ -1505,7 +1469,6 @@ public class NormalPGIController extends BaseController { /** * 确认收货(无需扫码) - * * @param request * @return */ @@ -1580,7 +1543,7 @@ public class NormalPGIController extends BaseController { List scanCodes = new ArrayList<>(); List dtos1 = dtos.stream() .filter(dto -> dto.getSrmOrderItemId().equals(item.getId()) - &&dto.getPackagingType()==0 + && dto.getPackagingType() == 0 ).collect(Collectors.toList()); for (WmsPackageItemDetailDTO dto : dtos1) { PDAScanCodeQO scanCode = new PDAScanCodeQO(); @@ -1710,7 +1673,6 @@ public class NormalPGIController extends BaseController { /** * 确认收货(需扫码) - * * @param request * @return */ diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/NormalPGIControllerService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/NormalPGIControllerService.java index 320eca4a..bc99cd99 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/NormalPGIControllerService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/NormalPGIControllerService.java @@ -294,11 +294,11 @@ public class NormalPGIControllerService { @Transactional public void takeDeliveryConfirm( List wmsPoReceiptItems, - List storageLocationDTOS, +// List storageLocationDTOS, List inventories, List zwm3A17DTOS, - Long taskId, - List scanCodes + Long taskId +// List scanCodes ) { if (CollectionUtil.isNotEmpty(wmsPoReceiptItems)) { wmsPoReceiptItemService.updateBatchById(wmsPoReceiptItems); diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PoReceiveTaskConfirmQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PoReceiveTaskConfirmQO.java index 331a4b80..d2fb48f2 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PoReceiveTaskConfirmQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PoReceiveTaskConfirmQO.java @@ -1,5 +1,8 @@ package com.nflg.wms.common.pojo.qo; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.experimental.Accessors; @@ -13,6 +16,7 @@ public class PoReceiveTaskConfirmQO { /** * 任务ID */ + @NotNull private Long taskId; // /** @@ -23,5 +27,7 @@ public class PoReceiveTaskConfirmQO { /** * 入库详情 */ + @Valid + @NotEmpty private List items; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PoReceiveTaskItemConfirmQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PoReceiveTaskItemConfirmQO.java index cf6f122d..16ba1cca 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PoReceiveTaskItemConfirmQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PoReceiveTaskItemConfirmQO.java @@ -1,6 +1,8 @@ package com.nflg.wms.common.pojo.qo; import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.experimental.Accessors; @@ -12,6 +14,7 @@ public class PoReceiveTaskItemConfirmQO { /** * 收货单详情ID */ + @NotNull private Long id; // /** @@ -37,5 +40,6 @@ public class PoReceiveTaskItemConfirmQO { * 二维码列表 */ @Valid + @NotEmpty private List items; } diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsQrCodeMasterService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsQrCodeMasterService.java index 911b8663..60b862b8 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsQrCodeMasterService.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IWmsQrCodeMasterService.java @@ -12,6 +12,7 @@ import com.nflg.wms.repository.entity.WmsTransferOrders; import jakarta.validation.Valid; import jakarta.validation.constraints.NotBlank; +import java.util.Collection; import java.util.List; /** @@ -43,7 +44,7 @@ public interface IWmsQrCodeMasterService extends IService { // void updateBatchByCode(List qrCodeMasters); - List getByCodes(List qrCodes); + List getByCodes(Collection qrCodes); WmsQrCodeMaster getByCode(String qrCode); diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsQrCodeMasterServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsQrCodeMasterServiceImpl.java index 5843ff8d..cbf85617 100644 --- a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsQrCodeMasterServiceImpl.java +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/WmsQrCodeMasterServiceImpl.java @@ -22,6 +22,7 @@ import org.springframework.retry.annotation.Retryable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Collection; import java.util.List; /** @@ -167,7 +168,7 @@ public class WmsQrCodeMasterServiceImpl extends ServiceImpl getByCodes(List qrCodes) { + public List getByCodes(Collection qrCodes) { return lambdaQuery() .in(WmsQrCodeMaster::getBarcodeCode, qrCodes) .list();