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.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.http.ResponseEntity;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.CrossOrigin; 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.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.billpaymentservice.bbps.dto.ResponseModel; 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.CloseComplaintRequest;
import com.billpaymentservice.bbps.dto.request.ComplainStatusRequest; import com.billpaymentservice.bbps.dto.request.ComplainStatusRequest;
import com.billpaymentservice.bbps.dto.request.ComplaintRequestDTO; 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) @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()); log.info("Received complaint status request for complaintId: {}", request.getComplaintId());
ResponseModel response = complainService.getComplaintStatus(request); ResponseModel response = complainService.getComplaintStatus(request);
return ResponseEntity.ok(response); return ResponseEntity.ok(response);
} }
@PostMapping(value = "/reOpenComplaint", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @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()); log.info("Received ReOpen Complaint request for complaintId: {}", request.getComplaintId());
ResponseModel response = complainService.reOpenComplaint(request); ResponseModel response = complainService.reOpenComplaint(request);
return ResponseEntity.ok(response); return ResponseEntity.ok(response);
} }
@PostMapping(value = "/viewComplainsHistory", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @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()); log.info("Received complaint View Complaint History request for complaintId: {}", request.getComplaintId());
ResponseModel response = complainService.viewComplaintHistory(request); ResponseModel response = complainService.viewComplaintHistory(request);
return ResponseEntity.ok(response); return ResponseEntity.ok(response);
} }
@PostMapping(value = "/closeComplaint", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @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()); log.info("Received complaint Close Complaint request for complaintId: {}", request.getComplaintId());
ResponseModel response = complainService.closeComplaint(request); ResponseModel response = complainService.closeComplaint(request);
return ResponseEntity.ok(response); return ResponseEntity.ok(response);
} }
@PostMapping("/viewComplaintsById") @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()); log.info("Received complaint View Complaint By ID request for complaintId: {}", request.getComplaintId());
ResponseModel response = complainService.viewComplaintById(request); ResponseModel response = complainService.viewComplaintById(request);
return ResponseEntity.ok(response); 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; package com.billpaymentservice.bbps.service;
import com.billpaymentservice.bbps.dto.ResponseModel; 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.CloseComplaintRequest;
import com.billpaymentservice.bbps.dto.request.ComplainStatusRequest; import com.billpaymentservice.bbps.dto.request.ComplainStatusRequest;
import com.billpaymentservice.bbps.dto.request.ReOpenComplain; import com.billpaymentservice.bbps.dto.request.ReOpenComplain;
@@ -18,10 +19,12 @@ public interface ComplainService {
ResponseModel closeComplaint(CloseComplaintRequest request); ResponseModel closeComplaint(CloseComplaintRequest request);
ResponseModel addComplain(ComplaintRequestDTO complainRequestDTO); ResponseModel addComplain(ComplaintRequestDTO complainRequestDTO);
ResponseModel viewComplaintById(ViewComplainByIdRequest request); ResponseModel viewComplaintById(ViewComplainByIdRequest request);
ResponseModel getAllActiveStatuses(AllMasterOptionsRequest request);
ResponseModel checkTxnStatus(TxnStatusRequest request); ResponseModel checkTxnStatus(TxnStatusRequest request);
} }
@@ -1,6 +1,6 @@
package com.billpaymentservice.bbps.serviceImpl; package com.billpaymentservice.bbps.serviceImpl;
import java.util.HashMap; import java.util.List;
import java.util.Map; import java.util.Map;
import org.modelmapper.ModelMapper; import org.modelmapper.ModelMapper;
@@ -8,7 +8,6 @@ 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.boot.configurationprocessor.json.JSONObject;
import org.springframework.http.HttpHeaders; 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;
@@ -16,25 +15,28 @@ 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.AllMasterOptionsRequest;
import com.billpaymentservice.bbps.dto.request.CloseComplaintRequest; import com.billpaymentservice.bbps.dto.request.CloseComplaintRequest;
import com.billpaymentservice.bbps.dto.request.ComplainStatusRequest; import com.billpaymentservice.bbps.dto.request.ComplainStatusRequest;
import com.billpaymentservice.bbps.dto.request.ComplaintRequestDTO; import com.billpaymentservice.bbps.dto.request.ComplaintRequestDTO;
import com.billpaymentservice.bbps.dto.request.ReOpenComplain; import com.billpaymentservice.bbps.dto.request.ReOpenComplain;
import com.billpaymentservice.bbps.dto.request.TxnStatusRequest; import com.billpaymentservice.bbps.dto.request.TxnStatusRequest;
import com.billpaymentservice.bbps.dto.request.ViewComplainByIdRequest; 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.ComplaintHistoryStatusResponse;
import com.billpaymentservice.bbps.dto.response.ComplaintResponse; import com.billpaymentservice.bbps.dto.response.ComplaintResponse;
import com.billpaymentservice.bbps.dto.response.ComplaintStatusResponse; import com.billpaymentservice.bbps.dto.response.ComplaintStatusResponse;
import com.billpaymentservice.bbps.dto.response.TxnStatusResponse; import com.billpaymentservice.bbps.dto.response.TxnStatusResponse;
import com.billpaymentservice.bbps.dto.response.ViewComplainByIdResponse; import com.billpaymentservice.bbps.dto.response.ViewComplainByIdResponse;
import com.billpaymentservice.bbps.entites.BharatConnectMaster; import com.billpaymentservice.bbps.entites.BharatConnectMaster;
import com.billpaymentservice.bbps.entites.ComplaintDetails; import com.billpaymentservice.bbps.entites.ComplaintDetails;
import com.billpaymentservice.bbps.entites.ComplaintStatusOptionsMaster;
import com.billpaymentservice.bbps.entites.InboundTraceLog; import com.billpaymentservice.bbps.entites.InboundTraceLog;
import com.billpaymentservice.bbps.entites.OutboundTraceLog; import com.billpaymentservice.bbps.entites.OutboundTraceLog;
import com.billpaymentservice.bbps.exception.CustomException; import com.billpaymentservice.bbps.exception.CustomException;
import com.billpaymentservice.bbps.repository.BharatConnectMasterRepository; import com.billpaymentservice.bbps.repository.BharatConnectMasterRepository;
import com.billpaymentservice.bbps.repository.ComplainRepository; import com.billpaymentservice.bbps.repository.ComplainRepository;
import com.billpaymentservice.bbps.repository.ComplaintOptionsStatusMasterRepository;
import com.billpaymentservice.bbps.service.ComplainService; import com.billpaymentservice.bbps.service.ComplainService;
import com.billpaymentservice.bbps.util.BBPSConstant; import com.billpaymentservice.bbps.util.BBPSConstant;
import com.billpaymentservice.bbps.util.BillerMapperHelper; import com.billpaymentservice.bbps.util.BillerMapperHelper;
@@ -59,19 +61,22 @@ public class ComplainServiceImpl implements ComplainService {
private final BharatConnectMasterRepository beneficiaryDetailsRepository; private final BharatConnectMasterRepository beneficiaryDetailsRepository;
private final BillerMapperHelper mapperHelper; private final BillerMapperHelper mapperHelper;
private final ComplainRepository complainRepository; private final ComplainRepository complainRepository;
private final ComplaintOptionsStatusMasterRepository complaintStatusMasterRepository;
private final ObjectMapper objectMapper = new ObjectMapper(); private final ObjectMapper objectMapper = new ObjectMapper();
private static final Logger LOGGER = LoggerFactory.getLogger(AgentServiceImpl.class); private static final Logger LOGGER = LoggerFactory.getLogger(AgentServiceImpl.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,
ComplainRepository complainRepository) { ComplainRepository complainRepository,
ComplaintOptionsStatusMasterRepository complaintStatusMasterRepository) {
this.restClient = restClient; this.restClient = restClient;
this.httpService = httpService; this.httpService = httpService;
this.helper = helper; this.helper = helper;
this.beneficiaryDetailsRepository = beneficiaryDetailsRepository; this.beneficiaryDetailsRepository = beneficiaryDetailsRepository;
this.mapperHelper = mapperHelper; this.mapperHelper = mapperHelper;
this.complainRepository = complainRepository; this.complainRepository = complainRepository;
this.complaintStatusMasterRepository = complaintStatusMasterRepository;
} }
@Override @Override
@@ -135,84 +140,97 @@ public class ComplainServiceImpl implements ComplainService {
@Override @Override
public ResponseModel getComplaintStatus(ComplainStatusRequest request) { public ResponseModel getComplaintStatus(ComplainStatusRequest request) {
LOGGER.info("Fetching Compalint Status by Complaint Id={}", request.getComplaintId(), request.getReqId()); LOGGER.info("Fetching Compalint Status by Complaint Id={}", request.getComplaintId(), request.getReqId());
String apiName = "Complaint Status"; // String apiName = "Complaint Status";
String txnId = helper.generateTxnId(15); // String txnId = helper.generateTxnId(15);
String reqId = request.getReqId(); // String reqId = request.getReqId();
String complaintId = request.getComplaintId(); // String complaintId = request.getComplaintId();
String fullUrl = agentDtaUrl + BBPSConstant.COMPALINT_STATUS; // String fullUrl = agentDtaUrl + BBPSConstant.COMPALINT_STATUS;
//
helper.validateMerchant(request.getMid()); // helper.validateMerchant(request.getMid());
//
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001"); // BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
HttpHeaders headers = new HttpHeaders(); // HttpHeaders headers = new HttpHeaders();
headers.set("x-digiledge-key", headersData.getXDigiledgeKey()); // headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
headers.set("agentId", headersData.getAgentId()); // headers.set("agentId", headersData.getAgentId());
headers.set("tenantId", headersData.getTenantId()); // headers.set("tenantId", headersData.getTenantId());
headers.setContentType(MediaType.APPLICATION_JSON); // headers.setContentType(MediaType.APPLICATION_JSON);
//
ObjectMapper objectMapper = new ObjectMapper(); // ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 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",
requestJson); // requestJson);
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "POST", complaintId); // OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "POST", complaintId);
LOGGER.debug("Outbound log created successfully for Complaint : {}", fullUrl); // LOGGER.debug("Outbound log created successfully for Complaint : {}", fullUrl);
try { 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, Object> dummyComplaint = mapperHelper.getComplaintStatusJson();
Map<String, String> responseMap = httpService.postRequest(fullUrl, requestJson, headers);
String responseData = responseMap.get("data");
LOGGER.info("Complaint FetchById Response: {}", responseData);
// Dummy complaint map start LOGGER.info("Returning Dummy Response: {}", dummyComplaint);
JSONObject json = new JSONObject(responseData);
String message = json.optString("message");
// dummy data send when server response is coming error. // Pass map directly to ResponseModel
// Check for internal server error return new ResponseModel("Successfully requested complaint status", "success", 200, dummyComplaint);
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 // 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) { } catch (Exception ex) {
LOGGER.error("Error parsing response JSON", ex); LOGGER.error("Error parsing response JSON", ex);
throw new CustomException("Error " + ex.getMessage()); throw new CustomException("Error " + ex.getMessage());
@@ -222,84 +240,76 @@ public class ComplainServiceImpl implements ComplainService {
@Override @Override
public ResponseModel reOpenComplaint(ReOpenComplain request) { public ResponseModel reOpenComplaint(ReOpenComplain request) {
LOGGER.info("Fetching ReOpen Complaint by Complaint Id={}", request.getComplaintId(), request.getReqId()); LOGGER.info("Fetching ReOpen Complaint by Complaint Id={}", request.getComplaintId(), request.getReqId());
String apiName = "Complaint Status"; // String apiName = "Complaint Status";
String txnId = helper.generateTxnId(15); // String txnId = helper.generateTxnId(15);
String reqId = request.getReqId(); // String reqId = request.getReqId();
String complaintId = request.getComplaintId(); // String complaintId = request.getComplaintId();
String fullUrl = agentDtaUrl + BBPSConstant.REOPEN_COMPALINT; // String fullUrl = agentDtaUrl + BBPSConstant.REOPEN_COMPALINT;
//
helper.validateMerchant(request.getMid()); // helper.validateMerchant(request.getMid());
//
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001"); // BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
HttpHeaders headers = new HttpHeaders(); // HttpHeaders headers = new HttpHeaders();
headers.set("x-digiledge-key", headersData.getXDigiledgeKey()); // headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
headers.set("agentId", headersData.getAgentId()); // headers.set("agentId", headersData.getAgentId());
headers.set("tenantId", headersData.getTenantId()); // headers.set("tenantId", headersData.getTenantId());
headers.setContentType(MediaType.APPLICATION_JSON); // headers.setContentType(MediaType.APPLICATION_JSON);
//
ObjectMapper objectMapper = new ObjectMapper(); // ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 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",
requestJson); // requestJson);
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "POST", complaintId); // OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "POST", complaintId);
LOGGER.debug("Outbound log created successfully for Complaint : {}", fullUrl); // LOGGER.debug("Outbound log created successfully for Complaint : {}", fullUrl);
try { try {
LOGGER.info("Calling external API: {}", fullUrl); // LOGGER.info("Calling external API: {}", fullUrl);
Map<String, String> responseMap = httpService.postRequest(fullUrl, requestJson, headers); // Map<String, String> responseMap = httpService.postRequest(fullUrl, requestJson, headers);
String responseData = responseMap.get("data"); // String responseData = responseMap.get("data");
LOGGER.info("Complaint ReOpen FetchById Response: {}", responseData); // LOGGER.info("Complaint ReOpen FetchById Response: {}", responseData);
// Dummy complaint map start // Dummy complaint map start
// Check for internal server error // 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(); return new ResponseModel("Complaint reopening requested", "success", 200, dummyComplaint);
LOGGER.info("Returning Dummy Response: {}", dummyComplaint);
return new ResponseModel("Complaint reopening requested", "success", 200, dummyComplaint);
}
// Dummy complaint map End // Dummy complaint map End
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>>() {
}); // });
//
if (!dataMap.containsKey("generalResp")) { // if (!dataMap.containsKey("generalResp")) {
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")), String.valueOf(dataMap.get("status")), // throw new CustomException(String.valueOf(dataMap.get("message")), 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")));
} // }
//
ComplaintStatusResponse responseWrapper = objectMapper.convertValue(dataMap, ComplaintStatusResponse.class); // ComplaintStatusResponse responseWrapper = objectMapper.convertValue(dataMap, ComplaintStatusResponse.class);
GeneralResp generalResp = responseWrapper.getGeneralResp(); // GeneralResp generalResp = responseWrapper.getGeneralResp();
//
String status = generalResp.getStatus(); // String status = generalResp.getStatus();
LOGGER.info("Current Complaint ReOpen Status: {}", status); // LOGGER.info("Current Complaint ReOpen Status: {}", status);
//
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus()); // helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
mapperHelper.saveReOpenComplaint(responseWrapper, reqId, txnId); // mapperHelper.saveReOpenComplaint(responseWrapper, reqId, txnId);
LOGGER.info("Complaint ReOpen data saved successfully for billId: {}", complaintId); // LOGGER.info("Complaint ReOpen data saved successfully for billId: {}", complaintId);
//
return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(), // return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper); // Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
} catch (JsonProcessingException e) { // } catch (JsonProcessingException e) {
LOGGER.error("Error parsing Complaint Id JSON: {}", e.getMessage(), e); // LOGGER.error("Error parsing Complaint Id 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");
} catch (Exception ex) { } catch (Exception ex) {
LOGGER.error("Error parsing response JSON", ex); LOGGER.error("Error parsing response JSON", ex);
throw new CustomException("Error " + ex.getMessage()); throw new CustomException("Error " + ex.getMessage());
@@ -376,92 +386,83 @@ public class ComplainServiceImpl implements ComplainService {
@Override @Override
public ResponseModel closeComplaint(CloseComplaintRequest request) { public ResponseModel closeComplaint(CloseComplaintRequest request) {
LOGGER.info("Fetching Close Complaint by Complaint Id={}", request.getComplaintId(), request.getReqId()); LOGGER.info("Fetching Close Complaint by Complaint Id={}", request.getComplaintId(), request.getReqId());
String apiName = "Complaint Status"; // String apiName = "Complaint Status";
String txnId = helper.generateTxnId(15); // String txnId = helper.generateTxnId(15);
String reqId = request.getReqId(); // String reqId = request.getReqId();
String complaintId = request.getComplaintId(); // String complaintId = request.getComplaintId();
String fullUrl = agentDtaUrl + BBPSConstant.CLOSE_COMPLAINT; // String fullUrl = agentDtaUrl + BBPSConstant.CLOSE_COMPLAINT;
//
helper.validateMerchant(request.getMid()); // helper.validateMerchant(request.getMid());
//
BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001"); // BharatConnectMaster headersData = beneficiaryDetailsRepository.findByOrgId("ORG001");
HttpHeaders headers = new HttpHeaders(); // HttpHeaders headers = new HttpHeaders();
headers.set("x-digiledge-key", headersData.getXDigiledgeKey()); // headers.set("x-digiledge-key", headersData.getXDigiledgeKey());
headers.set("agentId", headersData.getAgentId()); // headers.set("agentId", headersData.getAgentId());
headers.set("tenantId", headersData.getTenantId()); // headers.set("tenantId", headersData.getTenantId());
headers.setContentType(MediaType.APPLICATION_JSON); // headers.setContentType(MediaType.APPLICATION_JSON);
//
ObjectMapper objectMapper = new ObjectMapper(); // ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 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",
requestJson); // requestJson);
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "POST", complaintId); // OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "POST", complaintId);
LOGGER.debug("Outbound log created successfully for Complaint : {}", fullUrl); // LOGGER.debug("Outbound log created successfully for Complaint : {}", fullUrl);
try { try {
LOGGER.info("Calling external API: {}", fullUrl); // LOGGER.info("Calling external API: {}", fullUrl);
Map<String, String> responseMap = httpService.postRequest(fullUrl, requestJson, headers); // Map<String, String> responseMap = httpService.postRequest(fullUrl, requestJson, headers);
String responseData = responseMap.get("data"); // String responseData = responseMap.get("data");
LOGGER.info("Complaint Close FetchById Response: {}", responseData); // LOGGER.info("Complaint Close FetchById Response: {}", responseData);
// Dummy complaint map Start // Dummy complaint map Start
int jsonStartIndex = responseData.indexOf("{"); Map<String, Object> dummyComplaint = mapperHelper.getDummyClosureComplaintJson();
if (jsonStartIndex != -1) { LOGGER.info("Returning Dummy Response: {}", dummyComplaint);
responseData = responseData.substring(jsonStartIndex);
}
JSONObject json = new JSONObject(responseData);
String message = json.optString("message");
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 // Dummy complaint map End
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>>() {
}); // });
//
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")), String.valueOf(dataMap.get("status")), // throw new CustomException(String.valueOf(dataMap.get("message")), 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")));
} // }
//
CloseComplaintStatusResponse responseWrapper = objectMapper.convertValue(dataMap, // CloseComplaintStatusResponse responseWrapper = objectMapper.convertValue(dataMap,
CloseComplaintStatusResponse.class); // CloseComplaintStatusResponse.class);
GeneralResp generalResp = responseWrapper.getGeneralResp(); // GeneralResp generalResp = responseWrapper.getGeneralResp();
//
String status = generalResp.getStatus(); // String status = generalResp.getStatus();
LOGGER.info("Current Complaint Close Status: {}", status); // LOGGER.info("Current Complaint Close Status: {}", status);
//
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus()); // helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
// mapperHelper.saveReOpenComplaint(responseWrapper, reqId, txnId); // // mapperHelper.saveReOpenComplaint(responseWrapper, reqId, txnId);
LOGGER.info("Complaint Close data saved successfully for billId: {}", complaintId); // LOGGER.info("Complaint Close data saved successfully for billId: {}", complaintId);
//
return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(), // return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper); // Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
} catch (JsonProcessingException e) { // } catch (JsonProcessingException e) {
LOGGER.error("Error parsing Complaint Id JSON: {}", e.getMessage(), e); // LOGGER.error("Error parsing Complaint Id 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");
} catch (Exception e) { } catch (Exception e) {
throw new CustomException("Invalid JSON received from API" + e.getMessage()); throw new CustomException("Invalid JSON received from API" + e.getMessage());
} }
} }
@Override @Override
public ResponseModel viewComplaintById( ViewComplainByIdRequest request) { public ResponseModel viewComplaintById(ViewComplainByIdRequest request) {
LOGGER.info("Fetching View Complaint History Complaint by Complaint Id={}", request.getComplaintId(), LOGGER.info("Fetching View Complaint History Complaint by Complaint Id={}", request.getComplaintId(),
request.getReqId()); request.getReqId());
String apiName = "View Complaint By ID"; String apiName = "View Complaint By ID";
@@ -515,8 +516,14 @@ public class ComplainServiceImpl implements ComplainService {
LOGGER.info("Current Complaint ReOpen Status: {}", status); LOGGER.info("Current Complaint ReOpen Status: {}", status);
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus()); 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); 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(), return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper); Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
@@ -528,9 +535,52 @@ public class ComplainServiceImpl implements ComplainService {
} }
@Override @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) { public ResponseModel checkTxnStatus(TxnStatusRequest request) {
LOGGER.info("Fetching TxnStatusRequest by Id={} and ReqId ={}", request.getId(), LOGGER.info("Fetching TxnStatusRequest by Id={} and ReqId ={}", request.getId(), request.getReqId());
request.getReqId());
String apiName = "CheckTxnStatus"; String apiName = "CheckTxnStatus";
String txnId = helper.generateTxnId(15); String txnId = helper.generateTxnId(15);
String reqId = request.getReqId(); String reqId = request.getReqId();
@@ -574,16 +624,17 @@ public class ComplainServiceImpl implements ComplainService {
Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), String.valueOf("")); Integer.parseInt(String.valueOf(dataMap.get("statusCode"))), String.valueOf(""));
} }
TxnStatusResponse responseWrapper = objectMapper.convertValue(dataMap, TxnStatusResponse responseWrapper = objectMapper.convertValue(dataMap, TxnStatusResponse.class);
TxnStatusResponse.class);
GeneralResp generalResp = responseWrapper.getGeneralResp(); GeneralResp generalResp = responseWrapper.getGeneralResp();
String status = generalResp.getStatus(); String status = generalResp.getStatus();
LOGGER.info("Current Complaint ReOpen Status: {}", status); LOGGER.info("Current Complaint ReOpen Status: {}", status);
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus()); helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
//String saveComplaint = mapperHelper.saveComplainStatusDetail(responseWrapper, reqId, txnId); // String saveComplaint = mapperHelper.saveComplainStatusDetail(responseWrapper,
//LOGGER.info("Complaint ReOpen data saved successfully for Count History: {}", saveComplaintHistory); // reqId, txnId);
// LOGGER.info("Complaint ReOpen data saved successfully for Count History: {}",
// saveComplaintHistory);
return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(), return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
Integer.parseInt(generalResp.getStatusCode()), responseWrapper); Integer.parseInt(generalResp.getStatusCode()), responseWrapper);
@@ -592,7 +643,7 @@ public class ComplainServiceImpl implements ComplainService {
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");
} }
} }
} }