Search in sources :

Example 1 with OurTasksPollingBundleExtractor

use of org.hl7.gravity.refimpl.sdohexchange.fhir.extract.OurTasksPollingBundleExtractor in project Gravity-SDOH-Exchange-RI by FHIR.

the class OurTaskPollingService method updateTasks.

@Scheduled(fixedDelayString = "${scheduling.task-polling-delay-millis}")
public void updateTasks() {
    log.info("Updating tasks from our tasks...");
    Bundle tasksBundle = openCpClient.search().forResource(Task.class).revInclude(Task.INCLUDE_BASED_ON).include(Task.INCLUDE_FOCUS.setRecurse(true)).and(Task.INTENT.exactly().code(Task.TaskIntent.ORDER.toCode())).where(new TokenClientParam(Task.SP_STATUS + ":" + SearchModifierCode.NOT.toCode()).exactly().code(TaskStatus.FAILED.toCode())).where(new TokenClientParam(Task.SP_STATUS + ":" + SearchModifierCode.NOT.toCode()).exactly().code(TaskStatus.REJECTED.toCode())).where(new TokenClientParam(Task.SP_STATUS + ":" + SearchModifierCode.NOT.toCode()).exactly().code(TaskStatus.COMPLETED.toCode())).where(new TokenClientParam(Task.SP_STATUS + ":" + SearchModifierCode.NOT.toCode()).exactly().code(TaskStatus.CANCELLED.toCode())).where(Task.AUTHORED_ON.before().millis(Date.from(LocalDateTime.now().minusSeconds(10).atZone(ZoneId.systemDefault()).toInstant()))).returnBundle(Bundle.class).execute();
    OurTasksPollingInfo tasksPollingInfo = new OurTasksPollingBundleExtractor().extract(tasksBundle);
    // Collect all entries from every Task bundle for performance considerations.
    Bundle updateBundle = new Bundle();
    updateBundle.setType(Bundle.BundleType.TRANSACTION);
    for (Task task : tasksPollingInfo.getTasks()) {
        // Skip for now. We create our tasks automatically when we set a status to Accepted.
        if (task.getStatus().equals(TaskStatus.REQUESTED) || task.getStatus().equals(TaskStatus.RECEIVED)) {
            continue;
        }
        ServiceRequest serviceRequest = getServiceRequest(task);
        try {
            Task ourTask = tasksPollingInfo.getOurTask(task);
            combineResult(updateBundle, getUpdateBundle(task, serviceRequest, ourTask));
        } catch (OurTaskPollingUpdateException exc) {
            combineResult(updateBundle, failTask(task, serviceRequest, exc.getMessage()));
        }
    }
    // If there is at least one bundle entry - execute a transaction request.
    if (updateBundle.getEntry().size() != 0) {
        log.info("One or more tasks were changed. Storing updates to CP...");
        openCpClient.transaction().withBundle(updateBundle).execute();
    }
    log.info("Task update process finished.");
}
Also used : OurTasksPollingBundleExtractor(org.hl7.gravity.refimpl.sdohexchange.fhir.extract.OurTasksPollingBundleExtractor) Task(org.hl7.fhir.r4.model.Task) TokenClientParam(ca.uhn.fhir.rest.gclient.TokenClientParam) Bundle(org.hl7.fhir.r4.model.Bundle) OurTasksPollingInfo(org.hl7.gravity.refimpl.sdohexchange.fhir.extract.OurTasksPollingBundleExtractor.OurTasksPollingInfo) OurTaskPollingUpdateException(org.hl7.gravity.refimpl.sdohexchange.fhir.extract.OurTasksPollingBundleExtractor.OurTaskPollingUpdateException) ServiceRequest(org.hl7.fhir.r4.model.ServiceRequest) Scheduled(org.springframework.scheduling.annotation.Scheduled)

Aggregations

TokenClientParam (ca.uhn.fhir.rest.gclient.TokenClientParam)1 Bundle (org.hl7.fhir.r4.model.Bundle)1 ServiceRequest (org.hl7.fhir.r4.model.ServiceRequest)1 Task (org.hl7.fhir.r4.model.Task)1 OurTasksPollingBundleExtractor (org.hl7.gravity.refimpl.sdohexchange.fhir.extract.OurTasksPollingBundleExtractor)1 OurTaskPollingUpdateException (org.hl7.gravity.refimpl.sdohexchange.fhir.extract.OurTasksPollingBundleExtractor.OurTaskPollingUpdateException)1 OurTasksPollingInfo (org.hl7.gravity.refimpl.sdohexchange.fhir.extract.OurTasksPollingBundleExtractor.OurTasksPollingInfo)1 Scheduled (org.springframework.scheduling.annotation.Scheduled)1