This commit is contained in:
Mohd-Arham
2025-11-12 17:03:07 +05:30
parent 1102a58aee
commit 7e8a7fdd6b
16 changed files with 620 additions and 65 deletions
@@ -11,11 +11,11 @@ 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.CloseComplaintRequest;
import com.billpaymentservice.bbps.dto.request.ComplainStatusRequest;
import com.billpaymentservice.bbps.dto.request.ReOpenComplain;
import com.billpaymentservice.bbps.service.ComplainService;
@RestController
@RequestMapping("/complaints")
@Validated
@@ -37,11 +37,26 @@ public class ComplainController {
ResponseModel response = complainService.getComplaintStatus(request);
return ResponseEntity.ok(response);
}
@PostMapping("/reOpenComplaint")
public ResponseEntity<ResponseModel> reOpenComplaint(@RequestBody ReOpenComplain request) {
log.info("Received ReOpen Complaint request for complaintId: {}", request.getComplaintId());
ResponseModel response = complainService.reOpenComplaint(request);
return ResponseEntity.ok(response);
}
@PostMapping("/viewComplainsHistory")
public ResponseEntity<ResponseModel> viewComplaintHistory(@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("/closeComplaint")
public ResponseEntity<ResponseModel> closeComplaint(@RequestBody CloseComplaintRequest request) {
log.info("Received complaint Close Complaint request for complaintId: {}", request.getComplaintId());
ResponseModel response = complainService.closeComplaint(request);
return ResponseEntity.ok(response);
}
}
@@ -0,0 +1,36 @@
package com.billpaymentservice.bbps.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class CloseComplaintDTO {
private String complaintId;
private String complaintDescr;
private String complaintDispos;
private String complaintType;
private String txnId;
private String complaintStatus;
private String assignedTo;
private String complaintNpciId;
private String complaintRaisedFrom;
private String userId;
private String status;
private String refId;
private String estimatedTAT;
private String creationDate; // ISO 8601 format
private String modifiedDate; // ISO 8601 format
private String billerName;
private String txnAmount;
private String superLevelEsc; // True/False
private String openComplaint; // Y/N
private String reopenComplaint; // Y/N
private String remarks;
private String agentId;
private String category;
private Long createdEpochDate; // UNIX timestamp
private Long modifiedEpochDate; // UNIX timestamp
}
@@ -0,0 +1,25 @@
package com.billpaymentservice.bbps.dto;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class ComplaintHistoryDTO {
private String complaintHistoryId;
private String complaintId;
private String complaintDescr;
private String complaintDispos;
private String txnId;
private String assignedTo;
private String complaintNpciId;
private String complaintType;
private String complaintRaisedFrom;
private String userId;
private String status;
private String modifiedDate; // ISO 8601 Timestamp
private Long modifiedEpochDate; // UNIX Epoch
private String tenantId;
}
@@ -0,0 +1,17 @@
package com.billpaymentservice.bbps.dto.request;
import jakarta.validation.constraints.NotBlank;
import lombok.Getter;
import lombok.Setter;
@Setter
@Getter
public class CloseComplaintRequest extends BaseClass {
@NotBlank(message = "complaintDescr not be null")
private String complaintDescr;
@NotBlank(message = "complaintId not be null")
private String complaintId;
}
@@ -1,5 +1,7 @@
package com.billpaymentservice.bbps.dto.request;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@@ -11,5 +13,6 @@ import lombok.Setter;
@NoArgsConstructor
public class ComplainStatusRequest extends BaseClass {
@NotBlank(message = "Complaint Id cannot be null or blank")
private String complaintId;
}
@@ -0,0 +1,16 @@
package com.billpaymentservice.bbps.dto.response;
import com.billpaymentservice.bbps.dto.GeneralResp;
import com.billpaymentservice.bbps.entites.CloseComplaint;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class CloseComplaintStatusResponse {
private CloseComplaint complaint; // main complaint details
private GeneralResp generalResp;
}
@@ -0,0 +1,28 @@
package com.billpaymentservice.bbps.dto.response;
import java.util.List;
import com.billpaymentservice.bbps.dto.ComplaintHistoryDTO;
import com.billpaymentservice.bbps.dto.GeneralResp;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class ComplaintHistoryStatusResponse {
private List<ComplaintHistoryDTO> complaintsHistories;
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private GeneralResp generalResp;
private int pageNo;
private int pageSize;
private int totalPages;
private int totalElements;
}
@@ -0,0 +1,107 @@
package com.billpaymentservice.bbps.entites;
import com.billpaymentservice.bbps.audit.Auditable;
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.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Table(name = "complaints")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CloseComplaint extends Auditable<String> {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "complaint_id")
private String complaintId; // UUID
@Column(name = "complaint_descr")
private String complaintDescr;
@Column(name = "complaint_dispos")
private String complaintDispos;
@Column(name = "complaint_type")
private String complaintType;
@Column(name = "txn_id")
private String txnId;
@Column(name = "complaint_status")
private String complaintStatus;
@Column(name = "assigned_to")
private String assignedTo;
@Column(name = "complaint_npci_id")
private String complaintNpciId;
@Column(name = "complaint_raised_from")
private String complaintRaisedFrom;
@Column(name = "user_id")
private String userId;
@Column(name = "status")
private String status;
@Column(name = "ref_id")
private String refId;
@Column(name = "estimated_tat")
private String estimatedTAT;
@Column(name = "creation_date")
private String creationDate; // ISO 8601 format
@Column(name = "modified_date")
private String modifiedDate; // ISO 8601 format
@Column(name = "biller_name")
private String billerName;
@Column(name = "txn_amount")
private String txnAmount;
@Column(name = "super_level_esc")
private String superLevelEsc; // True/False
@Column(name = "open_complaint")
private String openComplaint; // Y/N
@Column(name = "reopen_complaint")
private String reopenComplaint; // Y/N
@Column(name = "remarks", columnDefinition = "TEXT")
private String remarks;
@Column(name = "agent_id")
private String agentId;
@Column(name = "category")
private String category;
@Column(name = "created_epoch_date")
private Long createdEpochDate;
@Column(name = "modified_epoch_date")
private Long modifiedEpochDate;
@Column(name = "req_id")
private String reqId;
@Column(name = "system_txn_id")
private String systemTxnId;
}
@@ -100,4 +100,7 @@ public class ComplainStatus extends Auditable<String> {
@Column(name = "req_id")
private String reqId;
@Column(name = "system_txn_id")
private String systemTxnId;
}
@@ -0,0 +1,89 @@
package com.billpaymentservice.bbps.entites;
import com.billpaymentservice.bbps.audit.Auditable;
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.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
@Entity
@Table(name = "complaints_history")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class ComplaintHistory extends Auditable<String> {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "complaint_id")
private String complaintId;
@Column(name = "complaint_descr")
private String complaintDescr;
@Column(name = "complaint_dispos")
private String complaintDispos;
@Column(name = "txn_id")
private String txnId;
@Column(name = "complaint_history_id")
private String complaintHistoryId;
@Column(name = "assigned_to")
private String assignedTo;
@Column(name = "complaint_npci_id")
private String complaintNpciId;
@Column(name = "complaint_raised_from")
private String complaintRaisedFrom;
@Column(name = "user_id")
private String userId;
@Column(name = "status")
private String status;
@Column(name = "ref_id")
private String refId;
@Column(name = "complaint_type")
private String complaintType; // internalComplaint or npciComplaint
@Column(name = "modified_date")
private String modifiedDate; // ISO 8601 timestamp
@Column(name = "modified_epoch_date")
private Long modifiedEpochDate; // UNIX epoch timestamp
@Column(name = "page_no")
private int pageNo;
@Column(name = "page_size")
private int pageSize;
@Column(name = "total_pages")
private int totalPages;
@Column(name = "total_elements")
private int totalElements;
@Column(name = "system_txn_id")
private String systemTxnId;
@Column(name = "req_id")
private String reqId;
}
@@ -100,4 +100,7 @@ public class ReOpenComplain extends Auditable<String> {
@Column(name = "req_id")
private String reqId;
@Column(name = "system_txn_id")
private String systemTxnId;
}
@@ -0,0 +1,11 @@
package com.billpaymentservice.bbps.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.billpaymentservice.bbps.entites.ComplaintHistory;
@Repository
public interface ComplaintHistoryRepository extends JpaRepository<ComplaintHistory, Long> {
}
@@ -1,6 +1,7 @@
package com.billpaymentservice.bbps.service;
import com.billpaymentservice.bbps.dto.ResponseModel;
import com.billpaymentservice.bbps.dto.request.CloseComplaintRequest;
import com.billpaymentservice.bbps.dto.request.ComplainStatusRequest;
import com.billpaymentservice.bbps.dto.request.ReOpenComplain;
@@ -10,4 +11,8 @@ public interface ComplainService {
ResponseModel reOpenComplaint(ReOpenComplain request);
ResponseModel viewComplaintHistory(ComplainStatusRequest request);
ResponseModel closeComplaint(CloseComplaintRequest request);
}
@@ -12,8 +12,11 @@ import org.springframework.web.client.RestClient;
import com.billpaymentservice.bbps.dto.GeneralResp;
import com.billpaymentservice.bbps.dto.ResponseModel;
import com.billpaymentservice.bbps.dto.request.CloseComplaintRequest;
import com.billpaymentservice.bbps.dto.request.ComplainStatusRequest;
import com.billpaymentservice.bbps.dto.request.ReOpenComplain;
import com.billpaymentservice.bbps.dto.response.CloseComplaintStatusResponse;
import com.billpaymentservice.bbps.dto.response.ComplaintHistoryStatusResponse;
import com.billpaymentservice.bbps.dto.response.ComplaintStatusResponse;
import com.billpaymentservice.bbps.entites.BharatConnectMaster;
import com.billpaymentservice.bbps.entites.InboundTraceLog;
@@ -105,7 +108,7 @@ public class ComplainServiceImpl implements ComplainService {
LOGGER.info("Current Complaint Status: {}", status);
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
mapperHelper.saveComplaintStatus(responseWrapper, reqId);
mapperHelper.saveComplaintStatus(responseWrapper, reqId, txnId);
LOGGER.info("Complaint data saved successfully for billId: {}", complaintId);
return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
@@ -171,7 +174,7 @@ public class ComplainServiceImpl implements ComplainService {
LOGGER.info("Current Complaint ReOpen Status: {}", status);
helper.updateInboundLogSuccess(inboundLog, responseData, generalResp.getStatus());
mapperHelper.saveReOpenComplaint(responseWrapper, reqId);
mapperHelper.saveReOpenComplaint(responseWrapper, reqId, txnId);
LOGGER.info("Complaint ReOpen data saved successfully for billId: {}", complaintId);
return new ResponseModel(generalResp.getMessage(), generalResp.getStatus(),
@@ -183,4 +186,137 @@ public class ComplainServiceImpl implements ComplainService {
}
}
@Override
public ResponseModel viewComplaintHistory(ComplainStatusRequest request) {
LOGGER.info("Fetching View Complaint History 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.COMPLAINT_HISTORY + request.getComplaintId();
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(), "GET",
requestJson);
OutboundTraceLog outboundLog = helper.createOutboundLog(txnId, reqId, apiName, fullUrl, "GET", complaintId);
LOGGER.debug("Outbound log created successfully for Complaint : {}", fullUrl);
try {
LOGGER.info("Calling external API: {}", fullUrl);
Map<String, String> responseMap = httpService.getRequest(fullUrl, headers);
String responseData = responseMap.get("data");
LOGGER.info("Complaint History Complaint FetchById Response: {}", responseData);
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(""));
}
ComplaintHistoryStatusResponse responseWrapper = objectMapper.convertValue(dataMap,
ComplaintHistoryStatusResponse.class);
GeneralResp generalResp = responseWrapper.getGeneralResp();
String status = generalResp.getStatus();
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);
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");
}
}
@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);
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);
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");
}
}
}
@@ -44,6 +44,8 @@ public class BBPSConstant {
public static final String DISPOSTION_URL = "/disposition";
public static final String COMPALINT_STATUS = "/couapp/complaints/status";
public static final String REOPEN_COMPALINT = "/couapp/complaints/reopen";
public static final String COMPLAINT_HISTORY = "/couapp/complaints/history/byId?complaintId=";
public static final String CLOSE_COMPLAINT = " /couapp/complaints/closure";
public static final String PLANS_URL = "/plans";
@@ -6,17 +6,20 @@ import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import com.billpaymentservice.bbps.dto.AmountOptionDTO;
import com.billpaymentservice.bbps.dto.BillerIconDTO;
import com.billpaymentservice.bbps.dto.ComplainDetailsDto;
import com.billpaymentservice.bbps.dto.ComplaintHistoryDTO;
import com.billpaymentservice.bbps.dto.CustomerParamGroupsDTO;
import com.billpaymentservice.bbps.dto.GroupDTO;
import com.billpaymentservice.bbps.dto.MasterCategoryBillerResponse;
import com.billpaymentservice.bbps.dto.PlanDTO;
import com.billpaymentservice.bbps.dto.PlanTag;
import com.billpaymentservice.bbps.dto.response.AmountOptionsResponse;
import com.billpaymentservice.bbps.dto.response.ComplaintHistoryStatusResponse;
import com.billpaymentservice.bbps.dto.response.ComplaintStatusResponse;
import com.billpaymentservice.bbps.dto.response.PlanResponse;
import com.billpaymentservice.bbps.entites.AdditionalInfoPlans;
@@ -26,6 +29,7 @@ import com.billpaymentservice.bbps.entites.BillerCategoryIcon;
import com.billpaymentservice.bbps.entites.BillerCategoryWise;
import com.billpaymentservice.bbps.entites.CategoryResponseList;
import com.billpaymentservice.bbps.entites.ComplainStatus;
import com.billpaymentservice.bbps.entites.ComplaintHistory;
import com.billpaymentservice.bbps.entites.CustomerParamGroupById;
import com.billpaymentservice.bbps.entites.GroupParam;
import com.billpaymentservice.bbps.entites.Plan;
@@ -36,15 +40,19 @@ import com.billpaymentservice.bbps.entites.ReOpenComplain;
import com.billpaymentservice.bbps.repository.AmountOptionByBillerIdRepository;
import com.billpaymentservice.bbps.repository.BillerCategoryWiseRepository;
import com.billpaymentservice.bbps.repository.CategoryResponseListRepository;
import com.billpaymentservice.bbps.repository.ComplaintHistoryRepository;
import com.billpaymentservice.bbps.repository.ComplaintStatusRepository;
import com.billpaymentservice.bbps.repository.CustomerParamGroupByBillerIdRepository;
import com.billpaymentservice.bbps.repository.FetchBillValidateRepository;
import com.billpaymentservice.bbps.repository.PlanResponseRepository;
import com.billpaymentservice.bbps.repository.ReOpenComplaintRepository;
import com.billpaymentservice.bbps.serviceImpl.AgentServiceImpl;
@Component
public class BillerMapperHelper {
private static final Logger LOGGER = LoggerFactory.getLogger(BillerMapperHelper.class);
private final BillerCategoryWiseRepository billerRepo;
private final CustomerParamGroupByBillerIdRepository customerParamGroupByBillerIdRepo;
private final AmountOptionByBillerIdRepository amountOptionByBillerIdRepository;
@@ -53,6 +61,7 @@ public class BillerMapperHelper {
private final FetchBillValidateRepository fetchBillValidateRepository;
private final ComplaintStatusRepository complaintStatusRepository;
private final ReOpenComplaintRepository reOpenComplaintRepository;
private final ComplaintHistoryRepository complaintHistoryRepository;
public BillerMapperHelper(BillerCategoryWiseRepository billerRepo,
CustomerParamGroupByBillerIdRepository customerParamGroupByBillerIdRepo,
@@ -60,7 +69,8 @@ public class BillerMapperHelper {
PlanResponseRepository planResponseRepository,
CategoryResponseListRepository categoryResponseListRepository,
FetchBillValidateRepository fetchBillValidateRepository,
ComplaintStatusRepository complaintStatusRepository, ReOpenComplaintRepository reOpenComplaintRepository) {
ComplaintStatusRepository complaintStatusRepository, ReOpenComplaintRepository reOpenComplaintRepository,
ComplaintHistoryRepository complaintHistoryRepository) {
this.billerRepo = billerRepo;
this.customerParamGroupByBillerIdRepo = customerParamGroupByBillerIdRepo;
this.amountOptionByBillerIdRepository = amountOptionByBillerIdRepository;
@@ -69,6 +79,7 @@ public class BillerMapperHelper {
this.fetchBillValidateRepository = fetchBillValidateRepository;
this.complaintStatusRepository = complaintStatusRepository;
this.reOpenComplaintRepository = reOpenComplaintRepository;
this.complaintHistoryRepository = complaintHistoryRepository;
}
/**
@@ -288,72 +299,72 @@ public class BillerMapperHelper {
}
public PlanResponses savePlanResponse(PlanResponse planResponse, String reqId, String txnId) {
PlanResponses response = new PlanResponses();
response.setRequestId(reqId);
response.setPageNo(planResponse.getPageNo());
response.setPageSize(planResponse.getPageSize());
response.setTotalElements(planResponse.getTotalElements());
response.setTotalPages(planResponse.getTotalPages());
response.setTxnId(txnId);
response.setCreateDateTime(new Date());
PlanResponses response = new PlanResponses();
response.setRequestId(reqId);
response.setPageNo(planResponse.getPageNo());
response.setPageSize(planResponse.getPageSize());
response.setTotalElements(planResponse.getTotalElements());
response.setTotalPages(planResponse.getTotalPages());
response.setTxnId(txnId);
response.setCreateDateTime(new Date());
PlansList plansList = new PlansList();
List<Plan> planEntities = new ArrayList<>();
PlansList plansList = new PlansList();
List<Plan> planEntities = new ArrayList<>();
for (PlanDTO dto : planResponse.getPlansList().getPlans()) {
Plan plan = new Plan();
plan.setPlanId(dto.getPlanId());
plan.setDescription(dto.getDescription());
plan.setBillerId(dto.getBillerId());
plan.setCategoryType(dto.getCategoryType());
plan.setAmountInRupees(dto.getAmountInRupees());
plan.setEffctvFrom(dto.getEffctvFrom());
plan.setEffctvTo(dto.getEffctvTo());
plan.setStatus(dto.getStatus());
plan.setPlansList(plansList);
for (PlanDTO dto : planResponse.getPlansList().getPlans()) {
Plan plan = new Plan();
plan.setPlanId(dto.getPlanId());
plan.setDescription(dto.getDescription());
plan.setBillerId(dto.getBillerId());
plan.setCategoryType(dto.getCategoryType());
plan.setAmountInRupees(dto.getAmountInRupees());
plan.setEffctvFrom(dto.getEffctvFrom());
plan.setEffctvTo(dto.getEffctvTo());
plan.setStatus(dto.getStatus());
plan.setPlansList(plansList);
// categorySubType
List<PlanCategorySubType> subs = new ArrayList<>();
if (dto.getCategorySubType() != null) {
for (String s : dto.getCategorySubType()) {
PlanCategorySubType sub = new PlanCategorySubType();
sub.setCategorySubType(s);
sub.setPlan(plan);
subs.add(sub);
}
}
plan.setCategorySubTypes(subs);
// categorySubType
List<PlanCategorySubType> subs = new ArrayList<>();
if (dto.getCategorySubType() != null) {
for (String s : dto.getCategorySubType()) {
PlanCategorySubType sub = new PlanCategorySubType();
sub.setCategorySubType(s);
sub.setPlan(plan);
subs.add(sub);
}
}
plan.setCategorySubTypes(subs);
// additionalInfo + tags
// ✅ additionalInfo + tags
if (dto.getAdditionalInfo() != null) {
AdditionalInfoPlans info = new AdditionalInfoPlans();
info.setPlanAdditionalInfoId(dto.getAdditionalInfo().getPlanAdditionalInfoId().toString());
// additionalInfo + tags
// ✅ additionalInfo + tags
if (dto.getAdditionalInfo() != null) {
AdditionalInfoPlans info = new AdditionalInfoPlans();
info.setPlanAdditionalInfoId(dto.getAdditionalInfo().getPlanAdditionalInfoId().toString());
List<com.billpaymentservice.bbps.entites.PlanTag> tagEntities = new ArrayList<>();
if (dto.getAdditionalInfo().getTags() != null && !dto.getAdditionalInfo().getTags().isEmpty()) {
for (com.billpaymentservice.bbps.dto.PlanTag tagDto : dto.getAdditionalInfo().getTags()) {
com.billpaymentservice.bbps.entites.PlanTag tagEntity = new com.billpaymentservice.bbps.entites.PlanTag();
tagEntity.setTagId(tagDto.getTagId().toString());
tagEntity.setName(tagDto.getName());
tagEntity.setValue(tagDto.getValue());
tagEntity.setAdditionalInfo(info); // ✅ maintain relationship
tagEntities.add(tagEntity);
}
}
List<com.billpaymentservice.bbps.entites.PlanTag> tagEntities = new ArrayList<>();
if (dto.getAdditionalInfo().getTags() != null && !dto.getAdditionalInfo().getTags().isEmpty()) {
for (com.billpaymentservice.bbps.dto.PlanTag tagDto : dto.getAdditionalInfo().getTags()) {
com.billpaymentservice.bbps.entites.PlanTag tagEntity = new com.billpaymentservice.bbps.entites.PlanTag();
tagEntity.setTagId(tagDto.getTagId().toString());
tagEntity.setName(tagDto.getName());
tagEntity.setValue(tagDto.getValue());
tagEntity.setAdditionalInfo(info); // ✅ maintain relationship
tagEntities.add(tagEntity);
}
}
// ✅ Now set the entity list
info.setTags(tagEntities);
plan.setAdditionalInfo(info);
}
// ✅ Now set the entity list
info.setTags(tagEntities);
plan.setAdditionalInfo(info);
}
planEntities.add(plan);
}
planEntities.add(plan);
}
plansList.setPlans(planEntities);
response.setPlansList(plansList);
plansList.setPlans(planEntities);
response.setPlansList(plansList);
return planResponseRepository.save(response);
return planResponseRepository.save(response);
}
public String saveCategoryItems(List<String> categoryRespList, String requestId, String txnId) {
@@ -375,7 +386,7 @@ public class BillerMapperHelper {
return savedCount + " items were successfully saved.";
}
public String saveComplaintStatus(ComplaintStatusResponse response, String reqId) {
public String saveComplaintStatus(ComplaintStatusResponse response, String reqId, String txnId) {
if (response == null || response.getComplaints() == null) {
throw new IllegalArgumentException("Invalid complaint response received!");
@@ -411,6 +422,7 @@ public class BillerMapperHelper {
entity.setCreatedEpochDate(dto.getCreatedEpochDate());
entity.setModifiedEpochDate(dto.getModifiedEpochDate());
entity.setRefId(reqId);
entity.setSystemTxnId(txnId);
try {
ComplainStatus savedEntity = complaintStatusRepository.save(entity);
@@ -425,7 +437,7 @@ public class BillerMapperHelper {
}
}
public String saveReOpenComplaint(ComplaintStatusResponse response, String reqId) {
public String saveReOpenComplaint(ComplaintStatusResponse response, String reqId, String txnId) {
if (response == null || response.getComplaints() == null) {
throw new IllegalArgumentException("Invalid complaint response received!");
@@ -461,6 +473,7 @@ public class BillerMapperHelper {
entity.setCreatedEpochDate(dto.getCreatedEpochDate());
entity.setModifiedEpochDate(dto.getModifiedEpochDate());
entity.setRefId(reqId);
entity.setSystemTxnId(txnId);
try {
ReOpenComplain savedEntity = reOpenComplaintRepository.save(entity);
@@ -475,4 +488,50 @@ public class BillerMapperHelper {
}
}
public String saveComplaintHistory(ComplaintHistoryStatusResponse responseWrapper, String reqId, String txnId) {
if (responseWrapper == null || responseWrapper.getComplaintsHistories() == null
|| responseWrapper.getComplaintsHistories().isEmpty()) {
return "No complaint history data found to save.";
}
try {
int savedCount = 0;
for (ComplaintHistoryDTO dto : responseWrapper.getComplaintsHistories()) {
ComplaintHistory entity = new ComplaintHistory();
entity.setComplaintHistoryId(dto.getComplaintHistoryId());
entity.setComplaintId(dto.getComplaintId());
entity.setComplaintDescr(dto.getComplaintDescr());
entity.setComplaintDispos(dto.getComplaintDispos());
entity.setTxnId(dto.getTxnId());
entity.setAssignedTo(dto.getAssignedTo());
entity.setComplaintNpciId(dto.getComplaintNpciId());
entity.setComplaintType(dto.getComplaintType());
entity.setComplaintRaisedFrom(dto.getComplaintRaisedFrom());
entity.setUserId(dto.getUserId());
entity.setStatus(dto.getStatus());
entity.setModifiedDate(dto.getModifiedDate());
entity.setModifiedEpochDate(dto.getModifiedEpochDate());
entity.setReqId(reqId);
entity.setSystemTxnId(txnId);
entity.setCreateDateTime(new Date());
entity.setPageNo(responseWrapper.getPageNo());
entity.setPageSize(responseWrapper.getPageSize());
entity.setTotalElements(responseWrapper.getTotalElements());
entity.setTotalPages(responseWrapper.getTotalPages());
complaintHistoryRepository.save(entity);
savedCount++;
}
return "✅ " + savedCount + " Complaint history record(s) saved successfully.";
} catch (Exception e) {
// Log the error for debugging
LOGGER.error("❌ Error saving complaint history data: {}", e.getMessage(), e);
return "❌ Failed to save complaint history data due to: " + e.getMessage();
}
}
}