|
|
|
@@ -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());
|
|
|
|
|