From 23f0dd176b86e891112e42a78e9a55ccec5735e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 4 Jun 2026 10:34:12 +0800 Subject: [PATCH] =?UTF-8?q?fix(order):=20=E4=BF=AE=E5=A4=8D=E7=94=9F?= =?UTF-8?q?=E4=BA=A7=E8=AE=A2=E5=8D=95=E7=8A=B6=E6=80=81=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E5=92=8C=E6=97=A0=E7=A0=81=E6=94=B6=E8=B4=A7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加订单状态为1时返回空列表的逻辑 - 移除对订单项数量小于等于0的过滤条件 - 修改无码收货接口参数结构,从列表改为单个对象 - 简化无码收货流程中的订单验证和票据创建逻辑 - 优化循环结构,移除重复的订单查询操作 - 统一物料号匹配和二维码存在性检查的处理方式 --- .../controller/InProduceOrderController.java | 6 +- .../InProduceOrderSurplusController.java | 166 ++++++++---------- 2 files changed, 82 insertions(+), 90 deletions(-) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderController.java index ba5c001d..b580484f 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderController.java @@ -431,11 +431,13 @@ public class InProduceOrderController extends BaseController { .eq(StrUtil.isNotBlank(no), WmsInProduceOrder::getNo, no) .one(); VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + if (order.getState()==1){ + return ApiResult.success(Collections.emptyList()); + } List items = produceOrderItemService.lambdaQuery() .eq(WmsInProduceOrderItem::getOrderId, order.getId()) .list(); - items.removeIf(item -> item.getNum().compareTo(BigDecimal.ZERO) <= 0 - || noScanningBaseControllerService.existsQrCode(item.getMaterialNo())); + items.removeIf(item -> noScanningBaseControllerService.existsQrCode(item.getMaterialNo())); return ApiResult.success( items.stream() .map(item -> new NoScanItemVO() diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java index c386a147..7148ed1c 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InProduceOrderSurplusController.java @@ -433,108 +433,98 @@ public class InProduceOrderSurplusController extends BaseController { /** * 无码收货和入库 - * @param requests 请求参数 + * @param request 请求参数 */ @Transactional @PostMapping("receiveNoScanning") - public ApiResult receiveNoScanning(@Valid @RequestBody @NotEmpty List requests) { + public ApiResult receiveNoScanning(@Valid @RequestBody NoScanningRequest request) { List inventories = new ArrayList<>(); Map input1Map = new LinkedHashMap<>(); Map input2Map = new LinkedHashMap<>(); - Set orderIds = new HashSet<>(); Set warehouseNos = new HashSet<>(); - WmsInProduceOrderSurplusTicket ticket = null; List orderItemsToUpdate = new ArrayList<>(); List ticketItems = new ArrayList<>(); - WmsInProduceOrderSurplus order = null; - for (NoScanningRequest request : requests) { - order = inProduceOrderSurplusService.lambdaQuery() - .eq(Objects.nonNull(request.getId()), WmsInProduceOrderSurplus::getId, request.getId()) - .eq(StrUtil.isNotBlank(request.getNo()), WmsInProduceOrderSurplus::getNo, request.getNo()) - .one(); - VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); - WmsInProduceOrderSurplus currentOrder = order; - List orderItems = inProduceOrderSurplusItemService.lambdaQuery() - .eq(WmsInProduceOrderSurplusItem::getOrderId, currentOrder.getId()) - .list(); - VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orderItems)).throwMessage("订单项不存在"); - Map orderItemMap = orderItems.stream() - .collect(Collectors.toMap(WmsInProduceOrderSurplusItem::getId, item -> item)); - orderIds.add(currentOrder.getId()); - VUtil.trueThrowBusinessError(orderIds.size() != 1).throwMessage("请一次只提交同一个订单的无码收货"); - warehouseNos.addAll(request.getItems().stream().map(NoScanningItemRequest::getWarehouseNo).collect(Collectors.toSet())); - VUtil.trueThrowBusinessError(warehouseNos.size() != 1).throwMessage("请一次只提交同一个库存地点的无码收货"); - if (ticket == null) { - ticket = new WmsInProduceOrderSurplusTicket() - .setId(IdUtil.getSnowflakeNextId()) - .setNo(serialNumberControllerService.generateSerialNumber(25)) - .setOrderId(currentOrder.getId()) - .setLgort(warehouseNos.iterator().next()) - .setType(1) - .setCreateBy(UserUtil.getUserName()) - .setCreateTime(LocalDateTime.now()); - } + WmsInProduceOrderSurplus order = inProduceOrderSurplusService.lambdaQuery() + .eq(Objects.nonNull(request.getId()), WmsInProduceOrderSurplus::getId, request.getId()) + .eq(StrUtil.isNotBlank(request.getNo()), WmsInProduceOrderSurplus::getNo, request.getNo()) + .one(); + VUtil.trueThrowBusinessError(Objects.isNull(order)).throwMessage("订单不存在"); + List orderItems = inProduceOrderSurplusItemService.lambdaQuery() + .eq(WmsInProduceOrderSurplusItem::getOrderId, order.getId()) + .list(); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(orderItems)).throwMessage("订单项不存在"); + Map orderItemMap = orderItems.stream() + .collect(Collectors.toMap(WmsInProduceOrderSurplusItem::getId, item -> item)); + warehouseNos.addAll(request.getItems().stream().map(NoScanningItemRequest::getWarehouseNo).collect(Collectors.toSet())); + VUtil.trueThrowBusinessError(warehouseNos.size() != 1).throwMessage("请一次只提交同一个库存地点的无码收货"); + WmsInProduceOrderSurplusTicket ticket = new WmsInProduceOrderSurplusTicket() + .setId(IdUtil.getSnowflakeNextId()) + .setNo(serialNumberControllerService.generateSerialNumber(25)) + .setOrderId(order.getId()) + .setLgort(warehouseNos.iterator().next()) + .setType(1) + .setCreateBy(UserUtil.getUserName()) + .setCreateTime(LocalDateTime.now()); - for (NoScanningItemRequest item : request.getItems()) { - WmsInProduceOrderSurplusItem orderItem = orderItemMap.get(item.getOrderItemId()); - VUtil.trueThrowBusinessError(Objects.isNull(orderItem)).throwMessage("订单项不存在"); - VUtil.trueThrowBusinessError(!StrUtil.equals(item.getMaterialNo(), orderItem.getMatnr())) - .throwMessage("订单项与物料不匹配:" + item.getMaterialNo()); - VUtil.trueThrowBusinessError(noScanningBaseControllerService.existsQrCode(orderItem.getMatnr())) - .throwMessage("物料" + orderItem.getMatnr() + "已生成二维码,不允许无码收货"); + for (NoScanningItemRequest item : request.getItems()) { + WmsInProduceOrderSurplusItem orderItem = orderItemMap.get(item.getOrderItemId()); + VUtil.trueThrowBusinessError(Objects.isNull(orderItem)).throwMessage("订单项不存在"); + VUtil.trueThrowBusinessError(!StrUtil.equals(item.getMaterialNo(), orderItem.getMatnr())) + .throwMessage("订单项与物料不匹配:" + item.getMaterialNo()); + VUtil.trueThrowBusinessError(noScanningBaseControllerService.existsQrCode(orderItem.getMatnr())) + .throwMessage("物料" + orderItem.getMatnr() + "已生成二维码,不允许无码收货"); - BigDecimal totalNum = item.getDatas().stream() - .peek(data -> VUtil.trueThrowBusinessError(Objects.isNull(data.getNum()) || data.getNum().compareTo(BigDecimal.ZERO) <= 0) - .throwMessage("物料" + orderItem.getMatnr() + "的无码收货数量必须大于0")) - .map(NoScanningItemDataRequest::getNum) - .reduce(BigDecimal.ZERO, BigDecimal::add); - VUtil.trueThrowBusinessError(totalNum.compareTo(orderItem.getLeftNum()) > 0) - .throwMessage("物料" + orderItem.getMatnr() + "的无码收货数量超出可入库数量"); - orderItem.setLeftNum(orderItem.getLeftNum().subtract(totalNum)); - orderItemsToUpdate.add(orderItem); + BigDecimal totalNum = item.getDatas().stream() + .peek(data -> VUtil.trueThrowBusinessError(Objects.isNull(data.getNum()) || data.getNum().compareTo(BigDecimal.ZERO) <= 0) + .throwMessage("物料" + orderItem.getMatnr() + "的无码收货数量必须大于0")) + .map(NoScanningItemDataRequest::getNum) + .reduce(BigDecimal.ZERO, BigDecimal::add); + VUtil.trueThrowBusinessError(totalNum.compareTo(orderItem.getLeftNum()) > 0) + .throwMessage("物料" + orderItem.getMatnr() + "的无码收货数量超出可入库数量"); + orderItem.setLeftNum(orderItem.getLeftNum().subtract(totalNum)); + orderItemsToUpdate.add(orderItem); - item.getDatas().forEach(data -> { - inventories.add(new InventoryInDTO() - .setMaterialNo(orderItem.getMatnr()) - .setFactoryNo(currentOrder.getDwerk()) - .setWarehouseNo(item.getWarehouseNo()) - .setBatchNo(StrUtil.blankToDefault(data.getBatchNo(), "")) - .setSerialNo(StrUtil.blankToDefault(data.getSerialNo(), "")) - .setBinLocation(StrUtil.blankToDefault(data.getBinNo(), "")) - .setNum(data.getNum()) - ); - String input1Key = orderItem.getRspos() + "|" + orderItem.getMatnr() + "|" + StrUtil.blankToDefault(data.getBatchNo(), "") + "|" + item.getWarehouseNo(); - input1Map.merge(input1Key, new ZWM3A22Input1QO() - .setRspos(orderItem.getRspos()) - .setMatnr(orderItem.getMatnr()) - .setMaktx(orderItem.getMaktx2()) - .setWerks(currentOrder.getDwerk()) - .setLgort(item.getWarehouseNo()) - .setMenge(data.getNum()) - .setMenge_t(BigDecimal.ZERO) - .setMeins(orderItem.getMeins()) - .setCharg(StrUtil.blankToDefault(data.getBatchNo(), "")), (e, i) -> { - e.setMenge(e.getMenge().add(i.getMenge())); - return e; - }); - if (StrUtil.isNotBlank(data.getSerialNo())) { - String input2Key = orderItem.getRspos() + "|" + data.getSerialNo(); - input2Map.putIfAbsent(input2Key, new ZWM3A22Input2QO() - .setRspos(orderItem.getRspos()) - .setSernr(data.getSerialNo())); - } + item.getDatas().forEach(data -> { + inventories.add(new InventoryInDTO() + .setMaterialNo(orderItem.getMatnr()) + .setFactoryNo(order.getDwerk()) + .setWarehouseNo(item.getWarehouseNo()) + .setBatchNo(StrUtil.blankToDefault(data.getBatchNo(), "")) + .setSerialNo(StrUtil.blankToDefault(data.getSerialNo(), "")) + .setBinLocation(StrUtil.blankToDefault(data.getBinNo(), "")) + .setNum(data.getNum()) + ); + String input1Key = orderItem.getRspos() + "|" + orderItem.getMatnr() + "|" + StrUtil.blankToDefault(data.getBatchNo(), "") + "|" + item.getWarehouseNo(); + input1Map.merge(input1Key, new ZWM3A22Input1QO() + .setRspos(orderItem.getRspos()) + .setMatnr(orderItem.getMatnr()) + .setMaktx(orderItem.getMaktx2()) + .setWerks(order.getDwerk()) + .setLgort(item.getWarehouseNo()) + .setMenge(data.getNum()) + .setMenge_t(BigDecimal.ZERO) + .setMeins(orderItem.getMeins()) + .setCharg(StrUtil.blankToDefault(data.getBatchNo(), "")), (e, i) -> { + e.setMenge(e.getMenge().add(i.getMenge())); + return e; }); - ticketItems.add(new WmsInProduceOrderSurplusTicketItem() - .setId(IdUtil.getSnowflakeNextId()) - .setTicketId(ticket.getId()) - .setOrderItemId(orderItem.getId()) - .setLgpbe(StrUtil.join(",", item.getDatas().stream() - .map(NoScanningItemDataRequest::getBinNo) - .filter(StrUtil::isNotBlank) - .toList())) - .setNum(totalNum)); - } + if (StrUtil.isNotBlank(data.getSerialNo())) { + String input2Key = orderItem.getRspos() + "|" + data.getSerialNo(); + input2Map.putIfAbsent(input2Key, new ZWM3A22Input2QO() + .setRspos(orderItem.getRspos()) + .setSernr(data.getSerialNo())); + } + }); + ticketItems.add(new WmsInProduceOrderSurplusTicketItem() + .setId(IdUtil.getSnowflakeNextId()) + .setTicketId(ticket.getId()) + .setOrderItemId(orderItem.getId()) + .setLgpbe(StrUtil.join(",", item.getDatas().stream() + .map(NoScanningItemDataRequest::getBinNo) + .filter(StrUtil::isNotBlank) + .toList())) + .setNum(totalNum)); } inventoryService.in(mergeInventories(inventories));