remove unused jobs

This commit is contained in:
taskain7
2022-05-31 21:49:39 +02:00
committed by Arnold Gálovics
parent a5bfa43dad
commit e7b2d6dff5
8 changed files with 56 additions and 278 deletions
@@ -20,9 +20,9 @@ package org.apache.fineract.infrastructure.jobs.service;
public enum JobName {
UPDATE_LOAN_SUMMARY("Update loan Summary"), UPDATE_LOAN_ARREARS_AGEING("Update Loan Arrears Ageing"), UPDATE_LOAN_PAID_IN_ADVANCE(
"Update Loan Paid In Advance"), APPLY_ANNUAL_FEE_FOR_SAVINGS("Apply Annual Fee For Savings"), APPLY_HOLIDAYS_TO_LOANS(
"Apply Holidays To Loans"), POST_INTEREST_FOR_SAVINGS("Post Interest For Savings"), TRANSFER_FEE_CHARGE_FOR_LOANS(
UPDATE_LOAN_ARREARS_AGEING("Update Loan Arrears Ageing"), APPLY_ANNUAL_FEE_FOR_SAVINGS(
"Apply Annual Fee For Savings"), APPLY_HOLIDAYS_TO_LOANS("Apply Holidays To Loans"), POST_INTEREST_FOR_SAVINGS(
"Post Interest For Savings"), TRANSFER_FEE_CHARGE_FOR_LOANS(
"Transfer Fee For Loans From Savings"), ACCOUNTING_RUNNING_BALANCE_UPDATE(
"Update Accounting Running Balances"), PAY_DUE_SAVINGS_CHARGES(
"Pay Due Savings Charges"), APPLY_CHARGE_TO_OVERDUE_LOAN_INSTALLMENT(
@@ -32,6 +32,8 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService;
import org.apache.fineract.infrastructure.core.domain.FineractPlatformTenant;
@@ -43,19 +45,16 @@ import org.apache.fineract.infrastructure.jobs.service.JobName;
import org.apache.fineract.portfolio.savings.data.SavingsAccountData;
import org.apache.fineract.portfolio.savings.domain.SavingsAccountAssembler;
import org.apache.fineract.portfolio.savings.domain.SavingsAccountRepositoryWrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionTemplate;
@Service
@Slf4j
@RequiredArgsConstructor
public class SavingsSchedularServiceImpl implements SavingsSchedularService {
private static final Logger LOG = LoggerFactory.getLogger(SavingsSchedularServiceImpl.class);
private final SavingsAccountAssembler savingAccountAssembler;
private final SavingsAccountWritePlatformService savingsAccountWritePlatformService;
private final SavingsAccountReadPlatformService savingAccountReadPlatformService;
@@ -67,23 +66,6 @@ public class SavingsSchedularServiceImpl implements SavingsSchedularService {
private Queue<List<SavingsAccountData>> queue = new ArrayDeque<>();
private int queueSize = 1;
@Autowired
public SavingsSchedularServiceImpl(final SavingsAccountAssembler savingAccountAssembler,
final SavingsAccountWritePlatformService savingsAccountWritePlatformService,
final SavingsAccountReadPlatformService savingAccountReadPlatformService,
final SavingsAccountRepositoryWrapper savingsAccountRepository, final ApplicationContext applicationContext,
final ConfigurationDomainService configurationDomainService, final JdbcTemplate jdbcTemplate,
final TransactionTemplate transactionTemplate) {
this.savingAccountAssembler = savingAccountAssembler;
this.savingsAccountWritePlatformService = savingsAccountWritePlatformService;
this.savingAccountReadPlatformService = savingAccountReadPlatformService;
this.savingsAccountRepository = savingsAccountRepository;
this.applicationContext = applicationContext;
this.configurationDomainService = configurationDomainService;
this.jdbcTemplate = jdbcTemplate;
this.transactionTemplate = transactionTemplate;
}
@Override
@CronTarget(jobName = JobName.POST_INTEREST_FOR_SAVINGS)
public void postInterestForAccounts(Map<String, String> jobParameters) throws JobExecutionException {
@@ -98,14 +80,14 @@ public class SavingsSchedularServiceImpl implements SavingsSchedularService {
long start = System.currentTimeMillis();
LOG.info("Reading Savings Account Data!");
log.info("Reading Savings Account Data!");
List<SavingsAccountData> savingsAccounts = this.savingAccountReadPlatformService
.retrieveAllSavingsDataForInterestPosting(backdatedTxnsAllowedTill, pageSize, ACTIVE.getValue(), maxSavingsIdInList);
if (savingsAccounts != null && savingsAccounts.size() > 0) {
savingsAccounts = Collections.synchronizedList(savingsAccounts);
long finish = System.currentTimeMillis();
LOG.info("Done fetching Data within {} milliseconds", finish - start);
log.info("Done fetching Data within {} milliseconds", finish - start);
if (savingsAccounts != null) {
queue.add(savingsAccounts);
}
@@ -113,7 +95,7 @@ public class SavingsSchedularServiceImpl implements SavingsSchedularService {
if (!CollectionUtils.isEmpty(queue)) {
do {
int totalFilteredRecords = savingsAccounts.size();
LOG.info("Starting Interest posting - total records - {}", totalFilteredRecords);
log.info("Starting Interest posting - total records - {}", totalFilteredRecords);
List<SavingsAccountData> queueElement = queue.element();
maxSavingsIdInList = queueElement.get(queueElement.size() - 1).getId();
postInterest(queue.remove(), threadPoolSize, batchSize, executorService, backdatedTxnsAllowedTill, pageSize,
@@ -156,7 +138,7 @@ public class SavingsSchedularServiceImpl implements SavingsSchedularService {
}
while (queue.size() <= queueSize) {
LOG.info("Fetching while threads are running!");
log.info("Fetching while threads are running!");
List<SavingsAccountData> savingsAccountDataList = Collections.synchronizedList(this.savingAccountReadPlatformService
.retrieveAllSavingsDataForInterestPosting(backdatedTxnsAllowedTill, pageSize, ACTIVE.getValue(), maxId));
if (savingsAccountDataList == null || savingsAccountDataList.isEmpty()) {
@@ -207,21 +189,21 @@ public class SavingsSchedularServiceImpl implements SavingsSchedularService {
}
while (queue.size() <= queueSize) {
LOG.info("Fetching while threads are running!..:: this is not supposed to run........");
log.info("Fetching while threads are running!..:: this is not supposed to run........");
savingsAccounts = Collections.synchronizedList(this.savingAccountReadPlatformService
.retrieveAllSavingsDataForInterestPosting(backdatedTxnsAllowedTill, pageSize, ACTIVE.getValue(), maxId));
if (savingsAccounts == null || savingsAccounts.isEmpty()) {
break;
}
maxId = savingsAccounts.get(savingsAccounts.size() - 1).getId();
LOG.info("Add to the Queue");
log.info("Add to the Queue");
queue.add(savingsAccounts);
}
checkCompletion(responses);
LOG.info("Queue size {}", queue.size());
log.info("Queue size {}", queue.size());
} catch (InterruptedException e1) {
LOG.error("Interrupted while postInterest", e1);
log.error("Interrupted while postInterest", e1);
}
}
@@ -253,12 +235,12 @@ public class SavingsSchedularServiceImpl implements SavingsSchedularService {
}
allThreadsExecuted = noOfThreadsExecuted == responses.size();
if (!allThreadsExecuted) {
LOG.error("All threads could not execute.");
log.error("All threads could not execute.");
}
} catch (InterruptedException e1) {
LOG.error("Interrupted while interest posting entries", e1);
log.error("Interrupted while interest posting entries", e1);
} catch (ExecutionException e2) {
LOG.error("Execution exception while interest posting entries", e2);
log.error("Execution exception while interest posting entries", e2);
}
}
@@ -22,10 +22,6 @@ import org.apache.fineract.infrastructure.jobs.exception.JobExecutionException;
public interface ScheduledJobRunnerService {
void updateLoanSummaryDetails();
void updateLoanPaidInAdvance();
void applyAnnualFeeForSavings();
void applyDueChargesForSavings() throws JobExecutionException;
@@ -113,127 +113,6 @@ public class ScheduledJobRunnerServiceImpl implements ScheduledJobRunnerService
this.databaseTypeResolver = databaseTypeResolver;
}
@Transactional
@Override
@CronTarget(jobName = JobName.UPDATE_LOAN_SUMMARY)
public void updateLoanSummaryDetails() {
final JdbcTemplate jdbcTemplate = new JdbcTemplate(this.dataSourceServiceFactory.determineDataSourceService().retrieveDataSource());
boolean isMySQL = databaseTypeResolver.isMySQL();
String alias = isMySQL ? "l." : "";
final String selectPart = new StringBuilder().append(" (SELECT ml.id AS loan_id, ")
.append("SUM(mr.principal_amount) as principal_disbursed_derived, ")
.append("SUM(COALESCE(mr.principal_completed_derived,0)) as principal_repaid_derived, ")
.append("SUM(COALESCE(mr.principal_writtenoff_derived,0)) as principal_writtenoff_derived, ")
.append("SUM(COALESCE(mr.interest_amount,0)) as interest_charged_derived, ")
.append("SUM(COALESCE(mr.interest_completed_derived,0)) as interest_repaid_derived, ")
.append("SUM(COALESCE(mr.interest_waived_derived,0)) as interest_waived_derived, ")
.append("SUM(COALESCE(mr.interest_writtenoff_derived,0)) as interest_writtenoff_derived, ")
.append("SUM(COALESCE(mr.fee_charges_amount,0)) + ")
.append("COALESCE((select SUM(lc.amount) from m_loan_charge lc where lc.loan_id = ml.id and lc.is_active = true")
.append(" and lc.charge_time_enum=1),0) as fee_charges_charged_derived, ")
.append("SUM(COALESCE(mr.fee_charges_completed_derived,0)) + ")
.append("COALESCE((select SUM(lc.amount_paid_derived) from m_loan_charge lc where lc.loan_id = ml.id and lc.is_active = true")
.append(" and lc.charge_time_enum = 1), 0) as fee_charges_repaid_derived, ")
.append("SUM(COALESCE(mr.fee_charges_waived_derived,0)) as fee_charges_waived_derived, ")
.append("SUM(COALESCE(mr.fee_charges_writtenoff_derived,0)) as fee_charges_writtenoff_derived, ")
.append("SUM(COALESCE(mr.penalty_charges_amount,0)) as penalty_charges_charged_derived, ")
.append("SUM(COALESCE(mr.penalty_charges_completed_derived,0)) as penalty_charges_repaid_derived, ")
.append("SUM(COALESCE(mr.penalty_charges_waived_derived,0)) as penalty_charges_waived_derived, ")
.append("SUM(COALESCE(mr.penalty_charges_writtenoff_derived,0)) as penalty_charges_writtenoff_derived ")
.append("FROM m_loan ml ").append("INNER JOIN m_loan_repayment_schedule mr on mr.loan_id = ml.id ")
.append("WHERE ml.disbursedon_date is not null ").append("GROUP BY ml.id").append(") x").toString();
final String setPart = new StringBuilder().append(" SET ").append(alias)
.append("principal_disbursed_derived = x.principal_disbursed_derived, ").append(alias)
.append("principal_repaid_derived = x.principal_repaid_derived, ").append(alias)
.append("principal_writtenoff_derived = x.principal_writtenoff_derived, ").append(alias)
.append("principal_outstanding_derived = (x.principal_disbursed_derived - (x.principal_repaid_derived + x.principal_writtenoff_derived)), ")
.append(alias).append("interest_charged_derived = x.interest_charged_derived, ").append(alias)
.append("interest_repaid_derived = x.interest_repaid_derived, ").append(alias)
.append("interest_waived_derived = x.interest_waived_derived, ").append(alias)
.append("interest_writtenoff_derived = x.interest_writtenoff_derived, ").append(alias)
.append("interest_outstanding_derived = (x.interest_charged_derived - (x.interest_repaid_derived + x.interest_waived_derived + x.interest_writtenoff_derived)), ")
.append(alias).append("fee_charges_charged_derived = x.fee_charges_charged_derived, ").append(alias)
.append("fee_charges_repaid_derived = x.fee_charges_repaid_derived, ").append(alias)
.append("fee_charges_waived_derived = x.fee_charges_waived_derived, ").append(alias)
.append("fee_charges_writtenoff_derived = x.fee_charges_writtenoff_derived, ").append(alias)
.append("fee_charges_outstanding_derived = (x.fee_charges_charged_derived - (x.fee_charges_repaid_derived + x.fee_charges_waived_derived + x.fee_charges_writtenoff_derived)), ")
.append(alias).append("penalty_charges_charged_derived = x.penalty_charges_charged_derived, ").append(alias)
.append("penalty_charges_repaid_derived = x.penalty_charges_repaid_derived, ").append(alias)
.append("penalty_charges_waived_derived = x.penalty_charges_waived_derived, ").append(alias)
.append("penalty_charges_writtenoff_derived = x.penalty_charges_writtenoff_derived, ").append(alias)
.append("penalty_charges_outstanding_derived = (x.penalty_charges_charged_derived - (x.penalty_charges_repaid_derived + x.penalty_charges_waived_derived + x.penalty_charges_writtenoff_derived)), ")
.append(alias)
.append("total_expected_repayment_derived = (x.principal_disbursed_derived + x.interest_charged_derived + x.fee_charges_charged_derived + x.penalty_charges_charged_derived), ")
.append(alias)
.append("total_repayment_derived = (x.principal_repaid_derived + x.interest_repaid_derived + x.fee_charges_repaid_derived + x.penalty_charges_repaid_derived), ")
.append(alias)
.append("total_expected_costofloan_derived = (x.interest_charged_derived + x.fee_charges_charged_derived + x.penalty_charges_charged_derived), ")
.append(alias)
.append("total_costofloan_derived = (x.interest_repaid_derived + x.fee_charges_repaid_derived + x.penalty_charges_repaid_derived), ")
.append(alias)
.append("total_waived_derived = (x.interest_waived_derived + x.fee_charges_waived_derived + x.penalty_charges_waived_derived), ")
.append(alias)
.append("total_writtenoff_derived = (x.interest_writtenoff_derived + x.fee_charges_writtenoff_derived + x.penalty_charges_writtenoff_derived), ")
.append(alias)
.append("total_outstanding_derived = (x.principal_disbursed_derived - (x.principal_repaid_derived + x.principal_writtenoff_derived)) + ")
.append("(x.interest_charged_derived - (x.interest_repaid_derived + x.interest_waived_derived + x.interest_writtenoff_derived)) + ")
.append("(x.fee_charges_charged_derived - (x.fee_charges_repaid_derived + x.fee_charges_waived_derived + x.fee_charges_writtenoff_derived)) + ")
.append("(x.penalty_charges_charged_derived - (x.penalty_charges_repaid_derived + x.penalty_charges_waived_derived + x.penalty_charges_writtenoff_derived))")
.toString();
String wherePart = " x.loan_id = l.id";
final StringBuilder updateSqlBuilder = new StringBuilder();
updateSqlBuilder.append("UPDATE m_loan l");
if (isMySQL) {
updateSqlBuilder.append(" JOIN").append(selectPart).append(" ON").append(wherePart).append(' ').append(setPart);
} else {
updateSqlBuilder.append(setPart).append(" FROM").append(selectPart).append(" WHERE").append(wherePart);
}
final int result = jdbcTemplate.update(updateSqlBuilder.toString());
LOG.info("{}: Records affected by updateLoanSummaryDetails: {}", ThreadLocalContextUtil.getTenant().getName(), result);
}
@Transactional
@Override
@CronTarget(jobName = JobName.UPDATE_LOAN_PAID_IN_ADVANCE)
public void updateLoanPaidInAdvance() {
final JdbcTemplate jdbcTemplate = new JdbcTemplate(this.dataSourceServiceFactory.determineDataSourceService().retrieveDataSource());
jdbcTemplate.execute("truncate table m_loan_paid_in_advance");
final StringBuilder updateSqlBuilder = new StringBuilder(900);
updateSqlBuilder.append(
"INSERT INTO m_loan_paid_in_advance(loan_id, principal_in_advance_derived, interest_in_advance_derived, fee_charges_in_advance_derived, penalty_charges_in_advance_derived, total_in_advance_derived)");
updateSqlBuilder.append(" select ml.id as loanId,");
updateSqlBuilder.append(" SUM(coalesce(mr.principal_completed_derived, 0)) as principal_in_advance_derived,");
updateSqlBuilder.append(" SUM(coalesce(mr.interest_completed_derived, 0)) as interest_in_advance_derived,");
updateSqlBuilder.append(" SUM(coalesce(mr.fee_charges_completed_derived, 0)) as fee_charges_in_advance_derived,");
updateSqlBuilder.append(" SUM(coalesce(mr.penalty_charges_completed_derived, 0)) as penalty_charges_in_advance_derived,");
updateSqlBuilder.append(
" (SUM(coalesce(mr.principal_completed_derived, 0)) + SUM(coalesce(mr.interest_completed_derived, 0)) + SUM(coalesce(mr.fee_charges_completed_derived, 0)) + SUM(coalesce(mr.penalty_charges_completed_derived, 0))) as total_in_advance_derived");
updateSqlBuilder.append(" FROM m_loan ml ");
updateSqlBuilder.append(" INNER JOIN m_loan_repayment_schedule mr on mr.loan_id = ml.id ");
updateSqlBuilder.append(" WHERE ml.loan_status_id = 300 ");
updateSqlBuilder.append(" and mr.duedate >= " + sqlGenerator.currentDate() + " ");
updateSqlBuilder.append(" GROUP BY ml.id");
updateSqlBuilder
.append(" HAVING (SUM(coalesce(mr.principal_completed_derived, 0)) + SUM(coalesce(mr.interest_completed_derived, 0)) +");
updateSqlBuilder.append(
" SUM(coalesce(mr.fee_charges_completed_derived, 0)) + SUM(coalesce(mr.penalty_charges_completed_derived, 0))) > 0.0");
final int result = jdbcTemplate.update(updateSqlBuilder.toString());
LOG.info("{}: Records affected by updateLoanPaidInAdvance: {}", ThreadLocalContextUtil.getTenant().getName(), result);
}
@Override
@CronTarget(jobName = JobName.APPLY_ANNUAL_FEE_FOR_SAVINGS)
public void applyAnnualFeeForSavings() {