Единственной задачей данного раздела является изменение пароля текущей записи. Пользователь должен ввести верный текущий пароль, придуманный новый пароль и повторно ввести новый пароль. После того, как пользователь нажмёт на кнопку «ок», приложение формирует следующий JSON-файл:
{
"old_pass":"1234",
"new_pass":"password123"
}
Сформированный JSON-файл приложение через раздел Http_connection передаёт в удалённый метод «/rpc/reset_password». Если пользователь ввёл корректные данные, сервер вернёт статус 200, что означает отсутствие ошибок.
Раздел «История смена статуса животного»
Задачей данного раздела является отображение истории статусов, присвоенных определённому животному. Полями данного раздела являются:
1) дата изменения статуса;
2) статус животного.
Раздел «Выбор группы животного»
Данный раздел предназначен для отображения пользователю списка созданных ранее групп с возможностью их мульти выбора, которые впоследствии будут назначены определённому животному. Группы в этом разделе представляют собой цветные элементы списка, цвет которых соответствует цвету группы, с названием группы внутри элемента списка.
Раздел «События»
Данный раздел предназначен для графического отображения количества угроз определённой категории и представляет собой круг с разделёнными на несколько секторов, в которых расположены название категории и количество угроз соответствующей категории.
Раздел «Список работников»
Данный раздел предназначен для отображения списка текущего штата сотрудников. Это необходимо, например, для назначения определённой задачи определённому сотруднику.
Раздел «Групповой ввод удоя животных»
Данный раздел предназначен для отображения удоя всех дойных коров выбранной фермы, а также быстрого ввода очередного удоя для каждой коровы из списка по отдельности. Это помогает не заходить в раздел «карточка животного» для ввода значения удоя для каждого конкретного животного, что значительно уменьшает время, затрачиваемое на задачу ввода удоя, также повышает эффективность работников.
Раздел «Ввод удоя животного»
Данный раздел предназначен для графического отображения информации об удоях определённого животного, отсортированной по дням (рис. 19). Раздел отображается как календарь по три месяца. Ячейка календаря содержит информацию о дне, расположенной слева вверху, и об удое, расположенной в центре ячейки. Под календарём расположена следующая информация:
1) среднесуточный удой;
2) общий надой за месяц;
3) общий надой за лактацию.
Раздел «Журнал ввода удоя животного»
Данный раздел предназначен для подробного описания введённых значений удоя определённого животного. Раздел разделён на два блока:
1) текущие введённые значения за утро, день, вечер и дополнительное;
2) журнал изменений.
Первый блок представлен в виде списка и содержит четыре элемента:
1) показания за утро;
2) показания за день;
3) показания за вечер;
4) дополнительные показания.
Каждый элемент разделён на три столбца:
1) дата изменения - текстовое поле;
2) тип изменения - соответствующая картинка;
3) объём удоя - числовое поле.
Второй блок также представлен в виде списка и содержит информацию обо всех изменениях, которые вводили пользователи за всё время. Каждый элемент этого списка содержит:
1) дату изменения;
2) автора изменения;
3) типа изменения;
4) показатели до;
5) показатели после.
Раздел «Авторизация пользователя»
Данный раздел является первоначальным, который видит пользователь. Интерфейс изображён на рис. 21. Задачей данного раздела является идентификация пользователя по связке логина и пароля. После того, как пользователь заполнит поля логина и пароля и нажмёт кнопку «Войти» приложение сформирует следующий JSON-файл и вызовет удалённый метод «/rpc/login»:
{
"email":"login@mail.ru",
"pass":"password"
}
Раздел «Список ферм пользователя»
Данный раздел загружает с удалённого сервера доступные авторизованному пользователю фермы. Пользователь должен выбрать одну из предложенных, чтобы в последующих разделах пользователь мог просматривать информацию в рамках определённой фермы. Раздел выполнен в виде списка с возможностью просмотреть детали каждой фермы
Раздел «Убытки фермы»
Задачей данного раздела является отображение пользователю списка коров, которые приводят к убыткам. Чтобы ферма была эффективной и неубыточной, необходимо своевременно исправлять все угрозы, которые возникают на ферме.
Раздел «Главное меню приложения»
С помощью данного раздела пользователю предоставляются следующие функциональные возможности:
1) смена пароля;
2) смена текущей фермы;
3) просмотр информации о приложении.
Раздел отображает список, в котором и отображается вышеперечисленная информация.
Раздел «Сообщения пользователя»
Данный раздел отображает пользователю список назначенных задач. Приложение получает данные с удалённого сервера, парсит их и отображает в виде списка. Каждый элементы списка содержит информацию о:
1) номер события;
2) имя животного;
3) назначенное время;
4) фамилия, имя и отчество исполнителя;
5) статус события (закрыто, открыто).
Раздел «Создание и редактирование информации о ферме»
Данный раздел служит для создания и редактирования информации о ферме. Доступные поля для редактирования:
1) название организации;
2) часовой пояс, в котором находится создаваемая или редактируемая ферма.
Раздел «Восстановление пароля»
Данный раздел предназначен для восстановления пароля пользователя. Если пользователь забыл пароль или его данные были скомпрометированы, приложение может послать запрос на удалённый сервер с заранее сформированным JSON-файлом:
{
"email":login@mail.ru
}
Раздел «Справка приложения»
С помощью данного раздела пользователь может получить информацию обо всех ключевых функциональных возможностях разработанного приложения. Всего 22 картинки со скриншотами разделов и текстовыми подсказками.
Раздел «Регистрация нового пользователя»
Если пользователь ещё не зарегистрирован в системе, он быстро может это сделать, открыв данный раздел и введя новый, уникальный логин и пароль, а также прочитав и приняв пользовательское соглашение.
Раздел «Сводка по ферме»
Данный раздел является первым основным разделом приложения, задачей которого является предоставление информации о состоянии всей фермы. Данный раздел является сводкой по ферме. Раздел разделён на три блока:
1) информация о поголовье животных на ферме;
2) информация об удое за последние сутки;
3) информация о репродуктивности животных.
В первом блоке приведена информация о количестве животных каждого типа и их изменение за последние сутки. На фермах могут быть животные следующих типов:
1) телка;
2) нетель;
3) первотелка;
4) стельная, дойная;
5) стельная, сухостойная;
6) дойная.
Второй блок отображает количество удоя за текущие сутки и предыдущие. Если удоя за текущие сутки больше, чем за предыдущие, то разница будет отображена зелёным цветом, если меньше - красным.
Последний, третий блок отображает информацию о репродуктивности фермы.
Раздел «Надой животных фермы»
Данный раздел является третьим главным разделом приложения и выполняет функцию отображения пользователю информации о надое всех животных на ферме по дням. Выполнен в виде списка, центральных элементом которого является календарь. Слева вверху отображён день месяца, а в середине - числовое значение надоя. Под календарём расположена информация:
1) о среднесуточном удое на голову;
2) о среднесуточном удое по ферме;
3) об общем надое за месяц;
4) об общем надое за год.
Раздел «Список типовых угроз»
Данный раздел предоставляет пользователю информацию о угрозах на ферме определённого типа. Работник фермы может получить подробную информацию о текущих угрозах на ферме, чтобы своевременно принять все необходимые меры по ликвидации возникшей угрозы.
Раздел «Пользовательское соглашение»
Чтобы пользоваться разработанным приложением, пользователю необходимо принять пользовательское соглашение. Данный раздел отображает пользователю актуальный текст пользовательского соглашения.
Раздел «Просмотр информации о событии»
Ещё одним разделом является «Просмотр информации о событии», с помощью которого пользователь может просмотреть подробную информацию о событии. Здесь пользователь может найти следующую информацию:
1) статус события;
2) имя животного;
3) номер бирки;
4) время наступления события;
5) время исполнения;
6) назначенный ответственный исполнитель;
7) время закрытия события;
8) комментарий.
Раздел «Константы»
Для корректной работы приложения необходимы константы (табл. 2). Было принято решение выделить под них отдельный класс, чтобы не перегружать остальные элементы приложения [23].
Таблица 2
Список констант
|
Константа |
Значение |
|
|
DIALOG_TITLE_REGISTRATION_SUCCESS |
Успешно. Теперь проверьте почту |
|
|
DIALOG_TITLE_SOMETHING_GOES_WRONG |
Произошла неизвестная ошибка. Повторите попытку позже. |
|
|
REGISTER_EMAIL_EXISTS |
Данный email уже зарегистрирован в системе. |
|
|
REGISTER_EMAIL_OK |
На указаный адрес отправлено письмо с подтверждением. Пожалуйста, проверьте почту и перейдите по полученной ссылке. Нажмите "Отправить повторно" для отправки повторного письма. |
|
|
REGISTER_EMAIL_NOT_VALIDATED |
Указанный Вами адрес электронной почты уже зарегестрирован, но не подтверждён. Пожалуйства, проверьте почту и перейдите по полученной ссылке. Нажмите "Отправить повторно" для отправки повторного письма. |
|
|
REGISTER_EMAIL_SMTH_WRONG |
Упс..что-то пошло не так. Повторите попытку через некоторое время либо напишите нам письмо об ошибке. |
|
|
MLK_MORNING |
mlk_morning |
|
|
MLK_DAY |
mlk_day |
|
|
MLK_EVENING |
mlk_evening |
|
|
MLK_ADDITIONAL |
mlk_other |
|
|
cow_not_in_org |
cow_not_in_org |
|
|
email_already_validated |
email_already_validated |
|
|
email_exists |
email_exists |
|
|
email_not_exists |
email_not_exists |
|
|
email_not_validated |
email_not_validated |
|
|
email_not_verified |
email_not_verified |
|
|
group_exists |
group_exists |
|
|
invalid_old_password |
invalid_old_password |
|
|
lact_number_exists |
lact_number_exists |
|
|
mark_exists |
mark_exists |
|
|
new_password_equal_to_old |
new_password_equal_to_old |
|
|
no_cow_id |
no_cow_id |
|
|
not_your_org |
not_your_org |
|
|
org_name_exists |
org_name_exists |
|
|
user_banned |
user_banned |
|
|
user_doesnt_exist |
user_doesnt_exist |
|
|
zero_states |
zero_states |
|
|
invalid_password |
invalid_password |
|
|
SERVER_ANSWER_REGISTER_OK |
email_ok |
|
|
SERVER_ANSWER_TIME_OUT |
time_out |
|
|
SERVER_ANSWER_UNKNOWN_ERROR |
unknown_error |
|
|
LOGIN_TAG_S |
loginTag |
|
|
RECOVER_PASSWORD_TAG_S |
recoverPasswordTag |
|
|
REGISTER_TAG_S |
registerTag |
|
|
ORGANIZATION_LIST_TAG_S |
organization_list |
|
|
CHOOSE_ORGANIZATION_TAG_S |
chooseOrganization |
|
|
MODIFY_ORGANIZATION_TAG_S |
modifyOrganization |
|
|
ADD_ORGANIZATION_TAG_S |
addOrganization |
|
|
SHOW_USER_AGREEMENT_TAG_S |
showUserAgreement |
|
|
DEF_INTERVAL |
1000 |
|
|
NUMBER_OF_SECONDS |
60 |
|
|
mInterval |
DEF_INTERVAL * NUMBER_OF_SECONDS |
|
|
TAG_1 |
TRIO_DATA_FRAGMENT |
|
|
TAG_2 |
Type_DATA_FRAGMENT |
|
|
TAG_3 |
LOSSES_DATA_FRAGMENT |
|
|
TAG_4 |
MESSAGE_DATA_FRAGMENT |
|
|
TAG_5 |
EMPLOYEE_DATA_FRAGMENT |
|
|
TAG_6 |
VIEW_EVENT_DATA_FRAGMENT |
|
|
TAG_7 |
INPUT_MILK_DATA_FRAGMENT |
|
|
TAG_8 |
ANIMAL_CARD_FRAGMENT |
|
|
TAG_9 |
INPUT_MULTIPLE_MILK_DATA_FRAGMENT |
|
|
TAG_10 |
INPUT_MULTIPLE_MILK_JOURNAL_DATA_FRAGMENT |
|
|
TAG_11 |
CHANGE_PASSWORD |
|
|
TAG_12 |
CHOICE_ORGANIZATION |
|
|
TAG_13 |
MODIFY_COW |
|
|
TAG_14 |
MODIFY_OTEL |
|
|
TAG_15 |
MODIFY_HUNT |
|
|
TAG_16 |
USER_MENU |
|
|
TAG_17 |
ORGANIZATION_DETAIL |
|
|
TAG_18 |
ORGANIZATION_MODIFY |
|
|
TAG_19 |
ORGANIZATION_ADD |
|
|
TAG_20 |
ARCHIVED_COWS_FRAGMENT |
|
|
TAG_21 |
INPUT_GROUPED_MILK_FRAGMENT |
|
|
TAG_22 |
COW_STATUS_HISTORY_FRAGMENT |
|
|
TAG_23 |
CHOOSE_COW_GROUP |
|
|
TAG_24 |
ADD_MODE_COW_GROUP |
|
|
ATAG_1 |
CIRCLE_DATA |
|
|
ATAG_2 |
TOTAL_YIELD_DATA |
|
|
ATAG_3 |
ANIMAL_DATA |
|
|
ATAG_4 |
MESSAGE_TIME_DATA |
|
|
ATAG_5 |
MESSAGE_FIO_DATA |
|
|
ATAG_6 |
MESSAGE_STATUS_DATA |
|
|
DICTIONARY_RACE |
cow_race |
|
|
DICTIONARY_MESSAGE_TYPE |
message_type |
|
|
DICTIONARY_MESSAGE_STATUS |
message_status |
|
|
DICTIONARY_COW_STATE |
cow_state |
|
|
DICTIONARY_MESSAGE_CATEGORY |
message_category |
|
|
DICTIONARY_TIMEZONE |
timezone |
|
|
DICTIONARY_MILK_TP |
milk_tp |
|
|
DICTIONARY_MILK_ACT_TP |
milk_act_tp |
|
|
DECIMAL_DELIMITER |
. |
|
|
APP_PREFERENCES |
login_password |
|
|
APP_PREFERENCES_LOGIN |
login |
|
|
APP_PREFERENCES_PASSWORD |
password |
|
|
APP_PREFERENCES_ORGANIZATION_ID |
organization |
|
|
APP_PREFERENCES_ORGANIZATION_NAME |
organization_name |
|
|
APP_PREFERENCES_ORGANIZATION_TIMEZONE |
organization_timezone |
Раздел «База данных словарей»
Когда пользователь авторизовался в приложении в разделе «логин», автоматически с помощью раздела «Http_connection» скачиваются восемь словарей, которые впоследствии используются в некоторых разделах:
1) порода животного;
2) тип сообщения;
3) статус сообщения;
4) статус коровы;
5) категория сообщения;
6) часовой пояс;
7) тип удоя;
8) тип действия удоя.
ER-диаграмма изображена на рис. 8.
Рис. 8 ER-диаграмма базы данных
3. Практическая часть
После разработки архитектуры будущего приложения и реализации всех разделов и важных составляющих android-приложения необходимо протестировать, чтобы выявить критические уязвимости, баги и неточности работы, а также оценить эффективность и быстродействие итогового программного продукта.
Основными критериями оценки эффективности работы android-приложения являются:
1) скорость выполнения задач пользователя;
2) общее быстродействие приложения;
3) способность приложения правильно обрабатывать ошибки, полученные в результате работы;
4) занимаемое место в оперативной памяти;
5) занимаемое место в постоянной памяти;
6) нагрузка на сеть интернет.
Тестирование проводилось на android-смартфоне OnePlus 6 с использованием 4G соединения на скорости 54,5 Мбит/сек.
3.1 Разработанные разделы приложения
«Создание и редактировании информации о группе животного» (AddModCowGroupFragment)
Макет данного раздела (рис. 9) содержит:
1) текстовое поле ввода «название группы животного»;
2) список доступных цветов группы животного в виде сетки из квадратов соответствующего цвета;
3) кнопка «отмена», которая возвращает пользователя в предыдущий открытый раздел;
4) кнопка «сохранить», которая посылает введённые пользователем данные на сервер.
Рис. 9 Интерфейс раздела «Создание и редактирование группы»
«Создание и редактировании информации о животном» (AddModifyCowFragment)
Элементами макета данного раздела (приложение 1 рис. 1) являются:
1) текстовое поле ввода «имя животного» (обязательное поле);
2) текстовое поле ввода «номер бирки животного» (обязательное поле);
3) текстовое поле ввода «дата рождения животного» (обязательное поле);
4) выпадающий список выбора «порода животного» (обязательное поле);
5) выпадающий список выбора «статус животного» (обязательное поле);
6) поле ввода «группа животного»;