Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

FreightLog — система управления грузоперевозками

Лабораторная работа №4 (React + Node.js)
Вариант: 9 — Грузоперевозки
Тема: автоматизация компании, специализирующейся на перевозке грузов автомобильным транспортом


Описание проекта

FreightLog — веб-приложение для управления грузоперевозками. Система позволяет вести каталог грузов, назначать водителей, отслеживать доставку на карте, оптимизировать маршруты и анализировать накладные.


Быстрый старт

Требования

  • Node.js 18+
  • MongoDB 6+ (локально или MongoDB Atlas)

Установка и запуск

# Клонировать / перейти в папку проекта
cd LR4

# Установить зависимости
npm run install:all

# Заполнить базу демо-данными (12 грузов, 5 водителей, 5 ТС)
npm run seed

# Запустить сервер и клиент одновременно
npm run dev
Сервис URL
Клиент (React) http://localhost:5173
API (Express) http://localhost:5000/api

Демо-аккаунты

Email Пароль Роль
admin@freight.by admin123 Администратор
dispatcher@freight.by disp123 Диспетчер

Структура проекта

LR4/
├── client/                     # React-приложение (Vite)
│   └── src/
│       ├── components/         # React-компоненты
│       │   ├── RouteOptimizer.jsx   # Функциональный + useMemo
│       │   ├── CargoTracker.jsx     # Классовый компонент
│       │   ├── DriverManager.jsx    # Стрелочная функция
│       │   ├── SortableTable.jsx    # Сортируемая таблица
│       │   ├── MapView.jsx          # Интерактивная карта (Leaflet)
│       │   └── ...
│       ├── pages/              # Страницы приложения
│       ├── context/            # AuthContext (useContext + useReducer)
│       ├── services/           # API-клиент, XMLHttpRequest
│       └── styles/             # CSS (Flexbox, Grid, variables)
│
└── server/                     # Express-сервер
    ├── models/                 # Mongoose-модели
    ├── routes/                 # REST API маршруты
    ├── middleware/             # Auth, валидация
    ├── utils/                  # Геокодирование, расчёт маршрутов
    └── seed/                   # Демо-данные

Страницы приложения

Страница Путь Доступ Описание
Главная / Все Статистика, калькулятор маршрута
Каталог грузов /catalog Все Список, поиск, сортировка
Детали груза /catalog/:id Все Карта, GPS-трекер, накладная
Панель управления /dashboard Авторизованные CRUD, назначение водителей
О компании /about Все Информация о компании
Контакты /contacts Все Форма обратной связи
Вход / Регистрация /login, /register Все Аутентификация

Модели данных (MongoDB)

Модель Описание Ключевые поля
User Пользователи email, password (bcrypt), role
Vehicle Транспорт plateNumber, type, capacityKg, status
Driver Водители licenseNumber, category, rating
Cargo Грузы origin, destination, weightKg, status
Route Маршруты cargo, driver, distanceKm, fuelLog

Все модели содержат встроенные валидаторы Mongoose (типы, min/max, enum, regex).


API

Публичные эндпоинты (без авторизации)

GET  /api/cargo              — список грузов (search, sort, order)
GET  /api/cargo/:id          — детали груза
GET  /api/cargo/:id/track    — GPS-позиция груза
GET  /api/drivers            — список водителей
GET  /api/vehicles           — список транспорта
POST /api/auth/login         — вход
POST /api/auth/register      — регистрация
POST /api/ai/optimize        — расчёт маршрута

Защищённые эндпоинты (JWT Bearer token)

POST   /api/cargo            — создать груз
PUT    /api/cargo/:id        — обновить груз
DELETE /api/cargo/:id        — удалить груз
POST   /api/ai/analyze-document — анализ накладной
POST   /api/routes/process-order — цепочка обработки заказа

Ключевой функционал

Оптимизация маршрута

  • Валидация названий городов (только буквы, 2–50 символов)
  • Геокодирование городов Беларуси и СНГ из встроенного справочника
  • Расчёт расстояния по формуле Haversine
  • Оптимизация порядка промежуточных точек (алгоритм ближайшего соседа)
  • Отображение маршрута на интерактивной карте OpenStreetMap
  • При вводе несуществующего города или случайных символов — ошибка валидации

Пример: Минск → Гомель через Бобруйск — маршрут строится через реальные координаты этих городов.

Отслеживание груза

  • Периодический опрос позиции через XMLHttpRequest (каждые 8 сек)
  • Позиция рассчитывается как интерполяция между городом отправления и назначения
  • Прогресс увеличивается при статусе in_transit (0% → 95%)
  • На карте отображаются 3 точки: отправление, текущая позиция, назначение
  • setTimeout — автоматическое уведомление при превышении планового времени доставки (сохранение в localStorage)

Обработка заказа (Promise chain)

Цепочка асинхронных операций с async/await:

  1. Расчёт маршрута
  2. Проверка накладной
  3. Назначение водителя и транспорта

Переменные окружения

Скопируйте server/.env.example в server/.env:

PORT=5000
MONGODB_URI=mongodb://127.0.0.1:27017/freight_transport
JWT_SECRET=your_secret_key
CLIENT_URL=http://localhost:5173

# Опционально — для реальных AI API (на 7+ баллов)
GOOGLE_ROUTES_API_KEY=
IBM_NLU_API_KEY=
IBM_NLU_URL=https://api.us-south.natural-language-understanding.watson.cloud.ibm.com

Без API-ключей приложение работает в полном объёме: маршруты рассчитываются по справочнику городов, анализ накладных — по ключевым словам.


Доступные города для маршрутов

Минск, Гомель, Бобруйск, Могилёв, Витебск, Гродно, Брест, Пинск, Орша, Барановичи, Борисов, Солигорск, Новополоцк, Лида, Мозырь, Полоцк, Жлобин, Москва, Киев, Вильнюс, Варшава и др.


Скрипты

Команда Описание
npm run dev Запуск сервера + клиента
npm run seed Заполнение БД демо-данными
npm run build Сборка клиента для production
npm run install:all Установка всех зависимостей

About

Full-stack freight & logistics management system built with React, Node.js, Express, and MongoDB. Features route optimization, real-time cargo GPS tracking (Leaflet), dispatcher dashboard, JWT authentication, and role-based access control.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages