调整收付款问题

This commit is contained in:
2026-09-01 11:52:15 +08:00
parent a4599c48c5
commit 1363a526ff
5 changed files with 75 additions and 49 deletions
@@ -210,14 +210,22 @@ public class FormalSettlementServiceImpl extends BaseServiceImpl<FormalSettlemen
vo.setPayments(paymentMapper.selectList(Wrappers.<FormalSettlementPayment>lambdaQuery()
.eq(FormalSettlementPayment::getFormalSettlementId, id).orderByDesc(FormalSettlementPayment::getCreateTime)));
vo.setInvoices(listInvoices(settlement));
List<Long> preSettlementIds = sources.stream().map(FormalSettlementSource::getPreSettlementId).toList();
Set<Long> relationApplicationIds = paymentApplicationSettlementMapper.selectList(
Wrappers.<PaymentApplicationSettlement>lambdaQuery()
.select(PaymentApplicationSettlement::getPaymentApplicationId)
.eq(PaymentApplicationSettlement::getFormalSettlementId, id)
.eq(PaymentApplicationSettlement::getIsDeleted, 0)).stream()
.map(PaymentApplicationSettlement::getPaymentApplicationId).filter(Objects::nonNull)
.collect(Collectors.toSet());
LambdaQueryWrapper<PaymentApplication> paymentApplicationQuery = Wrappers.<PaymentApplication>lambdaQuery();
if (preSettlementIds.isEmpty()) {
paymentApplicationQuery.eq(PaymentApplication::getSettlementId, id);
} else {
paymentApplicationQuery.and(query -> query.eq(PaymentApplication::getSettlementId, id)
.or().in(PaymentApplication::getPreSettlementId, preSettlementIds));
}
paymentApplicationQuery.and(query -> {
query.eq(PaymentApplication::getSettlementId, id);
if (!relationApplicationIds.isEmpty()) {
query.or(wrapper -> wrapper.in(PaymentApplication::getId, relationApplicationIds));
}
})
.eq(PaymentApplication::getPaymentType, "settlement_payment")
.eq(PaymentApplication::getIsDeleted, 0);
vo.setPaymentApplications(paymentApplicationMapper.selectList(paymentApplicationQuery
.orderByDesc(PaymentApplication::getCreateTime)).stream()
.map(item -> PaymentApplicationWrapper.build().entityVO(item)).toList());
@@ -350,8 +358,10 @@ public class FormalSettlementServiceImpl extends BaseServiceImpl<FormalSettlemen
applySummaryRequest(settlement.getId(), request.getSummaryFees());
refreshSettlementAmount(settlement);
rebuildInvoices(settlement, request.getInvoices());
saveChange(settlement.getId(), "结算单基本信息", null, creating ? "新增" : "调整",
(creating ? "创建" : "保存") + "正式结算单" + settlement.getFormalSettlementNo(), request.getRemark());
if (!creating) {
saveChange(settlement.getId(), "结算单基本信息", null, "调整",
"保存正式结算单" + settlement.getFormalSettlementNo(), request.getRemark());
}
return settlement.getId();
}
@@ -1016,18 +1026,10 @@ public class FormalSettlementServiceImpl extends BaseServiceImpl<FormalSettlemen
}
private PaymentSummary calculatePaymentSummary(FormalSettlement settlement) {
List<Long> preSettlementIds = sourceMapper.selectList(Wrappers.<FormalSettlementSource>lambdaQuery()
.eq(FormalSettlementSource::getFormalSettlementId, settlement.getId())
.eq(FormalSettlementSource::getIsDeleted, 0)).stream()
.map(FormalSettlementSource::getPreSettlementId).filter(Objects::nonNull).toList();
LambdaQueryWrapper<PaymentApplication> query = Wrappers.<PaymentApplication>lambdaQuery()
.eq(PaymentApplication::getSettlementId, settlement.getId())
.eq(PaymentApplication::getPaymentType, "settlement_payment")
.eq(PaymentApplication::getIsDeleted, 0);
if (preSettlementIds.isEmpty()) {
query.eq(PaymentApplication::getSettlementId, settlement.getId());
} else {
query.and(wrapper -> wrapper.eq(PaymentApplication::getSettlementId, settlement.getId())
.or().in(PaymentApplication::getPreSettlementId, preSettlementIds));
}
List<PaymentApplicationSettlement> relations = paymentApplicationSettlementMapper.selectList(
Wrappers.<PaymentApplicationSettlement>lambdaQuery()
.eq(PaymentApplicationSettlement::getFormalSettlementId, settlement.getId())
@@ -1045,7 +1047,8 @@ public class FormalSettlementServiceImpl extends BaseServiceImpl<FormalSettlemen
.map(PaymentApplication::getPaidAmount).map(this::money)
.reduce(BigDecimal.ZERO, BigDecimal::add);
Map<Long, String> relationStatuses = relationApplicationIds.isEmpty() ? Map.of() : paymentApplicationMapper.selectList(
Wrappers.<PaymentApplication>lambdaQuery().in(PaymentApplication::getId, relationApplicationIds))
Wrappers.<PaymentApplication>lambdaQuery().select(PaymentApplication::getId, PaymentApplication::getApprovalStatus)
.in(PaymentApplication::getId, relationApplicationIds).eq(PaymentApplication::getIsDeleted, 0))
.stream().collect(Collectors.toMap(PaymentApplication::getId, PaymentApplication::getApprovalStatus));
appliedAmount = appliedAmount.add(relations.stream()
.filter(item -> REVIEWING.equals(relationStatuses.get(item.getPaymentApplicationId())))
@@ -1055,30 +1058,13 @@ public class FormalSettlementServiceImpl extends BaseServiceImpl<FormalSettlemen
.filter(item -> APPROVED.equals(relationStatuses.get(item.getPaymentApplicationId())))
.map(PaymentApplicationSettlement::getPaidAmount).map(this::money)
.reduce(BigDecimal.ZERO, BigDecimal::add));
List<FormalSettlementPayment> legacyPayments = paymentMapper.selectList(
Wrappers.<FormalSettlementPayment>lambdaQuery()
.eq(FormalSettlementPayment::getFormalSettlementId, settlement.getId())
.eq(FormalSettlementPayment::getIsDeleted, 0));
appliedAmount = appliedAmount.add(legacyPayments.stream()
.filter(item -> REVIEWING.equals(item.getBillStatus()))
.map(FormalSettlementPayment::getAppliedAmount).map(this::money)
.reduce(BigDecimal.ZERO, BigDecimal::add));
paidAmount = paidAmount.add(legacyPayments.stream()
.filter(item -> APPROVED.equals(item.getBillStatus()))
.map(FormalSettlementPayment::getPaidAmount).map(this::money)
.reduce(BigDecimal.ZERO, BigDecimal::add));
paidAmount = paidAmount.add(sourceMapper.selectList(Wrappers.<FormalSettlementSource>lambdaQuery()
.eq(FormalSettlementSource::getFormalSettlementId, settlement.getId())
.eq(FormalSettlementSource::getIsDeleted, 0)).stream()
.map(FormalSettlementSource::getAdvancePaidAmount).map(this::money)
.reduce(BigDecimal.ZERO, BigDecimal::add));
if ("receivable".equals(settlement.getSettlementType())) {
paidAmount = paidAmount.add(receiptClaimSettlementMapper.selectList(
paidAmount = receiptClaimSettlementMapper.selectList(
Wrappers.<ReceiptClaimSettlement>lambdaQuery()
.eq(ReceiptClaimSettlement::getFormalSettlementId, settlement.getId())
.eq(ReceiptClaimSettlement::getStatus, 1))
.stream().map(ReceiptClaimSettlement::getAllocatedReceiptAmount).map(this::money)
.reduce(BigDecimal.ZERO, BigDecimal::add));
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
return new PaymentSummary(money(appliedAmount), money(paidAmount));
}
@@ -140,22 +140,21 @@ public class PreSettlementServiceImpl extends BaseServiceImpl<PreSettlementMappe
List<PaymentApplication> applications = paymentApplicationMapper.selectList(
Wrappers.<PaymentApplication>lambdaQuery()
.select(PaymentApplication::getPreSettlementId, PaymentApplication::getAppliedAmount,
PaymentApplication::getPaidAmount, PaymentApplication::getApprovalStatus)
PaymentApplication::getPaidAmount)
.eq(PaymentApplication::getPaymentType, "progress_advance")
.in(PaymentApplication::getPreSettlementId, preSettlementIds)
.in(PaymentApplication::getApprovalStatus, STATUS_REVIEWING, STATUS_APPROVED)
.eq(PaymentApplication::getApprovalStatus, STATUS_APPROVED)
.eq(PaymentApplication::getIsDeleted, 0));
Map<Long, BigDecimal> reviewingAmounts = new HashMap<>();
Map<Long, BigDecimal> approvedAmounts = new HashMap<>();
Map<Long, BigDecimal> appliedAmounts = new HashMap<>();
Map<Long, BigDecimal> paidAmounts = new HashMap<>();
applications.forEach(application -> {
boolean reviewing = STATUS_REVIEWING.equals(application.getApprovalStatus());
Map<Long, BigDecimal> amounts = reviewing ? reviewingAmounts : approvedAmounts;
BigDecimal amount = reviewing ? application.getAppliedAmount() : application.getPaidAmount();
amounts.merge(application.getPreSettlementId(), money(amount), BigDecimal::add);
Long preSettlementId = application.getPreSettlementId();
appliedAmounts.merge(preSettlementId, money(application.getAppliedAmount()), BigDecimal::add);
paidAmounts.merge(preSettlementId, money(application.getPaidAmount()), BigDecimal::add);
});
records.forEach(record -> {
record.setAdvanceAppliedAmount(money(reviewingAmounts.get(record.getId())));
record.setAdvancePaidAmount(money(approvedAmounts.get(record.getId())));
record.setAdvanceAppliedAmount(money(appliedAmounts.get(record.getId())));
record.setAdvancePaidAmount(money(paidAmounts.get(record.getId())));
});
}