From bd0da952ced29b8099fe6be7353101e2b90b7ca6 Mon Sep 17 00:00:00 2001 From: 10001392 <1055202292@qq.com> Date: Mon, 11 May 2026 08:42:27 +0800 Subject: [PATCH] =?UTF-8?q?1463=20WMS=E7=B3=BB=E7=BB=9F=E9=92=A2=E6=9E=84?= =?UTF-8?q?=E5=8C=85=E9=87=87=E8=B4=AD=E4=B8=9A=E5=8A=A1=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StructuralPackageOrderController.java | 94 ++++++++++++++----- 1 file changed, 70 insertions(+), 24 deletions(-) diff --git a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java index 19fa867a..87596527 100644 --- a/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java +++ b/nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/StructuralPackageOrderController.java @@ -938,56 +938,102 @@ public class StructuralPackageOrderController extends BaseController { /** * 退回到未打包 * - * @param id 托盘id + * @param orderId 订单id */ + @Transactional @GetMapping("backToUnpackaged") - public ApiResult backToUnpackaged(@Valid @RequestParam @NotNull Long id) { - WmsStructuralPackageOrderTray tray = structuralPackageOrderTrayService.getById(id); - VUtil.trueThrowBusinessError(Objects.isNull(tray)).throwMessage("数据不存在"); - VUtil.trueThrowBusinessError(!Objects.equals(tray.getState(), OrderState.Packaged.getState())) - .throwMessage("托盘状态不正确"); + public ApiResult backToUnpackaged(@Valid @RequestParam @NotNull Long orderId) { + // 根据订单ID获取所有托盘 + List trays = structuralPackageOrderTrayService.getList(orderId); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(trays)).throwMessage("数据不存在"); + + // 检查所有托盘的状态是否都是已打包 + VUtil.trueThrowBusinessError(trays.stream().anyMatch(tray -> !Objects.equals(tray.getState(), OrderState.Packaged.getState()))) + .throwMessage("托盘状态不正确,只有已打包的托盘才能退回"); + + // 将所有托盘状态更新为未打包 VUtil.trueThrowBusinessError(!structuralPackageOrderTrayService.lambdaUpdate() .set(WmsStructuralPackageOrderTray::getState, OrderState.Unpackaged.getState()) .set(WmsStructuralPackageOrderTray::getPackBy, null) .set(WmsStructuralPackageOrderTray::getPackTime, null) - .eq(WmsStructuralPackageOrderTray::getId, id) + .eq(WmsStructuralPackageOrderTray::getOrderId, orderId) .eq(WmsStructuralPackageOrderTray::getState, OrderState.Packaged.getState()) .update()).throwMessage("退回到未打包失败,请重试"); - packageMaterialScanRecordRepository.removeByTrayNo(tray.getNo()); + + // 删除所有托盘的扫描记录 + trays.forEach(tray -> packageMaterialScanRecordRepository.removeByTrayNo(tray.getNo())); + return ApiResult.success(); } /** * 创建送货单 * - * @param ids 托盘id + * @param orderIds 订单id集合 */ @Transactional @PostMapping("createDeliverOrder") - public ApiResult createDeliverOrder(@Valid @RequestBody @NotEmpty List ids) { - List trays = structuralPackageOrderTrayService.getListByIds(ids); - VUtil.trueThrowBusinessError(trays.stream().map(DeliverStructuralPackageOrderExtendVO::getOrderId).collect(Collectors.toSet()).size() > 1) - .throwMessage("订单号必须一致"); - Long orderId = trays.get(0).getOrderId(); - Long supplierId = trays.get(0).getSupplierId(); - List tids = structuralPackageOrderTrayService.getIdsByOrderId(orderId); - VUtil.trueThrowBusinessError(tids.size() != ids.size()).throwMessage("数据未齐套"); + public ApiResult createDeliverOrder(@Valid @RequestBody @NotEmpty List orderIds) { + // 验证所有订单是否存在 + List orders = structuralPackageOrderService.listByIds(orderIds); + VUtil.trueThrowBusinessError(orders.size() != orderIds.size()).throwMessage("部分订单不存在"); + + // 获取所有订单的供应商ID,确保是同一个供应商 + Set supplierIds = orders.stream().map(WmsStructuralPackageOrder::getSupplierId).collect(Collectors.toSet()); + VUtil.trueThrowBusinessError(supplierIds.size() > 1).throwMessage("订单必须属于同一个供应商"); + Long supplierId = supplierIds.iterator().next(); + + // 检查所有订单下的托盘是否都已打包且未发货 + for (Long orderId : orderIds) { + List trays = structuralPackageOrderTrayService.getList(orderId); + VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(trays)).throwMessage("订单" + orderId + "没有托盘数据"); + + // 检查是否有未打包的托盘 + VUtil.trueThrowBusinessError(trays.stream().anyMatch(tray -> Objects.equals(tray.getState(), OrderState.Unpackaged.getState()))) + .throwMessage("订单" + orderId + "存在未打包的托盘"); + + // 检查是否有已发货的托盘 + VUtil.trueThrowBusinessError(trays.stream().anyMatch(tray -> Objects.equals(tray.getState(), OrderState.InTransit.getState()) || Objects.equals(tray.getState(), OrderState.Received.getState()))) + .throwMessage("订单" + orderId + "存在已发货或已收货的托盘"); + } + + // 生成送货单号 String deliverOrderNo = serialNumberControllerService.generateSerialNumber(7); + + // 检查是否有缺料情况 + boolean hasQuehuo = orders.stream().anyMatch(order -> { + List items = structuralPackageOrderTrayItemService.getList(order.getId()); + return items.stream().anyMatch(item -> item.getOfflineReceived() != null && !item.getOfflineReceived()); + }); + + // 创建送货单 WmsStructuralPackageDeliverOrder deliverOrder = new WmsStructuralPackageDeliverOrder() .setNo(deliverOrderNo) .setSupplierId(supplierId) - .setQuehuo(trays.stream().anyMatch(DeliverStructuralPackageOrderVO::getQuehuo)) + .setQuehuo(hasQuehuo) .setQuehuoReceived(false) .setCreateBy(UserUtil.getUserName()) .setCreateTime(LocalDateTime.now()); structuralPackageDeliverOrderService.save(deliverOrder); - structuralPackageDeliverOrderMapService.saveBatch(trays.stream() - .map(DeliverStructuralPackageOrderExtendVO::getId) - .distinct().map(id -> - new WmsStructuralPackageDeliverOrderMap() + + // 创建送货单与订单的关联关系 + structuralPackageDeliverOrderMapService.saveBatch( + orderIds.stream() + .map(orderId -> new WmsStructuralPackageDeliverOrderMap() .setDeliverId(deliverOrder.getId()) - .setOrderId(id)).toList()); - structuralPackageOrderTrayService.setStateByIds(ids, OrderState.InTransit); + .setOrderId(orderId)) + .toList() + ); + + // 将所有订单下的托盘状态更新为运输中 + for (Long orderId : orderIds) { + structuralPackageOrderTrayService.lambdaUpdate() + .set(WmsStructuralPackageOrderTray::getState, OrderState.InTransit.getState()) + .eq(WmsStructuralPackageOrderTray::getOrderId, orderId) + .eq(WmsStructuralPackageOrderTray::getState, OrderState.Packaged.getState()) + .update(); + } + return ApiResult.success(); }