Cargo-Planner Docs
集成
如果您已经有数字工具来管理仓库中的存储内容,或者如何处理客户的装载清单,Cargo-Planner 可以通过一点集成在此基础上进行扩展。
货物库同步
与您当前工具进行集成的最简单方法是通过 货物库。所有 Cargo-Planner 许可证都包括货物库,它本质上是一个简化的 WMS 或资源规划系统。
设置后,可以通过流畅的导入或自动完成在我们的 Web 应用中轻松创建新的装载清单。
这种方法基本上可以作为 CRON 任务或每日同步运行,Cargo-Planner 将负责创建装载清单的所有 UI 方面。

但手动设置货物库可能是一项艰巨的任务。因此,让我们通过一点代码与您当前使用的任何工具保持同步。
// 查看入门页面以了解如何创建您的令牌
const API_TOKEN = 'Token b123...';
const cargoes: CargoPlannerItem[] = [];
// 假设我们有一个项目/货物的来源看起来像这样,
// 其中一切都以毫米和克为单位定义。
const sourceItems = [
{
id: 511732,
title: 'Basket Catcher',
description: '...',
length: 900,
width: 900,
height: 500,
weight: 20000,
inner_quantity: 1,
},
{
id: 512789,
title: 'Putters (10pcs)',
description: '...',
length: 210,
width: 210,
height: 150,
weight: 1700,
inner_quantity: 10,
},
// ... 等等
];
// 我们的 sourceItems 与 cargo-planner 中的表示略有不同
// 因此我们需要对数据进行一些调整
for (let i = 0; i < sourceItems.length; i++) {
let s = sourceItems[i];
// 我们希望将 ID 和标题都存储为名称
const title = `${s.id} - ${s.title}`;
let cargo: CargoPlannerItem = {
name: title,
length_dim: 'MM',
// Cargo-Planner 不接受克,因此我们转换为千克
weight_dim: 'KG',
data: {
label: title,
l: s.length,
w: s.width,
h: s.height,
wt: s.weight / 1000, // 重量转换
unit_qty: s.inner_quantity,
},
};
cargoes.push(cargo);
}
// 在我们创建所有项目之前,我们首先要
// 删除货物库中存在的所有内容,
// 这样我们就不会有任何重复。
// 让我们使用 cargo/truncate 端点
fetch('https://api.cargo-planner.com/api/2/cargo/truncate/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: API_TOKEN,
},
body: JSON.stringify({ confirm: true }),
});
// 最后我们批量创建货物列表
fetch('https://api.cargo-planner.com/api/2/cargo/bulk_create/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: API_TOKEN,
},
body: JSON.stringify(cargoes),
});
// Cargo-Planner 接受的简化类型定义
interface CargoPlannerItem {
name: string;
data: ItemData;
length_dim: 'M' | 'DM' | 'CM' | 'MM' | 'FT' | 'IN';
weight_dim: 'KG' | 'MT' | 'LB';
}
interface ItemData {
label: string;
l: number;
w: number;
h: number;
wt: number;
not_stackable?: boolean | null;
not_rotatable?: boolean | null;
tiltable?: boolean | null;
bottom_only?: boolean | null;
color?: string | null;
qty?: number | null;
unit_qty?: number | null;
}
现在,我们不必再通过 Excel 导入/导出,计划下一次发货将会快得多。
直接创建装载清单
如果您希望直接从其他工具创建装载清单,这与前一个示例中的 API 调用没有太大区别。这次我们将完全跳过货物库,直接创建一个新装载清单。
这种方法的缺点是您需要在调用 API 之前选择要运输的物品以及每种物品的数量。这很可能需要一些 UI。
// 我们重用前一个示例中的常量 sourceItems 和 API_TOKEN
let cargoes: ItemData[] = [];
// 从 sourceItem 到 Cargo-Planner 表示的转换
for (let i = 0; i < source.length; i++) {
let s = source[i];
// 我们希望将 ID 和标题都存储为名称
const title = `${s.id} - ${s.title}`;
let cargo: ItemData = {
label: title,
l: s.length,
w: s.width,
h: s.height,
// 从克到千克的重量转换
wt: s.weight / 1000,
unit_qty: s.inner_quantity,
// 我们希望发送每种物品的 10 个
qty: 10,
};
cargoes.push(cargo);
}
// 最后我们创建一个装载清单
fetch('https://api.cargo-planner.com/api/2/loadlist/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: API_TOKEN,
},
body: JSON.stringify({
name: 'Shipment 123',
data: cargoes,
etd: '2022-12-01',
length_dim: 'MM',
weight_dim: 'KG',
}),
});
新的装载清单将在 Web 应用中可见,但响应将包含一个直接链接到新装载清单的 URL。
还可以通过 创建并计算 端点更进一步,但这需要一些更多的输入数据,例如使用什么设置和设备。