From 5ee5eb17c87b68fe6128703085d20a9278a2ac0a Mon Sep 17 00:00:00 2001 From: vanitha1822 Date: Tue, 21 Apr 2026 10:54:02 +0530 Subject: [PATCH 1/4] fix: build issue --- .../videocall/VideoCallServiceImpl.java | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java index 0fb9acdb..48322ef6 100644 --- a/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java +++ b/src/main/java/com/iemr/common/service/videocall/VideoCallServiceImpl.java @@ -110,23 +110,14 @@ public String sendMeetingLink(VideoCallRequest request) throws Exception { @Override public String updateCallStatus(UpdateCallRequest callRequest) throws Exception { String meetingLink = callRequest.getMeetingLink(); - meetingLink, - callRequest.getCallStatus(), - callRequest.getCallDuration(), - callRequest.getModifiedBy(), - callRequest.getIsLinkUsed()); - + // 1. Verify the row actually exists before attempting update VideoCallParameters existing = videoCallRepository.findByMeetingLink(meetingLink); if (existing == null) { logger.error("[updateCallStatus] No row found in t_videocallparameter for meetingLink={}", meetingLink); throw new Exception("No meeting found for link: " + meetingLink); } - existing.getMeetingID(), - existing.getCallStatus(), - existing.isLinkUsed(), - existing.getRecordingFileName()); - + // 2. Derive the two fields boolean linkUsed = callRequest.getIsLinkUsed() == null || callRequest.getIsLinkUsed(); String recordingFileName = buildRecordingFileName(meetingLink); @@ -149,11 +140,7 @@ public String updateCallStatus(UpdateCallRequest callRequest) throws Exception { // 4. Re-fetch AFTER the update so the returned JSON reflects what is now in the DB VideoCallParameters updated = videoCallRepository.findByMeetingLink(meetingLink); - updated.getCallStatus(), - updated.getCallDuration(), - updated.isLinkUsed(), - updated.getRecordingFileName()); - + return OutputMapper.gsonWithoutExposeRestriction() .toJson(videoCallMapper.videoCallToResponse(updated)); } From 072ba1d22b6bbb8d325aea925d93124de9948ec4 Mon Sep 17 00:00:00 2001 From: vanitha1822 Date: Tue, 21 Apr 2026 11:06:36 +0530 Subject: [PATCH 2/4] fix: build issue --- .../common/service/kmfilemanager/KMFileManagerServiceImpl.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/iemr/common/service/kmfilemanager/KMFileManagerServiceImpl.java b/src/main/java/com/iemr/common/service/kmfilemanager/KMFileManagerServiceImpl.java index 988f6ad2..b214a9ee 100644 --- a/src/main/java/com/iemr/common/service/kmfilemanager/KMFileManagerServiceImpl.java +++ b/src/main/java/com/iemr/common/service/kmfilemanager/KMFileManagerServiceImpl.java @@ -92,9 +92,6 @@ public void setSubCategoryRepository(SubCategoryRepository subCategoryRepository @Value("${tempFilePath}") private String tempFilePath; - @Value("${tempFilePath}") - private String tempFilePath; - @Override public String getKMFileLists(String request) throws Exception { ObjectMapper objectMapper = new ObjectMapper(); From 0e88c49e5b357dbd2aeefa79da7e07e8ebbb1dc7 Mon Sep 17 00:00:00 2001 From: vanitha1822 Date: Tue, 21 Apr 2026 11:13:14 +0530 Subject: [PATCH 3/4] fix: merge with main --- .../BeneficiaryRegistrationController.java | 42 ++++---- .../beneficiary/IEMRSearchUserService.java | 2 - .../IEMRSearchUserServiceImpl.java | 94 ++++-------------- .../IdentityBeneficiaryServiceImpl.java | 97 +++++++++++-------- 4 files changed, 99 insertions(+), 136 deletions(-) diff --git a/src/main/java/com/iemr/common/controller/beneficiary/BeneficiaryRegistrationController.java b/src/main/java/com/iemr/common/controller/beneficiary/BeneficiaryRegistrationController.java index 67f57981..a64a38a1 100644 --- a/src/main/java/com/iemr/common/controller/beneficiary/BeneficiaryRegistrationController.java +++ b/src/main/java/com/iemr/common/controller/beneficiary/BeneficiaryRegistrationController.java @@ -37,6 +37,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; @@ -74,6 +75,8 @@ import com.iemr.common.service.userbeneficiarydata.TitleService; import com.iemr.common.utils.CookieUtil; import com.iemr.common.utils.JwtUtil; +import com.iemr.common.utils.CookieUtil; +import com.iemr.common.utils.JwtUtil; import com.iemr.common.utils.mapper.InputMapper; import com.iemr.common.utils.mapper.OutputMapper; import com.iemr.common.utils.response.OutputResponse; @@ -108,7 +111,9 @@ public class BeneficiaryRegistrationController { private BeneficiaryOccupationService beneficiaryOccupationService; private GovtIdentityTypeService govtIdentityTypeService; - @Autowired + + + @Autowired private JwtUtil jwtUtil; @Autowired @@ -351,51 +356,54 @@ public String searchUserByPhone( @Operation(summary = "Provide the list of beneficiaries using Elasticsearch") @RequestMapping(value = "/searchUser", method = RequestMethod.POST, headers = "Authorization") - public String searchUser(@RequestBody String request, HttpServletRequest httpRequest) { + public String searchUser( + @RequestBody String request, + @RequestHeader(value = "Authorization", required = false) String auth, HttpServletRequest httpRequest) { + OutputResponse response = new OutputResponse(); + try { logger.info("Universal search request received"); - + JsonParser parser = new JsonParser(); JsonObject requestObj = parser.parse(request).getAsJsonObject(); - + String searchQuery = null; if (requestObj.has("search") && !requestObj.get("search").isJsonNull()) { searchQuery = requestObj.get("search").getAsString(); } - + if (searchQuery == null || searchQuery.trim().isEmpty()) { response.setError(400, "Search query is required"); return response.toString(); } - - String auth = httpRequest.getHeader("Authorization"); - - Integer userID = jwtUtil.getUserIdFromRequest(httpRequest); - - logger.info("ES search for userId: {}", userID); - + + String jwtToken = CookieUtil.getJwtTokenFromCookie(httpRequest); + String userId = jwtUtil.getUserIdFromToken(jwtToken); + int userID=Integer.parseInt(userId); + Boolean is1097 = false; if (requestObj.has("is1097") && !requestObj.get("is1097").isJsonNull()) { is1097 = requestObj.get("is1097").getAsBoolean(); } - + logger.info("Searching with query: {}, userId: {}, is1097: {}", searchQuery, userID, is1097); + String result = iemrSearchUserService.searchUser(searchQuery, userID, auth, is1097); - + if (result == null || result.trim().isEmpty()) { response.setError(200, "No beneficiaries found"); return response.toString(); } - + return result; - + } catch (Exception e) { logger.error("Error in universal search: {}", e.getMessage(), e); response.setError(400, "Error searching beneficiaries: " + e.getMessage()); return response.toString(); } - } + } @Operation(summary = "Provide the list of beneficiaries based on search criteria") @RequestMapping(value = "/searchBeneficiary", method = RequestMethod.POST, headers = "Authorization") diff --git a/src/main/java/com/iemr/common/service/beneficiary/IEMRSearchUserService.java b/src/main/java/com/iemr/common/service/beneficiary/IEMRSearchUserService.java index e39cfcab..ab4c40fd 100644 --- a/src/main/java/com/iemr/common/service/beneficiary/IEMRSearchUserService.java +++ b/src/main/java/com/iemr/common/service/beneficiary/IEMRSearchUserService.java @@ -40,8 +40,6 @@ String findByBeneficiaryPhoneNo(BenPhoneMap benPhoneMap, Integer pageNo, Integer String searchUser(String searchQuery, Integer userId, String auth, Boolean is1097) throws Exception; - String findBeneficiaryES(BeneficiaryModel i_beneficiary, Integer userId, String auth) throws Exception; - List userExitsCheckWithId(String beneficiaryID, String auth, Boolean is1097) throws Exception; public List userExitsCheckWithHealthId_ABHAId(String healthID, String auth, Boolean is1097) diff --git a/src/main/java/com/iemr/common/service/beneficiary/IEMRSearchUserServiceImpl.java b/src/main/java/com/iemr/common/service/beneficiary/IEMRSearchUserServiceImpl.java index 28d664c8..488a1218 100644 --- a/src/main/java/com/iemr/common/service/beneficiary/IEMRSearchUserServiceImpl.java +++ b/src/main/java/com/iemr/common/service/beneficiary/IEMRSearchUserServiceImpl.java @@ -26,6 +26,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Map; import java.util.Objects; import org.slf4j.Logger; @@ -78,6 +79,7 @@ import com.iemr.common.repository.userbeneficiarydata.SexualOrientationRepository; import com.iemr.common.repository.userbeneficiarydata.TitleRepository; import com.iemr.common.utils.exception.IEMRException; +import com.iemr.common.utils.exception.IEMRException; /** * @@ -326,88 +328,32 @@ private void setBeneficiaryGender(List iBeneficiary) { } /** - * Universal search using Elasticsearch - */ + Universal search using Elasticsearch + */ @Override public String searchUser(String searchQuery, Integer userId, String auth, Boolean is1097) throws Exception { - try { - if (searchQuery == null || searchQuery.trim().isEmpty()) { - throw new IEMRException("Search query is required"); - } - - logger.info("Universal search with query: {}, userId: {}", searchQuery, userId); - - Map response = identityBeneficiaryService.searchBeneficiariesUsingES( - searchQuery, userId, auth, is1097); - - ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString(response); - - } catch (Exception e) { - logger.error("Error in universal search", e); - throw new Exception("Error searching beneficiaries: " + e.getMessage(), e); - } - } - - /** - * Advanced search using Elasticsearch with multiple criteria - */ - - @Override - public String findBeneficiaryES( - BeneficiaryModel i_beneficiary, - Integer userId, - String auth) throws Exception { - - try { - IdentitySearchDTO identitySearchDTO = identityBenEditMapper.getidentitysearchModel(i_beneficiary); + try { + if (searchQuery == null || searchQuery.trim().isEmpty()) { + throw new IEMRException("Search query is required"); + } - if (i_beneficiary.getDOB() != null) { - identitySearchDTO.setDob(i_beneficiary.getDOB()); - } - - if (i_beneficiary.getHouseHoldID() != null) { - identitySearchDTO.setHouseHoldID(i_beneficiary.getHouseHoldID()); - } - - if (i_beneficiary.getIsD2D() != null) { - identitySearchDTO.setIsD2D(i_beneficiary.getIsD2D()); - } - - if (i_beneficiary.getBenPhoneMaps() != null - && !i_beneficiary.getBenPhoneMaps().isEmpty()) { - identitySearchDTO.setContactNumber( - i_beneficiary.getBenPhoneMaps().get(0).getPhoneNo()); - } + logger.info("Universal search with query: {}, userId: {}", searchQuery, userId); - if (i_beneficiary.getBeneficiaryID() != null - && !i_beneficiary.getBeneficiaryID().isEmpty()) { - identitySearchDTO.setBeneficiaryId( - new BigInteger(i_beneficiary.getBeneficiaryID())); - } - - i_beneficiary.setIs1097(Boolean.TRUE.equals(i_beneficiary.getIs1097())); - - Gson gson = new GsonBuilder() - .setDateFormat("yyyy-MM-dd") - .create(); - - String requestJson = gson.toJson(identitySearchDTO); + Map response = + identityBeneficiaryService.searchBeneficiariesUsingES( + searchQuery, userId, auth, is1097 + ); - Map response = identityBeneficiaryService.searchBeneficiaryListES( - requestJson, - auth, - i_beneficiary.getIs1097()); + ObjectMapper mapper = new ObjectMapper(); + return mapper.writeValueAsString(response); - ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString(response); + } catch (Exception e) { + logger.error("Error in universal search", e); + throw new Exception("Error searching beneficiaries: " + e.getMessage(), e); + } +} - } catch (Exception e) { - logger.error("Error in ES advance search", e); - throw new Exception("Error searching beneficiaries using ES", e); - } - } // Advance search @Override diff --git a/src/main/java/com/iemr/common/service/beneficiary/IdentityBeneficiaryServiceImpl.java b/src/main/java/com/iemr/common/service/beneficiary/IdentityBeneficiaryServiceImpl.java index 350f2527..aa92f85b 100644 --- a/src/main/java/com/iemr/common/service/beneficiary/IdentityBeneficiaryServiceImpl.java +++ b/src/main/java/com/iemr/common/service/beneficiary/IdentityBeneficiaryServiceImpl.java @@ -21,19 +21,25 @@ */ package com.iemr.common.service.beneficiary; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collections; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Map; import com.google.gson.*; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.iemr.common.dto.identity.BeneficiariesDTO; @@ -53,6 +59,12 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.beans.factory.annotation.Value; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + @Service public class IdentityBeneficiaryServiceImpl implements IdentityBeneficiaryService { @@ -112,21 +124,20 @@ public List getBeneficiaryListByIDs(HashSet benIdList, String return listBenDetailForOutboundDTO; } - /** - * Call Identity API's Elasticsearch universal search - */ + /** + Call Identity API's Elasticsearch universal search + */ @Override - public Map searchBeneficiariesUsingES(String query, Integer userId, String auth, Boolean is1097) - throws IEMRException { + public Map searchBeneficiariesUsingES(String query, Integer userId, String auth, Boolean is1097 ) throws IEMRException { - Map response = new HashMap<>(); + Map response = new HashMap<>(); try { HashMap headers = new HashMap<>(); if (auth != null && !auth.isEmpty()) { headers.put("Authorization", auth); } - + String baseUrl = ConfigProperties .getPropertyByName("identity-api-url-searchByES") .replace( @@ -134,53 +145,53 @@ public Map searchBeneficiariesUsingES(String query, Integer user (Boolean.TRUE.equals(is1097)) ? identity1097BaseURL : identityBaseURL ); - StringBuilder url = new StringBuilder(baseUrl) - .append("?query=").append(URLEncoder.encode(query, StandardCharsets.UTF_8)); + StringBuilder url = new StringBuilder(baseUrl) + .append("?query=").append(URLEncoder.encode(query, StandardCharsets.UTF_8)); - if (userId != null) { - url.append("&userId=").append(userId); - } + if (userId != null) { + url.append("&userId=").append(userId); + } - logger.info("Calling Identity ES search URL: {}", url); + logger.info("Calling Identity ES search URL: {}", url); - String result = httpUtils.get(url.toString()); + String result = httpUtils.get(url.toString(), headers); - if (result == null || result.isEmpty()) { - response.put("data", Collections.emptyList()); - response.put("statusCode", 200); - response.put("status", "Success"); - response.put("errorMessage", "Success"); - return response; - } + if (result == null || result.isEmpty()) { + response.put("data", Collections.emptyList()); + response.put("statusCode", 200); + response.put("status", "Success"); + response.put("errorMessage", "Success"); + return response; + } - ObjectMapper mapper = new ObjectMapper(); + ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, false); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, false); - JsonNode rootNode = mapper.readTree(result); + JsonNode rootNode = mapper.readTree(result); - if (rootNode.has("statusCode") && rootNode.get("statusCode").asInt() != 200) { - String errMsg = rootNode.has("errorMessage") - ? rootNode.get("errorMessage").asText() - : "Identity ES search failed"; - throw new IEMRException(errMsg); - } + if (rootNode.has("statusCode") && rootNode.get("statusCode").asInt() != 200) { + String errMsg = rootNode.has("errorMessage") + ? rootNode.get("errorMessage").asText() + : "Identity ES search failed"; + throw new IEMRException(errMsg); + } - response.put("data", rootNode.path("data")); - response.put("statusCode", 200); - response.put("status", "Success"); - response.put("errorMessage", "Success"); + response.put("data", rootNode.path("data")); + response.put("statusCode", 200); + response.put("status", "Success"); + response.put("errorMessage", "Success"); - return response; + return response; - } catch (IEMRException e) { - throw e; - } catch (Exception e) { - logger.error("Error calling Identity ES search API", e); - throw new IEMRException("Error calling Identity ES search API"); - } - } + } catch (IEMRException e) { + throw e; + } catch (Exception e) { + logger.error("Error calling Identity ES search API", e); + throw new IEMRException("Error calling Identity ES search API"); + } +} @Override public List getPartialBeneficiaryListByIDs(HashSet benIdList, String auth, Boolean is1097) From 9f593bb5cbf6f51577c85ab2481a7c172a1a2683 Mon Sep 17 00:00:00 2001 From: Vanitha S <116701245+vanitha1822@users.noreply.github.com> Date: Thu, 8 Jan 2026 09:26:07 +0530 Subject: [PATCH 4/4] Elastic Search Implementation for Advanced Search (#327) * fix: cherry-pick commits for advanced search * fix: cherry-pick commit for token issue - mobile application * fix: add the missing properties * fix: add function to retrieve userid * fix: move the fetch Userid to jwtUtil --- .../BeneficiaryRegistrationController.java | 39 ++++---- .../beneficiary/IEMRSearchUserService.java | 2 + .../IEMRSearchUserServiceImpl.java | 92 +++++++++++++++---- .../IdentityBeneficiaryServiceImpl.java | 86 ++++++++--------- 4 files changed, 136 insertions(+), 83 deletions(-) diff --git a/src/main/java/com/iemr/common/controller/beneficiary/BeneficiaryRegistrationController.java b/src/main/java/com/iemr/common/controller/beneficiary/BeneficiaryRegistrationController.java index a64a38a1..7dc7cfb2 100644 --- a/src/main/java/com/iemr/common/controller/beneficiary/BeneficiaryRegistrationController.java +++ b/src/main/java/com/iemr/common/controller/beneficiary/BeneficiaryRegistrationController.java @@ -111,9 +111,7 @@ public class BeneficiaryRegistrationController { private BeneficiaryOccupationService beneficiaryOccupationService; private GovtIdentityTypeService govtIdentityTypeService; - - - @Autowired + @Autowired private JwtUtil jwtUtil; @Autowired @@ -356,54 +354,51 @@ public String searchUserByPhone( @Operation(summary = "Provide the list of beneficiaries using Elasticsearch") @RequestMapping(value = "/searchUser", method = RequestMethod.POST, headers = "Authorization") - public String searchUser( - @RequestBody String request, - @RequestHeader(value = "Authorization", required = false) String auth, HttpServletRequest httpRequest) { - + public String searchUser(@RequestBody String request, HttpServletRequest httpRequest) { OutputResponse response = new OutputResponse(); - try { logger.info("Universal search request received"); - + JsonParser parser = new JsonParser(); JsonObject requestObj = parser.parse(request).getAsJsonObject(); - + String searchQuery = null; if (requestObj.has("search") && !requestObj.get("search").isJsonNull()) { searchQuery = requestObj.get("search").getAsString(); } - + if (searchQuery == null || searchQuery.trim().isEmpty()) { response.setError(400, "Search query is required"); return response.toString(); } - - String jwtToken = CookieUtil.getJwtTokenFromCookie(httpRequest); - String userId = jwtUtil.getUserIdFromToken(jwtToken); - int userID=Integer.parseInt(userId); - + + String auth = httpRequest.getHeader("Authorization"); + + Integer userID = jwtUtil.getUserIdFromRequest(httpRequest); + + logger.info("ES search for userId: {}", userID); + Boolean is1097 = false; if (requestObj.has("is1097") && !requestObj.get("is1097").isJsonNull()) { is1097 = requestObj.get("is1097").getAsBoolean(); } - + logger.info("Searching with query: {}, userId: {}, is1097: {}", searchQuery, userID, is1097); - String result = iemrSearchUserService.searchUser(searchQuery, userID, auth, is1097); - + if (result == null || result.trim().isEmpty()) { response.setError(200, "No beneficiaries found"); return response.toString(); } - + return result; - + } catch (Exception e) { logger.error("Error in universal search: {}", e.getMessage(), e); response.setError(400, "Error searching beneficiaries: " + e.getMessage()); return response.toString(); } - } + } @Operation(summary = "Provide the list of beneficiaries based on search criteria") @RequestMapping(value = "/searchBeneficiary", method = RequestMethod.POST, headers = "Authorization") diff --git a/src/main/java/com/iemr/common/service/beneficiary/IEMRSearchUserService.java b/src/main/java/com/iemr/common/service/beneficiary/IEMRSearchUserService.java index ab4c40fd..e39cfcab 100644 --- a/src/main/java/com/iemr/common/service/beneficiary/IEMRSearchUserService.java +++ b/src/main/java/com/iemr/common/service/beneficiary/IEMRSearchUserService.java @@ -40,6 +40,8 @@ String findByBeneficiaryPhoneNo(BenPhoneMap benPhoneMap, Integer pageNo, Integer String searchUser(String searchQuery, Integer userId, String auth, Boolean is1097) throws Exception; + String findBeneficiaryES(BeneficiaryModel i_beneficiary, Integer userId, String auth) throws Exception; + List userExitsCheckWithId(String beneficiaryID, String auth, Boolean is1097) throws Exception; public List userExitsCheckWithHealthId_ABHAId(String healthID, String auth, Boolean is1097) diff --git a/src/main/java/com/iemr/common/service/beneficiary/IEMRSearchUserServiceImpl.java b/src/main/java/com/iemr/common/service/beneficiary/IEMRSearchUserServiceImpl.java index 488a1218..f1b2f08c 100644 --- a/src/main/java/com/iemr/common/service/beneficiary/IEMRSearchUserServiceImpl.java +++ b/src/main/java/com/iemr/common/service/beneficiary/IEMRSearchUserServiceImpl.java @@ -328,32 +328,88 @@ private void setBeneficiaryGender(List iBeneficiary) { } /** - Universal search using Elasticsearch - */ + * Universal search using Elasticsearch + */ @Override public String searchUser(String searchQuery, Integer userId, String auth, Boolean is1097) throws Exception { - try { - if (searchQuery == null || searchQuery.trim().isEmpty()) { - throw new IEMRException("Search query is required"); - } + try { + if (searchQuery == null || searchQuery.trim().isEmpty()) { + throw new IEMRException("Search query is required"); + } - logger.info("Universal search with query: {}, userId: {}", searchQuery, userId); + logger.info("Universal search with query: {}, userId: {}", searchQuery, userId); - Map response = - identityBeneficiaryService.searchBeneficiariesUsingES( - searchQuery, userId, auth, is1097 - ); + Map response = identityBeneficiaryService.searchBeneficiariesUsingES( + searchQuery, userId, auth, is1097); - ObjectMapper mapper = new ObjectMapper(); - return mapper.writeValueAsString(response); + ObjectMapper mapper = new ObjectMapper(); + return mapper.writeValueAsString(response); - } catch (Exception e) { - logger.error("Error in universal search", e); - throw new Exception("Error searching beneficiaries: " + e.getMessage(), e); - } -} + } catch (Exception e) { + logger.error("Error in universal search", e); + throw new Exception("Error searching beneficiaries: " + e.getMessage(), e); + } + } + + /** + * Advanced search using Elasticsearch with multiple criteria + */ + + @Override + public String findBeneficiaryES( + BeneficiaryModel i_beneficiary, + Integer userId, + String auth) throws Exception { + + try { + IdentitySearchDTO identitySearchDTO = identityBenEditMapper.getidentitysearchModel(i_beneficiary); + + if (i_beneficiary.getDOB() != null) { + identitySearchDTO.setDob(i_beneficiary.getDOB()); + } + + if (i_beneficiary.getHouseHoldID() != null) { + identitySearchDTO.setHouseHoldID(i_beneficiary.getHouseHoldID()); + } + if (i_beneficiary.getIsD2D() != null) { + identitySearchDTO.setIsD2D(i_beneficiary.getIsD2D()); + } + + if (i_beneficiary.getBenPhoneMaps() != null + && !i_beneficiary.getBenPhoneMaps().isEmpty()) { + identitySearchDTO.setContactNumber( + i_beneficiary.getBenPhoneMaps().get(0).getPhoneNo()); + } + + if (i_beneficiary.getBeneficiaryID() != null + && !i_beneficiary.getBeneficiaryID().isEmpty()) { + identitySearchDTO.setBeneficiaryId( + new BigInteger(i_beneficiary.getBeneficiaryID())); + } + + i_beneficiary.setIs1097(Boolean.TRUE.equals(i_beneficiary.getIs1097())); + + Gson gson = new GsonBuilder() + .setDateFormat("yyyy-MM-dd") + .create(); + + String requestJson = gson.toJson(identitySearchDTO); + + Map response = identityBeneficiaryService.searchBeneficiaryListES( + requestJson, + auth, + i_beneficiary.getIs1097()); + + ObjectMapper mapper = new ObjectMapper(); + return mapper.writeValueAsString(response); + + } catch (Exception e) { + logger.error("Error in ES advance search", e); + throw new Exception("Error searching beneficiaries using ES", e); + } + } // Advance search @Override diff --git a/src/main/java/com/iemr/common/service/beneficiary/IdentityBeneficiaryServiceImpl.java b/src/main/java/com/iemr/common/service/beneficiary/IdentityBeneficiaryServiceImpl.java index aa92f85b..e88edc5b 100644 --- a/src/main/java/com/iemr/common/service/beneficiary/IdentityBeneficiaryServiceImpl.java +++ b/src/main/java/com/iemr/common/service/beneficiary/IdentityBeneficiaryServiceImpl.java @@ -39,7 +39,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.iemr.common.dto.identity.BeneficiariesDTO; @@ -124,20 +123,21 @@ public List getBeneficiaryListByIDs(HashSet benIdList, String return listBenDetailForOutboundDTO; } - /** - Call Identity API's Elasticsearch universal search - */ + /** + * Call Identity API's Elasticsearch universal search + */ @Override - public Map searchBeneficiariesUsingES(String query, Integer userId, String auth, Boolean is1097 ) throws IEMRException { + public Map searchBeneficiariesUsingES(String query, Integer userId, String auth, Boolean is1097) + throws IEMRException { - Map response = new HashMap<>(); + Map response = new HashMap<>(); try { HashMap headers = new HashMap<>(); if (auth != null && !auth.isEmpty()) { headers.put("Authorization", auth); } - + String baseUrl = ConfigProperties .getPropertyByName("identity-api-url-searchByES") .replace( @@ -145,53 +145,53 @@ public Map searchBeneficiariesUsingES(String query, Integer user (Boolean.TRUE.equals(is1097)) ? identity1097BaseURL : identityBaseURL ); - StringBuilder url = new StringBuilder(baseUrl) - .append("?query=").append(URLEncoder.encode(query, StandardCharsets.UTF_8)); + StringBuilder url = new StringBuilder(baseUrl) + .append("?query=").append(URLEncoder.encode(query, StandardCharsets.UTF_8)); - if (userId != null) { - url.append("&userId=").append(userId); - } + if (userId != null) { + url.append("&userId=").append(userId); + } - logger.info("Calling Identity ES search URL: {}", url); + logger.info("Calling Identity ES search URL: {}", url); - String result = httpUtils.get(url.toString(), headers); + String result = httpUtils.get(url.toString()); - if (result == null || result.isEmpty()) { - response.put("data", Collections.emptyList()); - response.put("statusCode", 200); - response.put("status", "Success"); - response.put("errorMessage", "Success"); - return response; - } + if (result == null || result.isEmpty()) { + response.put("data", Collections.emptyList()); + response.put("statusCode", 200); + response.put("status", "Success"); + response.put("errorMessage", "Success"); + return response; + } - ObjectMapper mapper = new ObjectMapper(); + ObjectMapper mapper = new ObjectMapper(); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - mapper.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, false); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.configure(DeserializationFeature.READ_DATE_TIMESTAMPS_AS_NANOSECONDS, false); - JsonNode rootNode = mapper.readTree(result); + JsonNode rootNode = mapper.readTree(result); - if (rootNode.has("statusCode") && rootNode.get("statusCode").asInt() != 200) { - String errMsg = rootNode.has("errorMessage") - ? rootNode.get("errorMessage").asText() - : "Identity ES search failed"; - throw new IEMRException(errMsg); - } + if (rootNode.has("statusCode") && rootNode.get("statusCode").asInt() != 200) { + String errMsg = rootNode.has("errorMessage") + ? rootNode.get("errorMessage").asText() + : "Identity ES search failed"; + throw new IEMRException(errMsg); + } - response.put("data", rootNode.path("data")); - response.put("statusCode", 200); - response.put("status", "Success"); - response.put("errorMessage", "Success"); + response.put("data", rootNode.path("data")); + response.put("statusCode", 200); + response.put("status", "Success"); + response.put("errorMessage", "Success"); - return response; + return response; - } catch (IEMRException e) { - throw e; - } catch (Exception e) { - logger.error("Error calling Identity ES search API", e); - throw new IEMRException("Error calling Identity ES search API"); - } -} + } catch (IEMRException e) { + throw e; + } catch (Exception e) { + logger.error("Error calling Identity ES search API", e); + throw new IEMRException("Error calling Identity ES search API"); + } + } @Override public List getPartialBeneficiaryListByIDs(HashSet benIdList, String auth, Boolean is1097)