Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.
Информация
iconfalse

Сервис для работы с мониторами процессов, их создания, получения, обновления, удаления.

Примечание
iconfalse

ru.intertrust.cmj.rest.tunable.object.processes.service.MonitorProcessingServiceImpl

Подсказка
iconfalse

extends: -

properties

Создание нового монитора для процесса, выполняющегося на сервере.

Параметры:

  • processTitle - String - заголовок процесса
  • currentStageTitle - String - заголовок первого этапа процесса
  • handlerName - String - имя обработчика, который стартует процесс
  • data - TunableObjectREST.Resource
  • params - Map<String,String>- параметры, необходимые для работы, по умолчанию в них информация о клиентском контексте
  • httpSessionId - String- идентификатор http-сессии пользователя, в которой он запустил операциюclientId - String -идентификатор вкладки пользователя, в которой он запустил операцию                          

    name

    return value

    description

    createMonitor

    get

    ProcessMonitor

    methods

    name

    return value

    description

    createMonitor

    ProcessMonitor

     ProcessMonitor createMonitor(String processTitle, String currentStageTitle, String handlerName, TunableObjectREST.Resource data,
                Map<String, String> params, String httpSessionId, String clientId);

    Создание нового монитора для проесса, выполняющегося на сервере

    @param processTitle - - заголовок процесса
         * @param currentStageTitle заголовок первого этапа процесса
         * @param handlerName       имя обработчика, который стартует процесс
         * @param params            параметры, необходимые для работы, по умолчанию в них информация о клиентском контексте
         * @param httpSessionId     идентификатор http-сессии пользователя, в которой он запустил операцию
         * @param clientId          идентификатор вкладки пользователя, в которой он запустил операцию

    @return монтитор процесса

    deleteMonitorboolean

    Удаляет монитор из хранилища

    @param monitorId
         * @return - true, если монитор удалён

    getMonitorIProcessMonitorgetAll  List<IProcessMonitor>MonitorProcessingServiceПолучения сервиса из JS-обработчика

    getData

    TunableObjectREST.Resource

    Возвращает ресурс, необходимый клиенту для использования на текущем шаге процесса

    Параметры:

    • monitorId - String - UNID монитора процесса

    deleteMonitor

    Boolean

    Удаляет монитор из хранилища

    Параметры:

    • monitorId - String - UNID монитора процесса

    getMonitor

    IProcessMonitorВозвращает монитор процесса

    getAll

    List<IProcessMonitor>Возвращает мониторы всех процессов в системе

    getAllByPerson

    IProcessMonitor    List<IProcessMonitor> getAllByPerson(SOPersonSystem person);List<IProcessMonitor>

    Возвращает мониторы для всех запущенных процессов указанного пользователя@param

    Параметры:

    person -
    • владелец процессов

         * @return - мониторы всех процесов, запущенных указанным ползователем

    getAllByClientId

      List<IProcessMonitor> getAllByClientId(String clientId);
    List<IProcessMonitor>

    Возвращает все мониторы проессовпо процессов по идентификатору активной вкладки браузера     *
         * @param

    Параметры:

    • clientId - String - идентификатор сессии web-клиента. Привязан к вкладке браузера
         * @return
    getParams(String monitorId)

    getParams(String monitorId);

    Возвращает патаметры процесса
         *
         * @param monitorId
         * @return параметры процесса

    getData

        TunableObjectREST.Resource getData(String monitorId);

    Возвращает ресурс, необходимый клиенту для испльзования на текущем шаге процесса
         *
         * @param monitorId
         * @return

    setStatus

    Установка опрдленного статуса процесса

    setStatus(String monitorId, IProcessMonitor.Status status);

    * @param monitorId
         * @param status    устанавливамый статус

    setServerStatusУстановка опредленного статуса серверной обработки процесса.
         *
         * @param monitorId
         * @param serverStatus устанавливамый статус
         */
        void setServerStatus(String monitorId, IProcessMonitor.ServerStatus serverStatus);
    prepareForHandlerProcessMonitor/**
         * Заполнение монитора данными перед запуском обработчика
         *
         * @param monitorId
         * @param currentStageTitle - заголовок текущего состояния процесса для отображения
         * @param handlerName       - название обработчика, который должен вызваться в рамках процесса
         * @param data              - ресурс, необходимый для следующего шаге процесса
         * @param httpSessionId     - дентификатор http-сессии пользователя
         * @param clientId          - идентификатор сессии web-клиента. Привязан к вкладке браузера
         */
        ProcessMonitor prepareForHandler(String monitorId, String currentStageTitle, String handlerName, TunableObjectREST.Resource data,
                String httpSessionId, String clientId);
    updateByHandler/**
         *

    getParams

    Map<String, String>

    Возвращает параметры процесса

    Параметры:

    • monitorId - String - UNID монитора процесса

    methods

    name

    return value

    description

    updateProgress


    Обновление прогресса операции, выполняющейся на сервере и отправка её на клиент по WebSocket

    Параметры:

    • monitorId - String - UNID монитора процесса
    • total - Integer - сколько необходимо для завершения операции, в %
    • done - Integer - сколько пройдено, в %

    updateByHandler


    Запись в монитор разультатов работы обработчика

         *
         * @param monitorId
         * @param command          

    Параметры:

    • monitorId - String - UNID монитора процесса
    • command - IProcessMonitor.Command - команда для выполения веб-клиентом
         * @param currentStageTitle
    • currentStageTitle - String - заголовок текущего состояния процесса для отображения
         * @param data              
    • data  - TunableObjectREST.Resource - ресурс, необходимый для следующего шаге процесса
         * @param params            
    • params - Map<String,String> - параметры процесса, необходимые на следующих шагах проесса

         */
        void updateByHandler(String monitorId, IProcessMonitor.Command command, String currentStageTitle, TunableObjectREST.Resource data,
                Map<String, String> params);
    notifyClients(String monitorId);  
     Отправка

    updateStatus


    Устанавливает статус в монитор с сохранением в базу

    Параметры:

    setStatus


    Установка опредленного статуса процесса

    Параметры:

    setServerStatus


    Установка опредленного статуса серверной обработки процесса

    Параметры:

    notifyClients


    Отправка представления монитора всем клиентам по WebSocket с целью информирования о текущем состоянии процесса

    * @param monitorIdПараметры:

    • monitorId - String - UNID монитора процесса

    sendToClient


    Отправка представления монитора на клиент по WebSocket с целью выполнения действий на клиенте

         *
         * @param monitorId
         */
        void sendToClient(String monitorId);

    Параметры:

    • monitorId - String - UNID монитора процесса

    sendToClientForSelectNewActiveSession


    Отправка предсталения монитора всем клиентам для выбора клиента, который будет стартовать автоматическую операцию.
         * <p>
         * Выбор клиента происходит по следующей логике:     * -

    • первому попавшемуся клиенту отправляется монитор с разрешением на выполнение клиентской операции

         *
    • без привлечения внимания пользовтеля. При этом SessionId этого клиента записывается в монитор.
         * -
    • всем остальным клиентам монитор отправляется без такого разрашения.

         * <p>
         *
    • При этом, если клиент с сохраненным SessionId отключится, то берется следующий первый попавшийся клиент.

         *
         * @param monitor                     Параметры:

         * @param person                           * @param needSendToNotActiveSessions
    • needSendToNotActiveSessions - Boolean - true, если необходимо ли рассылать монитор всем клиентам
    ,
         */

      void sendToClientForSelectNewActiveSession(IProcessMonitor monitor, SOPersonSystem person, boolean needSendToNotActiveSessions);

    setActiveSessionAndSentAutoStartCommand


    Установка активной websocket-сессии и отправка клиенту по этой сессии команды для автозапуска операции на клиенте

    Параметры:@param monitorId           - монитор процесса
         * @param person              

    • monitorId - String - UNID монитора процесса
    • person - SOPersonSystem - инициатор процесса
         * @param activeWSSessionId  
    • activeWSSessionId - String - id webSocket-сессии для которой надо выдать разрешение для авторзапуска клиентской операции
         * @param
    • activeHttpSessionId - String - id http-сессии для которой надо выдать разрешение для авторзапуска клиентской операции
         * @param activeClientId      
    • activeClientId - String - id клиента который подключился, однозначно идентифицирует вкладку браузера.

         */
        void setActiveSessionAndSentAutoStartCommand(String monitorId, SOPersonSystem person, String activeWSSessionId,
                String activeHttpSessionId, String activeClientId);

    startClientOperation

    boolean  /**
         * Boolean

    Выдача разрешения клиенту на обработку процесса, если процесс еще не занят другим клиентом.


         *

    При этом статус меняется с WAIT_DATA_FROM_USER на CLIENT_PROCESSING

         *
         * @param monitorId

    Параметры:

    • monitorId - String - UNID монитора процесса
         * @param clientId  
    • clientId - String - идентификатор клиента

         * @return true, если пазрешение выдано. false - если нет.
         */
        boolean startClientOperation(String monitorId, String clientId);

    releaseClientOperation


      /**
         *

    Освобождение монитора клиентом, если пользователь отказался продолжать процесс прямо сейчас, но не превал её.


         *

    При этом статус меняется с CLIENT_PROCESSING на WAIT_DATA_FROM_USER

         *
         * @param monitorId - UNID монитора процесса
         */
        void releaseClientOperation(String monitorId, boolean needNotify);
     
    updateProgress  /**
         * Обновление прогресса операции, выполняющейся на сервере и отправка её на клиент по WebSocket
         *
         * @param monitorId

    Параметры:

    • monitorId - String - UNID монитора процесса
         * @param total     - сколько необходимо для завершения операции, в %
         * @param done      - сколько пройдено, в %
         */
        void updateProgress(String monitorId, int total, int done);
    writeErrorDialog  /**
         *

    writeErrorDialog


    Запись ошибки, блокирующей продолжение процесса.


         *

    Формирование завершащего диалога для показа ошибки

         *
         * @param monitorId - id

    Параметры:

    • monitorId - String - UNID монитора процесса
         * @param
    • errorText - String - текст ошибки
         */
        void writeErrorDialog(String monitorId, String errorText, String stacktrace);  markFinished
    • stacktrace - String - стек-трейс ошибки

     markFinished


    Помечает процесс заверешённым

      void markFinished(String monitorId);Параметры:

    • monitorId - String - UNID монитора процесса

    markAborted


    Помечает процесс прерванным. Нужно для запуска отката изменений     *
         * @param monitorId - id монитора процесса

    void markAborted(String monitorId);Параметры:

    • monitorId - String - UNID монитора процесса

    markDeleted


    Помечает процесс удалённым. такой монитор не возвращается клиенту,
         * и игнорирует попытки что-либо с ним сделать по инициативе клиента.

     *
         * @param monitorId - id монитора процесса
         */
        void markDeleted(String monitorId);

    updateStatus  /**
         * Устанавливает статус в монитор с сохранением в базу
         *
         * @param monitorId - id монитора процесса
         * @param status - статус монитора
         */
        void updateStatus(String monitorId, IProcessMonitor.Status status);
    updateByHandler

    5.Работа с монитором

    Сервис работы с монитором подключается так:

    Java-код:

    @Autowired    
    private MonitorProcessingService monitorService;

    JS-код:

    var monitorService = MonitorProcessingServiceImpl.get();

    При старте обработчика необходимо изменить статус монитора

    monitorService.setServerStatus(monitorId, IProcessMonitor.ServerStatus.HANDLER_PROCESSING);
    В мониторе все данные можно разделить на 3 типа:

    1.системные данные, например, время модификации, инициатор процесса, идентификатор сессии клиента. 

    При необходимости можно их взять, получив сам монитор:

    String processTitle = monitorService.getMonitor(monitorId).getTitle();

    2.ресурс, передаваемый клиент, и получаемый от клиента, как правило, это НР-диалог.

    Вычисление ресурса предыдущего диалога:

    TunableObjectREST.Resource data = monitorService.getData(monitorId);

    3.строковые параметры, в которых можно хранить любую информацию для использования в обработчиках, например UNID-ы выделенных документов, данные которые пользователь вводил в предыдущие диалоги, итд.

    пример получения строкового параметра PARAM_LIST_TEMPSTORAGE_IDS - имя параметра

    String listTempStorageIdsStr = monitorService.getParams(monitorId).get(PARAM_LIST_TEMPSTORAGE_IDS);

    При этом есть набор констант имён системных параметров, они могут использоваться как сервером так и веб-клиентом:

    /**,
    * unid бороды инициатора операции
    */
    INITIATOR_BEARD_UNID("initiatorBeardUnid"),
    /**
    * unid-ы обрабатываемых документов
    */
    PARAM_IDS("ids"),
    /**
    * идентификатор нажатой кнопки
    */
    PARAM_ACTION_REL("actionRel"),
    /**
    * число процентов прогресса на текущий момент
    */
    PROGRESS_DONE("DONE"),
    /**
    * общее число процентов для вычисления прогресса в процессе (по умолчанию 100%)
    */
    PROGRESS_TOTAL("TOTAL");

    Во время работы серверного обработчика пользователь видит прогресс бар процесса. Можно его актуализировать указаным методом, он отпарвляет указанные знаения на веб-клиент по WebSocket.

    monitorService.updateProgress(monitorId, 100, 30);
    Можно отметить процесс завершённым и ничего больше не возвращать пользователю, например если пользователь его прервал. После этого можно будет больше ничего не писать в монитор:
    monitorService.markFinished(monitorId);
    В конце нужно обновить состояние монитора, записть в него нужнуые параметры и ресурс для следующего показа клиенту(либо другой команды). Это делается вызовом одного метода, чтобы монитор сохранялся только один раз(не считая вызовов updateProgress(...))
    monitorService.updateByHandler(monitorId, IProcessMonitor.Command.SHOW_DIALOG, TITLE_FINISH, dialogResource, params);

    В данном примере:

     
    IProcessMonitor.Command.SHOW_DIALOG - говорит о том что веб-клеинт должен показать ресурс пользователю как НР-диалог.

    Еще предусмотрена команда подписания группы документов в рамках процесса IProcessMonitor.Command.LOCKER_SIGN - в неё передаётся список id подписываемых документов во временном хранилище. подробнее Детальное описание реализации длительных (групповых) операций в CMJ#%D0%94%D0%B5%D1%82%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5%D1%80%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8%D0%B4%D0%BB%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D1%85%28%D0%B3%D1%80%D1%83%D0%BF%D0.11

    Пример формирования такого ресурса в методе класса ru.intertrust.cmj.rest.tuning.operations.approving.ApprovingGroupOperationUtils.createResourceForSign(List<String> ids, String signType, String processTitle)

    TITLE_FINISH - заоловок завершения данного этапа процесса. покажется пользовалю. Например: "листы согласования успешно сформированы".

    dialogResource - ресурс TunableObjectREST.Resource для команды веб-клиенту.

    params - карта параметров типа Map<String, String>

    6.Вспомогательные методы

    Для удобства создан класс  ru.intertrust.cmj.rest.tunable.object.action.OperationHelper , в который вынесены часто используемые методы, например:

    createProgressUpdatePlan(int allCount, int startValue, int finishValue) -  метод вычисляющий план обновления прогрессса операци  на основании числа обрабатываемых документов
    getSignFailuresMap(TunableObjectREST.Resource data) - Парсинг Tunable-ресурса с информацией о результатах подписания в карту и формирование информации об ошибках подпсиания в виде:"id документа, который не удалось подписать" - "причина, по которой не удалось подписать"

    Для работы с процессом согласования создан класс  ru.intertrust.cmj.rest.tuning.operations.approving.ApprovingGroupOperationUtils. Он содержит методы для формирования и обработки НР-диалогов.

    Параметры:

    • monitorId - String - UNID монитора процесса
    Свойства страницы
    Статус

    Статус
    colour

    Yellow

    Green
    title

    В РАБОТЕ

    ГОТОВО

    Комментарий
    панель

    Методы, свойства, внутренние классы

    Оглавление