Файл: Разработка службы курьерской доставки в мобильном приложении.docx
Добавлен: 12.12.2023
Просмотров: 156
Скачиваний: 2
СОДЕРЖАНИЕ
Раздел 1. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ
1.1 Общая характеристика организации
1.3 Анализ существующих решений
Раздел 2. РАЗРАБОТКА СЦЕНАРИЕВ ПОВЕДЕНИЯ ПРИЛОЖЕНИЙ НА ЭТАПАХ ВЫПОЛНЕНИЯ КУРЬЕРСКОГО ЗАКАЗА
2.1 Алгоритм формирования заказа и поиска курьера
2.2 Алгоритм выполнения курьерского заказа
Раздел 3. ПРОЕКТИРОВАНИЕ АРХИТЕКТУРЫ СЕРВЕРНОЙ ЧАСТИ СИСТЕМЫ И МОБИЛЬНЫХ ПРИЛОЖЕНИЙ
3.1 Архитектура серверной части системы
3.2 Выбор оптимальной базы данных для разрабатываемой системы
3.3 Архитектура мобильных приложений
3.4 Средства разработки мобильных приложений
Раздел 4. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ СЕРВЕРНОЙ ЧАСТИ СИСТЕМЫ И МОБИЛЬНЫХ ПРИЛОЖЕНИЙ
4.1 Разработка структуры базы данных
4.2 API для работы с мобильными приложениями
4.3 Структура Android приложения
4.4 Проверка выполнения разработанных сценариев для реализованной системы
4.2 API для работы с мобильными приложениями
Рисунок 7 – Иерархия классов API
API доступно по адресу: «https://api.a3technology.ru/ version / section / methodAlias» и имеет следующие методы:
Секция common.
В секции commonпредставлены универсальные методы,которые можно применить как в клиентском, так и в курьерском приложениях. Например, смена аватара.
-
calcCost () - Расчет цены из точки А в точку Б; -
rate ($token= '') - Оценить заказ и оставить отзыв; -
setAvatar ($token= '') - Загрузить аватар; -
addOrderPhoto ($token= '') - Загрузка фото заказа; -
addUpdateDevice () - Добавить либо обновить devicetoken.
Секция client
Секция clientсодержит Apiметоды для работы с клиентским приложением.
-
sendSmsCode () - Получить пин клиента для авторизации; -
confirmAccountByCode () - Получить токен авторизации; -
getProfile ($token=««) - Клиент получает данные профиля; -
addOrder ($token=««) - Добавить заказ пользователя; -
confirmOrder () - Подтвердить заказ; -
getOrderStatus ($token=««) - Получить статус заказа ; -
getCourierProfile($token=««) - Получить данные профиля курьера; -
setProfileData ($token=««) - Изменить данные профиля; -
geoLog ($token=««) - Записать лог местоположения клиента; -
getOrderHistory ($token=««) - Получить count заказов клиента из истории, со сдвигом offset; -
getAddresses ($token=««) - Получить список адресов клиента; -
setFaveAddress ($token=««) - Добавить или удалить адрес в список избранного; -
trackCourier ($token=««) - последняя координата курьера; -
signup () - Зарегистрировать клиента с указанием личной информации; -
getDeliveryOptions () - получить список активных доп. опций заказа; -
bindCard ($token=««) - Привязать карту пользователя; -
getBindedCards ($token=««) - Получить список привязанных пластиковых карт; -
unbindCard ($token=««) - Удалить привязанную карту; -
setCardAlias ($token=««) - Изменить пользовательское название карты; -
payWithCard ($token=««) - оплатить с помощью карты; -
rejectOrder ($token=««) - отменить заказ; -
logout ($token=««) - выйти из текущего аккаунта; -
getOrderData ($token=««) - Получить данные заказа.
Секция courier
Методы для работы с курьерским приложением.
-
signUpRequest () - Запрос курьера на регистрацию Номер телефона должен быть уникальным; -
authorize () - Получить токен, данные профиля и состояния курьера по логину и паролю; -
getProfile ($token=««) - Курьер получает данные профиля; -
setActive ($token=««) - Управление статусом занятости курьера; -
checkOffer ($token=««) - Проверить предложения работы для курьера; -
choiceOrder ($token=««) - Выбрать текущий доступный заказ; -
rejectOrder ($token=««) - Отклонить текущий доступный заказ; -
getOrderData ($token=««) - Подробные данные о заказе; -
setOrderState ($token=««) - Управление статусом заказа; -
geoLog ($token=««) - Записать лог местоположения курьера; -
getStatus ($token=««) - Получить статус курьера; -
getOrderHistory ($token=««) - Получить count заказов курьера из истории, со сдвигом offset; -
logout ($token=««) - выйти из текущего аккаунта; -
restorePassword () - Получить СМС с пин-кодом восстановления пароля; -
changePass () - Сменить пароль курьера; -
addOrderSign () - Загрузить файл с росписью клиента на экране устройства курьера; -
setProfileData ($token=««) - Записать лог местоположения курьера; -
bindCard ($token=««) - Привязать карту курьера; -
getBindedCards ($token=««) - Получить список привязанных пластиковых карт; -
unbindCard ($token=««) - Удалить привязанную карту; -
setCardAlias ($token=««) - Изменить пользовательское название карты; -
getEarning ($token=««) - получить заработок курьера; -
getOrders ($token=««) - получить список активных заказов курьера.
Для обращения ко всем методам необходимо использовать HTTP POST-запрос с как минимум одним параметром (токен пользователя). Все методы написаны на языке PHP.
Ниже, для наглядного примера реализации методов, приведен листинг метода получения данных о клиенте:
Рисунок 8 – Мметод получения данных о клиенте PHP
Как видно из рисунка 8, для того чтобы получить данные о пользователе, необходимо в параметрах POST запроса указать токен пользователя.
Пример этого же метода, на языке Java, со стороны клиентского мобильного Android приложения приведен на рисунке 9:
Рисунок 9 – Метод получения данных о клиенте Java
4.3 Структура Android приложения
Для разработки мобильных приложений использован паттерн MVP.
Model
Рисунок 10 – Классы компонента паттерна MVP – Model
Классы компонента Model, в двух приложениях, представляют из себя «сущности», содержащие только их свойства (члены классов) и set/get методы.
Ниже приведен листинг класса Place, используемый в клиентском приложении для реализации модели для «Избранных» мест пользователя.
public class Place extends RealmObject {
@PrimaryKey
private intid;
private String mPrimaryAddress, mSecondaryAddress;
public void setIncId(intid){
this.id = id;}
public intgetId(){
return this.id;}
//sets/gets
public void setPrimaryAddress(CharSequencepr_addrass){
this.mPrimaryAddress= pr_addrass.toString();}
public String getPrimaryAddress(){
return this.mPrimaryAddress;}
public void setSecondaryAddress(CharSequencesec_address){
this.mSecondaryAddress= sec_address.toString();
}
public String getSecondaryAddress(){
return this.mSecondaryAddress;
}}
Можно заметить, что класс Place наследуется от RealmObject. Дело в том, что в проект интегрирована база данных Realmдля локального хранения информации о сущностях.
Данная база данных позволяет, в прямом смысле, в одну строку реализовывать основные транзакции необходимые для работы и имеющиеся в SQLite.
View
Рисунок 11 – Классы компонента паттерна MVP –View
Весь графический интерфейс приложений реализован в Activity или в Fragment. Активности и фрагменты взаимодействуют с моделями через Presenter-ы. Для этого, в последних определяются интерфейсы для управления активностями, а в самих активностях реализуются методы этих интерфейсов.
Листинг примера реализации представлен в приложении 1.
Как видно из листинга, класс реализует сразу три интерфейса: для прослушивания входящих СМС, для обработчика нажатий и для интерфейса из, Presenter-а для этой активности.
Presenter
Рисунок 12 – Классы компонента паттерна MVP–Presenter
Presenter для активности, описанной в предыдущем блоке (View) представлен в приложении 2.
Общая структура
«Страницы» в Android приложении называются активити (Activity). Активити, если она должна что-то показывать пользователю, состоит из разметки графического интерфейса, написанной в формате XML, и кода на языке Java, отвечающего за работу интерфейса. Активити могут содержать фрагменты – сущности, тоже имеющие свой жизненный цикл схожий с активити, однако фрагмент не может существовать вне активити.
Рисунок 13 – Жизненный цикл активности (экрана в android приложении)
Можно использовать для одного и того же активити разные фрагменты, что придает гибкость и вариативность в процессе разработки.
На рисунке 14 показан простой пример в виде XML кода для WebActivity используемый в приложениях проекта, а также код Java для этого XML файла.
Рисунок 14 – XML разметка класса WebActivity
Рисунок 15 – java код