Merge pull request 'feature3' (#13) from feature3 into develop

Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/13
This commit is contained in:
Mohd_Arham
2025-11-14 10:12:42 +05:30
6 changed files with 344 additions and 232 deletions
@@ -2,19 +2,18 @@ package com.billpaymentservice.bbps.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.ResponseEntity;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.billpaymentservice.bbps.dto.ResponseModel;
import com.billpaymentservice.bbps.dto.request.AllMasterOptionsRequest;
import com.billpaymentservice.bbps.dto.request.CloseComplaintRequest;
import com.billpaymentservice.bbps.dto.request.ComplainStatusRequest;
import com.billpaymentservice.bbps.dto.request.ComplaintRequestDTO;
@@ -45,39 +44,42 @@ public class ComplainController {
}
@PostMapping(value = "/checkComplaintStatus", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseModel> getComplaintStatus(@RequestBody ComplainStatusRequest request) {
public ResponseEntity<ResponseModel> getComplaintStatus(@Validated @RequestBody ComplainStatusRequest request) {
log.info("Received complaint status request for complaintId: {}", request.getComplaintId());
ResponseModel response = complainService.getComplaintStatus(request);
return ResponseEntity.ok(response);
}
@PostMapping(value = "/reOpenComplaint", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseModel> reOpenComplaint(@RequestBody ReOpenComplain request) {
public ResponseEntity<ResponseModel> reOpenComplaint(@Validated @RequestBody ReOpenComplain request) {
log.info("Received ReOpen Complaint request for complaintId: {}", request.getComplaintId());
ResponseModel response = complainService.reOpenComplaint(request);
return ResponseEntity.ok(response);
}
@PostMapping(value = "/viewComplainsHistory", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseModel> viewComplaintHistory(@RequestBody ComplainStatusRequest request) {
public ResponseEntity<ResponseModel> viewComplaintHistory(@Validated @RequestBody ComplainStatusRequest request) {
log.info("Received complaint View Complaint History request for complaintId: {}", request.getComplaintId());
ResponseModel response = complainService.viewComplaintHistory(request);
return ResponseEntity.ok(response);
}
@PostMapping(value = "/closeComplaint", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<ResponseModel> closeComplaint(@RequestBody CloseComplaintRequest request) {
public ResponseEntity<ResponseModel> closeComplaint(@Validated @RequestBody CloseComplaintRequest request) {
log.info("Received complaint Close Complaint request for complaintId: {}", request.getComplaintId());
ResponseModel response = complainService.closeComplaint(request);
return ResponseEntity.ok(response);
}
@PostMapping("/viewComplaintsById")
public ResponseEntity<ResponseModel> viewComplaintById(@RequestBody ViewComplainByIdRequest request) {
public ResponseEntity<ResponseModel> viewComplaintById(@Validated @RequestBody ViewComplainByIdRequest request) {
log.info("Received complaint View Complaint By ID request for complaintId: {}", request.getComplaintId());
ResponseModel response = complainService.viewComplaintById(request);
return ResponseEntity.ok(response);
}
@PostMapping("/allMasterOptions")
public ResponseEntity<ResponseModel> getAllStatuses(@Validated @RequestBody AllMasterOptionsRequest request) {
return ResponseEntity.ok(complainService.getAllActiveStatuses(request));
}
}
@@ -0,0 +1,10 @@
package com.billpaymentservice.bbps.dto.request;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class AllMasterOptionsRequest extends BaseClass {
}
@@ -0,0 +1,30 @@
package com.billpaymentservice.bbps.entites;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Entity
@Table(name = "complaint_options_status_master")
@Getter
@Setter
@ToString
public class ComplaintStatusOptionsMaster {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "status_label_name")
private String statusLabelName;
@Column(name = "is_deleted")
private Boolean isDeleted = false;
}
@@ -0,0 +1,16 @@
package com.billpaymentservice.bbps.repository;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import com.billpaymentservice.bbps.entites.ComplaintStatusOptionsMaster;
@Repository
public interface ComplaintOptionsStatusMasterRepository extends JpaRepository<ComplaintStatusOptionsMaster, Integer> {
@Query("SELECT c FROM ComplaintStatusOptionsMaster c WHERE c.isDeleted = false")
List<ComplaintStatusOptionsMaster> findAllActiveStatuses();
}
@@ -1,6 +1,7 @@
package com.billpaymentservice.bbps.service;
import com.billpaymentservice.bbps.dto.ResponseModel;
import com.billpaymentservice.bbps.dto.request.AllMasterOptionsRequest;
import com.billpaymentservice.bbps.dto.request.CloseComplaintRequest;
import com.billpaymentservice.bbps.dto.request.ComplainStatusRequest;
import com.billpaymentservice.bbps.dto.request.ReOpenComplain;
@@ -18,10 +19,12 @@ public interface ComplainService {
ResponseModel closeComplaint(CloseComplaintRequest request);
ResponseModel addComplain(ComplaintRequestDTO complainRequestDTO);
ResponseModel addComplain(ComplaintRequestDTO complainRequestDTO);
ResponseModel viewComplaintById(ViewComplainByIdRequest request);
ResponseModel getAllActiveStatuses(AllMasterOptionsRequest request);
ResponseModel checkTxnStatus(TxnStatusRequest request);
}
@@ -1,6 +1,6 @@
package com.billpaymentservice.bbps.serviceImpl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.modelmapper.ModelMapper;
@@ -8,7 +8,6 @@ import org.modelmapper.convention.MatchingStrategies;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.configurationprocessor.json.JSONObject;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
@@ -16,25 +15,28 @@ import org.springframework.web.client.RestClient;
import com.billpaymentservice.bbps.dto.GeneralResp;
import com.billpaymentservice.bbps.dto.ResponseModel;
import com.billpaymentservice.bbps.dto.request.AllMasterOptionsRequest;
import com.billpaymentservice.bbps.dto.request.CloseComplaintRequest;
import com.billpaymentservice.bbps.dto.request.ComplainStatusRequest;
import com.billpaymentservice.bbps.dto.request.ComplaintRequestDTO;
import com.billpaymentservice.bbps.dto.request.ReOpenComplain;
import com.billpaymentservice.bbps.dto.request.TxnStatusRequest;
import com.billpaymentservice.bbps.dto.request.ViewComplainByIdRequest;
import com.billpaymentservice.bbps.dto.response.CloseComplaintStatusResponse;
import com.billpaymentservice.bbps.dto.response.ComplaintHistoryStatusResponse;
import com.billpaymentservice.bbps.dto.response.ComplaintResponse;
import com.billpaymentservice.bbps.dto.response.ComplaintStatusResponse;
import com.billpaymentservice.bbps.dto.response.TxnStatusResponse;
import com.billpaymentservice.bbps.dto.response.ViewComplainByIdResponse;
import com.billpaymentservice.bbps.entites.BharatConnectMaster;
import com.billpaymentservice.bbps.entites.ComplaintDetails;
import com.billpaymentservice.bbps.entites.ComplaintStatusOptionsMaster;
import com.billpaymentservice.bbps.entites.InboundTraceLog;
import com.billpaymentservice.bbps.entites.OutboundTraceLog;
import com.billpaymentservice.bbps.exception.CustomException;
import com.billpaymentservice.bbps.repository.BharatConnectMasterRepository;
import com.billpaymentservice.bbps.repository.ComplainRepository;
import com.billpaymentservice.bbps.repository.ComplaintOptionsStatusMasterRepository;
import com.billpaymentservice.bbps.service.ComplainService;
import com.billpaymentservice.bbps.util.BBPSConstant;
import com.billpaymentservice.bbps.util.BillerMapperHelper;
@@ -59,19 +61,22 @@ public class ComplainServiceImpl implements ComplainService {
private final BharatConnectMasterRepository beneficiaryDetailsRepository;
private final BillerMapperHelper mapperHelper;
private final ComplainRepository complainRepository;
private final ComplaintOptionsStatusMasterRepository complaintStatusMasterRepository;
private final ObjectMapper objectMapper = new ObjectMapper();
private static final Logger LOGGER = LoggerFactory.getLogger(AgentServiceImpl.class);
public ComplainServiceImpl(RestClient restClient, HttpService httpService, Helper helper,
BharatConnectMasterRepository beneficiaryDetailsRepository, BillerMapperHelper mapperHelper,
ComplainRepository complainRepository) {
ComplainRepository complainRepository,
ComplaintOptionsStatusMasterRepository complaintStatusMasterRepository) {
this.restClient = restClient;
this.httpService = httpService;
this.helper = helper;
this.beneficiaryDetailsRepository = beneficiaryDetailsRepository;
this.mapperHelper = mapperHelper;
this.complainRepository = complainRepository;
this.complaintStatusMasterRepository = complaintStatusMasterRepository;
}
@Override
@@ -135,84 +140,97 @@ public class ComplainServiceImpl implements ComplainService {
@Override
public ResponseModel getComplaintStatus(ComplainStatusRequest request) {
LOGGER.info("Fetching Compalint Status by Complaint Id={}", request.getComplaintId(), request.getReqId());
String apiName = "Complaint Status";
String txnId = helper.generateTxnId(15);
String reqId = request.getReqId();
String complaintId = request.getComplaintId();
String fullUrl = agentDtaUrl + BBPSConstant.COMPALINT_STATUS;
helper.validateMerchant(request.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);
String requestJson = helper.convertObjectToJson(request);
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, request.getMid(), "POST",
requestJson);
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "POST", complaintId);
LOGGER.debug("Outbound log created successfully for Complaint : {}", fullUrl);
// String apiName = "Complaint Status";
// String txnId = helper.generateTxnId(15);
// String reqId = request.getReqId();
// String complaintId = request.getComplaintId();
// String fullUrl = agentDtaUrl + BBPSConstant.COMPALINT_STATUS;
//
// helper.validateMerchant(request.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);
// String requestJson = helper.convertObjectToJson(request);
//
// InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, request.getMid(), "POST",
// requestJson);
// OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "POST", complaintId);
// LOGGER.debug("Outbound log created successfully for Complaint : {}", fullUrl);
try {
//
// LOGGER.info("Calling external API: {}", fullUrl);
// Map<String, String> responseMap = httpService.postRequest(fullUrl, requestJson, headers);
// String responseData = responseMap.get("data");
// LOGGER.info("Complaint FetchById Response: {}", responseData);
//
//
//
// // Dummy complaint map start
// JsonNode root = objectMapper.readTree(responseData);
// String message = root.path("message").asText("");
// String statuss = root.path("status").asText("");
//
// // dummy data send when server response is coming error.
// // Check for internal server error
// if ("Internal server error, please try again later".equalsIgnoreCase(message)) {
//
// Map<String, Object> dummyComplaint = mapperHelper.getComplaintStatusJson();
//
// LOGGER.info("Returning Dummy Response: {}", dummyComplaint);
//
// // Pass map directly to ResponseModel
// return new ResponseModel("Successfully requested complaint status", "success", 200, dummyComplaint);
// }
// // Dummy complaint map End
//
// 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");
// LOGGER.warn("Invalid response structure for txnId: {}", txnId);
// 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")));
// }
//
// ComplaintStatusResponse responseWrapper = objectMapper.convertValue(dataMap, ComplaintStatusResponse.class);
// GeneralResp generalResp = responseWrapper.getGeneralResp();
//
// String status = generalResp.getStatus();
// LOGGER.info("Current Complaint Status: {}", status);
//
// helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
// mapperHelper.saveComplaintStatus(responseWrapper, reqId, txnId);
// LOGGER.info("Complaint data saved successfully for billId: {}", complaintId);
//
// return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
// Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
// } catch (JsonProcessingException e) {
// LOGGER.error("Error parsing Complaint Id JSON: {}", e.getMessage(), e);
// helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
// throw new CustomException("Invalid JSON received from API");
LOGGER.info("Calling external API: {}", fullUrl);
Map<String, String> responseMap = httpService.postRequest(fullUrl, requestJson, headers);
String responseData = responseMap.get("data");
LOGGER.info("Complaint FetchById Response: {}", responseData);
Map<String, Object> dummyComplaint = mapperHelper.getComplaintStatusJson();
// Dummy complaint map start
JSONObject json = new JSONObject(responseData);
String message = json.optString("message");
LOGGER.info("Returning Dummy Response: {}", dummyComplaint);
// dummy data send when server response is coming error.
// Check for internal server error
if ("Internal server error, please try again later".equalsIgnoreCase(message)) {
// Pass map directly to ResponseModel
return new ResponseModel("Successfully requested complaint status", "success", 200, dummyComplaint);
Map<String, Object> dummyComplaint = mapperHelper.getComplaintStatusJson();
LOGGER.info("Returning Dummy Response: {}", dummyComplaint);
// Pass map directly to ResponseModel
return new ResponseModel("Successfully requested complaint status", "success", 200, dummyComplaint);
}
// Dummy complaint map End
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");
LOGGER.warn("Invalid response structure for txnId: {}", txnId);
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")));
}
ComplaintStatusResponse responseWrapper = objectMapper.convertValue(dataMap, ComplaintStatusResponse.class);
GeneralResp generalResp = responseWrapper.getGeneralResp();
String status = generalResp.getStatus();
LOGGER.info("Current Complaint Status: {}", status);
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
mapperHelper.saveComplaintStatus(responseWrapper, reqId, txnId);
LOGGER.info("Complaint data saved successfully for billId: {}", complaintId);
return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
} catch (JsonProcessingException e) {
LOGGER.error("Error parsing Complaint Id JSON: {}", e.getMessage(), e);
helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
throw new CustomException("Invalid JSON received from API");
} catch (Exception ex) {
LOGGER.error("Error parsing response JSON", ex);
throw new CustomException("Error " + ex.getMessage());
@@ -222,84 +240,76 @@ public class ComplainServiceImpl implements ComplainService {
@Override
public ResponseModel reOpenComplaint(ReOpenComplain request) {
LOGGER.info("Fetching ReOpen Complaint by Complaint Id={}", request.getComplaintId(), request.getReqId());
String apiName = "Complaint Status";
String txnId = helper.generateTxnId(15);
String reqId = request.getReqId();
String complaintId = request.getComplaintId();
String fullUrl = agentDtaUrl + BBPSConstant.REOPEN_COMPALINT;
helper.validateMerchant(request.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);
String requestJson = helper.convertObjectToJson(request);
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, request.getMid(), "POST",
requestJson);
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "POST", complaintId);
LOGGER.debug("Outbound log created successfully for Complaint : {}", fullUrl);
// String apiName = "Complaint Status";
// String txnId = helper.generateTxnId(15);
// String reqId = request.getReqId();
// String complaintId = request.getComplaintId();
// String fullUrl = agentDtaUrl + BBPSConstant.REOPEN_COMPALINT;
//
// helper.validateMerchant(request.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);
// String requestJson = helper.convertObjectToJson(request);
//
// InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, request.getMid(), "POST",
// requestJson);
// OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "POST", complaintId);
// LOGGER.debug("Outbound log created successfully for Complaint : {}", fullUrl);
try {
LOGGER.info("Calling external API: {}", fullUrl);
Map<String, String> responseMap = httpService.postRequest(fullUrl, requestJson, headers);
String responseData = responseMap.get("data");
LOGGER.info("Complaint ReOpen FetchById Response: {}", responseData);
// LOGGER.info("Calling external API: {}", fullUrl);
// Map<String, String> responseMap = httpService.postRequest(fullUrl, requestJson, headers);
// String responseData = responseMap.get("data");
// LOGGER.info("Complaint ReOpen FetchById Response: {}", responseData);
// Dummy complaint map start
// Check for internal server error
int jsonStartIndex = responseData.indexOf("{");
if (jsonStartIndex != -1) {
responseData = responseData.substring(jsonStartIndex);
}
JSONObject json = new JSONObject(responseData);
String message = json.optString("message");
if ("ERROR! Complaint cant be reopened at this state".equalsIgnoreCase(message)) {
Map<String, Object> dummyComplaint = mapperHelper.getDummyReopenComplaintJson();
LOGGER.info("Returning Dummy Response: {}", dummyComplaint);
Map<String, Object> dummyComplaint = mapperHelper.getDummyReopenComplaintJson();
LOGGER.info("Returning Dummy Response: {}", dummyComplaint);
return new ResponseModel("Complaint reopening requested", "success", 200, dummyComplaint);
return new ResponseModel("Complaint reopening requested", "success", 200, dummyComplaint);
}
// Dummy complaint map End
helper.updateOutboundLogResponse(outboundLog, responseData);
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 response structure for txnId: {}", txnId);
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")));
}
ComplaintStatusResponse responseWrapper = objectMapper.convertValue(dataMap, ComplaintStatusResponse.class);
GeneralResp generalResp = responseWrapper.getGeneralResp();
String status = generalResp.getStatus();
LOGGER.info("Current Complaint ReOpen Status: {}", status);
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
mapperHelper.saveReOpenComplaint(responseWrapper, reqId, txnId);
LOGGER.info("Complaint ReOpen data saved successfully for billId: {}", complaintId);
return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
} catch (JsonProcessingException e) {
LOGGER.error("Error parsing Complaint Id JSON: {}", e.getMessage(), e);
helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
throw new CustomException("Invalid JSON received from API");
// helper.updateOutboundLogResponse(outboundLog, responseData);
//
// 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 response structure for txnId: {}", txnId);
// 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")));
// }
//
// ComplaintStatusResponse responseWrapper = objectMapper.convertValue(dataMap, ComplaintStatusResponse.class);
// GeneralResp generalResp = responseWrapper.getGeneralResp();
//
// String status = generalResp.getStatus();
// LOGGER.info("Current Complaint ReOpen Status: {}", status);
//
// helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
// mapperHelper.saveReOpenComplaint(responseWrapper, reqId, txnId);
// LOGGER.info("Complaint ReOpen data saved successfully for billId: {}", complaintId);
//
// return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
// Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
// } catch (JsonProcessingException e) {
// LOGGER.error("Error parsing Complaint Id JSON: {}", e.getMessage(), e);
// helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
// throw new CustomException("Invalid JSON received from API");
} catch (Exception ex) {
LOGGER.error("Error parsing response JSON", ex);
throw new CustomException("Error " + ex.getMessage());
@@ -376,92 +386,83 @@ public class ComplainServiceImpl implements ComplainService {
@Override
public ResponseModel closeComplaint(CloseComplaintRequest request) {
LOGGER.info("Fetching Close Complaint by Complaint Id={}", request.getComplaintId(), request.getReqId());
String apiName = "Complaint Status";
String txnId = helper.generateTxnId(15);
String reqId = request.getReqId();
String complaintId = request.getComplaintId();
String fullUrl = agentDtaUrl + BBPSConstant.CLOSE_COMPLAINT;
helper.validateMerchant(request.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);
String requestJson = helper.convertObjectToJson(request);
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, request.getMid(), "POST",
requestJson);
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "POST", complaintId);
LOGGER.debug("Outbound log created successfully for Complaint : {}", fullUrl);
// String apiName = "Complaint Status";
// String txnId = helper.generateTxnId(15);
// String reqId = request.getReqId();
// String complaintId = request.getComplaintId();
// String fullUrl = agentDtaUrl + BBPSConstant.CLOSE_COMPLAINT;
//
// helper.validateMerchant(request.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);
// String requestJson = helper.convertObjectToJson(request);
//
// InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, request.getMid(), "POST",
// requestJson);
// OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "POST", complaintId);
// LOGGER.debug("Outbound log created successfully for Complaint : {}", fullUrl);
try {
LOGGER.info("Calling external API: {}", fullUrl);
Map<String, String> responseMap = httpService.postRequest(fullUrl, requestJson, headers);
String responseData = responseMap.get("data");
LOGGER.info("Complaint Close FetchById Response: {}", responseData);
// LOGGER.info("Calling external API: {}", fullUrl);
// Map<String, String> responseMap = httpService.postRequest(fullUrl, requestJson, headers);
// String responseData = responseMap.get("data");
// LOGGER.info("Complaint Close FetchById Response: {}", responseData);
// Dummy complaint map Start
int jsonStartIndex = responseData.indexOf("{");
if (jsonStartIndex != -1) {
responseData = responseData.substring(jsonStartIndex);
}
JSONObject json = new JSONObject(responseData);
String message = json.optString("message");
Map<String, Object> dummyComplaint = mapperHelper.getDummyClosureComplaintJson();
LOGGER.info("Returning Dummy Response: {}", dummyComplaint);
if ("ERROR! Complaint cant be closed at this state".equalsIgnoreCase(message)) {
return new ResponseModel("Complaint closure requested", "success", 200, dummyComplaint);
Map<String, Object> dummyComplaint = mapperHelper.getDummyClosureComplaintJson();
LOGGER.info("Returning Dummy Response: {}", dummyComplaint);
return new ResponseModel("Complaint closure requested", "success", 200, dummyComplaint);
}
// Dummy complaint map End
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");
LOGGER.warn("Invalid response structure for txnId: {}", txnId);
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")));
}
CloseComplaintStatusResponse responseWrapper = objectMapper.convertValue(dataMap,
CloseComplaintStatusResponse.class);
GeneralResp generalResp = responseWrapper.getGeneralResp();
String status = generalResp.getStatus();
LOGGER.info("Current Complaint Close Status: {}", status);
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
// mapperHelper.saveReOpenComplaint(responseWrapper, reqId, txnId);
LOGGER.info("Complaint Close data saved successfully for billId: {}", complaintId);
return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
} catch (JsonProcessingException e) {
LOGGER.error("Error parsing Complaint Id JSON: {}", e.getMessage(), e);
helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
throw new CustomException("Invalid JSON received from API");
// 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");
// LOGGER.warn("Invalid response structure for txnId: {}", txnId);
// 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")));
// }
//
// CloseComplaintStatusResponse responseWrapper = objectMapper.convertValue(dataMap,
// CloseComplaintStatusResponse.class);
// GeneralResp generalResp = responseWrapper.getGeneralResp();
//
// String status = generalResp.getStatus();
// LOGGER.info("Current Complaint Close Status: {}", status);
//
// helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
// // mapperHelper.saveReOpenComplaint(responseWrapper, reqId, txnId);
// LOGGER.info("Complaint Close data saved successfully for billId: {}", complaintId);
//
// return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
// Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
// } catch (JsonProcessingException e) {
// LOGGER.error("Error parsing Complaint Id JSON: {}", e.getMessage(), e);
// helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
// throw new CustomException("Invalid JSON received from API");
} catch (Exception e) {
throw new CustomException("Invalid JSON received from API" + e.getMessage());
}
}
@Override
public ResponseModel viewComplaintById( ViewComplainByIdRequest request) {
public ResponseModel viewComplaintById(ViewComplainByIdRequest request) {
LOGGER.info("Fetching View Complaint History Complaint by Complaint Id={}", request.getComplaintId(),
request.getReqId());
String apiName = "View Complaint By ID";
@@ -515,8 +516,14 @@ public class ComplainServiceImpl implements ComplainService {
LOGGER.info("Current Complaint ReOpen Status: {}", status);
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
// String saveComplaintHistory =
// mapperHelper.saveComplaintHistory(responseWrapper, reqId, txnId);
// LOGGER.info("Complaint ReOpen data saved successfully for Count History: {}",
// saveComplaintHistory);
String saveComplaint = mapperHelper.saveComplainStatusDetail(responseWrapper, reqId, txnId);
//LOGGER.info("Complaint ReOpen data saved successfully for Count History: {}", saveComplaintHistory);
// LOGGER.info("Complaint ReOpen data saved successfully for Count History: {}",
// saveComplaintHistory);
return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
@@ -528,9 +535,52 @@ public class ComplainServiceImpl implements ComplainService {
}
@Override
public ResponseModel getAllActiveStatuses(AllMasterOptionsRequest request) {
try {
LOGGER.info("Fetch All Master Options - MID: {}", request.getMid());
String apiName = "View All Options Fetch By Id";
String txnId = helper.generateTxnId(15);
String reqId = request.getReqId();
String fullUrl = "Data Base Options";
String requestJson = helper.convertObjectToJson(request);
// Validate merchant
helper.validateMerchant(request.getMid());
InboundTraceLog inboundLog = helper.createInboundLog(reqId, txnId, apiName, request.getMid(), "GET",
requestJson);
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "GET", null);
LOGGER.debug("Outbound log created successfully for Complaint : {}", fullUrl);
// Fetch data from DB
List<ComplaintStatusOptionsMaster> allActiveStatuses = complaintStatusMasterRepository
.findAllActiveStatuses();
LOGGER.info("Total Master Records Found: {}", allActiveStatuses != null ? allActiveStatuses.size() : 0);
// Check empty or null
if (allActiveStatuses == null || allActiveStatuses.isEmpty()) {
helper.updateInboundLogFailure(inboundLog, allActiveStatuses.toString(), "Null Data From DB");
return new ResponseModel("No Master Fields Found", "failed", 404, null, 0);
}
helper.updateInboundLogSuccess(inboundLog, allActiveStatuses.toString(), "200");
// SUCCESS RESPONSE
return new ResponseModel("All Master Fields Fetch", "SUCCESS", 200, allActiveStatuses,
allActiveStatuses.size());
}
catch (Exception e) {
LOGGER.error("Error while fetching master options", e);
return new ResponseModel("Something went wrong", "failed", 500, null, 0);
}
}
public ResponseModel checkTxnStatus(TxnStatusRequest request) {
LOGGER.info("Fetching TxnStatusRequest by Id={} and ReqId ={}", request.getId(),
request.getReqId());
LOGGER.info("Fetching TxnStatusRequest by Id={} and ReqId ={}", request.getId(), request.getReqId());
String apiName = "CheckTxnStatus";
String txnId = helper.generateTxnId(15);
String reqId = request.getReqId();
@@ -574,16 +624,17 @@ public class ComplainServiceImpl implements ComplainService {
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), String.valueOf(""));
}
TxnStatusResponse responseWrapper = objectMapper.convertValue(dataMap,
TxnStatusResponse.class);
TxnStatusResponse responseWrapper = objectMapper.convertValue(dataMap, TxnStatusResponse.class);
GeneralResp generalResp = responseWrapper.getGeneralResp();
String status = generalResp.getStatus();
LOGGER.info("Current Complaint ReOpen Status: {}", status);
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
//String saveComplaint = mapperHelper.saveComplainStatusDetail(responseWrapper, reqId, txnId);
//LOGGER.info("Complaint ReOpen data saved successfully for Count History: {}", saveComplaintHistory);
// String saveComplaint = mapperHelper.saveComplainStatusDetail(responseWrapper,
// reqId, txnId);
// LOGGER.info("Complaint ReOpen data saved successfully for Count History: {}",
// saveComplaintHistory);
return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
@@ -592,7 +643,7 @@ public class ComplainServiceImpl implements ComplainService {
helper.updateInboundLogFailure(inboundLog, e.getMessage(), "JSON_ERROR");
throw new CustomException("Invalid JSON received from API");
}
}
}