OWAP (Oneway Additional App)

#vue.js #node.js #express.js #sqlite #freelance #2021

Это продолжение решения задачи с парсером http://alex.dzen-code.ru/projects/oneway-parser.

Хотелось обойтись без велосипедов, связанных с Google Sheets Api. Плюс к тому были необходимы дополнительные возможности, такие как: загрузка, просмотр файлов, сложные расчет времени и другое.

Стэк

На фронтенд был взят Vue.js. Я с ним давно работаю и хорошо знаю, да и для небольшого приложение это оптимальное решение. Для реализации компонентов был взят дополнительно фреймворк Vutify. Так же с ним работал.

На бэкенд я решил взять и попробовать node.js, а точнее его фреймворк Express.js. Так же с ним работал, но не реализовывал крупные проекты. Можно было бы взять Laravel или его мини версию lumen, но мне захотелось использовать js как на фронтенде так и на бэкенде. Да и node.js мне очень нравится.

Сервер был организован через Nginx путем проксирования на порт 3000, где располагается node.js приложение. Само приложение поддерживается с помощью утилиты PM2. Она следит, чтобы приложение не падало, в случае чего перезагружало.

База данных SQLite. Небольшая начальная база.

Интерфейс

Был реализован простой логин, для теста, чтобы система на начальном этапе не имела общего доступа.

Сам интерфейс представляет собой таблицу. В ней выводится информация, которая попадает в базу из парсера, такие как: номер машины, ее статус, местоположение, направление, время ориентировочного прибытия.

Помимо данных с пасера в интефейсе представлены компоненты для заполнения диспетчером. Это дата время погрузки, выгрузки, прилагаемые файлы с документами и заказами, комментарий.
Для документов был сделан отдельный компонент. Была задача - сделать простой менеджер для управлением этими документами. То есть их загрузка, удаление, вывод и просмотр.

Так же был ряд интересных задач касающихся просчета дат.
Одной из них было расчет разницы времени от ориентировочного прибытия машины и времени указывающимся диспетчером из заказа.
Сложение дат - это довольно специфичное действие, тк надо было считать не только минуты, часы, но и дни.
Другая задача касалась определения времени, которое машина проводит на стоянке. Это было реализовано с помощью таймера. По кодам положения машины и точки прибытия определялось, что машина стоит на месте. Дальше активировался таймер, состояние которого хранится в базе. И соответсвенно при начале движения, таймер пропадал и показывалась разница времени.

Так же стоит сказать, что вся система находится в постоянной синхронизацией с базой данных, которая в. свою очередь по средству парсера связывается с данными платформы Webfleet. Интерфейс обновляет данные каждую минуту без перезагрузки страницы.

Таким образом в итоге получилась система мониторинга за состоянием машин и заказов.

Парсер

Парсер остался практически аналогичным с предыдущей версии проекта http://alex.dzen-code.ru/projects/oneway-parser.
Суть его осталась та же. Логин на платформе Webfleet, переход на нужные страницы и собирание с них необходимой информации.

Но были некоторые доработки.
Был изменен формата отправляемых данных. Потребовалось преобразовать в связи с поменявшейся несколько логики приложения и для удобства записи в базу данных.

Другая доработка касалась изменения логина. Изначально тратилось значительное время на логин в систему при каждой итерации парсинга. Но мы подумали и решили сделать, чтобы вход был только один раз, а дальше парсер оставался в системе без выхода из нее. За счет этого время парсинга было уменьшено почти в 3 раза. Но скрипт все равно проверял, остался ли он в системе или нет.

Так же были добавлена система логирования, чтобы смотреть за ошибками парсера.

Posted in 2021, freelance, interesting, node.js, vue on May 20, 2021.