completed poll logic
This commit is contained in:
@@ -19,4 +19,5 @@ public interface TransactionRepository extends JpaRepository<Transaction, UUID>,
|
|||||||
List<Transaction> findAllByUserId(String uid);
|
List<Transaction> findAllByUserId(String uid);
|
||||||
List<Transaction> findAllByConfirmationStatusAndPaymentStatusAndIntegrationStatus(
|
List<Transaction> findAllByConfirmationStatusAndPaymentStatusAndIntegrationStatus(
|
||||||
Status s1, Status s2, Status s3);
|
Status s1, Status s2, Status s3);
|
||||||
|
List<Transaction> findAllByConfirmationStatusAndIntegrationStatus(Status s1, Status s2);
|
||||||
}
|
}
|
||||||
@@ -12,6 +12,7 @@ import org.joda.time.DateTime;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
import zw.qantra.tm.domain.dtos.StateResponse;
|
||||||
import zw.qantra.tm.domain.enums.Status;
|
import zw.qantra.tm.domain.enums.Status;
|
||||||
import zw.qantra.tm.domain.models.Transaction;
|
import zw.qantra.tm.domain.models.Transaction;
|
||||||
import zw.qantra.tm.domain.services.TransactionService;
|
import zw.qantra.tm.domain.services.TransactionService;
|
||||||
@@ -19,6 +20,7 @@ import zw.qantra.tm.utils.LogUtils;
|
|||||||
import zw.qantra.tm.utils.Utils;
|
import zw.qantra.tm.utils.Utils;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
@@ -45,8 +47,7 @@ public class PollCronWorkflow extends WorkflowDefinition {
|
|||||||
|
|
||||||
public NextAction process(StateExecution execution) {
|
public NextAction process(StateExecution execution) {
|
||||||
List<Transaction> transactions = transactionService.getTransactionRepository()
|
List<Transaction> transactions = transactionService.getTransactionRepository()
|
||||||
.findAllByConfirmationStatusAndPaymentStatusAndIntegrationStatus(
|
.findAllByConfirmationStatusAndIntegrationStatus(Status.SUCCESS, Status.PENDING);
|
||||||
Status.SUCCESS, Status.PENDING, Status.PENDING);
|
|
||||||
log.info("Transaction count {}", transactions.size());
|
log.info("Transaction count {}", transactions.size());
|
||||||
|
|
||||||
for (Transaction transaction: transactions) {
|
for (Transaction transaction: transactions) {
|
||||||
@@ -74,15 +75,19 @@ public class PollCronWorkflow extends WorkflowDefinition {
|
|||||||
Object response = future.get();
|
Object response = future.get();
|
||||||
LogUtils.logPrettyJson(log, "polling result", response);
|
LogUtils.logPrettyJson(log, "polling result", response);
|
||||||
|
|
||||||
Transaction tran = Utils.deepCopy(response, Transaction.class);
|
StateResponse wfResp = Utils.deepCopy(response, StateResponse.class);
|
||||||
|
LinkedHashMap tran = (LinkedHashMap) wfResp.getBody();
|
||||||
|
if(tran == null)
|
||||||
|
break;
|
||||||
|
|
||||||
// only attempt integration logic if polling succeeded
|
// only attempt integration logic if polling succeeded
|
||||||
if(tran.getStatus().equals(Status.SUCCESS)) {
|
if(tran.get("status").equals(Status.SUCCESS.name())) {
|
||||||
// integration logic
|
// integration logic
|
||||||
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(DateTime.now()) // Schedule immediate execution
|
||||||
.setStateVariables(new HashMap<>(){{ put("body", Utils.toJson(transaction)); }})
|
.setStateVariables(new HashMap<>(){{ put("body", Utils.toJson(tran)); }})
|
||||||
.setStateText("Resumed from manual state")
|
.setStateText("Resumed from manual state")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@@ -107,10 +112,6 @@ public class PollCronWorkflow extends WorkflowDefinition {
|
|||||||
|
|
||||||
}catch (Exception e) {
|
}catch (Exception e) {
|
||||||
log.error(e.getMessage());
|
log.error(e.getMessage());
|
||||||
|
|
||||||
transaction.setPollingStatus(Status.FAILED);
|
|
||||||
transaction.setIntegrationStatus(Status.FAILED);
|
|
||||||
transactionService.save(transaction);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ public class StartupApplicationListener implements ApplicationListener<ContextRe
|
|||||||
.setNextActivation(DateTime.now())
|
.setNextActivation(DateTime.now())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// long workflowId = workflowInstanceService.insertWorkflowInstance(instance);
|
long workflowId = workflowInstanceService.insertWorkflowInstance(instance);
|
||||||
|
|
||||||
// log.info("Cron workflow ID {} started", workflowId);
|
log.info("Cron workflow ID {} started", workflowId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ public class TransactionWorkflow extends WorkflowDefinition {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.info(e.getMessage());
|
log.info(e.getMessage());
|
||||||
execution.setVariable("body", Utils.toJson(transaction));
|
execution.setVariable("body", Utils.toJson(transaction));
|
||||||
return NextAction.retryAfter(DateTime.now().plusSeconds(30), e.getMessage());
|
return NextAction.moveToState(TRAN_FAILED, "Polling failed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user