После того, как пользователь авторизовался, приложение отображает следующий раздел - «Список ферм пользователя». Пользователь может выбрать одну из предложенных ферм или перейти в раздел «Создание и редактирование информации о ферме». Также присутствует механизм автоматического выбора ферм, если в специальном файле во внутренней памяти устройства «login_password.xml» есть информация о выбранной ферме.
Когда пользователь выбрал нужную ферму, приложение отображает «Главный раздел», который содержит в себе пять других разделов: «Сводка по ферме», «Список животных», «Надой животных фермы», «события», «Главное меню приложения».
Пользователь может переключаться между этими пятью разделами свайпами слева-направо или справа-налево, а также по клику в нижнем баре по соответствующему значку. По умолчанию, отображается первый раздел - «Сводка по ферме».
Из раздела «Сводка по ферме» пользователь может попасть в раздел «Групповой ввод удоя» по клику на одно из четырёх полей: утреннее, дневное, вечернее, дополнительное.
Из раздела «Список животных» пользователь может попасть в один из трёх разделов: «Список архивных животных», «Создание и редактирование информации о животном» и «Карточка животного».
Из раздела «Список архивных животных» по клику на элемент списка пользователь может попасть в раздел «Карточка животного».
Из раздела «Карточка животного» пользователь может попасть в один из шести разделов - «Создание и редактирование информации о животном», «Ввод удоя животного», «Создание и редактирование информации об охоте животного», «Создание и редактирование информации об отелах животного», «Создание и редактировании информации о группе животного» и «История смена статуса животного».
Из раздела «Ввод удоя животного» пользователь по клику на ячейку календаря нужного дня может попасть в раздел «Журнал ввода удоя животного».
Из раздела «События» пользователь может попасть в один из двух разделов: по клику на сектор внешнего круга - «Список типовых угроз», по клику на центральный круг - «Убытки».
Из раздела «Список типовых угроз» пользователь по клику на один из предложенных типов угроз может попасть в раздел «Сообщения пользователя».
Из раздела «Сообщения пользователя» пользователь по клику по элементу списка может попасть в раздел «Просмотр информации о событии».
Из последнего из пяти главных разделов «Главное меню приложения» пользователь может попасть в один из четырёх разделов:
1) при клике на кнопку «Пользователь» - в раздел «Смена пароля»;
2) при клике на кнопку «Справка» - в раздел «Справка приложения»;
3) при клике на кнопку «Список организаций. Выбрано» - в раздел «Список ферм пользователя»;
4) при клике на кнопку «О программе» - в раздел «О приложении»;
Из раздела «Список ферм пользователя» по клику на картинку «подробнее» пользователь может попасть в раздел «Создание и редактирование информации о ферме».
Последней возможностью в разделе «Главное меню приложения» является переход пользователя в раздел «Авторизация пользователя» по клику на кнопку «Выйти из учётной записи».
2.4 Архитектура приложения
Архитектура приложения является «клиент-серверная». Клиент-серверная архитектура [22] - набор правил взаимодействия между двумя и более программным обеспечением, один из которых является поставщиками услуг, а все остальные - заказчиками услуг. Соответственно, поставщики услуг называются серверы, а заказчики услуг - клиентами. Общение между клиентом и сервером обычно происходит через вычислительную сеть, обычно через сеть интернет. Программы-клиенты посылают запросы, а программы-серверы, получив такие запросы, обрабатывают их и выполняют определённый действия, такие как сохранение новых данных, обработка существующих данных, отправку существующих данных программе-клиенту, а также удаление данных.
У такой архитектуры есть следующие достоинства:
1) все данные хранятся на сервере, где организовать безопасность намного легче, чем на клиентах;
2) все данные хранятся на сервере, поэтому легче настроить контроль выдаваемы полномочий доступа к данным.
3) большинство ресурсозатратных вычислений выполняются на сервере, поэтому требования к устройствам-клиентам снижаются.
Как и достоинства у данной архитектуры существуют недостатки:
1) неработоспособный сервер означает неработоспособная вся система в целом;
2) требуются дополнительные специалисты в этой области;
3) высокая стоимость оборудования.
Основным элементов в архитектуре разработанного приложения-клиента является класс приложения «AgrobiodataApp.kt». Этот класс содержит параметры, необходимые для работы всех других разделом, а также для постоянного доступа к ним.
Следующими важными элементами приложения является классы активности. Всего реализовано пять активности, которые выполняют каждая свою задачу:
1) раздел «Логин» (LoginActivity), отвечает за авторизацию пользователя и получение специального ключа авторизации - token. С помощью этого ключа происходит выполнение всех действий пользователя. Token формируется на стороне сервера и обновляется раз в день. Также присутствует возможность сохранение связки введённого логина и пароля во внутренней памяти устройства для дальнейшего автоматической авторизации пользователя без необходимости ручного ввода;
2) раздел «О приложении» (AboutActivity), отвечает за отображение авторизованному пользователю информации об приложении:
a. логотип приложения;
b. версия и дата сборки приложения;
c. правообладатель приложения;
d. пользовательское соглашение;
e. обратная связь с разработчиком.
3) раздел «Справка» (ReferenceActivity), отвечает за отображение пользователю краткую справку о функциях различных разделов приложения, выполненную в графическом виде.
4) раздел «Пользовательское соглашение» (UserAgreementActivity), отвечает за отображение пользователю информации о пользовательском соглашении. Само пользовательское соглашение хранится во внутренней памяти устройства в виде текстового файла.
5) раздел «Главный раздел» (TrioFragmentHolder), является важным разделом, который содержит в своём составе 5 других разделов разной функциональности.
Все остальные разделы реализованы в виде отдельных фрагментов, встроенных в вышеописанные активности. Список разделов, реализованных в приложении:
1) «Создание и редактировании информации о группе животного» (AddModCowGroupFragment);
2) «Создание и редактировании информации о животном» (AddModifyCowFragment);
3) «Создание и редактировании информации об охоте животного» (AddModifyHuntFragment);
4) «Создание и редактировании информации об отелах животного» (AddModifyOtelFragment);
5) «Карточка животного» (AnimalCardFragment);
6) «Список животных» (AnimalsFragment);
7) «Список архивированных коров» (ArchivedCowsFragment);
8) «Смена пароля пользователя» (ChangePasswordFragment);
9) «История смена статуса животного» (ChangeStatusHistoryFragment);
10) «Выбор группы животного» (ChooseGroupFragment);
11) «События» (CircleCategoryFragment);
12) «Список работников» (EmployeeFragment);
13) «Групповой ввод удоя животных» (GroupedInputMilkFragment);
14) «Ввод удоя животного» (InputMultipleMilkFragment);
15) «Журнал ввода удоя животного» (InputMultipleMilkJournalFragment);
16) «Авторизация пользователя» (LoginFragment);
17) «Список ферм пользователя» (LogOrganizationsListFragment);
18) «Убытки фермы» (LossesFragment);
19) «Главное меню приложения» (MainMenuFragment);
20) «Сообщения пользователя» (MessageFragment);
21) «Создание и редактирование информации о ферме» (ModDelOrganizationFragment);
22) «Восстановление пароля» (RecoverPasswordFragment);
23) «Справка приложения» (ReferenceFragment);
24) «Регистрация нового пользователя» (RegisterFragment);
25) «Сводка по ферме» (SummaryFragment);
26) «Надой животных фермы» (TotalYieldFragment);
27) «Главный раздел» (TrioFragmentHolder);
28) «Список типовых угроз» (TypeFragment);
29) «Пользовательское соглашение» (UserAgreementFragment);
30) «Дополнительное меню» (UserMenuFragment);
31) «Просмотр информации о событии» (ViewEventFragment).
Для обеспечения работоспособности всех разделов были реализованы следующие вспомогательные разделы:
1) раздел «Константы» (Constants) - является хранилищем переменных, которые являются константами. Эти константы используются в большинстве разделов;
2) раздел «Работа с сервером» (Http_connection) - является разделом, задачей которого является формирование запроса, передачи данных на удалённый сервер, а также получение ответных данных и передача их в соответствующий раздел для дальнейшей обработки;
3) раздел «База данных словарей» (DictionaryDB) - раздел, который формирует и поддерживает работу локальной базы данных, в которой хранится информация о породах коров, их статусе, временных зонах, типе удоя и другие;
4) раздел «Парсинг данных» (ParseTasks) - раздел, который преобразовывает полученные от удалённого сервера данные в формат, необходимый для определённого раздела;
5) раздел «Вспомогательные функции» (SubsidiaryUtils) - раздел, в котором собраны все функции для обработки строковой, числовой и иной информации;
6) раздел «Работа с сохранёнными данными» (PreferenceHelper) - раздел для чтения, записи и обработки параметров логина, пароля и выбранной фермы. Эти данные необходимы для автоматической авторизации пользователя.
Графическое представление архитектуры приложения изображено на рис.5.
Рис. 7 Архитектура android-приложения
2.5 Фрагменты приложения
Раздел «Создание и редактировании информации о группе животного»
Данный раздел предназначен для создания или изменения существующей группы у животного. Всем животным может быть присвоена одна или несколько идентификационных групп, по которым можно определить животное. В приложении группы имеют название и цвет. Группы отображаются в карточке животного, а также в разделе «список животных». Цвет группы может быть одним из следующих: ff3823, 0c59cf, 029c48, ffa834, 40bcf0, 7e2199, a88df7, bb5430, 18e4a5, ffd603, 000000.
После того, как пользователь выбрал название и текст группы, приложение проверяет правильность названия и вызывает удалённый POST метод «/v_grp» на сервере, в который передаёт сформированный JSON-файл:
{
"org_id":"12",
"grp_name":"GroupName",
"color":"#0c59cf"
}
Если всё сформировано верно, сервер вернёт статус 204, который означает, что группа создана.
Чтобы изменить существующую группу приложение выполнит аналогичные действия, но с методом PATCH.
Раздел «Создание и редактировании информации о животном»
Данный раздел предназначен для создания и редактирования информации о животном. В этом разделе возможно изменять следующие поля: имя, номер бирки, дата рождения, порода, статус животного, группы, комментарий.
После того, как пользователь заполнил все обязательные поля и нажал кнопку «ок», приложение формирует следующий JSON-файл:
{
"org_id":"12",
"name":"CowName",
"mark":"001",
"cow_state_cl_cd":"cow_state_mlk",
"race":"rc_black_angus",
"birthday":"2019-01-01",
"cow_comment":" cow comment",
"tags":
["Blue","Green"]
}
Приложение вызывает удалённый метод «/v_cows?select=cow_id» и передаёт сформированный заранее JSON-файл с информацией о новом животном. Если все поля заполнены верно и нет дублирующей записи в базе данных, то сервер вернёт статус 204, который означает, что создана новая запись с информацией о животном.
Раздел «Создание и редактировании информации об охоте животного»
Предназначен для добавления и редактирования информации об охоте животного. Доступные поля для заполнения: дата охоты, осеменение, стельность.
Раздел «Создание и редактировании информации об отелах животного»
Задачами раздела являются создание и редактирование информации об отелах животного. Полями являются:
1) номер отела;
2) дата отела;
3) подтверждение отела;
Раздел «Карточка животного»
Задачей данного раздела является отображение информации о животном. Раздел отображает следующие поля:
1) имя животного;
2) номер бирки;
3) дата рождения;
4) порода;
5) средне суточный удой за всё время;
6) группы;
7) статус животного;
8) комментарий;
9) отелы;
10) охоты.
Раздел «Список животных»
Реализованный раздел является вторым главным разделом в приложении и отображает пользователю всех животных выбранной ранее фермы. Для удобства восприятия информация разбита на четыре столбца:
1) имя и бирка животного;
2) группы;
3) день лактации;
4) удой.
Первый столбец отображает имя и бирку животного, записанные через дефис. Второй - группы, изображенные в виде цветных прямоугольников, цвет которых соответствует цвету определённой группы. Третий столбец содержит информацию о количестве дней с последней лактации. Последний, четвёртый, столбец отображает количество удоя, полученное в среднем от животного.
Раздел «Список архивированных коров»
Данный раздел является аналогом раздела «список животных», только отображает список архивированных животных. Раздел отображает список животных со следующими полями:
1) имя и бирка животного;
2) группы животного;
3) удой.
Для визуального отличия раздела «архивированные животные» от «список животных» в первом разделе введен водяной знак «Архив».
Раздел «Смена пароля пользователя»