Tính CBM & xếp container API
Tính CBM, trọng lượng tính cước (air 1:6000, chuyển phát 1:5000, biển 1 CBM = 1000 kg), số thùng xếp vào container 20GP, 40GP, 40HC, 45HC hoặc pallet.
Nhập kích thước thùng (length, width, height theo unit cm, mm, m hoặc in), weight mỗi thùng và quantity, hoặc danh sách nhiều loại thùng trong cartons. API trả về thể tích (CBM) mỗi thùng và tổng, tổng trọng lượng và trọng lượng tính cước cho hàng không (cm³ / 6000, air_divisor), chuyển phát nhanh (cm³ / 5000, express_divisor), đường biển LCL (freight ton, 1 CBM = 1000 kg) và đường bộ (1 CBM = 333 kg), kèm cho biết thể tích hay trọng lượng quyết định.
Thêm container (20gp, 40gp, 40hc, 45hc hoặc all) hoặc pallet (eur 1200 × 800, standard 1200 × 1000, us, asia; max_height tính cả pallet, mặc định 180 cm, max_weight) để lập phương án xếp. Với một loại thùng, API thử 6 hướng đặt (2 hướng khi upright=true, giới hạn tầng bằng max_stack), lấp phần chiều dài còn dư ở cửa bằng hướng tốt nhất khác, và trả về số thùng tối đa, giới hạn do không gian hay tải trọng, số thùng mỗi lớp, sơ đồ lớp, tỉ lệ sử dụng thể tích và tải trọng, số container / pallet cần cho số lượng. Nhiều loại thùng được xếp bằng heuristic first-fit giảm dần theo lớp, đánh dấu estimate: true.
Kích thước lòng và tải trọng container là giá trị phổ biến được công bố; container thực tế khác nhau theo hãng và luôn có khe hở, nên chừa 5–10 %.
Tham số
| Tên | Vị trí | Kiểu | Bắt buộc | Mặc định | |
|---|---|---|---|---|---|
length | query|body | number | có | Chiều dài thùng (ngoài). | |
width | query|body | number | có | Chiều rộng thùng. | |
height | query|body | number | có | Chiều cao thùng. | |
weight | query|body | number | không | Trọng lượng mỗi thùng (weight_unit kg, g, lb). | |
quantity | query|body | number | không | Số thùng. | |
cartons | body | array | không | Nhiều loại thùng: [{name, length, width, height, weight, quantity, upright, max_stack}]. | |
unit | query|body | string | không | cm | mm, cm, m hoặc in. |
container | query|body | string | không | 20gp, 40gp, 40hc, 45hc hoặc all. | |
pallet | query|body | string | không | eur, standard, us hoặc asia (kèm max_height, max_weight, overhang). | |
upright | query|body | boolean | không | false | Giữ thùng đứng (không lật). |
air_divisor | query|body | number | không | 6000 | Hệ số quy đổi hàng không (cm³/kg). |
Ví dụ
curl "https://apibox.io.vn/v1/cargo-load?length=60&width=40&height=40&weight=12&quantity=300&container=20gp" \
-H "Authorization: Bearer YOUR_API_KEY"const res = await fetch('https://apibox.io.vn/v1/cargo-load?length=60&width=40&height=40&weight=12&quantity=300&container=20gp', {
method: 'GET',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
},
});
const data = await res.json();
console.log(data);import requests
res = requests.get(
"https://apibox.io.vn/v1/cargo-load?length=60&width=40&height=40&weight=12&quantity=300&container=20gp",
headers={"Authorization": "Bearer YOUR_API_KEY"},
timeout=30,
)
print(res.json())<?php
$ch = curl_init('https://apibox.io.vn/v1/cargo-load?length=60&width=40&height=40&weight=12&quantity=300&container=20gp');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer YOUR_API_KEY'],
]);
$response = curl_exec($ch);
print_r(json_decode($response, true));Kết quả trả về
{
"total_cbm": 28.8,
"total_gross_weight_kg": 3600,
"cartons": [
{
"name": "carton 1",
"quantity": 300,
"cbm_each": 0.096,
"cbm_total": 28.8,
"weight_total_kg": 3600,
"volumetric_air_kg_each": 16,
"volumetric_express_kg_each": 19.2
}
],
"chargeable": {
"air": {
"divisor": 6000,
"volumetric_kg": 4800,
"chargeable_kg": 4800,
"basis": "volume",
"rule": "cm³ / 6000 (IATA 1:6000 = 167 kg/m³)"
},
"express": {
"divisor": 5000,
"volumetric_kg": 5760,
"chargeable_kg": 5760,
"basis": "volume"
},
"sea_lcl": {
"kg_per_cbm": 1000,
"revenue_tons": 28.8,
"basis": "volume"
},
"road": {
"kg_per_cbm": 333,
"chargeable_kg": 9590.4
}
},
"loading": {
"id": "20gp",
"name": "20' standard (20GP / 20DC)",
"kind": "container",
"internal_mm": [
5898,
2352,
2393
],
"volume_cbm": 33.2,
"max_payload_kg": 28200,
"max_cartons": 240,
"limited_by": "space",
"max_by_space": 240,
"max_by_weight": 2350,
"per_layer": 48,
"layer_plan": [
{
"orientation": "L×W×H",
"box_mm": [
600,
400,
400
],
"along_length": 9,
"across_width": 5,
"layers": 5,
"count": 225
},
{
"orientation": "W×L×H",
"box_mm": [
400,
600,
400
],
"along_length": 1,
"across_width": 3,
"layers": 5,
"count": 15,
"note": "fills the remaining length at the door end"
}
],
"quantity": 300,
"loaded": 240,
"remaining": 60,
"units_needed": 2,
"utilisation_volume_pct": 69.41,
"utilisation_weight_pct": 10.21,
"loaded_weight_kg": 2880,
"estimate": false
}
}
Ứng dụng
- Báo số thùng xếp được vào 40HC trước khi đặt chỗ
- So sánh trọng lượng tính cước hàng không, chuyển phát, đường biển
- Lập phương án xếp pallet dưới chiều cao 1,8 m
- Kiểm tra hàng nặng có vượt tải trọng container trước khi đầy thể tích
Hỏi đáp
Dùng hệ số quy đổi nào?
Hàng không 6000 (IATA, 167 kg/m³), chuyển phát 5000 (200 kg/m³), đường biển LCL 1 CBM = 1000 kg, đường bộ 1 CBM = 333 kg. Đều đổi được bằng tham số.
Phương án xếp có tối ưu không?
Với một loại thùng là khối xếp theo lớp tốt nhất trong 6 hướng cộng khối lấp chỗ trống. Nhiều loại thùng dùng heuristic và được ghi là ước tính.
Giữ thùng đứng (không lật) được không?
Được: upright=true chỉ cho xoay quanh trục đứng, max_stack giới hạn số tầng.
API liên quan
Kiểm tra JSON
Kiểm tra cú pháp JSON, báo đúng dòng và cột bị lỗi, và validate dữ liệu theo JSON Schema (draft 4, 7, 2019-09 hoặc 2020-12).
{ }Định dạng JSON
Làm đẹp JSON với thụt lề 0-8 dấu cách hoặc tab, rút gọn (minify) hoặc sắp xếp key theo bảng chữ cái. Báo lỗi cú pháp kèm dòng và cột.
CSVCSV sang JSON
Chuyển CSV thành mảng object JSON theo dòng tiêu đề, tự nhận dấu phân cách, tự chuyển số và boolean, báo lỗi từng dòng.