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.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<WmsStructuralPackageOrderTray> 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<WmsStructuralPackageOrderTrayItem> trayItems = structuralPackageOrderTrayItemService.getList(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())))
@ -1024,14 +1032,23 @@ public class StructuralPackageOrderController extends BaseController {
.toList()
);
// 将所有订单下的托盘状态更新为运输中
// 将所有订单下已关联托盘项的托盘状态更新为运输中
for (Long orderId : orderIds) {
// 获取该订单下所有已打包的托盘项找出关联的托盘ID
List<WmsStructuralPackageOrderTrayItem> trayItems = structuralPackageOrderTrayItemService.getList(orderId);
Set<Long> packedTrayIds = trayItems.stream()
.map(WmsStructuralPackageOrderTrayItem::getTrayId)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
if (CollectionUtil.isNotEmpty(packedTrayIds)) {
structuralPackageOrderTrayService.lambdaUpdate()
.set(WmsStructuralPackageOrderTray::getState, OrderState.InTransit.getState())
.eq(WmsStructuralPackageOrderTray::getOrderId, orderId)
.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<StructuralPackageMaterialQRCodeContentDTO> 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())