diff --git a/pom.xml b/pom.xml
index c3b57f1c..9eda8258 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
4.0.0
com.iemr.common.identity
identity-api
- 3.6.2
+ 3.9.0
war
diff --git a/src/main/java/com/iemr/common/identity/controller/IdentityController.java b/src/main/java/com/iemr/common/identity/controller/IdentityController.java
index 16995734..fc894761 100644
--- a/src/main/java/com/iemr/common/identity/controller/IdentityController.java
+++ b/src/main/java/com/iemr/common/identity/controller/IdentityController.java
@@ -30,10 +30,13 @@
import java.util.List;
import java.util.Objects;
+import com.iemr.common.identity.data.rmnch.RMNCHBeneficiaryDetailsRmnch;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@@ -315,6 +318,17 @@ public String searchBeneficiaryByVillageIdAndLastModDate(
}
return response;
}
+
+
+ @PostMapping("/getRmnchDataByBenRedID")
+ public ResponseEntity getRmnchDataByBenID(@RequestBody BigInteger object) {
+ try {
+ RMNCHBeneficiaryDetailsRmnch data = svc.getRmnchDataByBenID(object);
+ return ResponseEntity.ok(data);
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
+ }
+ }
// search beneficiary by lastModDate and districtID
@Operation(summary ="Get count of beneficiary by villageId and last modified date-time")
@PostMapping(path = "/countBenByVillageIdAndLastModifiedDate")
diff --git a/src/main/java/com/iemr/common/identity/controller/rmnch/RMNCHMobileAppController.java b/src/main/java/com/iemr/common/identity/controller/rmnch/RMNCHMobileAppController.java
index 198fd5fc..f8a8957f 100644
--- a/src/main/java/com/iemr/common/identity/controller/rmnch/RMNCHMobileAppController.java
+++ b/src/main/java/com/iemr/common/identity/controller/rmnch/RMNCHMobileAppController.java
@@ -23,10 +23,13 @@
import java.sql.Timestamp;
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;
@@ -56,11 +59,11 @@ public class RMNCHMobileAppController {
@PostMapping(value = "/syncDataToAmrit", consumes = "application/json", produces = "application/json")
@Operation(summary = "Sync data to AMRIT for already regestered beneficiary with AMRIT beneficiary id ")
- public String syncDataToAmrit(@RequestBody String requestOBJ) {
+ public String syncDataToAmrit(@RequestBody String requestOBJ,@RequestHeader(value = "jwttoken") String authorization) {
OutputResponse response = new OutputResponse();
try {
if (requestOBJ != null) {
- String s = rmnchDataSyncService.syncDataToAmrit(requestOBJ);
+ String s = rmnchDataSyncService.syncDataToAmrit(requestOBJ,authorization);
response.setResponse(s);
} else
response.setError(5000, "Invalid/NULL request obj");
@@ -73,6 +76,46 @@ public String syncDataToAmrit(@RequestBody String requestOBJ) {
}
+ @PostMapping(value = "/syncDataToAmritByHwc", consumes = "application/json", produces = "application/json")
+ @Operation(summary = "Sync data to AMRIT for already registered beneficiary with AMRIT beneficiary id")
+ public ResponseEntity> syncDataToAmritHwc(@RequestBody String requestOBJ) {
+
+ try {
+ if (requestOBJ == null || requestOBJ.isEmpty()) {
+ return ResponseEntity.badRequest().body("Invalid/NULL request obj");
+ }
+
+ JsonObject requestObj = new Gson().fromJson(requestOBJ, JsonObject.class);
+
+ Long beneficiaryID = requestObj.has("benficieryid") && !requestObj.get("benficieryid").isJsonNull()
+ ? requestObj.get("benficieryid").getAsLong()
+ : null;
+
+ Long beneficiaryRegID = requestObj.has("benRegId") && !requestObj.get("benRegId").isJsonNull()
+ ? requestObj.get("benRegId").getAsLong()
+ : null;
+
+ if (beneficiaryID == null || beneficiaryRegID == null) {
+ return ResponseEntity.badRequest().body("beneficiaryID or beneficiaryRegID is missing");
+ }
+
+ String result = rmnchDataSyncService.saveBeneficiaryDetailsAfterRegistration(
+ beneficiaryID,
+ beneficiaryRegID,
+ requestOBJ
+ );
+
+ return ResponseEntity.ok(result);
+
+ } catch (Exception e) {
+ logger.error("Error in RMNCH mobile data sync : {}", e.getMessage());
+ return ResponseEntity.internalServerError()
+ .body("Error in RMNCH mobile data sync : " + e.getMessage());
+ }
+ }
+
+
+
// @Deprecated
@PostMapping(value = "/getBeneficiaryDataForVillage", consumes = "application/json", produces = "application/json")
@Operation(summary = "Get beneficiary data for given village ")
diff --git a/src/main/java/com/iemr/common/identity/data/rmnch/RMNCHBeneficiaryDetailsRmnch.java b/src/main/java/com/iemr/common/identity/data/rmnch/RMNCHBeneficiaryDetailsRmnch.java
index 4cab210c..e403b3d7 100644
--- a/src/main/java/com/iemr/common/identity/data/rmnch/RMNCHBeneficiaryDetailsRmnch.java
+++ b/src/main/java/com/iemr/common/identity/data/rmnch/RMNCHBeneficiaryDetailsRmnch.java
@@ -550,4 +550,7 @@ public class RMNCHBeneficiaryDetailsRmnch {
@Expose
private Boolean isDeactivate;
+ @Expose
+ @Transient
+ private String abhaId;
}
diff --git a/src/main/java/com/iemr/common/identity/data/rmnch/RMNCHMBeneficiarydetail.java b/src/main/java/com/iemr/common/identity/data/rmnch/RMNCHMBeneficiarydetail.java
index 397c5a66..d9221675 100644
--- a/src/main/java/com/iemr/common/identity/data/rmnch/RMNCHMBeneficiarydetail.java
+++ b/src/main/java/com/iemr/common/identity/data/rmnch/RMNCHMBeneficiarydetail.java
@@ -214,4 +214,8 @@ public class RMNCHMBeneficiarydetail {
@Expose
@Transient
private Integer ProviderServiceMapID;
+
+ @Expose
+ @Transient
+ private String abhaId;
}
\ No newline at end of file
diff --git a/src/main/java/com/iemr/common/identity/dto/BeneficiariesDTO.java b/src/main/java/com/iemr/common/identity/dto/BeneficiariesDTO.java
index d48cd9b5..0ecfb6b2 100644
--- a/src/main/java/com/iemr/common/identity/dto/BeneficiariesDTO.java
+++ b/src/main/java/com/iemr/common/identity/dto/BeneficiariesDTO.java
@@ -89,6 +89,8 @@ public int compareTo(BeneficiariesDTO ben) {
private BigInteger religionId;
private String religion;
private String monthlyFamilyIncome;
+ private String reproductiveStatus;
+ private Integer reproductiveStatusId;
// End Outreach
// Start 1097
diff --git a/src/main/java/com/iemr/common/identity/dto/IdentityDTO.java b/src/main/java/com/iemr/common/identity/dto/IdentityDTO.java
index 322e57fc..f6c000cb 100644
--- a/src/main/java/com/iemr/common/identity/dto/IdentityDTO.java
+++ b/src/main/java/com/iemr/common/identity/dto/IdentityDTO.java
@@ -125,6 +125,8 @@ public class IdentityDTO {
private Integer incomeStatusId;
private String incomeStatus;
private String monthlyFamilyIncome;
+ private String reproductiveStatus;
+ private Integer reproductiveStatusId;
@Expose
private Integer vanID;
diff --git a/src/main/java/com/iemr/common/identity/repo/rmnch/RMNCHBenDetailsRepo.java b/src/main/java/com/iemr/common/identity/repo/rmnch/RMNCHBenDetailsRepo.java
index 1bc948a3..27c7a445 100644
--- a/src/main/java/com/iemr/common/identity/repo/rmnch/RMNCHBenDetailsRepo.java
+++ b/src/main/java/com/iemr/common/identity/repo/rmnch/RMNCHBenDetailsRepo.java
@@ -24,6 +24,7 @@
import java.math.BigInteger;
import java.util.List;
+import io.swagger.v3.oas.annotations.info.License;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
@@ -36,8 +37,16 @@ public interface RMNCHBenDetailsRepo extends CrudRepository getByBenRegID(@Param("beneficiaryRegID") BigInteger beneficiaryRegID);
+
+ @Query("""
+ SELECT t
+ FROM RMNCHMBeneficiarydetail t
+ WHERE t.id IN (
+ SELECT m.benDetailsId
+ FROM RMNCHMBeneficiarymapping m
+ WHERE m.benRegId = :beneficiaryRegID
+ )
+ """)
+ List getByBenRegID(
+ @Param("beneficiaryRegID") BigInteger beneficiaryRegID);
}
diff --git a/src/main/java/com/iemr/common/identity/service/IdentityService.java b/src/main/java/com/iemr/common/identity/service/IdentityService.java
index 6e8a71ef..90e660b9 100644
--- a/src/main/java/com/iemr/common/identity/service/IdentityService.java
+++ b/src/main/java/com/iemr/common/identity/service/IdentityService.java
@@ -809,6 +809,16 @@ public List searchBeneficiaryByVillageIdAndLastModifyDate(List
return beneficiaryList;
}
+
+ public RMNCHBeneficiaryDetailsRmnch getRmnchDataByBenID(BigInteger benID) {
+ RMNCHBeneficiaryDetailsRmnch rmnchBeneficiaryDetailsRmnch = new RMNCHBeneficiaryDetailsRmnch();
+
+ if(!rMNCHBeneficiaryDetailsRmnchRepo.getByRegID(benID).isEmpty()){
+ rmnchBeneficiaryDetailsRmnch = rMNCHBeneficiaryDetailsRmnchRepo.getByRegID(benID).get(0);
+ }
+ return rmnchBeneficiaryDetailsRmnch;
+ }
+
public Long countBeneficiaryByVillageIdAndLastModifyDate(List villageIDs, Timestamp lastModifiedDate) {
Long beneficiaryCount = 0L;
try {
@@ -1993,6 +2003,7 @@ public List getBeneficiariesDeatilsByBenRegIdList(List resultMap = new HashMap();
@@ -128,6 +137,8 @@ public String syncDataToAmrit(String requestOBJ) throws Exception {
// other tables data saving
// ben details RMNCH extra fields details
+ logger.info("Request object of syncDataToAmrit: "+jsnOBJ);
+
BigInteger benRegID = null;
@@ -182,9 +193,15 @@ public String syncDataToAmrit(String requestOBJ) throws Exception {
rmnchmBeneficiarydetail.setMaritalstatus(obj.getMaritalstatus());
rmnchmBeneficiarydetail.setMaritalstatusId(obj.getMaritalstatusId());
benDetailsList.add(rmnchmBeneficiarydetail);
+ if (obj.getAbhaId()!=null && !obj.getAbhaId().isEmpty()) {
+ mapHealthIDToBeneficiary(authorization,obj.getBenRegId().longValue(),obj.getBenficieryid().longValue(),obj.getAbhaId(),obj.getCreatedBy(),obj.getFirstName(),obj.getLastName(),obj.getDob().toString(),obj.getProviderServiceMapID());
+
+ }
+
}
}
+
}
benDetailsExtraList = (ArrayList) rMNCHBeneficiaryDetailsRmnchRepo
@@ -265,8 +282,11 @@ public String syncDataToAmrit(String requestOBJ) throws Exception {
} catch (
Exception e) {
+ logger.error("Full Exception", e);
+
throw new Exception(e); // ✅ original exception wrap karo
+
}
resultMap.put("beneficiaryDetails", beneficiaryDetailsIds);
resultMap.put("bornBirthDeatils", bornBirthDeatilsIds);
@@ -276,6 +296,229 @@ public String syncDataToAmrit(String requestOBJ) throws Exception {
return new Gson().toJson(resultMap);
}
+ public String mapHealthIDToBeneficiary(String authorization,
+ Long benRegID,
+ Long beneficiaryID,
+ String abhaId,
+ String createdBy,String firstName,String lastName,String dob,Integer providerServiceMapId) {
+ try {
+ RestTemplate restTemplate = new RestTemplate();
+ String formattedDob = dob;
+
+ try {
+ if (dob != null && dob.contains(" ")) {
+ Timestamp timestamp = Timestamp.valueOf(dob);
+ formattedDob = new SimpleDateFormat("dd-MM-yyyy")
+ .format(timestamp);
+ }
+ } catch (Exception ex) {
+ logger.warn("DOB format conversion failed, sending original DOB : {}", dob);
+ }
+ logger.info("Authorization Token : {}", authorization);
+
+ Map requestMap = new HashMap<>();
+
+ requestMap.put("beneficiaryRegID", benRegID);
+ requestMap.put("beneficiaryID", beneficiaryID);
+ requestMap.put("healthIdNumber", abhaId);
+
+ requestMap.put("createdBy", createdBy);
+ requestMap.put("providerServiceMapId", providerServiceMapId);
+ requestMap.put("isNew", false);
+
+ // ABHA Profile
+ Map abhaProfile = new HashMap<>();
+ abhaProfile.put("ABHANumber", abhaId);
+
+ List phrAddress = new ArrayList<>();
+ phrAddress.add(abhaId + "@abdm");
+
+ abhaProfile.put("phrAddress", phrAddress);
+ abhaProfile.put("firstName", firstName);
+ abhaProfile.put("middleName", "");
+ abhaProfile.put("lastName", lastName);
+ abhaProfile.put("dob", formattedDob);
+
+
+ requestMap.put("ABHAProfile", abhaProfile);
+
+ String requestBody = new Gson().toJson(requestMap);
+
+ String url = fhirUrl
+ + ConfigProperties.getPropertyByName("mapHealthIDToBeneficiary");
+
+ logger.info("Calling URL : {}", url);
+ logger.info("Request Body : {}", requestBody);
+
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_JSON);
+ // Agar token me Bearer nahi aa raha hai
+
+ headers.set("Jwttoken", authorization);
+
+ HttpEntity entity =
+ new HttpEntity<>(requestBody, headers);
+
+ ResponseEntity response = restTemplate.exchange(
+ url,
+ HttpMethod.POST,
+ entity,
+ String.class
+ );
+
+ logger.info("ABHA Mapping Response : {}", response.getBody());
+
+ return response.getBody();
+
+ } catch (HttpClientErrorException e) {
+
+ logger.error("HTTP Error Status : {}", e.getStatusCode());
+ logger.error("HTTP Error Response : {}", e.getResponseBodyAsString(), e);
+
+ return "HTTP Error : " + e.getStatusCode();
+
+ } catch (Exception e) {
+
+ logger.error("Error while saving Health ID Mapping", e);
+
+ return "Error Save Health Id : " + e.getMessage();
+ }
+
+ }
+
+
+ @Override
+ @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+ public String saveBeneficiaryDetailsAfterRegistration(
+ Long beneficiaryID,
+ Long beneficiaryRegID,
+ String comingRequest) {
+
+ logger.info("Method started. beneficiaryID={}, beneficiaryRegID={}",
+ beneficiaryID, beneficiaryRegID);
+
+ try {
+
+ JsonObject requestObj = new Gson().fromJson(comingRequest, JsonObject.class);
+ logger.info("Request Parsed Successfully");
+
+ List list =
+ rMNCHBeneficiaryDetailsRmnchRepo.getByRegID(
+ BigInteger.valueOf(beneficiaryRegID));
+
+ logger.info("Records found for RegID {} : {}", beneficiaryRegID, list.size());
+
+ RMNCHBeneficiaryDetailsRmnch entity;
+ boolean isNew = list.isEmpty();
+
+ if (isNew) {
+ entity = new RMNCHBeneficiaryDetailsRmnch();
+ logger.info("Creating new RMNCH record");
+ } else {
+ entity = list.get(0);
+ logger.info("Updating existing RMNCH record. ID={}",
+ entity.getBeneficiaryDetails_RmnchId());
+ }
+
+ String createdBy = getString(requestObj, "createdBy", "system");
+
+ entity.setBenficieryid(BigInteger.valueOf(beneficiaryID));
+ entity.setBenRegId(BigInteger.valueOf(beneficiaryRegID));
+
+ if (isNew) {
+ entity.setCreatedBy(createdBy);
+ entity.setCreatedDate(new Timestamp(System.currentTimeMillis()));
+ } else {
+ entity.setUpdatedBy(createdBy);
+ entity.setUpdatedDate(new Timestamp(System.currentTimeMillis()));
+ }
+
+ entity.setVanID(getInt(requestObj, "vanID", null));
+ entity.setParkingPlaceID(getInt(requestObj, "parkingPlaceID", null));
+ entity.setProviderServiceMapID(getInt(requestObj, "providerServiceMapID", null));
+ entity.setGenderId(getInt(requestObj, "genderID", null));
+
+ entity.setReproductiveStatusId(
+ getInt(
+ requestObj,
+ "reproductiveStatusId",
+ getInt(requestObj, "maritalStatusID", null)
+ )
+ );
+
+ entity.setReproductiveStatus(
+ getString(requestObj, "reproductiveStatus", null)
+ );
+
+ entity.setFirstName(getString(requestObj, "firstName", null));
+ entity.setLastName(getString(requestObj, "lastName", null));
+ entity.setFatherName(getString(requestObj, "fatherName", null));
+ entity.setSpousename(getString(requestObj, "spouseName", null));
+
+ entity.setMaritalstatusId(
+ getInt(requestObj, "maritalStatusID", null)
+ );
+
+ entity.setMaritalstatus(
+ getString(requestObj, "maritalStatusName", null)
+ );
+
+ // DOB
+ if (requestObj.has("dOB")
+ && !requestObj.get("dOB").isJsonNull()
+ && requestObj.get("dOB").getAsString().trim().length() > 0) {
+
+ try {
+ entity.setDob(
+ Timestamp.valueOf(
+ requestObj.get("dOB")
+ .getAsString()
+ .replace("T", " ")
+ .replace("Z", "")
+ )
+ );
+
+ logger.info("DOB set successfully");
+
+ } catch (Exception ex) {
+ logger.error("Invalid DOB format : {}",
+ requestObj.get("dOB").getAsString(), ex);
+ }
+ }
+
+ logger.info("Before save");
+
+ RMNCHBeneficiaryDetailsRmnch saved =
+ rMNCHBeneficiaryDetailsRmnchRepo.save(entity);
+
+ logger.info("After save. Saved ID={}",
+ saved.getBeneficiaryDetails_RmnchId());
+
+ logger.info("Saved RMNCH for benRegID={}", beneficiaryRegID);
+
+ return "Saved RMNCH for beneficiaryID: " + beneficiaryID;
+
+ } catch (Exception e) {
+
+ logger.error(
+ "Exception occurred in saveBeneficiaryDetailsAfterRegistration",
+ e
+ );
+
+ return "Error save beneficiary in rmnch : " + e.getMessage();
+ }
+ }
+ private String getString(JsonObject obj, String key, String defaultVal) {
+ return (obj.has(key) && !obj.get(key).isJsonNull())
+ ? obj.get(key).getAsString()
+ : defaultVal;
+ }
+
+ private Integer getInt(JsonObject obj, String key, Integer defaultVal) {
+ return (obj.has(key) && !obj.get(key).isJsonNull())
+ ? obj.get(key).getAsInt()
+ : defaultVal;
+ }
@Override
public String getBenData(String requestOBJ, String authorisation) throws Exception {
String outputResponse = null;
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 12be1b44..79ba181f 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -148,6 +148,7 @@ spring.jpa.properties.hibernate.show_sql=false
door-to-door-page-size=2
get-HRP-Status=ANC/getHRPStatus
getHealthID=healthID/getBenhealthID
+mapHealthIDToBeneficiary=healthIDRecord/mapHealthIDToBeneficiary
spring.main.allow-bean-definition-overriding=true
spring.main.allow-circular-references=true