Summary Table

Categories Total Count
PII 0
URL 0
DNS 0
EKL 0
IP 0
PORT 0
VsID 0
CF 0
AI 0
VPD 0
PL 0
Other 0

File Content

package gov.va.med.ars.service.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import gov.va.med.ars.dao.ars.IPayerInfoRepository;
import gov.va.med.ars.exceptions.GenericException;
import gov.va.med.ars.model.request.PayerInfoListRequest;
import gov.va.med.ars.model.request.PayerInfoRequest;
import gov.va.med.ars.model.response.PayerInfoResponse;
import gov.va.med.ars.service.IPayerInfoService;
import gov.va.med.domain.ars.PayerConfig;

@Service
public class PayerInfoServiceImpl implements IPayerInfoService {

@Autowired
IPayerInfoRepository payerInfoRepository;

private static final Logger logger = LogManager.getLogger(PayerInfoServiceImpl.class);

@Override
public List<PayerInfoResponse> getActivePayerInfo() {
List<PayerConfig> listOfPayers = payerInfoRepository.findByIsarchive('N');
List<PayerInfoResponse> payerInfoResponseList = mapPayersFromDBToReponse(listOfPayers);
return payerInfoResponseList;
}

@Override
public List<PayerInfoResponse> getAllPayerInfo() {
List<PayerConfig> listOfPayers = payerInfoRepository.findAll();
List<PayerInfoResponse> payerInfoResponseList = mapPayersFromDBToReponse(listOfPayers);
return payerInfoResponseList;
}

@Override
public List<String> checkSubmittedModificationsForDupes(PayerInfoListRequest payerInfoListRequest) {
List<String> returnList = new LinkedList<>();

if (payerInfoListRequest.getPayerInfoList() != null && !payerInfoListRequest.getPayerInfoList().isEmpty()) {
returnList.addAll(checkPayerInfo(payerInfoListRequest.getPayerInfoList()));
}
return returnList;
}

private List<PayerInfoResponse> mapPayersFromDBToReponse(List<PayerConfig> listOfPayers) {
logger.info("Size of Payer Config table records " + listOfPayers.size());
List<PayerInfoResponse> payerInfoResponseList = new ArrayList<>();
// Mapping the results
for (PayerConfig record : listOfPayers) {
PayerInfoResponse response = new PayerInfoResponse();
response.setPayerIndex(record.getPayerIndex());
response.setPayerIdentifier(record.getPayerIdentifier());
response.setPayerIdentifierDesc(record.getPayerIdentifierDesc());
response.setIsArchived('Y' == record.getIsarchive() ? true : false);
payerInfoResponseList.add(response);
}
return payerInfoResponseList;
}

private List<String> checkPayerInfo(List<?> listToCheck) {
List<String> errorList = new LinkedList<>();

for (Object object : listToCheck) {

PayerInfoRequest payerInfoObj = (PayerInfoRequest) object;

if (payerInfoObj != null
&& ((payerInfoObj.getPayerIndex() == null || StringUtils.isEmpty(payerInfoObj.getPayerIndex()))
|| !isNumber(payerInfoObj.getPayerIndex()))) {

PayerConfig lookedUpPayerInfo = payerInfoRepository
.findBypayerIdentifier(payerInfoObj.getPayerIdentifier());

if (lookedUpPayerInfo != null) {
logger.warn(
String.format("Found an already existing item for request: %s", payerInfoObj.toString()));

errorList.add(String.format("Duplicate Found: %s of type Payer Info ",
payerInfoObj.getPayerIdentifier()));

}
}
}
return errorList;
}

@Override
public boolean addOrModifyPayerInfo(PayerInfoListRequest payerInfoRequest) throws GenericException {
boolean response = false;
if (payerInfoRequest.getPayerInfoList() != null && !payerInfoRequest.getPayerInfoList().isEmpty()) {
response = savePayerInfo(payerInfoRequest.getPayerInfoList());
}
return response;
}

private boolean isNumber(String input) {
try {
Integer.parseInt(input);
} catch (NumberFormatException ex) {
return false;
}
return true;
}

private boolean savePayerInfo(List<PayerInfoRequest> listToMap) {
PayerConfig payerConfigResponse = null;
for (PayerInfoRequest payerInfoObj : listToMap) {
PayerConfig payerInfoDb = null;
PayerConfig payerInfo = new PayerConfig();
payerInfo.setPayerIdentifier(payerInfoObj.getPayerIdentifier());
payerInfo.setPayerIdentifierDesc(payerInfoObj.getPayerIdentifierDesc());
payerInfo.setDatemodified(new Date());
if (!payerInfoObj.isArchive()) {
payerInfo.setIsarchive('N');
} else {
payerInfo.setIsarchive('Y');
}
if ((payerInfoObj.getPayerIndex() != null || !StringUtils.isEmpty(payerInfoObj.getPayerIndex()))
&& isNumber(payerInfoObj.getPayerIndex())) {
logger.info("payerInfoObj.getPayerIndex() " + payerInfoObj.getPayerIndex());
payerInfoDb = payerInfoRepository.findBypayerIndex(Long.valueOf(payerInfoObj.getPayerIndex()));
}
if (payerInfoDb == null) {
payerInfo.setDatecreated(new Date());
payerConfigResponse = payerInfoRepository.saveAndFlush(payerInfo);
logger.info("payerConfig Add Record Response" + payerConfigResponse);
} else {
payerInfo.setDatecreated(payerInfoDb.getDatecreated());
payerInfo.setPayerIndex(payerInfoDb.getPayerIndex());
payerConfigResponse = payerInfoRepository.save(payerInfo);
logger.info("payerConfig Modify Record Response" + payerConfigResponse);
}
}
return payerConfigResponse != null;
}

}