Общая информация
Программное обеспечение OdgAssist (EQMS) предназначено для автоматизации и управления документацией в области качества. Под документацией понимаются:
Основная задача, которую решает odgAssist: контроль за правильной реализацией всех процессов, обеспечение актуальности информации и контроль за исполнением.
Минимальный системные требования для программного комплекса odgAssist
Требования к аппаратному обеспечению сервера:
Параметры сервера/количество пользователей | 50-100 | 100 -200 | 250-350 | 500 |
Количество потоков | 4 | 8 | 12 | 16 |
Тактовая частота процессора ( ГГц) | От 2,2 | От 2,1 | От 2,4 | От 2,6 |
Платформа | 64x разрядная | 64x разрядная | 64x разрядная | 64x разрядная |
Оперативная память (ГБ) | 12 | 16 | 24 | 32 |
Дисковое пространство | 250Гб | 500Гб | 1Тб | 1Тб |
Рекомендовано использование RAID для обеспечения резервирования и повышения производительности базы данных.
Требования к программному обеспечению сервера:
Минимальные требования к программно-аппаратному обеспечению рабочей станции пользователя:
+ допустима версия ПО выше указанной
Для обслуживания сервера сотрудниками исполнителя к нему необходим прямой доступ по ssh. Сервер должен иметь доступ в интернет.
Установить приложение можно вручную или автоматически.
Для работы приложения odgassist необходимы следующие программы:
-Postgres 12
-Nginx
-Supervisor
-Open jdk 8
Команды для установки требуемого программного обеспечения:
Обновить и установить пакеты программного обеспечения:
sudo apt-get update && sudo apt-get -y upgrade;
Установить openjdk:
sudo apt-get -y install openjdk-8-jdk;
Скачать и установить Postgres :
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -; RELEASE=$(lsb_release -cs) echo "deb http://apt.postgresql.org/pub/repos/apt/ ${RELEASE}"-pgdg main | sudo tee /etc/apt/sources.list.d/pgdg.list; sudo apt -y install postgresql-12;
Добавить базу данных для odgassist:
sudo -u postgres psql -U postgres -d postgres -c "CREATE DATABASE \"odgassist\" WITH OWNER \"postgres\" ENCODING 'UTF8' LC_COLLATE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8' TEMPLATE template0;"; sudo -u postgres psql -U postgres -d postgres -c "ALTER USER postgres PASSWORD '0000'";
Установить nginx:
apt-get -y install nginx;
Установить supervisor:
sudo apt-get -y install supervisor;
Добавьте пользователя runner:
sudo useradd -m -p $(openssl rand -base64 12) runner
Добавьте необходимые директории для работы приложения odgassist:
sudo mkdir /srv/templates && chmod 777 /srv/templates; sudo mkdir /srv/assist && chmod 777 /srv/assist; sudo mkdir /srv/assist/export && chmod 777 /srv/assist/export; sudo mkdir /srv/assist/html && chmod 777 /srv/assist/html; sudo mkdir /home/dumps && chmod 777 /home/dumps; sudo mkdir /etc/ssl/cuba && mkdir /etc/ssl/odg; sudo mkdir /home/runner/cuba && chown runner:runner /home/runner/cuba;
Скачайте необходимые файлы для работы приложения odgassist:
wget https://wiki.odgassist.ru/lib/exe/fetch.php/odg_assist_5.0:app.jar ; mv odg_assist_5.0:app.jar /home/runner/cuba/app.jar && chown runner:runner /home/runner/cuba/app.jar && chmod +x /home/runner/cuba/app.jar; wget wget https://wiki.odgassist.ru/lib/exe/fetch.php/odg_assist_5.0:nofileonserver.docx && mv odg_assist_5.0:nofileonserver.docx /srv/assist/nofileonserver.docx && chown runner:runner /srv/assist/nofileonserver.docx ; chown runner:runner /srv/assist/nofileonserver.docx;
Добавьте в конфигурацию supervisor файл /etc/supervisor/conf.d/cubaodg.conf:
[program:cuba] command=java -Xms1G -Xmx3G -jar app.jar -port 9090 directory=/home/runner/cuba stdout_logfile=/var/log/supervisor/cuba.log stderr_logfile=/var/log/supervisor/cuba.log autostart=true user=runner
Обновите конфигурацию supervisor:
sudo supervisorctl reread && sudo supervisorctl update; sudo supervisorctl status;
Статус приложения cuba должно быть RUNNING
После запуска приложения подождите 5 минут пока производится настройка базы данных.
Затем переходите к следующему этапу.
Будут установлены следующие пакеты:
-Postgres 12
-Nginx
-Supervisor
-Open jdk 8
Скачайте файл автоматической установки через терминал сервера:
wget https://wiki.odgassist.ru/lib/exe/fetch.php/odg_assist_5.0:install.sh.gz
или по ссылке: install.sh.gz
Разархивируйте документ и запустите его в терминале сервера Ubuntu:
gunzip odg_assist_5.0\:install.sh.gz;
chmod +x odg_assist_5.0\:install.sh;
sudo ./odg_assist_5.0\:install.sh;
После выполнения скрипта подождите 5 минут пока производится настройка базы данных.
Затем переходите к следующему этапу.
После выполнения скрипта перейдите по ссылке:
http://ip_адрес_сервера:9090/app
Отобразится форма авторизации:
Войдите в систему. Логин admin, пароль: admin.
Для работы приложения требуется добавить лицензионный ключ.
Нажмите пункт меню "Администрирование", подпункт "Свойства приложения".
В фильтре поиска вставьте имя ru.licen.
Щелкните дважды по записи и введите ключ в открывшуюся форму:
KEN9fFDUMzufuFgpI2EzCCyHkjdwT93wMC1LXu7MYRAX5JeyZL6J08fNXVtLdM+pqefODyp5tO7wYo40oI7Ovp9cZ8IAOSbXquJl0QNV5XphS0F1IaFNV/8NFBpK9xOAW/Aye04okELab+cqZXP7Gkrc3wiCQ7NnlOtx6tIDiYU=
Добавить ключ, кол-во конкурентных пользователей:
B8yA7lLZQCcmg9dhqChbKM6LDlzzEuZQ/yVhARRXtyIRJG6WAWULfOCFjbzKRi5Vf4Fm1qR/46+shOw1F8UPJ8cGbwlj/dA6AHzD1+9yHnWlMIuUgBj+7MYuMZcNegCK4tdvto7WC54yiwnPhGlP574Le9joq10mSZifo/kbOII=
После добавления ключа необходимо перезапустить приложение через терминал сервера:
sudo supervisorctl restart cuba
Ознакомится с интерфейсом приложения можно перейдя по ссылке: Описание приложения.
Ссылка на скачивание приложения и необходимых файлов:
Все свойства приложения список пополняется периодически: Список
Добавление пользователей осуществляется через пункт меню "Администрирование", подпункт "Пользователи".
В реестре пользователей нажмите "Добавить". В редакторе учетных данных заполните поля.
"Логин" — поле содержит имя пользователя для аутентификации
"Новый пароль" — поле ввода пароля
"Подтверждение пароля" — поле подтверждения пароля
"Полное имя" — поле автоматически заполнится, если заполнены части полного имени: Имя, Отчество, Фамилия
"email" - поле для ввода адреса электронной почты
"Часовой пояс" - в соответствии с которым будут отображаться и вводиться значения типа timestamp
"Группа" — группа доступа, по умолчанию Company
"Должность"
"Язык" — язык интерфейса, устанавливаемый для пользователя
"Маска разрешенных IP"- маска разрешенных IP-адресов, с которых возможен вход в систему.
Маска представляет собой список адресов через запятую. Поддерживаются как адреса формата IPv4, так и адреса формата IPv6. В первом случае адрес должен состоять из четырех чисел, разделенных точками, при этом любая часть вместо числа может содержать знак "*", что означает "любое число".
Адрес в формате IPv6 представляет собой восемь групп по четыре шестнадцатеричные цифры, разделенных двоеточием. Любая группа также может быть заменена знаком "*".
Маска может содержать адреса только одного формата. Наличие адресов формата IPv4 и IPv6 одновременно недопустимо.
Пример: 192.168.*.*
"Активен" - если данный флаг не установлен, то пользователь не может войти в систему. Пользователь не отображается в списке пользователей для выбора исполнителя задачи.
"Отправлять уведомления" - если флаг установлен, то отправка сообщений пользователю производится.
"Подразделение" - подразделение пользователя.
"Должности" - список дополнительных должностей
"Роли" - Список ролей пользователя
"Замещаемые пользователи" — список замещаемых пользователей.
–
Администратор системы может дать возможность пользователю замещать другого пользователя. При этом у замещающего пользователя сессия не меняется, а подменяется набор ролей, ограничений и атрибутов. Все эти параметры текущий пользователь получает от замещаемого пользователя.
Если пользователь имеет замещаемых пользователей, то в правом верхнем углу главного окна приложения вместо простой надписи с именем текущего пользователя отображается выпадающий список.
Окно настройки "Замещение пользователей".
"Пользователь" - текущий редактируемый пользователь. Он будет замещать другого пользователя.
"Замещаемый пользователь" - замещаемый пользователь.
"Дата начала", "Дата завершения" - необязательный период замещения. Вне периода замещение будет недоступным. Если период не указан, замещение доступно, пока не удалена данная запись таблицы.
–
Пункт меню "Администрирование", подпункт "Назначенные задания".
Подпункт меню позволяет настраивать автоматическое выполнение рутинных задач.
Например, обработка документов, рассылка оповещений пользователям и т.д.
Описание:
После активации каждой задачи на нее назначается исполнитель. Исполнитель добавляется в список для рассылки оповещений о новых задачах. Рассылка осуществляется всем пользователям из списка каждые 60 секунд.
Настройка:
Нажмите пункт меню "Администрирование", подпункт "Назначенные задания".
Заполните поля формы:
Defined By: Bean
Bean Name: cuba_Emailer
Method Nmae: processQueuedEmails()
Sheduling Type: Period
Cron Expression: 60
Singleton: V
Описание:
Если у пользователя нет просроченных задач, то ему отправляется весь список задач каждый понедельник.
Если есть просроченные задачи или задачи близкие к крайнему сроку, то оповещения отправляются каждое утро в 9:00.
Настройка:
Нажмите пункт меню "Администрирование", подпункт "Назначенные задания".
Заполните поля формы:
Defined By: Bean
Bean Name: odgassist5_TasksReportService
Method Nmae: sendTaskStatesToAllUsers
Sheduling Type: Cron
Cron Expression: 0 0 9 * * *
Пример содержимого письма:
Отправка оповещений по действиям
Описание:
В список на отправку попадают отчеты:
ru.od.notify_before_days
ru.od.notify_before_days
- параметр, который хранит количество дней. (Уведомить за n дней).
Настройка производится через пункт меню "Администрирование", подпункт "Свойства приложения".
В поле "Поиск по имени свойства" ввести: ru.od.notify_before_days
Настройка:
Нажмите пункт меню "Администрирование", подпункт "Назначенные задания".
Заполните поля формы:
Bean Name: odgassist5_TaskReportService
Method Nmae: notifyUserAboutOverdueActions
Описание полей формы настройки "Назначенное задание":
0 0 * * * * - начало каждого часа каждого дня. */10 * * * * * - каждые 10 секунд. 0 0 8-10 * * * - в 8, 9 и 10 часов каждого дня. 0 0/30 8-10 * * * - 8:00, 8:30, 9:00, 9:30 и 10 часов каждого дня. 0 0 9-17 * * MON-FRI - каждый час с 9 до 17 по рабочим дням. 0 0 0 7 1 ? - каждое Рождество в полночь.
Start date имеет смысл указывать только для "нечастых" заданий - раз в 1 час, 1 сутки и т.п.
Для Singleton-задач в кластерном деплойменте рекомендуется всегда устанавливать таймаут в реалистичное значение. Если останавливается узел кластера, выполняющий задачу, то при стандартном значении другие узлы кластера будут ждать 3 часа перед тем, как запустить задачу снова.
Если Start date не указано, то Time frame не принимается во внимание, т.е. задание будет запущено в любое время после прохождения промежутка времени Period после предыдущего выполнения задания.
Для синглтон-заданий порядок перечисления серверов указывает их приоритет - первый имеет больший приоритет чем последний. Сервер с большим приоритетом перехватит выполнение синглтона следующим образом: если сервер с большим приоритетом обнаруживает, что предыдущий раз задание было выполнено сервером с меньшим приоритетом, то он запускает задание независимо от того, пройден ли Period или нет. Приоритет серверов работает только в случае Scheduling type равного Period и не указанного атрибута Start date. В противном случае, старт происходит в одно и то же время, и перехват невозможен.
Если задание является синглтоном, то в текущей реализации регистрация факта запуска производится в любом случае, независимо от данного признака.
Если задание является синглтоном, то в текущей реализации регистрация факта завершения производится в любом случае, независимо от данного признака.
Задание также имеет признак активности, который устанавливается в экране списка заданий. Неактивные задания не запускаются.
End article
Рутина по проверке сроков актуальности версий документов.
Выполняется по крону каждый день в 1:30. (время можно изменить).
Действия рутины:
Формируется список всех версий документов у которых дата "Актуален до" закончилась вчерашним днем.
Изменяется статус этих версий на "Архив", сами версии перемещается в архив.
Затем в каждом документе ищется версия документа у которой дата актуальности "сегодня" и если такая есть, то ставит ее как "Текущая версия" документа.
Если у документа срок начала актуальности уже прошел, то рутина его не обработает и потребуется вручную изменить статус такого документа на "Согласован". А предыдущую версию отправить в "Архив".
Если у документа не было текущей версии. Рутина установит "Текущей версией" первую версию документа.
Настройка:
Нажмите пункт меню «Администрирование», подпункт «Назначенные задания». На вкладке «Назначенные задания» найдите запись «odgassist5_DocumentService». Выберите ее и нажмите «Изменить».
Сверьте и отредактируйте при необходимости заполненные параметры согласно изображению выше. Если запись отсутствует, то нажмите кнопку «Добавить» и заполните форму как на изображении выше. После сохранения проверьте, что задание активировано. Если отметка не установлена, то выделите запись и нажмите «Активировать».
Нажмите пункт меню "Администрирование", подпункт "Журнал пользовательских сессий". В поле динамических фильтров нажмите "Добавить условие поиска".
После добавления фильтра выберите тип:
Реестр отобразит все сессии. Далее для отображения только активных добавьте фильтр "Завершена"
Также измените тип фильтра "Установлен" и выберите "Нет".
Логин системного пользователя указывается в local.app.properties Ключ cuba.jmxUserLogin. По умолчанию значение admin
Порядок действий
Создайте тестовую группу, проверьте в свойствах время ее создания.
Если оно отлично от требуемого, но время на сервере настроено верно, то добавьте ключ временной зона в файл конфигурации supervisor.confd/файл_настройки.
Пример:
command=java -Xms3G -Xmx3G -jar -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./ -XX:+ExitOnOutOfMemoryError -Duser.timezone=Europe/Moscow app.jar -port 9090
Блокировка в UI проверялась только в "Задача на разработку документа" и "Расследование".
Также нужно помнить, что блокировка не снимается автоматически, если пользователь, например, закрыл браузер с открытым редактором записи.
В таком случае она снимется только по окончании таймаута сессии, т.к.
Необходимо правильно завершать работу, нажать "Сохранить без завершения задачи процесса" или "Завершить", только после закрывать браузер.
Настройка блокировки на запись Ссылка на документацию cuba:https://doc.cuba-platform.com/manual-latest-ru/pessimistic_locking.html
Рассмотрим блокировку на примере разработки документов.
Перейти в меню "Администрирование" - "Блокировки"
Чтобы добавить блокировку нужно перейти во вкладку "Настройка"
Нажать кнопку "Создать"
Заполнить поля
Пример заполнения:
Нажать кнопку "ОК".
Для применения изменений нужно нажать "Перезагрузить конфигурацию"
После сообщения о перезагрузки конфигурации необходимо проверить сработала ли настройка. Для этого необходимо открыть задачу на разработку документа 2мя пользователями одновременно.
Версия приложения 2024.02 и выше.
Делегирования записи с одного пользователя на другого в трех реестрах:
Доступность функционала определяется свойством ru.od.enable_reassignation.
Как работает:
Система выполнит поиск всех полей с типами Пользователь
Если значение поля равно "С пользователя", то поменяет "На пользователя"
Список пользователей
Если элемент списка равен "С пользователя", то уберет его из списка, и если нет в списке "На пользователя", то добавит его в список.
Система выполнит поиск всех переменных процесса и проведет аналогичные операции, что описаны выше.
Система переназначит активные задачи С пользователя На пользователя, если такие имеются.
Меню: Документы-Документы пользователей
Содержит в себе ссылку на пользователя и документ, а также 2 признака: создавать ознакомление, создать уведомление.
Теперь при любом сохранении версии документа со статусом Согласован:
Будет выполнена попытка создать ознакомление по распределению, указанному в версии документа.
Если для пользователя нет записи в *, то она будет создана, ознакомление будет создана, уведомление будет отправлено.
Если для пользователя есть запись в *, то Ознакомление будет создано, если установлен соответствующий признак.
Если ознакомление создано, то Уведомление будет создано, если установлен соответствующий признак.
Будет выполнен поиск в * для соответствующего документа
В любом случае, при создании ознакомления будет выполняться поиск плана обучения сотрудника, если такой имеется, то к нему будет привязан документ и ознакомление.
Записи в * можно массово редактировать (признаки: создавать ознакомление, создать уведомление)
Для чего может понадобиться этот функционал
При заполнении карточки события пользователь мог допустить ошибку и указать неправильно ответственного исполнителя.
Это заметили на этапе, где корректировка карточки уже невозможна.
Решение
1. Выберите запись в реестре и нажмите кнопку "Где задача?".
2. Перейдите на вкладку "Статус".
3. На вкладке статус в закладке Variables выберите переменную для корректировки. В примере это исполнитель задач начальника ООК.
Выберите запись и нажмите "Изменить"
4. Откроется окно редактирования значений. Нажмите на иконку "Многоточие".
Выберите нового пользователя и реестре пользователей. Старого пользователя удалите.