fix: 付款申请预结算行付款金额合计须等于申请付款金额

推送金蝶按付款基本信息中的申请付款金额单条入账,明细行金额合计不一致时,
预付记录建档会按行分摊出与金蝶金额不符的结果。保存时校验行合计必须等于申请付款金额。
This commit is contained in:
刘泉佳
2026-10-29 02:19:13 +08:00
parent 702e6b12a8
commit d7a3c3cbdd
@@ -2362,10 +2362,18 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal remainingApplied = money(entity.getAppliedAmount());
if (customAmounts) {
BigDecimal lineTotal = BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
for (PreSettlement settlement : targetSettlements) {
BigDecimal payable = payableOfPreSettlement(settlement.getId(), settlement.getSettlementAmount(), entity.getId());
BigDecimal applied = this.specifiedAppliedAmount(lines, null, settlement.getId());
this.assertAppliedWithinPayable(settlement.getPreSettlementNo(), applied, payable);
lineTotal = lineTotal.add(applied);
}
// 推金蝶按付款基本信息中的申请付款金额,明细行金额合计不等时会导致预付建档分摊与金蝶金额不一致
BigDecimal appliedTotal = money(entity.getAppliedAmount()).setScale(2, RoundingMode.HALF_UP);
if (lineTotal.compareTo(appliedTotal) != 0) {
throw new ServiceException("预结算单付款明细金额合计[" + lineTotal.toPlainString()
+ "]必须等于申请付款金额[" + appliedTotal.toPlainString() + "]");
}
}
for (int index = 0; index < targetSettlements.size(); index++) {
@@ -2417,7 +2425,7 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl<PaymentApplic
}
}
/** 前端传入结算行付款金额时,按行落库,不再要求合计等于申请付款金额。 */
/** 前端传入结算行付款金额时,按行落库(行金额合计须与申请付款金额一致,由调用方校验)。 */
private boolean useSpecifiedLineAmounts(List<PaymentApplicationSettlementLineRequest> lines) {
return lines != null && !lines.isEmpty();
}