From e07a74565dbdc26301682310b65525f483e63a7b Mon Sep 17 00:00:00 2001 From: Naeem Ullah Date: Fri, 23 Jan 2026 12:14:39 +0500 Subject: [PATCH] Refactor CRM application controllers and services Replaced InProcessApplicationsController with PendingCRMApplicationsController to handle individual and business pending CRM applications. Updated InProcessApplicationsService to separate logic for individual and business workflows, adding new methods for pending CRM retrieval. Adjusted AconnectURI and TokenBypassURI constants to support new endpoints. --- .../InProcessApplicationsController.java | 32 ------ .../PendingCRMApplicationsController.java | 38 +++++++ .../service/InProcessApplicationsService.java | 105 +++++++++++++++++- .../configuration/constant/AconnectURI.java | 5 +- .../constant/TokenBypassURI.java | 2 + 5 files changed, 146 insertions(+), 36 deletions(-) delete mode 100644 aconnect/src/main/java/com/mfsys/aconnect/client/controller/InProcessApplicationsController.java create mode 100644 aconnect/src/main/java/com/mfsys/aconnect/client/controller/PendingCRMApplicationsController.java 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 deleted file mode 100644 index e3c3b6d..0000000 --- a/aconnect/src/main/java/com/mfsys/aconnect/client/controller/InProcessApplicationsController.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.mfsys.aconnect.client.controller; - -import com.mfsys.aconnect.client.dto.InProcessApplicationsRequestDTO; -import com.mfsys.aconnect.client.service.InProcessApplicationsService; -import com.mfsys.common.configuration.constant.AconnectURI; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -@RestController -public class InProcessApplicationsController { - - private final InProcessApplicationsService service; - - public InProcessApplicationsController( - InProcessApplicationsService service) { - this.service = service; - } - - @PostMapping(AconnectURI.CHECK_PENDING_APPLICATIONS_URI) - public ResponseEntity getInProcessApplications(@RequestBody InProcessApplicationsRequestDTO request, - @RequestHeader("Authorization") String token, @RequestHeader("SUS_USERCODE") String susUserCode) { - return service.getInProcessApplications(request, token, susUserCode); - } - - @GetMapping(AconnectURI.CHECK_INDIVIDUAL_APPLICATIONS_URI) - public ResponseEntitygetIndividualApplication( - @RequestParam("POR_ORGACODE") String porOrgacode,@RequestParam("formId") String formId, - @RequestParam(value = "includeFields", required = false) String includeFields, - @RequestHeader("Authorization") String token, @RequestHeader("SUS_USERCODE") String susUserCode){ - return service.getPendingIndividualApplication(porOrgacode, formId, includeFields, token, susUserCode); - } -} diff --git a/aconnect/src/main/java/com/mfsys/aconnect/client/controller/PendingCRMApplicationsController.java b/aconnect/src/main/java/com/mfsys/aconnect/client/controller/PendingCRMApplicationsController.java new file mode 100644 index 0000000..8dc2ece --- /dev/null +++ b/aconnect/src/main/java/com/mfsys/aconnect/client/controller/PendingCRMApplicationsController.java @@ -0,0 +1,38 @@ +package com.mfsys.aconnect.client.controller; + +import com.mfsys.aconnect.client.dto.InProcessApplicationsRequestDTO; +import com.mfsys.aconnect.client.service.InProcessApplicationsService; +import com.mfsys.common.configuration.constant.AconnectURI; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +public class PendingCRMApplicationsController { + + private final InProcessApplicationsService inProcessApplicationsService; + + public PendingCRMApplicationsController( + InProcessApplicationsService inProcessApplicationsService) { + this.inProcessApplicationsService = inProcessApplicationsService; + } + + @PostMapping(AconnectURI.GET_INDIVIDUAL_PENDING_APPLICATIONS_URI) + public ResponseEntity getIndividualPendingCRMs(@RequestBody InProcessApplicationsRequestDTO request, + @RequestHeader("Authorization") String token, @RequestHeader("SUS_USERCODE") String susUserCode) { + return inProcessApplicationsService.getIndividualPendingCRM(request, token, susUserCode); + } + + @PostMapping(AconnectURI.GET_BUSINESS_PENDING_APPLICATIONS_URI) + public ResponseEntity getBusinessPendingCRMs(@RequestBody InProcessApplicationsRequestDTO request, + @RequestHeader("Authorization") String token, @RequestHeader("SUS_USERCODE") String susUserCode) { + return inProcessApplicationsService.getBusinessPendingCRM(request, token, susUserCode); + } + + @GetMapping(AconnectURI.CHECK_INDIVIDUAL_APPLICATIONS_URI) + public ResponseEntitygetIndividualApplication( + @RequestParam("POR_ORGACODE") String porOrgacode,@RequestParam("formId") String formId, + @RequestParam(value = "includeFields", required = false) String includeFields, + @RequestHeader("Authorization") String token, @RequestHeader("SUS_USERCODE") String susUserCode){ + return inProcessApplicationsService.getPendingIndividualApplication(porOrgacode, formId, includeFields, 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..f57b85e 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 @@ -64,7 +64,42 @@ public class InProcessApplicationsService { ); } - private LazyListRequestDTO buildLazyListPayload(InProcessApplicationsRequestDTO req) { + private Map businessBuildWorkflowFilter(InProcessApplicationsRequestDTO req) { + List workflowQueries = new ArrayList<>(); + + if (req.isIncludeRegistrationPending()) { + workflowQueries.add(Map.of( + "params", List.of( + param("workFlowStage", "BN_WF_BP_REGISTRATION", "text", "="), + param("applicationStatus", "Pending", "text", "=") + ), + "operator", "$and" + )); + } + if (req.isIncludeAuthorizationApproved()) { + workflowQueries.add(Map.of( + "params", List.of( + param("workFlowStage", "BN_WF_BP_AUTHORIZATION", "text", "="), + param("applicationStatus", "Approved", "text", "="), + param("postProcessCompleted", true, "boolean", "!=") + ), + "operator", "$and" + )); + } + workflowQueries.add(Map.of( + "params", List.of( + param("workFlowStage", "BN_WF_BP_REGISTRATION", "text", "="), + param("applicationStatus", "[\"Rejected\",\"Hold\"]", "text", "in") + ), + "operator", "$and" + )); + return Map.of( + "nestedQuery", workflowQueries, + "operator", "$or" + ); + } + + private LazyListRequestDTO indivdualBuildLazyListPayload(InProcessApplicationsRequestDTO req) { List rootQueries = new ArrayList<>(); @@ -105,12 +140,76 @@ public class InProcessApplicationsService { return dto; } - public ResponseEntity getInProcessApplications( + private LazyListRequestDTO BusinessBuildLazyListPayload(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(businessBuildWorkflowFilter(req)); + + LazyListRequestDTO dto = new LazyListRequestDTO(); + dto.setCollection("BN_WF_BP_BUSINESSPROFILE"); + dto.setFilter(Map.of( + "nestedQuery", rootQueries, + "operator", "$and" + )); + if (req.getLimit() != null) { + dto.setLimit(req.getLimit()); + } + dto.setSortBy("{\"workFlowRefNum\":-1}"); + dto.setIncludeFields(List.of( + "CMP_CUSTCODE", "CMP_COMPANYNAME", "workFlowRefNum", "applicationStatus", "workFlowStage", + "workFlowStage", "workFlowLog", "postProcessCompleted", "failureCause", + "postProcessInProgress" + )); + + return dto; + } + + public ResponseEntity getIndividualPendingCRM( + InProcessApplicationsRequestDTO request, String token, String susUserCode) { + + String url = crmURI + "/crm" + "/mongodb/lazylist"; + + LazyListRequestDTO payload = indivdualBuildLazyListPayload(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 getBusinessPendingCRM( InProcessApplicationsRequestDTO request, String token, String susUserCode) { String url = crmURI + "/crm" + "/mongodb/lazylist"; - LazyListRequestDTO payload = buildLazyListPayload(request); + LazyListRequestDTO payload = BusinessBuildLazyListPayload(request); HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", token); 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..ee3f57e 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 @@ -30,8 +30,11 @@ public interface AconnectURI { String GL_TO_ACCOUNT_TRANSACTION_URI = TRANSACTION_URI + "/gl-account"; String INDIVIDUAL_CRM_CREATION_URI = CRM + INDIVIDUAL + "/create"; String APPROVE_INDIVIDUAL_CRM_URI = CRM + INDIVIDUAL + "/approve"; - String CHECK_PENDING_APPLICATIONS_URI = CRM + "/inprocess"; + String GET_INDIVIDUAL_PENDING_APPLICATIONS_URI = CRM + INDIVIDUAL + "/pending-workflow"; + String CHECK_INDIVIDUAL_PENDING_APPLICATIONS_URI = CRM + INDIVIDUAL + "/inprocess"; String CHECK_INDIVIDUAL_APPLICATIONS_URI = CRM + INDIVIDUAL + "/inprocess"; + String GET_BUSINESS_PENDING_APPLICATIONS_URI = CRM + BUSINESS + "/pending-workflow"; + String CHECK_BUSINESS_APPLICATIONS_URI = CRM + BUSINESS + "/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..25a4821 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 @@ -13,6 +13,8 @@ public interface TokenBypassURI { "/aconnect/transactions/accounttogl", "/aconnect/crm/individual/approve", "/aconnect/crm/inprocess", + "/aconnect/crm/individual/pending-workflow", + "/aconnect/crm/business/pending-workflow", "/aconnect/crm/individual/inprocess", "/aconnect/account/miscDetails", "/deposit/account/miscDetails",