updating poll cron

This commit is contained in:
2026-05-20 18:36:46 +02:00
parent 437f04dbc1
commit 77b53a8bf0

View File

@@ -1,11 +1,9 @@
package zw.qantra.tm.domain.workflows; package zw.qantra.tm.domain.workflows;
import io.nflow.engine.service.WorkflowInstanceService; 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.curated.State;
import io.nflow.engine.workflow.definition.NextAction; import io.nflow.engine.workflow.definition.*;
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.instance.WorkflowInstance; import io.nflow.engine.workflow.instance.WorkflowInstance;
import io.nflow.engine.workflow.instance.WorkflowInstanceAction; import io.nflow.engine.workflow.instance.WorkflowInstanceAction;
import org.joda.time.DateTime; import org.joda.time.DateTime;
@@ -27,8 +25,12 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.CompletableFuture; 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 @Component
public class PollCronWorkflow extends WorkflowDefinition { public class PollCronWorkflow extends CronWorkflow {
Logger log = org.slf4j.LoggerFactory.getLogger(PollCronWorkflow.class); Logger log = org.slf4j.LoggerFactory.getLogger(PollCronWorkflow.class);
@Autowired @Autowired
@@ -38,17 +40,15 @@ public class PollCronWorkflow extends WorkflowDefinition {
@Autowired @Autowired
private WorkflowUtils workflowUtils; 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); protected PollCronWorkflow() {
private static final State ERROR = new State("error", WorkflowStateType.manual, "Error state"); super(TYPE, new WorkflowSettings.Builder()
.setHistoryDeletableAfter(hours(1))
public PollCronWorkflow() { .setDeleteHistoryCondition(() -> true).build());
super(TYPE, PROCESS, ERROR);
permit(PROCESS, PROCESS);
} }
public NextAction process(StateExecution execution) { public NextAction doWork(StateExecution execution) {
List<Transaction> transactions = transactionService.getTransactionRepository() List<Transaction> transactions = transactionService.getTransactionRepository()
.findAllByConfirmationStatusAndIntegrationStatus(Status.SUCCESS, Status.PENDING); .findAllByConfirmationStatusAndIntegrationStatus(Status.SUCCESS, Status.PENDING);
if (!transactions.isEmpty()) if (!transactions.isEmpty())
@@ -63,14 +63,14 @@ public class PollCronWorkflow extends WorkflowDefinition {
WorkflowInstance update = new WorkflowInstance.Builder() WorkflowInstance update = new WorkflowInstance.Builder()
.setId(transaction.getWorkflowId()) .setId(transaction.getWorkflowId())
.setState("pollStatus") // The state you want to transition to .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)); }}) .setStateVariables(new HashMap<>(){{ put("body", Utils.toJson(transaction)); }})
.setStateText("Resumed from manual state") .setStateText("Resumed from manual state")
.build(); .build();
WorkflowInstanceAction action = new WorkflowInstanceAction.Builder(update) WorkflowInstanceAction action = new WorkflowInstanceAction.Builder(update)
.setType(WorkflowInstanceAction.WorkflowActionType.externalChange) .setType(WorkflowInstanceAction.WorkflowActionType.externalChange)
.setExecutionEnd(DateTime.now()) .setExecutionEnd(now())
.build(); .build();
// Apply the update // Apply the update
@@ -93,14 +93,14 @@ public class PollCronWorkflow extends WorkflowDefinition {
WorkflowInstance update1 = new WorkflowInstance.Builder() WorkflowInstance update1 = new WorkflowInstance.Builder()
.setId(transaction.getWorkflowId()) .setId(transaction.getWorkflowId())
.setState("integration") // The state you want to transition to .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)); }}) .setStateVariables(new HashMap<>(){{ put("body", Utils.toJson(tran)); }})
.setStateText("Resumed from manual state") .setStateText("Resumed from manual state")
.build(); .build();
WorkflowInstanceAction action1 = new WorkflowInstanceAction.Builder(update1) WorkflowInstanceAction action1 = new WorkflowInstanceAction.Builder(update1)
.setType(WorkflowInstanceAction.WorkflowActionType.externalChange) .setType(WorkflowInstanceAction.WorkflowActionType.externalChange)
.setExecutionEnd(DateTime.now()) .setExecutionEnd(now())
.build(); .build();
// Apply the update // Apply the update
@@ -130,8 +130,17 @@ public class PollCronWorkflow extends WorkflowDefinition {
map.put("success", success.toString()); map.put("success", success.toString());
execution.setVariable(LocalDateTime.now().toString(), map); 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())); 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);
}
} }