Сервис управления задачами процесса
Описание
ru.bgcrm.core.task.process.ProcessTaskService управляет конкретными
запусками задач для процессов. Определениями обработчиков управляет отдельный
TaskService.
| Сервис зарегистрирован в глобальном контексте. Соответственно может быть вызван из контекста. |
val processTaskService = ServerContext.lookup(ProcessTaskService::class.java)
Функционал
-
Удобное управление задачами в рамках конкретного типа процесса
-
Возможность отображения задач (запланированных и исполненных) в рамках конкретного процесса
-
Наличие статусов задач (ожидание, выполнение, выполнено, ошибка выполнения, отменено)
-
Возможность настраивать количество попыток выполнения задачи
-
Захват строки
FOR UPDATEперед переводом запуска вIN_PROGRESS -
Возможность работы раннера задач без планировщика
-
Интеграция задач с конструктором правил
Методы
ProcessTaskService
-
fun getById(id: Int): ProcessTask
-
fun search(request: ProcessTaskSearchRequest, page: Page?): SearchResult<ProcessTask>
-
fun findForRun(): ProcessTask?
-
fun create(task: CreateProcessTaskRequest): ProcessTask
-
fun handle(id: Int)
-
fun complete(id: Int)
-
fun error(id: Int, message: String)
-
fun cancel(id: Int): ProcessTask
Отмена разрешена только из PENDING.
-
fun cancelByTaskId(processId: Int, taskId: Int)
Метод рассчитывает на фильтр cancellable, но текущая реализация репозитория этот фильтр
не применяет. Если в выборке есть уже завершённые или выполняющиеся записи, отмена может завершиться
ошибкой на первой такой записи.
|
Модели
ProcessTask
| Field | Type | Default | Description |
|---|---|---|---|
id |
Int |
Id задачи процесса |
|
processId |
Int |
Id процесса |
|
task |
Снимок определения задачи |
||
config |
String? |
Конфигурация задачи |
|
scheduledTime |
Date |
Запланированное время выполнения задачи |
|
executedTime |
Date? |
Время выполнения задачи |
|
status |
Статус |
||
retries |
Int |
0 |
Количество уже использованных повторов; первая попытка не считается повтором |
result |
String? |
Результат выполнения задач |
|
maxRetries |
Int |
0 |
Максимальное количество повторов после первой попытки |
cancellable |
Boolean |
Можно отменить; |
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? |
Заявленный фильтр отменяемости; текущий репозиторий его не применяет |
Матрица статусов
| С: ↓ На: → | 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.