fix: 修复预结算转正式后付款申请未扣减预付款

This commit is contained in:
刘泉佳
2026-10-21 14:43:04 +08:00
parent a61509cc42
commit a17a0a8b1e
@@ -321,11 +321,14 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
BigDecimal writeOffAmount = preSettlementReference
? projectAdvanceWriteOffService.sumBySettlement(TransportBusiConstant.SETTLEMENT_BILL_PRE, referenceId)
: projectAdvanceWriteOffService.sumBySettlement(TransportBusiConstant.SETTLEMENT_BILL_FORMAL, referenceId);
// 预结算转正式时,来源预结算的已付预付款已计入正式结算单已付,尾款可付金额需同步扣减
BigDecimal advancePaidAmount = preSettlementReference ? BigDecimal.ZERO
: this.formalSettlementAdvancePaid(referenceId);
PaymentApplicationReferenceAmountVO amount = new PaymentApplicationReferenceAmountVO();
amount.setSettlementAmount(settlementAmount);
amount.setCumulativeAppliedAmount(cumulativeAppliedAmount.add(writeOffAmount));
amount.setCumulativeAppliedAmount(cumulativeAppliedAmount.add(writeOffAmount).add(advancePaidAmount));
amount.setPayableAmount(settlementAmount.subtract(cumulativeAppliedAmount).subtract(writeOffAmount)
.max(BigDecimal.ZERO));
.subtract(advancePaidAmount).max(BigDecimal.ZERO));
amount.setPaymentSequence(resolvePaymentSequence(preSettlementReference, referenceId, excludeId));
return amount;
}
@@ -2358,15 +2361,30 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
return relationAmount.add(legacyAmount);
}
/** 正式结算可付款 = 结算金额 − 已申请付款 − 项目预付核销 */
/** 正式结算可付款 = 结算金额 − 已申请付款 − 项目预付核销 − 来源预结算已付预付款 */
private BigDecimal payableOfFormalSettlement(Long settlementId, BigDecimal settlementAmount, Long excludeId) {
return money(settlementAmount)
.subtract(cumulativeFormalSettlementApplied(settlementId, excludeId))
.subtract(projectAdvanceWriteOffService.sumBySettlement(
TransportBusiConstant.SETTLEMENT_BILL_FORMAL, settlementId))
.subtract(this.formalSettlementAdvancePaid(settlementId))
.max(BigDecimal.ZERO);
}
/** 正式结算单来源预结算的已付预付款合计(转正式时已计入结算单已付) */
private BigDecimal formalSettlementAdvancePaid(Long formalSettlementId) {
if (formalSettlementId == null) {
return BigDecimal.ZERO;
}
return formalSettlementSourceMapper.selectList(Wrappers.<FormalSettlementSource>lambdaQuery()
.select(FormalSettlementSource::getAdvancePaidAmount)
.eq(FormalSettlementSource::getFormalSettlementId, formalSettlementId)
.eq(FormalSettlementSource::getIsDeleted, 0)).stream()
.map(FormalSettlementSource::getAdvancePaidAmount)
.map(this::money)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
/** 预结算可付款 = 结算金额 − 已申请付款 − 项目预付核销 */
private BigDecimal payableOfPreSettlement(Long preSettlementId, BigDecimal settlementAmount, Long excludeId) {
return money(settlementAmount)