From 3a76f9efb61f7bdbf96dfa429214ee0c8322a539 Mon Sep 17 00:00:00 2001 From: yaowanxin <3588231647@qq.com> Date: 星期四, 11 九月 2025 16:15:55 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java | 80 ++++++++++++++++++++++++++++++--------- 1 files changed, 61 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java b/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java index 7871fb4..d17b424 100644 --- a/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java +++ b/src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java @@ -9,19 +9,20 @@ import com.ruoyi.account.dto.AccountDto2; import com.ruoyi.account.dto.AccountDto3; import com.ruoyi.account.mapper.AccountExpenseMapper; -import com.ruoyi.account.mapper.AccountFileMapper; import com.ruoyi.account.mapper.AccountIncomeMapper; import com.ruoyi.account.pojo.AccountExpense; import com.ruoyi.account.pojo.AccountIncome; import com.ruoyi.account.service.AccountExpenseService; -import com.ruoyi.account.service.AccountIncomeService; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.dto.DateQueryDto; +import com.ruoyi.project.system.domain.SysDictData; +import com.ruoyi.project.system.mapper.SysDictDataMapper; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; +import java.time.DayOfWeek; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; @@ -36,6 +37,8 @@ private AccountExpenseMapper accountExpenseMapper; private AccountIncomeMapper accountIncomeMapper; + + private SysDictDataMapper sysDictDataMapper; //鍒嗛〉鏌ヨ @@ -88,26 +91,65 @@ //璐㈠姟鎶ヨ〃骞存煡璇� @Override - public AccountDto3 reportExpense() { - AccountDto3 accountDto3 = new AccountDto3(); + public List<AccountDto3> reportExpense() { + List<AccountDto3> accountDto3s = new ArrayList<>(); + //鍏堟煡璇㈡敹鍏ョ被鍨嬫湁鍝簺 + List<SysDictData> incomeTypes = sysDictDataMapper.selectDictDataByType("expense_types"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); int currentYear = LocalDate.now().getYear(); // 鑾峰彇褰撳墠骞翠唤锛堝2025锛� - List<String> months = new ArrayList<>(); - Map<String, List<AccountDto2>> map = new HashMap<>(); - for (int i = 1; i <= 12; i++) { - months.add(i + "鏈�"); - // 褰撴湀绗竴澶╋細骞翠唤涓哄綋鍓嶅勾锛屾湀浠戒负i锛屾棩鏈熶负1 - LocalDate firstDay = LocalDate.of(currentYear, i, 1); - DateQueryDto dateQueryDto = new DateQueryDto(); - dateQueryDto.setEntryDateStart(firstDay.format(formatter)); - // 褰撴湀鏈�鍚庝竴澶╋細绗竴澶╃殑鏈堜唤鐨勬渶鍚庝竴澶� - dateQueryDto.setEntryDateEnd(firstDay.plusMonths(1).minusDays(1).format(formatter)); - List<AccountDto2> report = accountExpenseMapper.report(dateQueryDto); - map.put(i + "鏈�",report); + for (SysDictData incomeType : incomeTypes) { + AccountDto3 accountDto3 = new AccountDto3(); + accountDto3.setTypeName(incomeType.getDictLabel());//绫诲瀷 + List<BigDecimal> account=new ArrayList<>(); + for (int i = 1; i <= 12; i++) { + // 褰撴湀绗竴澶╋細骞翠唤涓哄綋鍓嶅勾锛屾湀浠戒负i锛屾棩鏈熶负1 + LocalDate firstDay = LocalDate.of(currentYear, i, 1); + DateQueryDto dateQueryDto = new DateQueryDto(); + dateQueryDto.setEntryDateStart(firstDay.format(formatter)); + // 褰撴湀鏈�鍚庝竴澶╋細绗竴澶╃殑鏈堜唤鐨勬渶鍚庝竴澶� + dateQueryDto.setEntryDateEnd(firstDay.plusMonths(1).minusDays(1).format(formatter)); + account.add(accountExpenseMapper.report1(dateQueryDto,incomeType.getDictValue())); + } + accountDto3.setAccount(account);//绫诲瀷 + accountDto3s.add(accountDto3); } - accountDto3.setMonth(months); - accountDto3.setAccountType(map); - return accountDto3; + return accountDto3s; + } + + @Override + public Map<String, List<String>> analysis() { + // 鑾峰彇鏈懆鐨勬椂闂磋寖鍥� + LocalDate startOfWeek = LocalDate.now().with(DayOfWeek.MONDAY); + LocalDate endOfWeek = LocalDate.now().with(DayOfWeek.SUNDAY); + Map<String, List<String>> result = new HashMap<>(); + List<String> days = new ArrayList<>(); + List<String> totalIncomeList = new ArrayList<>(); + List<String> totalExpenseList = new ArrayList<>(); + List<String> netIncomeList = new ArrayList<>(); + // 鏍规嵁鏃堕棿鑼冨洿寰幆鏌ヨ姣忎竴澶╃殑鎬绘敹鍏ワ紝鎬绘敮鍑�,鍑�鏀跺叆锛堟�绘敹鍏�-鎬绘敮鍑猴級 + for (LocalDate date = startOfWeek; date.isBefore(endOfWeek) || date.isEqual(endOfWeek); date = date.plusDays(1)) { + BigDecimal totalIncome = accountIncomeMapper.selectList(Wrappers.<AccountIncome>lambdaQuery() + .eq(AccountIncome::getInputTime, date.toString())) + .stream() + .map(AccountIncome::getIncomeMoney) + .reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal totalExpense = accountExpenseMapper.selectList(Wrappers.<AccountExpense>lambdaQuery() + .eq(AccountExpense::getInputTime, date.toString())) + .stream() + .map(AccountExpense::getExpenseMoney) + .reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal netIncome = totalIncome.subtract(totalExpense); + days.add(date.toString()); + totalIncomeList.add(totalIncome.toString()); + totalExpenseList.add(totalExpense.toString()); + netIncomeList.add(netIncome.toString()); + } + result.put("days", days); // 澶� + result.put("totalIncome", totalIncomeList); // 鏀跺叆 + result.put("totalExpense", totalExpenseList); // 鏀嚭 + result.put("netIncome", netIncomeList); // 鍑�鏀跺叆 + + return result; } -- Gitblit v1.9.3