| | |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.time.DayOfWeek; |
| | | import java.time.LocalDate; |
| | | import java.time.format.DateTimeFormatter; |
| | |
| | | @Override |
| | | public AccountDto report(DateQueryDto dateQueryDto) { |
| | | AccountDto accountDto = new AccountDto(); |
| | | //获取该段时间内的所有收入 |
| | | List<AccountDto2> accountIncomes =accountIncomeMapper.report(dateQueryDto); |
| | | |
| | | // 获取该段时间内的所有收入 |
| | | List<AccountDto2> accountIncomes = accountIncomeMapper.report(dateQueryDto); |
| | | if (accountIncomes == null) { |
| | | accountIncomes = Collections.emptyList(); |
| | | } |
| | | |
| | | Long incomeNumber = accountIncomeMapper.selectCount(Wrappers.<AccountIncome>lambdaQuery() |
| | | .between(AccountIncome::getIncomeDate, dateQueryDto.getEntryDateStart(), dateQueryDto.getEntryDateEnd())); |
| | | accountDto.setIncomeNumber(incomeNumber); |
| | | BigDecimal totalIncome = accountIncomes.stream().map(AccountDto2::getAccount).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | |
| | | BigDecimal totalIncome = BigDecimal.ZERO; |
| | | for (AccountDto2 item : accountIncomes) { |
| | | if (item.getAccount() != null) { |
| | | totalIncome = totalIncome.add(item.getAccount()); |
| | | } |
| | | } |
| | | accountDto.setTotalIncome(totalIncome); |
| | | accountIncomes.stream().forEach(accountDto2 -> { |
| | | accountDto2.setProportion(accountDto2.getAccount().divide(totalIncome,2,BigDecimal.ROUND_HALF_UP)); |
| | | }); |
| | | if (totalIncome.compareTo(BigDecimal.ZERO) != 0) { |
| | | for (AccountDto2 item : accountIncomes) { |
| | | if (item.getAccount() != null) { |
| | | item.setProportion(item.getAccount().divide(totalIncome, 2, RoundingMode.HALF_UP)); |
| | | } |
| | | } |
| | | } else { |
| | | for (AccountDto2 item : accountIncomes) { |
| | | item.setProportion(BigDecimal.ZERO); |
| | | } |
| | | } |
| | | accountDto.setIncomeType(accountIncomes); |
| | | //获取该段时间内的所有支出 |
| | | List<AccountDto2> accountExpenses =accountExpenseMapper.report(dateQueryDto); |
| | | accountDto.setExpenseType(accountExpenses); |
| | | // 获取该段时间内的所有支出 |
| | | List<AccountDto2> accountExpenses = accountExpenseMapper.report(dateQueryDto); |
| | | if (accountExpenses == null) { |
| | | accountExpenses = Collections.emptyList(); |
| | | } |
| | | |
| | | accountDto.setExpenseType(accountExpenses); // 移除了下方重复的一行 |
| | | |
| | | Long expenseNumber = accountExpenseMapper.selectCount(Wrappers.<AccountExpense>lambdaQuery() |
| | | .between(AccountExpense::getExpenseDate, dateQueryDto.getEntryDateStart(), dateQueryDto.getEntryDateEnd())); |
| | | accountDto.setExpenseNumber(expenseNumber); |
| | | BigDecimal totalExpense = accountExpenses.stream().map(AccountDto2::getAccount).reduce(BigDecimal.ZERO, BigDecimal::add); |
| | | |
| | | BigDecimal totalExpense = BigDecimal.ZERO; |
| | | for (AccountDto2 item : accountExpenses) { |
| | | if (item.getAccount() != null) { |
| | | totalExpense = totalExpense.add(item.getAccount()); |
| | | } |
| | | } |
| | | accountDto.setTotalExpense(totalExpense); |
| | | accountExpenses.stream().forEach(accountDto2 -> { |
| | | accountDto2.setProportion(accountDto2.getAccount().divide(totalExpense,2,BigDecimal.ROUND_HALF_UP)); |
| | | }); |
| | | |
| | | if (totalExpense.compareTo(BigDecimal.ZERO) != 0) { |
| | | for (AccountDto2 item : accountExpenses) { |
| | | if (item.getAccount() != null) { |
| | | item.setProportion(item.getAccount().divide(totalExpense, 2, RoundingMode.HALF_UP)); |
| | | } |
| | | } |
| | | } else { |
| | | for (AccountDto2 item : accountExpenses) { |
| | | item.setProportion(BigDecimal.ZERO); |
| | | } |
| | | } |
| | | accountDto.setExpenseType(accountExpenses); |
| | | //净收入 |
| | | |
| | | // 净收入 |
| | | BigDecimal netRevenue = totalIncome.subtract(totalExpense); |
| | | accountDto.setNetRevenue(netRevenue); |
| | | return accountDto; |