From ef517008bafa4fe83e9badbb1b3f04606a52c5bd Mon Sep 17 00:00:00 2001 From: Shrey Patidar Date: Fri, 15 Sep 2023 17:18:54 +0530 Subject: [PATCH 1/4] Removed Ben Adherence from nurse data down sync response. Not useful for app. --- .../com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java b/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java index d4b7a8d4..1b4e9b5f 100644 --- a/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java +++ b/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java @@ -329,8 +329,7 @@ public ResponseEntity getBeneficiaryNurseFormDataGeneralOPD(String comin //Fetching visitDetails, chief complaints response.put("GOPDNurseVisitDetail", commonNurseServiceImpl.getCSVisitDetails(benRegID, visitCode)); - response.put("BenAdherence", commonNurseServiceImpl.getBenAdherence(benRegID, visitCode)); - + ArrayList resList = benChiefComplaintRepo.getBenChiefComplaints(benRegID, visitCode); ArrayList benChiefComplaints = BenChiefComplaint.getBenChiefComplaints(resList); response.put("BenChiefComplaints", benChiefComplaints); From 44ea16413435cc992c785b846ddd299227aead33 Mon Sep 17 00:00:00 2001 From: Shrey Patidar Date: Sat, 16 Sep 2023 16:05:02 +0530 Subject: [PATCH 2/4] Implemented pagination for ben flow records down sync API. --- .../BeneficiaryFlowStatusRepo.java | 6 ++++-- .../service/choApp/CHOAppSyncServiceImpl.java | 21 ++++++++++++++----- .../hwc/utils/request/SyncSearchRequest.java | 2 ++ 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/iemr/hwc/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java b/src/main/java/com/iemr/hwc/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java index 6dd4a616..4972f5ec 100644 --- a/src/main/java/com/iemr/hwc/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java +++ b/src/main/java/com/iemr/hwc/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java @@ -25,6 +25,8 @@ import java.util.ArrayList; import java.util.List; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; @@ -453,7 +455,7 @@ public int updateLabTechnicianFlag(@Param("lab_technician_flag") Short lab_techn public ArrayList getVisitByLocationAndLastModifDate(@Param("villageID") Integer villageID, @Param("lastModDate") Timestamp lastModDate); //get ben flow status records based on villageId and last sync date to sync to app local dB - @Query("SELECT t from BeneficiaryFlowStatus t WHERE t.villageID IN :villageIDs AND t.modified_date > :lastModDate ") - ArrayList getFlowRecordsToSync(@Param("villageIDs") List villageID, @Param("lastModDate") Timestamp lastModDate); + @Query("SELECT t from BeneficiaryFlowStatus t WHERE t.villageID IN :villageIDs AND t.modified_date > :lastModDate ORDER BY t.modified_date ASC ") + Page getPaginatedFlowRecordsToSync(@Param("villageIDs") List villageID, @Param("lastModDate") Timestamp lastModDate, Pageable pageable); } diff --git a/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java b/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java index 1b4e9b5f..9a041f35 100644 --- a/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java +++ b/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java @@ -1,5 +1,6 @@ package com.iemr.hwc.service.choApp; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.*; import com.iemr.hwc.data.benFlowStatus.BeneficiaryFlowStatus; import com.iemr.hwc.data.choApp.UserActivityLogs; @@ -27,6 +28,9 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; @@ -241,19 +245,26 @@ public ResponseEntity getFlowRecordsByVillageIDAndLastModifiedDate(SyncS HttpStatus statusCode = HttpStatus.OK; OutputResponse outputResponse = new OutputResponse(); ArrayList benFlowList; + ObjectMapper obj = new ObjectMapper(); + Pageable pageable; + Page paginatedFlowRecords; MultiValueMap headers = new LinkedMultiValueMap<>(); headers.add("Content-Type", "application/json"); try { if (villageIDAndLastSyncDate.getVillageID() !=null && !villageIDAndLastSyncDate.getVillageID().isEmpty() - && villageIDAndLastSyncDate.getLastSyncDate() != null) { + && villageIDAndLastSyncDate.getLastSyncDate() != null && villageIDAndLastSyncDate.getPageNo() != null + && villageIDAndLastSyncDate.getPageSize() != null) { + DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"); DateTime dt = formatter.parseDateTime(villageIDAndLastSyncDate.getLastSyncDate()); - benFlowList = beneficiaryFlowStatusRepo.getFlowRecordsToSync(villageIDAndLastSyncDate.getVillageID(), - new Timestamp(dt.toDate().getTime())); - outputResponse.setResponse(new GsonBuilder().excludeFieldsWithoutExposeAnnotation().serializeNulls().create().toJson(benFlowList)); + pageable = new PageRequest(villageIDAndLastSyncDate.getPageNo(), villageIDAndLastSyncDate.getPageSize()); + paginatedFlowRecords = beneficiaryFlowStatusRepo.getPaginatedFlowRecordsToSync(villageIDAndLastSyncDate.getVillageID(), + new Timestamp(dt.toDate().getTime()),pageable); + + outputResponse.setResponse(obj.writeValueAsString(paginatedFlowRecords)); }else{ logger.error("Unable to search beneficiaries to sync based on villageIDs and lastSyncDate. Incomplete request body - Either villageIDs or lastSyncDate missing."); outputResponse.setError(400,"Bad request. Incomplete request body - Either villageIDs or lastSyncDate missing."); @@ -329,7 +340,7 @@ public ResponseEntity getBeneficiaryNurseFormDataGeneralOPD(String comin //Fetching visitDetails, chief complaints response.put("GOPDNurseVisitDetail", commonNurseServiceImpl.getCSVisitDetails(benRegID, visitCode)); - + ArrayList resList = benChiefComplaintRepo.getBenChiefComplaints(benRegID, visitCode); ArrayList benChiefComplaints = BenChiefComplaint.getBenChiefComplaints(resList); response.put("BenChiefComplaints", benChiefComplaints); diff --git a/src/main/java/com/iemr/hwc/utils/request/SyncSearchRequest.java b/src/main/java/com/iemr/hwc/utils/request/SyncSearchRequest.java index fc18dbd6..b9a16f78 100644 --- a/src/main/java/com/iemr/hwc/utils/request/SyncSearchRequest.java +++ b/src/main/java/com/iemr/hwc/utils/request/SyncSearchRequest.java @@ -8,4 +8,6 @@ public class SyncSearchRequest { private String lastSyncDate; private Long lastModifiedDate; private List villageID; + private Integer pageNo; + private Integer pageSize; } From eaa4268d32ea0c69c2fa1212a632a1a7d04ec1a7 Mon Sep 17 00:00:00 2001 From: Shrey Patidar Date: Sat, 16 Sep 2023 16:05:02 +0530 Subject: [PATCH 3/4] Implemented pagination for ben flow records down sync API. --- .../BeneficiaryFlowStatusRepo.java | 6 ++++-- .../service/choApp/CHOAppSyncServiceImpl.java | 19 +++++++++++++++---- .../hwc/utils/request/SyncSearchRequest.java | 2 ++ 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/iemr/hwc/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java b/src/main/java/com/iemr/hwc/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java index 6dd4a616..4972f5ec 100644 --- a/src/main/java/com/iemr/hwc/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java +++ b/src/main/java/com/iemr/hwc/repo/benFlowStatus/BeneficiaryFlowStatusRepo.java @@ -25,6 +25,8 @@ import java.util.ArrayList; import java.util.List; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.Modifying; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.CrudRepository; @@ -453,7 +455,7 @@ public int updateLabTechnicianFlag(@Param("lab_technician_flag") Short lab_techn public ArrayList getVisitByLocationAndLastModifDate(@Param("villageID") Integer villageID, @Param("lastModDate") Timestamp lastModDate); //get ben flow status records based on villageId and last sync date to sync to app local dB - @Query("SELECT t from BeneficiaryFlowStatus t WHERE t.villageID IN :villageIDs AND t.modified_date > :lastModDate ") - ArrayList getFlowRecordsToSync(@Param("villageIDs") List villageID, @Param("lastModDate") Timestamp lastModDate); + @Query("SELECT t from BeneficiaryFlowStatus t WHERE t.villageID IN :villageIDs AND t.modified_date > :lastModDate ORDER BY t.modified_date ASC ") + Page getPaginatedFlowRecordsToSync(@Param("villageIDs") List villageID, @Param("lastModDate") Timestamp lastModDate, Pageable pageable); } diff --git a/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java b/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java index b50ac3e9..0228983f 100644 --- a/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java +++ b/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java @@ -1,5 +1,6 @@ package com.iemr.hwc.service.choApp; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.*; import com.iemr.hwc.data.benFlowStatus.BeneficiaryFlowStatus; import com.iemr.hwc.data.choApp.UserActivityLogs; @@ -30,6 +31,9 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.PropertySource; import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.http.HttpEntity; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; @@ -258,19 +262,26 @@ public ResponseEntity getFlowRecordsByVillageIDAndLastModifiedDate(SyncS HttpStatus statusCode = HttpStatus.OK; OutputResponse outputResponse = new OutputResponse(); ArrayList benFlowList; + ObjectMapper obj = new ObjectMapper(); + Pageable pageable; + Page paginatedFlowRecords; MultiValueMap headers = new LinkedMultiValueMap<>(); headers.add("Content-Type", "application/json"); try { if (villageIDAndLastSyncDate.getVillageID() !=null && !villageIDAndLastSyncDate.getVillageID().isEmpty() - && villageIDAndLastSyncDate.getLastSyncDate() != null) { + && villageIDAndLastSyncDate.getLastSyncDate() != null && villageIDAndLastSyncDate.getPageNo() != null + && villageIDAndLastSyncDate.getPageSize() != null) { + DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"); DateTime dt = formatter.parseDateTime(villageIDAndLastSyncDate.getLastSyncDate()); - benFlowList = beneficiaryFlowStatusRepo.getFlowRecordsToSync(villageIDAndLastSyncDate.getVillageID(), - new Timestamp(dt.toDate().getTime())); - outputResponse.setResponse(new GsonBuilder().excludeFieldsWithoutExposeAnnotation().serializeNulls().create().toJson(benFlowList)); + pageable = new PageRequest(villageIDAndLastSyncDate.getPageNo(), villageIDAndLastSyncDate.getPageSize()); + paginatedFlowRecords = beneficiaryFlowStatusRepo.getPaginatedFlowRecordsToSync(villageIDAndLastSyncDate.getVillageID(), + new Timestamp(dt.toDate().getTime()),pageable); + + outputResponse.setResponse(obj.writeValueAsString(paginatedFlowRecords)); }else{ logger.error("Unable to search beneficiaries to sync based on villageIDs and lastSyncDate. Incomplete request body - Either villageIDs or lastSyncDate missing."); outputResponse.setError(400,"Bad request. Incomplete request body - Either villageIDs or lastSyncDate missing."); diff --git a/src/main/java/com/iemr/hwc/utils/request/SyncSearchRequest.java b/src/main/java/com/iemr/hwc/utils/request/SyncSearchRequest.java index fc18dbd6..b9a16f78 100644 --- a/src/main/java/com/iemr/hwc/utils/request/SyncSearchRequest.java +++ b/src/main/java/com/iemr/hwc/utils/request/SyncSearchRequest.java @@ -8,4 +8,6 @@ public class SyncSearchRequest { private String lastSyncDate; private Long lastModifiedDate; private List villageID; + private Integer pageNo; + private Integer pageSize; } From b8c7f6e4cafae57c541a85b67953aa5ec057bd50 Mon Sep 17 00:00:00 2001 From: Shrey Patidar Date: Thu, 21 Sep 2023 15:09:15 +0530 Subject: [PATCH 4/4] Disabled default conversion of dates to Timestamp by Object Mapper. Added custom date format. Modified some logging statements. --- .../service/choApp/CHOAppSyncServiceImpl.java | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java b/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java index 0228983f..97712793 100644 --- a/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java +++ b/src/main/java/com/iemr/hwc/service/choApp/CHOAppSyncServiceImpl.java @@ -1,6 +1,7 @@ package com.iemr.hwc.service.choApp; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; import com.google.gson.*; import com.iemr.hwc.data.benFlowStatus.BeneficiaryFlowStatus; import com.iemr.hwc.data.choApp.UserActivityLogs; @@ -22,7 +23,6 @@ import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; -import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.slf4j.Logger; @@ -44,6 +44,7 @@ import org.springframework.web.client.*; import javax.ws.rs.core.MediaType; import java.sql.Timestamp; +import java.text.SimpleDateFormat; import java.util.*; @Service @@ -207,7 +208,8 @@ public ResponseEntity getBeneficiaryByVillageIDAndLastModifiedDate(SyncS try { if(villageIDAndLastSyncDate.getVillageID() !=null && !villageIDAndLastSyncDate.getVillageID().isEmpty() - && villageIDAndLastSyncDate.getLastSyncDate() != null) { + && villageIDAndLastSyncDate.getLastSyncDate() != null && villageIDAndLastSyncDate.getPageNo() != null + && villageIDAndLastSyncDate.getPageSize() != null) { DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy HH:mm:ss"); DateTime dt = formatter.parseDateTime(villageIDAndLastSyncDate.getLastSyncDate()); @@ -221,14 +223,14 @@ public ResponseEntity getBeneficiaryByVillageIDAndLastModifiedDate(SyncS if (response.hasBody()) { - JSONObject responseJSON = new JSONObject(response.getBody()); - JSONArray jsonArray = new JSONArray(responseJSON.getJSONObject("response").getString("data")); + JSONObject responseBodyJSON = new JSONObject(response.getBody()); + JSONObject resultJSON = new JSONObject(responseBodyJSON.getJSONObject("response").getString("data")); - outputResponse.setResponse(jsonArray.toString()); + outputResponse.setResponse(resultJSON.toString()); } }else{ - logger.error("Unable to search beneficiaries to sync based on villageIDs and lastSyncDate. Incomplete request body - Either villageIDs or lastSyncDate missing."); - outputResponse.setError(400,"Bad request. Incomplete request body - Either villageIDs or lastSyncDate missing."); + logger.error("Unable to search beneficiaries to sync based on villageIDs and lastSyncDate. Incomplete request body - Any of villageIDs, lastSyncDate, pageNo or pageSize missing."); + outputResponse.setError(400,"Bad request. Incomplete request body - Any of villageIDs, lastSyncDate, pageNo or pageSize missing."); statusCode = HttpStatus.BAD_REQUEST; } } @@ -261,8 +263,12 @@ public ResponseEntity getFlowRecordsByVillageIDAndLastModifiedDate(SyncS HttpStatus statusCode = HttpStatus.OK; OutputResponse outputResponse = new OutputResponse(); - ArrayList benFlowList; + ObjectMapper obj = new ObjectMapper(); + obj.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); + obj.setDateFormat(dateFormat); + Pageable pageable; Page paginatedFlowRecords; @@ -283,8 +289,8 @@ public ResponseEntity getFlowRecordsByVillageIDAndLastModifiedDate(SyncS outputResponse.setResponse(obj.writeValueAsString(paginatedFlowRecords)); }else{ - logger.error("Unable to search beneficiaries to sync based on villageIDs and lastSyncDate. Incomplete request body - Either villageIDs or lastSyncDate missing."); - outputResponse.setError(400,"Bad request. Incomplete request body - Either villageIDs or lastSyncDate missing."); + logger.error("Unable to search beneficiaries to sync based on villageIDs and lastSyncDate. Incomplete request body - Any of villageIDs, lastSyncDate, pageNo or pageSize missing."); + outputResponse.setError(400,"Bad request. Incomplete request body - Any of villageIDs, lastSyncDate, pageNo or pageSize missing."); statusCode = HttpStatus.BAD_REQUEST; } } catch (IllegalArgumentException e){