fix(order): inherit cargo bindings for remainder orders
This commit is contained in:
@@ -42,11 +42,11 @@ public class InternalOrderCargoController {
|
||||
if (tenantId <= 0 || orderId <= 0 || cargoId <= 0) {
|
||||
throw new BizException(ResultCode.BAD_REQUEST, "租户、订单和货物明细ID必须大于0");
|
||||
}
|
||||
OrderCargoEntity cargo = orders.findCargo(tenantId, orderId, cargoId);
|
||||
OrderCargoEntity cargo = orders.findCargoInheritedByOrder(tenantId, orderId, cargoId);
|
||||
if (cargo == null) {
|
||||
throw new BizException(ResultCode.NOT_FOUND, "订单货物明细不存在或不属于该订单");
|
||||
}
|
||||
return ApiResponse.success(new CargoBinding(cargo.getId(), cargo.getOrderId(), cargo.getItemNo(),
|
||||
return ApiResponse.success(new CargoBinding(cargo.getId(), orderId, cargo.getItemNo(),
|
||||
cargo.getCargoName(), cargo.getPackageCount(), cargo.getGrossWeightKg(), cargo.getVolumeCbm(),
|
||||
cargo.getSkuNo(), cargo.getCargoNameEn(), cargo.getUnitsPerPackage(), cargo.getTotalQuantity(),
|
||||
cargo.getNetWeightKg(), cargo.getCargoRemark()));
|
||||
@@ -61,8 +61,8 @@ public class InternalOrderCargoController {
|
||||
if (tenantId <= 0 || orderId <= 0) {
|
||||
throw new BizException(ResultCode.BAD_REQUEST, "租户和订单ID必须大于0");
|
||||
}
|
||||
return ApiResponse.success(orders.findCargo(tenantId, orderId).stream()
|
||||
.map(cargo -> new CargoLabelBinding(cargo.getId(), cargo.getOrderId(), cargo.getItemNo(),
|
||||
return ApiResponse.success(orders.findCargoInheritedByOrder(tenantId, orderId).stream()
|
||||
.map(cargo -> new CargoLabelBinding(cargo.getId(), orderId, cargo.getItemNo(),
|
||||
cargo.getCargoName(), cargo.getPackageCount(), cargo.getLengthCm(), cargo.getWidthCm(),
|
||||
cargo.getHeightCm()))
|
||||
.toList());
|
||||
|
||||
@@ -262,6 +262,36 @@ public class OrderRepository {
|
||||
.eq(OrderCargoEntity::getDeleted, false));
|
||||
}
|
||||
|
||||
/**
|
||||
* 子订单尚未物化独立货物行时,按同客户根订单继承货物明细;返回实体的 orderId
|
||||
* 仍是根单,调用方必须用请求中的子订单 ID 生成绑定快照,避免跨客户或跨根单借用。
|
||||
*/
|
||||
public OrderCargoEntity findCargoInheritedByOrder(long tenantId, long orderId, long cargoId) {
|
||||
OrderCargoEntity direct = findCargo(tenantId, orderId, cargoId);
|
||||
if (direct != null) return direct;
|
||||
OrderEntity order = orderMapper.selectOne(new LambdaQueryWrapper<OrderEntity>()
|
||||
.eq(OrderEntity::getTenantId, tenantId)
|
||||
.eq(OrderEntity::getId, orderId)
|
||||
.eq(OrderEntity::getDeleted, false));
|
||||
if (order == null || !"CHILD".equals(order.getOrderRole()) || order.getRootOrderId() == null) return null;
|
||||
return cargoMapper.selectOne(new LambdaQueryWrapper<OrderCargoEntity>()
|
||||
.eq(OrderCargoEntity::getTenantId, tenantId)
|
||||
.eq(OrderCargoEntity::getOrderId, order.getRootOrderId())
|
||||
.eq(OrderCargoEntity::getId, cargoId)
|
||||
.eq(OrderCargoEntity::getDeleted, false));
|
||||
}
|
||||
|
||||
public List<OrderCargoEntity> findCargoInheritedByOrder(long tenantId, long orderId) {
|
||||
List<OrderCargoEntity> direct = findCargo(tenantId, orderId);
|
||||
if (!direct.isEmpty()) return direct;
|
||||
OrderEntity order = orderMapper.selectOne(new LambdaQueryWrapper<OrderEntity>()
|
||||
.eq(OrderEntity::getTenantId, tenantId)
|
||||
.eq(OrderEntity::getId, orderId)
|
||||
.eq(OrderEntity::getDeleted, false));
|
||||
if (order == null || !"CHILD".equals(order.getOrderRole()) || order.getRootOrderId() == null) return List.of();
|
||||
return findCargo(tenantId, order.getRootOrderId());
|
||||
}
|
||||
|
||||
public List<OrderPartyEntity> findParties(long tenantId, long orderId) {
|
||||
return partyMapper.selectList(new LambdaQueryWrapper<OrderPartyEntity>()
|
||||
.eq(OrderPartyEntity::getTenantId, tenantId).eq(OrderPartyEntity::getOrderId, orderId));
|
||||
|
||||
Reference in New Issue
Block a user