Сервис управления задачами процесса

Описание

ru.bgcrm.core.task.process.ProcessTaskService управляет конкретными запусками задач для процессов. Определениями обработчиков управляет отдельный TaskService.

Сервис зарегистрирован в глобальном контексте. Соответственно может быть вызван из контекста.
Пример:
val processTaskService = ServerContext.lookup(ProcessTaskService::class.java)

Функционал

  • Удобное управление задачами в рамках конкретного типа процесса

  • Возможность отображения задач (запланированных и исполненных) в рамках конкретного процесса

  • Наличие статусов задач (ожидание, выполнение, выполнено, ошибка выполнения, отменено)

  • Возможность настраивать количество попыток выполнения задачи

  • Захват строки FOR UPDATE перед переводом запуска в IN_PROGRESS

  • Возможность работы раннера задач без планировщика

  • Интеграция задач с конструктором правил

Методы

ProcessTaskService

Получение задачи процесса по ID:
Поиск задач:
Поиск задачи для выполнения:
Создание задачи процесса:
Перевод задачи процесса в статус 'Выполняется':
  • fun handle(id: Int)

Перевод задачи процесса в статус 'Выполнено':
  • fun complete(id: Int)

Перевод задачи процесса в статус 'Ошибка':
  • fun error(id: Int, message: String)

Перевод задачи процесса в статус 'Отменено':

Отмена разрешена только из PENDING.

Отмена ожидающих запусков определения в процессе:
  • fun cancelByTaskId(processId: Int, taskId: Int)

Метод рассчитывает на фильтр cancellable, но текущая реализация репозитория этот фильтр не применяет. Если в выборке есть уже завершённые или выполняющиеся записи, отмена может завершиться ошибкой на первой такой записи.

Модели

ProcessTask

Field Type Default Description

id

Int

Id задачи процесса

processId

Int

Id процесса

task

Task

Снимок определения задачи

config

String?

Конфигурация задачи

scheduledTime

Date

Запланированное время выполнения задачи

executedTime

Date?

Время выполнения задачи

status

TaskStatus

Статус

retries

Int

0

Количество уже использованных повторов; первая попытка не считается повтором

result

String?

Результат выполнения задач

maxRetries

Int

0

Максимальное количество повторов после первой попытки

cancellable

Boolean

Можно отменить; true только для PENDING

CreateProcessTaskRequest

Field Type Description

processId

Int

Id процесса

taskId

Int

ID включённого определения задачи

config

String?

Конфигурация задачи

scheduledTime

Date

Запланированное время выполнения задачи

maxRetries

Int

Максимальное количество повторов после первой попытки

ProcessTaskSearchRequest

Field Type Description

processId

Int?

ID процесса

taskId

Int?

ID задачи

statuses

Set<TaskStatus>?

Статусы

scheduledTime

Period?

Период времени планирования

executedTime

Period?

Период времени выполнения

cancellable

Boolean?

Заявленный фильтр отменяемости; текущий репозиторий его не применяет

TaskStatus

Status Description

PENDING

В ожидании

IN_PROGRESS

Выполняется

EXECUTED

Выполнено

ERROR

Ошибка выполнения

CANCELLED

Отменено

Task

Field Type Description

id

Int

Id задачи

title

String

Наименование задачи

clazz

String?

Класс обработчик задачи

script

String?

Скрипт

enabled

Boolean

Включена

Матрица статусов

С: ↓ На: → PENDING IN_PROGRESS EXECUTED ERROR CANCELLED

PENDING

x

x

IN_PROGRESS

x

x

EXECUTED

ERROR

x

CANCELLED

Переход ERROR → IN_PROGRESS выполняется только пока retries < maxRetries. Событие завершения публикуется после IN_PROGRESS → EXECUTED либо после последнего IN_PROGRESS → ERROR.