From c039754d39f136f3778268ee6271b527b887c313 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Thu, 5 Jun 2025 10:13:58 +0530 Subject: [PATCH 1/3] Improve ABHA fetch performance using batch query --- .../healthID/CreateHealthIDWithMobileOTP.java | 74 +++++++++++++------ .../repo/healthID/BenHealthIDMappingRepo.java | 4 + .../service/healthID/HealthIDServiceImpl.java | 59 +++++++++++---- 3 files changed, 99 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/wipro/fhir/controller/healthID/CreateHealthIDWithMobileOTP.java b/src/main/java/com/wipro/fhir/controller/healthID/CreateHealthIDWithMobileOTP.java index 99eebb2..060543d 100644 --- a/src/main/java/com/wipro/fhir/controller/healthID/CreateHealthIDWithMobileOTP.java +++ b/src/main/java/com/wipro/fhir/controller/healthID/CreateHealthIDWithMobileOTP.java @@ -114,31 +114,57 @@ public String verifyOTPAndGenerateHealthID( * @param comingRequest * @return ABHA of Beneficiary */ - @CrossOrigin() - @Operation(summary = "Get Beneficiary ABHA details") - @PostMapping(value = { "/getBenhealthID" }) - public String getBenhealthID( - @Param(value = "{\"beneficiaryRegID\":\"Long\"}") @RequestBody String comingRequest) { - OutputResponse response = new OutputResponse(); + // @CrossOrigin() + // @Operation(summary = "Get Beneficiary ABHA details") + // @PostMapping(value = { "/getBenhealthID" }) + // public String getBenhealthID( + // @Param(value = "{\"beneficiaryRegID\":\"Long\"}") @RequestBody String comingRequest) { + // OutputResponse response = new OutputResponse(); - logger.info("NDHM_FHIR Request obj to fetch beneficiary ABHA details :" + comingRequest); - try { - JSONObject obj = new JSONObject(comingRequest); - if (obj.length() > 0) { - Long benRegID = obj.getLong("beneficiaryRegID"); - String res = healthIDService.getBenHealthID(benRegID); - response.setResponse(res); - } else { - logger.info("NDHM_FHIR Invalid Request Data."); - response.setError(5000, "NDHM_FHIR Invalid request"); - } - } catch (Exception e) { - response.setError(5000, e.getMessage()); - logger.error("NDHM_FHIR Error while getting beneficiary ABHA:" + e); - } - logger.info("NDHM_FHIR get beneficiary ABHA response:" + response.toString()); - return response.toString(); - } + // logger.info("NDHM_FHIR Request obj to fetch beneficiary ABHA details :" + comingRequest); + // try { + // JSONObject obj = new JSONObject(comingRequest); + // if (obj.length() > 0) { + // Long benRegID = obj.getLong("beneficiaryRegID"); + // String res = healthIDService.getBenHealthID(benRegID); + // response.setResponse(res); + // } else { + // logger.info("NDHM_FHIR Invalid Request Data."); + // response.setError(5000, "NDHM_FHIR Invalid request"); + // } + // } catch (Exception e) { + // response.setError(5000, e.getMessage()); + // logger.error("NDHM_FHIR Error while getting beneficiary ABHA:" + e); + // } + // logger.info("NDHM_FHIR get beneficiary ABHA response:" + response.toString()); + // return response.toString(); + // } + + + @Operation(summary = "Get Beneficiary ABHA details") + @PostMapping("/getBenhealthID") + public String getBenhealthID(@RequestBody String comingRequest) { + OutputResponse response = new OutputResponse(); + + try { + logger.info("NDHM_FHIR Request to fetch ABHA details: {}", comingRequest); + + JSONObject obj = new JSONObject(comingRequest); + if (obj.has("beneficiaryRegID")) { + Long benRegID = obj.getLong("beneficiaryRegID"); + String res = healthIDService.getBenHealthID(benRegID); + response.setResponse(res); + } else { + response.setError(4001, "Missing 'beneficiaryRegID' in request"); + } + } catch (Exception e) { + logger.error("NDHM_FHIR Error while getting beneficiary ABHA: ", e); + response.setError(5000, "Error: " + e.getMessage()); + } + + logger.info("NDHM_FHIR Response:", response); + return response.toString(); + } @CrossOrigin() @Operation(summary = "Get Beneficiary Id for ABHA Id") diff --git a/src/main/java/com/wipro/fhir/repo/healthID/BenHealthIDMappingRepo.java b/src/main/java/com/wipro/fhir/repo/healthID/BenHealthIDMappingRepo.java index d79212e..cd1cbbe 100644 --- a/src/main/java/com/wipro/fhir/repo/healthID/BenHealthIDMappingRepo.java +++ b/src/main/java/com/wipro/fhir/repo/healthID/BenHealthIDMappingRepo.java @@ -85,4 +85,8 @@ public interface BenHealthIDMappingRepo extends CrudRepository getIsNewAbhaBatch(@Param("healthIdNumbers") List healthIdNumbers); + + } diff --git a/src/main/java/com/wipro/fhir/service/healthID/HealthIDServiceImpl.java b/src/main/java/com/wipro/fhir/service/healthID/HealthIDServiceImpl.java index 7fef7de..7b5123c 100644 --- a/src/main/java/com/wipro/fhir/service/healthID/HealthIDServiceImpl.java +++ b/src/main/java/com/wipro/fhir/service/healthID/HealthIDServiceImpl.java @@ -28,6 +28,8 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -114,25 +116,54 @@ public String mapHealthIDToBeneficiary(String request) throws FHIRException { return new Gson().toJson(health); } - public String getBenHealthID(Long benRegID) { - Map resMap = new HashMap<>(); + // public String getBenHealthID(Long benRegID) { + // Map resMap = new HashMap<>(); - ArrayList healthDetailsList = benHealthIDMappingRepo.getHealthDetails(benRegID); - ArrayList healthDetailsWithAbhaList = new ArrayList<>(); + // ArrayList healthDetailsList = benHealthIDMappingRepo.getHealthDetails(benRegID); + // ArrayList healthDetailsWithAbhaList = new ArrayList<>(); - if(healthDetailsList.size() > 0) { - for(BenHealthIDMapping healthDetails: healthDetailsList) { - String healthIdNumber = healthDetails.getHealthIdNumber(); - boolean isNewAbha = benHealthIDMappingRepo.getIsNewAbha(healthIdNumber); - healthDetails.setNewAbha(isNewAbha); + // if(healthDetailsList.size() > 0) { + // for(BenHealthIDMapping healthDetails: healthDetailsList) { + // String healthIdNumber = healthDetails.getHealthIdNumber(); + // boolean isNewAbha = benHealthIDMappingRepo.getIsNewAbha(healthIdNumber); + // healthDetails.setNewAbha(isNewAbha); - healthDetailsWithAbhaList.add(healthDetails); - } + // healthDetailsWithAbhaList.add(healthDetails); + // } + // } + // resMap.put("BenHealthDetails", new Gson().toJson(healthDetailsWithAbhaList)); + + // return resMap.toString(); + // } + + public String getBenHealthID(Long benRegID) { + List healthDetailsList = benHealthIDMappingRepo.getHealthDetails(benRegID); + + List healthIdNumbers = healthDetailsList.stream() + .map(BenHealthIDMapping::getHealthIdNumber) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + + Map abhaMap = new HashMap<>(); + if (!healthIdNumbers.isEmpty()) { + List abhaResults = benHealthIDMappingRepo.getIsNewAbhaBatch(healthIdNumbers); + for (Object[] row : abhaResults) { + String healthIdNumber = (String) row[0]; + Boolean isNewAbha = (Boolean) row[1]; + abhaMap.put(healthIdNumber, isNewAbha); + } + } + + for (BenHealthIDMapping healthDetails : healthDetailsList) { + Boolean isNew = abhaMap.get(healthDetails.getHealthIdNumber()); + healthDetails.setNewAbha(Boolean.TRUE.equals(isNew)); } - resMap.put("BenHealthDetails", new Gson().toJson(healthDetailsWithAbhaList)); - return resMap.toString(); - } + Map responseMap = new HashMap<>(); + responseMap.put("BenHealthDetails", healthDetailsList); + + return new Gson().toJson(responseMap); + } @Override public String addRecordToHealthIdTable(String request) throws FHIRException { From 3e5accc710e122bd8e602a9d981f7c0e64e9cb9b Mon Sep 17 00:00:00 2001 From: Vanitha Date: Fri, 13 Jun 2025 11:01:12 +0530 Subject: [PATCH 2/3] Remove the commented code --- .../healthID/CreateHealthIDWithMobileOTP.java | 30 ++----------------- .../service/healthID/HealthIDServiceImpl.java | 20 ------------- 2 files changed, 2 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/wipro/fhir/controller/healthID/CreateHealthIDWithMobileOTP.java b/src/main/java/com/wipro/fhir/controller/healthID/CreateHealthIDWithMobileOTP.java index 6f3a338..0d18d96 100644 --- a/src/main/java/com/wipro/fhir/controller/healthID/CreateHealthIDWithMobileOTP.java +++ b/src/main/java/com/wipro/fhir/controller/healthID/CreateHealthIDWithMobileOTP.java @@ -114,34 +114,8 @@ public String verifyOTPAndGenerateHealthID( * @param comingRequest * @return ABHA of Beneficiary */ - // @CrossOrigin() - // @Operation(summary = "Get Beneficiary ABHA details") - // @PostMapping(value = { "/getBenhealthID" }) - // public String getBenhealthID( - // @Param(value = "{\"beneficiaryRegID\":\"Long\"}") @RequestBody String comingRequest) { - // OutputResponse response = new OutputResponse(); - - // logger.info("NDHM_FHIR Request obj to fetch beneficiary ABHA details :" + comingRequest); - // try { - // JSONObject obj = new JSONObject(comingRequest); - // if (obj.length() > 0) { - // Long benRegID = obj.getLong("beneficiaryRegID"); - // String res = healthIDService.getBenHealthID(benRegID); - // response.setResponse(res); - // } else { - // logger.info("NDHM_FHIR Invalid Request Data."); - // response.setError(5000, "NDHM_FHIR Invalid request"); - // } - // } catch (Exception e) { - // response.setError(5000, e.getMessage()); - // logger.error("NDHM_FHIR Error while getting beneficiary ABHA:" + e); - // } - // logger.info("NDHM_FHIR get beneficiary ABHA response:" + response.toString()); - // return response.toString(); - // } - - - @Operation(summary = "Get Beneficiary ABHA details") + @CrossOrigin() + @Operation(summary = "Get Beneficiary ABHA details") @PostMapping("/getBenhealthID") public String getBenhealthID(@RequestBody String comingRequest) { OutputResponse response = new OutputResponse(); diff --git a/src/main/java/com/wipro/fhir/service/healthID/HealthIDServiceImpl.java b/src/main/java/com/wipro/fhir/service/healthID/HealthIDServiceImpl.java index 7b5123c..4c9e3c2 100644 --- a/src/main/java/com/wipro/fhir/service/healthID/HealthIDServiceImpl.java +++ b/src/main/java/com/wipro/fhir/service/healthID/HealthIDServiceImpl.java @@ -116,26 +116,6 @@ public String mapHealthIDToBeneficiary(String request) throws FHIRException { return new Gson().toJson(health); } - // public String getBenHealthID(Long benRegID) { - // Map resMap = new HashMap<>(); - - // ArrayList healthDetailsList = benHealthIDMappingRepo.getHealthDetails(benRegID); - // ArrayList healthDetailsWithAbhaList = new ArrayList<>(); - - // if(healthDetailsList.size() > 0) { - // for(BenHealthIDMapping healthDetails: healthDetailsList) { - // String healthIdNumber = healthDetails.getHealthIdNumber(); - // boolean isNewAbha = benHealthIDMappingRepo.getIsNewAbha(healthIdNumber); - // healthDetails.setNewAbha(isNewAbha); - - // healthDetailsWithAbhaList.add(healthDetails); - // } - // } - // resMap.put("BenHealthDetails", new Gson().toJson(healthDetailsWithAbhaList)); - - // return resMap.toString(); - // } - public String getBenHealthID(Long benRegID) { List healthDetailsList = benHealthIDMappingRepo.getHealthDetails(benRegID); From b1692c84a0d040a3799d78b084796a654bc0a091 Mon Sep 17 00:00:00 2001 From: Vanitha Date: Fri, 13 Jun 2025 11:03:51 +0530 Subject: [PATCH 3/3] Replace the original application.properties --- src/main/resources/application.properties | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 4a79594..5e7d9fb 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -14,13 +14,21 @@ spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.Ph spring.jpa.hibernate.naming_strategy=org.hibernate.cfg.EJB3NamingStrategy spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect spring.jackson.serialization.fail-on-empty-beans=false -spring.jpa.hibernate.ddl-auto=update + +# Add these under your existing jackson property +spring.jackson.default-property-inclusion=NON_NULL +spring.jackson.deserialization.fail-on-unknown-properties=false +spring.jackson.serialization.write-dates-as-timestamps=true +spring.jackson.parser.allow-unquoted-field-names=true +spring.jackson.parser.allow-single-quotes=true +spring.jpa.hibernate.ddl-auto=none + spring.jpa.hibernate.show_sql=true spring.jpa.hibernate.format_sql=true spring.session.store-type=redis -spring.redis.host=172.17.0.1 +spring.redis.host=localhost spring.redis.password= spring.redis.port=6379 ## Below values are needed for extending the expiry time and extend expiry time. @@ -31,7 +39,7 @@ enableIPValidation=false ## quartz setup - fhir resource - bundle generation start-FHIR-resource-bundle-scheduler=true -cron-scheduler-FHIR-resource-bundle=0 0/1 * * * ? * +cron-scheduler-FHIR-resource-bundle=0 0/5 * * * ? * ## quartz setup - patient profile creation start-FHIR-patient-profile-scheduler=false @@ -46,7 +54,7 @@ cron-scheduler-eAushadhi-stock-entry=0 02 11 * * ? * eAushadhiDispensePageSize=10 -start-parsing-atom-feed-clinical-scheduler=true +start-parsing-atom-feed-clinical-scheduler=false cron-scheduler-atom-clinical-feed=0 0/1 * * * ? *