AReceiptInfoServiceImpl.java 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package com.zksy.property.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  6. import com.zksy.property.domain.AReceiptInfo;
  7. import com.zksy.property.mapper.AReceiptInfoMapper;
  8. import com.zksy.property.service.AReceiptInfoService;
  9. import org.springframework.stereotype.Service;
  10. import java.math.BigDecimal;
  11. import java.time.LocalDate;
  12. import java.util.*;
  13. import java.util.stream.Collectors;
  14. /**
  15. * @author Administrator
  16. * @description 针对表【a_receipt_info(收据信息表)】的数据库操作Service实现
  17. * @createDate 2025-07-29 15:30:56
  18. */
  19. @Service
  20. public class AReceiptInfoServiceImpl extends ServiceImpl<AReceiptInfoMapper, AReceiptInfo>
  21. implements AReceiptInfoService{
  22. @Override
  23. public Page<AReceiptInfo> findByPage(long pageNum, long pageSize, String receiptNumber, String payer, String paymentMethod, String generationDate) {
  24. Page<AReceiptInfo> page = new Page<>(pageNum,pageSize);
  25. LambdaQueryWrapper<AReceiptInfo> queryWrapper = new LambdaQueryWrapper();
  26. queryWrapper.like(receiptNumber != null,AReceiptInfo::getReceiptNumber,receiptNumber);
  27. queryWrapper.like(payer != null,AReceiptInfo::getPayer,payer);
  28. queryWrapper.like(paymentMethod != null,AReceiptInfo::getPaymentMethod,paymentMethod);
  29. queryWrapper.like(generationDate != null,AReceiptInfo::getGenerationDate,generationDate);
  30. Page<AReceiptInfo> page1 = this.page(page, queryWrapper);
  31. return page1;
  32. }
  33. @Override
  34. public List<AReceiptInfo> getAReceiptInfoList(String receiptNumber, String payer, String paymentMethod, String generationDate) {
  35. LambdaQueryWrapper<AReceiptInfo> queryWrapper = new LambdaQueryWrapper();
  36. queryWrapper.like(receiptNumber != null,AReceiptInfo::getReceiptNumber,receiptNumber);
  37. queryWrapper.like(payer != null,AReceiptInfo::getPayer,payer);
  38. queryWrapper.like(paymentMethod != null,AReceiptInfo::getPaymentMethod,paymentMethod);
  39. queryWrapper.like(generationDate != null,AReceiptInfo::getGenerationDate,generationDate);
  40. List<AReceiptInfo> list = this.list(queryWrapper);
  41. return list;
  42. }
  43. @Override
  44. public Map<String, BigDecimal> calculateMonthlyStatistics(int year) {
  45. // 从数据库查询指定年份的所有收据
  46. List<AReceiptInfo> receiptList = list(new QueryWrapper<AReceiptInfo>()
  47. .ge("accounting_date", LocalDate.of(year, 1, 1))
  48. .le("accounting_date", LocalDate.of(year, 12, 31)));
  49. Map<String, BigDecimal> monthlyData = new LinkedHashMap<>();
  50. for (int month = 1; month <= 12; month++) {
  51. monthlyData.put(String.format("%d-%02d", year, month), BigDecimal.ZERO);
  52. }
  53. // 统计数据
  54. for (AReceiptInfo receipt : receiptList) {
  55. if (receipt.getAccountingDate() != null && receipt.getTotalAmount() != null) {
  56. String monthKey = String.format("%d-%02d",
  57. year,
  58. receipt.getAccountingDate().getMonthValue()
  59. );
  60. monthlyData.merge(monthKey, receipt.getTotalAmount(), BigDecimal::add);
  61. }
  62. }
  63. return monthlyData;
  64. }
  65. @Override
  66. public Map<String, BigDecimal> calculateQuarterlyStatistics(int year) {
  67. List<AReceiptInfo> receiptList = list(new QueryWrapper<AReceiptInfo>()
  68. .ge("accounting_date", LocalDate.of(year, 1, 1))
  69. .le("accounting_date", LocalDate.of(year, 12, 31)));
  70. Map<String, BigDecimal> quarterlyData = new TreeMap<>();
  71. for (int quarter = 1; quarter <= 4; quarter++) {
  72. quarterlyData.put(year + "Q" + quarter, BigDecimal.ZERO);
  73. }
  74. for (AReceiptInfo receipt : receiptList) {
  75. LocalDate date = receipt.getAccountingDate();
  76. if (date != null && receipt.getTotalAmount() != null) {
  77. int quarter = (date.getMonthValue() - 1) / 3 + 1;
  78. String quarterKey = year + "Q" + quarter;
  79. quarterlyData.merge(quarterKey, receipt.getTotalAmount(), BigDecimal::add);
  80. }
  81. }
  82. return quarterlyData;
  83. }
  84. @Override
  85. public Map<String, BigDecimal> calculateYearlyStatistics() {
  86. List<AReceiptInfo> receiptList = list();
  87. Map<String, BigDecimal> yearlyData = new TreeMap<>();
  88. for (AReceiptInfo receipt : receiptList) {
  89. LocalDate date = receipt.getAccountingDate();
  90. if (date != null && receipt.getTotalAmount() != null) {
  91. String yearKey = String.valueOf(date.getYear());
  92. yearlyData.merge(yearKey, receipt.getTotalAmount(), BigDecimal::add);
  93. }
  94. }
  95. return yearlyData;
  96. }
  97. @Override
  98. public List<Integer> getExistingYears() {
  99. // 从数据库查询所有收据
  100. List<AReceiptInfo> receiptList = list();
  101. return receiptList.stream()
  102. .map(AReceiptInfo::getAccountingDate)
  103. .filter(Objects::nonNull)
  104. .map(date -> date.getYear())
  105. .distinct()
  106. .sorted()
  107. .collect(Collectors.toList());
  108. }
  109. }