From edcfa0b510e538acfb38d1c29b52449ba29907c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=A5=8E=E5=85=B4?= <2220574228@qq.com> Date: Sat, 12 Sep 2026 14:52:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=88=E5=BA=A6=E6=B1=87=E6=80=BB=E6=98=8E?= =?UTF-8?q?=E7=BB=86=E6=8E=A5=E5=8F=A3;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BillManageApplicationService.java | 9 ++ .../repository/po/BillManagePO.java | 2 + .../interfaces/facadeApi/BillManageApi.java | 110 ++++++++++++++++++ 3 files changed, 121 insertions(+) diff --git a/mhd_bms/src/main/java/com/mhd/bms/application/server/billManage/BillManageApplicationService.java b/mhd_bms/src/main/java/com/mhd/bms/application/server/billManage/BillManageApplicationService.java index b5f89a353..229e5dec5 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/application/server/billManage/BillManageApplicationService.java +++ b/mhd_bms/src/main/java/com/mhd/bms/application/server/billManage/BillManageApplicationService.java @@ -139,6 +139,10 @@ public class BillManageApplicationService { String billNumber = billManagePO.getBillNumber(); // 获取账单编号 // 原有 - 前端列表用,不变 List billDetails = billDetailMapper.selectList(new LambdaQueryWrapper().eq(BillDetail::getBillNumber, billNumber)); + BigDecimal totalTaxAmount = billDetails.stream().map(BillDetail::getTaxAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal totalTaxFreeFee = billDetails.stream().map(BillDetail::getTaxFreeFee).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + billManagePO.setTaxAmount(totalTaxAmount); + billManagePO.setTaxFreeFee(totalTaxFreeFee); billManagePO.setBillDetailList(billDetails); // 新增 - 导出用,LEFT JOIN billing_statement 拿到费用科目 List billDetailPOs = billDetailMapper.getDetailsByBillManageId(billManagePO.getBillManageId()); @@ -198,6 +202,11 @@ public class BillManageApplicationService { String billNumber = billManagePO.getBillNumber(); // 获取账单编号 // 原有 - 前端列表用,不变 List billDetails = billDetailMapper.selectList(new LambdaQueryWrapper().eq(BillDetail::getBillNumber, billNumber)); + BigDecimal totalTaxAmount = billDetails.stream().map(BillDetail::getTaxAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal totalTaxFreeFee = billDetails.stream().map(BillDetail::getTaxFreeFee).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add); + billManagePO.setTaxAmount(totalTaxAmount); + billManagePO.setTaxFreeFee(totalTaxFreeFee); + billManagePO.setBillDetailList(billDetails); // 新增 - 导出用,LEFT JOIN billing_statement 拿到费用科目 List billDetailPOs = billDetailMapper.getDetailsByBillManageId(billManagePO.getBillManageId()); diff --git a/mhd_bms/src/main/java/com/mhd/bms/domain/billManage/repository/po/BillManagePO.java b/mhd_bms/src/main/java/com/mhd/bms/domain/billManage/repository/po/BillManagePO.java index 73a989470..919bf3abd 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/domain/billManage/repository/po/BillManagePO.java +++ b/mhd_bms/src/main/java/com/mhd/bms/domain/billManage/repository/po/BillManagePO.java @@ -2,6 +2,7 @@ package com.mhd.bms.domain.billManage.repository.po; import com.mhd.bms.domain.billManage.entity.BillDetail; import com.mhd.bms.domain.billingStatement.repository.po.BillingStatementPO; +import com.mhd.bms.domain.receiptManage.entity.ReceiptDetail; import com.mhd.common.core.annotation.Excel; import lombok.Data; import java.util.Date; @@ -262,6 +263,7 @@ public class BillManagePO extends BaseVOEntity{ @ApiModelProperty("收款帐户名称") private String paymentAccountName; private List billDetailList; + private List receiptDetailList; @ApiModelProperty("最近收款时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") diff --git a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BillManageApi.java b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BillManageApi.java index c9c1ec058..2c831cc93 100644 --- a/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BillManageApi.java +++ b/mhd_bms/src/main/java/com/mhd/bms/interfaces/facadeApi/BillManageApi.java @@ -37,6 +37,13 @@ import com.mhd.bms.interfaces.dto.billManage.CustomerMonthBillVO; import com.mhd.bms.domain.billManage.repository.todo.BillManageDO; import com.mhd.bms.domain.billManage.repository.po.BillManagePO; import com.mhd.bms.interfaces.assembler.billManage.BillManageAssembler; +import com.mhd.bms.domain.receiptManage.service.ReceiptDetailDomainService; +import com.mhd.bms.domain.receiptManage.entity.ReceiptDetail; +import com.mhd.bms.domain.receiptManage.entity.ReceiptManage; +import com.mhd.bms.domain.receiptManage.repository.facade.IReceiptManageService; +import com.mhd.bms.domain.receiptManage.repository.po.ReceiptManagePO; +import com.mhd.bms.domain.receiptManage.repository.po.ReceiptDetailPO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import com.mhd.common.core.web.controller.BaseController; @@ -57,6 +64,10 @@ public class BillManageApi extends BaseController{ private BillManageApplicationService billManageApplicationService; @Autowired private RedisLock redisLock; + @Autowired + private ReceiptDetailDomainService receiptDetailDomainService; + @Autowired + private IReceiptManageService receiptManageService; /** * 分页查询账单管理列表 @@ -153,6 +164,105 @@ public class BillManageApi extends BaseController{ return getDataTable(list); } + @ApiOperation("根据账单ID列表查询应收账单汇总") + @GetMapping("/receivableSumByMonth") + public AjaxResult receivableSumByMonth(BillManageDTO billManageDTO) + { + if (billManageDTO.getBillManageIds() != null && !billManageDTO.getBillManageIds().isEmpty()) { + Set idSet = java.util.Arrays.stream(billManageDTO.getBillManageIds().split(",")) + .collect(java.util.stream.Collectors.toSet()); + billManageDTO.setBillManageIdSet(idSet); + } + BillManageDO billManageDO = new BillManageDO(); + BeanUtils.copyProperties(billManageDTO, billManageDO); + billManageDO.setBillType(1); + List list = billManageApplicationService.queryList(billManageDO); + + Set billManageIdSet = list.stream() + .map(BillManagePO::getBillManageId) + .filter(java.util.Objects::nonNull) + .collect(java.util.stream.Collectors.toSet()); + + List allReceiptDetails = new ArrayList<>(); + Set receiptManageIdSet = new java.util.HashSet<>(); + List receiptManageList = new ArrayList<>(); + + if (!billManageIdSet.isEmpty()) { + allReceiptDetails = receiptDetailDomainService.queryListByLambda( + new LambdaQueryWrapper() + .in(ReceiptDetail::getBillManageId, billManageIdSet) + .eq(ReceiptDetail::getDelFlag, 1)); + + java.util.Map> detailByBillId = allReceiptDetails.stream() + .collect(java.util.stream.Collectors.groupingBy(ReceiptDetail::getBillManageId)); + for (BillManagePO bill : list) { + bill.setReceiptDetailList(detailByBillId.getOrDefault(bill.getBillManageId(), new ArrayList<>())); + } + + receiptManageIdSet = allReceiptDetails.stream() + .map(ReceiptDetail::getReceiptManageId) + .filter(java.util.Objects::nonNull) + .collect(java.util.stream.Collectors.toSet()); + + if (!receiptManageIdSet.isEmpty()) { + List manages = receiptManageService.list( + new LambdaQueryWrapper() + .in(ReceiptManage::getReceiptManageId, receiptManageIdSet) + .eq(ReceiptManage::getDelFlag, 1)); + + java.util.Map> detailPOByManageId = allReceiptDetails.stream() + .map(d -> { + ReceiptDetailPO po = new ReceiptDetailPO(); + BeanUtils.copyProperties(d, po); + return po; + }) + .collect(java.util.stream.Collectors.groupingBy(ReceiptDetailPO::getReceiptManageId)); + + for (ReceiptManage m : manages) { + ReceiptManagePO po = new ReceiptManagePO(); + BeanUtils.copyProperties(m, po); + po.setReceiptDetailPOList(detailPOByManageId.getOrDefault(m.getReceiptManageId(), new ArrayList<>())); + receiptManageList.add(po); + } + } + } + + BigDecimal totalBillAmount = list.stream() + .map(BillManagePO::getBillAmount) + .filter(java.util.Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal totalSettledAmount = list.stream() + .map(BillManagePO::getBillAmountSettlement) + .filter(java.util.Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal totalUnsettledAmount = list.stream() + .map(BillManagePO::getBillAmountUnsettled) + .filter(java.util.Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + int billCount = list.size(); + + String collectionStatus; + if (billCount == 0) { + collectionStatus = "无数据"; + } else if (totalUnsettledAmount.compareTo(BigDecimal.ZERO) == 0) { + collectionStatus = "已收款"; + } else if (totalSettledAmount.compareTo(BigDecimal.ZERO) == 0) { + collectionStatus = "未收款"; + } else { + collectionStatus = "部分收款"; + } + + java.util.Map resultMap = new java.util.HashMap<>(); + resultMap.put("totalBillAmount", totalBillAmount); + resultMap.put("totalSettledAmount", totalSettledAmount); + resultMap.put("totalUnsettledAmount", totalUnsettledAmount); + resultMap.put("billCount", billCount); + resultMap.put("collectionStatus", collectionStatus); + resultMap.put("billList", list); + resultMap.put("receiptManageList", receiptManageList); + return AjaxResult.success(resultMap); + } + @ApiOperation("导出应收账单") @GetMapping(value = "/exportReceivableList", produces = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") public void exportReceivableList(BillManageDTO billManageDTO, HttpServletResponse response) throws IOException