Construction Accounting — это мобильное приложение для управления строительными проектами, разработанное с использованием современных Android-технологий. Приложение предоставляет инструменты для управления объектами, контроля материалов, ведения журнала работ и координации между участниками проекта.
Ключевой особенностью является реализация Offline-First подхода, обеспечивающего полную функциональность приложения даже при отсутствии подключения к сети.
- Распознавание документов (OCR): Автоматическое сканирование и заполнение накладных и актов с помощью камеры устройства для ускорения ввода данных.
- Геолокация и подтверждение присутствия: Использование GPS и Yandex Locator для фиксации местоположения сотрудников и подтверждения их нахождения на строительном объекте.
- Многопроектное управление: Одновременная работа с несколькими строительными объектами.
- Учет материалов: Полный цикл контроля материалов: планирование, приемка и расход.
- Журнал работ: Ведение записей о выполненных работах с автоматическим обновлением статистики проекта.
- Документооборот: Управление проектной и исполнительной документацией.
- Система ролей: Разграничение доступа на основе ролей (MANAGER, SUPERVISOR, WORKER).
- Offline-First: Полная работоспособность приложения без доступа к интернету с последующей синхронизацией данных.
Архитектура приложения построена для эффективного взаимодействия с реальным сервером, обеспечивая надежную синхронизацию данных и отзывчивый интерфейс.
-
Оптимистичное обновление: Все операции (например, обновление расхода материалов или создание записи в журнале) немедленно сохраняются в локальную базу данных (Room). Пользовательский интерфейс обновляется мгновенно, не дожидаясь ответа от сервера.
-
Фоновая синхронизация: После сохранения локальных изменений, приложение в фоновом режиме отправляет соответствующие запросы на сервер. Для этого используется
WorkManagerили кастомная система очередей, которая гарантирует доставку данных при появлении интернет-соединения. -
Очередь отложенных операций: Если в момент совершения операции сеть отсутствует, она добавляется в специальную очередь. Как только соединение восстанавливается, приложение автоматически обрабатывает эту очередь и отправляет все накопленные данные на сервер.
-
Разрешение конфликтов: В качестве основной стратегии разрешения конфликтов используется подход "last write wins", где приоритет отдается данным, последними пришедшим на сервер. Локальные данные периодически синхронизируются с сервером для поддержания консистентности.
Приложение взаимодействует со следующими ключевыми эндпоинтами для обмена данными:
POST /api/auth/login: Вход пользователя в систему.POST /api/auth/refresh: Обновление токена доступа.GET /api/auth/me: Получение данных о текущем пользователе.
GET /api/work-objects: Получение списка всех строительных проектов.GET /api/work-objects/{id}: Получение детальной информации по конкретному проекту.GET /api/stage-objects/search/by-object/{id}: Получение списка этапов для проекта.
GET /api/work-objects/{id}/materials: Получение списка материалов по проекту.PUT /api/work-objects/{objectId}/materials/{materialId}/actual-amount: Обновление фактического количества принятых материалов.PUT /api/work-objects/{objectId}/materials/{materialId}/spent-amount: Обновление количества израсходованных материалов.
GET /api/work-objects/{id}/messages: Получение записей журнала работ для проекта.POST /api/work-objects/{id}/messages: Создание новой записи в журнале.
- Язык: Kotlin
- UI: Jetpack Compose, Material Design 3
- Асинхронность: Coroutines, Flow
- Архитектура: Clean Architecture, MVVM, Repository Pattern
- DI: Hilt
- База данных: Room (для offline-хранения)
- Сеть: Retrofit, OkHttp, Gson
- Навигация: Navigation Compose
- Android Studio Hedgehog | 2023.1.1 или выше
- JDK 17
-
Клонирование репозитория
git clone https://github.com/your-repo/construction-accounting.git cd construction-accounting -
Настройка URL сервера
Укажите URL вашего бэкенд сервера в файле
core/common/src/main/java/com/project/common/Constants.kt:object Constants { const val SERVER_URL = "http://your-server-url:8080/" }
-
Сборка и запуск проекта
Откройте проект в Android Studio, дождитесь синхронизации Gradle и запустите приложение на эмуляторе или физическом устройстве.