removed heades section from impl and added it in helper
This commit is contained in:
@@ -12,6 +12,8 @@ import com.billpaymentservice.bbps.dto.ResponseModel;
|
|||||||
import com.billpaymentservice.bbps.dto.request.BillPaymentRequest;
|
import com.billpaymentservice.bbps.dto.request.BillPaymentRequest;
|
||||||
import com.billpaymentservice.bbps.dto.request.TransactionStatusRequest;
|
import com.billpaymentservice.bbps.dto.request.TransactionStatusRequest;
|
||||||
import com.billpaymentservice.bbps.dto.request.TrasactionStatusByClientReqIdRequest;
|
import com.billpaymentservice.bbps.dto.request.TrasactionStatusByClientReqIdRequest;
|
||||||
|
import com.billpaymentservice.bbps.dto.response.FetchBillValidateResponse;
|
||||||
|
import com.billpaymentservice.bbps.dto.response.TransactionStatusResponse;
|
||||||
import com.billpaymentservice.bbps.service.PaymentService;
|
import com.billpaymentservice.bbps.service.PaymentService;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@@ -52,4 +54,11 @@ public class PaymentController {
|
|||||||
return ResponseEntity.ok(response);
|
return ResponseEntity.ok(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping(value="/callback/paymentIntiate", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
|
||||||
|
public ResponseEntity<ResponseModel> handleBillValidateCallback(@RequestBody TransactionStatusResponse transactionStatusResponse) {
|
||||||
|
ResponseModel genralResp=paymentService.handlePaymentIntiateCallback(transactionStatusResponse);
|
||||||
|
// Return a response indicating successful receipt
|
||||||
|
return ResponseEntity.ok(genralResp);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,6 @@ public interface AgentService {
|
|||||||
|
|
||||||
ResponseModel processBillFetchCallback(BillDataResponse billDataResponse);
|
ResponseModel processBillFetchCallback(BillDataResponse billDataResponse);
|
||||||
|
|
||||||
ResponseModel processBillValidateCallback(FetchBillValidateResponse billDataResponse);
|
ResponseModel processBillValidateCallback(FetchBillValidateResponse billValidateResponse);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// java
|
||||||
package com.billpaymentservice.bbps.serviceImpl;
|
package com.billpaymentservice.bbps.serviceImpl;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -10,7 +11,6 @@ import org.springframework.http.HttpHeaders;
|
|||||||
import org.springframework.http.MediaType;
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.client.RestClient;
|
import org.springframework.web.client.RestClient;
|
||||||
|
|
||||||
import com.billpaymentservice.bbps.dto.GeneralResp;
|
import com.billpaymentservice.bbps.dto.GeneralResp;
|
||||||
import com.billpaymentservice.bbps.dto.ResponseModel;
|
import com.billpaymentservice.bbps.dto.ResponseModel;
|
||||||
import com.billpaymentservice.bbps.dto.request.BillFetchByBillIdRequest;
|
import com.billpaymentservice.bbps.dto.request.BillFetchByBillIdRequest;
|
||||||
@@ -59,11 +59,15 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
private final BillInitateRepository billIntiateRepository;
|
private final BillInitateRepository billIntiateRepository;
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(AgentServiceImpl.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(AgentServiceImpl.class);
|
||||||
|
|
||||||
|
// Reusable ObjectMapper instance
|
||||||
|
private final ObjectMapper objectMapper = new ObjectMapper()
|
||||||
|
.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
||||||
|
|
||||||
public AgentServiceImpl(RestClient restClient, HttpService httpService, Helper helper,
|
public AgentServiceImpl(RestClient restClient, HttpService httpService, Helper helper,
|
||||||
BharatConnectMasterRepository beneficiaryDetailsRepository,
|
BharatConnectMasterRepository beneficiaryDetailsRepository,
|
||||||
InboundTraceLogRepository inboundTraceLogRepository, OutboundTraceLogRepository outboundTraceLogRepository,
|
InboundTraceLogRepository inboundTraceLogRepository, OutboundTraceLogRepository outboundTraceLogRepository,
|
||||||
BillMasterRepository billMasterRepository, BillInitateRepository billIntiateRepository,
|
BillMasterRepository billMasterRepository, BillInitateRepository billIntiateRepository,
|
||||||
BillerMapperHelper mapperHelper) {
|
BillerMapperHelper mapperHelper) {
|
||||||
this.restClient = restClient;
|
this.restClient = restClient;
|
||||||
this.httpService = httpService;
|
this.httpService = httpService;
|
||||||
this.helper = helper;
|
this.helper = helper;
|
||||||
@@ -84,21 +88,11 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
fetchBillRequest.setClientReqId(txnId);
|
fetchBillRequest.setClientReqId(txnId);
|
||||||
helper.validateMerchant(fetchBillRequest.getMid());
|
helper.validateMerchant(fetchBillRequest.getMid());
|
||||||
|
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
|
||||||
HttpHeaders headers = new HttpHeaders();
|
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
|
||||||
FetchBillForwardRequest forwardReq = helper.fetchBillForwardRequestMap(fetchBillRequest);
|
FetchBillForwardRequest forwardReq = helper.fetchBillForwardRequestMap(fetchBillRequest);
|
||||||
|
|
||||||
String forwardJson = helper.convertObjectToJson(forwardReq);
|
String forwardJson = helper.convertObjectToJson(forwardReq);
|
||||||
String requestJson = helper.convertObjectToJson(fetchBillRequest);
|
String requestJson = helper.convertObjectToJson(fetchBillRequest);
|
||||||
|
|
||||||
// ✅ Create inbound & outbound logs
|
|
||||||
InboundTraceLog inboundLog = helper.createInboundLog(requestId, txnId, apiName, fetchBillRequest.getMid(),
|
InboundTraceLog inboundLog = helper.createInboundLog(requestId, txnId, apiName, fetchBillRequest.getMid(),
|
||||||
"POST", requestJson);
|
"POST", requestJson);
|
||||||
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, requestId, apiName, fullUrl, "POST",
|
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, requestId, apiName, fullUrl, "POST",
|
||||||
@@ -107,7 +101,7 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
LOGGER.info("Calling external API: {}", fullUrl);
|
LOGGER.info("Calling external API: {}", fullUrl);
|
||||||
Map<String, String> responseMap = httpService.postRequest(fullUrl, forwardJson, headers);
|
Map<String, String> responseMap = httpService.postRequest(fullUrl, forwardJson, helper.buildHeaders(beneficiaryDetailsRepository.findByOrgId("ORG001")));
|
||||||
String responseData = responseMap.get("data");
|
String responseData = responseMap.get("data");
|
||||||
|
|
||||||
helper.updateOutboundLogResponse(outboundLog, responseData);
|
helper.updateOutboundLogResponse(outboundLog, responseData);
|
||||||
@@ -133,7 +127,7 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
|
|
||||||
FetchBillResponse fetchBillResponse = objectMapper.convertValue(dataMap, FetchBillResponse.class);
|
FetchBillResponse fetchBillResponse = objectMapper.convertValue(dataMap, FetchBillResponse.class);
|
||||||
GeneralResp generalResponse = fetchBillResponse.getGenericResponse();
|
GeneralResp generalResponse = fetchBillResponse.getGenericResponse();
|
||||||
helper.updateInboundLogSuccess(inboundLog, responseData, generalResponse.getStatus());
|
helper.updateInboundLogSuccess(inboundLog, responseData, generalResponse.getStatus());
|
||||||
|
|
||||||
BillInitiate billInitiate = new BillInitiate();
|
BillInitiate billInitiate = new BillInitiate();
|
||||||
billInitiate.setBillId((String) dataMap.get("billId"));
|
billInitiate.setBillId((String) dataMap.get("billId"));
|
||||||
@@ -171,20 +165,13 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
String billId = billFetchByBillIdRequest.getBillId();
|
String billId = billFetchByBillIdRequest.getBillId();
|
||||||
String fullUrl = agentDtaUrl + BBPSConstant.BILL_FETCH_BY_ID + billFetchByBillIdRequest.getBillId();
|
String fullUrl = agentDtaUrl + BBPSConstant.BILL_FETCH_BY_ID + billFetchByBillIdRequest.getBillId();
|
||||||
helper.validateMerchant(billFetchByBillIdRequest.getMid());
|
helper.validateMerchant(billFetchByBillIdRequest.getMid());
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
|
||||||
HttpHeaders headers = new HttpHeaders();
|
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "GET", null);
|
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "GET", null);
|
||||||
LOGGER.debug("Outbound log created successfully for FetchBillById: {}", fullUrl);
|
LOGGER.debug("Outbound log created successfully for FetchBillById: {}", fullUrl);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
LOGGER.info("Calling external API: {}", fullUrl);
|
LOGGER.info("Calling external API: {}", fullUrl);
|
||||||
Map<String, String> responseMap = httpService.getRequest(fullUrl, headers);
|
Map<String, String> responseMap = httpService.getRequest(fullUrl, helper.buildHeaders(beneficiaryDetailsRepository.findByOrgId("ORG001")));
|
||||||
String responseData = responseMap.get("data");
|
String responseData = responseMap.get("data");
|
||||||
LOGGER.info("Bill FetchById Response: {}", responseData);
|
LOGGER.info("Bill FetchById Response: {}", responseData);
|
||||||
|
|
||||||
@@ -231,7 +218,6 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
|
|
||||||
LOGGER.info("Initiating {} API for billId={} and reqId={}", apiName, billId, reqId);
|
LOGGER.info("Initiating {} API for billId={} and reqId={}", apiName, billId, reqId);
|
||||||
|
|
||||||
// create inbound log (GET -> no request body)
|
|
||||||
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName,
|
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName,
|
||||||
billFetchByBillIdRequest.getMid(), "GET", null);
|
billFetchByBillIdRequest.getMid(), "GET", null);
|
||||||
|
|
||||||
@@ -239,24 +225,14 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
helper.validateMerchant(billFetchByBillIdRequest.getMid());
|
helper.validateMerchant(billFetchByBillIdRequest.getMid());
|
||||||
LOGGER.debug("Merchant validated successfully for MID={}", billFetchByBillIdRequest.getMid());
|
LOGGER.debug("Merchant validated successfully for MID={}", billFetchByBillIdRequest.getMid());
|
||||||
|
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
|
||||||
HttpHeaders headers = new HttpHeaders();
|
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
// create outbound log
|
|
||||||
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "GET", null);
|
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "GET", null);
|
||||||
LOGGER.info("Calling external BBPS API for FetchBillById, URL={}", fullUrl);
|
LOGGER.info("Calling external BBPS API for FetchBillById, URL={}", fullUrl);
|
||||||
Map<String, String> responseMap = httpService.getRequest(fullUrl, headers);
|
Map<String, String> responseMap = httpService.getRequest(fullUrl, helper.buildHeaders(beneficiaryDetailsRepository.findByOrgId("ORG001")));
|
||||||
String responseData = responseMap.get("data");
|
String responseData = responseMap.get("data");
|
||||||
LOGGER.info("Response received from BBPS for billId={} : {}", billId, responseData);
|
LOGGER.info("Response received from BBPS for billId={} : {}", billId, responseData);
|
||||||
|
|
||||||
// update outbound log with response
|
|
||||||
helper.updateOutboundLogResponse(outboundLog, responseData);
|
helper.updateOutboundLogResponse(outboundLog, responseData);
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
Map<String, Object> dataMap = objectMapper.readValue(responseData,
|
Map<String, Object> dataMap = objectMapper.readValue(responseData,
|
||||||
new TypeReference<Map<String, Object>>() {
|
new TypeReference<Map<String, Object>>() {
|
||||||
});
|
});
|
||||||
@@ -264,19 +240,17 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
if (!dataMap.containsKey("genericResponse")) {
|
if (!dataMap.containsKey("genericResponse")) {
|
||||||
helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_RESPONSE");
|
helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_RESPONSE");
|
||||||
LOGGER.warn("Invalid response structure received for billId={} | Response={}", billId, responseData);
|
LOGGER.warn("Invalid response structure received for billId={} | Response={}", billId, responseData);
|
||||||
throw new CustomException(String.valueOf(dataMap.get("message")), // message
|
throw new CustomException(String.valueOf(dataMap.get("message")),
|
||||||
String.valueOf(dataMap.get("status")), // status
|
String.valueOf(dataMap.get("status")),
|
||||||
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode
|
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))),
|
||||||
String.valueOf(dataMap.get("remarks")));
|
String.valueOf(dataMap.get("remarks")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
BillDataResponse responseWrapper = objectMapper.convertValue(dataMap, BillDataResponse.class);
|
BillDataResponse responseWrapper = objectMapper.convertValue(dataMap, BillDataResponse.class);
|
||||||
GeneralResp generalResp = responseWrapper.getGenericResponse();
|
GeneralResp generalResp = responseWrapper.getGenericResponse();
|
||||||
ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
|
ResponseModel responseModel = new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
|
||||||
Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
|
Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
|
||||||
|
|
||||||
// update inbound log success and persist bill data
|
|
||||||
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
|
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
|
||||||
helper.saveOrUpdateBillData(responseWrapper, billFetchByBillIdRequest, txnId);
|
helper.saveOrUpdateBillData(responseWrapper, billFetchByBillIdRequest, txnId);
|
||||||
LOGGER.info("Bill data saved successfully for billId={} | Status={}", billId, generalResp.getStatus());
|
LOGGER.info("Bill data saved successfully for billId={} | Status={}", billId, generalResp.getStatus());
|
||||||
@@ -290,8 +264,6 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseModel initiateBillValidate(FetchBillValidatestRequest fetchBillValidateRequest) {
|
public ResponseModel initiateBillValidate(FetchBillValidatestRequest fetchBillValidateRequest) {
|
||||||
LOGGER.info("Initiating bill Validate for request ID: {} and MID:{} and billerId:{}", fetchBillValidateRequest.getReqId(),
|
LOGGER.info("Initiating bill Validate for request ID: {} and MID:{} and billerId:{}", fetchBillValidateRequest.getReqId(),
|
||||||
@@ -304,15 +276,6 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
fetchBillValidateRequest.setClientReqId(txnId);
|
fetchBillValidateRequest.setClientReqId(txnId);
|
||||||
helper.validateMerchant(fetchBillValidateRequest.getMid());
|
helper.validateMerchant(fetchBillValidateRequest.getMid());
|
||||||
|
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
|
||||||
HttpHeaders headers = new HttpHeaders();
|
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
|
||||||
FetchBillValidatestForwardRequest forwardReq = helper
|
FetchBillValidatestForwardRequest forwardReq = helper
|
||||||
.fetchBillValidatestForwardRequest(fetchBillValidateRequest);
|
.fetchBillValidatestForwardRequest(fetchBillValidateRequest);
|
||||||
|
|
||||||
@@ -320,7 +283,6 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
|
|
||||||
String requestJson = helper.convertObjectToJson(fetchBillValidateRequest);
|
String requestJson = helper.convertObjectToJson(fetchBillValidateRequest);
|
||||||
|
|
||||||
// ✅ Create inbound & outbound logs
|
|
||||||
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, fetchBillValidateRequest.getMid(),
|
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, fetchBillValidateRequest.getMid(),
|
||||||
"POST", requestJson);
|
"POST", requestJson);
|
||||||
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "POST", forwardJson);
|
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "POST", forwardJson);
|
||||||
@@ -328,7 +290,7 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
LOGGER.info("Calling external API: {}", fullUrl);
|
LOGGER.info("Calling external API: {}", fullUrl);
|
||||||
Map<String, String> responseMap = httpService.postRequest(fullUrl, forwardJson, headers);
|
Map<String, String> responseMap = httpService.postRequest(fullUrl, forwardJson, helper.buildHeaders(beneficiaryDetailsRepository.findByOrgId("ORG001")));
|
||||||
String responseData = responseMap.get("data");
|
String responseData = responseMap.get("data");
|
||||||
|
|
||||||
helper.updateOutboundLogResponse(outboundLog, responseData);
|
helper.updateOutboundLogResponse(outboundLog, responseData);
|
||||||
@@ -353,7 +315,7 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
LOGGER.info("BillMaster saved for billId: {}", billMaster.getBillId());
|
LOGGER.info("BillMaster saved for billId: {}", billMaster.getBillId());
|
||||||
FetchBillResponse fetchBillResponse = objectMapper.convertValue(dataMap, FetchBillResponse.class);
|
FetchBillResponse fetchBillResponse = objectMapper.convertValue(dataMap, FetchBillResponse.class);
|
||||||
GeneralResp generalResponse = fetchBillResponse.getGenericResponse();
|
GeneralResp generalResponse = fetchBillResponse.getGenericResponse();
|
||||||
helper.updateInboundLogSuccess(inboundLog, responseData, generalResponse.getStatus());
|
helper.updateInboundLogSuccess(inboundLog, responseData, generalResponse.getStatus());
|
||||||
|
|
||||||
BillInitiate billInitiate = new BillInitiate();
|
BillInitiate billInitiate = new BillInitiate();
|
||||||
billInitiate.setBillId((String) dataMap.get("billId"));
|
billInitiate.setBillId((String) dataMap.get("billId"));
|
||||||
@@ -380,7 +342,6 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
|
helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
|
||||||
throw new CustomException("Invalid JSON received from API");
|
throw new CustomException("Invalid JSON received from API");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ResponseModel BillvaidateByBillId(BillFetchByBillIdRequest billRequest, InboundTraceLog inboundLog) {
|
public ResponseModel BillvaidateByBillId(BillFetchByBillIdRequest billRequest, InboundTraceLog inboundLog) {
|
||||||
@@ -392,24 +353,15 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
String reqId = billRequest.getReqId();
|
String reqId = billRequest.getReqId();
|
||||||
String billId = billRequest.getBillId();
|
String billId = billRequest.getBillId();
|
||||||
String fullUrl = agentDtaUrl + BBPSConstant.BILL_VALIDATE_ID_URL + billRequest.getBillId();
|
String fullUrl = agentDtaUrl + BBPSConstant.BILL_VALIDATE_ID_URL + billRequest.getBillId();
|
||||||
;
|
|
||||||
|
|
||||||
helper.validateMerchant(billRequest.getMid());
|
helper.validateMerchant(billRequest.getMid());
|
||||||
|
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
|
||||||
HttpHeaders headers = new HttpHeaders();
|
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "GET", null);
|
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "GET", null);
|
||||||
LOGGER.debug("Outbound log created successfully for FetchBillById: {}", fullUrl);
|
LOGGER.debug("Outbound log created successfully for FetchBillById: {}", fullUrl);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
LOGGER.info("Calling external API: {}", fullUrl);
|
LOGGER.info("Calling external API: {}", fullUrl);
|
||||||
Map<String, String> responseMap = httpService.getRequest(fullUrl, headers);
|
Map<String, String> responseMap = httpService.getRequest(fullUrl, helper.buildHeaders(beneficiaryDetailsRepository.findByOrgId("ORG001")));
|
||||||
String responseData = responseMap.get("data");
|
String responseData = responseMap.get("data");
|
||||||
LOGGER.info("Bill FetchById Response: {}", responseData);
|
LOGGER.info("Bill FetchById Response: {}", responseData);
|
||||||
|
|
||||||
@@ -422,8 +374,7 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
if (!dataMap.containsKey("genericResponse")) {
|
if (!dataMap.containsKey("genericResponse")) {
|
||||||
helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_RESPONSE");
|
helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_RESPONSE");
|
||||||
LOGGER.warn("Invalid response structure for txnId: {}", txnId);
|
LOGGER.warn("Invalid response structure for txnId: {}", txnId);
|
||||||
throw new CustomException(String.valueOf(dataMap.get("message")),
|
throw new CustomException(String.valueOf(dataMap.get("message")), String.valueOf(dataMap.get("status")),
|
||||||
String.valueOf(dataMap.get("status")),
|
|
||||||
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))),
|
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))),
|
||||||
String.valueOf(dataMap.get("remarks")));
|
String.valueOf(dataMap.get("remarks")));
|
||||||
}
|
}
|
||||||
@@ -451,7 +402,6 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseModel initiateBillValidateByBillId(BillFetchByBillIdRequest billRequest) {
|
public ResponseModel initiateBillValidateByBillId(BillFetchByBillIdRequest billRequest) {
|
||||||
String apiName = "FetchBillById";
|
String apiName = "FetchBillById";
|
||||||
@@ -462,31 +412,20 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
|
|
||||||
LOGGER.info("Initiating {} API for billId={} and reqId={}", apiName, billId, reqId);
|
LOGGER.info("Initiating {} API for billId={} and reqId={}", apiName, billId, reqId);
|
||||||
|
|
||||||
// create inbound log (GET -> no request body)
|
|
||||||
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, billRequest.getMid(), "GET", null);
|
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, billRequest.getMid(), "GET", null);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
helper.validateMerchant(billRequest.getMid());
|
helper.validateMerchant(billRequest.getMid());
|
||||||
|
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
|
||||||
HttpHeaders headers = new HttpHeaders();
|
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
// create outbound log
|
|
||||||
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "GET", null);
|
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "GET", null);
|
||||||
LOGGER.info("Calling external BBPS API for ValidateByBillId, URL={}", fullUrl);
|
LOGGER.info("Calling external BBPS API for ValidateByBillId, URL={}", fullUrl);
|
||||||
|
|
||||||
Map<String, String> responseMap = httpService.getRequest(fullUrl, headers);
|
Map<String, String> responseMap = httpService.getRequest(fullUrl, helper.buildHeaders(beneficiaryDetailsRepository.findByOrgId("ORG001")));
|
||||||
String responseData = responseMap.get("data");
|
String responseData = responseMap.get("data");
|
||||||
LOGGER.info("Response received from BBPS for billId={} : {}", billId, responseData);
|
LOGGER.info("Response received from BBPS for billId={} : {}", billId, responseData);
|
||||||
|
|
||||||
// update outbound log with response
|
|
||||||
helper.updateOutboundLogResponse(outboundLog, responseData);
|
helper.updateOutboundLogResponse(outboundLog, responseData);
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
Map<String, Object> dataMap = objectMapper.readValue(responseData, new com.fasterxml.jackson.core.type.TypeReference<Map<String, Object>>(){});
|
Map<String, Object> dataMap = objectMapper.readValue(responseData, new com.fasterxml.jackson.core.type.TypeReference<Map<String, Object>>(){});
|
||||||
|
|
||||||
if (!dataMap.containsKey("genericResponse")) {
|
if (!dataMap.containsKey("genericResponse")) {
|
||||||
@@ -501,7 +440,6 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
FetchBillValidateResponse responseWrapper = objectMapper.convertValue(dataMap, FetchBillValidateResponse.class);
|
FetchBillValidateResponse responseWrapper = objectMapper.convertValue(dataMap, FetchBillValidateResponse.class);
|
||||||
GeneralResp generalResp = responseWrapper.getGenericResponse();
|
GeneralResp generalResp = responseWrapper.getGenericResponse();
|
||||||
|
|
||||||
// update inbound log and save validation data
|
|
||||||
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
|
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
|
||||||
helper.saveBillValidation(responseWrapper, billRequest);
|
helper.saveBillValidation(responseWrapper, billRequest);
|
||||||
LOGGER.info("Bill validation saved successfully for billId: {}", billId);
|
LOGGER.info("Bill validation saved successfully for billId: {}", billId);
|
||||||
@@ -515,9 +453,7 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//... remaining methods unchanged except where headers/objectMapper were previously created (they now use buildHeaders() and the class-level objectMapper)
|
||||||
|
|
||||||
//================================== Bill fetch and Bill Validate by Client Req Id==================================//
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseModel fetchBillValidateByClientReqId(BillValidateByClientIdRequest billValidateByClientIdRequest) {
|
public ResponseModel fetchBillValidateByClientReqId(BillValidateByClientIdRequest billValidateByClientIdRequest) {
|
||||||
@@ -536,16 +472,6 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
|
|
||||||
helper.validateMerchant(billValidateByClientIdRequest.getMid());
|
helper.validateMerchant(billValidateByClientIdRequest.getMid());
|
||||||
|
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
|
||||||
HttpHeaders headers = new HttpHeaders();
|
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
|
|
||||||
// 🔵 Create Inbound + Outbound Logs
|
|
||||||
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName,
|
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName,
|
||||||
billValidateByClientIdRequest.getMid(), "GET", null);
|
billValidateByClientIdRequest.getMid(), "GET", null);
|
||||||
|
|
||||||
@@ -553,7 +479,7 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
LOGGER.info("Calling BBPS API FetchBillValidateByClientReqId, URL={}", fullUrl);
|
LOGGER.info("Calling BBPS API FetchBillValidateByClientReqId, URL={}", fullUrl);
|
||||||
Map<String, String> responseMap = httpService.getRequest(fullUrl, headers);
|
Map<String, String> responseMap = httpService.getRequest(fullUrl, helper.buildHeaders(beneficiaryDetailsRepository.findByOrgId("ORG001")));
|
||||||
String responseData = responseMap.get("data");
|
String responseData = responseMap.get("data");
|
||||||
|
|
||||||
helper.updateOutboundLogResponse(outboundLog, responseData);
|
helper.updateOutboundLogResponse(outboundLog, responseData);
|
||||||
@@ -601,16 +527,6 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
|
|
||||||
helper.validateMerchant(billFetchByClientIdRequest.getMid());
|
helper.validateMerchant(billFetchByClientIdRequest.getMid());
|
||||||
|
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
|
||||||
HttpHeaders headers = new HttpHeaders();
|
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
|
|
||||||
// 🔵 Create inbound + outbound logs
|
|
||||||
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, billFetchByClientIdRequest.getMid(),
|
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, billFetchByClientIdRequest.getMid(),
|
||||||
"GET", null);
|
"GET", null);
|
||||||
|
|
||||||
@@ -618,7 +534,7 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
LOGGER.info("Calling BBPS API FetchBillByClientReqId, URL={}", fullUrl);
|
LOGGER.info("Calling BBPS API FetchBillByClientReqId, URL={}", fullUrl);
|
||||||
Map<String, String> responseMap = httpService.getRequest(fullUrl, headers);
|
Map<String, String> responseMap = httpService.getRequest(fullUrl, helper.buildHeaders(beneficiaryDetailsRepository.findByOrgId("ORG001")));
|
||||||
String responseData = responseMap.get("data");
|
String responseData = responseMap.get("data");
|
||||||
|
|
||||||
helper.updateOutboundLogResponse(outboundLog, responseData);
|
helper.updateOutboundLogResponse(outboundLog, responseData);
|
||||||
@@ -647,238 +563,30 @@ public class AgentServiceImpl implements AgentService {
|
|||||||
throw new CustomException("Invalid JSON received from API");
|
throw new CustomException("Invalid JSON received from API");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//================================== End Bill fetch and Bill Validate by Client Req Id==================================//
|
|
||||||
//===================================Callback Methods BillFetch and BillValidate ==================================//
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseModel processBillFetchCallback(BillDataResponse billDataResponse) {
|
public ResponseModel processBillFetchCallback(BillDataResponse billDataResponse) {
|
||||||
|
|
||||||
LOGGER.info("Recived Call Back from billDataResponse: {}", billDataResponse);
|
LOGGER.info("Recived Call Back from billDataResponse: {}", billDataResponse);
|
||||||
if(billDataResponse.getGenericResponse().getStatusCode().equals("200")) {
|
if(billDataResponse.getGenericResponse().getStatusCode().equals("200")) { }
|
||||||
|
|
||||||
}
|
|
||||||
else {
|
else {
|
||||||
LOGGER.info("Bill Fetch Callback Failed with Status: {}", billDataResponse.getGenericResponse().getStatus());
|
LOGGER.info("Bill Fetch Callback Failed with Status: {}", billDataResponse.getGenericResponse().getStatus());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return new ResponseModel("CallBack Recieved Successfully",
|
return new ResponseModel("CallBack Recieved Successfully",
|
||||||
"200",
|
"200",
|
||||||
200,
|
200,
|
||||||
"");
|
"");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ResponseModel processBillValidateCallback(FetchBillValidateResponse billValidateResponse) {
|
public ResponseModel processBillValidateCallback(FetchBillValidateResponse billValidateResponse) {
|
||||||
LOGGER.info("Recived Call Back from FetchBillValidateResponse: {}", billValidateResponse);
|
LOGGER.info("Recived Call Back from FetchBillValidateResponse: {}", billValidateResponse);
|
||||||
if(billValidateResponse.getGenericResponse().getStatusCode().equals("200")) {
|
if(billValidateResponse.getGenericResponse().getStatusCode().equals("200")) { }
|
||||||
|
else {
|
||||||
}
|
LOGGER.info("Bill Fetch Callback Failed with Status: {}", billValidateResponse.getGenericResponse().getStatus());
|
||||||
else {
|
}
|
||||||
LOGGER.info("Bill Fetch Callback Failed with Status: {}", billValidateResponse.getGenericResponse().getStatus());
|
return new ResponseModel("CallBack Recieved Successfully",
|
||||||
|
"200",
|
||||||
}
|
200,
|
||||||
|
"");
|
||||||
return new ResponseModel("CallBack Recieved Successfully",
|
}
|
||||||
"200",
|
}
|
||||||
200,
|
|
||||||
"");
|
|
||||||
|
|
||||||
|
|
||||||
}}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
|
|
||||||
* @Override public ResponseModel
|
|
||||||
* initiateBillValidate(FetchBillValidatestRequest fetchBillValidateRequest) {
|
|
||||||
*
|
|
||||||
* ResponseModel responseModel = new ResponseModel(); try {
|
|
||||||
*
|
|
||||||
* helper.validateMerchant(fetchBillValidateRequest.getMid());
|
|
||||||
*
|
|
||||||
* BharatConnectMaster headersData =
|
|
||||||
* beneficiaryDetailsRepository.findByOrgId("ORG001");
|
|
||||||
*
|
|
||||||
* if (headersData == null) { responseModel = new
|
|
||||||
* ResponseModel("Tenant Id Is Null", "Not Found", BBPSConstant.BADREQUEST,
|
|
||||||
* headersData); return responseModel; }
|
|
||||||
*
|
|
||||||
* HttpHeaders headers = new HttpHeaders(); headers.set("x-digiledge-key",
|
|
||||||
* headersData.getXDigiledgeKey()); headers.set("agentId",
|
|
||||||
* headersData.getAgentId()); headers.set("tenantId",
|
|
||||||
* headersData.getTenantId());
|
|
||||||
* headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
*
|
|
||||||
* ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
* objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); String
|
|
||||||
* json = objectMapper.writeValueAsString(fetchBillValidateRequest); String url
|
|
||||||
* = agentDtaUrl + BBPSConstant.BILLER_VALIDATE_URL;
|
|
||||||
*
|
|
||||||
* Map<String, String> responseMap = httpService.postRequest(url, json,
|
|
||||||
* headers); String responseData = responseMap.get("data");
|
|
||||||
*
|
|
||||||
* log.info("📦 Bill Fetch API Response: {}", responseData);
|
|
||||||
*
|
|
||||||
* if (responseData == null || responseData.isEmpty()) { throw new
|
|
||||||
* CustomException("Empty response from BBPS server"); }
|
|
||||||
*
|
|
||||||
* // ✅ Convert JSON string → Map Map<String, Object> dataMap =
|
|
||||||
* objectMapper.readValue(responseData, new TypeReference<Map<String, Object>>()
|
|
||||||
* {});
|
|
||||||
*
|
|
||||||
* // ✅ Validate generalResp if (!dataMap.containsKey("genericResponse")) {
|
|
||||||
* throw new CustomException("Invalid response structure from BBPS"); }
|
|
||||||
*
|
|
||||||
* // ✅ Convert to your custom DTO FetchBillValidatestResponse fetchBillResponse
|
|
||||||
* = objectMapper.convertValue(dataMap, FetchBillValidatestResponse.class);
|
|
||||||
* GeneralResp generalResponse = fetchBillResponse.getGenericResponse();
|
|
||||||
*
|
|
||||||
* // ✅ Build final ResponseModel responseModel = new ResponseModel(
|
|
||||||
* generalResponse.getMessage(), generalResponse.getStatus(),
|
|
||||||
* Integer.parseInt(generalResponse.getStatusCode()), fetchBillResponse );
|
|
||||||
*
|
|
||||||
* } catch (CustomException ex) { log.warn("Merchant validation failed: {}",
|
|
||||||
* ex.getMessage()); return ex.getResponseModel(); // Directly return
|
|
||||||
* ResponseModel from exception } catch (Exception e) {
|
|
||||||
* log.error("❌ Exception in initiateBillFetch(): {}", e.getMessage(), e);
|
|
||||||
* responseModel.setStatus("500");
|
|
||||||
* responseModel.setMessage("Exception occurred");
|
|
||||||
* responseModel.setData(e.getMessage()); }
|
|
||||||
*
|
|
||||||
* return responseModel; }
|
|
||||||
*
|
|
||||||
* @Override public ResponseModel
|
|
||||||
* initiateBillValidateByBillId(BillFetchByBillIdRequest billRequest) {
|
|
||||||
*
|
|
||||||
* ResponseModel responseModel = new ResponseModel(); try {
|
|
||||||
* helper.validateMerchant(billRequest.getMid());
|
|
||||||
*
|
|
||||||
* BharatConnectMaster headersData =
|
|
||||||
* beneficiaryDetailsRepository.findByOrgId("ORG001");
|
|
||||||
*
|
|
||||||
* if (headersData == null) { responseModel = new
|
|
||||||
* ResponseModel("Tenant Id Is Null", "Not Found", BBPSConstant.BADREQUEST,
|
|
||||||
* headersData); return responseModel; }
|
|
||||||
*
|
|
||||||
* HttpHeaders headers = new HttpHeaders(); headers.set("x-digiledge-key",
|
|
||||||
* headersData.getXDigiledgeKey()); headers.set("agentId",
|
|
||||||
* headersData.getAgentId()); headers.set("tenantId",
|
|
||||||
* headersData.getTenantId());
|
|
||||||
* headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
*
|
|
||||||
* ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
* objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); String
|
|
||||||
* json = objectMapper.writeValueAsString(billRequest); String url = agentDtaUrl
|
|
||||||
* + BBPSConstant.BILL_ID_URL + billRequest.getBillId();
|
|
||||||
*
|
|
||||||
* log.info("Full URL: {}", url);
|
|
||||||
* objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
|
||||||
*
|
|
||||||
* // ✅ Call the API using httpService Map<String, String> responseMap =
|
|
||||||
* httpService.getRequest(url, headers); String responseData =
|
|
||||||
* responseMap.get("data");
|
|
||||||
*
|
|
||||||
* log.info("📦 Bill Fetch API Response: {}", responseData);
|
|
||||||
*
|
|
||||||
* if (responseData == null || responseData.isEmpty()) { throw new
|
|
||||||
* CustomException("Empty response from BBPS server"); }
|
|
||||||
*
|
|
||||||
* // ✅ Convert JSON string → Map Map<String, Object> dataMap =
|
|
||||||
* objectMapper.readValue(responseData, new TypeReference<Map<String, Object>>()
|
|
||||||
* {});
|
|
||||||
*
|
|
||||||
* // ✅ Validate generalResp if (!dataMap.containsKey("genericResponse")) {
|
|
||||||
* throw new CustomException("Invalid response structure from BBPS"); }
|
|
||||||
*
|
|
||||||
* // ✅ Convert to your custom DTO BillDataResponse fetchBillResponse =
|
|
||||||
* objectMapper.convertValue(dataMap, BillDataResponse.class); GeneralResp
|
|
||||||
* generalResponse = fetchBillResponse.getGenericResponse();
|
|
||||||
*
|
|
||||||
* // ✅ Build final ResponseModel responseModel = new ResponseModel(
|
|
||||||
* generalResponse.getRemarks(), generalResponse.getStatus(),
|
|
||||||
* Integer.parseInt(generalResponse.getStatusCode()), fetchBillResponse );
|
|
||||||
*
|
|
||||||
* } catch (CustomException ex) { log.warn("Merchant validation failed: {}",
|
|
||||||
* ex.getMessage()); return ex.getResponseModel(); // Directly return
|
|
||||||
* ResponseModel from exception } catch (Exception e) {
|
|
||||||
* log.error("❌ Exception in initiateBillFetch(): {}", e.getMessage(), e);
|
|
||||||
* responseModel.setStatus("500");
|
|
||||||
* responseModel.setMessage("Exception occurred");
|
|
||||||
* responseModel.setData(e.getMessage()); }
|
|
||||||
*
|
|
||||||
* return responseModel; }
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* POLLING METHOD public ResponseModel fetchBillById(BillFetchByBillIdRequest
|
|
||||||
* billFetchByBillIdRequest, InboundTraceLog inboundLog) { String apiName =
|
|
||||||
* "FetchBillById"; String txnId = helper.generateTxnId(15); String reqId =
|
|
||||||
* billFetchByBillIdRequest.getReqId(); String billId =
|
|
||||||
* billFetchByBillIdRequest.getBillId(); String url = agentDtaUrl +
|
|
||||||
* BBPSConstant.BILL_FETCH_BY_ID + "1ced7566-1add-4e01-9ed6-04cd67ac9684";
|
|
||||||
*
|
|
||||||
* helper.validateMerchant(billFetchByBillIdRequest.getMid());
|
|
||||||
*
|
|
||||||
* BharatConnectMaster headersData =
|
|
||||||
* beneficiaryDetailsRepository.findByOrgId("ORG001"); HttpHeaders headers = new
|
|
||||||
* HttpHeaders(); headers.set("x-digiledge-key",
|
|
||||||
* headersData.getXDigiledgeKey()); headers.set("agentId",
|
|
||||||
* headersData.getAgentId()); headers.set("tenantId",
|
|
||||||
* headersData.getTenantId());
|
|
||||||
* headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
*
|
|
||||||
* ObjectMapper objectMapper = new ObjectMapper(); OutboundTraceLog outboundLog
|
|
||||||
* = helper.createOutboundLog(txnId, reqId, apiName, url, "GET", null);
|
|
||||||
*
|
|
||||||
* // ✅ Loop setup long startTime = System.currentTimeMillis(); long
|
|
||||||
* maxWaitTimeMs = 40000; // 40 seconds long intervalMs = 5000; // 5 seconds
|
|
||||||
*
|
|
||||||
* while (true) { try { Map<String, String> responseMap =
|
|
||||||
* httpService.getRequest(url, headers); String responseData =
|
|
||||||
* responseMap.get("data"); log.info("📦 Bill FetchById Response: {}",
|
|
||||||
* responseData);
|
|
||||||
*
|
|
||||||
* helper.updateOutboundLogResponse(outboundLog, responseData);
|
|
||||||
*
|
|
||||||
* Map<String, Object> dataMap = objectMapper.readValue(responseData, new
|
|
||||||
* TypeReference<Map<String, Object>>() {});
|
|
||||||
*
|
|
||||||
* if (!dataMap.containsKey("genericResponse")) {
|
|
||||||
* helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_RESPONSE");
|
|
||||||
* throw new CustomException( String.valueOf(dataMap.get("message")),
|
|
||||||
* String.valueOf(dataMap.get("status")),
|
|
||||||
* Integer.parseInt(String.valueOf(dataMap.get("statusCode"))),
|
|
||||||
* String.valueOf(dataMap.get("remarks")) ); }
|
|
||||||
*
|
|
||||||
* BillDataResponse responseWrapper = objectMapper.convertValue(dataMap,
|
|
||||||
* BillDataResponse.class); GeneralResp generalResp =
|
|
||||||
* responseWrapper.getGenericResponse();
|
|
||||||
*
|
|
||||||
* String status = generalResp.getStatus();
|
|
||||||
* log.info("📡 Current Bill Status: {}", status); // ✅ Check for "INPROGRESS"
|
|
||||||
* or pending state if ("INPROGRESS".equalsIgnoreCase(status)) { if
|
|
||||||
* (System.currentTimeMillis() - startTime > maxWaitTimeMs) {
|
|
||||||
* helper.updateInboundLogFailure(inboundLog, "Timeout after 40 seconds",
|
|
||||||
* "FAILED"); throw new CustomException("Timeout", "FAILED", 408,
|
|
||||||
* "Bill fetch still in progress"); } Thread.sleep(intervalMs); continue; //
|
|
||||||
* retry again } // ✅ Final successful response
|
|
||||||
* helper.updateInboundLogSuccess(inboundLog, responseData,
|
|
||||||
* generalResp.getStatus()); return new ResponseModel( generalResp.getMessage(),
|
|
||||||
* generalResp.getStatus(), Integer.parseInt(generalResp.getStatusCode()),
|
|
||||||
* responseWrapper ); } catch (JsonProcessingException e) {
|
|
||||||
* log.error("Error parsing BillById JSON: {}", e.getMessage());
|
|
||||||
* helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
|
|
||||||
* throw new CustomException("Invalid JSON received from API"); } catch
|
|
||||||
* (InterruptedException e) { Thread.currentThread().interrupt();
|
|
||||||
* helper.updateInboundLogFailure(inboundLog, e.getMessage(), "INTERRUPTED");
|
|
||||||
* throw new CustomException("Thread interrupted during bill status check"); } }
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// language: java
|
||||||
package com.billpaymentservice.bbps.serviceImpl;
|
package com.billpaymentservice.bbps.serviceImpl;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -19,13 +20,11 @@ import com.billpaymentservice.bbps.dto.request.ComplaintRequestDTO;
|
|||||||
import com.billpaymentservice.bbps.dto.request.GetTicketLatestStausRequest;
|
import com.billpaymentservice.bbps.dto.request.GetTicketLatestStausRequest;
|
||||||
import com.billpaymentservice.bbps.dto.request.TxnStatusRequest;
|
import com.billpaymentservice.bbps.dto.request.TxnStatusRequest;
|
||||||
import com.billpaymentservice.bbps.dto.request.ViewAllComplaintsTicketsRequest;
|
import com.billpaymentservice.bbps.dto.request.ViewAllComplaintsTicketsRequest;
|
||||||
|
|
||||||
import com.billpaymentservice.bbps.dto.request.ViewAllComplaintsRequest;
|
import com.billpaymentservice.bbps.dto.request.ViewAllComplaintsRequest;
|
||||||
import com.billpaymentservice.bbps.dto.response.ComplaintHistoryStatusResponse;
|
import com.billpaymentservice.bbps.dto.response.ComplaintHistoryStatusResponse;
|
||||||
import com.billpaymentservice.bbps.dto.response.ComplaintResponse;
|
import com.billpaymentservice.bbps.dto.response.ComplaintResponse;
|
||||||
import com.billpaymentservice.bbps.dto.response.TicketCheckStatusResponse;
|
import com.billpaymentservice.bbps.dto.response.TicketCheckStatusResponse;
|
||||||
import com.billpaymentservice.bbps.dto.response.TxnStatusResponse;
|
import com.billpaymentservice.bbps.dto.response.TxnStatusResponse;
|
||||||
|
|
||||||
import com.billpaymentservice.bbps.dto.response.ViewAllComplaintsTicketsResponse;
|
import com.billpaymentservice.bbps.dto.response.ViewAllComplaintsTicketsResponse;
|
||||||
import com.billpaymentservice.bbps.dto.response.ViewAllComplaintsResponse;
|
import com.billpaymentservice.bbps.dto.response.ViewAllComplaintsResponse;
|
||||||
import com.billpaymentservice.bbps.dto.response.ViewComplainByIdResponse;
|
import com.billpaymentservice.bbps.dto.response.ViewComplainByIdResponse;
|
||||||
@@ -64,8 +63,9 @@ public class ComplainServiceImpl implements ComplainService {
|
|||||||
private final ComplainRepository complainRepository;
|
private final ComplainRepository complainRepository;
|
||||||
private final ComplaintOptionsStatusMasterRepository complaintStatusMasterRepository;
|
private final ComplaintOptionsStatusMasterRepository complaintStatusMasterRepository;
|
||||||
|
|
||||||
private final ObjectMapper objectMapper = new ObjectMapper();
|
// moved to class-level
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(AgentServiceImpl.class);
|
private final ObjectMapper objectMapper;
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(ComplainServiceImpl.class);
|
||||||
|
|
||||||
public ComplainServiceImpl(RestClient restClient, HttpService httpService, Helper helper,
|
public ComplainServiceImpl(RestClient restClient, HttpService httpService, Helper helper,
|
||||||
BharatConnectMasterRepository beneficiaryDetailsRepository, BillerMapperHelper mapperHelper,
|
BharatConnectMasterRepository beneficiaryDetailsRepository, BillerMapperHelper mapperHelper,
|
||||||
@@ -78,6 +78,10 @@ public class ComplainServiceImpl implements ComplainService {
|
|||||||
this.mapperHelper = mapperHelper;
|
this.mapperHelper = mapperHelper;
|
||||||
this.complainRepository = complainRepository;
|
this.complainRepository = complainRepository;
|
||||||
this.complaintStatusMasterRepository = complaintStatusMasterRepository;
|
this.complaintStatusMasterRepository = complaintStatusMasterRepository;
|
||||||
|
|
||||||
|
// initialize shared ObjectMapper once
|
||||||
|
this.objectMapper = new ObjectMapper();
|
||||||
|
this.objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -99,11 +103,7 @@ public class ComplainServiceImpl implements ComplainService {
|
|||||||
// Fetch tenant & agent from DB
|
// Fetch tenant & agent from DB
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
||||||
|
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = helper.buildHeaders(headersData);
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
InboundTraceLog inboundLog = helper.createInboundLog(requestId, txnId, apiName, complainRequestDTO.getMid(),
|
InboundTraceLog inboundLog = helper.createInboundLog(requestId, txnId, apiName, complainRequestDTO.getMid(),
|
||||||
"POST", requestJson);
|
"POST", requestJson);
|
||||||
@@ -180,11 +180,7 @@ public class ComplainServiceImpl implements ComplainService {
|
|||||||
|
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
||||||
|
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = helper.buildHeaders(headersData);
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
// Convert request to JSON
|
// Convert request to JSON
|
||||||
String requestJson = helper.convertObjectToJson(request);
|
String requestJson = helper.convertObjectToJson(request);
|
||||||
@@ -215,11 +211,11 @@ public class ComplainServiceImpl implements ComplainService {
|
|||||||
int end = responseData.lastIndexOf("}");
|
int end = responseData.lastIndexOf("}");
|
||||||
if (start != -1 && end != -1) {
|
if (start != -1 && end != -1) {
|
||||||
responseData = responseData.substring(start, end + 1);
|
responseData = responseData.substring(start, end + 1);
|
||||||
LOGGER.info("Extracted Clean JSON: {}", responseData);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOGGER.info("Extracted pure JSON from error: {}", responseData);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert JSON to Map
|
|
||||||
Map<String, Object> dataMap = objectMapper.readValue(responseData,
|
Map<String, Object> dataMap = objectMapper.readValue(responseData,
|
||||||
new TypeReference<Map<String, Object>>() {
|
new TypeReference<Map<String, Object>>() {
|
||||||
});
|
});
|
||||||
@@ -231,25 +227,17 @@ public class ComplainServiceImpl implements ComplainService {
|
|||||||
statusCode, String.valueOf(dataMap.get("remarks")));
|
statusCode, String.valueOf(dataMap.get("remarks")));
|
||||||
}
|
}
|
||||||
|
|
||||||
TicketCheckStatusResponse responseWrapper = objectMapper.convertValue(dataMap,
|
TicketCheckStatusResponse responseWrapper = objectMapper.convertValue(dataMap, TicketCheckStatusResponse.class);
|
||||||
TicketCheckStatusResponse.class);
|
|
||||||
|
|
||||||
LOGGER.info("Complaint Current Status: {}", responseWrapper.getStatus());
|
|
||||||
|
|
||||||
helper.updateInboundLogSuccess(inboundLog, responseData, responseWrapper.getStatus());
|
helper.updateInboundLogSuccess(inboundLog, responseData, responseWrapper.getStatus());
|
||||||
|
|
||||||
// Save in DB
|
|
||||||
mapperHelper.saveComplaintStatus(responseWrapper, reqId, txnId);
|
|
||||||
|
|
||||||
return new ResponseModel(responseWrapper.getMessage(), responseWrapper.getStatus(),
|
return new ResponseModel(responseWrapper.getMessage(), responseWrapper.getStatus(),
|
||||||
Integer.parseInt(responseWrapper.getStatusCode()), responseWrapper);
|
Integer.parseInt(responseWrapper.getStatusCode()), responseWrapper);
|
||||||
|
|
||||||
} catch (JsonProcessingException e) {
|
} catch (JsonProcessingException e) {
|
||||||
|
LOGGER.error("Error parsing JSON in complaint status API: {}", e.getMessage(), e);
|
||||||
LOGGER.error("Error parsing Complaint Status JSON: {}", e.getMessage());
|
|
||||||
helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
|
helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
|
||||||
throw new CustomException("Invalid JSON received from API");
|
throw new CustomException("Invalid JSON received from API");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -266,14 +254,8 @@ public class ComplainServiceImpl implements ComplainService {
|
|||||||
helper.validateMerchant(request.getMid());
|
helper.validateMerchant(request.getMid());
|
||||||
|
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = helper.buildHeaders(headersData);
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
|
||||||
String requestJson = helper.convertObjectToJson(request);
|
String requestJson = helper.convertObjectToJson(request);
|
||||||
|
|
||||||
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, request.getMid(), "GET",
|
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, request.getMid(), "GET",
|
||||||
@@ -333,14 +315,8 @@ public class ComplainServiceImpl implements ComplainService {
|
|||||||
helper.validateMerchant(request.getMid());
|
helper.validateMerchant(request.getMid());
|
||||||
|
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = helper.buildHeaders(headersData);
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
|
||||||
String requestJson = helper.convertObjectToJson(request);
|
String requestJson = helper.convertObjectToJson(request);
|
||||||
|
|
||||||
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, request.getMid(), "GET",
|
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, request.getMid(), "GET",
|
||||||
@@ -442,14 +418,8 @@ public class ComplainServiceImpl implements ComplainService {
|
|||||||
helper.validateMerchant(request.getMid());
|
helper.validateMerchant(request.getMid());
|
||||||
|
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = helper.buildHeaders(headersData);
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
|
||||||
String requestJson = helper.convertObjectToJson(request);
|
String requestJson = helper.convertObjectToJson(request);
|
||||||
|
|
||||||
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, request.getMid(), "GET",
|
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, request.getMid(), "GET",
|
||||||
@@ -508,14 +478,8 @@ public class ComplainServiceImpl implements ComplainService {
|
|||||||
helper.validateMerchant(request.getMid());
|
helper.validateMerchant(request.getMid());
|
||||||
|
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = helper.buildHeaders(headersData);
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
|
||||||
String requestJson = helper.convertObjectToJson(request);
|
String requestJson = helper.convertObjectToJson(request);
|
||||||
|
|
||||||
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, request.getMid(), "POST",
|
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, request.getMid(), "POST",
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// java
|
|
||||||
package com.billpaymentservice.bbps.serviceImpl;
|
package com.billpaymentservice.bbps.serviceImpl;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -10,6 +9,8 @@ import org.modelmapper.convention.MatchingStrategies;
|
|||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import com.billpaymentservice.bbps.dto.ContactMaster;
|
import com.billpaymentservice.bbps.dto.ContactMaster;
|
||||||
@@ -56,6 +57,7 @@ import com.billpaymentservice.bbps.util.BBPSConstant;
|
|||||||
import com.billpaymentservice.bbps.util.BillerMapperHelper;
|
import com.billpaymentservice.bbps.util.BillerMapperHelper;
|
||||||
import com.billpaymentservice.bbps.util.EntityRelationshipUtil;
|
import com.billpaymentservice.bbps.util.EntityRelationshipUtil;
|
||||||
import com.billpaymentservice.bbps.util.Helper;
|
import com.billpaymentservice.bbps.util.Helper;
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.fasterxml.jackson.core.type.TypeReference;
|
||||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
@@ -76,7 +78,7 @@ public class MasterDataServiceImpl implements MasterDataService {
|
|||||||
private final Helper helper;
|
private final Helper helper;
|
||||||
private final BillerDataRepository billerDataRespository;
|
private final BillerDataRepository billerDataRespository;
|
||||||
private final HttpService httpService;
|
private final HttpService httpService;
|
||||||
private final ObjectMapper objectMapper = new ObjectMapper();
|
private final ObjectMapper objectMapper;
|
||||||
private final InboundTraceLogRepository inboundTraceLogRepository;
|
private final InboundTraceLogRepository inboundTraceLogRepository;
|
||||||
private final OutboundTraceLogRepository outboundTraceLogRepository;
|
private final OutboundTraceLogRepository outboundTraceLogRepository;
|
||||||
private final CustomParamRepository customParamReposiotory;
|
private final CustomParamRepository customParamReposiotory;
|
||||||
@@ -98,6 +100,8 @@ public class MasterDataServiceImpl implements MasterDataService {
|
|||||||
this.mapperHelper = mapperHelper;
|
this.mapperHelper = mapperHelper;
|
||||||
this.customParamReposiotory = customParamReposiotory;
|
this.customParamReposiotory = customParamReposiotory;
|
||||||
|
|
||||||
|
this.objectMapper = new ObjectMapper();
|
||||||
|
this.objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -112,7 +116,7 @@ public class MasterDataServiceImpl implements MasterDataService {
|
|||||||
try {
|
try {
|
||||||
// Merchant Validation
|
// Merchant Validation
|
||||||
helper.validateMerchant(masterRequest.getMid());
|
helper.validateMerchant(masterRequest.getMid());
|
||||||
// check Tender Id is present DB
|
// check Tenant Id is present DB
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
||||||
if (headersData == null) {
|
if (headersData == null) {
|
||||||
LOGGER.warn("header data not found for the orgID");
|
LOGGER.warn("header data not found for the orgID");
|
||||||
@@ -122,10 +126,10 @@ public class MasterDataServiceImpl implements MasterDataService {
|
|||||||
String fullUrl = masterRegisterUrl + BBPSConstant.MASTER_CATEGORY_URL + headersData.getTenantId();
|
String fullUrl = masterRegisterUrl + BBPSConstant.MASTER_CATEGORY_URL + headersData.getTenantId();
|
||||||
LOGGER.info("Calling external API: {}", fullUrl);
|
LOGGER.info("Calling external API: {}", fullUrl);
|
||||||
OutboundTraceLog outboundLog = helper.createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null);
|
OutboundTraceLog outboundLog = helper.createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null);
|
||||||
Map<String, String> responseMap = httpService.getRequest(fullUrl);
|
HttpHeaders headers = helper.buildHeaders(headersData);
|
||||||
|
Map<String, String> responseMap = httpService.getRequest(fullUrl, headers);
|
||||||
String responseData = responseMap.get("data");
|
String responseData = responseMap.get("data");
|
||||||
|
|
||||||
// LOGGER.info("Response Data: {}", responseData);
|
|
||||||
helper.updateOutboundLogResponse(outboundLog, responseData);
|
helper.updateOutboundLogResponse(outboundLog, responseData);
|
||||||
Map<String, Object> dataMap = objectMapper.readValue(responseData,
|
Map<String, Object> dataMap = objectMapper.readValue(responseData,
|
||||||
new TypeReference<Map<String, Object>>() {
|
new TypeReference<Map<String, Object>>() {
|
||||||
@@ -290,7 +294,8 @@ public class MasterDataServiceImpl implements MasterDataService {
|
|||||||
LOGGER.info("Contact Master Full URL-:" + fullUrl);
|
LOGGER.info("Contact Master Full URL-:" + fullUrl);
|
||||||
OutboundTraceLog outboundLog = helper.createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null);
|
OutboundTraceLog outboundLog = helper.createOutboundLog(txnID, requestId, apiName, fullUrl, "GET", null);
|
||||||
|
|
||||||
Map<String, String> responseMap = httpService.getRequest(fullUrl);
|
HttpHeaders headers = helper.buildHeaders(headersData);
|
||||||
|
Map<String, String> responseMap = httpService.getRequest(fullUrl, headers);
|
||||||
String responseData = responseMap.get("data");
|
String responseData = responseMap.get("data");
|
||||||
LOGGER.info("Response Data: {}", responseData);
|
LOGGER.info("Response Data: {}", responseData);
|
||||||
|
|
||||||
@@ -407,8 +412,6 @@ public class MasterDataServiceImpl implements MasterDataService {
|
|||||||
helper.updateOutboundLogResponse(outboundLog, responseData);
|
helper.updateOutboundLogResponse(outboundLog, responseData);
|
||||||
try {
|
try {
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
|
|
||||||
Map<String, Object> dataMap = objectMapper.readValue(responseData,
|
Map<String, Object> dataMap = objectMapper.readValue(responseData,
|
||||||
new TypeReference<Map<String, Object>>() {
|
new TypeReference<Map<String, Object>>() {
|
||||||
});
|
});
|
||||||
@@ -750,8 +753,6 @@ public class MasterDataServiceImpl implements MasterDataService {
|
|||||||
helper.updateOutboundLogResponse(outboundLog, responseData);
|
helper.updateOutboundLogResponse(outboundLog, responseData);
|
||||||
try {
|
try {
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
|
|
||||||
Map<String, Object> dataMap = objectMapper.readValue(responseData,
|
Map<String, Object> dataMap = objectMapper.readValue(responseData,
|
||||||
new TypeReference<Map<String, Object>>() {
|
new TypeReference<Map<String, Object>>() {
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// PaymentServiceImpl.java
|
||||||
package com.billpaymentservice.bbps.serviceImpl;
|
package com.billpaymentservice.bbps.serviceImpl;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -46,496 +47,343 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
|||||||
@Service
|
@Service
|
||||||
public class PaymentServiceImpl implements PaymentService {
|
public class PaymentServiceImpl implements PaymentService {
|
||||||
|
|
||||||
@Value("${payment.data.url}")
|
@Value("${payment.data.url}")
|
||||||
private String paymentUrl;
|
private String paymentUrl;
|
||||||
|
|
||||||
private final BharatConnectMasterRepository beneficiaryDetailsRepository;
|
private final BharatConnectMasterRepository beneficiaryDetailsRepository;
|
||||||
private final HttpService httpService;
|
private final HttpService httpService;
|
||||||
private final Helper helper;
|
private final Helper helper;
|
||||||
private final PaymentRepository paymentRepository;
|
private final PaymentRepository paymentRepository;
|
||||||
private final InboundTraceLogRepository inboundTraceLogRepository;
|
private final InboundTraceLogRepository inboundTraceLogRepository;
|
||||||
private final OutboundTraceLogRepository outboundTraceLogRepository;
|
private final OutboundTraceLogRepository outboundTraceLogRepository;
|
||||||
private final PaymentIntiateRepository paymentIntiateRepository;
|
private final PaymentIntiateRepository paymentIntiateRepository;
|
||||||
private final TransactionMasterRepository transactionMasterRepository;
|
private final TransactionMasterRepository transactionMasterRepository;
|
||||||
private final AgentFundTransferRepository agentFundTransferRepository;
|
private final AgentFundTransferRepository agentFundTransferRepository;
|
||||||
|
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(PaymentServiceImpl.class);
|
// Shared reusable instances
|
||||||
|
private final ObjectMapper objectMapper;
|
||||||
|
private final ModelMapper modelMapper;
|
||||||
|
|
||||||
public PaymentServiceImpl(BharatConnectMasterRepository beneficiaryDetailsRepository, HttpService httpService,
|
private static final Logger LOGGER = LoggerFactory.getLogger(PaymentServiceImpl.class);
|
||||||
Helper helper, PaymentRepository paymentRepository, InboundTraceLogRepository inboundTraceLogRepository,
|
|
||||||
OutboundTraceLogRepository outboundTraceLogRepository, PaymentIntiateRepository paymentIntiateRepository,
|
|
||||||
TransactionMasterRepository transactionMasterRepository,
|
|
||||||
AgentFundTransferRepository agentFundTransferRepository) {
|
|
||||||
this.beneficiaryDetailsRepository = beneficiaryDetailsRepository;
|
|
||||||
this.httpService = httpService;
|
|
||||||
this.helper = helper;
|
|
||||||
this.paymentRepository = paymentRepository;
|
|
||||||
this.inboundTraceLogRepository = inboundTraceLogRepository;
|
|
||||||
this.outboundTraceLogRepository = outboundTraceLogRepository;
|
|
||||||
this.paymentIntiateRepository = paymentIntiateRepository;
|
|
||||||
this.transactionMasterRepository = transactionMasterRepository;
|
|
||||||
this.agentFundTransferRepository = agentFundTransferRepository;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
public PaymentServiceImpl(BharatConnectMasterRepository beneficiaryDetailsRepository, HttpService httpService,
|
||||||
public ResponseModel initiatePayment(BillPaymentRequest billPaymentRequest) {
|
Helper helper, PaymentRepository paymentRepository, InboundTraceLogRepository inboundTraceLogRepository,
|
||||||
String apiName = "InitiatePayment";
|
OutboundTraceLogRepository outboundTraceLogRepository, PaymentIntiateRepository paymentIntiateRepository,
|
||||||
String txnId = helper.generateTxnId(15);
|
TransactionMasterRepository transactionMasterRepository,
|
||||||
String requestId = billPaymentRequest.getReqId();
|
AgentFundTransferRepository agentFundTransferRepository) {
|
||||||
String url = paymentUrl + BBPSConstant.PAYMENT_URL;
|
this.beneficiaryDetailsRepository = beneficiaryDetailsRepository;
|
||||||
billPaymentRequest.setClientReqId(txnId);
|
this.httpService = httpService;
|
||||||
LOGGER.info("Initiating payment for reqId={} and txnId={}", requestId, txnId);
|
this.helper = helper;
|
||||||
|
this.paymentRepository = paymentRepository;
|
||||||
|
this.inboundTraceLogRepository = inboundTraceLogRepository;
|
||||||
|
this.outboundTraceLogRepository = outboundTraceLogRepository;
|
||||||
|
this.paymentIntiateRepository = paymentIntiateRepository;
|
||||||
|
this.transactionMasterRepository = transactionMasterRepository;
|
||||||
|
this.agentFundTransferRepository = agentFundTransferRepository;
|
||||||
|
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
this.objectMapper = new ObjectMapper();
|
||||||
HttpHeaders headers = new HttpHeaders();
|
this.objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
this.modelMapper = new ModelMapper();
|
||||||
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
this.modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
|
||||||
BillPaymentForwardRequest forwardReq =
|
}
|
||||||
helper.billPaymentForwardRequest(billPaymentRequest);
|
|
||||||
|
|
||||||
String forwardjson = helper.convertObjectToJson(forwardReq);
|
@Override
|
||||||
|
public ResponseModel initiatePayment(BillPaymentRequest billPaymentRequest) {
|
||||||
|
String apiName = "InitiatePayment";
|
||||||
|
String txnId = helper.generateTxnId(15);
|
||||||
|
String requestId = billPaymentRequest.getReqId();
|
||||||
|
String url = paymentUrl + BBPSConstant.PAYMENT_URL;
|
||||||
|
billPaymentRequest.setClientReqId(txnId);
|
||||||
|
LOGGER.info("Initiating payment for reqId={} and txnId={}", requestId, txnId);
|
||||||
|
|
||||||
|
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
||||||
|
HttpHeaders headers = helper.buildHeaders(headersData);
|
||||||
|
|
||||||
String requestJson = helper.convertObjectToJson(billPaymentRequest);
|
BillPaymentForwardRequest forwardReq = helper.billPaymentForwardRequest(billPaymentRequest);
|
||||||
|
String forwardjson = helper.convertObjectToJson(forwardReq);
|
||||||
|
String requestJson = helper.convertObjectToJson(billPaymentRequest);
|
||||||
|
|
||||||
InboundTraceLog inboundLog = helper.createInboundLog(requestId, txnId, apiName, billPaymentRequest.getMid(), "POST", requestJson);
|
InboundTraceLog inboundLog = helper.createInboundLog(requestId, txnId, apiName, billPaymentRequest.getMid(), "POST", requestJson);
|
||||||
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, requestId, apiName, url, "POST",forwardjson);
|
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, requestId, apiName, url, "POST", forwardjson);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
LOGGER.info("Calling BBPS payment URL: {}", url);
|
LOGGER.info("Calling BBPS payment URL: {}", url);
|
||||||
Map<String, String> responseMap = httpService.postRequest(url, forwardjson, headers);
|
Map<String, String> responseMap = httpService.postRequest(url, forwardjson, headers);
|
||||||
String responseData = responseMap.get("data");
|
String responseData = responseMap.get("data");
|
||||||
LOGGER.info("Payment API Response: {}", responseData);
|
LOGGER.info("Payment API Response: {}", responseData);
|
||||||
|
|
||||||
helper.updateOutboundLogResponse(outboundLog, responseData);
|
helper.updateOutboundLogResponse(outboundLog, responseData);
|
||||||
|
|
||||||
if (responseData == null || responseData.isEmpty()) {
|
if (responseData == null || responseData.isEmpty()) {
|
||||||
helper.updateInboundLogFailure(inboundLog, "Empty response from BBPS", "FAILED");
|
helper.updateInboundLogFailure(inboundLog, "Empty response from BBPS", "FAILED");
|
||||||
LOGGER.warn("Empty response received from BBPS for txnId={}", txnId);
|
LOGGER.warn("Empty response received from BBPS for txnId={}", txnId);
|
||||||
throw new CustomException("Empty response from BBPS server");
|
throw new CustomException("Empty response from BBPS server");
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<String, Object> dataMap = objectMapper.readValue(responseData, new TypeReference<Map<String, Object>>() {});
|
Map<String, Object> dataMap = objectMapper.readValue(responseData, new TypeReference<Map<String, Object>>() {});
|
||||||
if (!dataMap.containsKey("genericResponse")) {
|
if (!dataMap.containsKey("genericResponse")) {
|
||||||
helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_STRUCTURE");
|
helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_STRUCTURE");
|
||||||
LOGGER.warn("Invalid response structure received for txnId={}", txnId);
|
LOGGER.warn("Invalid response structure received for txnId={}", txnId);
|
||||||
throw new CustomException("Invalid response structure from BBPS");
|
throw new CustomException("Invalid response structure from BBPS");
|
||||||
}
|
}
|
||||||
|
|
||||||
BillPaymentResponse billPaymentResponse = objectMapper.convertValue(dataMap, BillPaymentResponse.class);
|
BillPaymentResponse billPaymentResponse = objectMapper.convertValue(dataMap, BillPaymentResponse.class);
|
||||||
GeneralResp generalResponse = billPaymentResponse.getGenericResponse();
|
GeneralResp generalResponse = billPaymentResponse.getGenericResponse();
|
||||||
|
|
||||||
ModelMapper mapper = new ModelMapper();
|
BillPayment entity = modelMapper.map(billPaymentResponse, BillPayment.class);
|
||||||
mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
|
paymentRepository.save(entity);
|
||||||
BillPayment entity = mapper.map(billPaymentResponse, BillPayment.class);
|
LOGGER.info("BillPayment entity saved successfully for txnId={}", txnId);
|
||||||
paymentRepository.save(entity);
|
|
||||||
LOGGER.info("BillPayment entity saved successfully for txnId={}", txnId);
|
|
||||||
|
|
||||||
helper.updateInboundLogSuccess(inboundLog, responseData, generalResponse.getStatus());
|
helper.updateInboundLogSuccess(inboundLog, responseData, generalResponse.getStatus());
|
||||||
PaymentInitiate paymentInitiate = new PaymentInitiate();
|
PaymentInitiate paymentInitiate = new PaymentInitiate();
|
||||||
paymentInitiate.setTxnId(txnId);
|
paymentInitiate.setTxnId(txnId);
|
||||||
paymentInitiate.setReqId(requestId);
|
paymentInitiate.setReqId(requestId);
|
||||||
paymentInitiate.setBankTxnId(billPaymentResponse.getTxnId());
|
paymentInitiate.setBankTxnId(billPaymentResponse.getTxnId());
|
||||||
paymentInitiate.setStatus(billPaymentResponse.getStatus());
|
paymentInitiate.setStatus(billPaymentResponse.getStatus());
|
||||||
paymentIntiateRepository.save(paymentInitiate);
|
paymentIntiateRepository.save(paymentInitiate);
|
||||||
LOGGER.info("PaymentInitiate entry saved successfully for txnId={}", txnId);
|
LOGGER.info("PaymentInitiate entry saved successfully for txnId={}", txnId);
|
||||||
|
|
||||||
TransactionStatusRequest transactionStatusRequest = new TransactionStatusRequest();
|
TransactionStatusRequest transactionStatusRequest = new TransactionStatusRequest();
|
||||||
transactionStatusRequest.setTxnId(billPaymentResponse.getTxnId());
|
transactionStatusRequest.setTxnId(billPaymentResponse.getTxnId());
|
||||||
transactionStatusRequest.setReqId(requestId);
|
transactionStatusRequest.setReqId(requestId);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Thread.sleep(9000);
|
Thread.sleep(9000);
|
||||||
} catch (InterruptedException e) {
|
} catch (InterruptedException e) {
|
||||||
Thread.currentThread().interrupt();
|
Thread.currentThread().interrupt();
|
||||||
LOGGER.warn("Thread interrupted during payment delay: {}", e.getMessage());
|
LOGGER.warn("Thread interrupted during payment delay: {}", e.getMessage());
|
||||||
}
|
}
|
||||||
LOGGER.info("Checking transaction status for txnId={}", billPaymentResponse.getTxnId());
|
LOGGER.info("Checking transaction status for txnId={}", billPaymentResponse.getTxnId());
|
||||||
return checkTrasactionStatus(transactionStatusRequest, inboundLog);
|
return checkTrasactionStatus(transactionStatusRequest, inboundLog);
|
||||||
|
|
||||||
} catch (JsonProcessingException e) {
|
} catch (JsonProcessingException e) {
|
||||||
LOGGER.error("JSON Parsing Error in initiatePayment: {}", e.getMessage(), e);
|
LOGGER.error("JSON Parsing Error in initiatePayment: {}", e.getMessage(), e);
|
||||||
helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
|
helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
|
||||||
throw new CustomException("Invalid JSON received from API");
|
throw new CustomException("Invalid JSON received from API");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ResponseModel checkTrasactionStatus(TransactionStatusRequest transactionStatusRequest, InboundTraceLog inboundLog) {
|
public ResponseModel checkTrasactionStatus(TransactionStatusRequest transactionStatusRequest, InboundTraceLog inboundLog) {
|
||||||
String apiName = "CheckTransactionStatus";
|
String apiName = "CheckTransactionStatus";
|
||||||
String txnId = helper.generateTxnId(15);
|
String txnId = helper.generateTxnId(15);
|
||||||
String requestId = transactionStatusRequest.getReqId();
|
String requestId = transactionStatusRequest.getReqId();
|
||||||
|
|
||||||
|
String url = paymentUrl + BBPSConstant.CHECK_TRANSACTION_URL + transactionStatusRequest.getTxnId();
|
||||||
|
|
||||||
String url = paymentUrl + BBPSConstant.CHECK_TRANSACTION_URL + transactionStatusRequest.getTxnId();
|
LOGGER.info("Checking transaction status (internal) for txnId={} and reqId={}", transactionStatusRequest.getTxnId(), requestId);
|
||||||
|
|
||||||
LOGGER.info("Checking transaction status (internal) for txnId={} and reqId={}", transactionStatusRequest.getTxnId(), requestId);
|
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
||||||
|
HttpHeaders headers = helper.buildHeaders(headersData);
|
||||||
|
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, requestId, apiName, url, "GET", null);
|
||||||
HttpHeaders headers = new HttpHeaders();
|
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
Map<String, String> responseMap = httpService.getRequest(url, headers);
|
||||||
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, requestId, apiName, url, "GET", null);
|
String responseData = responseMap.get("data");
|
||||||
|
LOGGER.info("Transaction status response: {}", responseData);
|
||||||
|
|
||||||
Map<String, String> responseMap = httpService.getRequest(url, headers);
|
helper.updateOutboundLogResponse(outboundLog, responseData);
|
||||||
String responseData = responseMap.get("data");
|
|
||||||
LOGGER.info("Transaction status response: {}", responseData);
|
|
||||||
|
|
||||||
helper.updateOutboundLogResponse(outboundLog, responseData);
|
try {
|
||||||
|
Map<String, Object> dataMap = objectMapper.readValue(responseData, new TypeReference<Map<String, Object>>() {});
|
||||||
|
if (!dataMap.containsKey("generalResp")) {
|
||||||
|
helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_RESPONSE");
|
||||||
|
LOGGER.warn("Invalid transaction status response for txnId={}", transactionStatusRequest.getTxnId());
|
||||||
|
throw new CustomException(
|
||||||
|
String.valueOf(dataMap.get("message")),
|
||||||
|
String.valueOf(dataMap.get("status")),
|
||||||
|
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))),
|
||||||
|
String.valueOf(dataMap.get("remarks"))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
TransactionStatusResponse responseWrapper = objectMapper.convertValue(dataMap, TransactionStatusResponse.class);
|
||||||
Map<String, Object> dataMap = objectMapper.readValue(responseData, new TypeReference<Map<String, Object>>() {});
|
GeneralResp generalResp = responseWrapper.getGeneralResp();
|
||||||
if (!dataMap.containsKey("generalResp")) {
|
LOGGER.info("Transaction status received: {}", generalResp.getStatus());
|
||||||
helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_RESPONSE");
|
|
||||||
LOGGER.warn("Invalid transaction status response for txnId={}", transactionStatusRequest.getTxnId());
|
|
||||||
throw new CustomException(
|
|
||||||
String.valueOf(dataMap.get("message")),
|
|
||||||
String.valueOf(dataMap.get("status")),
|
|
||||||
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))),
|
|
||||||
String.valueOf(dataMap.get("remarks"))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
TransactionStatusResponse responseWrapper = objectMapper.convertValue(dataMap, TransactionStatusResponse.class);
|
TransactionMaster transactionMaster = modelMapper.map(responseWrapper.getTransactionDAO(), TransactionMaster.class);
|
||||||
GeneralResp generalResp = responseWrapper.getGeneralResp();
|
transactionMaster.setTxnId(txnId);
|
||||||
LOGGER.info("Transaction status received: {}", generalResp.getStatus());
|
transactionMaster.setReqId(transactionStatusRequest.getReqId());
|
||||||
|
EntityRelationshipUtil.linkTransactionMasterRelationships(transactionMaster);
|
||||||
|
transactionMasterRepository.save(transactionMaster);
|
||||||
|
LOGGER.info("TransactionMaster saved successfully for txnId={}", txnId);
|
||||||
|
|
||||||
ModelMapper mapper = new ModelMapper();
|
AgentFundTransfer agentFundTransfer = modelMapper.map(responseWrapper.getAgentFundTransfer(), AgentFundTransfer.class);
|
||||||
mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
|
agentFundTransfer.setTxnId(txnId);
|
||||||
TransactionMaster transactionMaster = mapper.map(responseWrapper.getTransactionDAO(), TransactionMaster.class);
|
agentFundTransfer.setReqId(transactionStatusRequest.getReqId());
|
||||||
transactionMaster.setTxnId(txnId);
|
agentFundTransfer.setTransactionMasterId(transactionMaster.getBankTxnId());
|
||||||
transactionMaster.setReqId(transactionStatusRequest.getReqId());
|
agentFundTransferRepository.save(agentFundTransfer);
|
||||||
EntityRelationshipUtil.linkTransactionMasterRelationships(transactionMaster);
|
LOGGER.info("AgentFundTransfer entry saved successfully for txnId={}", txnId);
|
||||||
transactionMasterRepository.save(transactionMaster);
|
|
||||||
LOGGER.info("TransactionMaster saved successfully for txnId={}", txnId);
|
|
||||||
|
|
||||||
AgentFundTransfer agentFundTransfer = mapper.map(responseWrapper.getAgentFundTransfer(), AgentFundTransfer.class);
|
ResponseModel responseModel = new ResponseModel(
|
||||||
agentFundTransfer.setTxnId(txnId);
|
generalResp.getMessage(),
|
||||||
agentFundTransfer.setReqId(transactionStatusRequest.getReqId());
|
generalResp.getStatus(),
|
||||||
agentFundTransfer.setTransactionMasterId(transactionMaster.getBankTxnId());
|
Integer.parseInt(generalResp.getStatusCode()),
|
||||||
agentFundTransferRepository.save(agentFundTransfer);
|
responseWrapper
|
||||||
LOGGER.info("AgentFundTransfer entry saved successfully for txnId={}", txnId);
|
);
|
||||||
|
|
||||||
ResponseModel responseModel = new ResponseModel(
|
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
|
||||||
generalResp.getMessage(),
|
return responseModel;
|
||||||
generalResp.getStatus(),
|
|
||||||
Integer.parseInt(generalResp.getStatusCode()),
|
|
||||||
responseWrapper
|
|
||||||
);
|
|
||||||
|
|
||||||
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
|
} catch (JsonProcessingException e) {
|
||||||
return responseModel;
|
LOGGER.error("Error parsing transaction status JSON: {}", e.getMessage(), e);
|
||||||
|
helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
|
||||||
|
throw new CustomException("Invalid JSON received from API");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} catch (JsonProcessingException e) {
|
@Override
|
||||||
LOGGER.error("Error parsing transaction status JSON: {}", e.getMessage(), e);
|
public ResponseModel checkTrasactionStatus(TransactionStatusRequest transactionStatusRequest) {
|
||||||
helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
|
helper.validateMerchant(transactionStatusRequest.getMid());
|
||||||
throw new CustomException("Invalid JSON received from API");
|
String txnID = helper.generateTxnId(15);
|
||||||
}
|
String apiName = "checkTrasactionStatus";
|
||||||
}
|
String requestId = transactionStatusRequest.getReqId();
|
||||||
|
String requestJson = helper.convertObjectToJson(transactionStatusRequest);
|
||||||
|
String url = paymentUrl + BBPSConstant.CHECK_TRANSACTION_URL + transactionStatusRequest.getTxnId();
|
||||||
|
|
||||||
@Override
|
LOGGER.info("Checking transaction status (public) for txnId={} and reqId={}", transactionStatusRequest.getTxnId(), requestId);
|
||||||
public ResponseModel checkTrasactionStatus(TransactionStatusRequest transactionStatusRequest) {
|
|
||||||
helper.validateMerchant(transactionStatusRequest.getMid());
|
|
||||||
String txnID = helper.generateTxnId(15);
|
|
||||||
String apiName = "checkTrasactionStatus";
|
|
||||||
String requestId = transactionStatusRequest.getReqId();
|
|
||||||
String requestJson = helper.convertObjectToJson(transactionStatusRequest);
|
|
||||||
String url = paymentUrl + BBPSConstant.CHECK_TRANSACTION_URL + transactionStatusRequest.getTxnId();
|
|
||||||
|
|
||||||
LOGGER.info("Checking transaction status (public) for txnId={} and reqId={}", transactionStatusRequest.getTxnId(), requestId);
|
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
||||||
|
HttpHeaders headers = helper.buildHeaders(headersData);
|
||||||
|
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
InboundTraceLog inboundLog = helper.createInboundLog(requestId, txnID, apiName, transactionStatusRequest.getMid(), "POST", requestJson);
|
||||||
HttpHeaders headers = new HttpHeaders();
|
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
InboundTraceLog inboundLog = helper.createInboundLog(requestId, txnID, apiName, transactionStatusRequest.getMid(), "POST", requestJson);
|
|
||||||
OutboundTraceLog outboundLog = helper.createOutboundLog(txnID, requestId, apiName, url, "GET", null);
|
OutboundTraceLog outboundLog = helper.createOutboundLog(txnID, requestId, apiName, url, "GET", null);
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
|
|
||||||
Map<String, String> responseMap = httpService.getRequest(url, headers);
|
Map<String, String> responseMap = httpService.getRequest(url, headers);
|
||||||
String responseData = responseMap.get("data");
|
String responseData = responseMap.get("data");
|
||||||
LOGGER.info("Transaction status response data: {}", responseData);
|
LOGGER.info("Transaction status response data: {}", responseData);
|
||||||
helper.updateOutboundLogResponse(outboundLog, responseData);
|
helper.updateOutboundLogResponse(outboundLog, responseData);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Map<String, Object> dataMap = objectMapper.readValue(responseData, new TypeReference<Map<String, Object>>() {});
|
Map<String, Object> dataMap = objectMapper.readValue(responseData, new TypeReference<Map<String, Object>>() {});
|
||||||
if (!dataMap.containsKey("generalResp")) {
|
if (!dataMap.containsKey("generalResp")) {
|
||||||
helper.updateInboundLogFailure(inboundLog, responseData, String.valueOf(dataMap.get("status")));
|
helper.updateInboundLogFailure(inboundLog, responseData, String.valueOf(dataMap.get("status")));
|
||||||
LOGGER.warn("Invalid transaction status response for txnId={} from BBPS", transactionStatusRequest.getTxnId());
|
LOGGER.warn("Invalid transaction status response for txnId={} from BBPS", transactionStatusRequest.getTxnId());
|
||||||
throw new CustomException(
|
throw new CustomException(
|
||||||
String.valueOf(dataMap.get("message")),
|
String.valueOf(dataMap.get("message")),
|
||||||
String.valueOf(dataMap.get("status")),
|
String.valueOf(dataMap.get("status")),
|
||||||
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))),
|
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))),
|
||||||
String.valueOf(dataMap.get("remarks"))
|
String.valueOf(dataMap.get("remarks"))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
TransactionStatusResponse responseWrapper = objectMapper.convertValue(dataMap, TransactionStatusResponse.class);
|
TransactionStatusResponse responseWrapper = objectMapper.convertValue(dataMap, TransactionStatusResponse.class);
|
||||||
GeneralResp generalResp = responseWrapper.getGeneralResp();
|
GeneralResp generalResp = responseWrapper.getGeneralResp();
|
||||||
|
|
||||||
String status = generalResp.getStatus();
|
String status = generalResp.getStatus();
|
||||||
LOGGER.info("Current transaction status: {}", status);
|
LOGGER.info("Current transaction status: {}", status);
|
||||||
|
|
||||||
ResponseModel responseModel = new ResponseModel(
|
ResponseModel responseModel = new ResponseModel(
|
||||||
generalResp.getMessage(),
|
generalResp.getMessage(),
|
||||||
generalResp.getStatus(),
|
generalResp.getStatus(),
|
||||||
Integer.parseInt(generalResp.getStatusCode()),
|
Integer.parseInt(generalResp.getStatusCode()),
|
||||||
responseWrapper
|
responseWrapper
|
||||||
);
|
);
|
||||||
|
|
||||||
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
|
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
|
||||||
return responseModel;
|
return responseModel;
|
||||||
|
|
||||||
} catch (JsonProcessingException e) {
|
} catch (JsonProcessingException e) {
|
||||||
LOGGER.error("Error parsing responseData JSON: {}", e.getMessage(), e);
|
LOGGER.error("Error parsing responseData JSON: {}", e.getMessage(), e);
|
||||||
helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
|
helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
|
||||||
throw new CustomException("Invalid JSON received from API");
|
throw new CustomException("Invalid JSON received from API");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ResponseModel checkTrasactionStatusByClientReqId(TrasactionStatusByClientReqIdRequest transactionStatusRequest) {
|
||||||
|
|
||||||
|
helper.validateMerchant(transactionStatusRequest.getMid());
|
||||||
|
|
||||||
@Override
|
String txnID = helper.generateTxnId(15);
|
||||||
public ResponseModel checkTrasactionStatusByClientReqId(TrasactionStatusByClientReqIdRequest transactionStatusRequest) {
|
String apiName = "checkTrasactionStatusbyClientReqId";
|
||||||
|
String requestId = transactionStatusRequest.getReqId();
|
||||||
|
String clientReqId = transactionStatusRequest.getClientReqId();
|
||||||
|
String requestJson = helper.convertObjectToJson(transactionStatusRequest);
|
||||||
|
|
||||||
helper.validateMerchant(transactionStatusRequest.getMid());
|
LOGGER.info("Checking transaction status for clientReqId={} and reqId={}", clientReqId, requestId);
|
||||||
|
|
||||||
String txnID = helper.generateTxnId(15);
|
Optional<PaymentInitiate> paymentInitiate = paymentIntiateRepository.findByReqId(clientReqId);
|
||||||
String apiName = "checkTrasactionStatusbyClientReqId";
|
if (paymentInitiate.isEmpty()) {
|
||||||
String requestId = transactionStatusRequest.getReqId();
|
throw new CustomException("No Transaction Found for given Client Req Id");
|
||||||
String clientReqId = transactionStatusRequest.getClientReqId();
|
}
|
||||||
String requestJson = helper.convertObjectToJson(transactionStatusRequest);
|
|
||||||
|
|
||||||
LOGGER.info("Checking transaction status for clientReqId={} and reqId={}", clientReqId, requestId);
|
String url = paymentUrl + BBPSConstant.CHECK_TRANSACTION_BY_CLIENT_REQ_ID_URL + paymentInitiate.get().getTxnId();
|
||||||
|
|
||||||
// Fetch Txn from DB
|
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
||||||
Optional<PaymentInitiate> paymentInitiate = paymentIntiateRepository.findByReqId(clientReqId);
|
HttpHeaders headers = helper.buildHeaders(headersData);
|
||||||
if (paymentInitiate.isEmpty()) {
|
|
||||||
throw new CustomException("No Transaction Found for given Client Req Id");
|
|
||||||
}
|
|
||||||
|
|
||||||
String url = paymentUrl + BBPSConstant.CHECK_TRANSACTION_BY_CLIENT_REQ_ID_URL + paymentInitiate.get().getTxnId();
|
InboundTraceLog inboundLog = helper.createInboundLog(
|
||||||
|
requestId, txnID, apiName, transactionStatusRequest.getMid(), "POST", requestJson);
|
||||||
|
|
||||||
// Prepare headers
|
OutboundTraceLog outboundLog = helper.createOutboundLog(
|
||||||
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
|
txnID, requestId, apiName, url, "GET", null);
|
||||||
HttpHeaders headers = new HttpHeaders();
|
|
||||||
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
|
||||||
headers.set("agentId", headersData.getAgentId());
|
|
||||||
headers.set("tenantId", headersData.getTenantId());
|
|
||||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
|
|
||||||
|
try {
|
||||||
|
LOGGER.info("Calling BBPS Transaction Status API URL={}", url);
|
||||||
|
Map<String, String> responseMap = httpService.getRequest(url, headers);
|
||||||
|
|
||||||
// 🔵 Create Inbound + Outbound Logs
|
String responseData = responseMap.get("data");
|
||||||
InboundTraceLog inboundLog = helper.createInboundLog(
|
LOGGER.info("Transaction Status Response: {}", responseData);
|
||||||
requestId, txnID, apiName, transactionStatusRequest.getMid(), "POST", requestJson);
|
|
||||||
|
|
||||||
OutboundTraceLog outboundLog = helper.createOutboundLog(
|
helper.updateOutboundLogResponse(outboundLog, responseData);
|
||||||
txnID, requestId, apiName, url, "GET", null);
|
|
||||||
|
|
||||||
ObjectMapper objectMapper = new ObjectMapper();
|
Map<String, Object> dataMap = objectMapper.readValue(
|
||||||
|
responseData, new TypeReference<Map<String, Object>>() {});
|
||||||
|
|
||||||
try {
|
if (!dataMap.containsKey("generalResp")) {
|
||||||
LOGGER.info("Calling BBPS Transaction Status API URL={}", url);
|
helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_RESPONSE");
|
||||||
Map<String, String> responseMap = httpService.getRequest(url, headers);
|
|
||||||
|
|
||||||
String responseData = responseMap.get("data");
|
LOGGER.warn("Invalid transaction status response for clientReqId={} | Response={}",
|
||||||
LOGGER.info("Transaction Status Response: {}", responseData);
|
clientReqId, responseData);
|
||||||
|
|
||||||
helper.updateOutboundLogResponse(outboundLog, responseData);
|
throw new CustomException(
|
||||||
|
String.valueOf(dataMap.get("message")),
|
||||||
|
String.valueOf(dataMap.get("status")),
|
||||||
|
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))),
|
||||||
|
String.valueOf(dataMap.get("remarks"))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
// Parse response
|
TransactionStatusResponse responseWrapper =
|
||||||
Map<String, Object> dataMap = objectMapper.readValue(
|
objectMapper.convertValue(dataMap, TransactionStatusResponse.class);
|
||||||
responseData, new TypeReference<Map<String, Object>>() {});
|
|
||||||
|
|
||||||
// Validate response
|
GeneralResp generalResp = responseWrapper.getGeneralResp();
|
||||||
if (!dataMap.containsKey("generalResp")) {
|
|
||||||
helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_RESPONSE");
|
|
||||||
|
|
||||||
LOGGER.warn("Invalid transaction status response for clientReqId={} | Response={}",
|
LOGGER.info("Transaction Status for clientReqId={} => {}", clientReqId, generalResp.getStatus());
|
||||||
clientReqId, responseData);
|
|
||||||
|
|
||||||
throw new CustomException(
|
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
|
||||||
String.valueOf(dataMap.get("message")),
|
|
||||||
String.valueOf(dataMap.get("status")),
|
|
||||||
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))),
|
|
||||||
String.valueOf(dataMap.get("remarks"))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert into proper DTO
|
return new ResponseModel(
|
||||||
TransactionStatusResponse responseWrapper =
|
generalResp.getMessage(),
|
||||||
objectMapper.convertValue(dataMap, TransactionStatusResponse.class);
|
generalResp.getStatus(),
|
||||||
|
Integer.parseInt(generalResp.getStatusCode()),
|
||||||
|
responseWrapper
|
||||||
|
);
|
||||||
|
|
||||||
GeneralResp generalResp = responseWrapper.getGeneralResp();
|
} catch (JsonProcessingException e) {
|
||||||
|
LOGGER.error("Error parsing JSON in transaction status API: {}", e.getMessage(), e);
|
||||||
|
|
||||||
LOGGER.info("Transaction Status for clientReqId={} => {}", clientReqId, generalResp.getStatus());
|
helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
|
||||||
|
|
||||||
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
|
throw new CustomException("Invalid JSON received from API");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return new ResponseModel(
|
@Override
|
||||||
generalResp.getMessage(),
|
public ResponseModel handlePaymentIntiateCallback(TransactionStatusResponse transactionStatusResponse) {
|
||||||
generalResp.getStatus(),
|
|
||||||
Integer.parseInt(generalResp.getStatusCode()),
|
|
||||||
responseWrapper
|
|
||||||
);
|
|
||||||
|
|
||||||
} catch (JsonProcessingException e) {
|
LOGGER.info("Recived Call Back from FetchBillValidateResponse: {}", transactionStatusResponse);
|
||||||
LOGGER.error("Error parsing JSON in transaction status API: {}", e.getMessage(), e);
|
if (transactionStatusResponse.getGeneralResp().getStatusCode().equals("200")) {
|
||||||
|
|
||||||
helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
|
} else {
|
||||||
|
LOGGER.info("Bill Fetch Callback Failed with Status: {}", transactionStatusResponse.getGeneralResp().getStatus());
|
||||||
|
|
||||||
throw new CustomException("Invalid JSON received from API");
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
return new ResponseModel("CallBack Recieved Successfully",
|
||||||
public ResponseModel handlePaymentIntiateCallback(TransactionStatusResponse transactionStatusResponse) {
|
"200",
|
||||||
|
200,
|
||||||
LOGGER.info("Recived Call Back from FetchBillValidateResponse: {}", transactionStatusResponse);
|
"");
|
||||||
if(transactionStatusResponse.getGeneralResp().getStatusCode().equals("200")) {
|
}
|
||||||
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
LOGGER.info("Bill Fetch Callback Failed with Status: {}", transactionStatusResponse.getGeneralResp().getStatus());
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return new ResponseModel("CallBack Recieved Successfully",
|
|
||||||
"200",
|
|
||||||
200,
|
|
||||||
"");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
/* PollBack logic for the fetchTxnByTxnId API
|
|
||||||
* @Override public ResponseModel fetchTxnByTxnId(BillFetchByBillIdRequest
|
|
||||||
* billFetchByBillIdRequest) {
|
|
||||||
*
|
|
||||||
* String billId = billFetchByBillIdRequest.getBillId(); String fullUrl =
|
|
||||||
* agentDtaUrl + BBPSConstant.BILL_FETCH_BY_ID+billId;
|
|
||||||
* System.out.print(fullUrl);
|
|
||||||
*
|
|
||||||
* BeneficiaryDetails
|
|
||||||
* headersData=beneficiaryDetailsRepository.findByOrgId("ORG001");
|
|
||||||
*
|
|
||||||
* HttpHeaders headers = new HttpHeaders();
|
|
||||||
* headers.set("x-digiledge-key",headersData.getXDigiledgeKey());
|
|
||||||
* headers.set("agentId", headersData.getAgentId()); headers.set("tenantId",
|
|
||||||
* headersData.getTenantId());
|
|
||||||
* headers.setContentType(MediaType.APPLICATION_JSON);
|
|
||||||
*
|
|
||||||
* Map<String, String> responseMap = httpService.getRequest(fullUrl,headers);
|
|
||||||
* String responseData = responseMap.get("data"); log.info("data is :{}",
|
|
||||||
* responseData);
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* ObjectMapper objectMapper = new ObjectMapper();
|
|
||||||
*
|
|
||||||
* try { Map<String, Object> dataMap = objectMapper.readValue(responseData, new
|
|
||||||
* TypeReference<Map<String, Object>>() { }); if
|
|
||||||
* (!dataMap.containsKey("genericResponse")) { throw new
|
|
||||||
* CustomException(String.valueOf(dataMap.get("message")), // message
|
|
||||||
* String.valueOf(dataMap.get("status")), // status
|
|
||||||
* Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), // statusCode
|
|
||||||
* (int) String.valueOf(dataMap.get("remarks")) ); }
|
|
||||||
*
|
|
||||||
* BillDataResponse responseWrapper = objectMapper.convertValue(dataMap,
|
|
||||||
* BillDataResponse.class);
|
|
||||||
*
|
|
||||||
* GeneralResp generalResp = responseWrapper.getGenericResponse();
|
|
||||||
*
|
|
||||||
* ResponseModel responseModel=new ResponseModel( generalResp.getMessage(),
|
|
||||||
* generalResp.getStatus(), Integer.parseInt(generalResp.getStatusCode()),
|
|
||||||
* responseWrapper);
|
|
||||||
*
|
|
||||||
* return responseModel;
|
|
||||||
*
|
|
||||||
* } catch (JsonProcessingException e) {
|
|
||||||
* LOGGER.error("Error parsing responseData JSON: {}", e.getMessage()); throw
|
|
||||||
* new CustomException("Invalid JSON received from API"); }
|
|
||||||
*
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* public ResponseModel checkTrasactionStatus(TransactionStatusRequest
|
|
||||||
* transactionStatusRequest,InboundTraceLog inboundLog) { String apiName =
|
|
||||||
* "CheckTransactionStatus"; String txnId = helper.generateTxnId(15); //our
|
|
||||||
* genrated txnId String requestId = transactionStatusRequest.getReqId(); String
|
|
||||||
* url = paymentUrl + BBPSConstant.CHECK_TRANSACTION_URL +
|
|
||||||
* transactionStatusRequest.getTxnId(); ;
|
|
||||||
*
|
|
||||||
* BharatConnectMaster headersData =
|
|
||||||
* beneficiaryDetailsRepository.findByOrgId("ORG001"); HttpHeaders headers = new
|
|
||||||
* HttpHeaders(); headers.set("x-digiledge-key",
|
|
||||||
* headersData.getXDigiledgeKey()); headers.set("agentId",
|
|
||||||
* headersData.getAgentId()); headers.set("tenantId",
|
|
||||||
* headersData.getTenantId());
|
|
||||||
* headers.setContentType(MediaType.APPLICATION_JSON); ObjectMapper objectMapper
|
|
||||||
* = new ObjectMapper();
|
|
||||||
*
|
|
||||||
* OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, requestId,
|
|
||||||
* apiName, url, "GET", null);
|
|
||||||
*
|
|
||||||
* long startTime = System.currentTimeMillis(); long maxWaitTimeMs = 40000; long
|
|
||||||
* intervalMs = 5000;
|
|
||||||
*
|
|
||||||
* while (true) { Map<String, String> responseMap = httpService.getRequest(url,
|
|
||||||
* headers); String responseData = responseMap.get("data");
|
|
||||||
* LOGGER.info("Transaction status response: {}", responseData);
|
|
||||||
*
|
|
||||||
* helper.updateOutboundLogResponse(outboundLog, responseData);
|
|
||||||
*
|
|
||||||
* try { Map<String, Object> dataMap = objectMapper.readValue(responseData, new
|
|
||||||
* TypeReference<Map<String, Object>>() {});
|
|
||||||
*
|
|
||||||
* if (!dataMap.containsKey("generalResp")) {
|
|
||||||
* helper.updateInboundLogFailure(inboundLog, responseData, "INVALID_RESPONSE");
|
|
||||||
* throw new CustomException( String.valueOf(dataMap.get("message")),
|
|
||||||
* String.valueOf(dataMap.get("status")),
|
|
||||||
* Integer.parseInt(String.valueOf(dataMap.get("statusCode"))),
|
|
||||||
* String.valueOf(dataMap.get("remarks")) ); }
|
|
||||||
*
|
|
||||||
* TransactionStatusResponse responseWrapper =
|
|
||||||
* objectMapper.convertValue(dataMap, TransactionStatusResponse.class);
|
|
||||||
* GeneralResp generalResp = responseWrapper.getGeneralResp();
|
|
||||||
*
|
|
||||||
* String status = generalResp.getStatus();
|
|
||||||
* LOGGER.info("Current transaction status: {}", status);
|
|
||||||
*
|
|
||||||
* if ("INPROGRESS".equalsIgnoreCase(status)) { if (System.currentTimeMillis() -
|
|
||||||
* startTime > maxWaitTimeMs) { helper.updateInboundLogFailure(inboundLog,
|
|
||||||
* "Timeout after 40 seconds", "FAILED"); throw new
|
|
||||||
* CustomException("Timeout waiting for transaction completion", "FAILED", 408,
|
|
||||||
* "Transaction still in progress"); }
|
|
||||||
*
|
|
||||||
* Thread.sleep(intervalMs); continue; }
|
|
||||||
*
|
|
||||||
* ResponseModel responseModel = new ResponseModel( generalResp.getMessage(),
|
|
||||||
* generalResp.getStatus(), Integer.parseInt(generalResp.getStatusCode()),
|
|
||||||
* responseWrapper );
|
|
||||||
*
|
|
||||||
* helper.updateInboundLogSuccess(inboundLog, responseData,
|
|
||||||
* generalResp.getStatus()); return responseModel;
|
|
||||||
*
|
|
||||||
* } catch (JsonProcessingException e) {
|
|
||||||
* LOGGER.error("Error parsing transaction status JSON: {}", e.getMessage());
|
|
||||||
* helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
|
|
||||||
* throw new CustomException("Invalid JSON received from API"); } catch
|
|
||||||
* (InterruptedException e) { Thread.currentThread().interrupt();
|
|
||||||
* helper.updateInboundLogFailure(inboundLog, e.getMessage(), "INTERRUPTED");
|
|
||||||
* throw new CustomException("Thread interrupted during transaction check"); } }
|
|
||||||
* }
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
@@ -11,6 +11,8 @@ import java.util.stream.Collectors;
|
|||||||
import org.modelmapper.ModelMapper;
|
import org.modelmapper.ModelMapper;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
import org.springframework.http.HttpHeaders;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import com.billpaymentservice.bbps.dto.AdditionalInfoBillDTO;
|
import com.billpaymentservice.bbps.dto.AdditionalInfoBillDTO;
|
||||||
@@ -38,6 +40,7 @@ import com.billpaymentservice.bbps.entites.InboundTraceLog;
|
|||||||
import com.billpaymentservice.bbps.entites.OutboundTraceLog;
|
import com.billpaymentservice.bbps.entites.OutboundTraceLog;
|
||||||
import com.billpaymentservice.bbps.entites.PaymentChannel;
|
import com.billpaymentservice.bbps.entites.PaymentChannel;
|
||||||
import com.billpaymentservice.bbps.entites.PaymentMode;
|
import com.billpaymentservice.bbps.entites.PaymentMode;
|
||||||
|
import com.billpaymentservice.bbps.entites.BharatConnectMaster;
|
||||||
import com.billpaymentservice.bbps.exception.CustomException;
|
import com.billpaymentservice.bbps.exception.CustomException;
|
||||||
import com.billpaymentservice.bbps.repository.BBPSMasterDataRepo;
|
import com.billpaymentservice.bbps.repository.BBPSMasterDataRepo;
|
||||||
import com.billpaymentservice.bbps.repository.BillMasterRepository;
|
import com.billpaymentservice.bbps.repository.BillMasterRepository;
|
||||||
@@ -214,6 +217,19 @@ public class Helper {
|
|||||||
|
|
||||||
}
|
}
|
||||||
/* ---------- End helpers ---------- */
|
/* ---------- End helpers ---------- */
|
||||||
|
|
||||||
|
// New reusable header builder for BBPS calls
|
||||||
|
public HttpHeaders buildHeaders(BharatConnectMaster headersData) {
|
||||||
|
HttpHeaders headers = new HttpHeaders();
|
||||||
|
if (headersData != null) {
|
||||||
|
headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
|
||||||
|
headers.set("agentId", headersData.getAgentId());
|
||||||
|
headers.set("tenantId", headersData.getTenantId());
|
||||||
|
}
|
||||||
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||||
|
return headers;
|
||||||
|
}
|
||||||
|
|
||||||
public void saveOrUpdateBillerData(BillerDetails newEntity) {
|
public void saveOrUpdateBillerData(BillerDetails newEntity) {
|
||||||
|
|
||||||
Optional<BillerDetails> existingOpt = billerDataRespository.findByBillerId(newEntity.getBillerId());
|
Optional<BillerDetails> existingOpt = billerDataRespository.findByBillerId(newEntity.getBillerId());
|
||||||
@@ -233,7 +249,7 @@ public void saveOrUpdateBillData(BillDataResponse responseWrapper,
|
|||||||
|
|
||||||
BillMaster billMaster = new BillMaster();
|
BillMaster billMaster = new BillMaster();
|
||||||
|
|
||||||
billMaster.setBillId(billFetchByBillIdRequest.getBillId());
|
billMaster.setBillId(responseWrapper.getBillId());
|
||||||
billMaster.setRefId(responseWrapper.getRefId());
|
billMaster.setRefId(responseWrapper.getRefId());
|
||||||
billMaster.setBillerId(responseWrapper.getBillerId());
|
billMaster.setBillerId(responseWrapper.getBillerId());
|
||||||
billMaster.setStatus(responseWrapper.getStatus());
|
billMaster.setStatus(responseWrapper.getStatus());
|
||||||
@@ -242,7 +258,6 @@ billMaster.setUserId(responseWrapper.getUserId());
|
|||||||
billMaster.setReqId(billFetchByBillIdRequest.getReqId());
|
billMaster.setReqId(billFetchByBillIdRequest.getReqId());
|
||||||
billMaster.setTxnId(txnId);
|
billMaster.setTxnId(txnId);
|
||||||
|
|
||||||
|
|
||||||
// BILLER RESPONSE
|
// BILLER RESPONSE
|
||||||
BillerResponse billerResponse = new BillerResponse();
|
BillerResponse billerResponse = new BillerResponse();
|
||||||
if (responseWrapper.getBillerResponse() != null) {
|
if (responseWrapper.getBillerResponse() != null) {
|
||||||
|
|||||||
Reference in New Issue
Block a user