finance-analyzer/src/main/java/de/arminwolf/financeanalyzer/service/usecases/CashFlowService.java

68 lines
2.3 KiB
Java

package de.arminwolf.financeanalyzer.service.usecases;
import de.arminwolf.financeanalyzer.dao.ReportDAO;
import de.arminwolf.financeanalyzer.dao.TransactionDAO;
import org.apache.commons.math3.util.Pair;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.Collectors;
import static de.arminwolf.financeanalyzer.util.Constants.AUSGABEN;
import static de.arminwolf.financeanalyzer.util.Constants.EINNAHMEN;
@Service
public class CashFlowService {
public void setCashFlowChart(final ReportDAO reportDAO,
final List<TransactionDAO> filteredIncomeTransactions,
final List<TransactionDAO> filteredExpenseTransactions) {
Map<String, List<Float>> expenses = new TreeMap<>();
Map<String, List<Float>> income = new TreeMap<>();
filteredIncomeTransactions.stream()
.map(TransactionDAO::getAnalyseMonat)
.forEach(month -> {
income.put(month, new ArrayList<>());
filteredIncomeTransactions.stream()
.filter(t -> t.getAnalyseMonat().equals(month))
.filter(t -> t.getAnalyseBetrag().equals(EINNAHMEN))
.forEach(t -> income.get(month).add(t.getBetragAsFloat()));
});
filteredExpenseTransactions.stream()
.map(TransactionDAO::getAnalyseMonat)
.forEach(month -> {
expenses.put(month, new ArrayList<>());
filteredExpenseTransactions.stream()
.filter(t -> t.getAnalyseMonat().equals(month))
.filter(t -> t.getAnalyseBetrag().equals(AUSGABEN))
.forEach(t -> expenses.get(month).add(t.getBetragAsFloat()));
});
System.out.println("Number of Dataseries. Expenses: " + expenses.size() + ", Income: " + income.size());
income.values().forEach(System.out::println);
System.out.println("-------------------");
reportDAO.setCashFlowChart(expenses, income);
final List<TransactionDAO> allTransaction = new ArrayList<>();
allTransaction.addAll(filteredIncomeTransactions);
allTransaction.addAll(filteredExpenseTransactions);
// Line Chart
reportDAO.setAccountBalanceLineChart(allTransaction.stream()
.map(t -> Pair.create(t.getBuchungstag(), t.getKontostand()))
.collect(Collectors.toList()));
// Bubble Chart
reportDAO.setTransactionCategoriesBubbleChart(filteredExpenseTransactions);
}
}