From 20038ae187d43d9a44ff4fe6dbbf39bc92753c73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=89=E4=BD=B3?= <1107186916@qq.com> Date: Mon, 19 Oct 2026 21:38:28 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=A2=84=E4=BB=98=E8=BD=AC=E6=AD=A3?= =?UTF-8?q?=E5=BC=8F=E7=BB=93=E8=BD=AC=E6=89=8B=E5=B7=A5=E5=90=88=E8=AE=A1?= =?UTF-8?q?=E8=B4=B9=E7=94=A8=E8=A1=8C=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E9=87=91=E8=9D=B6=E9=87=91=E9=A2=9D=E7=BC=BA=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - rebuildSummaryFees 不再将预结算手工费用行(manualFlag=1)并入自动汇总:金蝶分录只送手工行,并入后被当作明细再汇总跳过,导致 YJ2026101900004 转正式后水费 500 元未推送金蝶 - 预结算手工行结转为正式手工行(同键已存在时沿用页面维护值不重复插入) - applySummaryRequest 空列表视为沿用 rebuild 结果,不再按空请求删光手工行(与预结算同口径) --- .../impl/FormalSettlementServiceImpl.java | 40 +++++++++++++++++-- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/FormalSettlementServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/FormalSettlementServiceImpl.java index 91268648..345a6a03 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/FormalSettlementServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/FormalSettlementServiceImpl.java @@ -1349,6 +1349,9 @@ public class FormalSettlementServiceImpl extends BaseServiceImpl existingManualRows = existingRows.stream() .filter(row -> Integer.valueOf(1).equals(row.getManualFlag())).toList(); Map aggregates = new LinkedHashMap<>(); + // 预结算手工费用行不并入自动汇总:金蝶分录只送手工行(manualFlag=1),并入自动汇总 + // 会被当作明细再汇总跳过,推送金蝶时金额缺失(如预付单手工水费转正式后丢失) + Map sourceManualAmounts = new LinkedHashMap<>(); for (FormalSettlementSource source : sourceMapper.selectList(Wrappers.lambdaQuery() .eq(FormalSettlementSource::getFormalSettlementId, settlementId))) { List sourceSummary = preSummaryFeeMapper.selectList( @@ -1356,9 +1359,12 @@ public class FormalSettlementServiceImpl extends BaseServiceImpl { - BigDecimal additionalAmount = Integer.valueOf(1).equals(row.getManualFlag()) - ? money(row.getSettlementAmount()) : money(row.getAdjustAmount()); - aggregates.merge(summaryKey(row.getFeeType(), row.getFeeItem()), additionalAmount, BigDecimal::add); + if (Integer.valueOf(1).equals(row.getManualFlag())) { + sourceManualAmounts.merge(summaryKey(row.getFeeType(), row.getFeeItem()), + money(row.getSettlementAmount()), BigDecimal::add); + } else { + aggregates.merge(summaryKey(row.getFeeType(), row.getFeeItem()), money(row.getAdjustAmount()), BigDecimal::add); + } }); } Map feeTypeMap = feeTypeMap(); @@ -1393,6 +1399,25 @@ public class FormalSettlementServiceImpl extends BaseServiceImpl entry : sourceManualAmounts.entrySet()) { + boolean existed = existingManualRows.stream().anyMatch(row -> summaryKey(row).equals(entry.getKey())); + if (existed) { + continue; + } + String[] keyParts = entry.getKey().split("@@@", 2); + FormalSettlementSummaryFee manualRow = new FormalSettlementSummaryFee(); + manualRow.setFormalSettlementId(settlementId); + manualRow.setFeeType(keyParts[0]); + manualRow.setFeeItem(keyParts.length > 1 ? keyParts[1] : ""); + manualRow.setOriginalAmount(BigDecimal.ZERO.setScale(2)); + manualRow.setAdjustAmount(money(entry.getValue())); + manualRow.setSettlementAmount(money(entry.getValue())); + manualRow.setRemark(""); + manualRow.setManualFlag(1); + manualRow.setLineNo(lineNo++); + summaryFeeMapper.insert(manualRow); + } renumberSummaryFees(settlementId); } @@ -1489,7 +1514,14 @@ public class FormalSettlementServiceImpl extends BaseServiceImpl requestRows) { - if (requestRows == null) return; + if (requestRows == null) { + return; + } + // 空列表表示沿用 rebuildSummaryFees 结果(如预结算转正式结转的手工合计行),不得按空请求删光手工行 + if (requestRows.isEmpty()) { + renumberSummaryFees(settlementId); + return; + } Map> allowedManualFees = new LinkedHashMap<>(); for (Map option : preSettlementService.feeOptions()) { Set feeItems = new LinkedHashSet<>();