Marketplace Coop

Логистика и Доставка

Логистическая система управляет процессами доставки товаров от склада до конечного покупателя. Это включает управление отгрузками, отслеживанием и складскими запасами.

Workflow доставки в marketplace:

  1. После оплаты заказа создаётся запись о доставке
  2. Товары упаковываются и маркируются
  3. Назначается служба доставки и получен номер отслеживания
  4. Система отслеживания обновляет статус в реальном времени
  5. Покупатель получает товар и подтверждает доставку

Создание доставки

После оплаты заказа создаём запись о доставке, указывая службу доставки и номер отслеживания.

POST
      
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();
      
    
POST
      
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)

Система отслеживания показывает текущее местоположение заказа:

Добавление записи отслеживания

Каждый этап доставки фиксируется отдельной записью:

POST
      
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: "Посылка прошла сортировку"
  })
});
      
    
POST
      
mutation TrackingMutation {
  manageTracking(
    tracking: {
      shipping: "1234567890",
      stage: "in_transit",
      location: "Москва Сортировочный центр",
      description: "Посылка прошла сортировку"
    }
  ) {
    tracking {
      id
      stage
      location
      timestamp
      description
    }
  }
}
      
    

Обновление статуса доставки

После доставки заказа обновляем статус:

POST
      
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"
  })
});
      
    
POST
      
mutation UpdateShippingStatus {
  manageShipping(
    shipping: {
      identifier: "1234567890",
      status: "delivered"
    }
  ) {
    shipping {
      id
      status
      delivered_at
    }
  }
}
      
    

Управление складскими запасами (Inventory)

При отгрузке товаров запасы автоматически уменьшаются. Приёмка товаров увеличивает запасы.

Отгрузка товаров

POST
      
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"
  })
});
      
    
POST
      
mutation InventoryShipment {
  manageInventory(
    inventory: {
      shop: "romashka",
      stock: "OOLONG-TEA-500G",
      qty: -2,
      uom: "pcs",
      description: "Отгрузка заказу ORD-001"
    }
  ) {
    inventory {
      id
      stock {
        sku
        qty
      }
    }
  }
}
      
    

Приёмка товаров от поставщика

POST
      
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: "Поступление от поставщика"
  })
});
      
    
POST
      
mutation InventoryReceipt {
  manageInventory(
    inventory: {
      shop: "romashka",
      stock: "OOLONG-TEA-500G",
      qty: 100,
      uom: "pcs",
      cost: 8000,
      description: "Поступление от поставщика"
    }
  ) {
    inventory {
      id
      stock {
        sku
        qty
      }
    }
  }
}
      
    

Списание испорченных товаров

POST
      
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"
  })
});
      
    
POST
      
mutation InventoryWriteoff {
  manageInventory(
    inventory: {
      shop: "romashka",
      stock: "OOLONG-TEA-500G",
      qty: -5,
      uom: "pcs",
      description: "Испортилось",
      reason: "EXPIRED"
    }
  ) {
    inventory {
      id
      qty
    }
  }
}
      
    

Получение статуса доставки

GET
      
const response = await fetch(ENDPOINT_URL + '/v1/tracking/1234567890', {
  method: 'GET',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ACCESS_TOKEN',
  },
});
      
    
POST
      
query TrackingQuery {
  tracking(identifier: "1234567890") {
    id
    stage
    location
    timestamp
    description
    shipping {
      order {
        order_id
      }
    }
  }
}
      
    

Возврат к: Заказы и Продажи