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