From 3f571449d39fde5361166719e7e4716218c2619b 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, 29 Oct 2026 10:57:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BB=98=E6=AC=BE=E7=89=B9=E6=89=B9?= =?UTF-8?q?=E9=80=9A=E8=BF=87=E5=90=8E=E4=B8=8D=E5=86=8D=E6=8E=A8=E9=80=81?= =?UTF-8?q?=E5=B1=A5=E7=BA=A6=E8=AE=A1=E5=88=92=E4=B8=8E=E5=B1=A5=E7=BA=A6?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=EF=BC=8C=E7=BB=9F=E4=B8=80=E7=94=B1=E5=90=84?= =?UTF-8?q?=E4=B8=9A=E5=8A=A1=E7=8E=AF=E8=8A=82=E6=8E=A8=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../support/hcs/HcsPaymentSyncSupport.java | 49 ++++++------------- 1 file changed, 14 insertions(+), 35 deletions(-) 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 2cfb4a75..0b486e78 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 @@ -50,7 +50,8 @@ import java.util.List; /** * HCS 付款链推送编排支撑组件(结算付款特批 C106-3/4 + 履约计划重推 C103-9 + 履约记录 C108-1/2 + 特批结果推送接收,设计文档 §5.0/§5.3/§5.5/§5.6) *

- * 编排顺序:特批(提交时高风险/黑名单须特批附件或额度超额标记 need 时发起)→ 特批通过后再推履约计划(付款审批款项金额累加行)→ 履约记录(审批通过新建 / 实际付款推进更新)。 + * 编排顺序:特批(提交时高风险/黑名单须特批附件或额度超额标记 need 时发起)→ 履约计划重推(付款审批款项金额累加行)→ 履约记录(金蝶实际付款后新建/分期推进更新)。 + * 特批通过后不推履约数据:履约计划与履约记录统一在各业务环节推送(付款=金蝶实际付款后,收款/开票/收票各自环节)。 * 特批审核期间(need/pushing/processing)仅发起/等待 C106,不推送履约计划与履约记录;驳回不产生履约数据。 * 特批流程ID 与履约记录ID 在各自 Support 内即时持久化;整体同步状态(hcs_sync_status)由本组件统一回写。 * 特批发起后 TMS 挂起 currentNode="特批审核",合规 paymentLegal/result 回调联动付款审批状态 @@ -77,7 +78,7 @@ public class HcsPaymentSyncSupport { private final ApplicationEventPublisher eventPublisher; /** - * 推送付款申请到 HCS:特批(need 时发起 C106-3 后挂起)→ 特批通过后履约计划重推(C103-9 款项金额累加行)→ 履约记录(新建/更新)→ 回填整体同步状态 + * 推送付款申请到 HCS:特批(need 时发起 C106-3 后挂起)→ 履约计划重推(C103-9 款项金额累加行)→ 履约记录(金蝶实际付款后新建/更新)→ 回填整体同步状态 * * @param payment 付款申请单(approvalStatus=approved) * @return 推送结果描述 @@ -85,7 +86,7 @@ public class HcsPaymentSyncSupport { public String pushPayment(PaymentApplication payment) { StringBuilder result = new StringBuilder(); // ① 结算付款特批:提交时高风险/黑名单(须特批附件)或额度超额(hcs_spec_status=need)且未发起时发起 C106-3; - // 发起后挂起等待特批结果,履约计划与履约记录由特批通过后的 pushAfterSpecApproved 补推(驳回不产生履约数据) + // 发起后挂起等待特批结果,特批通过后不推履约数据(各业务环节推送),仅补推金蝶(驳回不产生履约数据) if (HcsSyncConstant.SPEC_STATUS_NEED.equals(payment.getHcsSpecStatus())) { String specResult = hcsSpecPaySyncSupport.pushSpecPay(payment); // C106-4 更新路径不改状态,统一归一为特批审核中,避免下轮扫描重复发起 @@ -99,18 +100,20 @@ public class HcsPaymentSyncSupport { // 特批审核中:仅等待合规回调/人工确认,不推送履约计划与履约记录 if (HcsSyncConstant.SPEC_STATUS_PUSHING.equals(payment.getHcsSpecStatus()) || HcsSyncConstant.SPEC_STATUS_PROCESSING.equals(payment.getHcsSpecStatus())) { - String message = "付款特批审核中,待特批通过后推送履约数据"; + String message = "付款特批审核中,履约数据待各业务环节推送"; markSynced(payment, message); return message; } // ② 履约计划重推(C103-9 行级更新):付款审批通过累加款项金额置 row_op=update 的计划行, // 凭已存合规阶段ID 重推;独立于履约记录开关,推送失败抛出由付款链置 failed 重试兜底 - String stageResult = this.pushExeStageUpdate(payment); - if (StringUtil.isNotBlank(stageResult)) { - if (result.length() > 0) { - result.append(";"); + if (hcsProperties.getExeStage().isSyncEnabled()) { + String stageResult = this.pushExeStageUpdate(payment); + if (StringUtil.isNotBlank(stageResult)) { + if (result.length() > 0) { + result.append(";"); + } + result.append(stageResult); } - result.append(stageResult); } // ③ 履约记录:金蝶实际付款后推送(需求口径:金蝶实际付款了再推给合同系统)—— // 首次回写实际付款走 C108-1 新建,分期付款推进(paidAmount 变化置待同步)走 C108-2 更新; @@ -154,24 +157,6 @@ public class HcsPaymentSyncSupport { return "履约规则无待同步行".equals(stageResult) ? "" : stageResult; } - /** - * 特批通过后补推履约数据(C103-9 计划重推 + C108 履约记录):补推失败置 failed 留待人工重推兜底, - * 不阻断特批结果落库与金蝶补推 - * - * @param payment 付款申请单(hcs_spec_status=approved) - */ - private void pushAfterSpecApproved(PaymentApplication payment) { - try { - this.pushPayment(payment); - } catch (Exception exception) { - String message = StringUtil.isBlank(exception.getMessage()) ? "履约数据推送异常" : exception.getMessage(); - markFailed(payment, message); - log.error("付款特批通过后履约数据推送失败:paymentNo={},{}", payment.getPaymentNo(), message, exception); - // todo - throw new ServiceException("付款特批通过后履约数据推送失败:" + message); - } - } - /** * 单条手动重推:重置为待同步并清零重试计数后立即推送(页面"推送合规/重推"按钮入口) * @@ -220,10 +205,7 @@ public class HcsPaymentSyncSupport { syncPaymentOnSpecResult(payment, HcsSyncConstant.SPEC_STATUS_APPROVED.equals(result)); payment.setHcsSpecStatus(result); paymentApplicationMapper.updateById(payment); - // 特批通过后补推履约计划与履约记录(驳回不产生履约数据),失败不阻断后续金蝶补推 - if (HcsSyncConstant.SPEC_STATUS_APPROVED.equals(result)) { - this.pushAfterSpecApproved(payment); - } + // 特批通过后不推履约数据:履约计划与履约记录统一在各业务环节(付款=金蝶实际付款后)推送 publishKingdeeAutoSyncOnSpecApproved(payment, result); log.info("HCS特批结果人工确认:paymentNo={},specFdId={},结果={}", payment.getPaymentNo(), payment.getHcsSpecFdId(), result); return "特批结果已确认:" + result; @@ -269,10 +251,7 @@ public class HcsPaymentSyncSupport { payment.setHcsSpecAttachFdId(param.getFileUrl().trim()); } paymentApplicationMapper.updateById(payment); - // 特批通过后补推履约计划与履约记录(驳回不产生履约数据),失败不阻断后续金蝶补推 - if (HcsSyncConstant.SPEC_STATUS_APPROVED.equals(status)) { - this.pushAfterSpecApproved(payment); - } + // 特批通过后不推履约数据:履约计划与履约记录统一在各业务环节(付款=金蝶实际付款后)推送 publishKingdeeAutoSyncOnSpecApproved(payment, status); log.info("付款特批结果推送处理完成:paymentNo={},结果={},reason={}", payment.getPaymentNo(), status, param.getReason()); return "特批结果已处理:" + status;