package com.zksy.property.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zksy.property.domain.AReceiptInfo; import com.zksy.property.mapper.AReceiptInfoMapper; import com.zksy.property.service.AReceiptInfoService; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; /** * @author Administrator * @description 针对表【a_receipt_info(收据信息表)】的数据库操作Service实现 * @createDate 2025-07-29 15:30:56 */ @Service public class AReceiptInfoServiceImpl extends ServiceImpl implements AReceiptInfoService{ @Override public Page findByPage(long pageNum, long pageSize, String receiptNumber, String payer, String paymentMethod, String generationDate) { Page page = new Page<>(pageNum,pageSize); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); queryWrapper.like(receiptNumber != null,AReceiptInfo::getReceiptNumber,receiptNumber); queryWrapper.like(payer != null,AReceiptInfo::getPayer,payer); queryWrapper.like(paymentMethod != null,AReceiptInfo::getPaymentMethod,paymentMethod); queryWrapper.like(generationDate != null,AReceiptInfo::getGenerationDate,generationDate); Page page1 = this.page(page, queryWrapper); return page1; } @Override public List getAReceiptInfoList(String receiptNumber, String payer, String paymentMethod, String generationDate) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); queryWrapper.like(receiptNumber != null,AReceiptInfo::getReceiptNumber,receiptNumber); queryWrapper.like(payer != null,AReceiptInfo::getPayer,payer); queryWrapper.like(paymentMethod != null,AReceiptInfo::getPaymentMethod,paymentMethod); queryWrapper.like(generationDate != null,AReceiptInfo::getGenerationDate,generationDate); List list = this.list(queryWrapper); return list; } @Override public Map calculateMonthlyStatistics(int year) { // 从数据库查询指定年份的所有收据 List receiptList = list(new QueryWrapper() .ge("accounting_date", LocalDate.of(year, 1, 1)) .le("accounting_date", LocalDate.of(year, 12, 31))); Map monthlyData = new LinkedHashMap<>(); for (int month = 1; month <= 12; month++) { monthlyData.put(String.format("%d-%02d", year, month), BigDecimal.ZERO); } // 统计数据 for (AReceiptInfo receipt : receiptList) { if (receipt.getAccountingDate() != null && receipt.getTotalAmount() != null) { String monthKey = String.format("%d-%02d", year, receipt.getAccountingDate().getMonthValue() ); monthlyData.merge(monthKey, receipt.getTotalAmount(), BigDecimal::add); } } return monthlyData; } @Override public Map calculateQuarterlyStatistics(int year) { List receiptList = list(new QueryWrapper() .ge("accounting_date", LocalDate.of(year, 1, 1)) .le("accounting_date", LocalDate.of(year, 12, 31))); Map quarterlyData = new TreeMap<>(); for (int quarter = 1; quarter <= 4; quarter++) { quarterlyData.put(year + "Q" + quarter, BigDecimal.ZERO); } for (AReceiptInfo receipt : receiptList) { LocalDate date = receipt.getAccountingDate(); if (date != null && receipt.getTotalAmount() != null) { int quarter = (date.getMonthValue() - 1) / 3 + 1; String quarterKey = year + "Q" + quarter; quarterlyData.merge(quarterKey, receipt.getTotalAmount(), BigDecimal::add); } } return quarterlyData; } @Override public Map calculateYearlyStatistics() { List receiptList = list(); Map yearlyData = new TreeMap<>(); for (AReceiptInfo receipt : receiptList) { LocalDate date = receipt.getAccountingDate(); if (date != null && receipt.getTotalAmount() != null) { String yearKey = String.valueOf(date.getYear()); yearlyData.merge(yearKey, receipt.getTotalAmount(), BigDecimal::add); } } return yearlyData; } @Override public List getExistingYears() { // 从数据库查询所有收据 List receiptList = list(); return receiptList.stream() .map(AReceiptInfo::getAccountingDate) .filter(Objects::nonNull) .map(date -> date.getYear()) .distinct() .sorted() .collect(Collectors.toList()); } }