1463 WMS系统钢构包采购业务功能优化
This commit is contained in:
parent
2d44bae3f7
commit
bd0da952ce
|
|
@ -938,56 +938,102 @@ public class StructuralPackageOrderController extends BaseController {
|
||||||
/**
|
/**
|
||||||
* 退回到未打包
|
* 退回到未打包
|
||||||
*
|
*
|
||||||
* @param id 托盘id
|
* @param orderId 订单id
|
||||||
*/
|
*/
|
||||||
|
@Transactional
|
||||||
@GetMapping("backToUnpackaged")
|
@GetMapping("backToUnpackaged")
|
||||||
public ApiResult<Void> backToUnpackaged(@Valid @RequestParam @NotNull Long id) {
|
public ApiResult<Void> backToUnpackaged(@Valid @RequestParam @NotNull Long orderId) {
|
||||||
WmsStructuralPackageOrderTray tray = structuralPackageOrderTrayService.getById(id);
|
// 根据订单ID获取所有托盘
|
||||||
VUtil.trueThrowBusinessError(Objects.isNull(tray)).throwMessage("数据不存在");
|
List<WmsStructuralPackageOrderTray> trays = structuralPackageOrderTrayService.getList(orderId);
|
||||||
VUtil.trueThrowBusinessError(!Objects.equals(tray.getState(), OrderState.Packaged.getState()))
|
VUtil.trueThrowBusinessError(CollectionUtil.isEmpty(trays)).throwMessage("数据不存在");
|
||||||
.throwMessage("托盘状态不正确");
|
|
||||||
|
// 检查所有托盘的状态是否都是已打包
|
||||||
|
VUtil.trueThrowBusinessError(trays.stream().anyMatch(tray -> !Objects.equals(tray.getState(), OrderState.Packaged.getState())))
|
||||||
|
.throwMessage("托盘状态不正确,只有已打包的托盘才能退回");
|
||||||
|
|
||||||
|
// 将所有托盘状态更新为未打包
|
||||||
VUtil.trueThrowBusinessError(!structuralPackageOrderTrayService.lambdaUpdate()
|
VUtil.trueThrowBusinessError(!structuralPackageOrderTrayService.lambdaUpdate()
|
||||||
.set(WmsStructuralPackageOrderTray::getState, OrderState.Unpackaged.getState())
|
.set(WmsStructuralPackageOrderTray::getState, OrderState.Unpackaged.getState())
|
||||||
.set(WmsStructuralPackageOrderTray::getPackBy, null)
|
.set(WmsStructuralPackageOrderTray::getPackBy, null)
|
||||||
.set(WmsStructuralPackageOrderTray::getPackTime, null)
|
.set(WmsStructuralPackageOrderTray::getPackTime, null)
|
||||||
.eq(WmsStructuralPackageOrderTray::getId, id)
|
.eq(WmsStructuralPackageOrderTray::getOrderId, orderId)
|
||||||
.eq(WmsStructuralPackageOrderTray::getState, OrderState.Packaged.getState())
|
.eq(WmsStructuralPackageOrderTray::getState, OrderState.Packaged.getState())
|
||||||
.update()).throwMessage("退回到未打包失败,请重试");
|
.update()).throwMessage("退回到未打包失败,请重试");
|
||||||
packageMaterialScanRecordRepository.removeByTrayNo(tray.getNo());
|
|
||||||
|
// 删除所有托盘的扫描记录
|
||||||
|
trays.forEach(tray -> packageMaterialScanRecordRepository.removeByTrayNo(tray.getNo()));
|
||||||
|
|
||||||
return ApiResult.success();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建送货单
|
* 创建送货单
|
||||||
*
|
*
|
||||||
* @param ids 托盘id
|
* @param orderIds 订单id集合
|
||||||
*/
|
*/
|
||||||
@Transactional
|
@Transactional
|
||||||
@PostMapping("createDeliverOrder")
|
@PostMapping("createDeliverOrder")
|
||||||
public ApiResult<Void> createDeliverOrder(@Valid @RequestBody @NotEmpty List<Long> ids) {
|
public ApiResult<Void> createDeliverOrder(@Valid @RequestBody @NotEmpty List<Long> orderIds) {
|
||||||
List<DeliverStructuralPackageOrderExtendVO> trays = structuralPackageOrderTrayService.getListByIds(ids);
|
// 验证所有订单是否存在
|
||||||
VUtil.trueThrowBusinessError(trays.stream().map(DeliverStructuralPackageOrderExtendVO::getOrderId).collect(Collectors.toSet()).size() > 1)
|
List<WmsStructuralPackageOrder> orders = structuralPackageOrderService.listByIds(orderIds);
|
||||||
.throwMessage("订单号必须一致");
|
VUtil.trueThrowBusinessError(orders.size() != orderIds.size()).throwMessage("部分订单不存在");
|
||||||
Long orderId = trays.get(0).getOrderId();
|
|
||||||
Long supplierId = trays.get(0).getSupplierId();
|
// 获取所有订单的供应商ID,确保是同一个供应商
|
||||||
List<Long> tids = structuralPackageOrderTrayService.getIdsByOrderId(orderId);
|
Set<Long> supplierIds = orders.stream().map(WmsStructuralPackageOrder::getSupplierId).collect(Collectors.toSet());
|
||||||
VUtil.trueThrowBusinessError(tids.size() != ids.size()).throwMessage("数据未齐套");
|
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);
|
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()
|
WmsStructuralPackageDeliverOrder deliverOrder = new WmsStructuralPackageDeliverOrder()
|
||||||
.setNo(deliverOrderNo)
|
.setNo(deliverOrderNo)
|
||||||
.setSupplierId(supplierId)
|
.setSupplierId(supplierId)
|
||||||
.setQuehuo(trays.stream().anyMatch(DeliverStructuralPackageOrderVO::getQuehuo))
|
.setQuehuo(hasQuehuo)
|
||||||
.setQuehuoReceived(false)
|
.setQuehuoReceived(false)
|
||||||
.setCreateBy(UserUtil.getUserName())
|
.setCreateBy(UserUtil.getUserName())
|
||||||
.setCreateTime(LocalDateTime.now());
|
.setCreateTime(LocalDateTime.now());
|
||||||
structuralPackageDeliverOrderService.save(deliverOrder);
|
structuralPackageDeliverOrderService.save(deliverOrder);
|
||||||
structuralPackageDeliverOrderMapService.saveBatch(trays.stream()
|
|
||||||
.map(DeliverStructuralPackageOrderExtendVO::getId)
|
// 创建送货单与订单的关联关系
|
||||||
.distinct().map(id ->
|
structuralPackageDeliverOrderMapService.saveBatch(
|
||||||
new WmsStructuralPackageDeliverOrderMap()
|
orderIds.stream()
|
||||||
|
.map(orderId -> new WmsStructuralPackageDeliverOrderMap()
|
||||||
.setDeliverId(deliverOrder.getId())
|
.setDeliverId(deliverOrder.getId())
|
||||||
.setOrderId(id)).toList());
|
.setOrderId(orderId))
|
||||||
structuralPackageOrderTrayService.setStateByIds(ids, OrderState.InTransit);
|
.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();
|
return ApiResult.success();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue