From 9f1b295c2ffce36f9f891ead7d1a4e1271c6f2f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=89=E4=BD=B3?= <1107186916@qq.com> Date: Fri, 6 Nov 2026 16:44:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BB=98=E6=AC=BE=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E9=87=91=E8=9D=B6=E4=BB=98=E6=AC=BE=E7=BB=93=E6=9E=9C=E5=9B=9E?= =?UTF-8?q?=E5=86=99=E7=BB=9F=E4=B8=80=E6=8C=89=E9=87=91=E8=9D=B6=E5=8D=95?= =?UTF-8?q?=E6=8D=AE=E5=8F=B7=E5=8C=B9=E9=85=8D,=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=9D=A5=E6=BA=90=E5=8D=95=E5=8F=B7=E5=90=AB=E7=8E=AF=E5=A2=83?= =?UTF-8?q?=E5=90=8E=E7=BC=80=E5=AF=BC=E8=87=B4=E5=9B=9E=E5=86=99=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=E5=A4=B1=E8=B4=A5=E7=8A=B6=E6=80=81=E4=B8=8D=E6=8E=A8?= =?UTF-8?q?=E8=BF=9B=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/PaymentApplicationServiceImpl.java | 49 +++++++++---------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java index 8f81a0f0..4f9672f3 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/service/impl/PaymentApplicationServiceImpl.java @@ -134,6 +134,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; +import java.util.function.Function; import java.util.function.Consumer; import java.util.stream.Collectors; @@ -903,9 +904,9 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl payApplyMap = new HashMap<>(); + // A103-2 查询结果按金蝶单据号(billno,全局唯一)归并缓存,本地 kingdee_bill_no 与之同源匹配 + Map payApplyByBillNo = new HashMap<>(); if (!applications.isEmpty()) { - // ② A103-2 付款申请单查询:指定单据号时按金蝶单据号(billno)精确查询,无金蝶单据号的兜底按来源单号查询; - // 定时全量回写按 paymentNo(awrp_src_code)分批查询,同一来源单号取最近修改的一条 + // ② A103-2 付款申请单查询:统一按金蝶单据号(billno)分批精确查询,同一金蝶单据号取最近修改的一条; + // 来源单号 awrp_src_code 因历史版本逻辑与 Nacos 配置变更含环境后缀(如 xxx-local),不作为回写查询与匹配依据 List billNos = applications.stream() .map(PaymentApplication::getKingdeeBillNo).filter(Func::isNotEmpty).distinct().toList(); - List fallbackSrcCodes = applications.stream() - .filter(application -> Func.isEmpty(application.getKingdeeBillNo())) - .map(PaymentApplication::getPaymentNo).filter(Func::isNotEmpty).distinct().toList(); this.batchForeach(billNos, PAY_RESULT_QUERY_BATCH, - batch -> payApplyMap.putAll(this.latestPayApplyBySrcCode(this.queryPayApplyPagesByBillNo(batch)))); - this.batchForeach(fallbackSrcCodes, PAY_RESULT_QUERY_BATCH, - batch -> payApplyMap.putAll(this.latestPayApplyBySrcCode(this.queryPayApplyPages(batch)))); + batch -> payApplyByBillNo.putAll(this.latestPayApplyByKey(this.queryPayApplyPagesByBillNo(batch), BfiPayApplyVO::getBillno))); // 逐单回写:未查得保持现状等待下一轮,查得即回填(解锁仅由金蝶删单回调触发) for (PaymentApplication application : applications) { - BfiPayApplyVO payApply = payApplyMap.get(application.getPaymentNo()); + BfiPayApplyVO payApply = payApplyByBillNo.get(application.getKingdeeBillNo()); if (payApply == null) { continue; } @@ -967,7 +964,7 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl recordCandidates = new LinkedHashMap<>(); for (PaymentApplication application : applications) { - BfiPayApplyVO payApply = payApplyMap.get(application.getPaymentNo()); + BfiPayApplyVO payApply = payApplyByBillNo.get(application.getKingdeeBillNo()); if (payApply != null && !KingdeeBfiConstant.BFI_PAY_STATUS_UNPAID.equals(payApply.getPaystatus())) { recordCandidates.put(application.getId(), application); } @@ -984,7 +981,7 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl> orgGroups = new LinkedHashMap<>(); for (PaymentApplication application : recordCandidates.values()) { - BfiPayApplyVO payApply = payApplyMap.get(application.getPaymentNo()); + BfiPayApplyVO payApply = payApplyByBillNo.get(application.getKingdeeBillNo()); String orgNumber = payApply == null ? null : payApply.getPayorgNumber(); if (Func.isBlank(orgNumber)) { try { @@ -1174,28 +1171,30 @@ public class PaymentApplicationServiceImpl extends BaseServiceImpl 最近修改的付款申请单 + * @param keyGetter 归并键提取函数 + * @return 归并键 -> 最近修改的付款申请单 */ - private Map latestPayApplyBySrcCode(List payApplies) { - Map latestBySrcCode = new HashMap<>(); + private Map latestPayApplyByKey(List payApplies, Function keyGetter) { + Map latestByKey = new HashMap<>(); for (BfiPayApplyVO payApply : payApplies) { - if (Func.isEmpty(payApply.getAwrpSrcCode())) { + String key = keyGetter.apply(payApply); + if (Func.isEmpty(key)) { continue; } - BfiPayApplyVO existing = latestBySrcCode.get(payApply.getAwrpSrcCode()); + BfiPayApplyVO existing = latestByKey.get(key); if (existing == null || this.strCompare(payApply.getModifytime(), existing.getModifytime()) > 0) { - latestBySrcCode.put(payApply.getAwrpSrcCode(), payApply); + latestByKey.put(key, payApply); } } - return latestBySrcCode; + return latestByKey; } private BfiPayApplyVO queryLatestPayApply(String paymentNo) { - return this.latestPayApplyBySrcCode(this.queryPayApplyPages(List.of(paymentNo))).get(paymentNo); + return this.latestPayApplyByKey(this.queryPayApplyPages(List.of(paymentNo)), BfiPayApplyVO::getAwrpSrcCode).get(paymentNo); } /**