Merge pull request 'feature3-userId-added' (#39) from feature3-userId-added into develop

Reviewed-on: https://git.zeptic.in/himanshu/bbps/pulls/39
This commit is contained in:
Mohd_Arham
2025-12-19 12:21:33 +05:30
4 changed files with 75 additions and 87 deletions
@@ -1,7 +1,6 @@
package com.billpaymentservice.bbps.entites; package com.billpaymentservice.bbps.entites;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date; import java.util.Date;
import jakarta.persistence.Column; import jakarta.persistence.Column;
@@ -11,33 +10,34 @@ import lombok.Getter;
import lombok.Setter; import lombok.Setter;
/** /**
* Base mapped superclass for audit fields. All JPA entities should extend this to * Base mapped superclass for audit fields. All JPA entities should extend this
* get automatic population of createdAt/updatedAt/isDeleted via AuditListener. * to get automatic population of createdAt/updatedAt/isDeleted via
* AuditListener.
*/ */
@MappedSuperclass @MappedSuperclass
@EntityListeners(AuditListener.class) @EntityListeners(AuditListener.class)
@Getter @Getter
@Setter @Setter
public abstract class Auditable implements Serializable { public abstract class Auditable implements Serializable {
@Column(name = "create_date_time") @Column(name = "create_date_time")
private Date createDateTime; private Date createDateTime;
@Column(name = "updated_date_time") @Column(name = "updated_date_time")
private Date updatedDateTime; private Date updatedDateTime;
@Column(name = "create_by") @Column(name = "create_by")
private String createdBy; private String createdBy;
@Column(name = "updated_by") @Column(name = "updated_by")
private String updatedBy; private String updatedBy;
@Column(name = "created_epoch_date") @Column(name = "created_epoch_date")
private Long createdEpochDate; private Long createdEpochDate;
@Column(name = "modified_epoch_date") @Column(name = "modified_epoch_date")
private Long modifiedEpochDate; private Long modifiedEpochDate;
@Column(name = "is_deleted")
private Boolean isDeleted = Boolean.FALSE;
@Column(name = "is_deleted")
private Boolean isDeleted = Boolean.FALSE;
} }
@@ -77,6 +77,9 @@ public class ComplaintResponseEntity extends Auditable {
@Column(name = "user_id") @Column(name = "user_id")
private String userId; private String userId;
@Column(name = "mid")
private String mid;
@OneToMany(fetch = FetchType.LAZY) @OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "ticket_id", referencedColumnName = "ticket_id", insertable = false, updatable = false) @JoinColumn(name = "ticket_id", referencedColumnName = "ticket_id", insertable = false, updatable = false)
private Set<ComplainStatus> complaintStatusList = new HashSet<>(); private Set<ComplainStatus> complaintStatusList = new HashSet<>();
@@ -197,7 +197,7 @@ public class ComplainServiceImpl implements ComplainService {
ComplaintResponse responseWrapper = objectMapper.convertValue(dataMap, ComplaintResponse.class); ComplaintResponse responseWrapper = objectMapper.convertValue(dataMap, ComplaintResponse.class);
String saveComplaintResponseEntity = mapperHelper.saveComplaintResponseEntity(responseWrapper, requestId, String saveComplaintResponseEntity = mapperHelper.saveComplaintResponseEntity(responseWrapper, requestId,
txnId, userId, requestTxnId); txnId, userId, requestTxnId, mid);
LOGGER.info("Save Complaint Response Count" + saveComplaintResponseEntity); LOGGER.info("Save Complaint Response Count" + saveComplaintResponseEntity);
ResponseModel responseModel = new ResponseModel(responseWrapper.getMessage(), responseWrapper.getStatus(), ResponseModel responseModel = new ResponseModel(responseWrapper.getMessage(), responseWrapper.getStatus(),
Integer.parseInt(responseWrapper.getStatusCode()), responseWrapper); Integer.parseInt(responseWrapper.getStatusCode()), responseWrapper);
@@ -7,6 +7,7 @@ import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -529,6 +530,7 @@ public class BillerMapperHelper {
entity.setNpciTicketStatus(dto.getNpciTicketStatus()); entity.setNpciTicketStatus(dto.getNpciTicketStatus());
entity.setCreatedTime(dto.getCreatedTime()); entity.setCreatedTime(dto.getCreatedTime());
entity.setUserId(userId); entity.setUserId(userId);
entity.setCreateDateTime(new Date());
try { try {
ComplainStatus saved = complaintStatusRepository.save(entity); ComplainStatus saved = complaintStatusRepository.save(entity);
@@ -559,7 +561,7 @@ public class BillerMapperHelper {
entity.setReqId(reqId); entity.setReqId(reqId);
entity.setTxnId(txnId); entity.setTxnId(txnId);
entity.setUserId(userId); entity.setUserId(userId);
entity.setCreateDateTime(new Date());
complaintHistoryRepository.save(entity); complaintHistoryRepository.save(entity);
savedCount++; savedCount++;
} }
@@ -674,6 +676,7 @@ public class BillerMapperHelper {
entity.setPage(String.valueOf(responseWrapper.getPage())); entity.setPage(String.valueOf(responseWrapper.getPage()));
entity.setPageSize(String.valueOf(responseWrapper.getPageSize())); entity.setPageSize(String.valueOf(responseWrapper.getPageSize()));
entity.setUserId(userId); entity.setUserId(userId);
entity.setCreateDateTime(new Date());
} }
@@ -853,6 +856,7 @@ public class BillerMapperHelper {
entity.setTotalPages(String.valueOf(responseWrapper.getTotalPages())); entity.setTotalPages(String.valueOf(responseWrapper.getTotalPages()));
entity.setTotalElements(String.valueOf(responseWrapper.getTotalElements())); entity.setTotalElements(String.valueOf(responseWrapper.getTotalElements()));
entity.setUserId(userId); entity.setUserId(userId);
entity.setCreateDateTime(new Date());
} }
@@ -966,6 +970,7 @@ public class BillerMapperHelper {
if (bmUpdatedOn != null) { if (bmUpdatedOn != null) {
billMaster.setUpdatedDateTime(bmUpdatedOn); billMaster.setUpdatedDateTime(bmUpdatedOn);
} }
billMaster.setCreatedEpochDate(responseWrapper.getCreatedEpochDate()); billMaster.setCreatedEpochDate(responseWrapper.getCreatedEpochDate());
billMaster.setModifiedEpochDate(responseWrapper.getModifiedEpochDate()); billMaster.setModifiedEpochDate(responseWrapper.getModifiedEpochDate());
@@ -975,16 +980,15 @@ public class BillerMapperHelper {
// Helper to parse incoming ISO date/time strings (with optional offset) into // Helper to parse incoming ISO date/time strings (with optional offset) into
// LocalDateTime // LocalDateTime
private Date parseToDate(String dateStr) { private Date parseToDate(String dateStr) {
try { try {
// example format: 2025-12-17T14:30:45 // example format: 2025-12-17T14:30:45
LocalDateTime ldt = LocalDateTime.parse(dateStr); LocalDateTime ldt = LocalDateTime.parse(dateStr);
return Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant()); return Date.from(ldt.atZone(ZoneId.systemDefault()).toInstant());
} catch (Exception e) { } catch (Exception e) {
return null; return null;
} }
} }
// Convert TransactionMaster to master DTO // Convert TransactionMaster to master DTO
public TransactionHistoryMasterDTO toDTO(TransactionMaster transactionMaster) { public TransactionHistoryMasterDTO toDTO(TransactionMaster transactionMaster) {
if (transactionMaster == null) if (transactionMaster == null)
@@ -1074,76 +1078,55 @@ public class BillerMapperHelper {
// Map PaymentStartUserRequest + API response into PaymentStartRecord and // Map PaymentStartUserRequest + API response into PaymentStartRecord and
// persist // persist
public PaymentStartRecord savePaymentStartRecord( public PaymentStartRecord savePaymentStartRecord(PaymentStartUserRequest request,
PaymentStartUserRequest request, PaymentStartApiResponse apiResponse, String txnId, String orderNo, String requestJson, String rawResponse,
PaymentStartApiResponse apiResponse, String responseType) {
String txnId,
String orderNo,
String requestJson,
String rawResponse,
String responseType) {
PaymentStartRecord record; PaymentStartRecord record;
boolean createNewRecord = boolean createNewRecord = apiResponse == null && rawResponse == null && responseType == null;
apiResponse == null &&
rawResponse == null &&
responseType == null;
if (createNewRecord) { if (createNewRecord) {
// 🔒 Duplicate check // 🔒 Duplicate check
if (paymentStartRecordRepository.findByOrderNo(orderNo).isPresent()) { if (paymentStartRecordRepository.findByOrderNo(orderNo).isPresent()) {
throw new CustomException( throw new CustomException("Duplicate OrderNo found", "DUPLICATE_ORDERNO", 400,
"Duplicate OrderNo found", "OrderNo already exists");
"DUPLICATE_ORDERNO", }
400, record = new PaymentStartRecord();
"OrderNo already exists" } else {
); record = paymentStartRecordRepository.findByOrderNo(orderNo)
} .orElseThrow(() -> new CustomException("OrderNo not found", "ORDERNO_NOT_FOUND", 404,
record = new PaymentStartRecord(); "No record exists for given orderNo"));
} else { }
record = paymentStartRecordRepository.findByOrderNo(orderNo)
.orElseThrow(() -> new CustomException(
"OrderNo not found",
"ORDERNO_NOT_FOUND",
404,
"No record exists for given orderNo"
));
}
if (orderNo != null) { if (orderNo != null) {
record.setOrderNo(orderNo); record.setOrderNo(orderNo);
record.setRequestId(request.getReqId()); record.setRequestId(request.getReqId());
record.setClientMid(request.getMid()); record.setClientMid(request.getMid());
record.setClientUserId(request.getClientUserId()); record.setClientUserId(request.getClientUserId());
record.setInternalTxnId(txnId); record.setInternalTxnId(txnId);
} }
if (apiResponse != null && apiResponse.getResponseData() != null) { if (apiResponse != null && apiResponse.getResponseData() != null) {
record.setAmount(Optional.ofNullable( record.setAmount(Optional.ofNullable(apiResponse.getResponseData().getAmount()).orElse("0.00"));
apiResponse.getResponseData().getAmount()).orElse("0.00"));
record.setTxnId(Optional.ofNullable( record.setTxnId(Optional.ofNullable(apiResponse.getResponseData().getTxnId()).orElse("DUMMY_TXN"));
apiResponse.getResponseData().getTxnId()).orElse("DUMMY_TXN"));
record.setQrString(Optional.ofNullable( record.setQrString(Optional.ofNullable(apiResponse.getResponseData().getQrString()).orElse("NO_QR"));
apiResponse.getResponseData().getQrString()).orElse("NO_QR"));
Date createdOn = parseToDate(apiResponse.getResponseData().getCreatedOn()); Date createdOn = parseToDate(apiResponse.getResponseData().getCreatedOn());
record.setTxnStatus("PENDING"); record.setTxnStatus("PENDING");
} else { } else {
record.setAmount("0.00"); record.setAmount("0.00");
record.setTxnStatus("PENDING"); record.setTxnStatus("PENDING");
} }
record.setResponseType(responseType);
record.setResponseType(responseType); return paymentStartRecordRepository.save(record);
return paymentStartRecordRepository.save(record);
} }
// Map ComplaintRequestDTO to forward request for complaint API // Map ComplaintRequestDTO to forward request for complaint API
public FetchComplaintForwardRequest fetchComplaintForwardRequestMap(ComplaintRequestDTO complainRequestDTO) { public FetchComplaintForwardRequest fetchComplaintForwardRequestMap(ComplaintRequestDTO complainRequestDTO) {
FetchComplaintForwardRequest forward = new FetchComplaintForwardRequest(); FetchComplaintForwardRequest forward = new FetchComplaintForwardRequest();
@@ -1181,7 +1164,7 @@ public class BillerMapperHelper {
// Persist complaint response entity // Persist complaint response entity
public String saveComplaintResponseEntity(ComplaintResponse responseWrapper, String requestId, String txnId, public String saveComplaintResponseEntity(ComplaintResponse responseWrapper, String requestId, String txnId,
String userId, String requestTxnId) { String userId, String requestTxnId, String mid) {
if (responseWrapper == null || responseWrapper.getTicketDetails() == null) { if (responseWrapper == null || responseWrapper.getTicketDetails() == null) {
return "No data"; return "No data";
} }
@@ -1194,6 +1177,8 @@ public class BillerMapperHelper {
complaintResponseEntity.setTicketDesp(responseWrapper.getTicketDetails().getTicketDesp()); complaintResponseEntity.setTicketDesp(responseWrapper.getTicketDetails().getTicketDesp());
complaintResponseEntity.setTicketDesr(responseWrapper.getTicketDetails().getTicketDesr()); complaintResponseEntity.setTicketDesr(responseWrapper.getTicketDetails().getTicketDesr());
complaintResponseEntity.setRequestTxnId(requestTxnId); complaintResponseEntity.setRequestTxnId(requestTxnId);
complaintResponseEntity.setMid(mid);
complaintResponseEntity.setCreateDateTime(new Date());
complaintResponseEntity.setMessage(responseWrapper.getMessage()); complaintResponseEntity.setMessage(responseWrapper.getMessage());
complaintResponseEntity.setRemarks(responseWrapper.getRemarks()); complaintResponseEntity.setRemarks(responseWrapper.getRemarks());
@@ -1303,7 +1288,7 @@ public class BillerMapperHelper {
} }
} }
public ComplaintResponseDto toDto(ComplaintResponseEntity e) { public ComplaintResponseDto toDto(ComplaintResponseEntity e) {
ComplaintResponseDto dto = new ComplaintResponseDto(); ComplaintResponseDto dto = new ComplaintResponseDto();
dto.setTicketId(e.getTicketId()); dto.setTicketId(e.getTicketId());