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 754bfcf1..27d0e290 100644 --- a/src/main/java/com/iemr/common/identity/controller/IdentityController.java +++ b/src/main/java/com/iemr/common/identity/controller/IdentityController.java @@ -24,6 +24,7 @@ import java.lang.reflect.Type; import java.math.BigInteger; import java.sql.Timestamp; +import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -32,10 +33,12 @@ import javax.persistence.NoResultException; import javax.persistence.QueryTimeoutException; +import com.fasterxml.jackson.databind.SerializationFeature; import com.iemr.common.identity.dto.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; @@ -328,9 +331,9 @@ public class IdentityController { JsonElement json = new JsonParser().parse(object); SearchSyncDTO search = InputMapper.getInstance().gson().fromJson(json, SearchSyncDTO.class); - List list = svc.searchBeneficiaryByVillageIdAndLastModifyDate(search.getVillageID(), new Timestamp(search.getLastModifiedDate())); + Page beneficiariesDTOPage = svc.searchBeneficiaryByVillageIdAndLastModifyDate(search.getVillageID(), new Timestamp(search.getLastModifiedDate()), search.getPageNo(), search.getPageSize()); - response = getSuccessResponseString(list, 200, "success", "getIdentityByVillageAndLastSyncTime"); + response = getSuccessPaginatedResponseString(beneficiariesDTOPage, 200, "success", "getIdentityByVillageAndLastSyncTime"); logger.info("IdentityController.getBeneficiary - end"); } catch (Exception e) { @@ -800,6 +803,21 @@ private String getSuccessResponseString(List list, Integer sta return response.toString(); } + private String getSuccessPaginatedResponseString(Page beneficiariesDTOS, Integer statusCode, String statusMsg, + String methodName) throws JsonProcessingException { + 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); + + String data = obj.writeValueAsString(beneficiariesDTOS); + logger.info("Total results data response size:" + (!beneficiariesDTOS.getContent().isEmpty() ? beneficiariesDTOS.getTotalElements() : "No Beneficiary Found")); + OutputResponse response = new OutputResponse.Builder().setDataJsonType("JsonObject.class") + .setStatusCode(statusCode).setStatusMessage(statusMsg) + .setDataObjectType(this.getClass().getSimpleName()).setMethodName(methodName).setData(data).build(); + return response.toString(); + } + /** * * @param map diff --git a/src/main/java/com/iemr/common/identity/dto/SearchSyncDTO.java b/src/main/java/com/iemr/common/identity/dto/SearchSyncDTO.java index 45bf61c2..a1caaabf 100644 --- a/src/main/java/com/iemr/common/identity/dto/SearchSyncDTO.java +++ b/src/main/java/com/iemr/common/identity/dto/SearchSyncDTO.java @@ -29,5 +29,7 @@ public class SearchSyncDTO { private Long lastModifiedDate; private List villageID; + private Integer pageNo; + private Integer pageSize; } diff --git a/src/main/java/com/iemr/common/identity/repo/BenMappingRepo.java b/src/main/java/com/iemr/common/identity/repo/BenMappingRepo.java index 874492ac..3dc6a29f 100644 --- a/src/main/java/com/iemr/common/identity/repo/BenMappingRepo.java +++ b/src/main/java/com/iemr/common/identity/repo/BenMappingRepo.java @@ -25,6 +25,8 @@ import java.sql.Timestamp; 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; @@ -126,9 +128,9 @@ public List getBenMappingByBenDetailsIds(@Param("benDetailsIds") List< public List getBenMappingByVanSerialNo(@Param("benMapIds") BigInteger benMapIds, @Param("vanID") Integer vanID); - @Query(value = "select m from MBeneficiarymapping m where m.mBeneficiaryaddress.permVillageId IN :villageIDs and " - + "(m.mBeneficiaryaddress.lastModDate > :lastModDate or m.mBeneficiarycontact.lastModDate > :lastModDate " - + "or m.mBeneficiarydetail.lastModDate > :lastModDate ) order by m.benMapId Desc") - List findByBeneficiaryDetailsByVillageIDAndLastModifyDate(@Param("villageIDs") List villageID, @Param("lastModDate") Timestamp lastModifiedDate); - + @Query("SELECT m FROM MBeneficiarymapping m where m.mBeneficiaryaddress.permVillageId IN :villageIDs AND" + + " GREATEST(m.mBeneficiaryaddress.lastModDate, m.mBeneficiarycontact.lastModDate, m.mBeneficiarydetail.lastModDate) > :lastModDate " + + "ORDER BY GREATEST(m.mBeneficiaryaddress.lastModDate, m.mBeneficiarycontact.lastModDate, m.mBeneficiarydetail.lastModDate) ASC ") + Page findBeneficiaryByVillageIDAndLastModifiedDatePaginated(@Param("villageIDs") List villageID, + @Param("lastModDate") Timestamp lastModifiedDate, Pageable pageable); } 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 b75b4c6d..2df3e4f7 100644 --- a/src/main/java/com/iemr/common/identity/service/IdentityService.java +++ b/src/main/java/com/iemr/common/identity/service/IdentityService.java @@ -40,6 +40,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageImpl; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; @@ -507,23 +511,31 @@ public List searhBeneficiaryByFamilyId(String familyId) return beneficiaryList; } - public List searchBeneficiaryByVillageIdAndLastModifyDate(List villageIDs, Timestamp lastModifiedDate) { + public Page searchBeneficiaryByVillageIdAndLastModifyDate(List villageIDs, Timestamp lastModifiedDate, Integer pageNo , Integer pageSize) { + Pageable pageable; + Page beneficiarymappingPage; List beneficiaryList = new ArrayList(); + Page beneficiariesDTOPage = null; + pageable = new PageRequest(pageNo,pageSize); try { // find benmap ids - List benMappingsList = mappingRepo.findByBeneficiaryDetailsByVillageIDAndLastModifyDate(villageIDs, lastModifiedDate); - if (benMappingsList != null && !benMappingsList.isEmpty()){ + beneficiarymappingPage = mappingRepo.findBeneficiaryByVillageIDAndLastModifiedDatePaginated(villageIDs, lastModifiedDate,pageable); - for (MBeneficiarymapping benMapOBJ : benMappingsList) { + long totalElements = beneficiarymappingPage.getTotalElements(); + + if (!beneficiarymappingPage.getContent().isEmpty()){ + + for (MBeneficiarymapping benMapOBJ : beneficiarymappingPage.getContent()) { beneficiaryList.add(this.getBeneficiariesDTO(benMapOBJ)); } } + beneficiariesDTOPage = new PageImpl<>(beneficiaryList,pageable,totalElements); } catch (Exception e) { logger.error( "error in beneficiary search to sync to CHO App with villageIDs: " + villageIDs + " error : " + e.getLocalizedMessage()); } - return beneficiaryList; + return beneficiariesDTOPage; } public List searhBeneficiaryByGovIdentity(String identity)