diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/controller/TransactionController.java b/aconnect/src/main/java/com/mfsys/aconnect/client/controller/TransactionController.java index 9fc5d38..3b7ecf3 100644 --- a/aconnect/src/main/java/com/mfsys/aconnect/client/controller/TransactionController.java +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/controller/TransactionController.java @@ -13,7 +13,7 @@ import org.springframework.web.bind.annotation.*; import java.time.LocalDate; -@RestController +@RestController() public class TransactionController { @Autowired diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/controller/TransactionLogController.java b/aconnect/src/main/java/com/mfsys/aconnect/client/controller/TransactionLogController.java new file mode 100644 index 0000000..73add57 --- /dev/null +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/controller/TransactionLogController.java @@ -0,0 +1,26 @@ +package com.mfsys.aconnect.client.controller; + +import com.mfsys.aconnect.client.model.TransactionLog; +import com.mfsys.aconnect.client.service.TransactionLogService; +import com.mfsys.common.configuration.constant.AconnectURI; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController() +@RequestMapping(AconnectURI.TRANSACTION) +public class TransactionLogController { + + private final TransactionLogService transactionLogService; + + public TransactionLogController(TransactionLogService transactionLogService) { + this.transactionLogService = transactionLogService; + } + + @GetMapping(AconnectURI.LOGS) + public List getAllTransactionLogs() { + return transactionLogService.getAllTransactionLogs(); + } +} diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/model/TransactionLog.java b/aconnect/src/main/java/com/mfsys/aconnect/client/model/TransactionLog.java index ac64b1e..50b20d0 100644 --- a/aconnect/src/main/java/com/mfsys/aconnect/client/model/TransactionLog.java +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/model/TransactionLog.java @@ -1,11 +1,7 @@ package com.mfsys.aconnect.client.model; -import com.mfsys.common.configuration.constant.FieldNameConstant; import com.mfsys.common.configuration.constant.FieldNameLength; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; -import jakarta.persistence.Table; +import jakarta.persistence.*; import lombok.Data; import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.UpdateTimestamp; @@ -18,8 +14,9 @@ import java.time.LocalDateTime; @Data public class TransactionLog { @Id - @Column(name = "LOG_ID", nullable = false, updatable = false, columnDefinition = FieldNameLength.LOG_ID) - private String logId; + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "LOG_ID", nullable = false, updatable = false) + private Long logId; @Column(name = "POR_ORGACODE", nullable = false, updatable = false, columnDefinition = FieldNameLength.POR_ORGACODE) private String porOrgacode; @@ -45,14 +42,11 @@ public class TransactionLog { @Column(name = "SGT_GNTRCREATEAT",nullable=false, updatable=false, columnDefinition=FieldNameLength.PLC_LOCACODE) private String sgtGntrcreateat; - @Column(name = "CHANNEL_CODE", nullable=true, updatable=false, columnDefinition=FieldNameLength.CHANNEL_CODE) + @Column(name = "CHANNEL_CODE", columnDefinition=FieldNameLength.CHANNEL_CODE) private String channelCode; - @Column(name = "NODE_ID", nullable=false, updatable=false, columnDefinition=FieldNameLength.NODE_ID) - private String nodeId; - - @Column(name = "SGT_GNTRNUMBER", nullable=false, updatable=false, columnDefinition=FieldNameLength.SGT_GNTRNUMBER) - private Long sgtGntrnumber; + @Column(name = "TRANSACTION_ID", columnDefinition=FieldNameLength.ACCOUNT_TITLE) + private String transactionID; @CreationTimestamp @Column(name = "CREATED_AT", updatable = false) diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/repository/TransactionLogRepository.java b/aconnect/src/main/java/com/mfsys/aconnect/client/repository/TransactionLogRepository.java new file mode 100644 index 0000000..28aae38 --- /dev/null +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/repository/TransactionLogRepository.java @@ -0,0 +1,7 @@ +package com.mfsys.aconnect.client.repository; + +import com.mfsys.aconnect.client.model.TransactionLog; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface TransactionLogRepository extends JpaRepository { +} diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/service/TransactionLogService.java b/aconnect/src/main/java/com/mfsys/aconnect/client/service/TransactionLogService.java new file mode 100644 index 0000000..f9ffdc8 --- /dev/null +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/service/TransactionLogService.java @@ -0,0 +1,110 @@ +package com.mfsys.aconnect.client.service; + +import com.mfsys.aconnect.client.repository.TransactionLogRepository; +import com.mfsys.aconnect.client.dto.AccountGLTransactionRequest; +import com.mfsys.aconnect.client.dto.AccountToAccountDTO; +import com.mfsys.aconnect.client.dto.GLtoGLRequest; +import com.mfsys.aconnect.client.dto.GlToAccountDTO; +import com.mfsys.aconnect.client.model.TransactionLog; +import jakarta.transaction.Transactional; +import org.springframework.stereotype.Service; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; +import java.util.Map; + +@Service +public class TransactionLogService { + private final TransactionLogRepository transactionLogRepository; + + public TransactionLogService(TransactionLogRepository transactionLogRepository) { + this.transactionLogRepository = transactionLogRepository; + } + + public List getAllTransactionLogs() { + return transactionLogRepository.findAll(); + } + + public TransactionLog createTransactionLog(AccountGLTransactionRequest accountGLTransactionRequest) { + TransactionLog transactionLog = new TransactionLog(); + transactionLog.setPorOrgacode(accountGLTransactionRequest.getPorOrgacode()); + transactionLog.setChannelCode(accountGLTransactionRequest.getSgtGntrcreateusr()); + transactionLog.setSgtGntrcreateat(accountGLTransactionRequest.getSgtGntrcreateusr()); + transactionLog.setCrMbmbkmsnumber(""); + transactionLog.setDrMbmbkmsnumber(accountGLTransactionRequest.getDebitAcc().getMbmBkmsnumber()); + transactionLog.setCrPcaglacode(accountGLTransactionRequest.getCreditGl().getPcaGlaccode()); + transactionLog.setDrPcaGlacode(""); + transactionLog.setPpmPymdcode(accountGLTransactionRequest.getPpmPymdcode()); + transactionLog.setSgtGntrdate(LocalDate.parse(accountGLTransactionRequest.getSgtGntrvaluedate())); + transactionLog.setCreatedAt(LocalDateTime.now()); + transactionLog.setUpdatedAt(LocalDateTime.now()); + transactionLog.setSgtGntrdate(LocalDate.parse(accountGLTransactionRequest.getSgtGntrvaluedate())); + return transactionLogRepository.save(transactionLog); + } + + @Transactional + public void updateResponseFields(Long logId, Map response) { + transactionLogRepository.findById(logId).ifPresent(log -> { + if (response == null) return; + Object argsObj = response.get("arguments"); + if (!(argsObj instanceof List args) || args.isEmpty()) return; + + String transactionId = args.get(0).toString(); + + log.setTransactionID(transactionId); + }); + } + + + public TransactionLog createGLtoGLTransactionLog(GLtoGLRequest gLtoGLRequest) { + TransactionLog transactionLog = new TransactionLog(); + transactionLog.setPorOrgacode(gLtoGLRequest.getPorOrgacode()); + transactionLog.setChannelCode(gLtoGLRequest.getSgtGntrcreateusr()); + transactionLog.setSgtGntrcreateat(gLtoGLRequest.getSgtGntrcreateusr()); + transactionLog.setCrMbmbkmsnumber(""); + transactionLog.setDrMbmbkmsnumber(""); + transactionLog.setCrPcaglacode(gLtoGLRequest.getCreditGl().getPcaGlaccode()); + transactionLog.setDrPcaGlacode(gLtoGLRequest.getDebitGl().getPcaGlaccode()); + transactionLog.setPpmPymdcode(gLtoGLRequest.getPpmPymdcode()); + transactionLog.setSgtGntrdate(LocalDate.parse(gLtoGLRequest.getSgtGntrvaluedate())); + transactionLog.setCreatedAt(LocalDateTime.now()); + transactionLog.setUpdatedAt(LocalDateTime.now()); + transactionLog.setSgtGntrdate(LocalDate.parse(gLtoGLRequest.getSgtGntrvaluedate())); + return transactionLogRepository.save(transactionLog); + } + + public TransactionLog createAccToAccTransactionLog(AccountToAccountDTO accountToAccountDTO) { + TransactionLog transactionLog = new TransactionLog(); + transactionLog.setPorOrgacode(accountToAccountDTO.getPorOrgacode()); + transactionLog.setChannelCode(accountToAccountDTO.getSgtGntrcreateusr()); + transactionLog.setSgtGntrcreateat(accountToAccountDTO.getSgtGntrcreateusr()); + transactionLog.setCrMbmbkmsnumber(accountToAccountDTO.getCreditAcc().getMbmBkmsnumber()); + transactionLog.setDrMbmbkmsnumber(accountToAccountDTO.getDebitAcc().getMbmBkmsnumber()); + transactionLog.setCrPcaglacode(""); + transactionLog.setDrPcaGlacode(""); + transactionLog.setPpmPymdcode(accountToAccountDTO.getPpmPymdcode()); + transactionLog.setSgtGntrdate(accountToAccountDTO.getSgtGntrvaluedate()); + transactionLog.setCreatedAt(LocalDateTime.now()); + transactionLog.setUpdatedAt(LocalDateTime.now()); + transactionLog.setSgtGntrdate(accountToAccountDTO.getSgtGntrvaluedate()); + return transactionLogRepository.save(transactionLog); + } + + public TransactionLog createGLToAccTransactionLog(GlToAccountDTO glToAccountDTO) { + TransactionLog transactionLog = new TransactionLog(); + transactionLog.setPorOrgacode(glToAccountDTO.getPorOrgacode()); + transactionLog.setChannelCode(glToAccountDTO.getSgtGntrcreateusr()); + transactionLog.setSgtGntrcreateat(glToAccountDTO.getSgtGntrcreateusr()); + transactionLog.setCrMbmbkmsnumber(glToAccountDTO.getCreditAcc().getMbmBkmsnumber()); + transactionLog.setDrMbmbkmsnumber(""); + transactionLog.setCrPcaglacode(""); + transactionLog.setDrPcaGlacode(""); + transactionLog.setPpmPymdcode(glToAccountDTO.getPpmPymdcode()); + transactionLog.setSgtGntrdate(glToAccountDTO.getSgtGntrvaluedate()); + transactionLog.setCreatedAt(LocalDateTime.now()); + transactionLog.setUpdatedAt(LocalDateTime.now()); + transactionLog.setSgtGntrdate(glToAccountDTO.getSgtGntrvaluedate()); + return transactionLogRepository.save(transactionLog); + } +} diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/service/TransactionService.java b/aconnect/src/main/java/com/mfsys/aconnect/client/service/TransactionService.java index 88568ee..86ae3a2 100644 --- a/aconnect/src/main/java/com/mfsys/aconnect/client/service/TransactionService.java +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/service/TransactionService.java @@ -1,6 +1,7 @@ package com.mfsys.aconnect.client.service; import com.mfsys.aconnect.client.dto.*; +import com.mfsys.aconnect.client.model.TransactionLog; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; @@ -26,8 +27,10 @@ public class TransactionService { private String generalledgerURI; private final RestTemplate restTemplate; - public TransactionService(RestTemplate restTemplate) { + private final TransactionLogService transactionLogService; + public TransactionService(RestTemplate restTemplate, TransactionLogService transactionLogService) { this.restTemplate = restTemplate; + this.transactionLogService = transactionLogService; } public ResponseEntity getActiveAccountDetails(String porOrgacode, String mbmBkmsnumber, LocalDate sgtGntrvaluedate, String tokenHeader, String userCode) { @@ -71,6 +74,7 @@ public class TransactionService { headers.setAccept(java.util.List.of(MediaType.APPLICATION_JSON)); HttpEntity entity = new HttpEntity<>(accountGLTransactionRequest, headers); + TransactionLog log = transactionLogService.createTransactionLog(accountGLTransactionRequest); RestTemplate restTemplate = new RestTemplate(); ResponseEntity response = restTemplate.exchange( url, @@ -78,6 +82,9 @@ public class TransactionService { entity, Map.class ); + if (response.getBody() != null) { + transactionLogService.updateResponseFields(log.getLogId(), response.getBody()); + } return ResponseEntity.status(response.getStatusCode()).body(response.getBody()); } @@ -102,12 +109,16 @@ public class TransactionService { HttpEntity entity = new HttpEntity<>(gLtoGLRequest, headers); RestTemplate restTemplate = new RestTemplate(); + TransactionLog log = transactionLogService.createGLtoGLTransactionLog(gLtoGLRequest); ResponseEntity response = restTemplate.exchange( url, HttpMethod.POST, entity, Map.class ); + if (response.getBody() != null) { + transactionLogService.updateResponseFields(log.getLogId(), response.getBody()); + } return ResponseEntity.status(response.getStatusCode()).body(response.getBody()); } @@ -124,12 +135,16 @@ public class TransactionService { HttpEntity entity = new HttpEntity<>(accountToAccountDTO, headers); RestTemplate restTemplate = new RestTemplate(); + TransactionLog log = transactionLogService.createAccToAccTransactionLog(accountToAccountDTO); ResponseEntity response = restTemplate.exchange( url, HttpMethod.POST, entity, Map.class ); + if (response.getBody() != null) { + transactionLogService.updateResponseFields(log.getLogId(), response.getBody()); + } return ResponseEntity.status(response.getStatusCode()).body(response.getBody()); @@ -148,12 +163,17 @@ public class TransactionService { HttpEntity entity = new HttpEntity<>(glToAccountDTO, headers); RestTemplate restTemplate = new RestTemplate(); + TransactionLog log = transactionLogService.createGLToAccTransactionLog(glToAccountDTO); + ResponseEntity response = restTemplate.exchange( url, HttpMethod.POST, entity, Map.class ); + if (response.getBody() != null) { + transactionLogService.updateResponseFields(log.getLogId(), response.getBody()); + } return ResponseEntity.status(response.getStatusCode()).body(response.getBody()); } diff --git a/common/src/main/java/com/mfsys/common/configuration/constant/AconnectURI.java b/common/src/main/java/com/mfsys/common/configuration/constant/AconnectURI.java index d0d600a..40decb7 100644 --- a/common/src/main/java/com/mfsys/common/configuration/constant/AconnectURI.java +++ b/common/src/main/java/com/mfsys/common/configuration/constant/AconnectURI.java @@ -9,6 +9,8 @@ public interface AconnectURI { String GENERALLEDGER = "/generalledger"; String SIGNIN = "/signin"; String TRANSACTION_URI = "/transactions"; + String TRANSACTION = "/transaction"; + String LOGS = "/logs"; String CANCEL_URI = "/cancel"; String REJECT_URI = "/rejection"; String INDIVIDUAL = "/individual";