diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/controller/InProcessApplicationsController.java b/aconnect/src/main/java/com/mfsys/aconnect/client/controller/InProcessApplicationsController.java index e3c3b6d..8e32ba4 100644 --- a/aconnect/src/main/java/com/mfsys/aconnect/client/controller/InProcessApplicationsController.java +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/controller/InProcessApplicationsController.java @@ -22,11 +22,10 @@ public class InProcessApplicationsController { return service.getInProcessApplications(request, token, susUserCode); } - @GetMapping(AconnectURI.CHECK_INDIVIDUAL_APPLICATIONS_URI) + @PostMapping(AconnectURI.CHECK_INDIVIDUAL_APPLICATIONS_URI) public ResponseEntitygetIndividualApplication( - @RequestParam("POR_ORGACODE") String porOrgacode,@RequestParam("formId") String formId, - @RequestParam(value = "includeFields", required = false) String includeFields, + @RequestBody InProcessApplicationsRequestDTO request, @RequestParam("workFlowRefNum") Long workFlowRefNum, @RequestHeader("Authorization") String token, @RequestHeader("SUS_USERCODE") String susUserCode){ - return service.getPendingIndividualApplication(porOrgacode, formId, includeFields, token, susUserCode); + return service.getPendingIndividualApplication(request, workFlowRefNum, token, susUserCode); } } diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/controller/InProcessDepositApplicationsController.java b/aconnect/src/main/java/com/mfsys/aconnect/client/controller/InProcessDepositApplicationsController.java new file mode 100644 index 0000000..a1f7311 --- /dev/null +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/controller/InProcessDepositApplicationsController.java @@ -0,0 +1,31 @@ +package com.mfsys.aconnect.client.controller; + +import com.mfsys.aconnect.client.dto.InProcessApplicationsRequestDTO; +import com.mfsys.aconnect.client.service.InProcessDepositApplicationsService; +import com.mfsys.common.configuration.constant.AconnectURI; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +public class InProcessDepositApplicationsController { + + private final InProcessDepositApplicationsService service; + + public InProcessDepositApplicationsController( + InProcessDepositApplicationsService service) { + this.service = service; + } + + @PostMapping(AconnectURI.CHECK_INPROCESS_DEPOSIT_APPLICATIONS_URI) + public ResponseEntity getInProcessDepositApplications(@RequestBody InProcessApplicationsRequestDTO request, + @RequestHeader("Authorization") String token, @RequestHeader("SUS_USERCODE") String susUserCode) { + return service.getInProcessDepositApplications(request, token, susUserCode); + } + + @PostMapping(AconnectURI.CHECK_INDIVIDUAL_DEPOSIT_APPLICATIONS_URI) + public ResponseEntity getInProcessIndividualDepositApplication( + @RequestBody InProcessApplicationsRequestDTO request, @RequestParam("workFlowRefNum") Long workFlowRefNum, + @RequestHeader("Authorization") String token, @RequestHeader("SUS_USERCODE") String susUserCode) { + return service.getInProcessIndividualDepositApplication(request, workFlowRefNum, token, susUserCode); + } +} diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/service/InProcessApplicationsService.java b/aconnect/src/main/java/com/mfsys/aconnect/client/service/InProcessApplicationsService.java index e51c148..c246a93 100644 --- a/aconnect/src/main/java/com/mfsys/aconnect/client/service/InProcessApplicationsService.java +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/service/InProcessApplicationsService.java @@ -8,6 +8,7 @@ import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -129,30 +130,39 @@ public class InProcessApplicationsService { } public ResponseEntity getPendingIndividualApplication( - String porOrgacode, String formId, String includeFields, String token, String susUserCode) { + InProcessApplicationsRequestDTO req, Long workFlowRefNum, String token, String susUserCode) { - String url = crmURI + "/crm" + "/mongodb/metadata"; + String url = crmURI + "/crm" + "/mongodb/lazylist"; - UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(url) - .queryParam("POR_ORGACODE", porOrgacode).queryParam("formId", formId); + LazyListRequestDTO dto = buildLazyListPayload(req); - if (includeFields != null && !includeFields.isBlank()) { - builder.queryParam("includeFields", includeFields); - } + Map individualFilter = Map.of( + "params", List.of( + param("workFlowRefNum", workFlowRefNum, "numeric", "=") + ), + "operator", "$and" + ); + + Map existingFilter = (Map) dto.getFilter(); + + List nestedQuery = new ArrayList<>((List) existingFilter.get("nestedQuery")); + + nestedQuery.add(individualFilter); + + dto.setFilter(Map.of("nestedQuery", nestedQuery, "operator", "$and")); + + dto.setLimit(1); HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", token); - headers.set("POR_ORGACODE", porOrgacode); + headers.set("POR_ORGACODE", req.getPorOrgacode()); headers.set("SUS_USERCODE", susUserCode); headers.setContentType(MediaType.APPLICATION_JSON); - - HttpEntity entity = new HttpEntity<>(headers); - return restTemplate.exchange( - builder.toUriString(), - HttpMethod.GET, - entity, + url, + HttpMethod.POST, + new HttpEntity<>(dto, headers), String.class ); } diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/service/InProcessDepositApplicationsService.java b/aconnect/src/main/java/com/mfsys/aconnect/client/service/InProcessDepositApplicationsService.java new file mode 100644 index 0000000..fba6544 --- /dev/null +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/service/InProcessDepositApplicationsService.java @@ -0,0 +1,167 @@ +package com.mfsys.aconnect.client.service; + +import com.mfsys.aconnect.client.dto.*; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.*; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@Service +public class InProcessDepositApplicationsService { + + @Value("${app.deposit.uri}") + private String depositURI; + + private final RestTemplate restTemplate; + + public InProcessDepositApplicationsService(RestTemplate restTemplate) {this.restTemplate = restTemplate;} + + private Map param(String columnName, Object columnValue, String columnType, String conditionType) { + return Map.of("columnName", columnName, "columnValue", columnValue, + "columnType", columnType, "conditionType", conditionType + ); + } + + private Map buildWorkflowFilter(InProcessApplicationsRequestDTO req) { + List workflowQueries = new ArrayList<>(); + + if (req.isIncludeRegistrationPending()) { + workflowQueries.add(Map.of( + "params", List.of( + param("workFlowStage", "BN_MS_ID_REGISTRATION", "text", "="), + param("applicationStatus", "Pending", "text", "=") + ), + "operator", "$and" + )); + } + if (req.isIncludeAuthorizationApproved()) { + workflowQueries.add(Map.of( + "params", List.of( + param("workFlowStage", "BN_MS_ID_AUTHORIZATION", "text", "="), + param("applicationStatus", "Approved", "text", "="), + param("postProcessCompleted", true, "boolean", "!=") + ), + "operator", "$and" + )); + } + workflowQueries.add(Map.of( + "params", List.of( + param("workFlowStage", "BN_MS_ID_REGISTRATION", "text", "="), + param("applicationStatus", "[\"Rejected\",\"Hold\"]", "text", "in") + ), + "operator", "$and" + )); + return Map.of( + "nestedQuery", workflowQueries, + "operator", "$or" + ); + } + + private LazyListRequestDTO buildLazyListPayload(InProcessApplicationsRequestDTO req) { + + List rootQueries = new ArrayList<>(); + + rootQueries.add(Map.of( + "params", List.of( + param("POR_ORGACODE", req.getPorOrgacode(), "text", "="), + param("POR_ORGACODE_ENTRY", req.getPorOrgacode(), "text", "=") + ), + "operator", "$or" + )); + + rootQueries.add(Map.of( + "params", List.of( + param("PLC_LOCACODE", "[\"" + req.getPlclocacode() + "\"]", "text", "in"), + param("PLC_LOCACODE_ENTRY", "[\"" + req.getPlclocacode() + "\"]", "text", "in") + ), + "operator", "$or" + )); + + rootQueries.add(buildWorkflowFilter(req)); + + LazyListRequestDTO dto = new LazyListRequestDTO(); + dto.setCollection("BN_WF_ID_DEPOSITACCOUNT"); + dto.setFilter(Map.of( + "nestedQuery", rootQueries, + "operator", "$and" + )); + if (req.getLimit() != null) { + dto.setLimit(req.getLimit()); + } + dto.setSortBy("{\"workFlowRefNum\":-1}"); + dto.setIncludeFields(List.of( + "MBM_BKMSNUMBER", "DMP_PRODCODE", "CMP_CUSTCODE", "MBM_BKMSTITLE", "workFlowRefNum", "applicationStatus", + "workFlowStage", "workFlowLog", "postProcessCompleted", "failureCause", "postProcessInProgress" + )); + + return dto; + } + + public ResponseEntity getInProcessDepositApplications( + InProcessApplicationsRequestDTO request, String token, String susUserCode) { + + String url = depositURI + "/deposit" + "/mongodb/lazylist"; + + LazyListRequestDTO payload = buildLazyListPayload(request); + + HttpHeaders headers = new HttpHeaders(); + headers.set("Authorization", token); + headers.set("POR_ORGACODE", request.getPorOrgacode()); + headers.set("SUS_USERCODE", susUserCode); + headers.setContentType(MediaType.APPLICATION_JSON); + + HttpEntity entity = new HttpEntity<>(payload, headers); + + return restTemplate.exchange( + url, + HttpMethod.POST, + entity, + String.class + ); + } + + public ResponseEntity getInProcessIndividualDepositApplication( + InProcessApplicationsRequestDTO req, Long workFlowRefNum, String token, String susUserCode) { + + String url = depositURI + "/deposit" + "/mongodb/lazylist"; + + LazyListRequestDTO dto = buildLazyListPayload(req); + + Map individualFilter = Map.of( + "params", List.of( + param("workFlowRefNum", workFlowRefNum, "numeric", "=") + ), + "operator", "$and" + ); + + Map existingFilter = (Map) dto.getFilter(); + + List nestedQuery = new ArrayList<>((List) existingFilter.get("nestedQuery")); + + nestedQuery.add(individualFilter); + + dto.setFilter(Map.of("nestedQuery", nestedQuery, "operator", "$and")); + + dto.setLimit(1); + + HttpHeaders headers = new HttpHeaders(); + headers.set("Authorization", token); + headers.set("POR_ORGACODE", req.getPorOrgacode()); + headers.set("SUS_USERCODE", susUserCode); + headers.setContentType(MediaType.APPLICATION_JSON); + + return restTemplate.exchange( + url, + HttpMethod.POST, + new HttpEntity<>(dto, headers), + String.class + ); + } + +} 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 f2f73c2..2a447af 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 @@ -32,6 +32,8 @@ public interface AconnectURI { String APPROVE_INDIVIDUAL_CRM_URI = CRM + INDIVIDUAL + "/approve"; String CHECK_PENDING_APPLICATIONS_URI = CRM + "/inprocess"; String CHECK_INDIVIDUAL_APPLICATIONS_URI = CRM + INDIVIDUAL + "/inprocess"; + String CHECK_INPROCESS_DEPOSIT_APPLICATIONS_URI = DEPOSIT + "/inprocess"; + String CHECK_INDIVIDUAL_DEPOSIT_APPLICATIONS_URI = DEPOSIT + INDIVIDUAL + "/inprocess"; String BUSINESS_CRM_CREATION_URI = CRM + BUSINESS + "/create"; String INDIVIDUAL_DEPOSIT_CREATION_URI = DEPOSIT + INDIVIDUAL + "/create"; String UPDATE_DEPOSIT_CREATION_URI = DEPOSIT + INDIVIDUAL + "/approval"; diff --git a/common/src/main/java/com/mfsys/common/configuration/constant/TokenBypassURI.java b/common/src/main/java/com/mfsys/common/configuration/constant/TokenBypassURI.java index 01b165b..1b0f819 100644 --- a/common/src/main/java/com/mfsys/common/configuration/constant/TokenBypassURI.java +++ b/common/src/main/java/com/mfsys/common/configuration/constant/TokenBypassURI.java @@ -14,6 +14,8 @@ public interface TokenBypassURI { "/aconnect/crm/individual/approve", "/aconnect/crm/inprocess", "/aconnect/crm/individual/inprocess", + "/aconnect/deposit/inprocess", + "/aconnect/deposit/individual/inprocess", "/aconnect/account/miscDetails", "/deposit/account/miscDetails", "/aconnect/account/getAccountDetails",