use of org.hl7.gravity.refimpl.sdohexchange.fhir.extract.TasksPollingBundleExtractor.TasksPollingInfo in project Gravity-SDOH-Exchange-RI by FHIR.
the class TaskPollingService method updateTasks.
public void updateTasks() {
log.info("Updating tasks from CP Organizations...");
Bundle tasksBundle = openEhrClient.search().forResource(Task.class).include(Task.INCLUDE_FOCUS).include(Task.INCLUDE_OWNER).include(Organization.INCLUDE_ENDPOINT.setRecurse(true)).where(new TokenClientParam("owner:Organization.type").exactly().systemAndCode(OrganizationTypeCode.CP.getSystem(), OrganizationTypeCode.CP.toCode())).where(new TokenClientParam(Task.SP_STATUS + ":" + SearchModifierCode.NOT.toCode()).exactly().code(Task.TaskStatus.FAILED.toCode())).where(new TokenClientParam(Task.SP_STATUS + ":" + SearchModifierCode.NOT.toCode()).exactly().code(Task.TaskStatus.REJECTED.toCode())).where(new TokenClientParam(Task.SP_STATUS + ":" + SearchModifierCode.NOT.toCode()).exactly().code(Task.TaskStatus.COMPLETED.toCode())).where(new TokenClientParam(Task.SP_STATUS + ":" + SearchModifierCode.NOT.toCode()).exactly().code(Task.TaskStatus.CANCELLED.toCode())).where(Task.AUTHORED_ON.before().millis(Date.from(LocalDateTime.now().minusSeconds(10).atZone(ZoneId.systemDefault()).toInstant()))).returnBundle(Bundle.class).execute();
TasksPollingInfo tasksPollingInfo = new TasksPollingBundleExtractor().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()) {
ServiceRequest serviceRequest = tasksPollingInfo.getServiceRequest(task);
Organization organization = tasksPollingInfo.getOrganization(task);
try {
Endpoint endpoint = tasksPollingInfo.getEndpoint(organization);
combineResult(updateBundle, getUpdateBundle(task, serviceRequest, endpoint));
} catch (TaskPollingUpdateException | CpClientException 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 EHR...");
openEhrClient.transaction().withBundle(updateBundle).execute();
}
log.info("Task update process finished.");
}
use of org.hl7.gravity.refimpl.sdohexchange.fhir.extract.TasksPollingBundleExtractor.TasksPollingInfo 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.");
}
Aggregations