Untitled

 avatar
unknown
plain_text
a year ago
6.0 kB
9
Indexable
package com.optum.iedi.attachment.consumer;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.web.bind.annotation.RestController;

import com.azure.spring.messaging.eventhubs.core.EventHubsTemplate;
import com.azure.spring.messaging.eventhubs.core.PartitionSupplier;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.optum.iedi.attachment.AttachmentTrackingStatusUpdateCompleteEvent;
import com.optum.iedi.attachment.AttachmentUpdateHelper;
import com.optum.iedi.attachment.ProprietaryAttachmentUpdateHelper;
import com.optum.iedi.converter.doctype.attachment.ClaimAttachmentTrackingStatusPayload;
import com.optum.iedi.converter.doctype.attachment.ClaimAttachmentUpdate;
import com.optum.iedi.converter.mapper.common.EdiTransactionMapperUtil;
import com.optum.iedi.util.CompressionUtils;

@RestController
public class AttachmentUpdateEventConsumer implements Consumer<Message<List<byte[]>>> {

    private static final String TRANSACTION_TYPE = "transactionType";
    public static final String FUNCTIONAL_999_RESPONSE = "Ack Response-999";
    private static final List<String> proprietaryAttachmentTypeList=new ArrayList<>();
    
    static {
        proprietaryAttachmentTypeList.add("OhioProprietaryAttachment");
        proprietaryAttachmentTypeList.add("OhioProprietaryAttachmentAck");
        proprietaryAttachmentTypeList.add("OhioProprietaryAttachmentImpAck");
    }

    @Autowired
    @Qualifier("attachmentRetryAndArchiveEventHubsTemplate")
    private EventHubsTemplate attachmentRetryAndArchiveEventHubsTemplate;
    @Autowired
    @Qualifier("attachmentTrackingStatusCompleteEventHubsTemplate")
    private EventHubsTemplate attachmentTrackingStatusCompleteEventHubsTemplate;
    @Override
    public void accept(final Message<List<byte[]>> message) {
        final List<byte[]> messages = message.getPayload();

        final AttachmentUpdateHelper attachmentHelper = new AttachmentUpdateHelper(
                attachmentRetryAndArchiveEventHubsTemplate,"attachment-archive-retry");

        for (final byte[] payload : messages) {
            try {
                final String sb = CompressionUtils.decompressGZIP(payload);
                final ObjectNode objectNode = (ObjectNode) new ObjectMapper().readTree(sb);
                final JsonNode transTypeNode = objectNode.get(TRANSACTION_TYPE);
                if (null!=transTypeNode && proprietaryAttachmentTypeList.contains(transTypeNode.asText())) {
                    final ProprietaryAttachmentUpdateHelper propAtmntUpdateHelper = new ProprietaryAttachmentUpdateHelper();
                    propAtmntUpdateHelper.processProprietaryAttachmentUpdate(sb);
                }else{
                    final AttachmentTrackingStatusUpdateCompleteEvent attachmentTrackingStatusUpdateCompleteEvent= attachmentHelper.processAttachmentUpdate(sb);
                    final ClaimAttachmentUpdate payload1 = EdiTransactionMapperUtil.iso_deserialiser_gson.fromJson(sb,
                            ClaimAttachmentUpdate.class);
                    ClaimAttachmentTrackingStatusPayload statusPayload = payload1.getClaimAttachmentTrackingStatusPayload();
                    if(attachmentTrackingStatusUpdateCompleteEvent != null && not999Data(statusPayload)){
                        final PartitionSupplier partitionSupplier = new PartitionSupplier();
                        partitionSupplier.setPartitionKey(attachmentTrackingStatusUpdateCompleteEvent.getBatchId());
                        sendToEventhub(attachmentTrackingStatusUpdateCompleteEvent,attachmentTrackingStatusCompleteEventHubsTemplate,"attachment-transaction-update-metadata",partitionSupplier);
                        attachmentHelper.logMilestoneEvent(AttachmentUpdateHelper.ATTACHMENT_TRACKING_STATUS_UPDATE,
                                attachmentTrackingStatusUpdateCompleteEvent.getBatchId(),
                                attachmentTrackingStatusUpdateCompleteEvent.getTenantId());
                    }
                }
            } catch (final Exception e) {
                attachmentHelper.logErrorEvent(e);
                sendToEventhub(payload, attachmentRetryAndArchiveEventHubsTemplate,
                        "attachment-tracking-status-lookup-update-retry");
            }
        }
    }

    private boolean not999Data(final ClaimAttachmentTrackingStatusPayload claimAttachmentTrackingStatusPayload) {
        if(claimAttachmentTrackingStatusPayload.getClaimAttachmentTrackingStatus() != null && !(FUNCTIONAL_999_RESPONSE).equals(claimAttachmentTrackingStatusPayload.getClaimAttachmentTrackingStatus().getResponseType())) {
            return true;
        }
        return false;
    }

    public void sendToEventhub(final AttachmentTrackingStatusUpdateCompleteEvent payload,
            final EventHubsTemplate attachmentRetryEventHubsTemplate, final String eventHubName,
            final PartitionSupplier partitionSupplier){
        attachmentRetryEventHubsTemplate.send(eventHubName,
                Collections.singletonList(
                        MessageBuilder.withPayload(EdiTransactionMapperUtil.GSON.toJson(payload)).build()),
                partitionSupplier);
    }

    public void sendToEventhub(final byte[] payload, final EventHubsTemplate attachmentRetryEventHubsTemplate,
            final String eventHubName){
        attachmentRetryEventHubsTemplate.send(eventHubName, MessageBuilder.withPayload(payload).build());
    }
}
Editor is loading...
Leave a Comment