diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountRepository.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountRepository.java index df939f672..bb4eb22a0 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountRepository.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountRepository.java @@ -20,6 +20,8 @@ package org.apache.fineract.portfolio.savings.domain; import java.util.List; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.Query; @@ -49,4 +51,6 @@ public interface SavingsAccountRepository extends JpaRepository findByStatus(Integer status,Pageable pageable); } \ No newline at end of file diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsSchedularServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsSchedularServiceImpl.java index e3f2f0c77..16c426660 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsSchedularServiceImpl.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsSchedularServiceImpl.java @@ -26,10 +26,12 @@ import org.apache.fineract.infrastructure.jobs.exception.JobExecutionException; import org.apache.fineract.infrastructure.jobs.service.JobName; import org.apache.fineract.portfolio.savings.domain.SavingsAccount; import org.apache.fineract.portfolio.savings.domain.SavingsAccountAssembler; -import org.apache.fineract.portfolio.savings.domain.SavingsAccountRepositoryWrapper; +import org.apache.fineract.portfolio.savings.domain.SavingsAccountRepository; import org.apache.fineract.portfolio.savings.domain.SavingsAccountStatusType; import org.joda.time.LocalDate; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.stereotype.Service; @Service @@ -37,42 +39,50 @@ public class SavingsSchedularServiceImpl implements SavingsSchedularService { private final SavingsAccountAssembler savingAccountAssembler; private final SavingsAccountWritePlatformService savingsAccountWritePlatformService; - private final SavingsAccountRepositoryWrapper savingAccountRepositoryWrapper; private final SavingsAccountReadPlatformService savingAccountReadPlatformService; + private final SavingsAccountRepository savingsAccountRepository; @Autowired public SavingsSchedularServiceImpl(final SavingsAccountAssembler savingAccountAssembler, final SavingsAccountWritePlatformService savingsAccountWritePlatformService, - final SavingsAccountRepositoryWrapper savingAccountRepositoryWrapper, - final SavingsAccountReadPlatformService savingAccountReadPlatformService) { + final SavingsAccountReadPlatformService savingAccountReadPlatformService, final SavingsAccountRepository savingsAccountRepository) { this.savingAccountAssembler = savingAccountAssembler; this.savingsAccountWritePlatformService = savingsAccountWritePlatformService; - this.savingAccountRepositoryWrapper = savingAccountRepositoryWrapper; this.savingAccountReadPlatformService = savingAccountReadPlatformService; + this.savingsAccountRepository = savingsAccountRepository; } @CronTarget(jobName = JobName.POST_INTEREST_FOR_SAVINGS) @Override public void postInterestForAccounts() throws JobExecutionException { - final List savingsAccounts = this.savingAccountRepositoryWrapper.findSavingAccountByStatus(SavingsAccountStatusType.ACTIVE - .getValue()); + int page = 0; + Integer initialSize = 500; + Integer totalPageSize = 0; StringBuffer sb = new StringBuffer(); - for (final SavingsAccount savingsAccount : savingsAccounts) { - try { - this.savingAccountAssembler.assignSavingAccountHelpers(savingsAccount); - boolean postInterestAsOn = false; - LocalDate transactionDate = null; - this.savingsAccountWritePlatformService.postInterest(savingsAccount, postInterestAsOn, transactionDate); - } catch (Exception e) { - Throwable realCause = e; - if (e.getCause() != null) { - realCause = e.getCause(); + do { + PageRequest pageRequest = new PageRequest(page, initialSize); + Page savingsAccounts = this.savingsAccountRepository.findByStatus(SavingsAccountStatusType.ACTIVE.getValue(), + pageRequest); + for (SavingsAccount savingsAccount : savingsAccounts.getContent()) { + try { + this.savingAccountAssembler.assignSavingAccountHelpers(savingsAccount); + boolean postInterestAsOn = false; + LocalDate transactionDate = null; + this.savingsAccountWritePlatformService.postInterest(savingsAccount, postInterestAsOn, + transactionDate); + } catch (Exception e) { + Throwable realCause = e; + if (e.getCause() != null) { + realCause = e.getCause(); + } + sb.append("failed to post interest for Savings with id " + savingsAccount.getId() + " with message " + + realCause.getMessage()); } - sb.append("failed to post interest for Savings with id " + savingsAccount.getId() + " with message " - + realCause.getMessage()); } - } - + page++; + totalPageSize = savingsAccounts.getTotalPages(); + } while (page < totalPageSize); + if (sb.length() > 0) { throw new JobExecutionException(sb.toString()); } }