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;
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<Transaction> 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);
}
}