1463 WMS系统钢构包采购业务功能优化

This commit is contained in:
10001392 2026-05-11 16:39:12 +08:00
parent cf9c38a19e
commit ca45a912cd
1 changed files with 36 additions and 13 deletions

View File

@ -3,10 +3,8 @@ package com.nflg.wms.admin.controller;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.convert.Convert; import cn.hutool.core.convert.Convert;
import cn.hutool.core.lang.Pair; 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.NumberUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter; import com.alibaba.excel.ExcelWriter;
@ -982,14 +980,24 @@ public class StructuralPackageOrderController extends BaseController {
VUtil.trueThrowBusinessError(supplierIds.size() > 1).throwMessage("订单必须属于同一个供应商"); VUtil.trueThrowBusinessError(supplierIds.size() > 1).throwMessage("订单必须属于同一个供应商");
Long supplierId = supplierIds.iterator().next(); Long supplierId = supplierIds.iterator().next();
// 检查所有订单下的托盘是否都已打包且未发货 // 检查所有订单下的托盘状态
for (Long orderId : orderIds) { for (Long orderId : orderIds) {
List<WmsStructuralPackageOrderTray> trays = structuralPackageOrderTrayService.getList(orderId); List<WmsStructuralPackageOrderTray> trays = structuralPackageOrderTrayService.getList(orderId);
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(trays)).throwMessage("订单" + orderId + "没有托盘数据"); VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(trays)).throwMessage("订单" + orderId + "没有托盘数据");
// 检查是否有未打包的托盘 // 获取该订单下所有已打包的托盘项找出关联的托盘ID
VUtil.trueThrowBusinessError(trays.stream().anyMatch(tray -> Objects.equals(tray.getState(), OrderState.Unpackaged.getState()))) List<WmsStructuralPackageOrderTrayItem> trayItems = structuralPackageOrderTrayItemService.getList(orderId);
.throwMessage("订单" + orderId + "存在未打包的托盘"); Set<Long> 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()))) 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() .toList()
); );
// 将所有订单下的托盘状态更新为运输中 // 将所有订单下已关联托盘项的托盘状态更新为运输中
for (Long orderId : orderIds) { for (Long orderId : orderIds) {
structuralPackageOrderTrayService.lambdaUpdate() // 获取该订单下所有已打包的托盘项找出关联的托盘ID
.set(WmsStructuralPackageOrderTray::getState, OrderState.InTransit.getState()) List<WmsStructuralPackageOrderTrayItem> trayItems = structuralPackageOrderTrayItemService.getList(orderId);
.eq(WmsStructuralPackageOrderTray::getOrderId, orderId) Set<Long> packedTrayIds = trayItems.stream()
.eq(WmsStructuralPackageOrderTray::getState, OrderState.Packaged.getState()) .map(WmsStructuralPackageOrderTrayItem::getTrayId)
.update(); .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(); return ApiResult.success();
@ -1894,6 +1911,9 @@ public class StructuralPackageOrderController extends BaseController {
boolean hasDiff = request.getDiffList().stream() boolean hasDiff = request.getDiffList().stream()
.anyMatch(diff -> StrUtil.equals(diff.getMaterialNo(), materialQO.getMaterialNo())); .anyMatch(diff -> StrUtil.equals(diff.getMaterialNo(), materialQO.getMaterialNo()));
// 更新托盘项的trayId
trayItem.setTrayId(tray.getId());
// 解析二维码 // 解析二维码
if (CollectionUtil.isNotEmpty(materialQO.getQrCodes())) { if (CollectionUtil.isNotEmpty(materialQO.getQrCodes())) {
List<StructuralPackageMaterialQRCodeContentDTO> dtos = materialQO.getQrCodes().stream() List<StructuralPackageMaterialQRCodeContentDTO> dtos = materialQO.getQrCodes().stream()
@ -1924,6 +1944,9 @@ public class StructuralPackageOrderController extends BaseController {
} }
} }
// 批量更新托盘项的trayId
structuralPackageOrderTrayItemService.updateBatchById(trayItems);
// 更新托盘状态为已打包 // 更新托盘状态为已打包
VUtil.trueThrowBusinessError(!structuralPackageOrderTrayService.lambdaUpdate() VUtil.trueThrowBusinessError(!structuralPackageOrderTrayService.lambdaUpdate()
.set(WmsStructuralPackageOrderTray::getState, OrderState.Packaged.getState()) .set(WmsStructuralPackageOrderTray::getState, OrderState.Packaged.getState())