fix: 修复预结算转正式后付款申请未扣减预付款
This commit is contained in:
+21
-3
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user