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

This commit is contained in:
10001392 2026-05-11 08:42:27 +08:00
parent 2d44bae3f7
commit bd0da952ce
1 changed files with 70 additions and 24 deletions

View File

@ -938,56 +938,102 @@ public class StructuralPackageOrderController extends BaseController {
/**
* 退回到未打包
*
* @param id 托盘id
* @param orderId 订单id
*/
@Transactional
@GetMapping("backToUnpackaged")
public ApiResult<Void> 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<Void> backToUnpackaged(@Valid @RequestParam @NotNull Long orderId) {
// 根据订单ID获取所有托盘
List<WmsStructuralPackageOrderTray> 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<Void> createDeliverOrder(@Valid @RequestBody @NotEmpty List<Long> ids) {
List<DeliverStructuralPackageOrderExtendVO> 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<Long> tids = structuralPackageOrderTrayService.getIdsByOrderId(orderId);
VUtil.trueThrowBusinessError(tids.size() != ids.size()).throwMessage("数据未齐套");
public ApiResult<Void> createDeliverOrder(@Valid @RequestBody @NotEmpty List<Long> orderIds) {
// 验证所有订单是否存在
List<WmsStructuralPackageOrder> orders = structuralPackageOrderService.listByIds(orderIds);
VUtil.trueThrowBusinessError(orders.size() != orderIds.size()).throwMessage("部分订单不存在");
// 获取所有订单的供应商ID确保是同一个供应商
Set<Long> 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<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 + "存在未打包的托盘");
// 检查是否有已发货的托盘
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<WmsStructuralPackageOrderTrayItem> 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();
}