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 49e02cd4..9508cefc 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 @@ -3,10 +3,8 @@ package com.nflg.wms.admin.controller; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.lang.Pair; -import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.*; import cn.hutool.core.util.NumberUtil; -import cn.hutool.core.util.RandomUtil; -import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.ExcelWriter; @@ -982,14 +980,24 @@ public class StructuralPackageOrderController extends BaseController { 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 + "存在未打包的托盘"); + // 获取该订单下所有已打包的托盘项,找出关联的托盘ID + List trayItems = structuralPackageOrderTrayItemService.getList(orderId); + Set packedTrayIds = trayItems.stream() + .filter(i -> ObjectUtil.isNotEmpty(i.getTrayId()) && i.getTrayId() != -1L) + .map(WmsStructuralPackageOrderTrayItem::getTrayId) + .collect(Collectors.toSet()); + + // 检查是否有已关联托盘项但未打包的托盘 + boolean hasUnpackagedWithItems = trays.stream() + .filter(tray -> packedTrayIds.contains(tray.getId())) + .anyMatch(tray -> Objects.equals(tray.getState(), OrderState.Unpackaged.getState())); + VUtil.trueThrowBusinessError(hasUnpackagedWithItems) + .throwMessage("订单" + orderId + "存在已关联物料但未打包的托盘"); // 检查是否有已发货的托盘 VUtil.trueThrowBusinessError(trays.stream().anyMatch(tray -> Objects.equals(tray.getState(), OrderState.InTransit.getState()) || Objects.equals(tray.getState(), OrderState.Received.getState()))) @@ -1024,13 +1032,22 @@ public class StructuralPackageOrderController extends BaseController { .toList() ); - // 将所有订单下的托盘状态更新为运输中 + // 将所有订单下已关联托盘项的托盘状态更新为运输中 for (Long orderId : orderIds) { - structuralPackageOrderTrayService.lambdaUpdate() - .set(WmsStructuralPackageOrderTray::getState, OrderState.InTransit.getState()) - .eq(WmsStructuralPackageOrderTray::getOrderId, orderId) - .eq(WmsStructuralPackageOrderTray::getState, OrderState.Packaged.getState()) - .update(); + // 获取该订单下所有已打包的托盘项,找出关联的托盘ID + List trayItems = structuralPackageOrderTrayItemService.getList(orderId); + Set packedTrayIds = trayItems.stream() + .map(WmsStructuralPackageOrderTrayItem::getTrayId) + .filter(Objects::nonNull) + .collect(Collectors.toSet()); + + if (CollectionUtil.isNotEmpty(packedTrayIds)) { + structuralPackageOrderTrayService.lambdaUpdate() + .set(WmsStructuralPackageOrderTray::getState, OrderState.InTransit.getState()) + .in(WmsStructuralPackageOrderTray::getId, packedTrayIds) + .eq(WmsStructuralPackageOrderTray::getState, OrderState.Packaged.getState()) + .update(); + } } return ApiResult.success(); @@ -1894,6 +1911,9 @@ public class StructuralPackageOrderController extends BaseController { boolean hasDiff = request.getDiffList().stream() .anyMatch(diff -> StrUtil.equals(diff.getMaterialNo(), materialQO.getMaterialNo())); + // 更新托盘项的trayId + trayItem.setTrayId(tray.getId()); + // 解析二维码 if (CollectionUtil.isNotEmpty(materialQO.getQrCodes())) { List dtos = materialQO.getQrCodes().stream() @@ -1924,6 +1944,9 @@ public class StructuralPackageOrderController extends BaseController { } } + // 批量更新托盘项的trayId + structuralPackageOrderTrayItemService.updateBatchById(trayItems); + // 更新托盘状态为已打包 VUtil.trueThrowBusinessError(!structuralPackageOrderTrayService.lambdaUpdate() .set(WmsStructuralPackageOrderTray::getState, OrderState.Packaged.getState())