From 9d327f9ed1bc3182995604ee0c5f426de96cf6b9 Mon Sep 17 00:00:00 2001 From: zhangke Date: Sun, 21 Sep 2025 23:06:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=97=A0=E7=A0=81=E6=94=B6?= =?UTF-8?q?=E8=B4=A7=E5=92=8C=E6=97=A0=E7=A0=81=E4=B8=8A=E6=9E=B6=E7=9A=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/NormalPGIController.java | 241 +++++++++++++++--- .../admin/controller/NormalQMController.java | 58 ++++- .../service/NormalPGIControllerService.java | 140 +++++++++- .../wms/admin/service/SAPCommonService.java | 41 +++ .../wms/common/pojo/qo/PDAScanCodeQO.java | 2 + .../nflg/wms/common/pojo/qo/ReceiveQO.java | 10 + .../common/pojo/qo/SrmMaterialReceiptQO.java | 2 + .../nflg/wms/common/pojo/vo/POReceiptVO.java | 7 + .../nflg/wms/common/pojo/vo/QCReceiptVO.java | 7 + .../mapper/WmsPoReceiptItemMapper.xml | 2 +- .../resources/mapper/WmsPoReceiptMapper.xml | 2 +- .../resources/mapper/WmsQcReceiveMapper.xml | 5 +- 12 files changed, 467 insertions(+), 50 deletions(-) create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ReceiveQO.java 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 a3ecc919..0cfa33fb 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 @@ -84,6 +84,7 @@ public class NormalPGIController extends BaseController { /** * 送货单列表 + * * @param request * @return */ @@ -95,6 +96,7 @@ public class NormalPGIController extends BaseController { /** * 送货单详情 + * * @param orderId 订单ID * @return */ @@ -111,6 +113,7 @@ public class NormalPGIController extends BaseController { /** * 获取扫码的详情信息 + * * @param orderItemId 订单项ID * @return */ @@ -125,6 +128,7 @@ public class NormalPGIController extends BaseController { /** * 扫描送货单号获取送货单详情(PDA) + * * @param orderNo 送货单号 * @return */ @@ -227,6 +231,7 @@ public class NormalPGIController extends BaseController { /** * 普通物料的上架任务(PDA) + * * @param orederNo 送货单号或是任务单号 * @return */ @@ -244,7 +249,7 @@ public class NormalPGIController extends BaseController { /** * 上架任务详情(PDA) * * @param id 任务ID - * */ + */ @GetMapping("PDA/task/item") @ApiMark(moduleName = "送货单管理", apiName = "普通上架物料详情") public ApiResult> takeDeliveryItem(@Valid @RequestParam Long taskId) { @@ -260,6 +265,7 @@ public class NormalPGIController extends BaseController { /** * 采购物料入库确认(PDA) + * * @param request * @return */ @@ -418,9 +424,14 @@ public class NormalPGIController extends BaseController { .distinct() .collect(Collectors.toList()); //重新读取SAP的接口,更新物料信息(已收货数、仓库信息、储位信息 等) - List sapSyncParamsDTOS = uniqueCombinations.stream() - .map(triple -> sapCommonService.getMaterialInfoInOrder(triple.getLeft(), triple.getMiddle(), triple.getRight())) - .collect(Collectors.toList()); + List sapSyncParamsDTOS=new ArrayList<>(); + uniqueCombinations.forEach(triple -> { + List items= sapCommonService.getMaterialInfoInOrder(triple.getLeft(), triple.getMiddle(), triple.getRight()); + if(CollectionUtil.isNotEmpty( items)) + { + sapSyncParamsDTOS.addAll(items); + } + }); return sapSyncParamsDTOS; } @@ -695,7 +706,9 @@ public class NormalPGIController extends BaseController { return ApiResult.success(list); } - private List validateNoScanCodes(BarcodeLessReceivingVO item, SAPSyncParamsDTO materialInfoInOrder) { + private List validateNoScanCodes(BarcodeLessReceivingVO item, + SAPSyncParamsDTO materialInfoInOrder, + List scanCodeQOS) { String lbprt = materialInfoInOrder.getLbprt(); //判断序列号、批次号是否规范 // 1 - 批次号为空,序列号为空 @@ -730,6 +743,17 @@ public class NormalPGIController extends BaseController { .setSerialNumbers(item.getSerialNumbers()) .setCodeContent(codeContent) .setIsIntoStorage(false)); + + scanCodeQOS.add(new SrmMaterialReceiptScanCodes() + .setCodeId(codeId) + .setOrderNo(item.getNoteNum()) + .setOrderItemId(item.getId()) + .setIsIntoStorage(false) + .setCodeNum(item.getUnRecieveQty()) + .setBatchNumber(item.getBatchNumber()) + .setSerialNumbers(item.getSerialNumbers()) + .setCodeContent(codeContent) + ); codeIds.add(codeId); // 21602 @@ -747,9 +771,19 @@ public class NormalPGIController extends BaseController { .setOrderNo(item.getNoteNum()) .setOrderItemId(item.getId()) .setCodeNum(new BigDecimal(1)) - .setSerialNumbers(item.getSerialNumbers()) + .setSerialNumbers(serialNumbers[i]) .setCodeContent(codeContent) .setIsIntoStorage(false)); + scanCodeQOS.add(new SrmMaterialReceiptScanCodes() + .setCodeId(codeId) + .setOrderNo(item.getNoteNum()) + .setOrderItemId(item.getId()) + .setIsIntoStorage(false) + .setCodeNum(new BigDecimal(1)) + .setBatchNumber(item.getBatchNumber()) + .setSerialNumbers(serialNumbers[i]) + .setCodeContent(codeContent) + ); codeIds.add(codeId); } } @@ -776,7 +810,9 @@ public class NormalPGIController extends BaseController { List wmsQcReceiveItems = new ArrayList<>(); List qcMaterialSyncDTOS = new ArrayList<>(); List codes = new ArrayList<>(); + List orderIds = new ArrayList<>(); for (WmsSrmOrder order : orders) { + orderIds.add(order.getId()); WmsPoReceipt wmsPoReceipt = new WmsPoReceipt() .setCreateTime(LocalDateTime.now()) .setId(IdUtil.getSnowflakeNextId()) @@ -808,41 +844,48 @@ public class NormalPGIController extends BaseController { item.getItemCode(), item.getPoLineNumber()); VUtil.trueThrowBusinessError(item.getUnRecieveQty().compareTo(materialInfoInOrder.getTransportNum()) > 0) .throwMessage("物料收货数量[" + item.getUnRecieveQty() + "]大于了未收数量[" + materialInfoInOrder.getTransportNum() + "],订单号:" + item.getPoNum()); - //序列号和批次号验证 - List itemCodes = validateNoScanCodes(item, materialInfoInOrder) + //序列号和批次号验证以及条码信息的组装 + List scanCodeQOS = new ArrayList<>(); + List itemCodes = validateNoScanCodes(item, materialInfoInOrder, scanCodeQOS); if (CollectionUtil.isNotEmpty(itemCodes)) { codes.addAll(itemCodes); } -//------------------------------- 条码高点个都是法师打发手动阀手动阀手打 - asfdasdfasdf - } - WmsSrmOrder order = wmsSrmOrderService.lambdaQuery().eq(WmsSrmOrder::getNoteNum, request.get(0).getNoteNum()).one(); - VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("收货单不存在"); - // List sapSyncParamsDTOS = getSapSyncParamsDTOS(request, order); - - - List srmMaterialReceiptScanCodes = new ArrayList<>(); - - - for (SrmMaterialReceiptQO item : request) { - //序列号和批次号验证 - List codes = normalPGIControllerService.validateScanCodes(item, materialInfoInOrder); - if (CollectionUtil.isNotEmpty(codes)) { - srmMaterialReceiptScanCodes.addAll(codes); + WmsSrmOrder order = orders.stream().filter(it -> it.getNoteNum().equals(item.getNoteNum())) + .findFirst().orElse(null); + if (Objects.isNull(order)) { + continue; } + WmsQcReceive wmsQcReceive = wmsQcReceives.stream().filter(it -> it.getOrderNo().equals(item.getNoteNum())) + .findFirst().orElse(null); + //判断是否为质检物料 boolean isQuality = materialInfoInOrder.getKzkri().equals("X"); + SrmMaterialReceiptQO materialSyncDTO = new SrmMaterialReceiptQO() + .setId(item.getId()) + .setNoteNum(item.getNoteNum()) + .setLineNumber(item.getLineNumber()) + .setPoNum(item.getPoNum()) + .setPoLineNumber(item.getPoLineNumber()) + .setItemCode(item.getItemCode()) + .setReceiptNum(item.getUnRecieveQty()); // 如果是质检单 if (isQuality) { - setQcMaterialSyncDto(qcMaterialSyncDTOS, item, order, codes, materialInfoInOrder, wmsQcReceiveItems, wmsQcReceive.getId()); + setQcMaterialSyncDto(qcMaterialSyncDTOS, materialSyncDTO, order, scanCodeQOS, materialInfoInOrder, wmsQcReceiveItems, wmsQcReceive.getId()); } else { - setPoReceive(item, wmsPoReceiptItems, wmsPoReceipt.getId(), materialInfoInOrder); + WmsPoReceipt wmsPoReceipt = wmsPoReceipts.stream().filter(it -> it.getOrderNo().equals(item.getNoteNum())) + .findFirst().orElse(null); + if (Objects.isNull(wmsPoReceipt)) { + continue; + } + + setPoReceive(materialSyncDTO, wmsPoReceiptItems, wmsPoReceipt.getId(), materialInfoInOrder); } } + // 盘点条码是否重复 - Map duplicateCodes = srmMaterialReceiptScanCodes.stream() + Map duplicateCodes = codes.stream() .collect(Collectors.groupingBy( - SrmMaterialReceiptScanCodes::getCodeId, + SrmMaterialReceiptNoScanCodes::getCodeId, Collectors.counting() )) .entrySet() @@ -855,7 +898,147 @@ public class NormalPGIController extends BaseController { VUtil.trueThrowBusinessError(CollectionUtil.isNotEmpty(duplicateCodes)).throwMessage("存在重复条码"); - normalPGIControllerService.takeDelivery(wmsPoReceipt, wmsQcReceive, wmsPoReceiptItems, wmsQcReceiveItems, srmMaterialReceiptScanCodes, qcMaterialSyncDTOS, order.getId()); + normalPGIControllerService.takeNoScanDelivery(wmsPoReceipts, wmsQcReceives, wmsPoReceiptItems, wmsQcReceiveItems, codes, qcMaterialSyncDTOS, orderIds); return ApiResult.success(); } + + /** + * 采购物料入库确认(无码) + * + * @param request + * @return + */ + @PostMapping("unscan/task/confirm") + @ApiMark(moduleName = "送货单管理", apiName = "普通物料任务上架确认") + public ApiResult takeDeliveryConfirm(@Valid @RequestBody ReceiveQO request) { + WmsPoReceipt wmsPoReceipt=wmsPoReceiptService.getById(request.getId()); + VUtil.trueThrowBusinessError(Objects.isNull(wmsPoReceipt)).throwMessage("无此任务"); + VUtil.trueThrowBusinessError(!wmsPoReceipt.getSourceType().equals(1)).throwMessage("不属于无码收货的采购单"); + + //首先判断是否已经确认 + VUtil.trueThrowBusinessError(Objects.isNull(wmsPoReceipt)).throwMessage("收货单不存在"); + VUtil.trueThrowBusinessError(Objects.equals(wmsPoReceipt.getIsCompleted(), true)).throwMessage("此任务已入库"); + + + List wmsPoReceiptItems = wmsPoReceiptItemService.lambdaQuery() + .eq(WmsPoReceiptItem::getReceiveId, wmsPoReceipt.getId()) + .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<>(); + for (WmsPoReceiptItem item : wmsPoReceiptItems) { + item.setCrossQty(new BigDecimal(0)); + item.setReceivedWarehouse(item.getReceivedWarehouse()); + item.setInQty(item.getReceiptNum()); + item.setUpdateTime(LocalDateTime.now()); + item.setUpdateUserId(UserUtil.getUserId()); + item.setUpdateUserName(UserUtil.getUserName()); + receiptItems.add(item); + + // SAP 和条码处理 + //传入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()) + .setItem1(new ArrayList<>()) + .setItem2(new ArrayList<>()); + zwm3A17DTOS.add(zwm3A17DTO); + } + + List item1 = zwm3A17DTO.getItem1(); + List item2 = zwm3A17DTO.getItem2(); + List scanCode = srmMaterialReceiptNoScanCodesRepository.findByOrderItemId(item.getOrderItemId()); + if (CollectionUtil.isNotEmpty(scanCode)) { + scanCode = scanCode.stream().filter(code -> code.getIsIntoStorage() == false) + .toList(); + } + + if (CollectionUtil.isNotEmpty(scanCode)) { + scanCode.forEach(code -> { + // 库存 + InventoryDTO inventoryDTO = inventories.stream() + .filter(inventoriesDTO -> inventoriesDTO.getMaterialNo().equals(item.getItemCode()) + && inventoriesDTO.getBatchNumber().equals(code.getBatchNumber()) + && 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()) + .setBatchNumber(code.getBatchNumber()) + .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())); + + scanCodes.add(code); + }); + } else { + // 库存 + InventoryDTO inventoryDTO = new InventoryDTO() + .setMaterialNo(item.getItemCode()) + .setFactoryNo(wmsPoReceipt.getFactoryCode()) + .setWarehouseNo(item.getReceivedWarehouse()) + .setBatchNumber("") + .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("") + ); + } + } + normalPGIControllerService.takeDeliveryConfirmUnScan(receiptItems, storageLocationDTOS, inventories, zwm3A17DTOS, request.getId(), scanCodes); + + // normalPGIControllerService.takeDeliveryConfirm(receiptItems, storageLocationDTOS, inventories, zwm3A17DTOS, request.getTaskId(), scanCodes); + return ApiResult.success(); + } + } diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalQMController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalQMController.java index ba7bd16e..2ee1d650 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalQMController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/NormalQMController.java @@ -12,14 +12,8 @@ import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.dto.InventoryDTO; import com.nflg.wms.common.pojo.dto.StorageLocationDTO; -import com.nflg.wms.common.pojo.qo.DeliverNormalOrderSearchQO; -import com.nflg.wms.common.pojo.qo.NomalQMOrderSearchQO; -import com.nflg.wms.common.pojo.qo.PoReceiveTaskItemConfirmQO; -import com.nflg.wms.common.pojo.qo.QCReceiveTaskConfirmQO; -import com.nflg.wms.common.pojo.vo.DeliverNormalOrderVO; -import com.nflg.wms.common.pojo.vo.QCTaskItemVO; -import com.nflg.wms.common.pojo.vo.QCTaskVO; -import com.nflg.wms.common.pojo.vo.QualityInspectionVO; +import com.nflg.wms.common.pojo.qo.*; +import com.nflg.wms.common.pojo.vo.*; import com.nflg.wms.common.util.UserUtil; import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.*; @@ -66,6 +60,7 @@ public class NormalQMController extends BaseController { /** * 获取SRM推送过来的质检单信息 + * * @param request * @return */ @@ -77,6 +72,7 @@ public class NormalQMController extends BaseController { /** * 质检物料上架任务(PDA) + * * @param orderNo 送货单号或任务单号 * @return */ @@ -89,8 +85,9 @@ public class NormalQMController extends BaseController { /** * 质检物料上架物料详情 + * * @param taskId 任务ID - * **/ + **/ @GetMapping("PDA/task/item") @ApiMark(moduleName = "质检物料管理", apiName = "质检任务上架物料详情") public ApiResult> getTaskItem(@Valid @NotNull @RequestParam Long taskId) { @@ -100,8 +97,9 @@ public class NormalQMController extends BaseController { /** * 质检物料上架任务确认 + * * @param request - * **/ + **/ @PostMapping("PDA/task/confirm") @ApiMark(moduleName = "质检物料管理", apiName = "质检任务上架确认") public ApiResult confirm(@Valid @RequestBody List request) { @@ -255,6 +253,46 @@ public class NormalQMController extends BaseController { } + /** + * 无码质检任务上架确认 + * + * @param request 任务ID + * @return + */ + @PostMapping("unscan/task/confirm") + @ApiMark(moduleName = "质检物料管理", apiName = "无码质检任务上架确认") + public ApiResult confirmNoScan(@Valid @RequestBody ReceiveQO request) { + WmsQcReceive qcReceive = wmsQcReceiveService.getById( request.getId()); + + VUtil.trueThrowBusinessError(Objects.isNull(qcReceive)).throwMessage("无此任务"); + VUtil.trueThrowBusinessError(!qcReceive.getSourceType().equals(1)).throwMessage("不属于无码收货的采购单"); + //根据ID获取到任务单 + List taskConfirmQOS = new ArrayList<>(); + List tasks = normalQMControllerService.getTaskItem(qcReceive.getId()); + if (CollectionUtil.isNotEmpty(tasks)) { + for (QCTaskItemVO item : tasks) { + QCReceiveTaskConfirmQO taskConfirmQO = new QCReceiveTaskConfirmQO(); + taskConfirmQO.setId(qcReceive.getId()) + .setFactoryCode(qcReceive.getFactoryCode()) + .setPoNum(qcReceive.getOrderNo()) + .setStorageLocation(item.getStorageLocation()) + .setReceivedWarehouse(item.getReceivedWarehouse()) + .setStorageLocationNew(item.getStorageLocation()) + .setCrossQty(new BigDecimal(0)); + List qcIdList = item.getScanCodes().stream() + .map(QCTaskItemScanCodesVO::getId) + .collect(Collectors.toList()); + taskConfirmQO.setQcIdList(qcIdList); + taskConfirmQOS.add(taskConfirmQO); + } + } + + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(taskConfirmQOS)).throwMessage("无效的上架任务"); + + return confirm(taskConfirmQOS); + } + + private void set3A18DTOS(ZWM3A18DTO zwm3A18DTO, WmsSrmQualityInspection code, QCReceiveTaskConfirmQO item) { 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 91666d5a..2f55d4ac 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 @@ -4,9 +4,11 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Pair; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; +import com.nflg.wms.admin.pojo.document.SrmMaterialReceiptNoScanCodes; import com.nflg.wms.admin.pojo.document.SrmMaterialReceiptScanCodes; import com.nflg.wms.admin.pojo.dto.QCMaterialSyncDTO; import com.nflg.wms.admin.pojo.dto.ZWM3A17DTO; +import com.nflg.wms.admin.repository.SrmMaterialReceiptNoScanCodesRepository; import com.nflg.wms.admin.repository.SrmMaterialReceiptScanCodesRepository; import com.nflg.wms.common.pojo.dto.*; import com.nflg.wms.common.pojo.qo.PDAScanCodeQO; @@ -18,6 +20,7 @@ import com.nflg.wms.common.util.VUtil; import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.service.*; import jakarta.annotation.Resource; +import jakarta.validation.constraints.NotNull; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.ParameterizedTypeReference; import org.springframework.data.redis.core.StringRedisTemplate; @@ -80,7 +83,7 @@ public class NormalPGIControllerService { private StringRedisTemplate stringRedisTemplate; @Resource - private IWmsSrmMaterialQmsReceiptItemService wmsSrmMaterialQmsReceiptItemService; + private SrmMaterialReceiptNoScanCodesRepository srmMaterialReceiptNoCodesRepository; @Resource private SrmMaterialReceiptScanCodesRepository srmMaterialReceiptCanCodesRepository; @Resource @@ -142,7 +145,8 @@ public class NormalPGIControllerService { itemVO.setLineNumber(item.getLineNumber()); itemVO.setDeliveryQty(item.getDeliveryQty().subtract(item.getReceiptQty())); // 从 SAP 系统获取物料相关信息 - SAPSyncParamsDTO syncParamsDTO = sapCommonService.getMaterialInfoInOrder(item.getPoNum(), order.getSupplierNum(), item.getItemCode()); + SAPSyncParamsDTO syncParamsDTO = sapCommonService.getMaterialInfoInOrder(item.getPoNum(), + order.getSupplierNum(), item.getItemCode(), item.getPoLineNumber()); if (Objects.nonNull(syncParamsDTO)) { itemVO.setItemName(syncParamsDTO.getMaktx()); itemVO.setUomCode(syncParamsDTO.getMeins()); @@ -246,10 +250,6 @@ public class NormalPGIControllerService { .set(WmsSrmOrder::getIsCompleted, true) .eq(WmsSrmOrder::getId, orderId).update(); } -// 保存扫描码 - if (CollectionUtil.isNotEmpty(srmMaterialReceiptScanCodes)) { - srmMaterialReceiptCanCodesRepository.insert(srmMaterialReceiptScanCodes); - } if (CollectionUtil.isNotEmpty(qcMaterialSyncDTOS)) { for (QCMaterialSyncDTO dto : qcMaterialSyncDTOS) { //导入SAP @@ -270,6 +270,11 @@ public class NormalPGIControllerService { } } } + +// 保存扫描码 + if (CollectionUtil.isNotEmpty(srmMaterialReceiptScanCodes)) { + srmMaterialReceiptCanCodesRepository.insert(srmMaterialReceiptScanCodes); + } } @Transactional @@ -323,12 +328,133 @@ public class NormalPGIControllerService { //修改二维码的入库状态 if (CollectionUtil.isNotEmpty(scanCodes)) { List codeIds = scanCodes.stream().map(SrmMaterialReceiptScanCodes::getId).toList(); - srmMaterialReceiptCanCodesRepository.updateIsIntoStorage(codeIds, true); + srmMaterialReceiptCanCodesRepository.updateIsIntoStorage(codeIds, true); } } + public void takeNoScanDelivery(List wmsPoReceipts, List wmsQcReceives + , List wmsPoReceiptItems + , List wmsQcReceiveItems, List codes + , List qcMaterialSyncDTOS + , List orderIds + ) { +//生成普通物料的入库待检单,并修改送货单相应的收货数量 + if (CollectionUtil.isNotEmpty(wmsPoReceipts)) { + for (WmsPoReceipt wmsPoReceipt : wmsPoReceipts) { + wmsPoReceipt.setInNum(basdeSerialNumberControllerService.generateSerialNumber(2)); + + List items = wmsPoReceiptItems.stream().filter(q -> q.getNoteNum().equals(wmsPoReceipt.getOrderNo())) + .toList(); + if (CollectionUtil.isNotEmpty(items)) { + wmsPoReceiptService.save(wmsPoReceipt); + + wmsPoReceiptItemService.saveBatch(items); + } + } + } +//生成质检物料的入库待检单,并修改送货单相应的收货数量 + if (CollectionUtil.isNotEmpty(wmsQcReceives)) { + for (WmsQcReceive wmsQcReceive : wmsQcReceives) { + wmsQcReceive.setInNo(basdeSerialNumberControllerService.generateSerialNumber(1)); + List items = wmsQcReceiveItems.stream().filter(q -> q.getNoteNum().equals(wmsQcReceive.getOrderNo())) + .toList(); + if (CollectionUtil.isNotEmpty(items)) { + wmsQcReceiveService.save(wmsQcReceive); + wmsQcReceiveItemService.saveBatch(items); + } + + } + } + + for (Long orderId : orderIds) { + //更新收货单的完结状态 + List orders = wmsSrmOrderService.getUnCompletedItem(orderId); + if (CollectionUtil.isEmpty(orders)) { + wmsSrmOrderService.lambdaUpdate() + .set(WmsSrmOrder::getIsCompleted, true) + .eq(WmsSrmOrder::getId, orderId).update(); + } + } + + if (CollectionUtil.isNotEmpty(qcMaterialSyncDTOS)) { + for (QCMaterialSyncDTO dto : qcMaterialSyncDTOS) { + //导入SAP + Pair, Pair> zwm3A17ReturnDTO = sapService.zwm3a17(dto.getZwm3A17DTO()); + //推入srm + SRMInspectionContentDTO content = dto.getPushDto().getContent(); + content.setReceiveNum(zwm3A17ReturnDTO.getValue().getKey()); + pushInspectionMaterialsToSRM(dto.getPushDto()); + //修改收货单的物料凭证和年度物料凭证 + List ids = dto.getReceiptIds(); + //修改收货单的物料凭证和年度物料凭证 + if (CollectionUtil.isNotEmpty(ids)) { + wmsQcReceiveItemService.lambdaUpdate() + .set(WmsQcReceiveItem::getMaterialDoc, zwm3A17ReturnDTO.getValue().getKey()) + .set(WmsQcReceiveItem::getMaterialDocYear, zwm3A17ReturnDTO.getValue().getValue()) + .in(WmsQcReceiveItem::getId, ids) + .update(); + } + } + } + // 保存扫描码 + if (CollectionUtil.isNotEmpty(codes)) { + srmMaterialReceiptNoCodesRepository.insert(codes); + } + } + + + public void takeDeliveryConfirmUnScan(List receiptItems, List storageLocationDTOS, + List inventories, List zwm3A17DTOS, Long id, + List scanCodes) { + + if (CollectionUtil.isNotEmpty(receiptItems)) { + wmsPoReceiptItemService.updateBatchById(receiptItems); + } + //修改任务的状态 + List ids = wmsPoReceiptService.checkItemStatus(id); + if (CollectionUtil.isEmpty(ids)) { + wmsPoReceiptService.lambdaUpdate() + .eq(WmsPoReceipt::getId, id) + .set(WmsPoReceipt::getIsCompleted, true) + .set(WmsPoReceipt::getUpdateTime, LocalDateTime.now()) + .set(WmsPoReceipt::getUpdateUserId, UserUtil.getUserId()) + .set(WmsPoReceipt::getUpdateUserName, UserUtil.getUserName()) + .update(); + } + if (CollectionUtil.isNotEmpty(inventories)) { + + inventoryService.in(inventories); + } + + if (CollectionUtil.isNotEmpty(storageLocationDTOS)) { + storageLocationDTOS.forEach(storageLocationDTO -> { + sapService.zwm3A02(storageLocationDTO.getFactory(), + storageLocationDTO.getMaterialNo(), + storageLocationDTO.getWarehouseNo(), storageLocationDTO.getBinNos()); + }); + } + + //推送到SAP + if (CollectionUtil.isNotEmpty(zwm3A17DTOS)) { + for (ZWM3A17DTO zwm3A17DTO : zwm3A17DTOS) { + Pair, Pair> returnDto = sapService.zwm3a17(zwm3A17DTO); + wmsPoReceiptItemService.lambdaUpdate() + .eq(WmsPoReceiptItem::getPoNum, zwm3A17DTO.getEbeln()) + .eq(WmsPoReceiptItem::getReceiveId, id) + .set(WmsPoReceiptItem::getMaterialDoc, returnDto.getKey().getKey()) + .set(WmsPoReceiptItem::getMaterialDocYear, returnDto.getValue().getValue()) + .update(); + } + } + //修改二维码的入库状态 + if (CollectionUtil.isNotEmpty(scanCodes)) { + List codeIds = scanCodes.stream().map(SrmMaterialReceiptNoScanCodes::getId).toList(); + srmMaterialReceiptNoCodesRepository.updateIsIntoStorage(codeIds, true); + } + } + /** * 将检验物料信息推送到SRM系统 * diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SAPCommonService.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SAPCommonService.java index 07f2906d..5b504a46 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SAPCommonService.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SAPCommonService.java @@ -20,6 +20,47 @@ public class SAPCommonService { @Resource private SapService sapService; + public List getMaterialInfoInOrder(String orderNo, String supplierNo, String materialNo) { + //获取订单信息 + List sapMaterialInfoInOrder = sapService.zim004(orderNo, supplierNo, materialNo); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(sapMaterialInfoInOrder)).throwMessage("无法获取到有效订单信息" + orderNo); + //SAPMaterialInfoInOrderDTO materialInfoInOrder = sapMaterialInfoInOrder.stream().filter(item -> item.getEbelp().equals(orderItemNo)).findFirst().orElse(null); + // SAPMaterialInfoInOrderDTO materialInfoInOrder = CollectionUtil.get(sapService.zim004(orderNo, supplierNo, materialNo), 0); + //VUtil.trueThrowBusinessError(Objects.isNull(materialInfoInOrder)).throwMessage("无法获取到有效订单信息" + orderNo); + List result=new ArrayList<>(); + for (SAPMaterialInfoInOrderDTO materialInfoInOrder : sapMaterialInfoInOrder) { + SAPSyncParamsDTO syncParams = new SAPSyncParamsDTO(); + syncParams.setMaktx(materialInfoInOrder.getMaktx()); + syncParams.setEbelp(materialInfoInOrder.getEbelp()); + syncParams.setMatnr(materialInfoInOrder.getMatnr()); + syncParams.setMenge(materialInfoInOrder.getMenge()); + syncParams.setWemng(materialInfoInOrder.getWemng()); + syncParams.setMeins(materialInfoInOrder.getMeins()); + syncParams.setEbeln(materialInfoInOrder.getEbeln()); + syncParams.setTransportNum(materialInfoInOrder.getTransportNum()); + syncParams.setMatkl(materialInfoInOrder.getMatkl()); + syncParams.setWgbez(materialInfoInOrder.getWgbez()); + syncParams.setWerks(materialInfoInOrder.getWerks()); + syncParams.setLbprt(materialInfoInOrder.getLbprt()); + syncParams.setKzkri(materialInfoInOrder.getKzkri()); + + //获取仓库信息 + List warehouseNos = new ArrayList<>(); + warehouseNos.add(materialInfoInOrder.getWarehouseNo()); + List materialNos = new ArrayList<>(); + materialNos.add(materialInfoInOrder.getMatnr()); + List list = sapService.zwm3A01(materialInfoInOrder.getWerks(), warehouseNos, materialNos, null, null); + if (!CollectionUtil.isEmpty(list)) { + //同步仓库信息 + SAPSyncFromDTO dbWarehouse = list.get(0); + syncParams.setWarehouseNo(dbWarehouse.getWarehouseNo()); + syncParams.setBinNos(dbWarehouse.getBinNos()); + } + result.add(syncParams); + } + return result; + } + /** * 获取物料信息 * diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PDAScanCodeQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PDAScanCodeQO.java index c20918d8..0cfdd5ad 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PDAScanCodeQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/PDAScanCodeQO.java @@ -2,11 +2,13 @@ package com.nflg.wms.common.pojo.qo; import jakarta.validation.constraints.NotNull; import lombok.Data; +import lombok.experimental.Accessors; import java.math.BigDecimal; import java.util.List; @Data +@Accessors(chain = true) public class PDAScanCodeQO { diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ReceiveQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ReceiveQO.java new file mode 100644 index 00000000..7a47fb9f --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ReceiveQO.java @@ -0,0 +1,10 @@ +package com.nflg.wms.common.pojo.qo; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +@Data +public class ReceiveQO { + @NotNull + private Long id; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/SrmMaterialReceiptQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/SrmMaterialReceiptQO.java index 89fc7e3a..5ec69950 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/SrmMaterialReceiptQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/SrmMaterialReceiptQO.java @@ -3,6 +3,7 @@ package com.nflg.wms.common.pojo.qo; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.Data; +import lombok.experimental.Accessors; import java.math.BigDecimal; import java.util.List; @@ -11,6 +12,7 @@ import java.util.List; * 送货单收货参数 */ @Data +@Accessors(chain = true) public class SrmMaterialReceiptQO { /** diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/POReceiptVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/POReceiptVO.java index 16245958..025f3c88 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/POReceiptVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/POReceiptVO.java @@ -83,4 +83,11 @@ public class POReceiptVO { * 入库时间 */ private LocalDate inTime; + + /** + * 入库单来源类型 + * 0 来源于扫码收货 + * 1 无码收货 + */ + private Integer sourceType; } diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QCReceiptVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QCReceiptVO.java index 65e2019e..165f27bc 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QCReceiptVO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QCReceiptVO.java @@ -75,4 +75,11 @@ public class QCReceiptVO { * 是否已开检 */ private Boolean isCheck; + + /** + * 入库单来源类型 + * 0 来源于扫码收货 + * 1 无码收货 + */ + private Integer sourceType; } diff --git a/nflg-wms-repository/src/main/resources/mapper/WmsPoReceiptItemMapper.xml b/nflg-wms-repository/src/main/resources/mapper/WmsPoReceiptItemMapper.xml index a840e4a4..955344d9 100644 --- a/nflg-wms-repository/src/main/resources/mapper/WmsPoReceiptItemMapper.xml +++ b/nflg-wms-repository/src/main/resources/mapper/WmsPoReceiptItemMapper.xml @@ -5,7 +5,7 @@