| src/main/java/com/ruoyi/account/controller/AccountExpenseController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/account/dto/ReportDateDto.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/account/service/AccountExpenseService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/account/service/AccountIncomeService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/java/com/ruoyi/account/service/impl/AccountIncomeServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/account/AccountExpenseMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| src/main/resources/mapper/account/AccountIncomeMapper.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/ruoyi/account/controller/AccountExpenseController.java
@@ -1,6 +1,7 @@ package com.ruoyi.account.controller; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.account.dto.ReportDateDto; import com.ruoyi.account.mapper.AccountIncomeMapper; import com.ruoyi.account.pojo.AccountExpense; import com.ruoyi.account.pojo.AccountIncome; @@ -138,8 +139,8 @@ */ @GetMapping("/report/income") @ApiOperation("è´¢å¡æ¥è¡¨å¾è¡¨æ¶å ¥å¹´åº¦æ¥è¯¢") public AjaxResult reportIncome() { return AjaxResult.success(accountIncomeService.reportIncome()); public AjaxResult reportIncome(ReportDateDto reportDateDto) { return AjaxResult.success(accountIncomeService.reportIncome(reportDateDto)); } /** @@ -149,8 +150,8 @@ */ @GetMapping("/report/expense") @ApiOperation("è´¢å¡æ¥è¡¨å¾è¡¨æ¯åºå¹´åº¦æ¥è¯¢") public AjaxResult reportExpense() { return AjaxResult.success(accountExpenseService.reportExpense()); public AjaxResult reportExpense(ReportDateDto reportDateDto) { return AjaxResult.success(accountExpenseService.reportExpense(reportDateDto)); } src/main/java/com/ruoyi/account/dto/ReportDateDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,41 @@ package com.ruoyi.account.dto; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDate; import java.util.Date; /** * @author :yys * @date : 2026/1/16 16:57 */ @Data public class ReportDateDto { /** * å¼å§æ¶é´ */ @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate entryDateStart; /** * ç»ææ¶é´ */ @JsonFormat(pattern = "yyyy-MM-dd") @DateTimeFormat(pattern = "yyyy-MM-dd") private LocalDate entryDateEnd; /** * å¼å§æä»½ */ private Integer startMonth; /** * ç»ææä»½ */ private Integer endMonth; } src/main/java/com/ruoyi/account/service/AccountExpenseService.java
@@ -6,6 +6,7 @@ import com.ruoyi.account.dto.AccountDto; import com.ruoyi.account.dto.AccountDto2; import com.ruoyi.account.dto.AccountDto3; import com.ruoyi.account.dto.ReportDateDto; import com.ruoyi.account.pojo.AccountExpense; import com.ruoyi.account.pojo.AccountIncome; import com.ruoyi.dto.DateQueryDto; @@ -22,7 +23,7 @@ AccountDto report(DateQueryDto dateQueryDto); List<AccountDto3> reportExpense(); List<AccountDto3> reportExpense(ReportDateDto reportDateDto); Map<String,List<String>> analysis(); src/main/java/com/ruoyi/account/service/AccountIncomeService.java
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.account.dto.AccountDto2; import com.ruoyi.account.dto.AccountDto3; import com.ruoyi.account.dto.ReportDateDto; import com.ruoyi.account.pojo.AccountIncome; import javax.servlet.http.HttpServletResponse; @@ -17,7 +18,7 @@ void accountIncomeExport(HttpServletResponse response, AccountIncome accountIncome); List<AccountDto3> reportIncome(); List<AccountDto3> reportIncome(ReportDateDto reportDateDto); AccountIncome getByInvoiceNumber(String purchaseContractNumber); src/main/java/com/ruoyi/account/service/impl/AccountExpenseServiceImpl.java
@@ -8,6 +8,7 @@ import com.ruoyi.account.dto.AccountDto; import com.ruoyi.account.dto.AccountDto2; import com.ruoyi.account.dto.AccountDto3; import com.ruoyi.account.dto.ReportDateDto; import com.ruoyi.account.mapper.AccountExpenseMapper; import com.ruoyi.account.mapper.AccountIncomeMapper; import com.ruoyi.account.pojo.AccountExpense; @@ -90,24 +91,38 @@ //è´¢å¡æ¥è¡¨å¹´æ¥è¯¢ @Override public List<AccountDto3> reportExpense() { public List<AccountDto3> reportExpense(ReportDateDto reportDateDto) { 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ï¼ // int currentYear = LocalDate.now().getYear(); // è·åå½å年份ï¼å¦2025ï¼ 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); LocalDate startDate = reportDateDto.getEntryDateStart(); LocalDate endDate = reportDateDto.getEntryDateEnd(); // åå§å循ç¯åéä¸ºèµ·å§æ¥æ LocalDate currentDate = startDate; // 循ç¯ï¼å½åæ¥æä¸è¶ è¿ç»ææ¥ææ¶ç»§ç» while (!currentDate.isAfter(endDate)) { // å½æç¬¬ä¸å¤© LocalDate firstDay = currentDate.withDayOfMonth(1); DateQueryDto dateQueryDto = new DateQueryDto(); dateQueryDto.setEntryDateStart(firstDay.format(formatter)); // 彿æåä¸å¤©ï¼ç¬¬ä¸å¤©çæä»½çæåä¸å¤© dateQueryDto.setEntryDateEnd(firstDay.plusMonths(1).minusDays(1).format(formatter)); // 彿æåä¸å¤© LocalDate lastDay = firstDay.plusMonths(1).minusDays(1); dateQueryDto.setEntryDateEnd(lastDay.format(formatter)); // ç´¯å æ°æ® account.add(accountExpenseMapper.report1(dateQueryDto,incomeType.getDictValue())); // æä»½å ä¸ï¼èªå¨å¤çè·¨å¹´ï¼æ¯å¦12æå 1个æä¼åæä¸ä¸å¹´1æï¼ currentDate = currentDate.plusMonths(1); } accountDto3.setAccount(account);//ç±»å accountDto3s.add(accountDto3); src/main/java/com/ruoyi/account/service/impl/AccountIncomeServiceImpl.java
@@ -7,9 +7,11 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.account.dto.AccountDto2; import com.ruoyi.account.dto.AccountDto3; import com.ruoyi.account.dto.ReportDateDto; import com.ruoyi.account.mapper.AccountIncomeMapper; import com.ruoyi.account.pojo.AccountIncome; import com.ruoyi.account.service.AccountIncomeService; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.dto.DateQueryDto; import com.ruoyi.project.system.domain.SysDictData; @@ -51,24 +53,38 @@ //è´¢å¡æ¥è¡¨å¹´æ¥è¯¢ @Override public List<AccountDto3> reportIncome() { public List<AccountDto3> reportIncome(ReportDateDto reportDateDto) { List<AccountDto3> accountDto3s = new ArrayList<>(); //å æ¥è¯¢æ¶å ¥ç±»åæåªäº List<SysDictData> incomeTypes = sysDictDataMapper.selectDictDataByType("income_types"); DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); int currentYear = LocalDate.now().getYear(); // è·åå½å年份ï¼å¦2025ï¼ // int currentYear = LocalDate.now().getYear(); // è·åå½å年份ï¼å¦2025ï¼ 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); LocalDate startDate = reportDateDto.getEntryDateStart(); LocalDate endDate = reportDateDto.getEntryDateEnd(); // åå§å循ç¯åéä¸ºèµ·å§æ¥æ LocalDate currentDate = startDate; // 循ç¯ï¼å½åæ¥æä¸è¶ è¿ç»ææ¥ææ¶ç»§ç» while (!currentDate.isAfter(endDate)) { // å½æç¬¬ä¸å¤© LocalDate firstDay = currentDate.withDayOfMonth(1); DateQueryDto dateQueryDto = new DateQueryDto(); dateQueryDto.setEntryDateStart(firstDay.format(formatter)); // 彿æåä¸å¤©ï¼ç¬¬ä¸å¤©çæä»½çæåä¸å¤© dateQueryDto.setEntryDateEnd(firstDay.plusMonths(1).minusDays(1).format(formatter)); // 彿æåä¸å¤© LocalDate lastDay = firstDay.plusMonths(1).minusDays(1); dateQueryDto.setEntryDateEnd(lastDay.format(formatter)); // ç´¯å æ°æ® account.add(accountIncomeMapper.report1(dateQueryDto,incomeType.getDictValue())); // æä»½å ä¸ï¼èªå¨å¤çè·¨å¹´ï¼æ¯å¦12æå 1个æä¼åæä¸ä¸å¹´1æï¼ currentDate = currentDate.plusMonths(1); } accountDto3.setAccount(account);//ç±»å accountDto3s.add(accountDto3); src/main/resources/mapper/account/AccountExpenseMapper.xml
@@ -58,7 +58,7 @@ <select id="report1" resultType="java.math.BigDecimal"> SELECT sum(expense_money) account ifnull(sum(expense_money),0) account FROM account_expense ai where expense_type=#{dictValue} src/main/resources/mapper/account/AccountIncomeMapper.xml
@@ -43,7 +43,7 @@ <select id="report" resultType="com.ruoyi.account.dto.AccountDto2"> SELECT sdd.dict_label typeName, sum(income_money) account ifnull(sum(income_money),0) account FROM account_income ai left join sys_dict_data sdd on ai.income_type = sdd.dict_value and sdd.dict_type='income_types' where @@ -58,7 +58,7 @@ </select> <select id="report1" resultType="java.math.BigDecimal"> SELECT sum(income_money) account ifnull(sum(income_money),0) account FROM account_income ai where income_type=#{dictValue}