Розробка єдиної панелі управління замовленнями з усіх маркетплейсів

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Розробка єдиної панелі управління замовленнями з усіх маркетплейсів
Складна
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Розробка єдиної панелі управління замовленнями зі всіх маркетплейсів

Єдина панель збирає замовлення з сайту і всіх підключених маркетплейсів в один інтерфейс. Менеджер працює в одному вікні: бачить всі нові замовлення, змінює статуси, друкує етикетки, не переключаючись між кабінетами платформ.

Функціональність панелі

Список замовлень:

  • Фільтрація по джерелу (сайт, Ozon, WB, Яндекс.Маркет)
  • Фільтрація по статусу, даті, сумі
  • Пошук за номером замовлення, імям клієнта, SKU
  • Індикатор терміновості (FBS-замовлення з коротким терміном складання)
  • Масові дії: підтвердити кілька замовлень

Карточка замовлення:

  • Повні дані клієнта та доставки
  • Список товарів з фото
  • Кнопки дій залежно від статусу
  • Друк етикетки / акта передачі
  • Історія змін статусу

Архітектура даних

// Періодично завантажуємо замовлення зі всіх маркетплейсів
class MarketplaceOrdersSyncJob implements ShouldQueue
{
    public function handle(): void
    {
        $adapters = [
            'ozon' => app(OzonAdapter::class),
            'wb'   => app(WildberriesAdapter::class),
            'ym'   => app(YandexMarketAdapter::class),
        ];

        foreach ($adapters as $source => $adapter) {
            try {
                $lastSync = SyncLog::where('source', $source)->max('synced_at')
                    ?? now()->subHours(24);

                $orders = $adapter->getOrdersSince($lastSync);

                foreach ($orders as $rawOrder) {
                    $unified = $adapter->toUnifiedOrder($rawOrder);
                    Order::updateOrCreate(
                        ['source' => $source, 'source_order_id' => $unified->sourceOrderId],
                        $unified->toArray()
                    );
                }

                SyncLog::create(['source' => $source, 'synced_at' => now(), 'count' => count($orders)]);
            } catch (Exception $e) {
                Log::error("Sync failed for {$source}", ['error' => $e->getMessage()]);
            }
        }
    }
}

Компонент списку замовлень

function OrdersDashboard() {
  const [filters, setFilters] = useState({ source: 'all', status: 'all', search: '' });

  const { data, isLoading } = useQuery({
    queryKey: ['orders', filters],
    queryFn:  () => fetchOrders(filters),
    refetchInterval: 60_000,  // оновлення щохвилини
  });

  return (
    <div>
      <OrderFilters filters={filters} onChange={setFilters} />

      {/* Лічильники по джерелам */}
      <div className="grid grid-cols-5 gap-3 mb-6">
        {['site', 'ozon', 'wb', 'ym'].map(source => (
          <SourceCounter key={source} source={source} count={data?.counts[source] ?? 0} />
        ))}
      </div>

      <OrdersTable
        orders={data?.orders ?? []}
        loading={isLoading}
        onStatusChange={handleStatusChange}
      />
    </div>
  );
}

function SourceCounter({ source, count }: { source: string; count: number }) {
  const labels = { site: 'Сайт', ozon: 'Ozon', wb: 'WB', ym: 'Яндекс.Маркет' };
  return (
    <div className={cn('rounded-xl p-4 border', sourceColors[source])}>
      <p className="text-2xl font-bold">{count}</p>
      <p className="text-sm text-gray-600">{labels[source]}</p>
    </div>
  );
}

Друк етикеток

public function printLabel(Order $order): Response
{
    if ($order->source === 'ozon') {
        $label = $this->ozon->getPostingLabel($order->source_order_id);
        return response($label, 200, ['Content-Type' => 'application/pdf']);
    }

    if ($order->source === 'wb') {
        $label = $this->wb->getLabel($order->source_order_id);
        return response($label, 200, ['Content-Type' => 'application/pdf']);
    }

    // Для сайту генеруємо самі
    $pdf = PDF::loadView('labels.order', compact('order'));
    return $pdf->stream("order-{$order->number}.pdf");
}

Сповіщення про нові замовлення

Real-time сповіщення через WebSocket (Laravel Echo / Pusher) — при появленні нового замовлення від будь-якого маркетплейсу панель оновлюється автоматично і показує toast-сповіщення.

Строки

Панель управління замовленнями для 3 маркетплейсів з синхронізацією та друком етикеток: 20–28 робочих днів.