Cargo-Planner Docs
在您的应用程序中包含
虽然我们的网络应用程序应该涵盖大多数用例,但有时可能需要将装载规划功能添加到现有的WMS或ERP系统中——或者您自己定制的网络门户中。您可以通过使用我们的Rest API和JavaScript SDK来利用大部分功能。
三种将Cargo-Planner添加到您的应用程序的方法
有三种方法可以将货物规划功能添加到您的应用程序中。哪一种最适合您的用例是在复杂性、功能和定制之间的权衡。
1. 嵌入到iframe中 - 几乎无需代码
集成我们的装载规划工具的最简单方法是将视图嵌入到iframe html元素中。
这种方法的最大缺点是它将以非认证的方式完成,这意味着装载列表对象需要事先创建,然后启用公共共享的读写访问权限。 为此,您需要创建一个新的装载计划(您只需创建它——无需填写任何数据),然后启用共享。
完成后,复制共享链接并将其嵌入到iframe中,如下所示:
<iframe
src="https://app.cargo-planner.com/loadlist/10405cacde654075kjf53bd1f78520/workspace/0?length_dim=IN&weight_dim=LB&primary=1e3a8a"></iframe>

请注意,您可以添加一个带有十六进制颜色的primary查询参数。提供您的主题颜色,它将更好地融入您的环境
您还可以将查询参数hide_navigation设置为true以隐藏导航栏。如果您例如只想显示装载计划视图,这可能会很有用。
2. 使用API上传数据 - 在iframe中显示结果
虽然上述解决方案可以快速将装载规划功能附加到您的网站,但主要缺点是您需要手动创建每个列表。如果您的应用程序有多个用户使用,可能会导致一些奇怪的行为,因为同一个装载列表可能会同时被更新。
另一个缺点是货物数据需要手动添加(当然,您仍然可以使用各种导入功能)。您的应用程序可能已经有这些信息——因此,如果可以自动上传这些信息,那将是很好的。
解决方案是使用我们的API。
假设您的应用程序有以下端点:
# 您的服务器位于https://example.com的/calculate端点
import requests
import json
CARGO_PLANNER_TOKEN = 'Token your-token'
def calculate(request):
# 这些数据可能来自您的前端网站或您的内部数据源
data = {
"loadlist": {
"name": "Purchase-order 1234",
"public_access": "RW"
},
"calculation": {
"length_dim": "CM",
"weight_dim": "KG"
"container_types": [
{
"id": 1,
"payload": 20000
}
],
"items": [
{
"label": "product 1",
"l": 30,
"w": 80,
"h": 90,
"wt": 70,
"qty": 2
},
{
"label": "product 2",
"l": 50,
"w": 40,
"h": 50,
"wt": 40,
"qty": 3
}
],
}
}
# 调用我们的API
response = requests.post(
url="https://api.cargo-planner.com/api/2/create_and_calculate/",
data=json.dumps(data),
headers={
'Content-type': 'application/json',
'Authorization': CARGO_PLANNER_TOKEN
})
if response.status_code == 200:
# 返回您的页面链接以供iframe使用
return "https://app.cargo-planner.com/loadlist/{}/".format(response.data["id"])
#...
3. 使用API上传数据 - 使用我们的SDK显示结果
为了实现外观和感觉的完全定制,同时也不需要使用iframe,您可以使用我们的JavaScript SDK。
通过这种方式,您可以显示每个集装箱的3D布局,并呈现您认为最重要的指标。
以下是一个简单的Python服务器端代码片段和一个用于您的前端应用程序的JavaScript代码片段:
# 您的服务器位于https://example.com的/calculate端点
import requests
import json
CARGO_PLANNER_TOKEN = 'Token your-token'
def calculate(request):
response = requests.post(
url="https://api.cargo-planner.com/api/2/calculate/",
data=json.dumps(request.data),
headers={
'Content-type': 'application/json',
'Authorization': CARGO_PLANNER_TOKEN
})
if response.status_code == 200:
return response.json()
#...
<meta charset="utf-8">
<title>我的客户门户</title>
<script src="https://usermedia.cargoplanner.net/sdk/cargoPlannerSDK.umd.min.js"></script>
<body>
<h1>装载计划</h1>
</body>
<script>
calculate();
async function calculate() {
// 初始化3D引擎
await cargoPlannerSDK.SceneManager.init();
// 请参阅API文档以获取更多选项
let calculationData = {
length_dim: "M",
weight_dim: "KG",
// 货物尺寸可能是从交互式表单中输入的?
"items": [
{
"label": "Cargo 1",
"l": 1.2,
"w": 0.8,
"h": 0.5,
"wt": 300,
"qty": 20,
"layers": 2,
"color":"#48c9b0"
},
{
"label": "Cargo 2",
"l": 1.2,
"w": 1.0,
"h": 0.9,
"wt": 300,
"qty": 20,
"layers": 2,
"color":"#ec7063"
},
],
"container_types": [
{
"name": "40ft DV",
"L": 12,
"W": 2.33,
"H": 2.38,
"payload": 22000,
"door": {
H: 2.33,
W: 2.28
}
}
]
}
fetch('/calculate/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(calculationData),
})
.then(response => response.json())
.then(data => {
// 如果我们收到任何解决方案
if(data.solutions) {
// 目前每次计算提供一个解决方案(将来我们可能会提供更多)
data.solutions.forEach((solution) => {
// 遍历每个集装箱
solution.containers.forEach((container, index) => {
// 渲染画布
cargoPlannerSDK.SceneManager.createScene(
[container], // 集装箱数据,您可以将多个集装箱发送到一个场景,并指定它们的位置
null, // 交互模式(显示多个集装箱时设置为null)
400, // 像素宽度
200 // 像素高度
).then((canvas) => {
const containerDiv = document.createElement("div");
const label = document.createTextNode(`集装箱 ${index+1}: ${container.name} 最大使用空间: ${container.items_bb.max.x}, 使用重量: ${container.WT} `)
containerDiv.appendChild(label);
containerDiv.appendChild(canvas);
document.body.appendChild(containerDiv);
});
});
});
}
});
}
</script>
上述示例将生成以下装载计划:
