Merge pull request #1455 from pramodn02/performanceissues
MIFOSX-2151 : corrected transaction scope
This commit is contained in:
+10
@@ -0,0 +1,10 @@
|
||||
package org.mifosplatform.portfolio.loanaccount.service;
|
||||
|
||||
import org.mifosplatform.infrastructure.jobs.exception.JobExecutionException;
|
||||
|
||||
|
||||
public interface LoanSchedularService {
|
||||
|
||||
void applyChargeForOverdueLoans() throws JobExecutionException;
|
||||
|
||||
}
|
||||
+91
@@ -0,0 +1,91 @@
|
||||
package org.mifosplatform.portfolio.loanaccount.service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.mifosplatform.infrastructure.configuration.domain.ConfigurationDomainService;
|
||||
import org.mifosplatform.infrastructure.core.data.ApiParameterError;
|
||||
import org.mifosplatform.infrastructure.core.exception.AbstractPlatformDomainRuleException;
|
||||
import org.mifosplatform.infrastructure.core.exception.PlatformApiDataValidationException;
|
||||
import org.mifosplatform.infrastructure.jobs.annotation.CronTarget;
|
||||
import org.mifosplatform.infrastructure.jobs.exception.JobExecutionException;
|
||||
import org.mifosplatform.infrastructure.jobs.service.JobName;
|
||||
import org.mifosplatform.portfolio.loanaccount.loanschedule.data.OverdueLoanScheduleData;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
@Service
|
||||
public class LoanSchedularServiceImpl implements LoanSchedularService {
|
||||
|
||||
private final static Logger logger = LoggerFactory.getLogger(LoanSchedularServiceImpl.class);
|
||||
private final ConfigurationDomainService configurationDomainService;
|
||||
private final LoanReadPlatformService loanReadPlatformService;
|
||||
private final LoanWritePlatformService loanWritePlatformService;
|
||||
|
||||
@Autowired
|
||||
public LoanSchedularServiceImpl(final ConfigurationDomainService configurationDomainService,
|
||||
final LoanReadPlatformService loanReadPlatformService, final LoanWritePlatformService loanWritePlatformService) {
|
||||
this.configurationDomainService = configurationDomainService;
|
||||
this.loanReadPlatformService = loanReadPlatformService;
|
||||
this.loanWritePlatformService = loanWritePlatformService;
|
||||
}
|
||||
|
||||
@Override
|
||||
@CronTarget(jobName = JobName.APPLY_CHARGE_TO_OVERDUE_LOAN_INSTALLMENT)
|
||||
public void applyChargeForOverdueLoans() throws JobExecutionException {
|
||||
|
||||
final Long penaltyWaitPeriodValue = this.configurationDomainService.retrievePenaltyWaitPeriod();
|
||||
final Collection<OverdueLoanScheduleData> overdueLoanScheduledInstallments = this.loanReadPlatformService
|
||||
.retrieveAllLoansWithOverdueInstallments(penaltyWaitPeriodValue);
|
||||
|
||||
if (!overdueLoanScheduledInstallments.isEmpty()) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
final Map<Long, Collection<OverdueLoanScheduleData>> overdueScheduleData = new HashMap<>();
|
||||
for (final OverdueLoanScheduleData overdueInstallment : overdueLoanScheduledInstallments) {
|
||||
if (overdueScheduleData.containsKey(overdueInstallment.getLoanId())) {
|
||||
overdueScheduleData.get(overdueInstallment.getLoanId()).add(overdueInstallment);
|
||||
} else {
|
||||
Collection<OverdueLoanScheduleData> loanData = new ArrayList<>();
|
||||
loanData.add(overdueInstallment);
|
||||
overdueScheduleData.put(overdueInstallment.getLoanId(), loanData);
|
||||
}
|
||||
}
|
||||
|
||||
for (final Long loanId : overdueScheduleData.keySet()) {
|
||||
try {
|
||||
this.loanWritePlatformService.applyOverdueChargesForLoan(loanId, overdueScheduleData.get(loanId));
|
||||
|
||||
} catch (final PlatformApiDataValidationException e) {
|
||||
final List<ApiParameterError> errors = e.getErrors();
|
||||
for (final ApiParameterError error : errors) {
|
||||
logger.error("Apply Charges due for overdue loans failed for account:" + loanId + " with message "
|
||||
+ error.getDeveloperMessage());
|
||||
sb.append("Apply Charges due for overdue loans failed for account:").append(loanId).append(" with message ")
|
||||
.append(error.getDeveloperMessage());
|
||||
}
|
||||
} catch (final AbstractPlatformDomainRuleException ex) {
|
||||
logger.error("Apply Charges due for overdue loans failed for account:" + loanId + " with message "
|
||||
+ ex.getDefaultUserMessage());
|
||||
sb.append("Apply Charges due for overdue loans failed for account:").append(loanId).append(" with message ")
|
||||
.append(ex.getDefaultUserMessage());
|
||||
} catch (Exception e) {
|
||||
Throwable realCause = e;
|
||||
if (e.getCause() != null) {
|
||||
realCause = e.getCause();
|
||||
}
|
||||
logger.error("Apply Charges due for overdue loans failed for account:" + loanId + " with message "
|
||||
+ realCause.getMessage());
|
||||
sb.append("Apply Charges due for overdue loans failed for account:").append(loanId).append(" with message ")
|
||||
.append(realCause.getMessage());
|
||||
}
|
||||
}
|
||||
if (sb.length() > 0) { throw new JobExecutionException(sb.toString()); }
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+3
-2
@@ -19,6 +19,7 @@ import org.mifosplatform.portfolio.calendar.domain.CalendarInstance;
|
||||
import org.mifosplatform.portfolio.collectionsheet.command.CollectionSheetBulkDisbursalCommand;
|
||||
import org.mifosplatform.portfolio.collectionsheet.command.CollectionSheetBulkRepaymentCommand;
|
||||
import org.mifosplatform.portfolio.loanaccount.domain.LoanTransaction;
|
||||
import org.mifosplatform.portfolio.loanaccount.loanschedule.data.OverdueLoanScheduleData;
|
||||
|
||||
public interface LoanWritePlatformService {
|
||||
|
||||
@@ -74,8 +75,6 @@ public interface LoanWritePlatformService {
|
||||
|
||||
void transferFeeCharges() throws JobExecutionException;
|
||||
|
||||
void applyChargeForOverdueLoans() throws JobExecutionException;
|
||||
|
||||
CommandProcessingResult undoWriteOff(Long loanId);
|
||||
|
||||
CommandProcessingResult updateDisbursementDateAndAmountForTranche(Long loanId, Long disbursementId, JsonCommand command);
|
||||
@@ -90,4 +89,6 @@ public interface LoanWritePlatformService {
|
||||
|
||||
CommandProcessingResult addAndDeleteLoanDisburseDetails(Long loanId, JsonCommand command);
|
||||
|
||||
void applyOverdueChargesForLoan(Long loanId, Collection<OverdueLoanScheduleData> overdueLoanScheduleDatas);
|
||||
|
||||
}
|
||||
+2
-54
@@ -28,7 +28,6 @@ import org.mifosplatform.infrastructure.core.data.ApiParameterError;
|
||||
import org.mifosplatform.infrastructure.core.data.CommandProcessingResult;
|
||||
import org.mifosplatform.infrastructure.core.data.CommandProcessingResultBuilder;
|
||||
import org.mifosplatform.infrastructure.core.data.DataValidatorBuilder;
|
||||
import org.mifosplatform.infrastructure.core.exception.AbstractPlatformDomainRuleException;
|
||||
import org.mifosplatform.infrastructure.core.exception.PlatformApiDataValidationException;
|
||||
import org.mifosplatform.infrastructure.core.exception.PlatformServiceUnavailableException;
|
||||
import org.mifosplatform.infrastructure.core.serialization.FromJsonHelper;
|
||||
@@ -127,11 +126,11 @@ import org.mifosplatform.portfolio.loanaccount.domain.LoanTransactionType;
|
||||
import org.mifosplatform.portfolio.loanaccount.exception.ExceedingTrancheCountException;
|
||||
import org.mifosplatform.portfolio.loanaccount.exception.InvalidPaidInAdvanceAmountException;
|
||||
import org.mifosplatform.portfolio.loanaccount.exception.LoanDisbursalException;
|
||||
import org.mifosplatform.portfolio.loanaccount.exception.LoanMultiDisbursementException;
|
||||
import org.mifosplatform.portfolio.loanaccount.exception.LoanOfficerAssignmentException;
|
||||
import org.mifosplatform.portfolio.loanaccount.exception.LoanOfficerUnassignmentException;
|
||||
import org.mifosplatform.portfolio.loanaccount.exception.LoanTransactionNotFoundException;
|
||||
import org.mifosplatform.portfolio.loanaccount.exception.MultiDisbursementDataRequiredException;
|
||||
import org.mifosplatform.portfolio.loanaccount.exception.LoanMultiDisbursementException;
|
||||
import org.mifosplatform.portfolio.loanaccount.guarantor.service.GuarantorDomainService;
|
||||
import org.mifosplatform.portfolio.loanaccount.loanschedule.data.OverdueLoanScheduleData;
|
||||
import org.mifosplatform.portfolio.loanaccount.loanschedule.domain.DefaultScheduledDateGenerator;
|
||||
@@ -2350,59 +2349,8 @@ public class LoanWritePlatformServiceJpaRepositoryImpl implements LoanWritePlatf
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@CronTarget(jobName = JobName.APPLY_CHARGE_TO_OVERDUE_LOAN_INSTALLMENT)
|
||||
public void applyChargeForOverdueLoans() throws JobExecutionException {
|
||||
|
||||
final Long penaltyWaitPeriodValue = this.configurationDomainService.retrievePenaltyWaitPeriod();
|
||||
final Collection<OverdueLoanScheduleData> overdueLoanScheduledInstallments = this.loanReadPlatformService
|
||||
.retrieveAllLoansWithOverdueInstallments(penaltyWaitPeriodValue);
|
||||
|
||||
if (!overdueLoanScheduledInstallments.isEmpty()) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
final Map<Long, Collection<OverdueLoanScheduleData>> overdueScheduleData = new HashMap<>();
|
||||
for (final OverdueLoanScheduleData overdueInstallment : overdueLoanScheduledInstallments) {
|
||||
if (overdueScheduleData.containsKey(overdueInstallment.getLoanId())) {
|
||||
overdueScheduleData.get(overdueInstallment.getLoanId()).add(overdueInstallment);
|
||||
} else {
|
||||
Collection<OverdueLoanScheduleData> loanData = new ArrayList<>();
|
||||
loanData.add(overdueInstallment);
|
||||
overdueScheduleData.put(overdueInstallment.getLoanId(), loanData);
|
||||
}
|
||||
}
|
||||
|
||||
for (final Long loanId : overdueScheduleData.keySet()) {
|
||||
try {
|
||||
applyOverdueChargesForLoan(loanId, overdueScheduleData.get(loanId));
|
||||
|
||||
} catch (final PlatformApiDataValidationException e) {
|
||||
final List<ApiParameterError> errors = e.getErrors();
|
||||
for (final ApiParameterError error : errors) {
|
||||
logger.error("Apply Charges due for overdue loans failed for account:" + loanId + " with message "
|
||||
+ error.getDeveloperMessage());
|
||||
sb.append("Apply Charges due for overdue loans failed for account:").append(loanId).append(" with message ")
|
||||
.append(error.getDeveloperMessage());
|
||||
}
|
||||
} catch (final AbstractPlatformDomainRuleException ex) {
|
||||
logger.error("Apply Charges due for overdue loans failed for account:" + loanId + " with message "
|
||||
+ ex.getDefaultUserMessage());
|
||||
sb.append("Apply Charges due for overdue loans failed for account:").append(loanId).append(" with message ")
|
||||
.append(ex.getDefaultUserMessage());
|
||||
} catch (Exception e) {
|
||||
Throwable realCause = e;
|
||||
if (e.getCause() != null) {
|
||||
realCause = e.getCause();
|
||||
}
|
||||
logger.error("Apply Charges due for overdue loans failed for account:" + loanId + " with message "
|
||||
+ realCause.getMessage());
|
||||
sb.append("Apply Charges due for overdue loans failed for account:").append(loanId).append(" with message ")
|
||||
.append(realCause.getMessage());
|
||||
}
|
||||
}
|
||||
if (sb.length() > 0) { throw new JobExecutionException(sb.toString()); }
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void applyOverdueChargesForLoan(final Long loanId, Collection<OverdueLoanScheduleData> overdueLoanScheduleDatas) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user