Skip to content

Memver/leaders-backend-2023

 
 

Repository files navigation

Сервис автоматического распределения задач для выездных сотрудников банка

Производственное решение

production_solution.drawio

Вертикально и горизонтально масштабируемый сервис. Сервис разделяется на фронтенд, распределитель нагрузки, бэкенд, СУБД. Можно размножать количество бэкенд серверов.

База данных

db_schema.drawio

Сервис использует СУБД PostgreSQL.

База данных разделяется на несколько таблиц:
account, employee, agent_point, task, task_status, task_manual

account

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

employee

Таблица с данными о сотрудниках. Содержит грейд сотрудника и адрес начала работы.

agent_point

Таблица с агентскими точками. Содержит адрес точки, время подключения, доставлены ли материалы, Кол-во дней после выдачи последней карты, Кол-во одобренных заявок, Кол-во выданных карт.

task

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

task_status

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

task_manual

Таблица с типом задачи и условиями задачи. Содержит приоритет, время выполнения, требуемый уровень сотрудника. В зависимости от типа задачи содержит разные условия. Хранятся условия в виде json. Поле в базе данных представляет собой абстрактный класс BaseTaskManual, который могут унаследовать разные задачи. Условия в зависимости от сохраняемого класса (типа задачи):

Для задачи выезда на точку для стимулирования выдач: число в первом условии и число во втором условии.

Для задачи обучения агента: число, которое выражает процент; второе число.

Для задачи доставки карт и материалов: время подключения.

API схема

Схема api доступна:

api_schema.yaml

В некоторых методах добавлена возможность пагинации. Методы разделены правами доступа на Админа, менеджера и сотрудника. Методы защищены http basic authentication.

Всего 5 заголовков, которые соответствуют названиям таблиц в БД: Accounts, Agent points, Task manual, Employees, Tasks.

Accounts. В методах нельзя получить пароль.

Task manual. Методы для разных задач разделены разными url путями.

Стэк технологий

Java 17, Spring, PostgreSQL, Docker, GraphHopper, Jenetics, traefik

Особенности

API token GraphHopper используется только для геокодинга. Построением маршрутов занимается подтянутый с помощью pom.xml open source, установленный локально движок graphhopper.

Можно динамически указывать порты, настройки БД, токен к graphhoper geocoding в файле:

.env

При первом запуске приложения graphhopper обрабатывает карты и сохраняет на диске. Следующие запуски проходят быстрее.

Запуск

  1. Убедитесь, что у вас установлен Docker
  2. Склонируйте данный репозиторий к себе
    git clone https://github.com/arsuhinars/leaders-backend-2023
  3. Скачайте файлы, необходимые для поиска путей
    mkdir -p graph_hopper
    curl https://download.geofabrik.de/russia/south-fed-district-latest.osm.pbf > ./graph_hopper/south-fed-district-latest.osm.pbf 

    Примечание: для работы приложения по всей России, нужно скачать карту всей России. Можно также ограничиться нужным вам регионом.

  4. Разворачиваем сервис
    docker compose up -d

    Внимание: первый запуск может занять продолжительное время, так как будет рассчитываться кэш для поиска путей

  5. После успешного запуска, веб-сервис будет доступен по адресу http://localhost:80
  6. Для остановки сервиса воспользуйтесь командой:
    docker compose down -v

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 99.6%
  • Dockerfile 0.4%