Логистика и Доставка
Логистическая система управляет процессами доставки товаров от склада до конечного покупателя. Это включает управление отгрузками, отслеживанием и складскими запасами.
Workflow доставки в marketplace:
- После оплаты заказа создаётся запись о доставке
- Товары упаковываются и маркируются
- Назначается служба доставки и получен номер отслеживания
- Система отслеживания обновляет статус в реальном времени
- Покупатель получает товар и подтверждает доставку
Создание доставки
После оплаты заказа создаём запись о доставке, указывая службу доставки и номер отслеживания.
- REST API
- GraphQL
const response = await fetch(ENDPOINT_URL + '/v1/shipping', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ACCESS_TOKEN',
},
body: JSON.stringify({
order: "ORD-001",
carrier: "СДЭК",
tracking_number: "1234567890",
shipping_method: "courier",
estimated_delivery: "2025-01-20"
})
});
const result = await response.json();
mutation ShippingMutation {
manageShipping(
shipping: {
order: "ORD-001",
carrier: "СДЭК",
tracking_number: "1234567890",
shipping_method: "courier",
estimated_delivery: "2025-01-20"
}
) {
shipping {
id
tracking_number
carrier
status
estimated_delivery
}
}
}
Этапы отслеживания (Tracking Stages)
Система отслеживания показывает текущее местоположение заказа:
- processing — обработка заказа на складе
- packed — заказ упакован и готов к отправке
- shipped — отправлен со склада
- in_transit — в пути
- out_for_delivery — выходит на доставку
- delivered — доставлен
- exception — задержка или проблема
- returned — возвращено отправителю
Добавление записи отслеживания
Каждый этап доставки фиксируется отдельной записью:
- REST API
- GraphQL
const response = await fetch(ENDPOINT_URL + '/v1/tracking', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ACCESS_TOKEN',
},
body: JSON.stringify({
shipping: "1234567890",
stage: "in_transit",
location: "Москва Сортировочный центр",
description: "Посылка прошла сортировку"
})
});
mutation TrackingMutation {
manageTracking(
tracking: {
shipping: "1234567890",
stage: "in_transit",
location: "Москва Сортировочный центр",
description: "Посылка прошла сортировку"
}
) {
tracking {
id
stage
location
timestamp
description
}
}
}
Обновление статуса доставки
После доставки заказа обновляем статус:
- REST API
- GraphQL
const response = await fetch(ENDPOINT_URL + '/v1/shipping/1234567890/status', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ACCESS_TOKEN',
},
body: JSON.stringify({
status: "delivered"
})
});
mutation UpdateShippingStatus {
manageShipping(
shipping: {
identifier: "1234567890",
status: "delivered"
}
) {
shipping {
id
status
delivered_at
}
}
}
Управление складскими запасами (Inventory)
При отгрузке товаров запасы автоматически уменьшаются. Приёмка товаров увеличивает запасы.
Отгрузка товаров
- REST API
- GraphQL
const response = await fetch(ENDPOINT_URL + '/v1/inventory', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ACCESS_TOKEN',
},
body: JSON.stringify({
shop: "romashka",
stock: "OOLONG-TEA-500G",
qty: -2,
uom: "pcs",
description: "Отгрузка заказу ORD-001"
})
});
mutation InventoryShipment {
manageInventory(
inventory: {
shop: "romashka",
stock: "OOLONG-TEA-500G",
qty: -2,
uom: "pcs",
description: "Отгрузка заказу ORD-001"
}
) {
inventory {
id
stock {
sku
qty
}
}
}
}
Приёмка товаров от поставщика
- REST API
- GraphQL
const response = await fetch(ENDPOINT_URL + '/v1/inventory', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ACCESS_TOKEN',
},
body: JSON.stringify({
shop: "romashka",
stock: "OOLONG-TEA-500G",
qty: 100,
uom: "pcs",
cost: 8000,
description: "Поступление от поставщика"
})
});
mutation InventoryReceipt {
manageInventory(
inventory: {
shop: "romashka",
stock: "OOLONG-TEA-500G",
qty: 100,
uom: "pcs",
cost: 8000,
description: "Поступление от поставщика"
}
) {
inventory {
id
stock {
sku
qty
}
}
}
}
Списание испорченных товаров
- REST API
- GraphQL
const response = await fetch(ENDPOINT_URL + '/v1/inventory', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ACCESS_TOKEN',
},
body: JSON.stringify({
shop: "romashka",
stock: "OOLONG-TEA-500G",
qty: -5,
uom: "pcs",
description: "Испортилось",
reason: "EXPIRED"
})
});
mutation InventoryWriteoff {
manageInventory(
inventory: {
shop: "romashka",
stock: "OOLONG-TEA-500G",
qty: -5,
uom: "pcs",
description: "Испортилось",
reason: "EXPIRED"
}
) {
inventory {
id
qty
}
}
}
Получение статуса доставки
- REST API
- GraphQL
const response = await fetch(ENDPOINT_URL + '/v1/tracking/1234567890', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ACCESS_TOKEN',
},
});
query TrackingQuery {
tracking(identifier: "1234567890") {
id
stage
location
timestamp
description
shipping {
order {
order_id
}
}
}
}
Возврат к: Заказы и Продажи