gongchunyi
11 小时以前 f65f8494fd2e292e5c15c02112fa9217ce655361
src/main/java/com/ruoyi/account/service/impl/AccountIncomeServiceImpl.java
@@ -5,8 +5,8 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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;
@@ -22,9 +22,9 @@
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@AllArgsConstructor
@Service
@@ -38,7 +38,38 @@
    //分页查询
    @Override
    public IPage<AccountIncome> accountIncomeListPage(Page page, AccountIncome accountIncome) {
        resolveIncomeMethodLabelFilter(accountIncome);
        return accountIncomeMapper.accountIncomeListPage(page,accountIncome);
    }
    private void resolveIncomeMethodLabelFilter(AccountIncome accountIncome) {
        if (accountIncome == null) {
            return;
        }
        if (accountIncome.getIncomeMethodLabel() == null || accountIncome.getIncomeMethodLabel().trim().isEmpty()) {
            return;
        }
        String targetLabel = accountIncome.getIncomeMethodLabel().trim();
        List<String> paymentMethodList = selectDictValuesByLabel("payment_methods", targetLabel);
        List<String> receiptPaymentMethodList = selectDictValuesByLabel("receipt_payment_type", targetLabel);
        if (paymentMethodList.isEmpty()) {
            paymentMethodList = Collections.singletonList("__NO_MATCH__");
        }
        if (receiptPaymentMethodList.isEmpty()) {
            receiptPaymentMethodList = Collections.singletonList("__NO_MATCH__");
        }
        accountIncome.setPaymentMethodList(paymentMethodList);
        accountIncome.setReceiptPaymentMethodList(receiptPaymentMethodList);
        accountIncome.setIncomeMethod(null);
    }
    private List<String> selectDictValuesByLabel(String dictType, String label) {
        return sysDictDataMapper.selectDictDataByType(dictType).stream()
                .filter(item -> label.equals(item.getDictLabel()))
                .map(SysDictData::getDictValue)
                .filter(v -> v != null && !v.trim().isEmpty())
                .distinct()
                .collect(Collectors.toList());
    }
    //导出
@@ -51,24 +82,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));
                account.add(accountIncomeMapper.report1(dateQueryDto,incomeType.getDictValue()));
                // 当月最后一天
                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);
@@ -82,4 +127,10 @@
                .eq(AccountIncome::getInvoiceNumber, purchaseContractNumber));
        return accountIncome;
    }
    @Override
    public List<AccountIncome> getByInvoiceNumberList(String purchaseContractNumber) {
        return accountIncomeMapper.selectList(new LambdaQueryWrapper<AccountIncome>()
                .eq(AccountIncome::getInvoiceNumber, purchaseContractNumber));
    }
}