yeg
2026-09-17 e71919933b57c4284e19cad12b4791ef52a58c8a
refs
用户 yeg <1347747024@qq.com>
星期四, 九月 17, 2026 15:48 +0800
提交者 yeg <1347747024@qq.com>
星期四, 九月 17, 2026 15:48 +0800
提交e71919933b57c4284e19cad12b4791ef52a58c8a
目录 a163a2f6ef141ac39e07d3ed7ed4fad5c160a716 目录 | zip | gz
parent e3f412c5474311a471345ea508db4875c9ec648e 查看 | 对比
feat(payment): 悬账自动退款与部分退款

通道确认收到、但订单已经取消的钱(悬账)原先只在账目上留一条问题记录等人工,没有任何自动出口;
而首笔部分退款之后剩余金额永远退不了。两件都是 2026-09-10 审计列出的未落地项(§8 后半段、§14)。

- 新增窄口子退款入口 refundStranded(orderNo):断言订单已取消、通道确认收过钱、未退款、无退款记录,
仍经 OrderFundBoundaryService 锁订单行(与撤销核销、交易确认、普通退款串行化)。
- 放宽支付键可见性:从「仅已成功流水」到「已成功,或已关闭且通道已确认成功」——旧实现下这类悬账
连支付键都看不到,退款无从发起。
- 新增定时消费者 StrandedPaymentRefundRetry:扫「订单已取消但通道确认收款」的问题记录 → 调窄口子
退款 → 受理成功标为已解决;通道拒绝则升级告警(另记 STRANDED_REFUND_REJECTED 并 log.error),
问题记录保持未结,绝不静默吞掉。
- 部分退款改为按「已成功金额 + 处理中金额 < 实付」控制,退款能否发起由订单行锁 + 金额额度判定,
不再因「存在退款中或已退款」而拒绝。

回归:StrandedPaymentRefundTests(悬账退发起并结掉问题、通道拒绝走告警、已关闭但通道确认成功的支付
仍能被定位、窄口子拒绝非悬账与在途退款、100 退 40 再退 60 且超额被拒、人才端列表 refundStatus=2)。
2个文件已添加
3个文件已修改
565 ■■■■■ 已修改文件
talent-card-server/src/main/java/com/talentcard/server/business/order/OrderFundBoundaryService.java 39 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/HuifuRefundService.java 96 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/StrandedPaymentRefundRetry.java 107 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/java/com/talentcard/server/business/payment/StrandedPaymentRefundTests.java 319 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/resources/application-test.yml 4 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史