From 77b53a8bf040ef76233c07ec34d3d29d55a9e64c Mon Sep 17 00:00:00 2001 From: Vusumuzi Khoza Date: Wed, 20 May 2026 18:36:46 +0200 Subject: [PATCH] updating poll cron --- .../tm/domain/workflows/PollCronWorkflow.java | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/src/main/java/zw/qantra/tm/domain/workflows/PollCronWorkflow.java b/src/main/java/zw/qantra/tm/domain/workflows/PollCronWorkflow.java index 9a19e67..61db957 100644 --- a/src/main/java/zw/qantra/tm/domain/workflows/PollCronWorkflow.java +++ b/src/main/java/zw/qantra/tm/domain/workflows/PollCronWorkflow.java @@ -1,11 +1,9 @@ package zw.qantra.tm.domain.workflows; import io.nflow.engine.service.WorkflowInstanceService; +import io.nflow.engine.workflow.curated.CronWorkflow; import io.nflow.engine.workflow.curated.State; -import io.nflow.engine.workflow.definition.NextAction; -import io.nflow.engine.workflow.definition.StateExecution; -import io.nflow.engine.workflow.definition.WorkflowDefinition; -import io.nflow.engine.workflow.definition.WorkflowStateType; +import io.nflow.engine.workflow.definition.*; import io.nflow.engine.workflow.instance.WorkflowInstance; import io.nflow.engine.workflow.instance.WorkflowInstanceAction; import org.joda.time.DateTime; @@ -27,8 +25,12 @@ import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; +import static io.nflow.engine.workflow.definition.NextAction.moveToStateAfter; +import static org.joda.time.DateTime.now; +import static org.joda.time.Period.hours; + @Component -public class PollCronWorkflow extends WorkflowDefinition { +public class PollCronWorkflow extends CronWorkflow { Logger log = org.slf4j.LoggerFactory.getLogger(PollCronWorkflow.class); @Autowired @@ -38,17 +40,15 @@ public class PollCronWorkflow extends WorkflowDefinition { @Autowired private WorkflowUtils workflowUtils; - public static final String TYPE = "pollCronWorkflow"; + public static final String TYPE = "transactionPollCronWorkflow"; - public static final State PROCESS = new State("process", WorkflowStateType.start); - private static final State ERROR = new State("error", WorkflowStateType.manual, "Error state"); - - public PollCronWorkflow() { - super(TYPE, PROCESS, ERROR); - permit(PROCESS, PROCESS); + protected PollCronWorkflow() { + super(TYPE, new WorkflowSettings.Builder() + .setHistoryDeletableAfter(hours(1)) + .setDeleteHistoryCondition(() -> true).build()); } - public NextAction process(StateExecution execution) { + public NextAction doWork(StateExecution execution) { List transactions = transactionService.getTransactionRepository() .findAllByConfirmationStatusAndIntegrationStatus(Status.SUCCESS, Status.PENDING); if (!transactions.isEmpty()) @@ -63,14 +63,14 @@ public class PollCronWorkflow extends WorkflowDefinition { WorkflowInstance update = new WorkflowInstance.Builder() .setId(transaction.getWorkflowId()) .setState("pollStatus") // The state you want to transition to - .setNextActivation(DateTime.now()) // Schedule immediate execution + .setNextActivation(now()) // Schedule immediate execution .setStateVariables(new HashMap<>(){{ put("body", Utils.toJson(transaction)); }}) .setStateText("Resumed from manual state") .build(); WorkflowInstanceAction action = new WorkflowInstanceAction.Builder(update) .setType(WorkflowInstanceAction.WorkflowActionType.externalChange) - .setExecutionEnd(DateTime.now()) + .setExecutionEnd(now()) .build(); // Apply the update @@ -93,14 +93,14 @@ public class PollCronWorkflow extends WorkflowDefinition { WorkflowInstance update1 = new WorkflowInstance.Builder() .setId(transaction.getWorkflowId()) .setState("integration") // The state you want to transition to - .setNextActivation(DateTime.now()) // Schedule immediate execution + .setNextActivation(now()) // Schedule immediate execution .setStateVariables(new HashMap<>(){{ put("body", Utils.toJson(tran)); }}) .setStateText("Resumed from manual state") .build(); WorkflowInstanceAction action1 = new WorkflowInstanceAction.Builder(update1) .setType(WorkflowInstanceAction.WorkflowActionType.externalChange) - .setExecutionEnd(DateTime.now()) + .setExecutionEnd(now()) .build(); // Apply the update @@ -130,8 +130,17 @@ public class PollCronWorkflow extends WorkflowDefinition { map.put("success", success.toString()); execution.setVariable(LocalDateTime.now().toString(), map); - return NextAction.retryAfter(DateTime.now().plusMinutes(2), + return moveToStateAfter(WAIT_FOR_WORK_TO_FINISH, now().plusMinutes(2), String.format("Cron complete on %s transactions", transactions.size())); } + @Override + protected boolean handleFailureImpl(StateExecution execution) { + return super.handleFailureImpl(execution); + } + + @Override + protected DateTime waitForWorkToFinishImpl(StateExecution execution) { + return super.waitForWorkToFinishImpl(execution); + } }