From 5b9a55d1b7cc88680baea7be1068ba3c89990061 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=B3=89=E4=BD=B3?= <1107186916@qq.com> Date: Thu, 22 Oct 2026 14:02:20 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BB=98=E6=AC=BE=E7=89=B9=E6=89=B9?= =?UTF-8?q?=E6=9C=AA=E5=AE=8C=E6=88=90=E6=97=B6=E8=B7=B3=E8=BF=87=E9=87=91?= =?UTF-8?q?=E8=9D=B6=E5=90=8C=E6=AD=A5=EF=BC=8C=E7=89=B9=E6=89=B9=E9=80=9A?= =?UTF-8?q?=E8=BF=87=E5=90=8E=E8=87=AA=E5=8A=A8=E8=A1=A5=E6=8E=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/KingdeeApprovalSyncListener.java | 11 +++++++++++ .../support/hcs/HcsPaymentSyncSupport.java | 16 ++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/listener/KingdeeApprovalSyncListener.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/listener/KingdeeApprovalSyncListener.java index 185a0c56..50a9ebd0 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/listener/KingdeeApprovalSyncListener.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/listener/KingdeeApprovalSyncListener.java @@ -22,7 +22,9 @@ package org.springblade.transport.listener; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.transport.config.BfiProperties; +import org.springblade.transport.constant.HcsSyncConstant; import org.springblade.transport.event.KingdeeBillApprovedEvent; +import org.springblade.transport.pojo.entity.PaymentApplication; import org.springblade.transport.service.IFormalSettlementService; import org.springblade.transport.service.IInvoiceApplicationService; import org.springblade.transport.service.IInvoiceReceiptService; @@ -115,6 +117,15 @@ public class KingdeeApprovalSyncListener { if (!bfiProperties.getAutoSync().isPayment()) { return; } + // 付款特批未完成(高风险/黑名单/额度超额)时金蝶必然拒推:跳过而非置失败, + // 特批通过后由 HcsPaymentSyncSupport 重新发布本事件自动补推 + PaymentApplication payment = paymentApplicationService.getById(id); + if (payment != null && payment.getHcsSpecStatus() != null + && List.of(HcsSyncConstant.SPEC_STATUS_NEED, HcsSyncConstant.SPEC_STATUS_PUSHING, + HcsSyncConstant.SPEC_STATUS_PROCESSING).contains(payment.getHcsSpecStatus())) { + log.info("付款申请[{}]审批通过自动同步金蝶跳过(付款特批未完成):hcsSpecStatus={}", id, payment.getHcsSpecStatus()); + return; + } log.info("付款申请[{}]审批通过自动同步金蝶开始", id); String kingdeeBillId = paymentApplicationService.syncKingdee(id); log.info("付款申请[{}]审批通过自动同步金蝶完成:kingdeeBillId={}", id, kingdeeBillId); diff --git a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsPaymentSyncSupport.java b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsPaymentSyncSupport.java index ccab31e5..bc1008f0 100644 --- a/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsPaymentSyncSupport.java +++ b/blade-service/blade-transport/src/main/java/org/springblade/transport/support/hcs/HcsPaymentSyncSupport.java @@ -34,8 +34,10 @@ import org.springblade.hcs.config.HcsProperties; import org.springblade.hcs.dto.HcsLegalResultDTO; import org.springblade.transport.constant.HcsSyncConstant; import org.springblade.transport.constant.TransportBusiConstant; +import org.springblade.transport.event.KingdeeBillApprovedEvent; import org.springblade.transport.mapper.PaymentApplicationMapper; import org.springblade.transport.pojo.entity.PaymentApplication; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Component; import java.time.LocalDateTime; @@ -66,6 +68,7 @@ public class HcsPaymentSyncSupport { private final HcsProperties hcsProperties; private final HcsSpecPaySyncSupport hcsSpecPaySyncSupport; private final HcsPerfRecordSyncSupport hcsPerfRecordSyncSupport; + private final ApplicationEventPublisher eventPublisher; /** * 推送付款申请到 HCS:特批(如需)→ 履约记录(新建/更新)→ 回填整体同步状态 @@ -140,6 +143,7 @@ public class HcsPaymentSyncSupport { syncPaymentOnSpecResult(payment, HcsSyncConstant.SPEC_STATUS_APPROVED.equals(result)); payment.setHcsSpecStatus(result); paymentApplicationMapper.updateById(payment); + publishKingdeeAutoSyncOnSpecApproved(payment, result); log.info("HCS特批结果人工确认:paymentNo={},specFdId={},结果={}", payment.getPaymentNo(), payment.getHcsSpecFdId(), result); return "特批结果已确认:" + result; } @@ -179,10 +183,22 @@ public class HcsPaymentSyncSupport { syncPaymentOnSpecResult(payment, HcsSyncConstant.SPEC_STATUS_APPROVED.equals(status)); payment.setHcsSpecStatus(status); paymentApplicationMapper.updateById(payment); + publishKingdeeAutoSyncOnSpecApproved(payment, status); log.info("付款特批结果推送处理完成:paymentNo={},结果={},reason={}", payment.getPaymentNo(), status, param.getReason()); return "特批结果已处理:" + status; } + /** + * 特批通过后自动补推金蝶:审批通过时因特批挂起已跳过同步(见 KingdeeApprovalSyncListener), + * 此处重新发布审批通过事件复用同一条自动推送链(开关、失败落库与重推兜底口径不变) + */ + private void publishKingdeeAutoSyncOnSpecApproved(PaymentApplication payment, String specStatus) { + if (!HcsSyncConstant.SPEC_STATUS_APPROVED.equals(specStatus)) { + return; + } + eventPublisher.publishEvent(new KingdeeBillApprovedEvent(KingdeeBillApprovedEvent.BIZ_PAYMENT_APPLICATION, payment.getId())); + } + /** * 特批结果联动付款审批状态(handleLegalResult 与 confirmSpecResult 共用,仅改字段,随 updateById 落库): * approved 恢复"审批通过"展示并放行(审批状态保持 approved,金蝶推送门禁解除);