revesal
cancellation
pin issues
Nabeel-DG-BS
Raja Nabeel 1 year ago
parent cecc4d7fec
commit 57c4f7152b

@ -25,11 +25,15 @@ public interface UCOURI {
String ACCOUNT_STATEMENT = "/fetchDepositAccountStatement";
String BANKING_CASH_IN = "/deposit/transactions/uco/cash-in";
String BANKING_CASH_OUT = "/deposit/transactions/uco/cash-out";
String BANKING_REVERSE_TRANSACTION = "/deposit/transactions/uco/reverse-transaction";
String ACCOUNT_ACTIVITY = "/account/activity/organization/{porOrgacode}/customer/{cmpCustcode}/fromdate/{fdate}/todate/{tdate}";
// product related uri
String FETCH_UCO_DEPOSIT_PRODUCTS = "/deposit/fetchUcoDepositProducts";
String FETCH_UCO_ONBOARDING_DEPOSIT_PRODUCTS = "/auth/user/authenticate/onboardCutomer/fetchUcoDepositProducts";
String FETCH_UCO_GLS = "/deposit/fetchUcoGls";
String REVERSE_TRANSACTION = "/reverseTransaction";
String CORE_REVERSE_TRANSACTION = "/deposit/transactions/uco/reverse-transaction";
}

@ -65,5 +65,14 @@ public class TransactionController {
@RequestParam double sgtGntramtfc) {
return transactionService.getEvaluatedCurrency(porOrgacode, baseCurrency,targetCurrency,sgtGntramtfc);
}
@PostMapping(UCOURI.REVERSE_TRANSACTION)
public Object reverseTransaction(
@RequestParam String porOrgacode,
@RequestParam String nodeId,
@RequestParam String sgtGntrnumber
){
return transactionService.reverseTransacion(porOrgacode,nodeId,sgtGntrnumber);
}
}

@ -118,38 +118,20 @@ public class UserController {
@PostMapping(UCOURI.CREATE_TRAN_PIN)
public ResponseEntity<HttpStatus> createTransactionPin(@RequestBody CreateTransactionPinRequest request) {
try {
transactionPinService.createTransactionPin(request);
return ResponseEntity.ok(HttpStatus.OK);
} catch (Exception e) {
return ResponseEntity.ok(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
@PostMapping(UCOURI.VERIFY_TRAN_PIN)
public ResponseEntity<?> verifyPin(@RequestBody VerifyPinRequest request) {
try {
boolean isVerified = transactionPinService.verifyOTPAndSavePin(request);
if (isVerified) {
return ResponseEntity.ok("OTP PIN verified and tran pin changed successfully.");
} else {
return ResponseEntity.badRequest().body("PIN verification failed.");
}
} catch (Exception e) {
return ResponseEntity.status(500).body("Error during PIN verification: " + e.getMessage());
}
transactionPinService.verifyOTPAndSavePin(request);
return ResponseEntity.ok(HttpStatus.OK);
}
@PutMapping(UCOURI.CHANGE_TRAN_PIN)
public ResponseEntity<String> updateTransactionPin(@RequestBody ChangeTransactionPinRequest request) {
try {
transactionPinService.updateTransactionPin(request);
return ResponseEntity.ok("OTP sent");
} catch (IllegalArgumentException e) {
return ResponseEntity.badRequest().body("Error: " + e.getMessage());
} catch (Exception e) {
return ResponseEntity.internalServerError().body("An unexpected error occurred.");
}
}
@GetMapping(UCOURI.FETCH_EXCHANGE_RATE)

@ -0,0 +1,19 @@
package com.mfsys.uco.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class CoreReverseTransaction {
private String porOrgacode;
private String sgtGntrcreateat;
private String nodeId;
private String sgtGntrtranlink;
}

@ -0,0 +1,11 @@
package com.mfsys.uco.exception;
import com.mfsys.comm.exception.ApplicationException;
import com.mfsys.comm.exception.ERRCode;
public class SameOldNewPinException extends ApplicationException {
public SameOldNewPinException() {
super(null, ERRCode.SAME_TRAN_PIN, null);
}
}

@ -36,8 +36,16 @@ public class TransactionTrail {
protected String cmpCustcode;
@Column(name = "CR_MBM_BKMSTITLE", nullable = false, updatable = true, columnDefinition = FieldNameLength.ACCOUNT_TITLE)
protected String crMbmBkmstitle;
@Column(name = "SGT_SENTGNTRNUMBER", nullable = false, updatable = false, columnDefinition = FieldNameLength.CODE_500)
protected String sgtSentGntrnumber;
@Column(name = "SGT_SENTNODEID", nullable = false, updatable = false, columnDefinition = FieldNameLength.CODE_500)
protected String sgtSentNodeId;
@Column(name = "SGT_RECEIVEGNTRNUMBER", nullable = true, updatable = true, columnDefinition = FieldNameLength.CODE_500)
protected String sgtReceiveGntrnumber;
@Column(name = "SGT_RECEIVENODEID", nullable = true, updatable = true, columnDefinition = FieldNameLength.CODE_500)
protected String sgtReceiveNodeId;
@Column(name = "DR_SGT_GNTRDATE", nullable = false, updatable = false, columnDefinition = FieldNameLength.DATE)
protected LocalDate drSgtGntrdate;
@Column(name = "CR_SGT_GNTRDATE", nullable = true, updatable = false, columnDefinition = FieldNameLength.DATE)
@ -52,8 +60,8 @@ public class TransactionTrail {
protected boolean batAcnttranSend;
@Column(name = "BAT_ACNTTRANRECEIVED", nullable = true, columnDefinition = FieldNameLength.BOOLEAN_BIT)
protected boolean batAcnttranReceived;
@Column(name = "SGT_RECEIVEGNTRNUMBER", nullable = true, updatable = true, columnDefinition = FieldNameLength.CODE_500)
protected String sgtReceiveGntrnumber;
@Column(name = "BAT_ACNTTRANREVERSED", nullable = false, columnDefinition = FieldNameLength.BOOLEAN_BIT)
protected boolean batAcnttranReversed;
@Column(name = "CMP_REFCODE", nullable = true, updatable = true, columnDefinition = FieldNameLength.CODE_500)
protected String cmpRefcode;
@Column(name = "EXP_SGT_GNTRDATE", nullable = true, updatable = false, columnDefinition = FieldNameLength.DATE)

@ -21,4 +21,5 @@ public interface TransactionTrailRepository extends JpaRepository<TransactionTra
" OR (cr_mbm_bkmsnumber = :mbmBkmsnumber AND (bat_acnttransent = TRUE AND bat_acnttranreceived = TRUE)) ORDER BY id DESC", nativeQuery = true)
Optional<List<TransactionTrail>> fetchDepositAccountStatement(String mbmBkmsnumber);
TransactionTrail findByPorOrgacodeAndSgtSentNodeIdAndSgtSentGntrnumber(String porOrgacode, String sgtSentNodeId, String sgtSentGntrnumber);
}

@ -62,7 +62,7 @@ public class NotificationService {
public void verifyOtpViaOtpId(String id, String pinType, String obpPincode) {
Pin pin = pinRepository.findsss(id, pinType, obpPincode)
.orElseThrow(() -> new IllegalArgumentException("Notification not found for ID: " + id));
.orElseThrow(() -> new InvalidOTPException(id));
pin.setPinstatus("VERIFIED");
pinRepository.save(pin);
}

@ -5,6 +5,7 @@ import com.mfsys.uco.dto.CreateTransactionPinRequest;
import com.mfsys.uco.dto.OTPRequest;
import com.mfsys.uco.dto.VerifyPinRequest;
import com.mfsys.uco.exception.OldPinIncorrectException;
import com.mfsys.uco.exception.SameOldNewPinException;
import com.mfsys.uco.model.CustomerProfile;
import com.mfsys.uco.model.CustomerProfileId;
import com.mfsys.uco.repository.CustomerProfileRepository;
@ -50,7 +51,9 @@ public class TransactionPinService {
public void updateTransactionPin(ChangeTransactionPinRequest request) {
CustomerProfile profile = fetchCustomer(request.getPorOrgacode(), request.getCmpCustcode());
if(request.getNewTransPincode().equals(profile.getCmpTranpin())){
throw new SameOldNewPinException();
}
validateOldPin(profile, request.getOldTransPincode());
profile.setCmpUnverifiedTranpin(request.getNewTransPincode());
customerProfileRepository.save(profile);

@ -1,6 +1,5 @@
package com.mfsys.uco.service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mfsys.comm.util.MapValueExtractorUtil;
@ -18,7 +17,6 @@ import com.mfsys.uco.repository.GLAccountMasterTransactionTrailRepository;
import com.mfsys.uco.repository.TransactionTrailRepository;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.hibernate.Transaction;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
@ -26,10 +24,6 @@ import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import static com.itextpdf.styledxmlparser.jsoup.select.Collector.collect;
@Service
@Data
@ -88,12 +82,11 @@ public class TransactionService {
.pcaGlaccode("A01011003")
.build();
Map<String, Object> response = (Map<String, Object>) webClientDepositService.postTransaction(coreCashInTransaction, UCOURI.BANKING_CASH_IN, transactionRequest.getPorOrgacode());
Map<String, Object> transactionId = (Map<String, Object>) response.get("FuncReturnDetail");
String tranid = extractTranNumber(List.of(transactionId.get("arguments")));
transactionTrail.setSgtSentGntrnumber(tranid);
transactionTrail.setSgtSentGntrnumber(String.valueOf(response.get("tran_id")));
transactionTrail.setSgtSentNodeId(String.valueOf(response.get("node_id")));
transactionTrail.setBatAcnttranSend(true);
if(Objects.nonNull(transactionRequest.getCmpRefcode())) {
transactionTrail.setCmpRefcode(tranid + transactionRequest.getCmpRefcode());
transactionTrail.setCmpRefcode(transactionTrail.getSgtSentGntrnumber() + transactionRequest.getCmpRefcode());
}
transactionTrail.setDrMbmBkmsbalance(MapValueExtractorUtil.getValueAsBigDecimal(response, "mbmBkmsbalance"));
transactionTrailRepository.save(transactionTrail);
@ -155,8 +148,8 @@ public class TransactionService {
.build();
response = (Map<String, Object>) webClientDepositService.postTransaction(cashOutTransaction, UCOURI.BANKING_CASH_OUT, transactionTrail.get().getPorOrgacode());
Map<String, Object> transactionId = (Map<String, Object>) response.get("FuncReturnDetail");
transactionTrail.get().setSgtReceiveGntrnumber(extractTranNumber(List.of(transactionId.get("arguments"))));
transactionTrail.get().setSgtReceiveGntrnumber((String.valueOf(response.get("tran_id"))));
transactionTrail.get().setSgtSentNodeId(String.valueOf(response.get("node_id")));
transactionTrail.get().setBatAcnttranReceived(true);
transactionTrail.get().setCrMbmBkmsbalance(MapValueExtractorUtil.getValueAsBigDecimal(response, "mbmBkmsbalance"));
transactionTrailRepository.save(transactionTrail.get());
@ -280,7 +273,6 @@ public class TransactionService {
.build();
response = (Map<String, Object>) webClientDepositService.postTransaction(cashOutTransaction, UCOURI.BANKING_CASH_OUT, glAccontTranasctionRequestModel.getPorOrgacode());
Map<String, Object> transactionId = (Map<String, Object>) response.get("FuncReturnDetail");
TransactionTrail transactionTrail = TransactionTrail.builder()
.porOrgacode(glAccontTranasctionRequestModel.getPorOrgacode())
.drMbmBkmsnumber(glAccontTranasctionRequestModel.getDrPcaGlaccode())
@ -297,12 +289,14 @@ public class TransactionService {
.crPcrCurrdesc(glAccontTranasctionRequestModel.getCrPcrCurrdesc())
.crPcrCurrcode(glAccontTranasctionRequestModel.getCrPcrCurrcode())
.crPcrCurrshort(glAccontTranasctionRequestModel.getCrPcrCurrshort())
.sgtSentGntrnumber(extractTranNumber(List.of(transactionId.get("arguments"))))
.sgtSentGntrnumber((String.valueOf(response.get("tran_id"))))
.sgtSentNodeId(String.valueOf(response.get("node_id")))
.drSgtGntrdate(LocalDate.now())
.sgtGntramt(BigDecimal.valueOf(glAccontTranasctionRequestModel.getSgtGntramtfc()))
.batAcnttranSend(true)
.batAcnttranReceived(true)
.sgtReceiveGntrnumber(extractTranNumber(List.of(transactionId.get("arguments"))))
.sgtReceiveGntrnumber((String.valueOf(response.get("tran_id"))))
.sgtReceiveNodeId(String.valueOf(response.get("node_id")))
.build();
transactionTrailRepository.save(transactionTrail);
@ -320,10 +314,19 @@ public class TransactionService {
.sgtGntramt(BigDecimal.valueOf(glAccontTranasctionRequestModel.getSgtGntramtfc()))
.drSgtGntramt(BigDecimal.valueOf(glAccontTranasctionRequestModel.getSgtGntramtfc()))
.drSgtGntrdate(LocalDate.now())
.sgtSentGntrnumber(extractTranNumber(List.of(transactionId.get("arguments"))))
.sgtSentGntrnumber(String.valueOf(response.get("node_id"))+(response.get("tran_id")))
.build();
glAccountMasterTransactionTrailRepository.save(glAccountMasterTransaction);
return response;
}
public Object reverseTransacion(String porOrgacode, String nodeId, String sgtGntrnumber) {
Object reponse = webClientDepositService.postTransaction(CoreReverseTransaction.builder().sgtGntrtranlink(sgtGntrnumber).nodeId(nodeId).sgtGntrcreateat("2003").build(), UCOURI.CORE_REVERSE_TRANSACTION, porOrgacode);
TransactionTrail trail = transactionTrailRepository.findByPorOrgacodeAndSgtSentNodeIdAndSgtSentGntrnumber(porOrgacode,nodeId,sgtGntrnumber);
trail.setBatAcnttranReversed(true);
trail.setBatAcnttranReceived(true);
transactionTrailRepository.save(trail);
return reponse;
}
}

Loading…
Cancel
Save