月度汇总明细接口;

This commit is contained in:
王奎兴
2026-09-12 14:52:03 +08:00
parent 03b168abc0
commit edcfa0b510
3 changed files with 121 additions and 0 deletions
@@ -139,6 +139,10 @@ public class BillManageApplicationService {
String billNumber = billManagePO.getBillNumber(); // 获取账单编号
// 原有 - 前端列表用,不变
List<BillDetail> billDetails = billDetailMapper.selectList(new LambdaQueryWrapper<BillDetail>().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<BillDetailPO> billDetailPOs = billDetailMapper.getDetailsByBillManageId(billManagePO.getBillManageId());
@@ -198,6 +202,11 @@ public class BillManageApplicationService {
String billNumber = billManagePO.getBillNumber(); // 获取账单编号
// 原有 - 前端列表用,不变
List<BillDetail> billDetails = billDetailMapper.selectList(new LambdaQueryWrapper<BillDetail>().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<BillDetailPO> billDetailPOs = billDetailMapper.getDetailsByBillManageId(billManagePO.getBillManageId());
@@ -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<BillDetail> billDetailList;
private List<ReceiptDetail> receiptDetailList;
@ApiModelProperty("最近收款时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@@ -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<String> 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<BillManagePO> list = billManageApplicationService.queryList(billManageDO);
Set<Long> billManageIdSet = list.stream()
.map(BillManagePO::getBillManageId)
.filter(java.util.Objects::nonNull)
.collect(java.util.stream.Collectors.toSet());
List<ReceiptDetail> allReceiptDetails = new ArrayList<>();
Set<Long> receiptManageIdSet = new java.util.HashSet<>();
List<ReceiptManagePO> receiptManageList = new ArrayList<>();
if (!billManageIdSet.isEmpty()) {
allReceiptDetails = receiptDetailDomainService.queryListByLambda(
new LambdaQueryWrapper<ReceiptDetail>()
.in(ReceiptDetail::getBillManageId, billManageIdSet)
.eq(ReceiptDetail::getDelFlag, 1));
java.util.Map<Long, List<ReceiptDetail>> 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<ReceiptManage> manages = receiptManageService.list(
new LambdaQueryWrapper<ReceiptManage>()
.in(ReceiptManage::getReceiptManageId, receiptManageIdSet)
.eq(ReceiptManage::getDelFlag, 1));
java.util.Map<Long, List<ReceiptDetailPO>> 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<String, Object> 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