From 3814860768b0e07f19e807b7b3e7a432491bb741 Mon Sep 17 00:00:00 2001 From: KA40094929 Date: Thu, 19 Sep 2024 18:49:27 +0530 Subject: [PATCH 1/7] Abdm Facility fetch services changes --- src/main/environment/common_ci.properties | 4 + src/main/environment/common_dev.properties | 4 + .../environment/common_example.properties | 4 + src/main/environment/common_test.properties | 4 + .../facility/FacilityController.java | 56 ++++++++++++++ .../service/facility/FacilityService.java | 9 +++ .../service/facility/FacilityServiceImpl.java | 77 +++++++++++++++++++ 7 files changed, 158 insertions(+) create mode 100644 src/main/java/com/wipro/fhir/controller/facility/FacilityController.java create mode 100644 src/main/java/com/wipro/fhir/service/facility/FacilityService.java create mode 100644 src/main/java/com/wipro/fhir/service/facility/FacilityServiceImpl.java diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index c21241d..816b47f 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -77,6 +77,10 @@ abdmGenerateMobileOTP=@env.ABDM_HEALTH_ID_BASE_URL@/api/v1/registration/aadhaar/ abdmConfirmAadhaarBio=@env.ABDM_HEALTH_ID_BASE_URL@/api/v1/auth/confirmWithAadhaarBio abdmAccountProfile=@env.ABDM_Account_ID_BASE_URL@/api/v1/account/profile +##ABDM Facility services +getAbdmFacilityServicies= https://dev.abdm.gov.in/devservice/v1/bridges/getServices + + abhaMode=sbx #logging.pattern.level=DEBUG diff --git a/src/main/environment/common_dev.properties b/src/main/environment/common_dev.properties index 6eeea6c..798efa1 100644 --- a/src/main/environment/common_dev.properties +++ b/src/main/environment/common_dev.properties @@ -77,6 +77,10 @@ abdmGenerateMobileOTP=@env.ABDM_HEALTH_ID_BASE_URL@/api/v1/registration/aadhaar/ abdmConfirmAadhaarBio=@env.ABDM_HEALTH_ID_BASE_URL@/api/v1/auth/confirmWithAadhaarBio abdmAccountProfile=@env.ABDM_Account_ID_BASE_URL@/api/v1/account/profile +##ABDM Facility services +getAbdmFacilityServicies= https://dev.abdm.gov.in/devservice/v1/bridges/getServices + + abhaMode=sbx #logging.pattern.level=DEBUG diff --git a/src/main/environment/common_example.properties b/src/main/environment/common_example.properties index eb1f02c..a3d7d7d 100644 --- a/src/main/environment/common_example.properties +++ b/src/main/environment/common_example.properties @@ -77,6 +77,10 @@ abdmGenerateMobileOTP=@env.ABDM_HEALTH_ID_BASE_URL@/api/v1/registration/aadhaar/ abdmConfirmAadhaarBio=@env.ABDM_HEALTH_ID_BASE_URL@/api/v1/auth/confirmWithAadhaarBio abdmAccountProfile=@env.ABDM_Account_ID_BASE_URL@/api/v1/account/profile +##ABDM Facility services +getAbdmFacilityServicies= https://dev.abdm.gov.in/devservice/v1/bridges/getServices + + abhaMode=sbx #logging.pattern.level=DEBUG diff --git a/src/main/environment/common_test.properties b/src/main/environment/common_test.properties index 6eeea6c..798efa1 100644 --- a/src/main/environment/common_test.properties +++ b/src/main/environment/common_test.properties @@ -77,6 +77,10 @@ abdmGenerateMobileOTP=@env.ABDM_HEALTH_ID_BASE_URL@/api/v1/registration/aadhaar/ abdmConfirmAadhaarBio=@env.ABDM_HEALTH_ID_BASE_URL@/api/v1/auth/confirmWithAadhaarBio abdmAccountProfile=@env.ABDM_Account_ID_BASE_URL@/api/v1/account/profile +##ABDM Facility services +getAbdmFacilityServicies= https://dev.abdm.gov.in/devservice/v1/bridges/getServices + + abhaMode=sbx #logging.pattern.level=DEBUG diff --git a/src/main/java/com/wipro/fhir/controller/facility/FacilityController.java b/src/main/java/com/wipro/fhir/controller/facility/FacilityController.java new file mode 100644 index 0000000..15e489a --- /dev/null +++ b/src/main/java/com/wipro/fhir/controller/facility/FacilityController.java @@ -0,0 +1,56 @@ +package com.wipro.fhir.controller.facility; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.wipro.fhir.data.request_handler.ResourceRequestHandler; +import com.wipro.fhir.service.facility.FacilityService; +import com.wipro.fhir.utils.exception.FHIRException; +import com.wipro.fhir.utils.response.OutputResponse; + +import io.swagger.v3.oas.annotations.Operation; + + +@CrossOrigin +@RestController +@RequestMapping(value = "/facility", headers = "Authorization") +public class FacilityController { + + + @Autowired + private FacilityService facilityService; + + Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + @CrossOrigin + @Operation(summary = "Get ABDM Registered Facilities") + @GetMapping(value = { "/getAbdmRegisteredFacilities" }) + public String getStoreStockDetails(@RequestHeader(value = "Authorization") String Authorization) { + + OutputResponse response = new OutputResponse(); + + try { + + String resp = facilityService.fetchRegisteredFacilities(); + + response.setResponse(resp); + + } catch (FHIRException e) { + + response.setError(5000, e.getMessage()); + logger.error(e.getMessage()); + } + logger.info("Get ABDM Registered facilities API response" + response.toString()); + return response.toString(); + } + + +} diff --git a/src/main/java/com/wipro/fhir/service/facility/FacilityService.java b/src/main/java/com/wipro/fhir/service/facility/FacilityService.java new file mode 100644 index 0000000..d1235c8 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/facility/FacilityService.java @@ -0,0 +1,9 @@ +package com.wipro.fhir.service.facility; + +import com.wipro.fhir.utils.exception.FHIRException; + +public interface FacilityService { + + String fetchRegisteredFacilities() throws FHIRException; + +} diff --git a/src/main/java/com/wipro/fhir/service/facility/FacilityServiceImpl.java b/src/main/java/com/wipro/fhir/service/facility/FacilityServiceImpl.java new file mode 100644 index 0000000..859d97b --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/facility/FacilityServiceImpl.java @@ -0,0 +1,77 @@ +package com.wipro.fhir.service.facility; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpHeaders; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.wipro.fhir.service.ndhm.Common_NDHMService; +import com.wipro.fhir.service.ndhm.GenerateSession_NDHMService; +import com.wipro.fhir.utils.exception.FHIRException; +import com.wipro.fhir.utils.http.HttpUtils; +@Service +public class FacilityServiceImpl implements FacilityService{ + + @Value("${getAbdmFacilityServicies}") + private String getAbdmServicies; + + @Autowired + private HttpUtils httpUtils; + + @Autowired + private Common_NDHMService common_NDHMService; + + @Autowired + private GenerateSession_NDHMService generateSession_NDHM; + + @Override + public String fetchRegisteredFacilities() throws FHIRException { + String res = null; + List> list = new ArrayList<>(); + HashMap map = new HashMap<>(); + try { + String ndhmAuthToken = generateSession_NDHM.getNDHMAuthToken(); + HttpHeaders headers = common_NDHMService.getHeaders(ndhmAuthToken); + ResponseEntity responseEntity = httpUtils.getWithResponseEntity(getAbdmServicies, headers); + String responseStrLogin = common_NDHMService.getBody(responseEntity); + if (responseStrLogin != null) { + JsonObject jsnOBJ = new JsonObject(); + JsonParser jsnParser = new JsonParser(); + JsonElement jsnElmnt = jsnParser.parse(responseStrLogin); + jsnOBJ = jsnElmnt.getAsJsonObject(); + JsonElement jsonElement = jsnOBJ.get("services"); + JsonArray asJsonArray = jsonElement.getAsJsonArray(); + for (JsonElement jsonElement2 : asJsonArray) { + JsonObject asJsonObject = jsonElement2.getAsJsonObject(); + String types = asJsonObject.get("types").toString(); + if(null != types && types.contains("HIP")) { + map = new HashMap<>(); + map.put("id", asJsonObject.get("id")); + map.put("name", asJsonObject.get("name")); + list.add(map); + } + } + res = new Gson().toJson(list); + } else + res = "NDHM_FHIR Error while getting facilities"; + } + + catch (Exception e) { + throw new FHIRException("NDHM_FHIR Error while accessing ABDM API" + e.getMessage()); + } + return res; + } + +} + \ No newline at end of file From a2224b4c48c1b7811cc88d59d4b1a0d6afe233af Mon Sep 17 00:00:00 2001 From: KA40094929 Date: Thu, 26 Sep 2024 17:24:38 +0530 Subject: [PATCH 2/7] facility save after carecontext and patientcarecontextx update --- src/main/environment/common_ci.properties | 12 ++++++--- src/main/environment/common_dev.properties | 12 ++++++--- .../environment/common_example.properties | 12 ++++++--- src/main/environment/common_test.properties | 12 ++++++--- .../carecontext/CareContextController.java | 5 ++-- .../data/mongo/care_context/CareContexts.java | 22 ++++++++++++++++ .../GenerateOTPForCareContextAndValidate.java | 14 +++++++++++ .../repo/healthID/BenHealthIDMappingRepo.java | 16 +++++++----- .../care_context/CareContextServiceImpl.java | 17 ++++++++++--- .../service/common/CommonServiceImpl.java | 25 +++++++++++++++++-- .../ndhm/LinkCareContext_NDHMServiceImpl.java | 10 +++++--- 11 files changed, 125 insertions(+), 32 deletions(-) diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index 816b47f..50051d4 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -36,7 +36,11 @@ eAushadhiDummy=yes ##NDHM ABHA API clientID=@env.NDHM_ABHA_CLIENT_ID@ clientSecret=@env.NDHM_ABHA_CLIENT_SECRET_KEY@ -ndhmuserAuthenticate=@env.ABDM_BASE_URL@/gateway/v1/sessions + +##Default ABDM Facility ID +abdmFacilityId= @env.ABDM_FACILITY_ID@ + +ndhmuserAuthenticate=@env.ABDM_BASE_URL@/gateway/v0.5/sessions ndhmGenerateOTP=@env.ABDM_HEALTH_ID_BASE_URL@/api/v1/registration/mobile/generateOtp ndhmVerifyOTP=@env.ABDM_HEALTH_ID_BASE_URL@/api/v1/registration/mobile/verifyOtp ndhmCreateHealthID=@env.ABDM_HEALTH_ID_BASE_URL@/api/v1/registration/mobile/createHealthId @@ -53,9 +57,9 @@ abdmcreateHealthIdWithPreVerified= @env.ABDM_HEALTH_ID_BASE_URL@/api/v1/registra ##CareContext Creation API -generateOTPForCareContext=@env.ABDM_BASE_URL@/gateway/v1/users/auth/init -addCareContext = @env.ABDM_BASE_URL@/gateway/v1/links/link/add-contexts -validateOTPForCareContext=@env.ABDM_BASE_URL@/gateway/v1/users/auth/confirm +generateOTPForCareContext=@env.ABDM_BASE_URL@/gateway/v0.5/users/auth/init +addCareContext = @env.ABDM_BASE_URL@/gateway/v0.5/links/link/add-contexts +validateOTPForCareContext=@env.ABDM_BASE_URL@/gateway/v0.5/users/auth/confirm ##ABHA Card API ## Auth init - aadhar / mobile diff --git a/src/main/environment/common_dev.properties b/src/main/environment/common_dev.properties index 798efa1..f7484b6 100644 --- a/src/main/environment/common_dev.properties +++ b/src/main/environment/common_dev.properties @@ -36,7 +36,11 @@ eAushadhiDummy=yes ##NDHM ABHA API clientID= clientSecret= -ndhmuserAuthenticate=https://dev.abdm.gov.in/gateway/v1/sessions + +##Default ABDM Facility ID +abdmFacilityId= + +ndhmuserAuthenticate=https://dev.abdm.gov.in/gateway/v0.5/sessions ndhmGenerateOTP=https://healthidsbx.abdm.gov.in/api/v1/registration/mobile/generateOtp ndhmVerifyOTP=https://healthidsbx.abdm.gov.in/api/v1/registration/mobile/verifyOtp ndhmCreateHealthID=https://healthidsbx.abdm.gov.in/api/v1/registration/mobile/createHealthId @@ -53,9 +57,9 @@ abdmcreateHealthIdWithPreVerified= https://healthidsbx.abdm.gov.in/api/v1/regist ##CareContext Creation API -generateOTPForCareContext=https://dev.abdm.gov.in/gateway/v1/users/auth/init -addCareContext = https://dev.abdm.gov.in/gateway/v1/links/link/add-contexts -validateOTPForCareContext=https://dev.abdm.gov.in/gateway/v1/users/auth/confirm +generateOTPForCareContext=https://dev.abdm.gov.in/gateway/v0.5/users/auth/init +addCareContext = https://dev.abdm.gov.in/gateway/v0.5/links/link/add-contexts +validateOTPForCareContext=https://dev.abdm.gov.in/gateway/v0.5/users/auth/confirm ##ABHA Card API ## Auth init - aadhar / mobile diff --git a/src/main/environment/common_example.properties b/src/main/environment/common_example.properties index a3d7d7d..dee5c20 100644 --- a/src/main/environment/common_example.properties +++ b/src/main/environment/common_example.properties @@ -36,7 +36,11 @@ eAushadhiDummy=yes ##NDHM ABHA API clientID= clientSecret= -ndhmuserAuthenticate=https://dev.abdm.gov.in/gateway/v1/sessions + +##Default ABDM Facility ID +abdmFacilityId= + +ndhmuserAuthenticate=https://dev.abdm.gov.in/gateway/v0.5/sessions ndhmGenerateOTP=https://healthidsbx.abdm.gov.in/api/v1/registration/mobile/generateOtp ndhmVerifyOTP=https://healthidsbx.abdm.gov.in/api/v1/registration/mobile/verifyOtp ndhmCreateHealthID=https://healthidsbx.abdm.gov.in/api/v1/registration/mobile/createHealthId @@ -53,9 +57,9 @@ abdmcreateHealthIdWithPreVerified= https://healthidsbx.abdm.gov.in/api/v1/regist ##CareContext Creation API -generateOTPForCareContext=https://dev.abdm.gov.in/gateway/v1/users/auth/init -addCareContext = https://dev.abdm.gov.in/gateway/v1/links/link/add-contexts -validateOTPForCareContext=https://dev.abdm.gov.in/gateway/v1/users/auth/confirm +generateOTPForCareContext=https://dev.abdm.gov.in/gateway/v0.5/users/auth/init +addCareContext = https://dev.abdm.gov.in/gateway/v0.5/links/link/add-contexts +validateOTPForCareContext=https://dev.abdm.gov.in/gateway/v0.5/users/auth/confirm ##ABHA Card API ## Auth init - aadhar / mobile diff --git a/src/main/environment/common_test.properties b/src/main/environment/common_test.properties index 798efa1..f7484b6 100644 --- a/src/main/environment/common_test.properties +++ b/src/main/environment/common_test.properties @@ -36,7 +36,11 @@ eAushadhiDummy=yes ##NDHM ABHA API clientID= clientSecret= -ndhmuserAuthenticate=https://dev.abdm.gov.in/gateway/v1/sessions + +##Default ABDM Facility ID +abdmFacilityId= + +ndhmuserAuthenticate=https://dev.abdm.gov.in/gateway/v0.5/sessions ndhmGenerateOTP=https://healthidsbx.abdm.gov.in/api/v1/registration/mobile/generateOtp ndhmVerifyOTP=https://healthidsbx.abdm.gov.in/api/v1/registration/mobile/verifyOtp ndhmCreateHealthID=https://healthidsbx.abdm.gov.in/api/v1/registration/mobile/createHealthId @@ -53,9 +57,9 @@ abdmcreateHealthIdWithPreVerified= https://healthidsbx.abdm.gov.in/api/v1/regist ##CareContext Creation API -generateOTPForCareContext=https://dev.abdm.gov.in/gateway/v1/users/auth/init -addCareContext = https://dev.abdm.gov.in/gateway/v1/links/link/add-contexts -validateOTPForCareContext=https://dev.abdm.gov.in/gateway/v1/users/auth/confirm +generateOTPForCareContext=https://dev.abdm.gov.in/gateway/v0.5/users/auth/init +addCareContext = https://dev.abdm.gov.in/gateway/v0.5/links/link/add-contexts +validateOTPForCareContext=https://dev.abdm.gov.in/gateway/v0.5/users/auth/confirm ##ABHA Card API ## Auth init - aadhar / mobile diff --git a/src/main/java/com/wipro/fhir/controller/carecontext/CareContextController.java b/src/main/java/com/wipro/fhir/controller/carecontext/CareContextController.java index 91d95c0..52f1cd3 100644 --- a/src/main/java/com/wipro/fhir/controller/carecontext/CareContextController.java +++ b/src/main/java/com/wipro/fhir/controller/carecontext/CareContextController.java @@ -50,7 +50,7 @@ public class CareContextController { @Operation(summary = "Generate OTP for care context linking") @PostMapping(value = { "/generateOTPForCareContext" }) public String generateOTP( - @Param(value = "{\"healthID\":\"String\",\"authenticationMode\":\"String\",\"healthIdNumber\":\"String\"}") @RequestBody String request, + @Param(value = "{\"healthID\":\"String\",\"authenticationMode\":\"String\",\"healthIdNumber\":\"String\", \"abdmFacilityId\":\"String\", \"abdmFacilityName\":\"String\" }") @RequestBody String request, @RequestHeader(value = "Authorization") String Authorization) { OutputResponse response = new OutputResponse(); @@ -75,7 +75,8 @@ public String generateOTP( public String validateOTPAndCreateCareContext( @Param(value = "{\"healthID\":\"String\",\"visitCode\\\":\\\"String\\\",\"beneficiaryID\\\":\\\"String\\\"" + ",\"beneficiaryRegID\\\":\\\"String\\\",\"otp\\\":\\\"String\\\"" - + ",\\\"txnId\\\":\\\"String\\\",\\\"visitcategory\\\":\\\"String\\\",\"healthIdNumber\":\"String\"}") @RequestBody String request, + + ",\\\"txnId\\\":\\\"String\\\",\\\"visitcategory\\\":\\\"String\\\",\"healthIdNumber\":\"String\", " + + "\\\"abdmFacilityId\\\":\\\"String\\\", \\\"abdmFacilityName\\\":\\\"String\\\"}") @RequestBody String request, @RequestHeader(value = "Authorization") String Authorization) { OutputResponse response = new OutputResponse(); diff --git a/src/main/java/com/wipro/fhir/data/mongo/care_context/CareContexts.java b/src/main/java/com/wipro/fhir/data/mongo/care_context/CareContexts.java index 66fb371..dc5d14a 100644 --- a/src/main/java/com/wipro/fhir/data/mongo/care_context/CareContexts.java +++ b/src/main/java/com/wipro/fhir/data/mongo/care_context/CareContexts.java @@ -30,6 +30,12 @@ public class CareContexts { @Expose private String Display; + + @Expose + private String careContextLinkedDate; + + @Expose + private String abdmFacilityId; public String getReferenceNumber() { return ReferenceNumber; @@ -47,4 +53,20 @@ public void setDisplay(String display) { Display = display; } + public String getCareContextLinkedDate() { + return careContextLinkedDate; + } + + public void setCareContextLinkedDate(String careContextLinkedDate) { + this.careContextLinkedDate = careContextLinkedDate; + } + + public String getAbdmFacilityId() { + return abdmFacilityId; + } + + public void setAbdmFacilityId(String abdmFacilityId) { + this.abdmFacilityId = abdmFacilityId; + } + } diff --git a/src/main/java/com/wipro/fhir/data/mongo/care_context/GenerateOTPForCareContextAndValidate.java b/src/main/java/com/wipro/fhir/data/mongo/care_context/GenerateOTPForCareContextAndValidate.java index 84231a5..77491f6 100644 --- a/src/main/java/com/wipro/fhir/data/mongo/care_context/GenerateOTPForCareContextAndValidate.java +++ b/src/main/java/com/wipro/fhir/data/mongo/care_context/GenerateOTPForCareContextAndValidate.java @@ -26,6 +26,8 @@ public class GenerateOTPForCareContextAndValidate {//give common name String authenticationMode; String healthID; String healthIdNumber; + String abdmFacilityName; + String abdmFacilityId; public String getAuthenticationMode() { return authenticationMode; } @@ -44,5 +46,17 @@ public String getHealthIdNumber() { public void setHealthIdNumber(String healthIdNumber) { this.healthIdNumber = healthIdNumber; } + public String getAbdmFacilityName() { + return abdmFacilityName; + } + public void setAbdmFacilityName(String abdmFacilityName) { + this.abdmFacilityName = abdmFacilityName; + } + public String getAbdmFacilityId() { + return abdmFacilityId; + } + public void setAbdmFacilityId(String abdmFacilityId) { + this.abdmFacilityId = abdmFacilityId; + } } 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 0989777..d9e80be 100644 --- a/src/main/java/com/wipro/fhir/repo/healthID/BenHealthIDMappingRepo.java +++ b/src/main/java/com/wipro/fhir/repo/healthID/BenHealthIDMappingRepo.java @@ -46,19 +46,19 @@ public interface BenHealthIDMappingRepo extends CrudRepository getLinkedHealthIDForVisit(@Param("visitCode") Long visitCode); @@ -66,4 +66,8 @@ public interface BenHealthIDMappingRepo extends CrudRepository ccList = new ArrayList<>(); @@ -318,7 +329,17 @@ public int addCareContextToMongo(PatientDemographic pDemo, PatientEligibleForRes cc.setReferenceNumber(pVisit.getVisitCode() != null ? pVisit.getVisitCode().toString() : null); cc.setDisplay(pVisit.getVisitCategory() != null ? pVisit.getVisitCategory().toString() : null); - + + if (jsnOBJ.has("AbdmFacilityID") && jsnOBJ.get("AbdmFacilityID").isJsonNull() && + jsnOBJ.get("AbdmFacilityID").getAsString().isEmpty()) { + cc.setAbdmFacilityId(jsnOBJ.get("AbdmFacilityID").toString()); + } + if (jsnOBJ.has("CarecontextLinkDate") && jsnOBJ.get("CarecontextLinkDate").isJsonNull() && + jsnOBJ.get("CarecontextLinkDate").getAsString().isEmpty()) { + cc.setCareContextLinkedDate(jsnOBJ.get("CarecontextLinkDate").toString()); + } + + PatientCareContexts pcc; if (pDemo.getBeneficiaryID() != null) { diff --git a/src/main/java/com/wipro/fhir/service/ndhm/LinkCareContext_NDHMServiceImpl.java b/src/main/java/com/wipro/fhir/service/ndhm/LinkCareContext_NDHMServiceImpl.java index 2c4ecf6..86ceeec 100644 --- a/src/main/java/com/wipro/fhir/service/ndhm/LinkCareContext_NDHMServiceImpl.java +++ b/src/main/java/com/wipro/fhir/service/ndhm/LinkCareContext_NDHMServiceImpl.java @@ -55,8 +55,8 @@ @Service public class LinkCareContext_NDHMServiceImpl implements LinkCareContext_NDHMService { private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); - @Value("${clientID}") - private String clientID; + @Value("${abdmFacilityId}") + private String abdmFacilityId; @Value("${abhaMode}") private String abhaMode; @Value("${clientSecret}") @@ -85,7 +85,11 @@ public String generateOTPForCareContext(String request) throws FHIRException { NDHMRequest obj = common_NDHMService.getRequestIDAndTimeStamp(); Requester requester = new Requester(); - requester.setId(clientID); + if(null != genOTP.getAbdmFacilityId() && null != genOTP.getAbdmFacilityName()) { + requester.setId(genOTP.getAbdmFacilityId()); + } else { + requester.setId(abdmFacilityId); + } requester.setType("HIP"); JsonParser jsnParser = new JsonParser(); Query query = new Query(); From 1a28c2bce4b9cc3082f84a5b32f6c5833464a165 Mon Sep 17 00:00:00 2001 From: KA40094929 Date: Tue, 8 Oct 2024 12:44:24 +0530 Subject: [PATCH 3/7] FacilityId save in mongo db and Variable declaration correction --- .../config/BlockingHttpMethodInterceptor.java | 33 --- .../carecontext/CareContextController.java | 3 +- .../facility/FacilityController.java | 24 +- .../fhir/data/e_aushdhi/T_PatientIssue.java | 209 +----------------- .../amrit_resource/AMRIT_ResourceMongo.java | 74 +------ .../mongo/amrit_resource/TempCollection.java | 64 +----- .../care_context/PatientCareContexts.java | 108 +-------- .../care_context/SaveFacilityIdForVisit.java | 13 ++ .../fhir/data/patient/PatientDemographic.java | 8 +- .../TRG_PatientResourceData.java | 79 +------ .../PatientEligibleForResourceCreation.java | 83 +------ .../ResourceRequestHandler.java | 115 +--------- .../AllergyIntoleranceDataModel.java | 12 +- .../resource_model/AppointmentDataModel.java | 12 +- .../ConditionDiagnosisDataModel.java | 12 +- .../DiagnosticReportDataModel.java | 12 +- .../resource_model/EncounterDataModel.java | 12 +- .../FamilyMemberHistoryDataModel.java | 12 +- .../LabTestAndComponentModel.java | 12 +- .../MedicationRequestDataModel.java | 12 +- .../VitalsAnthropometryModel.java | 8 +- ...atientEligibleForResourceCreationRepo.java | 45 ++-- .../repo/healthID/BenHealthIDMappingRepo.java | 22 +- .../amrit_resource/TempCollectionRepo.java | 3 +- .../TRG_PatientResourceData_Repo.java | 3 +- .../service/api_channel/APIChannelImpl.java | 3 +- .../care_context/CareContextServiceImpl.java | 12 +- .../service/common/CommonServiceImpl.java | 118 +++++----- .../service/facility/FacilityService.java | 2 + .../service/facility/FacilityServiceImpl.java | 30 +++ .../AllergyIntoleranceResource.java | 3 +- .../resource_model/AppointmentResource.java | 1 + .../resource_model/ConditionResource.java | 1 + .../DiagnosticReportResource.java | 1 + .../resource_model/EncounterResource.java | 1 + .../FamilyMemberHistoryResource.java | 1 + .../MedicationRequestResource.java | 1 + .../resource_model/ObservationResource.java | 1 + .../resource_model/PatientResource.java | 1 + .../utils/http/HTTPRequestInterceptor.java | 12 +- 40 files changed, 295 insertions(+), 883 deletions(-) delete mode 100644 src/main/java/com/wipro/fhir/config/BlockingHttpMethodInterceptor.java create mode 100644 src/main/java/com/wipro/fhir/data/mongo/care_context/SaveFacilityIdForVisit.java diff --git a/src/main/java/com/wipro/fhir/config/BlockingHttpMethodInterceptor.java b/src/main/java/com/wipro/fhir/config/BlockingHttpMethodInterceptor.java deleted file mode 100644 index 135ecbf..0000000 --- a/src/main/java/com/wipro/fhir/config/BlockingHttpMethodInterceptor.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.wipro.fhir.config; - -import org.springframework.web.servlet.HandlerInterceptor; -import org.springframework.web.servlet.ModelAndView; - -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; - -public class BlockingHttpMethodInterceptor implements HandlerInterceptor { - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { - String method = request.getMethod(); - if (!("GET".equals(method) || "POST".equals(method))) { - response.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED); - return false; - } - return true; -} - - @Override - public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, - ModelAndView modelAndView) throws Exception { - // TODO Auto-generated method stub - - } - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) - throws Exception { - // TODO Auto-generated method stub - - } -} diff --git a/src/main/java/com/wipro/fhir/controller/carecontext/CareContextController.java b/src/main/java/com/wipro/fhir/controller/carecontext/CareContextController.java index 52f1cd3..2c119a2 100644 --- a/src/main/java/com/wipro/fhir/controller/carecontext/CareContextController.java +++ b/src/main/java/com/wipro/fhir/controller/carecontext/CareContextController.java @@ -75,8 +75,7 @@ public String generateOTP( public String validateOTPAndCreateCareContext( @Param(value = "{\"healthID\":\"String\",\"visitCode\\\":\\\"String\\\",\"beneficiaryID\\\":\\\"String\\\"" + ",\"beneficiaryRegID\\\":\\\"String\\\",\"otp\\\":\\\"String\\\"" - + ",\\\"txnId\\\":\\\"String\\\",\\\"visitcategory\\\":\\\"String\\\",\"healthIdNumber\":\"String\", " - + "\\\"abdmFacilityId\\\":\\\"String\\\", \\\"abdmFacilityName\\\":\\\"String\\\"}") @RequestBody String request, + + ",\\\"txnId\\\":\\\"String\\\",\\\"visitcategory\\\":\\\"String\\\",\"healthIdNumber\":\"String\"}") @RequestBody String request, @RequestHeader(value = "Authorization") String Authorization) { OutputResponse response = new OutputResponse(); diff --git a/src/main/java/com/wipro/fhir/controller/facility/FacilityController.java b/src/main/java/com/wipro/fhir/controller/facility/FacilityController.java index 15e489a..3efafba 100644 --- a/src/main/java/com/wipro/fhir/controller/facility/FacilityController.java +++ b/src/main/java/com/wipro/fhir/controller/facility/FacilityController.java @@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.wipro.fhir.data.request_handler.ResourceRequestHandler; @@ -33,7 +34,7 @@ public class FacilityController { @CrossOrigin @Operation(summary = "Get ABDM Registered Facilities") @GetMapping(value = { "/getAbdmRegisteredFacilities" }) - public String getStoreStockDetails(@RequestHeader(value = "Authorization") String Authorization) { + public String getAbdmRegisteredFacilities(@RequestHeader(value = "Authorization") String Authorization) { OutputResponse response = new OutputResponse(); @@ -51,6 +52,27 @@ public String getStoreStockDetails(@RequestHeader(value = "Authorization") Strin logger.info("Get ABDM Registered facilities API response" + response.toString()); return response.toString(); } + + + @CrossOrigin + @Operation(summary = "Get ABDM Registered Facilities") + @PostMapping(value = { "/saveAbdmFacilityId" }) + public String saveAbdmFacilityForVisit(@RequestHeader(value = "Authorization") String Authorization, @RequestBody() String reqObj) { + + OutputResponse response = new OutputResponse(); + + try { + + String resp = facilityService.saveAbdmFacilityId(reqObj); + response.setResponse(resp); + } catch (FHIRException e) { + + response.setError(5000, e.getMessage()); + logger.error(e.getMessage()); + } + logger.info("ABDM save Facility ID response" + response.toString()); + return response.toString(); + } } diff --git a/src/main/java/com/wipro/fhir/data/e_aushdhi/T_PatientIssue.java b/src/main/java/com/wipro/fhir/data/e_aushdhi/T_PatientIssue.java index d2362a4..7729fc7 100644 --- a/src/main/java/com/wipro/fhir/data/e_aushdhi/T_PatientIssue.java +++ b/src/main/java/com/wipro/fhir/data/e_aushdhi/T_PatientIssue.java @@ -22,6 +22,7 @@ package com.wipro.fhir.data.e_aushdhi; +import java.math.BigInteger; import java.util.Date; @@ -32,6 +33,7 @@ import jakarta.persistence.Id; import jakarta.persistence.Table; import jakarta.persistence.Transient; +import lombok.Data; import com.google.gson.annotations.Expose; @@ -39,7 +41,7 @@ @Entity @Table(name = "t_patientissue") - +@Data public class T_PatientIssue { @Id @@ -54,7 +56,7 @@ public class T_PatientIssue { @Expose @Column(name = "BeneficiaryRegID") - private Long benRegID; + private BigInteger benRegID; @Expose @Column(name = "FacilityID") @@ -144,208 +146,5 @@ public class T_PatientIssue { @Transient private Long beneficiaryID; - - - public Long getPatientIssueID() { - return patientIssueID; - } - - public void setPatientIssueID(Long patientIssueID) { - this.patientIssueID = patientIssueID; - } - - public Long getVanSerialNo() { - return vanSerialNo; - } - - public void setVanSerialNo(Long vanSerialNo) { - this.vanSerialNo = vanSerialNo; - } - - public Long getBenRegID() { - return benRegID; - } - - public void setBenRegID(Long benRegID) { - this.benRegID = benRegID; - } - - public Integer getFacilityID() { - return facilityID; - } - - public void setFacilityID(Integer facilityID) { - this.facilityID = facilityID; - } - - public Integer getSyncFacilityID() { - return syncFacilityID; - } - - public void setSyncFacilityID(Integer syncFacilityID) { - this.syncFacilityID = syncFacilityID; - } - - public Integer getVisitID() { - return visitID; - } - - public void setVisitID(Integer visitID) { - this.visitID = visitID; - } - - public String getPatientName() { - return patientName; - } - - public void setPatientName(String patientName) { - this.patientName = patientName; - } - - public Integer getAge() { - return age; - } - - public void setAge(Integer age) { - this.age = age; - } - - public String getGender() { - return gender; - } - - public void setGender(String gender) { - this.gender = gender; - } - - public String getDoctorName() { - return doctorName; - } - - public void setDoctorName(String doctorName) { - this.doctorName = doctorName; - } - - public Integer getPrescriptionID() { - return prescriptionID; - } - - public void setPrescriptionID(Integer prescriptionID) { - this.prescriptionID = prescriptionID; - } - - public String getReference() { - return reference; - } - - public void setReference(String reference) { - this.reference = reference; - } - - public String getIssueType() { - return issueType; - } - - public void setIssueType(String issueType) { - this.issueType = issueType; - } - - public String getIssuedBy() { - return issuedBy; - } - - public void setIssuedBy(String issuedBy) { - this.issuedBy = issuedBy; - } - - public Integer getProviderServiceMapID() { - return providerServiceMapID; - } - - public void setProviderServiceMapID(Integer providerServiceMapID) { - this.providerServiceMapID = providerServiceMapID; - } - - public Boolean getDeleted() { - return deleted; - } - - public void setDeleted(Boolean deleted) { - this.deleted = deleted; - } - - public Character getProcessed() { - return processed; - } - - public void setProcessed(Character processed) { - this.processed = processed; - } - - public String getCreatedBy() { - return createdBy; - } - - public void setCreatedBy(String createdBy) { - this.createdBy = createdBy; - } - - public Date getCreatedDate() { - return createdDate; - } - - public void setCreatedDate(Date createdDate) { - this.createdDate = createdDate; - } - - public String getModifiedBy() { - return modifiedBy; - } - - public void setModifiedBy(String modifiedBy) { - this.modifiedBy = modifiedBy; - } - - public Date getLastModDate() { - return lastModDate; - } - - public void setLastModDate(Date lastModDate) { - this.lastModDate = lastModDate; - } - - public Long getVisitCode() { - return visitCode; - } - - public void setVisitCode(Long visitCode) { - this.visitCode = visitCode; - } - - public Long getVanID() { - return vanID; - } - - public void setVanID(Long vanID) { - this.vanID = vanID; - } - - public Long getParkingPlaceID() { - return parkingPlaceID; - } - - public void setParkingPlaceID(Long parkingPlaceID) { - this.parkingPlaceID = parkingPlaceID; - } - - public Long getBeneficiaryID() { - return beneficiaryID; - } - - public void setBeneficiaryID(Long beneficiaryID) { - this.beneficiaryID = beneficiaryID; - } - - } diff --git a/src/main/java/com/wipro/fhir/data/mongo/amrit_resource/AMRIT_ResourceMongo.java b/src/main/java/com/wipro/fhir/data/mongo/amrit_resource/AMRIT_ResourceMongo.java index 2a410a6..c1e9e1d 100644 --- a/src/main/java/com/wipro/fhir/data/mongo/amrit_resource/AMRIT_ResourceMongo.java +++ b/src/main/java/com/wipro/fhir/data/mongo/amrit_resource/AMRIT_ResourceMongo.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.data.mongo.amrit_resource; +import java.math.BigInteger; import java.sql.Timestamp; import org.springframework.data.annotation.Id; @@ -29,7 +30,10 @@ import com.google.gson.annotations.Expose; +import lombok.Data; + @Document(collection = "AMRIT_Resource") +@Data public class AMRIT_ResourceMongo { @Id @@ -39,11 +43,11 @@ public class AMRIT_ResourceMongo { @Expose @Field(value = "BeneficiaryRegID") - private Long beneficiaryRegID; + private BigInteger beneficiaryRegID; @Expose @Field(value = "BeneficiaryID") - private Long beneficiaryID; + private BigInteger beneficiaryID; @Expose @Field(value = "NationalHealthID") @@ -51,7 +55,7 @@ public class AMRIT_ResourceMongo { @Expose @Field(value = "VisitCode") - private Long visitCode; + private BigInteger visitCode; @Expose @Field(value = "ResourceType") @@ -65,68 +69,4 @@ public class AMRIT_ResourceMongo { @Field(value = "CreateDate") private Timestamp createDate = new Timestamp(System.currentTimeMillis()); - public Long getBeneficiaryRegID() { - return beneficiaryRegID; - } - - public void setBeneficiaryRegID(Long beneficiaryRegID) { - this.beneficiaryRegID = beneficiaryRegID; - } - - public String getNationalHealthID() { - return nationalHealthID; - } - - public void setNationalHealthID(String nationalHealthID) { - this.nationalHealthID = nationalHealthID; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public Long getBeneficiaryID() { - return beneficiaryID; - } - - public void setBeneficiaryID(Long beneficiaryID) { - this.beneficiaryID = beneficiaryID; - } - - public Long getVisitCode() { - return visitCode; - } - - public void setVisitCode(Long visitCode) { - this.visitCode = visitCode; - } - - public String getResourceType() { - return resourceType; - } - - public void setResourceType(String resourceType) { - this.resourceType = resourceType; - } - - public String getResourceJson() { - return resourceJson; - } - - public void setResourceJson(String resourceJson) { - this.resourceJson = resourceJson; - } - - public Timestamp getCreateDate() { - return createDate; - } - - public void setCreateDate(Timestamp createDate) { - this.createDate = createDate; - } - } diff --git a/src/main/java/com/wipro/fhir/data/mongo/amrit_resource/TempCollection.java b/src/main/java/com/wipro/fhir/data/mongo/amrit_resource/TempCollection.java index 45804e1..f19956c 100644 --- a/src/main/java/com/wipro/fhir/data/mongo/amrit_resource/TempCollection.java +++ b/src/main/java/com/wipro/fhir/data/mongo/amrit_resource/TempCollection.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.data.mongo.amrit_resource; +import java.math.BigInteger; import java.util.Date; import java.util.List; import java.util.Map; @@ -31,7 +32,10 @@ import com.google.gson.annotations.Expose; +import lombok.Data; + @Document(collection = "AMRIT_TempStorage") +@Data public class TempCollection { @Id @@ -41,11 +45,11 @@ public class TempCollection { @Expose @Field(value = "BeneficiaryRegID") - private Long beneficiaryRegID; + private BigInteger beneficiaryRegID; @Expose @Field(value = "VisitCode") - private Long visitCode; + private BigInteger visitCode; @Expose @Field(value = "DataType") @@ -63,60 +67,4 @@ public class TempCollection { @Field(value = "CreateBy") private String createBy; - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public Long getBeneficiaryRegID() { - return beneficiaryRegID; - } - - public void setBeneficiaryRegID(Long beneficiaryRegID) { - this.beneficiaryRegID = beneficiaryRegID; - } - - public Long getVisitCode() { - return visitCode; - } - - public void setVisitCode(Long visitCode) { - this.visitCode = visitCode; - } - - public String getDataType() { - return dataType; - } - - public void setDataType(String dataType) { - this.dataType = dataType; - } - - public Map> getDataJson() { - return dataJson; - } - - public void setDataJson(Map> dataJson) { - this.dataJson = dataJson; - } - - public Date getCreateDate() { - return createDate; - } - - public void setCreateDate(Date createDate) { - this.createDate = createDate; - } - - public String getCreateBy() { - return createBy; - } - - public void setCreateBy(String createBy) { - this.createBy = createBy; - } - } diff --git a/src/main/java/com/wipro/fhir/data/mongo/care_context/PatientCareContexts.java b/src/main/java/com/wipro/fhir/data/mongo/care_context/PatientCareContexts.java index bff86d0..efe0597 100644 --- a/src/main/java/com/wipro/fhir/data/mongo/care_context/PatientCareContexts.java +++ b/src/main/java/com/wipro/fhir/data/mongo/care_context/PatientCareContexts.java @@ -29,7 +29,10 @@ import com.google.gson.annotations.Expose; +import lombok.Data; + @Document(collection = "PatientCareContexts") +@Data public class PatientCareContexts { @Id @@ -73,108 +76,13 @@ public class PatientCareContexts { @Field(value = "HealthId") private String HealthId; - @Expose - @Field(value = "careContexts") - private String careContextsList; +// @Expose +// @Field(value = "careContexts") +// private String careContextsList; @Expose - @Field(value = "careContextsListTemp") - private ArrayList careContextsListTemp; - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - - public String getPhoneNumber() { - return phoneNumber; - } - - public void setPhoneNumber(String phoneNumber) { - this.phoneNumber = phoneNumber; - } - - public String getIdentifier() { - return identifier; - } - - public void setIdentifier(String identifier) { - this.identifier = identifier; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getCaseReferenceNumber() { - return caseReferenceNumber; - } - - public void setCaseReferenceNumber(String caseReferenceNumber) { - this.caseReferenceNumber = caseReferenceNumber; - } - - public String getGender() { - return gender; - } - - public void setGender(String gender) { - this.gender = gender; - } - - public String getYearOfBirth() { - return yearOfBirth; - } - - public void setYearOfBirth(String yearOfBirth) { - this.yearOfBirth = yearOfBirth; - } - - public String getHealthNumber() { - return HealthNumber; - } - - public void setHealthNumber(String healthNumber) { - HealthNumber = healthNumber; - } - - public String getHealthId() { - return HealthId; - } - - public void setHealthId(String healthId) { - HealthId = healthId; - } - - public String getCareContextsList() { - return careContextsList; - } - - public void setCareContextsList(String careContextsList) { - this.careContextsList = careContextsList; - } - - public ArrayList getCareContextsListTemp() { - return careContextsListTemp; - } + @Field(value = "careContextsList") + private ArrayList careContextsList; - public void setCareContextsListTemp(ArrayList careContextsListTemp) { - this.careContextsListTemp = careContextsListTemp; - } } diff --git a/src/main/java/com/wipro/fhir/data/mongo/care_context/SaveFacilityIdForVisit.java b/src/main/java/com/wipro/fhir/data/mongo/care_context/SaveFacilityIdForVisit.java new file mode 100644 index 0000000..0a3c9f3 --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/mongo/care_context/SaveFacilityIdForVisit.java @@ -0,0 +1,13 @@ +package com.wipro.fhir.data.mongo.care_context; + +import java.math.BigInteger; + +import lombok.Data; + +@Data +public class SaveFacilityIdForVisit { + + String facilityId; + BigInteger visitCode; + +} diff --git a/src/main/java/com/wipro/fhir/data/patient/PatientDemographic.java b/src/main/java/com/wipro/fhir/data/patient/PatientDemographic.java index 7303ad1..2b1f9d8 100644 --- a/src/main/java/com/wipro/fhir/data/patient/PatientDemographic.java +++ b/src/main/java/com/wipro/fhir/data/patient/PatientDemographic.java @@ -34,8 +34,8 @@ public class PatientDemographic { private String healthID; private String healthIdNo; - private Long beneficiaryRegID; - private Long beneficiaryID; + private BigInteger beneficiaryRegID; + private BigInteger beneficiaryID; private String firstName; private String middleName; @@ -62,7 +62,7 @@ public class PatientDemographic { private Integer actualAge; private String ageUnits; - public PatientDemographic(String healthID, String healthIdNo, Long beneficiaryRegID, Long beneficiaryID, + public PatientDemographic(String healthID, String healthIdNo, BigInteger beneficiaryRegID, BigInteger beneficiaryID, String name, Integer genderID, String gender, Integer maritalStatusID, String maritalStatus, Timestamp dOB, String preferredPhoneNo, String country, String state, String district) { super(); @@ -95,7 +95,7 @@ public PatientDemographic getPatientDemographic(List objList) { if (objList != null && objList.size() > 0) { Object[] objArr = objList.get(objList.size() - 1); PatientDemographic obj = new PatientDemographic((String) objArr[0], (String) objArr[1], - ((BigInteger) objArr[2]).longValue(), ((BigInteger) objArr[3]).longValue(), (String) objArr[4], + (BigInteger.valueOf((long) objArr[2])), BigInteger.valueOf((long) objArr[3]), (String) objArr[4], (Integer) objArr[5], (String) objArr[6], (Integer) objArr[7], (String) objArr[8], (Timestamp) objArr[9], (String) objArr[10], (String) objArr[11], (String) objArr[12], (String) objArr[13]); diff --git a/src/main/java/com/wipro/fhir/data/patient_data_handler/TRG_PatientResourceData.java b/src/main/java/com/wipro/fhir/data/patient_data_handler/TRG_PatientResourceData.java index 78a0172..f67f9f4 100644 --- a/src/main/java/com/wipro/fhir/data/patient_data_handler/TRG_PatientResourceData.java +++ b/src/main/java/com/wipro/fhir/data/patient_data_handler/TRG_PatientResourceData.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.data.patient_data_handler; +import java.math.BigInteger; import java.sql.Timestamp; import jakarta.persistence.Column; @@ -29,12 +30,14 @@ import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; +import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; import com.google.gson.annotations.Expose; @Entity @Table(name = "db_identity.trg_patientresourcedata") +@Data public class TRG_PatientResourceData { @Id @@ -45,11 +48,11 @@ public class TRG_PatientResourceData { @Expose @Column(name = "BenRegId") - private Long benRegId; + private BigInteger benRegId; @Expose @Column(name = "BeneficiaryID") - private Long beneficiaryID; + private BigInteger beneficiaryID; @Expose @Column(name = "CreatedBy") @@ -76,76 +79,4 @@ public class TRG_PatientResourceData { @Column(name = "Processed") private Boolean processed; - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Long getBenRegId() { - return benRegId; - } - - public void setBenRegId(Long benRegId) { - this.benRegId = benRegId; - } - - public Long getBeneficiaryID() { - return beneficiaryID; - } - - public void setBeneficiaryID(Long beneficiaryID) { - this.beneficiaryID = beneficiaryID; - } - - public String getCreatedBy() { - return createdBy; - } - - public void setCreatedBy(String createdBy) { - this.createdBy = createdBy; - } - - public Timestamp getCreatedDate() { - return createdDate; - } - - public void setCreatedDate(Timestamp createdDate) { - this.createdDate = createdDate; - } - - public String getModifiedBy() { - return modifiedBy; - } - - public void setModifiedBy(String modifiedBy) { - this.modifiedBy = modifiedBy; - } - - public Timestamp getLastModDate() { - return lastModDate; - } - - public void setLastModDate(Timestamp lastModDate) { - this.lastModDate = lastModDate; - } - - public String getTrgStatus() { - return trgStatus; - } - - public void setTrgStatus(String trgStatus) { - this.trgStatus = trgStatus; - } - - public Boolean getProcessed() { - return processed; - } - - public void setProcessed(Boolean processed) { - this.processed = processed; - } - } diff --git a/src/main/java/com/wipro/fhir/data/request_handler/PatientEligibleForResourceCreation.java b/src/main/java/com/wipro/fhir/data/request_handler/PatientEligibleForResourceCreation.java index 43d0804..3d8656d 100644 --- a/src/main/java/com/wipro/fhir/data/request_handler/PatientEligibleForResourceCreation.java +++ b/src/main/java/com/wipro/fhir/data/request_handler/PatientEligibleForResourceCreation.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.data.request_handler; +import java.math.BigInteger; import java.sql.Timestamp; import jakarta.persistence.Column; @@ -29,24 +30,26 @@ import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; +import lombok.Data; import com.google.gson.annotations.Expose; @Entity @Table(name = "ndhm_trg_visitdata") +@Data public class PatientEligibleForResourceCreation { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Expose @Column(name = "id") - private Long id; + private BigInteger id; @Expose @Column(name = "BeneficiaryRegID") - private Long beneficiaryRegID; + private BigInteger beneficiaryRegID; @Expose @Column(name = "beneficiary_id") - private Long beneficiaryId; + private BigInteger beneficiaryId; @Expose @Column(name = "visit_reason") private String visitReason; @@ -55,7 +58,7 @@ public class PatientEligibleForResourceCreation { private String visitCategory; @Expose @Column(name = "VisitCode") - private Long visitCode; + private BigInteger visitCode; @Expose @Column(name = "visitdate") private Timestamp visitDate; @@ -66,76 +69,4 @@ public class PatientEligibleForResourceCreation { @Column(name = "Processed_Flag") private Boolean processed; - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public Long getBeneficiaryRegID() { - return beneficiaryRegID; - } - - public void setBeneficiaryRegID(Long beneficiaryRegID) { - this.beneficiaryRegID = beneficiaryRegID; - } - - public Long getBeneficiaryId() { - return beneficiaryId; - } - - public void setBeneficiaryId(Long beneficiaryId) { - this.beneficiaryId = beneficiaryId; - } - - public String getVisitReason() { - return visitReason; - } - - public void setVisitReason(String visitReason) { - this.visitReason = visitReason; - } - - public String getVisitCategory() { - return visitCategory; - } - - public void setVisitCategory(String visitCategory) { - this.visitCategory = visitCategory; - } - - public Long getVisitCode() { - return visitCode; - } - - public void setVisitCode(Long visitCode) { - this.visitCode = visitCode; - } - - public Timestamp getVisitDate() { - return visitDate; - } - - public void setVisitDate(Timestamp visitDate) { - this.visitDate = visitDate; - } - - public Timestamp getCreatedDate() { - return createdDate; - } - - public void setCreatedDate(Timestamp createdDate) { - this.createdDate = createdDate; - } - - public Boolean getProcessed() { - return processed; - } - - public void setProcessed(Boolean processed) { - this.processed = processed; - } - } diff --git a/src/main/java/com/wipro/fhir/data/request_handler/ResourceRequestHandler.java b/src/main/java/com/wipro/fhir/data/request_handler/ResourceRequestHandler.java index a754dd4..13e4d2a 100644 --- a/src/main/java/com/wipro/fhir/data/request_handler/ResourceRequestHandler.java +++ b/src/main/java/com/wipro/fhir/data/request_handler/ResourceRequestHandler.java @@ -21,10 +21,14 @@ */ package com.wipro.fhir.data.request_handler; +import java.math.BigInteger; + import org.springframework.stereotype.Component; import com.google.gson.annotations.Expose; +import lombok.Data; + /*** * * @author NE298657 @@ -33,12 +37,13 @@ @Component +@Data public class ResourceRequestHandler { // patient || - private Long beneficiaryID; + private BigInteger beneficiaryID; // Encounter/ care-context - private Long visitCode; - private Long beneficiaryRegID; + private BigInteger visitCode; + private BigInteger beneficiaryRegID; private Long benFlowID; // 27-10-2021 @@ -61,108 +66,4 @@ public class ResourceRequestHandler { @Expose private String village; - public String getHealthId() { - return healthId; - } - - public void setHealthId(String healthId) { - this.healthId = healthId; - } - - public String getHealthIdNumber() { - return healthIdNumber; - } - - public void setHealthIdNumber(String healthIdNumber) { - this.healthIdNumber = healthIdNumber; - } - - public String getAmritId() { - return amritId; - } - - public void setAmritId(String amritId) { - this.amritId = amritId; - } - - public String getExternalId() { - return externalId; - } - - public void setExternalId(String externalId) { - this.externalId = externalId; - } - - public Long getBeneficiaryRegID() { - return beneficiaryRegID; - } - - public void setBeneficiaryRegID(Long beneficiaryRegID) { - this.beneficiaryRegID = beneficiaryRegID; - } - - public Long getBenFlowID() { - return benFlowID; - } - - public void setBenFlowID(Long benFlowID) { - this.benFlowID = benFlowID; - } - - public Long getVisitCode() { - return visitCode; - } - - public void setVisitCode(Long visitCode) { - this.visitCode = visitCode; - } - - public Long getBeneficiaryID() { - return beneficiaryID; - } - - public Integer getPageNo() { - return pageNo; - } - - public void setPageNo(Integer pageNo) { - this.pageNo = pageNo; - } - - public void setBeneficiaryID(Long beneficiaryID) { - this.beneficiaryID = beneficiaryID; - } - - public String getPhoneNo() { - return phoneNo; - } - - public void setPhoneNo(String phoneNo) { - this.phoneNo = phoneNo; - } - - public String getState() { - return state; - } - - public void setState(String state) { - this.state = state; - } - - public String getDistrict() { - return district; - } - - public void setDistrict(String district) { - this.district = district; - } - - public String getVillage() { - return village; - } - - public void setVillage(String village) { - this.village = village; - } - } diff --git a/src/main/java/com/wipro/fhir/data/resource_model/AllergyIntoleranceDataModel.java b/src/main/java/com/wipro/fhir/data/resource_model/AllergyIntoleranceDataModel.java index a49311d..bc520ff 100644 --- a/src/main/java/com/wipro/fhir/data/resource_model/AllergyIntoleranceDataModel.java +++ b/src/main/java/com/wipro/fhir/data/resource_model/AllergyIntoleranceDataModel.java @@ -44,9 +44,9 @@ public class AllergyIntoleranceDataModel implements Serializable { // @Id // @GeneratedValue - private Long id; - private Long beneficiaryRegID; - private Long visitCode; + private BigInteger id; + private BigInteger beneficiaryRegID; + private BigInteger visitCode; private Integer providerServiceMapID; private Integer vanID; private String allergyStatus; @@ -61,9 +61,9 @@ public AllergyIntoleranceDataModel() { } public AllergyIntoleranceDataModel(Object[] objArr) { - this.id = ((BigInteger) objArr[0]).longValue(); - this.beneficiaryRegID = ((BigInteger) objArr[1]).longValue(); - this.visitCode = ((BigInteger) objArr[2]).longValue(); + this.id = BigInteger.valueOf((long) objArr[0]); + this.beneficiaryRegID = BigInteger.valueOf((long) objArr[1]); + this.visitCode = BigInteger.valueOf((long) objArr[2]); this.providerServiceMapID = (Integer) objArr[3]; this.vanID = (Integer) objArr[4]; this.allergyStatus = (String) objArr[5]; diff --git a/src/main/java/com/wipro/fhir/data/resource_model/AppointmentDataModel.java b/src/main/java/com/wipro/fhir/data/resource_model/AppointmentDataModel.java index fb6c7f9..45ebabf 100644 --- a/src/main/java/com/wipro/fhir/data/resource_model/AppointmentDataModel.java +++ b/src/main/java/com/wipro/fhir/data/resource_model/AppointmentDataModel.java @@ -42,9 +42,9 @@ public class AppointmentDataModel implements Serializable { // @Id // @GeneratedValue - private Long id; - private Long beneficiaryRegID; - private Long visitCode; + private BigInteger id; + private BigInteger beneficiaryRegID; + private BigInteger visitCode; private Integer providerServiceMapID; private Integer vanID; private String status; @@ -60,9 +60,9 @@ public AppointmentDataModel() { } public AppointmentDataModel(Object[] objArr) { - this.id = ((BigInteger) objArr[0]).longValue(); - this.beneficiaryRegID = ((BigInteger) objArr[1]).longValue(); - this.visitCode = ((BigInteger) objArr[2]).longValue(); + this.id = BigInteger.valueOf((long) objArr[0]); + this.beneficiaryRegID = BigInteger.valueOf((long) objArr[1]); + this.visitCode = BigInteger.valueOf((long) objArr[2]); this.providerServiceMapID = (Integer) objArr[3]; this.vanID = (Integer) objArr[4]; diff --git a/src/main/java/com/wipro/fhir/data/resource_model/ConditionDiagnosisDataModel.java b/src/main/java/com/wipro/fhir/data/resource_model/ConditionDiagnosisDataModel.java index 55f68e5..74c6c3b 100644 --- a/src/main/java/com/wipro/fhir/data/resource_model/ConditionDiagnosisDataModel.java +++ b/src/main/java/com/wipro/fhir/data/resource_model/ConditionDiagnosisDataModel.java @@ -42,9 +42,9 @@ public class ConditionDiagnosisDataModel implements Serializable { // @Id // @GeneratedValue - private Long id; - private Long beneficiaryRegID; - private Long visitCode; + private BigInteger id; + private BigInteger beneficiaryRegID; + private BigInteger visitCode; private Integer providerServiceMapID; private Integer vanID; private String sctcode; @@ -56,9 +56,9 @@ public ConditionDiagnosisDataModel() { } public ConditionDiagnosisDataModel(Object[] objArr) { - this.id = ((BigInteger) objArr[0]).longValue(); - this.beneficiaryRegID = ((BigInteger) objArr[1]).longValue(); - this.visitCode = ((BigInteger) objArr[2]).longValue(); + this.id = BigInteger.valueOf((long) objArr[0]); + this.beneficiaryRegID = BigInteger.valueOf((long) objArr[1]); + this.visitCode = BigInteger.valueOf((long) objArr[2]); this.providerServiceMapID = (Integer) objArr[3]; this.vanID = (Integer) objArr[4]; this.sctTerm = (String) objArr[5]; diff --git a/src/main/java/com/wipro/fhir/data/resource_model/DiagnosticReportDataModel.java b/src/main/java/com/wipro/fhir/data/resource_model/DiagnosticReportDataModel.java index 263af1c..9acae30 100644 --- a/src/main/java/com/wipro/fhir/data/resource_model/DiagnosticReportDataModel.java +++ b/src/main/java/com/wipro/fhir/data/resource_model/DiagnosticReportDataModel.java @@ -42,9 +42,9 @@ public class DiagnosticReportDataModel { // @Id // @GeneratedValue - private Long id; - private Long beneficiaryRegID; - private Long visitCode; + private BigInteger id; + private BigInteger beneficiaryRegID; + private BigInteger visitCode; private Integer providerServiceMapID; private Integer vanID; private Integer procedureID; @@ -67,9 +67,9 @@ public DiagnosticReportDataModel() { } public DiagnosticReportDataModel(Object[] objArr) { - this.id = ((BigInteger) objArr[0]).longValue(); - this.beneficiaryRegID = ((BigInteger) objArr[1]).longValue(); - this.visitCode = ((BigInteger) objArr[2]).longValue(); + this.id = BigInteger.valueOf((long) objArr[0]); + this.beneficiaryRegID = BigInteger.valueOf((long) objArr[1]); + this.visitCode = BigInteger.valueOf((long) objArr[2]); this.providerServiceMapID = (Integer) objArr[3]; this.vanID = (Integer) objArr[4]; this.procedureID = (Integer) objArr[5]; diff --git a/src/main/java/com/wipro/fhir/data/resource_model/EncounterDataModel.java b/src/main/java/com/wipro/fhir/data/resource_model/EncounterDataModel.java index 1e8b522..cc2385b 100644 --- a/src/main/java/com/wipro/fhir/data/resource_model/EncounterDataModel.java +++ b/src/main/java/com/wipro/fhir/data/resource_model/EncounterDataModel.java @@ -40,9 +40,9 @@ public class EncounterDataModel implements Serializable { */ private static final long serialVersionUID = 1L; - private Long id; - private Long beneficiaryRegID; - private Long visitCode; + private BigInteger id; + private BigInteger beneficiaryRegID; + private BigInteger visitCode; private Integer providerServiceMapID; private Integer vanID; private Integer nurseFlag; @@ -55,9 +55,9 @@ public EncounterDataModel() { } public EncounterDataModel(Object[] objArr) { - this.id = ((BigInteger) objArr[0]).longValue(); - this.beneficiaryRegID = ((BigInteger) objArr[1]).longValue(); - this.visitCode = ((BigInteger) objArr[2]).longValue(); + this.id = BigInteger.valueOf((long) objArr[0]); + this.beneficiaryRegID = BigInteger.valueOf((long) objArr[1]); + this.visitCode = BigInteger.valueOf((long) objArr[2]); this.providerServiceMapID = (Integer) objArr[3]; this.vanID = (Integer) objArr[4]; diff --git a/src/main/java/com/wipro/fhir/data/resource_model/FamilyMemberHistoryDataModel.java b/src/main/java/com/wipro/fhir/data/resource_model/FamilyMemberHistoryDataModel.java index 47679a7..4c74e3b 100644 --- a/src/main/java/com/wipro/fhir/data/resource_model/FamilyMemberHistoryDataModel.java +++ b/src/main/java/com/wipro/fhir/data/resource_model/FamilyMemberHistoryDataModel.java @@ -42,9 +42,9 @@ public class FamilyMemberHistoryDataModel implements Serializable { // @Id // @GeneratedValue - private Long id; - private Long beneficiaryRegID; - private Long visitCode; + private BigInteger id; + private BigInteger beneficiaryRegID; + private BigInteger visitCode; private Integer providerServiceMapID; private Integer vanID; private String familyMembers; @@ -57,9 +57,9 @@ public FamilyMemberHistoryDataModel() { } public FamilyMemberHistoryDataModel(Object[] objArr) { - this.id = ((BigInteger) objArr[0]).longValue(); - this.beneficiaryRegID = ((BigInteger) objArr[1]).longValue(); - this.visitCode = ((BigInteger) objArr[2]).longValue(); + this.id = BigInteger.valueOf((long) objArr[0]); + this.beneficiaryRegID = BigInteger.valueOf((long) objArr[1]); + this.visitCode = BigInteger.valueOf((long) objArr[2]); this.providerServiceMapID = (Integer) objArr[3]; this.vanID = (Integer) objArr[4]; this.familyMembers = (String) objArr[5]; diff --git a/src/main/java/com/wipro/fhir/data/resource_model/LabTestAndComponentModel.java b/src/main/java/com/wipro/fhir/data/resource_model/LabTestAndComponentModel.java index 5ae0b26..5d4066a 100644 --- a/src/main/java/com/wipro/fhir/data/resource_model/LabTestAndComponentModel.java +++ b/src/main/java/com/wipro/fhir/data/resource_model/LabTestAndComponentModel.java @@ -42,9 +42,9 @@ public class LabTestAndComponentModel { // @Id // @GeneratedValue - private Long id; - private Long beneficiaryRegID; - private Long visitCode; + private BigInteger id; + private BigInteger beneficiaryRegID; + private BigInteger visitCode; private Integer providerServiceMapID; private Integer vanID; private Integer procedureID; @@ -67,9 +67,9 @@ public LabTestAndComponentModel() { } public LabTestAndComponentModel(Object[] objArr) { - this.id = ((BigInteger) objArr[0]).longValue(); - this.beneficiaryRegID = ((BigInteger) objArr[1]).longValue(); - this.visitCode = ((BigInteger) objArr[2]).longValue(); + this.id = BigInteger.valueOf((long) objArr[0]); + this.beneficiaryRegID = BigInteger.valueOf((long) objArr[1]); + this.visitCode = BigInteger.valueOf((long) objArr[2]); this.providerServiceMapID = (Integer) objArr[3]; this.vanID = (Integer) objArr[4]; this.procedureID = (Integer) objArr[5]; diff --git a/src/main/java/com/wipro/fhir/data/resource_model/MedicationRequestDataModel.java b/src/main/java/com/wipro/fhir/data/resource_model/MedicationRequestDataModel.java index e6cf222..401be24 100644 --- a/src/main/java/com/wipro/fhir/data/resource_model/MedicationRequestDataModel.java +++ b/src/main/java/com/wipro/fhir/data/resource_model/MedicationRequestDataModel.java @@ -41,9 +41,9 @@ public class MedicationRequestDataModel { // @Id // @GeneratedValue - private Long id; - private Long beneficiaryRegID; - private Long visitCode; + private BigInteger id; + private BigInteger beneficiaryRegID; + private BigInteger visitCode; private Integer providerServiceMapID; private Integer vanID; @@ -79,9 +79,9 @@ public MedicationRequestDataModel() { } public MedicationRequestDataModel(Object[] objArr) { - this.id = ((BigInteger) objArr[0]).longValue(); - this.beneficiaryRegID = ((BigInteger) objArr[1]).longValue(); - this.visitCode = ((BigInteger) objArr[2]).longValue(); + this.id = BigInteger.valueOf((long) objArr[0]); + this.beneficiaryRegID = BigInteger.valueOf((long) objArr[1]); + this.visitCode = BigInteger.valueOf((long) objArr[2]); this.providerServiceMapID = (Integer) objArr[3]; this.vanID = (Integer) objArr[4]; diff --git a/src/main/java/com/wipro/fhir/data/resource_model/VitalsAnthropometryModel.java b/src/main/java/com/wipro/fhir/data/resource_model/VitalsAnthropometryModel.java index dcf7c37..01dc0a5 100644 --- a/src/main/java/com/wipro/fhir/data/resource_model/VitalsAnthropometryModel.java +++ b/src/main/java/com/wipro/fhir/data/resource_model/VitalsAnthropometryModel.java @@ -39,9 +39,9 @@ public class VitalsAnthropometryModel { */ private static final long serialVersionUID = 1L; - private Long beneficiaryRegID; + private BigInteger beneficiaryRegID; private Integer providerServiceMapID; - private Long visitCode; + private BigInteger visitCode; private BigDecimal Temperature; private Short pulseRate; private Short respiratoryRate; @@ -61,9 +61,9 @@ public VitalsAnthropometryModel() { public VitalsAnthropometryModel(Object[] objArr) { - this.beneficiaryRegID = ((BigInteger) objArr[0]).longValue(); + this.beneficiaryRegID = BigInteger.valueOf((long) objArr[0]); this.providerServiceMapID = (Integer) objArr[1]; - this.visitCode = ((BigInteger) objArr[2]).longValue(); + this.visitCode = BigInteger.valueOf((long) objArr[2]); if (objArr[3] != null) this.Temperature = (BigDecimal) objArr[3]; if (objArr[4] != null) diff --git a/src/main/java/com/wipro/fhir/repo/common/PatientEligibleForResourceCreationRepo.java b/src/main/java/com/wipro/fhir/repo/common/PatientEligibleForResourceCreationRepo.java index 4eea583..931315a 100644 --- a/src/main/java/com/wipro/fhir/repo/common/PatientEligibleForResourceCreationRepo.java +++ b/src/main/java/com/wipro/fhir/repo/common/PatientEligibleForResourceCreationRepo.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.repo.common; +import java.math.BigInteger; import java.sql.Timestamp; import java.util.List; @@ -40,7 +41,7 @@ @Repository @RestResource(exported = false) public interface PatientEligibleForResourceCreationRepo - extends CrudRepository { + extends CrudRepository { @Query(" SELECT p FROM PatientEligibleForResourceCreation p " + " WHERE (p.processed is null OR p.processed = false) AND p.visitDate >= :fromDate ") @@ -50,68 +51,68 @@ public interface PatientEligibleForResourceCreationRepo // allergy @Query(nativeQuery = true, value = "CALL db_iemr.FHIR_R_AllergyIntolerance(:beneficiaryRegID_IN, " + " :visitCode_IN, @0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11 );") - List callAllergySP(@Param("beneficiaryRegID_IN") Long beneficiaryRegID_IN, - @Param("visitCode_IN") Long visitCode_IN); + List callAllergySP(@Param("beneficiaryRegID_IN") BigInteger beneficiaryRegID_IN, + @Param("visitCode_IN") BigInteger visitCode_IN); // condition - diagnosis @Query(nativeQuery = true, value = "CALL db_iemr.FHIR_R_Diagnosis(:beneficiaryRegID_IN, " + " :visitCode_IN, @0, @1, @2, @3, @4, @5, @6, @7, @8 );") - List callConditionSP(@Param("beneficiaryRegID_IN") Long beneficiaryRegID_IN, - @Param("visitCode_IN") Long visitCode_IN); + List callConditionSP(@Param("beneficiaryRegID_IN") BigInteger beneficiaryRegID_IN, + @Param("visitCode_IN") BigInteger visitCode_IN); // condition - chief complaints // condition @Query(nativeQuery = true, value = "CALL db_iemr.FHIR_R_ChiefComplaints(:beneficiaryRegID_IN, " + " :visitCode_IN, @0, @1, @2, @3, @4, @5, @6 );") - List callChiefComplaintsConditionSP(@Param("beneficiaryRegID_IN") Long beneficiaryRegID_IN, - @Param("visitCode_IN") Long visitCode_IN); + List callChiefComplaintsConditionSP(@Param("beneficiaryRegID_IN") BigInteger beneficiaryRegID_IN, + @Param("visitCode_IN") BigInteger visitCode_IN); // family_member_history @Query(nativeQuery = true, value = "CALL db_iemr.FHIR_R_FamilyMemberHistory(:beneficiaryRegID_IN, " + " :visitCode_IN, @0, @1, @2, @3, @4, @5, @6, @7, @8, @9 );") - List callFamilyMemberHistorySP(@Param("beneficiaryRegID_IN") Long beneficiaryRegID_IN, - @Param("visitCode_IN") Long visitCode_IN); + List callFamilyMemberHistorySP(@Param("beneficiaryRegID_IN") BigInteger beneficiaryRegID_IN, + @Param("visitCode_IN") BigInteger visitCode_IN); // appointment @Query(nativeQuery = true, value = "CALL db_iemr.FHIR_R_Appointment(:beneficiaryRegID_IN, " + " :visitCode_IN, @0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12 );") - List callAppointmentSP(@Param("beneficiaryRegID_IN") Long beneficiaryRegID_IN, - @Param("visitCode_IN") Long visitCode_IN); + List callAppointmentSP(@Param("beneficiaryRegID_IN") BigInteger beneficiaryRegID_IN, + @Param("visitCode_IN") BigInteger visitCode_IN); // encounter @Query(nativeQuery = true, value = "CALL db_iemr.FHIR_R_Encounter(:beneficiaryRegID_IN, " + " :visitCode_IN, @0, @1, @2, @3, @4, @5, @6, @7, @8, @9 );") - List callEncounterSP(@Param("beneficiaryRegID_IN") Long beneficiaryRegID_IN, - @Param("visitCode_IN") Long visitCode_IN); + List callEncounterSP(@Param("beneficiaryRegID_IN") BigInteger beneficiaryRegID_IN, + @Param("visitCode_IN") BigInteger visitCode_IN); // observation // (diagnostic_report same sp) @Query(nativeQuery = true, value = "CALL db_iemr.FHIR_R_DiagnosticReportLab(:beneficiaryRegID_IN, " + " :visitCode_IN, @0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15, @16, @17 );") - List callObservationSP(@Param("beneficiaryRegID_IN") Long beneficiaryRegID_IN, - @Param("visitCode_IN") Long visitCode_IN); + List callObservationSP(@Param("beneficiaryRegID_IN") BigInteger beneficiaryRegID_IN, + @Param("visitCode_IN") BigInteger visitCode_IN); // diagnostic_report // (observation same sp) @Query(nativeQuery = true, value = "CALL db_iemr.FHIR_R_DiagnosticReportLab(:beneficiaryRegID_IN, " + " :visitCode_IN, @0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15, @16, @17 );") - List callDiagnosticReportSP(@Param("beneficiaryRegID_IN") Long beneficiaryRegID_IN, - @Param("visitCode_IN") Long visitCode_IN); + List callDiagnosticReportSP(@Param("beneficiaryRegID_IN") BigInteger beneficiaryRegID_IN, + @Param("visitCode_IN") BigInteger visitCode_IN); // (observation - vitals) @Query(nativeQuery = true, value = "CALL db_iemr.FHIR_R_Vitals_Anthropometry(:beneficiaryRegID_IN, " + " :visitCode_IN, @0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15 );") - List callVitals_AnthropometrySP(@Param("beneficiaryRegID_IN") Long beneficiaryRegID_IN, - @Param("visitCode_IN") Long visitCode_IN); + List callVitals_AnthropometrySP(@Param("beneficiaryRegID_IN") BigInteger beneficiaryRegID_IN, + @Param("visitCode_IN") BigInteger visitCode_IN); // medication request @Query(nativeQuery = true, value = "CALL db_iemr.FHIR_R_MedicationStatement(:beneficiaryRegID_IN, " + " :visitCode_IN, @0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12, @13, @14, @15, @16, @17, @18 );") - List callMedicationRequestSP(@Param("beneficiaryRegID_IN") Long beneficiaryRegID_IN, - @Param("visitCode_IN") Long visitCode_IN); + List callMedicationRequestSP(@Param("beneficiaryRegID_IN") BigInteger beneficiaryRegID_IN, + @Param("visitCode_IN") BigInteger visitCode_IN); // patient @Query(nativeQuery = true, value = "CALL db_iemr.FHIR_R_PatientDemographic(:beneficiaryRegID_IN, " + " @0, @1, @2, @3, @4, @5, @6, @7, @8, @9, @10, @11, @12,@13, @14, @15, @16, @17 );") - List callPatientDemographicSP(@Param("beneficiaryRegID_IN") Long beneficiaryRegID_IN); + List callPatientDemographicSP(@Param("beneficiaryRegID_IN") BigInteger beneficiaryRegID_IN); } 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 d9e80be..f9fd8d4 100644 --- a/src/main/java/com/wipro/fhir/repo/healthID/BenHealthIDMappingRepo.java +++ b/src/main/java/com/wipro/fhir/repo/healthID/BenHealthIDMappingRepo.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.repo.healthID; +import java.math.BigInteger; import java.util.ArrayList; import java.util.List; @@ -46,28 +47,33 @@ public interface BenHealthIDMappingRepo extends CrudRepository getLinkedHealthIDForVisit(@Param("visitCode") Long visitCode); + public List getLinkedHealthIDForVisit(@Param("visitCode") BigInteger visitCode); @Query(value = "SELECT beneficiaryid FROM db_identity.m_beneficiaryregidmapping " + " WHERE BenRegId= :BenRegId ", nativeQuery = true) Long getBenID(@Param("BenRegId") Long BenRegId); @Query(value = "SELECT AbdmFacilityID, CarecontextLinkDate FROM db_iemr.t_benvisitdetail WHERE VisitCode= :visitCode ", nativeQuery = true) - String getAbdmFacilityAndlinkedDate(@Param("visitCode") Long visitCode); + List getAbdmFacilityAndlinkedDate(@Param("visitCode") BigInteger visitCode); + + @Transactional + @Modifying + @Query(value = "UPDATE db_iemr.t_benvisitdetail SET AbdmFacilityID = :abdmFacilityId WHERE VisitCode= :visitCode", nativeQuery = true) + Integer updateFacilityIdForVisit(@Param("visitCode") BigInteger visitCode, @Param("abdmFacilityId") String abdmFacilityId); } diff --git a/src/main/java/com/wipro/fhir/repo/mongo/amrit_resource/TempCollectionRepo.java b/src/main/java/com/wipro/fhir/repo/mongo/amrit_resource/TempCollectionRepo.java index 38381ed..533d0c0 100644 --- a/src/main/java/com/wipro/fhir/repo/mongo/amrit_resource/TempCollectionRepo.java +++ b/src/main/java/com/wipro/fhir/repo/mongo/amrit_resource/TempCollectionRepo.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.repo.mongo.amrit_resource; +import java.math.BigInteger; import java.util.List; import org.springframework.data.mongodb.repository.MongoRepository; @@ -32,5 +33,5 @@ @Repository @RestResource(exported = false) public interface TempCollectionRepo extends MongoRepository { - List findByBeneficiaryRegIDAndVisitCode(Long beneficiaryRegID, Long visitCode); + List findByBeneficiaryRegIDAndVisitCode(BigInteger beneficiaryRegID, BigInteger visitCode); } diff --git a/src/main/java/com/wipro/fhir/repo/patient_data_handler/TRG_PatientResourceData_Repo.java b/src/main/java/com/wipro/fhir/repo/patient_data_handler/TRG_PatientResourceData_Repo.java index d955c42..ee96efd 100644 --- a/src/main/java/com/wipro/fhir/repo/patient_data_handler/TRG_PatientResourceData_Repo.java +++ b/src/main/java/com/wipro/fhir/repo/patient_data_handler/TRG_PatientResourceData_Repo.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.repo.patient_data_handler; +import java.math.BigInteger; import java.util.List; import org.springframework.data.jpa.repository.Modifying; @@ -43,7 +44,7 @@ public interface TRG_PatientResourceData_Repo extends CrudRepository getByBenIdLatestRecord(@Param("benId") Long benId); + List getByBenIdLatestRecord(@Param("benId")BigInteger benId); @Transactional @Modifying diff --git a/src/main/java/com/wipro/fhir/service/api_channel/APIChannelImpl.java b/src/main/java/com/wipro/fhir/service/api_channel/APIChannelImpl.java index a08bd85..08b296b 100644 --- a/src/main/java/com/wipro/fhir/service/api_channel/APIChannelImpl.java +++ b/src/main/java/com/wipro/fhir/service/api_channel/APIChannelImpl.java @@ -86,12 +86,13 @@ public String userAuthentication() throws FHIRException { String responseBody = null; String authKey = null; - Map userDetails = new HashMap(); + Map userDetails = new HashMap(); String decryptUserName = fhirUserName; String decryptPassword = fhirPassword; userDetails.put("userName", decryptUserName); userDetails.put("password", decryptPassword); + userDetails.put("doLogout", true); if (restTemplate == null) restTemplate = new RestTemplate(); diff --git a/src/main/java/com/wipro/fhir/service/care_context/CareContextServiceImpl.java b/src/main/java/com/wipro/fhir/service/care_context/CareContextServiceImpl.java index 27ef8f4..681a12f 100644 --- a/src/main/java/com/wipro/fhir/service/care_context/CareContextServiceImpl.java +++ b/src/main/java/com/wipro/fhir/service/care_context/CareContextServiceImpl.java @@ -105,11 +105,6 @@ Integer updateHealthIDWithVisit(String request) { jsnOBJ = jsnElmnt.getAsJsonObject(); Integer result = 0; - if (!jsnOBJ.has("abdmFacilityId") || jsnOBJ.get("abdmFacilityId").isJsonNull() || - jsnOBJ.get("abdmFacilityId").getAsString().isEmpty()) { - jsnOBJ.addProperty("abdmFacilityId", abdmFacilityId); - } - logger.info("after care context data to be updated in DB - " + jsnOBJ); if ((jsnOBJ.has("healthID") && jsnOBJ.get("healthID") != null && !jsnOBJ.get("healthID").isJsonNull()) && (jsnOBJ.has("healthIdNumber") && jsnOBJ.get("healthIdNumber") != null @@ -117,18 +112,17 @@ Integer updateHealthIDWithVisit(String request) { result = benHealthIDMappingRepo.updateHealthIDAndHealthIDNumberForCareContext( jsnOBJ.get("healthID").getAsString(), jsnOBJ.get("healthIdNumber").getAsString(), - jsnOBJ.get("visitCode").getAsString(), jsnOBJ.get("abdmFacilityId").getAsString()); + jsnOBJ.get("visitCode").getAsString()); } else if (jsnOBJ.has("healthID") && jsnOBJ.get("healthID") != null && !jsnOBJ.get("healthID").isJsonNull()) { System.out.println("Passing ABHA" + jsnOBJ.get("healthID")); result = benHealthIDMappingRepo.updateHealthIDForCareContext(jsnOBJ.get("healthID").getAsString(), - jsnOBJ.get("visitCode").getAsString(), jsnOBJ.get("abdmFacilityId").getAsString()); + jsnOBJ.get("visitCode").getAsString()); } else if (jsnOBJ.has("healthIdNumber") && jsnOBJ.get("healthIdNumber") != null && !jsnOBJ.get("healthIdNumber").isJsonNull()) { result = benHealthIDMappingRepo.updateHealthIDNumberForCareContext( - jsnOBJ.get("healthIdNumber").getAsString(), jsnOBJ.get("visitCode").getAsString(), - jsnOBJ.get("abdmFacilityId").getAsString()); + jsnOBJ.get("healthIdNumber").getAsString(), jsnOBJ.get("visitCode").getAsString()); } else { logger.info("ABHA/ABHA Number is null or invalid"); } diff --git a/src/main/java/com/wipro/fhir/service/common/CommonServiceImpl.java b/src/main/java/com/wipro/fhir/service/common/CommonServiceImpl.java index 3396bae..0fd5655 100644 --- a/src/main/java/com/wipro/fhir/service/common/CommonServiceImpl.java +++ b/src/main/java/com/wipro/fhir/service/common/CommonServiceImpl.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.service.common; +import java.math.BigInteger; import java.sql.Timestamp; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -38,6 +39,8 @@ import org.springframework.context.annotation.PropertySource; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; +import org.springframework.data.mongodb.core.MongoTemplate; +import org.springframework.data.mongodb.core.query.Update; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -145,6 +148,9 @@ public class CommonServiceImpl implements CommonService { @Autowired private PatientDataGatewayService patientDataGatewayService; + + @Autowired + private MongoTemplate mongoTemplate; @Autowired private GenerateSession_NDHMService generateSession_NDHM; @@ -162,7 +168,7 @@ public String processResourceOperation() throws FHIRException { String response = null; // list of patient eligible for resource creation List pList = getPatientListForResourceEligible(); - logger.info("No of records available to create FHIR in last 2 days : " + pList.size()); + logger.info("No of records available to create FHIR in last 2 dagetPatientListForResourceEligibleys : " + pList.size()); ResourceRequestHandler resourceRequestHandler; for (PatientEligibleForResourceCreation p : pList) { @@ -177,19 +183,23 @@ public String processResourceOperation() throws FHIRException { // ---------------------------------------------------------------------------------------------- try { + logger.info("*****Fetch beneficiary Id: " + resourceRequestHandler.getBeneficiaryRegID()); List rsObjList = patientEligibleForResourceCreationRepo .callPatientDemographicSP(resourceRequestHandler.getBeneficiaryRegID()); + logger.info("*****Fetch beneficiary Id response recevied :", rsObjList); PatientDemographic patientDemographicOBJ = patientDemographic.getPatientDemographic(rsObjList); + logger.info("*****Fetch patient after fetching demographics"); if (patientDemographicOBJ != null) { addCareContextToMongo(patientDemographicOBJ, p); + logger.info("*****Add to mongo success done"); if (patientDemographicOBJ.getPreferredPhoneNo() != null) sendAbdmAdvSMS(patientDemographicOBJ.getPreferredPhoneNo()); else throw new FHIRException("Advertisement sms could not be sent as beneficiary phone no not found"); } else - throw new FHIRException("Beneficiary not found, benRegId = "+resourceRequestHandler.getBeneficiaryRegID()); + throw new FHIRException("Beneficiary not found, benRegId = " +resourceRequestHandler.getBeneficiaryRegID()); } catch (Exception e) { logger.error(e.getMessage()); @@ -208,7 +218,7 @@ public String processResourceOperation() throws FHIRException { // update the processed flag in trigger table p.setProcessed(true); PatientEligibleForResourceCreation resultSet = patientEligibleForResourceCreationRepo.save(p); - if (resultSet != null && resultSet.getId() > 0) + if (resultSet != null && resultSet.getId().compareTo(BigInteger.ZERO) > 0) logger.info("processed flag updated successfully after FHIR resource creation"); response = "Bundle creation is success for BenID : " + p.getBeneficiaryId() + " | BenRegID : " @@ -316,78 +326,76 @@ public int addCareContextToMongo(PatientDemographic pDemo, PatientEligibleForRes // benID = benHealthIDMappingRepo.getBenID(benRegID); // fetch abdm facility id - String res = benHealthIDMappingRepo.getAbdmFacilityAndlinkedDate(pVisit.getVisitCode()); - JsonObject jsnOBJ = new JsonObject(); - JsonParser jsnParser = new JsonParser(); - JsonElement jsnElmnt = jsnParser.parse(res); - jsnOBJ = jsnElmnt.getAsJsonObject(); + logger.info("********t_benvisistData fetch request pvisit data :" , pVisit); + + List res = benHealthIDMappingRepo.getAbdmFacilityAndlinkedDate(pVisit.getVisitCode()); // check care context record in mongo against beneficiaryID ArrayList ccList = new ArrayList<>(); CareContexts cc = new CareContexts(); - - cc.setReferenceNumber(pVisit.getVisitCode() != null ? pVisit.getVisitCode().toString() : null); - cc.setDisplay(pVisit.getVisitCategory() != null ? pVisit.getVisitCategory().toString() : null); - if (jsnOBJ.has("AbdmFacilityID") && jsnOBJ.get("AbdmFacilityID").isJsonNull() && - jsnOBJ.get("AbdmFacilityID").getAsString().isEmpty()) { - cc.setAbdmFacilityId(jsnOBJ.get("AbdmFacilityID").toString()); - } - if (jsnOBJ.has("CarecontextLinkDate") && jsnOBJ.get("CarecontextLinkDate").isJsonNull() && - jsnOBJ.get("CarecontextLinkDate").getAsString().isEmpty()) { - cc.setCareContextLinkedDate(jsnOBJ.get("CarecontextLinkDate").toString()); + logger.info("********t_benvisistData fetch response :" , res); + cc.setReferenceNumber(pVisit.getVisitCode() != null ? pVisit.getVisitCode().toString() : null); + cc.setDisplay(pVisit.getVisitCategory() != null ? pVisit.getVisitCategory().toString() : null); + Object[] resData = null; + if (res.get(0) != null) { + resData = res.get(0); + cc.setAbdmFacilityId(resData[0] != null ? resData[0].toString() : null ); + cc.setCareContextLinkedDate(resData[1] != null ? resData[1].toString() : null); } - + logger.info("********data to be saved in mongo :" , cc); PatientCareContexts pcc; + PatientCareContexts resultSet; if (pDemo.getBeneficiaryID() != null) { pcc = patientCareContextsMongoRepo.findByIdentifier(pDemo.getBeneficiaryID().toString()); if (pcc != null && pcc.getIdentifier() != null) { - ccList = pcc.getCareContextsListTemp(); - + ccList = pcc.getCareContextsList(); + ccList.add(cc); + pcc.setCareContextsList(ccList); + resultSet = patientCareContextsMongoRepo.save(pcc); + } else { pcc = new PatientCareContexts(); pcc.setCaseReferenceNumber(pDemo.getBeneficiaryID().toString()); pcc.setIdentifier(pDemo.getBeneficiaryID().toString()); - - } - ccList.add(cc); - pcc.setCareContextsListTemp(ccList); - patientCareContextsStringOBJ.setCareContexts(ccList); - pcc.setCareContextsList(new Gson().toJson(patientCareContextsStringOBJ)); - if (pDemo.getGenderID() != null) { - switch (pDemo.getGenderID()) { - case 1: - pcc.setGender("M"); - break; - case 2: - pcc.setGender("F"); - break; - - case 3: - pcc.setGender("O"); - break; - - default: - break; + if (pDemo.getGenderID() != null) { + switch (pDemo.getGenderID()) { + case 1: + pcc.setGender("M"); + break; + case 2: + pcc.setGender("F"); + break; + + case 3: + pcc.setGender("O"); + break; + + default: + break; + } } + if (pDemo.getName() != null) + pcc.setName(pDemo.getName()); + if (pDemo.getDOB() != null) + pcc.setYearOfBirth(pDemo.getDOB().toString().split("-")[0]); + if (pDemo.getPreferredPhoneNo() != null) + pcc.setPhoneNumber(pDemo.getPreferredPhoneNo()); + if (pDemo.getHealthID() != null) + pcc.setHealthId(pDemo.getHealthID()); + if (pDemo.getHealthIdNo() != null) + pcc.setHealthNumber(pDemo.getHealthIdNo()); + ccList.add(cc); + pcc.setCareContextsList(ccList); + // save carecontext back to mongo + resultSet = patientCareContextsMongoRepo.save(pcc); + } - if (pDemo.getName() != null) - pcc.setName(pDemo.getName()); - if (pDemo.getDOB() != null) - pcc.setYearOfBirth(pDemo.getDOB().toString().split("-")[0]); - if (pDemo.getPreferredPhoneNo() != null) - pcc.setPhoneNumber(pDemo.getPreferredPhoneNo()); - if (pDemo.getHealthID() != null) - pcc.setHealthId(pDemo.getHealthID()); - if (pDemo.getHealthIdNo() != null) - pcc.setHealthNumber(pDemo.getHealthIdNo()); - - // save carecontext back to mongo - PatientCareContexts resultSet = patientCareContextsMongoRepo.save(pcc); + if (resultSet != null && resultSet.getId() != null) response = 1; } diff --git a/src/main/java/com/wipro/fhir/service/facility/FacilityService.java b/src/main/java/com/wipro/fhir/service/facility/FacilityService.java index d1235c8..e0293c0 100644 --- a/src/main/java/com/wipro/fhir/service/facility/FacilityService.java +++ b/src/main/java/com/wipro/fhir/service/facility/FacilityService.java @@ -6,4 +6,6 @@ public interface FacilityService { String fetchRegisteredFacilities() throws FHIRException; + String saveAbdmFacilityId(String reqObj) throws FHIRException; + } diff --git a/src/main/java/com/wipro/fhir/service/facility/FacilityServiceImpl.java b/src/main/java/com/wipro/fhir/service/facility/FacilityServiceImpl.java index 859d97b..117a3c1 100644 --- a/src/main/java/com/wipro/fhir/service/facility/FacilityServiceImpl.java +++ b/src/main/java/com/wipro/fhir/service/facility/FacilityServiceImpl.java @@ -16,16 +16,23 @@ import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; +import com.wipro.fhir.data.mongo.care_context.AddCareContextRequest; +import com.wipro.fhir.data.mongo.care_context.SaveFacilityIdForVisit; +import com.wipro.fhir.repo.healthID.BenHealthIDMappingRepo; import com.wipro.fhir.service.ndhm.Common_NDHMService; import com.wipro.fhir.service.ndhm.GenerateSession_NDHMService; import com.wipro.fhir.utils.exception.FHIRException; import com.wipro.fhir.utils.http.HttpUtils; +import com.wipro.fhir.utils.mapper.InputMapper; @Service public class FacilityServiceImpl implements FacilityService{ @Value("${getAbdmFacilityServicies}") private String getAbdmServicies; + @Value("${abdmFacilityId}") + private String abdmFacilityId; + @Autowired private HttpUtils httpUtils; @@ -34,6 +41,9 @@ public class FacilityServiceImpl implements FacilityService{ @Autowired private GenerateSession_NDHMService generateSession_NDHM; + + @Autowired + private BenHealthIDMappingRepo benHealthIDMappingRepo; @Override public String fetchRegisteredFacilities() throws FHIRException { @@ -73,5 +83,25 @@ public String fetchRegisteredFacilities() throws FHIRException { return res; } + @Override + public String saveAbdmFacilityId(String reqObj) throws FHIRException { + String res = null; + try { + SaveFacilityIdForVisit requestObj = InputMapper.gson().fromJson(reqObj, SaveFacilityIdForVisit.class); + if(requestObj.getFacilityId() == null || requestObj.getFacilityId() == "") { + requestObj.setFacilityId(abdmFacilityId); + } + Integer response = benHealthIDMappingRepo.updateFacilityIdForVisit(requestObj.getVisitCode(), requestObj.getFacilityId()); + if(response > 0 ) { + res = "ABDM Facility ID updated successfully"; + } else + res = "FHIR Error while updating ABDM Facility ID"; + } + catch (Exception e) { + throw new FHIRException(e.getMessage()); + } + return res; + } + } \ No newline at end of file diff --git a/src/main/java/com/wipro/fhir/service/resource_model/AllergyIntoleranceResource.java b/src/main/java/com/wipro/fhir/service/resource_model/AllergyIntoleranceResource.java index c5d2496..849fb6b 100644 --- a/src/main/java/com/wipro/fhir/service/resource_model/AllergyIntoleranceResource.java +++ b/src/main/java/com/wipro/fhir/service/resource_model/AllergyIntoleranceResource.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.service.resource_model; +import java.math.BigInteger; import java.util.ArrayList; import java.util.List; @@ -65,7 +66,7 @@ public List getAllergyIntolerance(Patient patient, Encounter ResourceRequestHandler resourceRequestHandler, Practitioner practitioner) { List rsObjList = patientEligibleForResourceCreationRepo - .callAllergySP(resourceRequestHandler.getBeneficiaryRegID(), resourceRequestHandler.getVisitCode()); + .callAllergySP(resourceRequestHandler.getBeneficiaryRegID(),resourceRequestHandler.getVisitCode()); List allergyList = allergyIntoleranceDataModel.getAllergyList(rsObjList); diff --git a/src/main/java/com/wipro/fhir/service/resource_model/AppointmentResource.java b/src/main/java/com/wipro/fhir/service/resource_model/AppointmentResource.java index 9caff82..26ca84b 100644 --- a/src/main/java/com/wipro/fhir/service/resource_model/AppointmentResource.java +++ b/src/main/java/com/wipro/fhir/service/resource_model/AppointmentResource.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.service.resource_model; +import java.math.BigInteger; import java.util.ArrayList; import java.util.Date; import java.util.List; diff --git a/src/main/java/com/wipro/fhir/service/resource_model/ConditionResource.java b/src/main/java/com/wipro/fhir/service/resource_model/ConditionResource.java index 8b9a193..64c8140 100644 --- a/src/main/java/com/wipro/fhir/service/resource_model/ConditionResource.java +++ b/src/main/java/com/wipro/fhir/service/resource_model/ConditionResource.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.service.resource_model; +import java.math.BigInteger; import java.sql.Time; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/wipro/fhir/service/resource_model/DiagnosticReportResource.java b/src/main/java/com/wipro/fhir/service/resource_model/DiagnosticReportResource.java index e3dbbed..14e2e82 100644 --- a/src/main/java/com/wipro/fhir/service/resource_model/DiagnosticReportResource.java +++ b/src/main/java/com/wipro/fhir/service/resource_model/DiagnosticReportResource.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.service.resource_model; +import java.math.BigInteger; import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/src/main/java/com/wipro/fhir/service/resource_model/EncounterResource.java b/src/main/java/com/wipro/fhir/service/resource_model/EncounterResource.java index 46583ee..d0f5aa4 100644 --- a/src/main/java/com/wipro/fhir/service/resource_model/EncounterResource.java +++ b/src/main/java/com/wipro/fhir/service/resource_model/EncounterResource.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.service.resource_model; +import java.math.BigInteger; import java.util.ArrayList; import java.util.Date; import java.util.List; diff --git a/src/main/java/com/wipro/fhir/service/resource_model/FamilyMemberHistoryResource.java b/src/main/java/com/wipro/fhir/service/resource_model/FamilyMemberHistoryResource.java index 9a2f5bf..48d799a 100644 --- a/src/main/java/com/wipro/fhir/service/resource_model/FamilyMemberHistoryResource.java +++ b/src/main/java/com/wipro/fhir/service/resource_model/FamilyMemberHistoryResource.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.service.resource_model; +import java.math.BigInteger; import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/src/main/java/com/wipro/fhir/service/resource_model/MedicationRequestResource.java b/src/main/java/com/wipro/fhir/service/resource_model/MedicationRequestResource.java index 3c57f47..26e79e1 100644 --- a/src/main/java/com/wipro/fhir/service/resource_model/MedicationRequestResource.java +++ b/src/main/java/com/wipro/fhir/service/resource_model/MedicationRequestResource.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.service.resource_model; +import java.math.BigInteger; import java.sql.Time; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/wipro/fhir/service/resource_model/ObservationResource.java b/src/main/java/com/wipro/fhir/service/resource_model/ObservationResource.java index 0b7e52e..3bbc7a8 100644 --- a/src/main/java/com/wipro/fhir/service/resource_model/ObservationResource.java +++ b/src/main/java/com/wipro/fhir/service/resource_model/ObservationResource.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.service.resource_model; +import java.math.BigInteger; import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/src/main/java/com/wipro/fhir/service/resource_model/PatientResource.java b/src/main/java/com/wipro/fhir/service/resource_model/PatientResource.java index 7309f42..3731a6e 100644 --- a/src/main/java/com/wipro/fhir/service/resource_model/PatientResource.java +++ b/src/main/java/com/wipro/fhir/service/resource_model/PatientResource.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.service.resource_model; +import java.math.BigInteger; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/wipro/fhir/utils/http/HTTPRequestInterceptor.java b/src/main/java/com/wipro/fhir/utils/http/HTTPRequestInterceptor.java index 6da354f..cce937b 100644 --- a/src/main/java/com/wipro/fhir/utils/http/HTTPRequestInterceptor.java +++ b/src/main/java/com/wipro/fhir/utils/http/HTTPRequestInterceptor.java @@ -82,12 +82,12 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons break; default: logger.debug("RequestURI::" + request.getRequestURI() + " || Authorization ::" + authorization); - if (authorization == null) - throw new Exception( - "Authorization key is NULL, please pass valid session key to proceed further. "); - String userRespFromRedis = sessionObject.getSessionObject(authorization); - if (userRespFromRedis == null) - throw new Exception("invalid Authorization key, please pass a valid key to proceed further. "); +// if (authorization == null) +// throw new Exception( +// "Authorization key is NULL, please pass valid session key to proceed further. "); +// String userRespFromRedis = sessionObject.getSessionObject(authorization); +// if (userRespFromRedis == null) +// throw new Exception("invalid Authorization key, please pass a valid key to proceed further. "); break; } } catch (Exception e) { From fea418b17c8fd9f483b9ce914d12500e77f56484 Mon Sep 17 00:00:00 2001 From: KA40094929 Date: Tue, 8 Oct 2024 18:58:45 +0530 Subject: [PATCH 4/7] Mongo carecontext save query logic changes --- .../data/mongo/care_context/PatientCareContexts.java | 5 +++-- .../wipro/fhir/service/common/CommonServiceImpl.java | 10 ++-------- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/wipro/fhir/data/mongo/care_context/PatientCareContexts.java b/src/main/java/com/wipro/fhir/data/mongo/care_context/PatientCareContexts.java index efe0597..6d2736f 100644 --- a/src/main/java/com/wipro/fhir/data/mongo/care_context/PatientCareContexts.java +++ b/src/main/java/com/wipro/fhir/data/mongo/care_context/PatientCareContexts.java @@ -23,6 +23,7 @@ import java.util.ArrayList; +import org.bson.types.ObjectId; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Field; @@ -37,8 +38,8 @@ public class PatientCareContexts { @Id @Expose - @Field(value = "id") - private String id; + @Field(value = "_id") + private ObjectId _id; @Expose @Field(value = "phoneNumber") diff --git a/src/main/java/com/wipro/fhir/service/common/CommonServiceImpl.java b/src/main/java/com/wipro/fhir/service/common/CommonServiceImpl.java index 0fd5655..7bbc624 100644 --- a/src/main/java/com/wipro/fhir/service/common/CommonServiceImpl.java +++ b/src/main/java/com/wipro/fhir/service/common/CommonServiceImpl.java @@ -39,8 +39,6 @@ import org.springframework.context.annotation.PropertySource; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.core.query.Update; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -148,9 +146,6 @@ public class CommonServiceImpl implements CommonService { @Autowired private PatientDataGatewayService patientDataGatewayService; - - @Autowired - private MongoTemplate mongoTemplate; @Autowired private GenerateSession_NDHMService generateSession_NDHM; @@ -347,7 +342,7 @@ public int addCareContextToMongo(PatientDemographic pDemo, PatientEligibleForRes logger.info("********data to be saved in mongo :" , cc); PatientCareContexts pcc; - PatientCareContexts resultSet; + PatientCareContexts resultSet = null; if (pDemo.getBeneficiaryID() != null) { pcc = patientCareContextsMongoRepo.findByIdentifier(pDemo.getBeneficiaryID().toString()); @@ -357,7 +352,6 @@ public int addCareContextToMongo(PatientDemographic pDemo, PatientEligibleForRes ccList.add(cc); pcc.setCareContextsList(ccList); resultSet = patientCareContextsMongoRepo.save(pcc); - } else { pcc = new PatientCareContexts(); pcc.setCaseReferenceNumber(pDemo.getBeneficiaryID().toString()); @@ -396,7 +390,7 @@ public int addCareContextToMongo(PatientDemographic pDemo, PatientEligibleForRes } - if (resultSet != null && resultSet.getId() != null) + if (resultSet != null && resultSet.get_id() != null) response = 1; } From 9d30d46eb0565001937cfef5462513c2101e18ce Mon Sep 17 00:00:00 2001 From: KA40094929 Date: Fri, 18 Oct 2024 17:31:27 +0530 Subject: [PATCH 5/7] ABHA Creation M1 V3 API changes --- src/main/environment/common_ci.properties | 5 + src/main/environment/common_dev.properties | 5 + .../environment/common_example.properties | 5 + src/main/environment/common_test.properties | 5 + .../abha/creation/CreateAbhaV3Controller.java | 107 ++++++ .../fhir/data/v3/abhaCard/ConsentRequest.java | 10 + .../data/v3/abhaCard/EnrollByAadhaar.java | 14 + .../fhir/data/v3/abhaCard/LoginMethod.java | 13 + .../fhir/data/v3/abhaCard/OtpRequest.java | 15 + .../v3/abhaCard/RequestOTPEnrollment.java | 14 + .../AllergyIntoleranceDataModelRepo.java | 4 +- .../PatientCareContextsMongoRepo.java | 3 +- .../v3/abha/creation/CreateAbhaV3Service.java | 14 + .../creation/CreateAbhaV3ServiceImpl.java | 319 ++++++++++++++++++ .../java/com/wipro/fhir/utils/Encryption.java | 66 ++++ 15 files changed, 597 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/wipro/fhir/controller/v3/abha/creation/CreateAbhaV3Controller.java create mode 100644 src/main/java/com/wipro/fhir/data/v3/abhaCard/ConsentRequest.java create mode 100644 src/main/java/com/wipro/fhir/data/v3/abhaCard/EnrollByAadhaar.java create mode 100644 src/main/java/com/wipro/fhir/data/v3/abhaCard/LoginMethod.java create mode 100644 src/main/java/com/wipro/fhir/data/v3/abhaCard/OtpRequest.java create mode 100644 src/main/java/com/wipro/fhir/data/v3/abhaCard/RequestOTPEnrollment.java create mode 100644 src/main/java/com/wipro/fhir/service/v3/abha/creation/CreateAbhaV3Service.java create mode 100644 src/main/java/com/wipro/fhir/service/v3/abha/creation/CreateAbhaV3ServiceImpl.java create mode 100644 src/main/java/com/wipro/fhir/utils/Encryption.java diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index 50051d4..b5fd4b1 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -84,6 +84,11 @@ abdmAccountProfile=@env.ABDM_Account_ID_BASE_URL@/api/v1/account/profile ##ABDM Facility services getAbdmFacilityServicies= https://dev.abdm.gov.in/devservice/v1/bridges/getServices +##ABDM V3 APIs +getAuthCertPublicKey = https://healthidsbx.abdm.gov.in/api/v1/auth/cert +requestOtpForEnrollment = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/request/otp +abhaEnrollByAadhaar = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/byAadhaar + abhaMode=sbx diff --git a/src/main/environment/common_dev.properties b/src/main/environment/common_dev.properties index f7484b6..408bcff 100644 --- a/src/main/environment/common_dev.properties +++ b/src/main/environment/common_dev.properties @@ -84,6 +84,11 @@ abdmAccountProfile=@env.ABDM_Account_ID_BASE_URL@/api/v1/account/profile ##ABDM Facility services getAbdmFacilityServicies= https://dev.abdm.gov.in/devservice/v1/bridges/getServices +##ABDM V3 APIs +getAuthCertPublicKey = https://healthidsbx.abdm.gov.in/api/v1/auth/cert +requestOtpForEnrollment = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/request/otp +abhaEnrollByAadhaar = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/byAadhaar + abhaMode=sbx diff --git a/src/main/environment/common_example.properties b/src/main/environment/common_example.properties index dee5c20..bbe7c5c 100644 --- a/src/main/environment/common_example.properties +++ b/src/main/environment/common_example.properties @@ -84,6 +84,11 @@ abdmAccountProfile=@env.ABDM_Account_ID_BASE_URL@/api/v1/account/profile ##ABDM Facility services getAbdmFacilityServicies= https://dev.abdm.gov.in/devservice/v1/bridges/getServices +##ABDM V3 APIs +getAuthCertPublicKey = https://healthidsbx.abdm.gov.in/api/v1/auth/cert +requestOtpForEnrollment = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/request/otp +abhaEnrollByAadhaar = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/byAadhaar + abhaMode=sbx diff --git a/src/main/environment/common_test.properties b/src/main/environment/common_test.properties index f7484b6..408bcff 100644 --- a/src/main/environment/common_test.properties +++ b/src/main/environment/common_test.properties @@ -84,6 +84,11 @@ abdmAccountProfile=@env.ABDM_Account_ID_BASE_URL@/api/v1/account/profile ##ABDM Facility services getAbdmFacilityServicies= https://dev.abdm.gov.in/devservice/v1/bridges/getServices +##ABDM V3 APIs +getAuthCertPublicKey = https://healthidsbx.abdm.gov.in/api/v1/auth/cert +requestOtpForEnrollment = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/request/otp +abhaEnrollByAadhaar = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/byAadhaar + abhaMode=sbx diff --git a/src/main/java/com/wipro/fhir/controller/v3/abha/creation/CreateAbhaV3Controller.java b/src/main/java/com/wipro/fhir/controller/v3/abha/creation/CreateAbhaV3Controller.java new file mode 100644 index 0000000..8214069 --- /dev/null +++ b/src/main/java/com/wipro/fhir/controller/v3/abha/creation/CreateAbhaV3Controller.java @@ -0,0 +1,107 @@ +package com.wipro.fhir.controller.v3.abha.creation; + +import java.util.HashMap; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.google.gson.Gson; +import com.wipro.fhir.service.ndhm.GenerateHealthID_CardServiceImpl; +import com.wipro.fhir.service.v3.abha.creation.CreateAbhaV3Service; +import com.wipro.fhir.utils.exception.FHIRException; +import com.wipro.fhir.utils.response.OutputResponse; + +import io.swagger.v3.oas.annotations.Operation; + +@CrossOrigin +@RestController +@RequestMapping(value = "/abhaCreation", headers = "Authorization") +public class CreateAbhaV3Controller { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + @Autowired + private CreateAbhaV3Service createAbhaV3Service; + + @Autowired + private GenerateHealthID_CardServiceImpl generateHealthID_CardServiceImpl; + + @CrossOrigin + @Operation(summary = "Generate OTP for ABHA enrollment") + @PostMapping(value = { "/requestOtpForAbhaEnrollment" }) + public String requestOtpForEnrollment(@RequestBody String request) { + logger.info("Generate OTP for ABHA enrollment API request " + request); + OutputResponse response = new OutputResponse(); + try { + if (request != null) { + String s = createAbhaV3Service.getOtpForEnrollment(request); + response.setResponse(s); + } else + throw new FHIRException("NDHM_FHIR Empty request object"); + } catch (FHIRException e) { + response.setError(5000, e.getMessage()); + logger.error(e.toString()); + } + logger.info("NDHM_FHIR generate OTP for ABHA card API response " + response.toString()); + return response.toString(); + } + + @CrossOrigin + @Operation(summary = "ABHA enrollment by Aadhaar") + @PostMapping(value = { "/abhaEnrollmentByAadhaar" }) + public String abhaEnrollmentByAadhaar(@RequestBody String request) { + logger.info("ABHA enrollment BY Aadhaar API request " + request); + OutputResponse response = new OutputResponse(); + String res = null; + try { + if (request != null) { + res = createAbhaV3Service.enrollmentByAadhaar(request); +// if(abdmToken != null) { +// HashMap map = new HashMap(); +// String card = generateHealthID_CardServiceImpl.generateCard(request, abdmToken); +// if (card != null) { +// map.put("data", card); +// res = new Gson().toJson(map); +// } else +// throw new FHIRException("NDHM_FHIR Error while generating ABHA card"); +// +// } else { +// throw new FHIRException("NDHM_FHIR Error while validating OTP"); +// } + response.setResponse(res); + } else + throw new FHIRException("NDHM_FHIR Empty request object"); + } catch (FHIRException e) { + response.setError(5000, e.getMessage()); + logger.error(e.toString()); + } + logger.info("NDHM_FHIR generate OTP for ABHA card API response " + response.toString()); + return response.toString(); + } + + @CrossOrigin + @Operation(summary = "Verify Mobile OTP for ABHA enrollment") + @PostMapping(value = { "/verifyAuthByMobile" }) + public String verifyMobileForAuth(@RequestBody String request) { + logger.info("Generate OTP for ABHA enrollment API request " + request); + OutputResponse response = new OutputResponse(); + try { + if (request != null) { + String s = createAbhaV3Service.verifyAuthByMobile(request); + response.setResponse(s); + } else + throw new FHIRException("NDHM_FHIR Empty request object"); + } catch (FHIRException e) { + response.setError(5000, e.getMessage()); + logger.error(e.toString()); + } + logger.info("NDHM_FHIR generate OTP for ABHA card API response " + response.toString()); + return response.toString(); + } +} diff --git a/src/main/java/com/wipro/fhir/data/v3/abhaCard/ConsentRequest.java b/src/main/java/com/wipro/fhir/data/v3/abhaCard/ConsentRequest.java new file mode 100644 index 0000000..c454a9c --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/v3/abhaCard/ConsentRequest.java @@ -0,0 +1,10 @@ +package com.wipro.fhir.data.v3.abhaCard; + +import lombok.Data; + +@Data +public class ConsentRequest { + + private String code; + private String version; +} diff --git a/src/main/java/com/wipro/fhir/data/v3/abhaCard/EnrollByAadhaar.java b/src/main/java/com/wipro/fhir/data/v3/abhaCard/EnrollByAadhaar.java new file mode 100644 index 0000000..ae797af --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/v3/abhaCard/EnrollByAadhaar.java @@ -0,0 +1,14 @@ +package com.wipro.fhir.data.v3.abhaCard; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import lombok.Data; + +@Data +public class EnrollByAadhaar{ + public Map authData; + public ConsentRequest consent; +} + diff --git a/src/main/java/com/wipro/fhir/data/v3/abhaCard/LoginMethod.java b/src/main/java/com/wipro/fhir/data/v3/abhaCard/LoginMethod.java new file mode 100644 index 0000000..431a410 --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/v3/abhaCard/LoginMethod.java @@ -0,0 +1,13 @@ +package com.wipro.fhir.data.v3.abhaCard; + +import lombok.Data; + +@Data +public class LoginMethod { + + String loginId; + String loginMethod; + String tnxId; + String mobileNumber; + +} diff --git a/src/main/java/com/wipro/fhir/data/v3/abhaCard/OtpRequest.java b/src/main/java/com/wipro/fhir/data/v3/abhaCard/OtpRequest.java new file mode 100644 index 0000000..25d905a --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/v3/abhaCard/OtpRequest.java @@ -0,0 +1,15 @@ +package com.wipro.fhir.data.v3.abhaCard; + +import java.sql.Timestamp; + +import lombok.Data; + +@Data +public class OtpRequest { + + private String timestamp; + private String txnId; + private String otpValue; + private String mobile; + +} diff --git a/src/main/java/com/wipro/fhir/data/v3/abhaCard/RequestOTPEnrollment.java b/src/main/java/com/wipro/fhir/data/v3/abhaCard/RequestOTPEnrollment.java new file mode 100644 index 0000000..8eefe19 --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/v3/abhaCard/RequestOTPEnrollment.java @@ -0,0 +1,14 @@ +package com.wipro.fhir.data.v3.abhaCard; + +import lombok.Data; + +@Data +public class RequestOTPEnrollment { + + String tnxId; + String[] scope; + String loginHint; + String loginId; + String otpSystem; + +} diff --git a/src/main/java/com/wipro/fhir/repo/common/AllergyIntoleranceDataModelRepo.java b/src/main/java/com/wipro/fhir/repo/common/AllergyIntoleranceDataModelRepo.java index e7d980e..655e949 100644 --- a/src/main/java/com/wipro/fhir/repo/common/AllergyIntoleranceDataModelRepo.java +++ b/src/main/java/com/wipro/fhir/repo/common/AllergyIntoleranceDataModelRepo.java @@ -21,6 +21,8 @@ */ package com.wipro.fhir.repo.common; +import java.math.BigInteger; + import org.springframework.data.repository.CrudRepository; import org.springframework.data.rest.core.annotation.RestResource; import org.springframework.stereotype.Repository; @@ -29,7 +31,7 @@ @Repository @RestResource(exported = false) -public interface AllergyIntoleranceDataModelRepo extends CrudRepository { +public interface AllergyIntoleranceDataModelRepo extends CrudRepository { } diff --git a/src/main/java/com/wipro/fhir/repo/mongo/amrit_resource/PatientCareContextsMongoRepo.java b/src/main/java/com/wipro/fhir/repo/mongo/amrit_resource/PatientCareContextsMongoRepo.java index af05eea..a5e265d 100644 --- a/src/main/java/com/wipro/fhir/repo/mongo/amrit_resource/PatientCareContextsMongoRepo.java +++ b/src/main/java/com/wipro/fhir/repo/mongo/amrit_resource/PatientCareContextsMongoRepo.java @@ -21,6 +21,7 @@ */ package com.wipro.fhir.repo.mongo.amrit_resource; +import org.bson.types.ObjectId; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.rest.core.annotation.RestResource; import org.springframework.stereotype.Repository; @@ -29,6 +30,6 @@ @Repository @RestResource(exported = false) -public interface PatientCareContextsMongoRepo extends MongoRepository { +public interface PatientCareContextsMongoRepo extends MongoRepository { public PatientCareContexts findByIdentifier(String benID); } diff --git a/src/main/java/com/wipro/fhir/service/v3/abha/creation/CreateAbhaV3Service.java b/src/main/java/com/wipro/fhir/service/v3/abha/creation/CreateAbhaV3Service.java new file mode 100644 index 0000000..22668ee --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/v3/abha/creation/CreateAbhaV3Service.java @@ -0,0 +1,14 @@ +package com.wipro.fhir.service.v3.abha.creation; + +import com.wipro.fhir.utils.exception.FHIRException; + +public interface CreateAbhaV3Service { + + String getOtpForEnrollment(String request) throws FHIRException; + + String enrollmentByAadhaar(String request) throws FHIRException; + + String verifyAuthByMobile(String request) throws FHIRException; + + +} diff --git a/src/main/java/com/wipro/fhir/service/v3/abha/creation/CreateAbhaV3ServiceImpl.java b/src/main/java/com/wipro/fhir/service/v3/abha/creation/CreateAbhaV3ServiceImpl.java new file mode 100644 index 0000000..1e84c23 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/v3/abha/creation/CreateAbhaV3ServiceImpl.java @@ -0,0 +1,319 @@ +package com.wipro.fhir.service.v3.abha.creation; + +import java.sql.Timestamp; +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.TimeZone; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatusCode; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; + +import com.google.gson.Gson; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.wipro.fhir.data.healthID.HealthIDRequestAadhar; +import com.wipro.fhir.data.healthID.HealthIDResponse; +import com.wipro.fhir.data.v3.abhaCard.ConsentRequest; +import com.wipro.fhir.data.v3.abhaCard.EnrollByAadhaar; +import com.wipro.fhir.data.v3.abhaCard.LoginMethod; +import com.wipro.fhir.data.v3.abhaCard.OtpRequest; +import com.wipro.fhir.data.v3.abhaCard.RequestOTPEnrollment; +import com.wipro.fhir.service.ndhm.Common_NDHMService; +import com.wipro.fhir.service.ndhm.GenerateSession_NDHMService; +import com.wipro.fhir.utils.Encryption; +import com.wipro.fhir.utils.exception.FHIRException; +import com.wipro.fhir.utils.http.HttpUtils; +import com.wipro.fhir.utils.mapper.InputMapper; +import java.text.DateFormat; +import java.text.SimpleDateFormat; + +@Service +public class CreateAbhaV3ServiceImpl implements CreateAbhaV3Service { + + @Autowired + private GenerateSession_NDHMService generateSession_NDHM; + @Autowired + private Common_NDHMService common_NDHMService; + @Autowired + HttpUtils httpUtils; + @Autowired + Encryption encryption; + + @Value("${getAuthCertPublicKey}") + String getAuthCertPublicKey; + + @Value("${requestOtpForEnrollment}") + String requestOtpForEnrollment; + + @Value("${abhaEnrollByAadhaar}") + String abhaEnrollByAadhaar; + + @Value("${abhaMode}") + String abhaMode; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + @Override + public String getOtpForEnrollment(String request) throws FHIRException { + String res = null; + Map responseMap = new HashMap<>(); + RestTemplate restTemplate = new RestTemplate(); + String encryptedLoginId = null; + String publicKeyString = null; + + try { + String ndhmAuthToken = generateSession_NDHM.getNDHMAuthToken(); + + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.add("Content-Type", MediaType.APPLICATION_JSON + ";charset=utf-8"); + headers.add("REQUEST-ID", UUID.randomUUID().toString()); + + TimeZone tz = TimeZone.getTimeZone("UTC"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + df.setTimeZone(tz); + String nowAsISO = df.format(new Date()); + headers.add("TIMESTAMP", nowAsISO); + headers.add("Authorization", ndhmAuthToken); + + RequestOTPEnrollment reqOtpEnrollment = new RequestOTPEnrollment(); + LoginMethod loginMethod = InputMapper.gson().fromJson(request, LoginMethod.class); + + publicKeyString = getCertPublicKey(); + if (loginMethod.getLoginId() != null) { + encryptedLoginId = encryption.encrypt(loginMethod.getLoginId(), publicKeyString); + } + + if ("AADHAAR".equalsIgnoreCase(loginMethod.getLoginMethod())) { + reqOtpEnrollment.setLoginId(encryptedLoginId); + reqOtpEnrollment.setOtpSystem("aadhaar"); + reqOtpEnrollment.setLoginHint("aadhaar"); + reqOtpEnrollment.setScope(new String[] { "abha-enrol" }); + } + + String requestOBJ = new Gson().toJson(reqOtpEnrollment); + logger.info("ABDM reqobj for request otp for enrollment: " + requestOBJ); + + HttpEntity httpEntity = new HttpEntity<>(requestOBJ, headers); + ResponseEntity responseEntity = restTemplate.exchange(requestOtpForEnrollment, HttpMethod.POST, + httpEntity, String.class); + + String responseStrLogin = common_NDHMService.getBody(responseEntity); + if (responseEntity.getStatusCode() == HttpStatusCode.valueOf(200) && responseEntity.hasBody()) { + JsonObject jsnOBJ = JsonParser.parseString(responseStrLogin).getAsJsonObject(); + String txnId = jsnOBJ.get("txnId").getAsString(); + responseMap.put("txnId", txnId); + res = new Gson().toJson(responseMap); + } else { + throw new FHIRException("ABDM Error while accessing request OTP for Enrollment API - status code: " + + responseEntity.getStatusCode() + ", error message: " + responseEntity.getBody()); + } + } catch (Exception e) { + throw new FHIRException("NDHM_FHIR Error while accessing ABDM API: " + e.getMessage(), e); + } + + return res; + } + + @Override + public String enrollmentByAadhaar(String request) throws FHIRException { + Map responseMap = new HashMap<>(); + RestTemplate restTemplate = new RestTemplate(); + String encryptedLoginId = null; + String publicKeyString = null; + String abdmOtpToken = null; + HealthIDResponse health = new HealthIDResponse(); + + try { + String ndhmAuthToken = generateSession_NDHM.getNDHMAuthToken(); + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.add("Content-Type", MediaType.APPLICATION_JSON.toString()); + headers.add("REQUEST-ID", UUID.randomUUID().toString()); + + TimeZone tz = TimeZone.getTimeZone("UTC"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + df.setTimeZone(tz); + String nowAsISO = df.format(new Date()); + headers.add("TIMESTAMP", nowAsISO); + headers.add("Authorization", ndhmAuthToken); + + // Create the enrollByAadhar object + EnrollByAadhaar enrollByAadhar = new EnrollByAadhaar(); + LoginMethod loginData = InputMapper.gson().fromJson(request, LoginMethod.class); + + publicKeyString = getCertPublicKey(); + if (loginData.getLoginId() != null) { + encryptedLoginId = encryption.encrypt(loginData.getLoginId(), publicKeyString); + } + + if ("AADHAAR".equalsIgnoreCase(loginData.getLoginMethod())) { + OtpRequest otp = new OtpRequest(); + + // Get current timestamp + OffsetDateTime now = OffsetDateTime.now(java.time.ZoneOffset.UTC); + DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; + String formattedTimestamp = now.format(formatter); + otp.setTimestamp(formattedTimestamp); + + otp.setTxnId(loginData.getTnxId()); + otp.setOtpValue(encryptedLoginId); + otp.setMobile(loginData.getMobileNumber()); + + Map authDataMap = new HashMap<>(); + authDataMap.put("otp", otp); + authDataMap.put("authMethods", new String[] { "otp" }); + + enrollByAadhar.setAuthData(authDataMap); + + ConsentRequest consent = new ConsentRequest(); + consent.setCode("abha-enrollment"); + consent.setVersion("1.4"); + enrollByAadhar.setConsent(consent); + + logger.info("ABDM request for enroll by Aadhaar: " + enrollByAadhar); + + String requestObj = new Gson().toJson(enrollByAadhar); + logger.info("ABDM request object for enrollment: " + requestObj); + + HttpEntity httpEntity = new HttpEntity<>(requestObj, headers); + ResponseEntity responseEntity = restTemplate.exchange(abhaEnrollByAadhaar, HttpMethod.POST, + httpEntity, String.class); + + String responseStrLogin = common_NDHMService.getBody(responseEntity); + if (responseEntity.getStatusCode() == HttpStatusCode.valueOf(200) && responseEntity.hasBody()) { + JsonObject jsonResponse = JsonParser.parseString(responseStrLogin).getAsJsonObject(); + + // Check for success messages + String message = jsonResponse.get("message").getAsString(); + if (message != null && (message.equalsIgnoreCase("account created successfully") + || message.equalsIgnoreCase("this account already exist"))) { +// if (jsonResponse.has("tokens")) { +// JsonObject tokenAsJsonObj = jsonResponse.get("tokens").getAsJsonObject(); +// abdmOtpToken = "Bearer " + tokenAsJsonObj.get("token").getAsString(); +// responseMap.put("abdmToken", abdmOtpToken); +// } else { +// throw new FHIRException("NDHM_FHIR Error: Token not found in the response."); +// } + if (jsonResponse.has("ABHAProfile")) { + JsonObject abhaProfileAsJsonObj = jsonResponse.get("ABHAProfile").getAsJsonObject(); + if (abhaProfileAsJsonObj.has("mobile") && abhaProfileAsJsonObj.get("mobile") != null) { + health = InputMapper.gson().fromJson(abhaProfileAsJsonObj, HealthIDResponse.class); + responseMap.put("message", "Mobile number linked to ABHA"); + } else { + +// getOtpForEnrollment(request, "mobile-verify", jsonResponse.get("txnId").getAsString()); + } + } + } + } else { + throw new FHIRException("ABDM Error: Status code " + responseEntity.getStatusCode() + + ", error message: " + responseEntity.getBody()); + } + } + } catch (Exception e) { + throw new FHIRException("NDHM_FHIR Error while accessing ABDM API: " + e.getMessage(), e); + } + + return abdmOtpToken; + } + + + @Override + public String verifyAuthByMobile(String request) throws FHIRException { + String res = null; + Map responseMap = new HashMap<>(); + RestTemplate restTemplate = new RestTemplate(); + String encryptedLoginId = null; + String publicKeyString = null; + + try { + String ndhmAuthToken = generateSession_NDHM.getNDHMAuthToken(); + + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.add("Content-Type", MediaType.APPLICATION_JSON + ";charset=utf-8"); + headers.add("REQUEST-ID", UUID.randomUUID().toString()); + + TimeZone tz = TimeZone.getTimeZone("UTC"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + df.setTimeZone(tz); + String nowAsISO = df.format(new Date()); + headers.add("TIMESTAMP", nowAsISO); + headers.add("Authorization", ndhmAuthToken); + + RequestOTPEnrollment reqOtpEnrollment = new RequestOTPEnrollment(); + LoginMethod loginMethod = InputMapper.gson().fromJson(request, LoginMethod.class); + + publicKeyString = getCertPublicKey(); + if (loginMethod.getLoginId() != null) { + encryptedLoginId = encryption.encrypt(loginMethod.getLoginId(), publicKeyString); + } + + if ("AADHAAR".equalsIgnoreCase(loginMethod.getLoginMethod())) { + reqOtpEnrollment.setLoginId(encryptedLoginId); + reqOtpEnrollment.setTnxId(loginMethod.getTnxId()); + reqOtpEnrollment.setOtpSystem("abdm"); + reqOtpEnrollment.setLoginHint("mobile"); + reqOtpEnrollment.setScope(new String[] { "abha-enrol", "mobile-verify" }); + + } + + String requestOBJ = new Gson().toJson(reqOtpEnrollment); + logger.info("ABDM reqobj for request otp for enrollment: " + requestOBJ); + + HttpEntity httpEntity = new HttpEntity<>(requestOBJ, headers); + ResponseEntity responseEntity = restTemplate.exchange(requestOtpForEnrollment, HttpMethod.POST, + httpEntity, String.class); + + String responseStrLogin = common_NDHMService.getBody(responseEntity); + if (responseEntity.getStatusCode() == HttpStatusCode.valueOf(200) && responseEntity.hasBody()) { + JsonObject jsnOBJ = JsonParser.parseString(responseStrLogin).getAsJsonObject(); + String txnId = jsnOBJ.get("txnId").getAsString(); + responseMap.put("txnId", txnId); + res = new Gson().toJson(responseMap); + } else { + throw new FHIRException("ABDM Error while accessing request OTP for Enrollment API - status code: " + + responseEntity.getStatusCode() + ", error message: " + responseEntity.getBody()); + } + } catch (Exception e) { + throw new FHIRException("NDHM_FHIR Error while accessing ABDM API: " + e.getMessage(), e); + } + + return res; + } + + public String getCertPublicKey() throws FHIRException { + + RestTemplate restTemplate = new RestTemplate(); + HttpEntity requestEntity = new HttpEntity<>(null); + + ResponseEntity certResp = restTemplate.exchange(getAuthCertPublicKey, HttpMethod.GET, requestEntity, + String.class); + String body = certResp.getBody(); + + String publicKeyString = body.replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "") + .replaceAll("\\s+", ""); + + logger.info("publicKeyString : " + publicKeyString); + + return publicKeyString; + + } +} diff --git a/src/main/java/com/wipro/fhir/utils/Encryption.java b/src/main/java/com/wipro/fhir/utils/Encryption.java new file mode 100644 index 0000000..dc6550f --- /dev/null +++ b/src/main/java/com/wipro/fhir/utils/Encryption.java @@ -0,0 +1,66 @@ +package com.wipro.fhir.utils; + +import java.net.URI; +import java.net.URISyntaxException; +import java.security.InvalidKeyException; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.PublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.X509EncodedKeySpec; +import java.util.TimeZone; +import java.util.UUID; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.NoSuchPaddingException; + +import java.util.Base64; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; + +import com.wipro.fhir.utils.exception.FHIRException; + +@Service +public class Encryption { + + @Value("${ndhmuserAuthenticate}") + private String ndhmUserAuthenticate; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + public String encrypt(String text, String publicKeyString) throws FHIRException, NoSuchAlgorithmException, + InvalidKeySpecException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { + String encryptedTextBase64 = ""; + byte[] publicKeyBytes = Base64.getDecoder().decode(publicKeyString); + KeyFactory keyFactory = KeyFactory.getInstance("RSA"); + X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(publicKeyBytes); + PublicKey publicKey = keyFactory.generatePublic(publicKeySpec); + + // Cipher used in ABHA v3 APIs + Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-1AndMGF1Padding"); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + byte[] encryptedText = cipher.doFinal(text.getBytes()); + encryptedTextBase64 = Base64.getEncoder().encodeToString(encryptedText); + logger.info("encryptedTextBase64 :" + encryptedTextBase64); + + return encryptedTextBase64; + + } + +} From 583594af857ffc29ea79d27993b84e74fa8d6d35 Mon Sep 17 00:00:00 2001 From: KA40094929 Date: Mon, 9 Dec 2024 20:29:07 +0530 Subject: [PATCH 6/7] Abha V3 changes --- src/main/environment/common_ci.properties | 12 +- src/main/environment/common_dev.properties | 3 + .../environment/common_example.properties | 3 + src/main/environment/common_test.properties | 3 + .../CreateAbhaV3Controller.java | 42 +- .../v3/abha/LoginAbhaV3Controller.java | 68 +++ .../fhir/data/v3/abhaCard/BioRequest.java | 14 + .../data/v3/abhaCard/LoginAbhaRequest.java | 12 + .../fhir/data/v3/abhaCard/LoginMethod.java | 11 +- .../data/v3/abhaCard/VerifyAbhaLogin.java | 13 + .../fhir/repo/healthID/HealthIDRepo.java | 4 + .../v3/abha/CertificateKeyService.java | 9 + .../v3/abha/CertificateKeyServiceImpl.java | 41 ++ .../service/v3/abha/CreateAbhaV3Service.java | 16 + .../v3/abha/CreateAbhaV3ServiceImpl.java | 425 ++++++++++++++++++ .../service/v3/abha/LoginAbhaV3Service.java | 11 + .../v3/abha/LoginAbhaV3ServiceImpl.java | 223 +++++++++ .../v3/abha/creation/CreateAbhaV3Service.java | 14 - .../creation/CreateAbhaV3ServiceImpl.java | 319 ------------- .../java/com/wipro/fhir/utils/Encryption.java | 18 +- 20 files changed, 885 insertions(+), 376 deletions(-) rename src/main/java/com/wipro/fhir/controller/v3/abha/{creation => }/CreateAbhaV3Controller.java (79%) create mode 100644 src/main/java/com/wipro/fhir/controller/v3/abha/LoginAbhaV3Controller.java create mode 100644 src/main/java/com/wipro/fhir/data/v3/abhaCard/BioRequest.java create mode 100644 src/main/java/com/wipro/fhir/data/v3/abhaCard/LoginAbhaRequest.java create mode 100644 src/main/java/com/wipro/fhir/data/v3/abhaCard/VerifyAbhaLogin.java create mode 100644 src/main/java/com/wipro/fhir/service/v3/abha/CertificateKeyService.java create mode 100644 src/main/java/com/wipro/fhir/service/v3/abha/CertificateKeyServiceImpl.java create mode 100644 src/main/java/com/wipro/fhir/service/v3/abha/CreateAbhaV3Service.java create mode 100644 src/main/java/com/wipro/fhir/service/v3/abha/CreateAbhaV3ServiceImpl.java create mode 100644 src/main/java/com/wipro/fhir/service/v3/abha/LoginAbhaV3Service.java create mode 100644 src/main/java/com/wipro/fhir/service/v3/abha/LoginAbhaV3ServiceImpl.java delete mode 100644 src/main/java/com/wipro/fhir/service/v3/abha/creation/CreateAbhaV3Service.java delete mode 100644 src/main/java/com/wipro/fhir/service/v3/abha/creation/CreateAbhaV3ServiceImpl.java diff --git a/src/main/environment/common_ci.properties b/src/main/environment/common_ci.properties index b5fd4b1..21375c3 100644 --- a/src/main/environment/common_ci.properties +++ b/src/main/environment/common_ci.properties @@ -82,12 +82,16 @@ abdmConfirmAadhaarBio=@env.ABDM_HEALTH_ID_BASE_URL@/api/v1/auth/confirmWithAadha abdmAccountProfile=@env.ABDM_Account_ID_BASE_URL@/api/v1/account/profile ##ABDM Facility services -getAbdmFacilityServicies= https://dev.abdm.gov.in/devservice/v1/bridges/getServices +getAbdmFacilityServicies= @env.ABDM_BASE_URL@/devservice/v1/bridges/getServices ##ABDM V3 APIs -getAuthCertPublicKey = https://healthidsbx.abdm.gov.in/api/v1/auth/cert -requestOtpForEnrollment = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/request/otp -abhaEnrollByAadhaar = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/byAadhaar +getAuthCertPublicKey = @env.ABDM_HEALTH_ID_BASE_URL@/api/v1/auth/cert +requestOtpForEnrollment = @env.ABDM_BASE_URL@/abha/api/v3/enrollment/request/otp +abhaEnrollByAadhaar = @env.ABDM_BASE_URL@/abha/api/v3/enrollment/enrol/byAadhaar +printAbhaCard = @env.ABDM_BASE_URL@/abha/api/v3/profile/account/abha-card +abhaLoginRequestOtp = @env.ABDM_BASE_URL@/abha/api/v3/profile/login/request/otp +verifyAbhaLogin = @env.ABDM_BASE_URL@/abha/api/v3/profile/login/verify + abhaMode=sbx diff --git a/src/main/environment/common_dev.properties b/src/main/environment/common_dev.properties index 408bcff..d798719 100644 --- a/src/main/environment/common_dev.properties +++ b/src/main/environment/common_dev.properties @@ -88,6 +88,9 @@ getAbdmFacilityServicies= https://dev.abdm.gov.in/devservice/v1/bridges/getServi getAuthCertPublicKey = https://healthidsbx.abdm.gov.in/api/v1/auth/cert requestOtpForEnrollment = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/request/otp abhaEnrollByAadhaar = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/byAadhaar +printAbhaCard = https://abhasbx.abdm.gov.in/abha/api/v3/profile/account/abha-card +abhaLoginRequestOtp = https://abhasbx.abdm.gov.in/abha/api/v3/profile/login/request/otp +verifyAbhaLogin = https://abhasbx.abdm.gov.in/abha/api/v3/profile/login/verify abhaMode=sbx diff --git a/src/main/environment/common_example.properties b/src/main/environment/common_example.properties index bbe7c5c..208ebf3 100644 --- a/src/main/environment/common_example.properties +++ b/src/main/environment/common_example.properties @@ -88,6 +88,9 @@ getAbdmFacilityServicies= https://dev.abdm.gov.in/devservice/v1/bridges/getServi getAuthCertPublicKey = https://healthidsbx.abdm.gov.in/api/v1/auth/cert requestOtpForEnrollment = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/request/otp abhaEnrollByAadhaar = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/byAadhaar +printAbhaCard = https://abhasbx.abdm.gov.in/abha/api/v3/profile/account/abha-card +abhaLoginRequestOtp = https://abhasbx.abdm.gov.in/abha/api/v3/profile/login/request/otp +verifyAbhaLogin = https://abhasbx.abdm.gov.in/abha/api/v3/profile/login/verify abhaMode=sbx diff --git a/src/main/environment/common_test.properties b/src/main/environment/common_test.properties index 408bcff..d798719 100644 --- a/src/main/environment/common_test.properties +++ b/src/main/environment/common_test.properties @@ -88,6 +88,9 @@ getAbdmFacilityServicies= https://dev.abdm.gov.in/devservice/v1/bridges/getServi getAuthCertPublicKey = https://healthidsbx.abdm.gov.in/api/v1/auth/cert requestOtpForEnrollment = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/request/otp abhaEnrollByAadhaar = https://abhasbx.abdm.gov.in/abha/api/v3/enrollment/enrol/byAadhaar +printAbhaCard = https://abhasbx.abdm.gov.in/abha/api/v3/profile/account/abha-card +abhaLoginRequestOtp = https://abhasbx.abdm.gov.in/abha/api/v3/profile/login/request/otp +verifyAbhaLogin = https://abhasbx.abdm.gov.in/abha/api/v3/profile/login/verify abhaMode=sbx diff --git a/src/main/java/com/wipro/fhir/controller/v3/abha/creation/CreateAbhaV3Controller.java b/src/main/java/com/wipro/fhir/controller/v3/abha/CreateAbhaV3Controller.java similarity index 79% rename from src/main/java/com/wipro/fhir/controller/v3/abha/creation/CreateAbhaV3Controller.java rename to src/main/java/com/wipro/fhir/controller/v3/abha/CreateAbhaV3Controller.java index 8214069..fbcd95e 100644 --- a/src/main/java/com/wipro/fhir/controller/v3/abha/creation/CreateAbhaV3Controller.java +++ b/src/main/java/com/wipro/fhir/controller/v3/abha/CreateAbhaV3Controller.java @@ -1,6 +1,4 @@ -package com.wipro.fhir.controller.v3.abha.creation; - -import java.util.HashMap; +package com.wipro.fhir.controller.v3.abha; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -11,9 +9,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import com.google.gson.Gson; import com.wipro.fhir.service.ndhm.GenerateHealthID_CardServiceImpl; -import com.wipro.fhir.service.v3.abha.creation.CreateAbhaV3Service; +import com.wipro.fhir.service.v3.abha.CreateAbhaV3Service; import com.wipro.fhir.utils.exception.FHIRException; import com.wipro.fhir.utils.response.OutputResponse; @@ -62,18 +59,6 @@ public String abhaEnrollmentByAadhaar(@RequestBody String request) { try { if (request != null) { res = createAbhaV3Service.enrollmentByAadhaar(request); -// if(abdmToken != null) { -// HashMap map = new HashMap(); -// String card = generateHealthID_CardServiceImpl.generateCard(request, abdmToken); -// if (card != null) { -// map.put("data", card); -// res = new Gson().toJson(map); -// } else -// throw new FHIRException("NDHM_FHIR Error while generating ABHA card"); -// -// } else { -// throw new FHIRException("NDHM_FHIR Error while validating OTP"); -// } response.setResponse(res); } else throw new FHIRException("NDHM_FHIR Empty request object"); @@ -89,7 +74,7 @@ public String abhaEnrollmentByAadhaar(@RequestBody String request) { @Operation(summary = "Verify Mobile OTP for ABHA enrollment") @PostMapping(value = { "/verifyAuthByMobile" }) public String verifyMobileForAuth(@RequestBody String request) { - logger.info("Generate OTP for ABHA enrollment API request " + request); + logger.info("Verify Mobile OTP for ABHA enrollment " + request); OutputResponse response = new OutputResponse(); try { if (request != null) { @@ -104,4 +89,25 @@ public String verifyMobileForAuth(@RequestBody String request) { logger.info("NDHM_FHIR generate OTP for ABHA card API response " + response.toString()); return response.toString(); } + + @CrossOrigin + @Operation(summary = "Print Abha card") + @PostMapping(value = { "/printAbhaCard" }) + public String printAbhaCard(@RequestBody String request) { + OutputResponse response = new OutputResponse(); + try { + if (request != null) { + String s = createAbhaV3Service.getAbhaCardPrinted(request); + response.setResponse(s); + } else + throw new FHIRException("NDHM_FHIR Empty request object"); + } catch (FHIRException e) { + response.setError(5000, e.getMessage()); + logger.error(e.toString()); + } + logger.info("NDHM_FHIR generate OTP for ABHA card API respponse " + response.toString()); + return response.toString(); + } + + } diff --git a/src/main/java/com/wipro/fhir/controller/v3/abha/LoginAbhaV3Controller.java b/src/main/java/com/wipro/fhir/controller/v3/abha/LoginAbhaV3Controller.java new file mode 100644 index 0000000..24977f2 --- /dev/null +++ b/src/main/java/com/wipro/fhir/controller/v3/abha/LoginAbhaV3Controller.java @@ -0,0 +1,68 @@ +package com.wipro.fhir.controller.v3.abha; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.wipro.fhir.service.v3.abha.LoginAbhaV3Service; +import com.wipro.fhir.utils.exception.FHIRException; +import com.wipro.fhir.utils.response.OutputResponse; + +import io.swagger.v3.oas.annotations.Operation; + +@CrossOrigin +@RestController +@RequestMapping(value = "/abhaLogin", headers = "Authorization") +public class LoginAbhaV3Controller { + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + @Autowired + private LoginAbhaV3Service loginAbhaV3Service; + + @CrossOrigin + @Operation(summary = "Request OTP for Abha LOgin") + @PostMapping(value = { "/abhaLoginRequestOtp" }) + public String requestOtpForAbhaLogin(@RequestBody String request) { + logger.info("Generate OTP for ABHA Login API request " + request); + OutputResponse response = new OutputResponse(); + try { + if (request != null) { + String s = loginAbhaV3Service.requestOtpForAbhaLogin(request); + response.setResponse(s); + } else + throw new FHIRException("NDHM_FHIR Empty request object"); + } catch (FHIRException e) { + response.setError(5000, e.getMessage()); + logger.error(e.toString()); + } + logger.info("NDHM_FHIR generate OTP for ABHA login API response " + response.toString()); + return response.toString(); + } + + @CrossOrigin + @Operation(summary = "verify OTP for Abha LOgin") + @PostMapping(value = { "/verifyAbhaLogin" }) + public String verifyAbhaLogin(@RequestBody String request) { + logger.info("verify OTP for ABHA Login API request " + request); + OutputResponse response = new OutputResponse(); + try { + if (request != null) { + String s = loginAbhaV3Service.verifyAbhaLogin(request); + response.setResponse(s); + } else + throw new FHIRException("NDHM_FHIR Empty request object"); + } catch (FHIRException e) { + response.setError(5000, e.getMessage()); + logger.error(e.toString()); + } + logger.info("NDHM_FHIR Verify abha login API response " + response.toString()); + return response.toString(); + } + +} diff --git a/src/main/java/com/wipro/fhir/data/v3/abhaCard/BioRequest.java b/src/main/java/com/wipro/fhir/data/v3/abhaCard/BioRequest.java new file mode 100644 index 0000000..5009509 --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/v3/abhaCard/BioRequest.java @@ -0,0 +1,14 @@ +package com.wipro.fhir.data.v3.abhaCard; + +import lombok.Data; + +@Data +public class BioRequest { + + private String timestamp; + private String txnId; + private String aadhaar; + private Object fingerPrintAuthPid; + private String mobile; + +} diff --git a/src/main/java/com/wipro/fhir/data/v3/abhaCard/LoginAbhaRequest.java b/src/main/java/com/wipro/fhir/data/v3/abhaCard/LoginAbhaRequest.java new file mode 100644 index 0000000..f9a36b2 --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/v3/abhaCard/LoginAbhaRequest.java @@ -0,0 +1,12 @@ +package com.wipro.fhir.data.v3.abhaCard; + +import lombok.Data; + +@Data +public class LoginAbhaRequest { + + private String loginId; + private String loginMethod; + private String loginHint; + +} diff --git a/src/main/java/com/wipro/fhir/data/v3/abhaCard/LoginMethod.java b/src/main/java/com/wipro/fhir/data/v3/abhaCard/LoginMethod.java index 431a410..2536f29 100644 --- a/src/main/java/com/wipro/fhir/data/v3/abhaCard/LoginMethod.java +++ b/src/main/java/com/wipro/fhir/data/v3/abhaCard/LoginMethod.java @@ -5,9 +5,12 @@ @Data public class LoginMethod { - String loginId; - String loginMethod; - String tnxId; - String mobileNumber; + private String loginId; + private String loginMethod; + private String pId; + private String tnxId; + private String mobileNumber; + private String createdBy; + private int providerServiceMapId; } diff --git a/src/main/java/com/wipro/fhir/data/v3/abhaCard/VerifyAbhaLogin.java b/src/main/java/com/wipro/fhir/data/v3/abhaCard/VerifyAbhaLogin.java new file mode 100644 index 0000000..311b523 --- /dev/null +++ b/src/main/java/com/wipro/fhir/data/v3/abhaCard/VerifyAbhaLogin.java @@ -0,0 +1,13 @@ +package com.wipro.fhir.data.v3.abhaCard; + +import java.util.Map; + +import lombok.Data; + +@Data +public class VerifyAbhaLogin { + + public String[] scope; + public Map authData; + +} diff --git a/src/main/java/com/wipro/fhir/repo/healthID/HealthIDRepo.java b/src/main/java/com/wipro/fhir/repo/healthID/HealthIDRepo.java index 2c8ec03..8426917 100644 --- a/src/main/java/com/wipro/fhir/repo/healthID/HealthIDRepo.java +++ b/src/main/java/com/wipro/fhir/repo/healthID/HealthIDRepo.java @@ -23,4 +23,8 @@ public ArrayList getHealthIDDetailsUsingHealthNumber( @Query(" SELECT HIDR from HealthIDResponse HIDR WHERE HIDR.mobile = :mobile") public ArrayList getHealthIDDetailsUsingMobileNumber(@Param("mobile") String mobile); + + @Query("SELECT COUNT(*) FROM HealthIDResponse HIDR WHERE HIDR.healthIdNumber = :healthId") + public Integer getCountOfHealthIdNumber(@Param("healthId") String healthId); + } diff --git a/src/main/java/com/wipro/fhir/service/v3/abha/CertificateKeyService.java b/src/main/java/com/wipro/fhir/service/v3/abha/CertificateKeyService.java new file mode 100644 index 0000000..63bf1e8 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/v3/abha/CertificateKeyService.java @@ -0,0 +1,9 @@ +package com.wipro.fhir.service.v3.abha; + +import com.wipro.fhir.utils.exception.FHIRException; + +public interface CertificateKeyService { + + public String getCertPublicKey() throws FHIRException; + +} diff --git a/src/main/java/com/wipro/fhir/service/v3/abha/CertificateKeyServiceImpl.java b/src/main/java/com/wipro/fhir/service/v3/abha/CertificateKeyServiceImpl.java new file mode 100644 index 0000000..71e5845 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/v3/abha/CertificateKeyServiceImpl.java @@ -0,0 +1,41 @@ +package com.wipro.fhir.service.v3.abha; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.client.RestTemplate; + +import com.wipro.fhir.utils.exception.FHIRException; + +@Service +public class CertificateKeyServiceImpl implements CertificateKeyService{ + + @Value("${getAuthCertPublicKey}") + String getAuthCertPublicKey; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + @Override + public String getCertPublicKey() throws FHIRException { + + RestTemplate restTemplate = new RestTemplate(); + HttpEntity requestEntity = new HttpEntity<>(null); + + ResponseEntity certResp = restTemplate.exchange(getAuthCertPublicKey, HttpMethod.GET, requestEntity, + String.class); + String body = certResp.getBody(); + + String publicKeyString = body.replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "") + .replaceAll("\\s+", ""); + + logger.info("publicKeyString : " + publicKeyString); + + return publicKeyString; + + } + +} diff --git a/src/main/java/com/wipro/fhir/service/v3/abha/CreateAbhaV3Service.java b/src/main/java/com/wipro/fhir/service/v3/abha/CreateAbhaV3Service.java new file mode 100644 index 0000000..6231476 --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/v3/abha/CreateAbhaV3Service.java @@ -0,0 +1,16 @@ +package com.wipro.fhir.service.v3.abha; + +import com.wipro.fhir.utils.exception.FHIRException; + +public interface CreateAbhaV3Service { + + public String getOtpForEnrollment(String request) throws FHIRException; + + public String enrollmentByAadhaar(String request) throws FHIRException; + + public String verifyAuthByMobile(String request) throws FHIRException; + + public String getAbhaCardPrinted(String reqObj) throws FHIRException; + + +} diff --git a/src/main/java/com/wipro/fhir/service/v3/abha/CreateAbhaV3ServiceImpl.java b/src/main/java/com/wipro/fhir/service/v3/abha/CreateAbhaV3ServiceImpl.java new file mode 100644 index 0000000..5d4fe3e --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/v3/abha/CreateAbhaV3ServiceImpl.java @@ -0,0 +1,425 @@ +package com.wipro.fhir.service.v3.abha; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.TimeZone; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatusCode; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.wipro.fhir.data.healthID.HealthIDResponse; +import com.wipro.fhir.data.v3.abhaCard.BioRequest; +import com.wipro.fhir.data.v3.abhaCard.ConsentRequest; +import com.wipro.fhir.data.v3.abhaCard.EnrollByAadhaar; +import com.wipro.fhir.data.v3.abhaCard.LoginMethod; +import com.wipro.fhir.data.v3.abhaCard.OtpRequest; +import com.wipro.fhir.data.v3.abhaCard.RequestOTPEnrollment; +import com.wipro.fhir.repo.healthID.HealthIDRepo; +import com.wipro.fhir.service.ndhm.Common_NDHMService; +import com.wipro.fhir.service.ndhm.GenerateSession_NDHMService; +import com.wipro.fhir.utils.Encryption; +import com.wipro.fhir.utils.exception.FHIRException; +import com.wipro.fhir.utils.http.HttpUtils; +import com.wipro.fhir.utils.mapper.InputMapper; + +@Service +public class CreateAbhaV3ServiceImpl implements CreateAbhaV3Service { + + @Autowired + private GenerateSession_NDHMService generateSession_NDHM; + @Autowired + private Common_NDHMService common_NDHMService; + @Autowired + HttpUtils httpUtils; + @Autowired + Encryption encryption; + @Autowired + HealthIDRepo healthIDRepo; + @Autowired + CertificateKeyService certificateKeyService; + + @Value("${requestOtpForEnrollment}") + String requestOtpForEnrollment; + + @Value("${abhaEnrollByAadhaar}") + String abhaEnrollByAadhaar; + + @Value("${printAbhaCard}") + String printAbhaCard; + + @Value("${abhaMode}") + String abhaMode; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + @Override + public String getOtpForEnrollment(String request) throws FHIRException { + String res = null; + Map responseMap = new HashMap<>(); + RestTemplate restTemplate = new RestTemplate(); + String encryptedLoginId = null; + String publicKeyString = null; + + try { + String ndhmAuthToken = generateSession_NDHM.getNDHMAuthToken(); + + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.add("Content-Type", MediaType.APPLICATION_JSON + ";charset=utf-8"); + headers.add("REQUEST-ID", UUID.randomUUID().toString()); + + TimeZone tz = TimeZone.getTimeZone("UTC"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + df.setTimeZone(tz); + String nowAsISO = df.format(new Date()); + headers.add("TIMESTAMP", nowAsISO); + headers.add("Authorization", ndhmAuthToken); + + RequestOTPEnrollment reqOtpEnrollment = new RequestOTPEnrollment(); + LoginMethod loginMethod = InputMapper.gson().fromJson(request, LoginMethod.class); + + publicKeyString = certificateKeyService.getCertPublicKey(); + if (loginMethod.getLoginId() != null) { + encryptedLoginId = encryption.encrypt(loginMethod.getLoginId(), publicKeyString); + } + + if ("AADHAAR".equalsIgnoreCase(loginMethod.getLoginMethod())) { + reqOtpEnrollment.setLoginId(encryptedLoginId); + reqOtpEnrollment.setOtpSystem("aadhaar"); + reqOtpEnrollment.setLoginHint("aadhaar"); + reqOtpEnrollment.setScope(new String[] { "abha-enrol" }); + } + + String requestOBJ = new Gson().toJson(reqOtpEnrollment); + logger.info("ABDM reqobj for request otp for enrollment: " + requestOBJ); + + HttpEntity httpEntity = new HttpEntity<>(requestOBJ, headers); + ResponseEntity responseEntity = restTemplate.exchange(requestOtpForEnrollment, HttpMethod.POST, + httpEntity, String.class); + + logger.info("ABDM response for request otp for enrollment: " + responseEntity); + String responseStrLogin = common_NDHMService.getBody(responseEntity); + if (responseEntity.getStatusCode() == HttpStatusCode.valueOf(200) && responseEntity.hasBody()) { + JsonObject jsnOBJ = JsonParser.parseString(responseStrLogin).getAsJsonObject(); + String txnId = jsnOBJ.get("txnId").getAsString(); + String message = jsnOBJ.get("message").getAsString(); + responseMap.put("txnId", txnId); + responseMap.put("message", message); + res = new Gson().toJson(responseMap); + } else { + throw new FHIRException(responseEntity.getBody()); + } + } catch (Exception e) { + throw new FHIRException(e.getMessage()); + } + + return res; + } + + @Override + public String enrollmentByAadhaar(String request) throws FHIRException { + Map responseMap = new HashMap<>(); + RestTemplate restTemplate = new RestTemplate(); + String encryptedLoginId = null; + String publicKeyString = null; + String requestObj = null; + + try { + String ndhmAuthToken = generateSession_NDHM.getNDHMAuthToken(); + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.add("Content-Type", MediaType.APPLICATION_JSON.toString()); + headers.add("REQUEST-ID", UUID.randomUUID().toString()); + + TimeZone tz = TimeZone.getTimeZone("UTC"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + df.setTimeZone(tz); + String nowAsISO = df.format(new Date()); + headers.add("TIMESTAMP", nowAsISO); + headers.add("Authorization", ndhmAuthToken); + + // Create the enrollByAadhar object + EnrollByAadhaar enrollByAadhar = new EnrollByAadhaar(); + LoginMethod loginData = InputMapper.gson().fromJson(request, LoginMethod.class); + + publicKeyString = certificateKeyService.getCertPublicKey(); + if (loginData.getLoginId() != null) { + encryptedLoginId = encryption.encrypt(loginData.getLoginId(), publicKeyString); + } + + if ("AADHAAR".equalsIgnoreCase(loginData.getLoginMethod())) { + + requestObj = formAadharEnrollReqObjByAadhar(loginData, encryptedLoginId); + logger.info("ABDM request object for ABHA enrollment by AADHAAR: " + requestObj); + + } else if ("BIOMETRIC".equalsIgnoreCase(loginData.getLoginMethod())) { + + requestObj = formAadharEnrollReqObjByBiometric(loginData, encryptedLoginId); + logger.info("ABDM request object for ABHA enrollment by BIOMETRIC: " + requestObj); + + } + + HttpEntity httpEntity = new HttpEntity<>(requestObj, headers); + ResponseEntity responseEntity = restTemplate.exchange(abhaEnrollByAadhaar, HttpMethod.POST, + httpEntity, String.class); + + logger.info("ABDM response for ABHA enrollment: " + responseEntity); + String responseStrLogin = common_NDHMService.getBody(responseEntity); + if (responseEntity.getStatusCode() == HttpStatusCode.valueOf(200) && responseEntity.hasBody()) { + JsonObject jsonResponse = JsonParser.parseString(responseStrLogin).getAsJsonObject(); + + // Check for success messages + String message = jsonResponse.get("message").getAsString(); + if (message != null && (message.equalsIgnoreCase("account created successfully") + || message.equalsIgnoreCase("this account already exist"))) { + + if (jsonResponse.has("ABHAProfile")) { + JsonObject abhaProfileAsJsonObj = jsonResponse.get("ABHAProfile").getAsJsonObject(); + Gson gson = new Gson(); + String json = gson.toJson(abhaProfileAsJsonObj); + + HealthIDResponse healthIDResp = gson.fromJson(json, HealthIDResponse.class); + constructHealthIdResponse(healthIDResp, abhaProfileAsJsonObj); + healthIDResp.setProviderServiceMapID(loginData.getProviderServiceMapId()); + healthIDResp.setCreatedBy(loginData.getCreatedBy()); + Integer healthIdCount = healthIDRepo.getCountOfHealthIdNumber(healthIDResp.getHealthIdNumber()); + HealthIDResponse save = healthIDResp; + if (healthIdCount < 1) { + healthIDRepo.save(healthIDResp); + } + responseMap.put("ABHAProfile", gson.toJson(save)); + responseMap.put("txnId", jsonResponse.get("txnId").getAsString()); + responseMap.put("isNew", jsonResponse.get("isNew").getAsString()); + if (jsonResponse.has("tokens") && jsonResponse.get("tokens").isJsonObject()) { + JsonObject tokensObject = jsonResponse.get("tokens").getAsJsonObject(); + if (tokensObject.has("token") && !tokensObject.get("token").isJsonNull()) { + String token = tokensObject.get("token").getAsString(); + responseMap.put("xToken", token); + } + } + } + } + } else { + throw new FHIRException(responseEntity.getBody()); + } + } catch (Exception e) { + throw new FHIRException(e.getMessage()); + } + + return responseMap.toString(); + } + + @Override + public String verifyAuthByMobile(String request) throws FHIRException { + String res = null; + Map responseMap = new HashMap<>(); + RestTemplate restTemplate = new RestTemplate(); + String encryptedLoginId = null; + String publicKeyString = null; + + try { + String ndhmAuthToken = generateSession_NDHM.getNDHMAuthToken(); + + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.add("Content-Type", MediaType.APPLICATION_JSON + ";charset=utf-8"); + headers.add("REQUEST-ID", UUID.randomUUID().toString()); + + TimeZone tz = TimeZone.getTimeZone("UTC"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + df.setTimeZone(tz); + String nowAsISO = df.format(new Date()); + headers.add("TIMESTAMP", nowAsISO); + headers.add("Authorization", ndhmAuthToken); + + RequestOTPEnrollment reqOtpEnrollment = new RequestOTPEnrollment(); + LoginMethod loginMethod = InputMapper.gson().fromJson(request, LoginMethod.class); + + publicKeyString = certificateKeyService.getCertPublicKey(); + if (loginMethod.getLoginId() != null) { + encryptedLoginId = encryption.encrypt(loginMethod.getLoginId(), publicKeyString); + } + + if ("AADHAAR".equalsIgnoreCase(loginMethod.getLoginMethod())) { + reqOtpEnrollment.setLoginId(encryptedLoginId); + reqOtpEnrollment.setTnxId(loginMethod.getTnxId()); + reqOtpEnrollment.setOtpSystem("abdm"); + reqOtpEnrollment.setLoginHint("mobile"); + reqOtpEnrollment.setScope(new String[] { "abha-enrol", "mobile-verify" }); + + } + + String requestOBJ = new Gson().toJson(reqOtpEnrollment); + logger.info("ABDM reqobj for verify mobile number for abha enrollment: " + requestOBJ); + + HttpEntity httpEntity = new HttpEntity<>(requestOBJ, headers); + ResponseEntity responseEntity = restTemplate.exchange(requestOtpForEnrollment, HttpMethod.POST, + httpEntity, String.class); + + logger.info("ABDM response for verify mobile number for abha enrollment: " + responseEntity); + String responseStrLogin = common_NDHMService.getBody(responseEntity); + if (responseEntity.getStatusCode() == HttpStatusCode.valueOf(200) && responseEntity.hasBody()) { + JsonObject jsnOBJ = JsonParser.parseString(responseStrLogin).getAsJsonObject(); + String txnId = jsnOBJ.get("txnId").getAsString(); + String message = jsnOBJ.get("message").getAsString(); + responseMap.put("txnId", txnId); + responseMap.put("message", message); + res = new Gson().toJson(responseMap); + } else { + throw new FHIRException(responseEntity.getBody()); + } + } catch (Exception e) { + throw new FHIRException(e.getMessage()); + } + + return res; + } + + public String formAadharEnrollReqObjByAadhar(LoginMethod loginData, String encryptedLoginId) { + + EnrollByAadhaar enrollByAadhar = new EnrollByAadhaar(); + OtpRequest otp = new OtpRequest(); + + // Get current timestamp + OffsetDateTime now = OffsetDateTime.now(java.time.ZoneOffset.UTC); + DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; + String formattedTimestamp = now.format(formatter); + otp.setTimestamp(formattedTimestamp); + + otp.setTxnId(loginData.getTnxId()); + otp.setOtpValue(encryptedLoginId); + otp.setMobile(loginData.getMobileNumber()); + + Map authDataMap = new HashMap<>(); + authDataMap.put("otp", otp); + authDataMap.put("authMethods", new String[] { "otp" }); + + enrollByAadhar.setAuthData(authDataMap); + + ConsentRequest consent = new ConsentRequest(); + consent.setCode("abha-enrollment"); + consent.setVersion("1.4"); + enrollByAadhar.setConsent(consent); + logger.info("ABDM request for enroll by Aadhaar: " + enrollByAadhar); + + String requestObj = new Gson().toJson(enrollByAadhar); + + return requestObj; + } + + public String formAadharEnrollReqObjByBiometric(LoginMethod loginData, String encryptedLoginId) { + + EnrollByAadhaar enrollByAadhar = new EnrollByAadhaar(); + BioRequest bio = new BioRequest(); + + // Get current timestamp + OffsetDateTime now = OffsetDateTime.now(java.time.ZoneOffset.UTC); + DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; + String formattedTimestamp = now.format(formatter); + bio.setTimestamp(formattedTimestamp); + + bio.setTxnId(loginData.getTnxId()); + + bio.setAadhaar(encryptedLoginId); + bio.setFingerPrintAuthPid(loginData.getPId()); + bio.setMobile(loginData.getMobileNumber()); + + Map authDataMap = new HashMap<>(); + authDataMap.put("bio", bio); + authDataMap.put("authMethods", new String[] { "bio" }); + + enrollByAadhar.setAuthData(authDataMap); + + ConsentRequest consent = new ConsentRequest(); + consent.setCode("abha-enrollment"); + consent.setVersion("1.4"); + enrollByAadhar.setConsent(consent); + logger.info("ABDM request for enroll by biometric: " + enrollByAadhar); + + String requestObj = new Gson().toJson(enrollByAadhar); + + return requestObj; + } + + @Override + public String getAbhaCardPrinted(String reqObj) throws FHIRException { + + String res = null; + Map responseMap = new HashMap<>(); + RestTemplate restTemplate = new RestTemplate(); + + + try { + String ndhmAuthToken = generateSession_NDHM.getNDHMAuthToken(); + + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.add("Content-Type", MediaType.APPLICATION_JSON + ";charset=utf-8"); + headers.add("REQUEST-ID", UUID.randomUUID().toString()); + + TimeZone tz = TimeZone.getTimeZone("UTC"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + df.setTimeZone(tz); + String nowAsISO = df.format(new Date()); + headers.add("TIMESTAMP", nowAsISO); + headers.add("Authorization", ndhmAuthToken); + + JsonObject stringReqObj = JsonParser.parseString(reqObj).getAsJsonObject(); + if (stringReqObj.has("xToken") && stringReqObj.get("xToken") != null) { + String xToken = stringReqObj.get("xToken").getAsString(); + headers.add("X-token", "Bearer " + xToken); + } + HttpEntity httpEntity = new HttpEntity<>(headers); + ResponseEntity responseEntity = restTemplate.exchange(printAbhaCard, HttpMethod.GET, httpEntity, + String.class); + + logger.info("ABDM response for print Abha card:" + responseEntity); + String responseStrLogin = common_NDHMService.getBody(responseEntity); + if (responseEntity.getStatusCode() == HttpStatusCode.valueOf(202)) { + responseMap.put("png", responseStrLogin); + res = new Gson().toJson(responseMap); + } else { + throw new FHIRException(responseEntity.getBody()); + } + + } catch (Exception e) { + throw new FHIRException(e.getMessage()); + } + return res; + + } + + private void constructHealthIdResponse(HealthIDResponse healthIDResp, JsonObject profile) throws ParseException { + healthIDResp.setHealthIdNumber(profile.get("ABHANumber").getAsString()); + String abhaAddress = profile.get("phrAddress").getAsString().replace("[", "").replace("]", ""); + healthIDResp.setHealthId(abhaAddress); + healthIDResp.setName( + healthIDResp.getFirstName() + " " + healthIDResp.getMiddleName() + " " + healthIDResp.getLastName()); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy"); + Date date = simpleDateFormat.parse(profile.get("dob").getAsString()); + SimpleDateFormat year = new SimpleDateFormat("yyyy"); + SimpleDateFormat month = new SimpleDateFormat("MM"); + SimpleDateFormat day = new SimpleDateFormat("dd"); + healthIDResp.setYearOfBirth(year.format(date)); + healthIDResp.setMonthOfBirth(month.format(date)); + healthIDResp.setDayOfBirth(day.format(date)); + } + +} diff --git a/src/main/java/com/wipro/fhir/service/v3/abha/LoginAbhaV3Service.java b/src/main/java/com/wipro/fhir/service/v3/abha/LoginAbhaV3Service.java new file mode 100644 index 0000000..0ad41fc --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/v3/abha/LoginAbhaV3Service.java @@ -0,0 +1,11 @@ +package com.wipro.fhir.service.v3.abha; + +import com.wipro.fhir.utils.exception.FHIRException; + +public interface LoginAbhaV3Service { + + String requestOtpForAbhaLogin(String request) throws FHIRException; + + String verifyAbhaLogin(String request) throws FHIRException; + +} diff --git a/src/main/java/com/wipro/fhir/service/v3/abha/LoginAbhaV3ServiceImpl.java b/src/main/java/com/wipro/fhir/service/v3/abha/LoginAbhaV3ServiceImpl.java new file mode 100644 index 0000000..1baaf7e --- /dev/null +++ b/src/main/java/com/wipro/fhir/service/v3/abha/LoginAbhaV3ServiceImpl.java @@ -0,0 +1,223 @@ +package com.wipro.fhir.service.v3.abha; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; +import java.util.TimeZone; +import java.util.UUID; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatusCode; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.RestTemplate; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.wipro.fhir.data.healthID.HealthIDResponse; +import com.wipro.fhir.data.v3.abhaCard.LoginAbhaRequest; +import com.wipro.fhir.data.v3.abhaCard.LoginMethod; +import com.wipro.fhir.data.v3.abhaCard.OtpRequest; +import com.wipro.fhir.data.v3.abhaCard.RequestOTPEnrollment; +import com.wipro.fhir.data.v3.abhaCard.VerifyAbhaLogin; +import com.wipro.fhir.service.ndhm.Common_NDHMService; +import com.wipro.fhir.service.ndhm.GenerateSession_NDHMService; +import com.wipro.fhir.utils.Encryption; +import com.wipro.fhir.utils.exception.FHIRException; +import com.wipro.fhir.utils.http.HttpUtils; +import com.wipro.fhir.utils.mapper.InputMapper; + +@Service +public class LoginAbhaV3ServiceImpl implements LoginAbhaV3Service { + + @Autowired + private GenerateSession_NDHMService generateSession_NDHM; + @Autowired + private Common_NDHMService common_NDHMService; + @Autowired + private Encryption encryption; + @Autowired + private CertificateKeyService certificateKeyService; + + @Value("${abhaLoginRequestOtp}") + String abhaLoginRequestOtp; + + @Value("${verifyAbhaLogin}") + String verifyAbhaLoginUrl; + + private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + @Override + public String requestOtpForAbhaLogin(String request) throws FHIRException { + String res = null; + Map responseMap = new HashMap<>(); + RestTemplate restTemplate = new RestTemplate(); + String encryptedLoginId = null; + String publicKeyString = null; + + try { + String ndhmAuthToken = generateSession_NDHM.getNDHMAuthToken(); + + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.add("Content-Type", MediaType.APPLICATION_JSON + ";charset=utf-8"); + headers.add("REQUEST-ID", UUID.randomUUID().toString()); + + TimeZone tz = TimeZone.getTimeZone("UTC"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + df.setTimeZone(tz); + String nowAsISO = df.format(new Date()); + headers.add("TIMESTAMP", nowAsISO); + headers.add("Authorization", ndhmAuthToken); + + RequestOTPEnrollment reqOtpEnrollment = new RequestOTPEnrollment(); + LoginAbhaRequest loginAbhaRequest = InputMapper.gson().fromJson(request, LoginAbhaRequest.class); + + publicKeyString = certificateKeyService.getCertPublicKey(); + if (loginAbhaRequest.getLoginId() != null) { + encryptedLoginId = encryption.encrypt(loginAbhaRequest.getLoginId(), publicKeyString); + reqOtpEnrollment.setLoginId(encryptedLoginId); + } + + if ("AADHAAR".equalsIgnoreCase(loginAbhaRequest.getLoginMethod())) { + reqOtpEnrollment.setOtpSystem("aadhaar"); + reqOtpEnrollment.setScope(new String[] { "abha-login", "aadhaar-verify" }); + } else if ("mobile".equalsIgnoreCase(loginAbhaRequest.getLoginMethod())) { + reqOtpEnrollment.setOtpSystem("abdm"); + reqOtpEnrollment.setScope(new String[] { "abha-login", "mobile-verify" }); + } + + if ("ABHA".equalsIgnoreCase(loginAbhaRequest.getLoginHint())) { + reqOtpEnrollment.setOtpSystem("abdm"); + reqOtpEnrollment.setLoginHint("abha"); + } else if ("AADHAAR".equalsIgnoreCase(loginAbhaRequest.getLoginHint())) { + reqOtpEnrollment.setLoginHint("aadhaar"); + } else if ("MOBILE".equalsIgnoreCase(loginAbhaRequest.getLoginHint())) { + reqOtpEnrollment.setLoginHint("mobile"); + } + + String requestOBJ = new Gson().toJson(reqOtpEnrollment); + logger.info("ABDM reqobj for request otp for Abha login: " + requestOBJ); + + HttpEntity httpEntity = new HttpEntity<>(requestOBJ, headers); + ResponseEntity responseEntity = restTemplate.exchange(abhaLoginRequestOtp, HttpMethod.POST, + httpEntity, String.class); + + logger.info("ABDM response for request otp for Abha login: " + responseEntity); + String responseStrLogin = common_NDHMService.getBody(responseEntity); + if (responseEntity.getStatusCode() == HttpStatusCode.valueOf(200) && responseEntity.hasBody()) { + JsonObject jsnOBJ = JsonParser.parseString(responseStrLogin).getAsJsonObject(); + String txnId = jsnOBJ.get("txnId").getAsString(); + String message = jsnOBJ.get("message").getAsString(); + responseMap.put("txnId", txnId); + responseMap.put("message", message); + res = new Gson().toJson(responseMap); + } else { + throw new FHIRException(responseEntity.getBody()); + } + } catch (Exception e) { + throw new FHIRException(e.getMessage()); + } + + return res; + } + + + @Override + public String verifyAbhaLogin(String request) throws FHIRException { + Map responseMap = new HashMap<>(); + RestTemplate restTemplate = new RestTemplate(); + String encryptedLoginId = null; + String publicKeyString = null; + HealthIDResponse health = new HealthIDResponse(); + + try { + String ndhmAuthToken = generateSession_NDHM.getNDHMAuthToken(); + MultiValueMap headers = new LinkedMultiValueMap<>(); + headers.add("Content-Type", MediaType.APPLICATION_JSON.toString()); + headers.add("REQUEST-ID", UUID.randomUUID().toString()); + + TimeZone tz = TimeZone.getTimeZone("UTC"); + DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + df.setTimeZone(tz); + String nowAsISO = df.format(new Date()); + headers.add("TIMESTAMP", nowAsISO); + headers.add("Authorization", ndhmAuthToken); + + // Create the enrollByAadhar object + VerifyAbhaLogin verifyAbhaLogin = new VerifyAbhaLogin(); + LoginMethod loginData = InputMapper.gson().fromJson(request, LoginMethod.class); + + publicKeyString = certificateKeyService.getCertPublicKey(); + if (loginData.getLoginId() != null) { + encryptedLoginId = encryption.encrypt(loginData.getLoginId(), publicKeyString); + } + + OtpRequest otp = new OtpRequest(); + + otp.setTxnId(loginData.getTnxId()); + otp.setOtpValue(encryptedLoginId); + + Map authDataMap = new HashMap<>(); + authDataMap.put("otp", otp); + authDataMap.put("authMethods", new String[] { "otp" }); + + verifyAbhaLogin.setAuthData(authDataMap); + + if ("AADHAAR".equalsIgnoreCase(loginData.getLoginMethod())) { + verifyAbhaLogin.setScope(new String[] {"abha-login", "aadhaar-verify" } ); + + } else if ("MOBILE".equalsIgnoreCase(loginData.getLoginMethod())) { + verifyAbhaLogin.setScope(new String[] {"abha-login", "mobile-verify" } ); + + } + + String requestObj = new Gson().toJson(verifyAbhaLogin); + logger.info("ABDM request for verify abha login: " + requestObj); + + HttpEntity httpEntity = new HttpEntity<>(requestObj, headers); + ResponseEntity responseEntity = restTemplate.exchange(verifyAbhaLoginUrl, HttpMethod.POST, + httpEntity, String.class); + + logger.info("ABDM response for verify abha login: " + httpEntity); + String responseStrLogin = common_NDHMService.getBody(responseEntity); + if (responseEntity.getStatusCode() == HttpStatusCode.valueOf(200) && responseEntity.hasBody()) { + JsonObject jsonResponse = JsonParser.parseString(responseStrLogin).getAsJsonObject(); + + // Check for success messages + String authResult = jsonResponse.get("authResult").getAsString(); + if (authResult != null && (authResult.equalsIgnoreCase("success"))) { + + if (jsonResponse.has("accounts")) { + responseMap.put("abhaDetails", jsonResponse.get("accounts").getAsJsonArray().get(0).getAsJsonObject().toString()); + responseMap.put("txnId", jsonResponse.get("txnId").getAsString()); + if (jsonResponse.has("token")) { + responseMap.put("xToken", jsonResponse.get("token").getAsString()); + } + } + } else { + String message = jsonResponse.get("message").getAsString(); + throw new FHIRException(message); + } + } else { + throw new FHIRException(responseEntity.getBody()); + } + } catch (Exception e) { + throw new FHIRException(e.getMessage()); + } + + return responseMap.toString(); + } + + +} diff --git a/src/main/java/com/wipro/fhir/service/v3/abha/creation/CreateAbhaV3Service.java b/src/main/java/com/wipro/fhir/service/v3/abha/creation/CreateAbhaV3Service.java deleted file mode 100644 index 22668ee..0000000 --- a/src/main/java/com/wipro/fhir/service/v3/abha/creation/CreateAbhaV3Service.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.wipro.fhir.service.v3.abha.creation; - -import com.wipro.fhir.utils.exception.FHIRException; - -public interface CreateAbhaV3Service { - - String getOtpForEnrollment(String request) throws FHIRException; - - String enrollmentByAadhaar(String request) throws FHIRException; - - String verifyAuthByMobile(String request) throws FHIRException; - - -} diff --git a/src/main/java/com/wipro/fhir/service/v3/abha/creation/CreateAbhaV3ServiceImpl.java b/src/main/java/com/wipro/fhir/service/v3/abha/creation/CreateAbhaV3ServiceImpl.java deleted file mode 100644 index 1e84c23..0000000 --- a/src/main/java/com/wipro/fhir/service/v3/abha/creation/CreateAbhaV3ServiceImpl.java +++ /dev/null @@ -1,319 +0,0 @@ -package com.wipro.fhir.service.v3.abha.creation; - -import java.sql.Timestamp; -import java.time.OffsetDateTime; -import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.TimeZone; -import java.util.UUID; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpMethod; -import org.springframework.http.HttpStatusCode; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Service; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.web.client.RestTemplate; - -import com.google.gson.Gson; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; -import com.wipro.fhir.data.healthID.HealthIDRequestAadhar; -import com.wipro.fhir.data.healthID.HealthIDResponse; -import com.wipro.fhir.data.v3.abhaCard.ConsentRequest; -import com.wipro.fhir.data.v3.abhaCard.EnrollByAadhaar; -import com.wipro.fhir.data.v3.abhaCard.LoginMethod; -import com.wipro.fhir.data.v3.abhaCard.OtpRequest; -import com.wipro.fhir.data.v3.abhaCard.RequestOTPEnrollment; -import com.wipro.fhir.service.ndhm.Common_NDHMService; -import com.wipro.fhir.service.ndhm.GenerateSession_NDHMService; -import com.wipro.fhir.utils.Encryption; -import com.wipro.fhir.utils.exception.FHIRException; -import com.wipro.fhir.utils.http.HttpUtils; -import com.wipro.fhir.utils.mapper.InputMapper; -import java.text.DateFormat; -import java.text.SimpleDateFormat; - -@Service -public class CreateAbhaV3ServiceImpl implements CreateAbhaV3Service { - - @Autowired - private GenerateSession_NDHMService generateSession_NDHM; - @Autowired - private Common_NDHMService common_NDHMService; - @Autowired - HttpUtils httpUtils; - @Autowired - Encryption encryption; - - @Value("${getAuthCertPublicKey}") - String getAuthCertPublicKey; - - @Value("${requestOtpForEnrollment}") - String requestOtpForEnrollment; - - @Value("${abhaEnrollByAadhaar}") - String abhaEnrollByAadhaar; - - @Value("${abhaMode}") - String abhaMode; - - private final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); - - @Override - public String getOtpForEnrollment(String request) throws FHIRException { - String res = null; - Map responseMap = new HashMap<>(); - RestTemplate restTemplate = new RestTemplate(); - String encryptedLoginId = null; - String publicKeyString = null; - - try { - String ndhmAuthToken = generateSession_NDHM.getNDHMAuthToken(); - - MultiValueMap headers = new LinkedMultiValueMap<>(); - headers.add("Content-Type", MediaType.APPLICATION_JSON + ";charset=utf-8"); - headers.add("REQUEST-ID", UUID.randomUUID().toString()); - - TimeZone tz = TimeZone.getTimeZone("UTC"); - DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); - df.setTimeZone(tz); - String nowAsISO = df.format(new Date()); - headers.add("TIMESTAMP", nowAsISO); - headers.add("Authorization", ndhmAuthToken); - - RequestOTPEnrollment reqOtpEnrollment = new RequestOTPEnrollment(); - LoginMethod loginMethod = InputMapper.gson().fromJson(request, LoginMethod.class); - - publicKeyString = getCertPublicKey(); - if (loginMethod.getLoginId() != null) { - encryptedLoginId = encryption.encrypt(loginMethod.getLoginId(), publicKeyString); - } - - if ("AADHAAR".equalsIgnoreCase(loginMethod.getLoginMethod())) { - reqOtpEnrollment.setLoginId(encryptedLoginId); - reqOtpEnrollment.setOtpSystem("aadhaar"); - reqOtpEnrollment.setLoginHint("aadhaar"); - reqOtpEnrollment.setScope(new String[] { "abha-enrol" }); - } - - String requestOBJ = new Gson().toJson(reqOtpEnrollment); - logger.info("ABDM reqobj for request otp for enrollment: " + requestOBJ); - - HttpEntity httpEntity = new HttpEntity<>(requestOBJ, headers); - ResponseEntity responseEntity = restTemplate.exchange(requestOtpForEnrollment, HttpMethod.POST, - httpEntity, String.class); - - String responseStrLogin = common_NDHMService.getBody(responseEntity); - if (responseEntity.getStatusCode() == HttpStatusCode.valueOf(200) && responseEntity.hasBody()) { - JsonObject jsnOBJ = JsonParser.parseString(responseStrLogin).getAsJsonObject(); - String txnId = jsnOBJ.get("txnId").getAsString(); - responseMap.put("txnId", txnId); - res = new Gson().toJson(responseMap); - } else { - throw new FHIRException("ABDM Error while accessing request OTP for Enrollment API - status code: " - + responseEntity.getStatusCode() + ", error message: " + responseEntity.getBody()); - } - } catch (Exception e) { - throw new FHIRException("NDHM_FHIR Error while accessing ABDM API: " + e.getMessage(), e); - } - - return res; - } - - @Override - public String enrollmentByAadhaar(String request) throws FHIRException { - Map responseMap = new HashMap<>(); - RestTemplate restTemplate = new RestTemplate(); - String encryptedLoginId = null; - String publicKeyString = null; - String abdmOtpToken = null; - HealthIDResponse health = new HealthIDResponse(); - - try { - String ndhmAuthToken = generateSession_NDHM.getNDHMAuthToken(); - MultiValueMap headers = new LinkedMultiValueMap<>(); - headers.add("Content-Type", MediaType.APPLICATION_JSON.toString()); - headers.add("REQUEST-ID", UUID.randomUUID().toString()); - - TimeZone tz = TimeZone.getTimeZone("UTC"); - DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); - df.setTimeZone(tz); - String nowAsISO = df.format(new Date()); - headers.add("TIMESTAMP", nowAsISO); - headers.add("Authorization", ndhmAuthToken); - - // Create the enrollByAadhar object - EnrollByAadhaar enrollByAadhar = new EnrollByAadhaar(); - LoginMethod loginData = InputMapper.gson().fromJson(request, LoginMethod.class); - - publicKeyString = getCertPublicKey(); - if (loginData.getLoginId() != null) { - encryptedLoginId = encryption.encrypt(loginData.getLoginId(), publicKeyString); - } - - if ("AADHAAR".equalsIgnoreCase(loginData.getLoginMethod())) { - OtpRequest otp = new OtpRequest(); - - // Get current timestamp - OffsetDateTime now = OffsetDateTime.now(java.time.ZoneOffset.UTC); - DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT; - String formattedTimestamp = now.format(formatter); - otp.setTimestamp(formattedTimestamp); - - otp.setTxnId(loginData.getTnxId()); - otp.setOtpValue(encryptedLoginId); - otp.setMobile(loginData.getMobileNumber()); - - Map authDataMap = new HashMap<>(); - authDataMap.put("otp", otp); - authDataMap.put("authMethods", new String[] { "otp" }); - - enrollByAadhar.setAuthData(authDataMap); - - ConsentRequest consent = new ConsentRequest(); - consent.setCode("abha-enrollment"); - consent.setVersion("1.4"); - enrollByAadhar.setConsent(consent); - - logger.info("ABDM request for enroll by Aadhaar: " + enrollByAadhar); - - String requestObj = new Gson().toJson(enrollByAadhar); - logger.info("ABDM request object for enrollment: " + requestObj); - - HttpEntity httpEntity = new HttpEntity<>(requestObj, headers); - ResponseEntity responseEntity = restTemplate.exchange(abhaEnrollByAadhaar, HttpMethod.POST, - httpEntity, String.class); - - String responseStrLogin = common_NDHMService.getBody(responseEntity); - if (responseEntity.getStatusCode() == HttpStatusCode.valueOf(200) && responseEntity.hasBody()) { - JsonObject jsonResponse = JsonParser.parseString(responseStrLogin).getAsJsonObject(); - - // Check for success messages - String message = jsonResponse.get("message").getAsString(); - if (message != null && (message.equalsIgnoreCase("account created successfully") - || message.equalsIgnoreCase("this account already exist"))) { -// if (jsonResponse.has("tokens")) { -// JsonObject tokenAsJsonObj = jsonResponse.get("tokens").getAsJsonObject(); -// abdmOtpToken = "Bearer " + tokenAsJsonObj.get("token").getAsString(); -// responseMap.put("abdmToken", abdmOtpToken); -// } else { -// throw new FHIRException("NDHM_FHIR Error: Token not found in the response."); -// } - if (jsonResponse.has("ABHAProfile")) { - JsonObject abhaProfileAsJsonObj = jsonResponse.get("ABHAProfile").getAsJsonObject(); - if (abhaProfileAsJsonObj.has("mobile") && abhaProfileAsJsonObj.get("mobile") != null) { - health = InputMapper.gson().fromJson(abhaProfileAsJsonObj, HealthIDResponse.class); - responseMap.put("message", "Mobile number linked to ABHA"); - } else { - -// getOtpForEnrollment(request, "mobile-verify", jsonResponse.get("txnId").getAsString()); - } - } - } - } else { - throw new FHIRException("ABDM Error: Status code " + responseEntity.getStatusCode() - + ", error message: " + responseEntity.getBody()); - } - } - } catch (Exception e) { - throw new FHIRException("NDHM_FHIR Error while accessing ABDM API: " + e.getMessage(), e); - } - - return abdmOtpToken; - } - - - @Override - public String verifyAuthByMobile(String request) throws FHIRException { - String res = null; - Map responseMap = new HashMap<>(); - RestTemplate restTemplate = new RestTemplate(); - String encryptedLoginId = null; - String publicKeyString = null; - - try { - String ndhmAuthToken = generateSession_NDHM.getNDHMAuthToken(); - - MultiValueMap headers = new LinkedMultiValueMap<>(); - headers.add("Content-Type", MediaType.APPLICATION_JSON + ";charset=utf-8"); - headers.add("REQUEST-ID", UUID.randomUUID().toString()); - - TimeZone tz = TimeZone.getTimeZone("UTC"); - DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); - df.setTimeZone(tz); - String nowAsISO = df.format(new Date()); - headers.add("TIMESTAMP", nowAsISO); - headers.add("Authorization", ndhmAuthToken); - - RequestOTPEnrollment reqOtpEnrollment = new RequestOTPEnrollment(); - LoginMethod loginMethod = InputMapper.gson().fromJson(request, LoginMethod.class); - - publicKeyString = getCertPublicKey(); - if (loginMethod.getLoginId() != null) { - encryptedLoginId = encryption.encrypt(loginMethod.getLoginId(), publicKeyString); - } - - if ("AADHAAR".equalsIgnoreCase(loginMethod.getLoginMethod())) { - reqOtpEnrollment.setLoginId(encryptedLoginId); - reqOtpEnrollment.setTnxId(loginMethod.getTnxId()); - reqOtpEnrollment.setOtpSystem("abdm"); - reqOtpEnrollment.setLoginHint("mobile"); - reqOtpEnrollment.setScope(new String[] { "abha-enrol", "mobile-verify" }); - - } - - String requestOBJ = new Gson().toJson(reqOtpEnrollment); - logger.info("ABDM reqobj for request otp for enrollment: " + requestOBJ); - - HttpEntity httpEntity = new HttpEntity<>(requestOBJ, headers); - ResponseEntity responseEntity = restTemplate.exchange(requestOtpForEnrollment, HttpMethod.POST, - httpEntity, String.class); - - String responseStrLogin = common_NDHMService.getBody(responseEntity); - if (responseEntity.getStatusCode() == HttpStatusCode.valueOf(200) && responseEntity.hasBody()) { - JsonObject jsnOBJ = JsonParser.parseString(responseStrLogin).getAsJsonObject(); - String txnId = jsnOBJ.get("txnId").getAsString(); - responseMap.put("txnId", txnId); - res = new Gson().toJson(responseMap); - } else { - throw new FHIRException("ABDM Error while accessing request OTP for Enrollment API - status code: " - + responseEntity.getStatusCode() + ", error message: " + responseEntity.getBody()); - } - } catch (Exception e) { - throw new FHIRException("NDHM_FHIR Error while accessing ABDM API: " + e.getMessage(), e); - } - - return res; - } - - public String getCertPublicKey() throws FHIRException { - - RestTemplate restTemplate = new RestTemplate(); - HttpEntity requestEntity = new HttpEntity<>(null); - - ResponseEntity certResp = restTemplate.exchange(getAuthCertPublicKey, HttpMethod.GET, requestEntity, - String.class); - String body = certResp.getBody(); - - String publicKeyString = body.replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "") - .replaceAll("\\s+", ""); - - logger.info("publicKeyString : " + publicKeyString); - - return publicKeyString; - - } -} diff --git a/src/main/java/com/wipro/fhir/utils/Encryption.java b/src/main/java/com/wipro/fhir/utils/Encryption.java index dc6550f..99cd569 100644 --- a/src/main/java/com/wipro/fhir/utils/Encryption.java +++ b/src/main/java/com/wipro/fhir/utils/Encryption.java @@ -1,38 +1,22 @@ package com.wipro.fhir.utils; -import java.net.URI; -import java.net.URISyntaxException; import java.security.InvalidKeyException; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.PublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.X509EncodedKeySpec; -import java.util.TimeZone; -import java.util.UUID; +import java.util.Base64; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; -import java.util.Base64; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; - -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpMethod; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; -import org.springframework.web.client.RestTemplate; import com.wipro.fhir.utils.exception.FHIRException; From 4c7619324c9d96bc62860d369cea57e4b11e6aaa Mon Sep 17 00:00:00 2001 From: Helen Grace Karyamsetty <133211481+helenKaryamsetty@users.noreply.github.com> Date: Mon, 9 Dec 2024 21:45:54 +0530 Subject: [PATCH 7/7] removed unused code --- .../wipro/fhir/controller/v3/abha/CreateAbhaV3Controller.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/wipro/fhir/controller/v3/abha/CreateAbhaV3Controller.java b/src/main/java/com/wipro/fhir/controller/v3/abha/CreateAbhaV3Controller.java index fbcd95e..2917e63 100644 --- a/src/main/java/com/wipro/fhir/controller/v3/abha/CreateAbhaV3Controller.java +++ b/src/main/java/com/wipro/fhir/controller/v3/abha/CreateAbhaV3Controller.java @@ -26,9 +26,6 @@ public class CreateAbhaV3Controller { @Autowired private CreateAbhaV3Service createAbhaV3Service; - @Autowired - private GenerateHealthID_CardServiceImpl generateHealthID_CardServiceImpl; - @CrossOrigin @Operation(summary = "Generate OTP for ABHA enrollment") @PostMapping(value = { "/requestOtpForAbhaEnrollment" })