Cargo-Planner Docs

การรวมเข้ากับแอปพลิเคชันของคุณ

แม้ว่าเว็บแอปพลิเคชันของเราจะครอบคลุมกรณีการใช้งานส่วนใหญ่ แต่บางครั้งอาจเป็นที่สนใจที่จะเพิ่มฟังก์ชันการวางแผนโหลดเข้าสู่ระบบ WMS หรือ ERP ที่มีอยู่แล้ว - หรืออาจจะเป็นพอร์ทัลเว็บที่สร้างขึ้นเอง คุณสามารถใช้ฟังก์ชันส่วนใหญ่ได้โดยใช้ Rest API และ JavaScript SDK ของเรา

สามวิธีในการเพิ่ม Cargo-Planner ในแอปพลิเคชันของคุณ

มีสามวิธีในการเพิ่มฟังก์ชันการวางแผนโหลดในแอปพลิเคชันของคุณ วิธีใดที่เหมาะสมที่สุดในกรณีการใช้งานของคุณนั้นเป็นการแลกเปลี่ยนระหว่างความซับซ้อนและคุณสมบัติและการปรับแต่ง

1. ฝังใน iframe - ไม่ต้องใช้โค้ด (เกือบ)

วิธีที่ง่ายที่สุดในการรวมเครื่องมือวางแผนโหลดของเราคือการฝังมุมมองในองค์ประกอบ html iframe

ข้อควรระวังที่ใหญ่ที่สุดกับวิธีนี้คือจะทำในลักษณะที่ไม่ได้รับการยืนยันตัวตน ซึ่งหมายความว่าออบเจ็กต์รายการโหลดจำเป็นต้องถูกสร้าง ล่วงหน้า และเปิดใช้งานการเข้าถึงแบบอ่านและเขียนสำหรับการแชร์สาธารณะ เพื่อทำเช่นนั้นคุณต้อง สร้างแผนโหลดใหม่ (คุณเพียงแค่ต้องสร้างมันขึ้นมา - คุณไม่จำเป็นต้องกรอกข้อมูลใด ๆ) และจากนั้น เปิดใช้งานการแชร์

เมื่อเสร็จแล้ว ให้คัดลอกลิงก์การแชร์และฝังใน iframe ดังนี้:

<iframe
  src="https://app.cargo-planner.com/loadlist/10405cacde654075kjf53bd1f78520/workspace/0?length_dim=IN&weight_dim=LB&primary=1e3a8a"></iframe>

Load plan from API

สังเกตว่าคุณสามารถเพิ่มพารามิเตอร์การค้นหาหลักด้วยสีเฮกซ์ได้ ให้สีธีมของคุณและมันจะผสมผสานเข้ากับสภาพแวดล้อมของคุณได้มากขึ้น

คุณยังสามารถตั้งค่าพารามิเตอร์การค้นหา hide_navigation เป็น true เพื่อซ่อนแถบนำทาง ซึ่งอาจมีประโยชน์หากคุณต้องการแสดงเฉพาะมุมมองแผนโหลด

2. อัปโหลดข้อมูลโดยใช้ API - แสดงผลลัพธ์ใน iframe

แม้ว่าวิธีการข้างต้นจะทำให้สามารถแนบฟังก์ชันการวางแผนโหลดเข้ากับไซต์ของคุณได้อย่างรวดเร็ว ข้อเสียหลักคือคุณต้องสร้างแต่ละรายการด้วยตนเอง หากคุณมีผู้ใช้หลายคนที่ใช้แอปพลิเคชันของคุณอาจทำให้เกิดพฤติกรรมแปลก ๆ เนื่องจากรายการโหลดเดียวกันอาจถูกอัปเดตพร้อมกัน

ข้อเสียอีกประการหนึ่งคือข้อมูลสินค้าจำเป็นต้องถูกเพิ่มด้วยตนเอง (อย่างไรก็ตามคุณยังสามารถใช้ฟังก์ชันการนำเข้าต่าง ๆ ได้) แอปพลิเคชันของคุณอาจมีข้อมูลนี้อยู่แล้ว - ดังนั้นจะดีมากถ้าสามารถอัปโหลดข้อมูลนี้โดยอัตโนมัติ

วิธีแก้ปัญหาคือการใช้ API ของเรา

สมมติว่าแอปพลิเคชันของคุณมี endpoint ด้านล่าง:

# /calculate endpoint ที่เซิร์ฟเวอร์ของคุณที่ตั้งอยู่ที่ https://example.com

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 สำหรับแอปพลิเคชันฝั่งหน้า:

# /calculate endpoint ที่เซิร์ฟเวอร์ของคุณที่ตั้งอยู่ที่ https://example.com

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>My customer portal</title>
<script src="https://usermedia.cargoplanner.net/sdk/cargoPlannerSDK.umd.min.js"></script>

<body>
    <h1>Load plan</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(`Container ${index+1}: ${container.name} Max used space: ${container.items_bb.max.x}, Weight used: ${container.WT}  `)
                        containerDiv.appendChild(label);
                        containerDiv.appendChild(canvas);

                        document.body.appendChild(containerDiv);
                    });

                });
            });
        }
    });
}

</script>

ตัวอย่างข้างต้นจะสร้างแผนโหลดด้านล่าง:

Load plan from API