yeg
2026-09-16 5c33cf1f2622d4470b861cb041024ead1775c828
refs
用户 yeg <1347747024@qq.com>
星期三, 九月 16, 2026 18:05 +0800
提交者 yeg <1347747024@qq.com>
星期三, 九月 16, 2026 18:05 +0800
提交5c33cf1f2622d4470b861cb041024ead1775c828
目录 5efd868f1e454e13877911673420fad59fb9fcd1 目录 | zip | gz
parent e0ef10f1bff50f772356c3ba62f5cb311a415dd7 查看 | 对比
feat(payment): 撤销核销把已确认的资金退回延迟户

核销成功时钱已经从延迟户划给商户(进基本户),撤销核销此前只翻库、不碰钱:订单回到「待核销」,
钱却留在商户手里,等 D1 自动结算到银行卡之后就再也追不回来。现在撤销核销走通道的【交易确认退款】
把已确认的金额退回延迟户,这笔钱才重新变成不可结算、不可取现。

- 只有回退成功(或钱本来就在延迟户)才允许翻单,其余情况一律停在「已核销」,并按原因给商户话:
已结算到银行卡 / 正在退回中 / 暂时无法发起 / 请人工核对
- 回退结果用一套独立分类,不复用交易确认的 classify:23000003 在确认路径上是幂等成功(有真实回执
复验过),在回退路径上含义未定,既不能算成功也不能算失败,停在 reverting 交人工
- 认领与落结果各走独立事务:通道调用不是事务性的,这些写入跟着外层事务回滚会把通道的真实结果丢掉
- 迁移 V147 记录回退的请求号/日期/返回码/金额/时间;上一轮确认的回执保留下来作为证据

同时修掉审计发现的三个同类隐患:

- 放款前在订单行锁内复查「订单仍处于已核销」:否则撤销核销之后,补偿任务或在途的确认请求会把钱
再打给商户,而订单已经回到待核销
- 退款不再把语义未定的业务码判成失败:判失败会解锁订单让用户再退一次,而通道那边第一次其实已经
出款时,第二次就是重复出款
- 确认被认领后进程中断(部署、崩溃)会留下 confirming 孤儿:补偿任务只挑得到它、从不重发,那笔钱
永远冻在延迟户;隔天收掉这种孤儿重新确认一次(重发是幂等的)

回退结果未知时没有自动收敛通道(【交易确认退款查询】的合同还没有真实回执验证过),停在 reverting
交人工——这是有意的保守选择:把失败当成功会让订单翻回待核销而钱还在商户基本户。
3个文件已添加
8个文件已修改
973 ■■■■■ 已修改文件
CONTEXT.md 4 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/merchant/MerchantWorkService.java 12 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/HuifuRefundService.java 6 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/PaymentFundConfirmationService.java 289 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/huifu/HuifuDelayAccountGateway.java 82 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/java/com/talentcard/server/business/payment/huifu/HuifuPayload.java 16 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/main/resources/db/migration/V147__payment_fund_revert.sql 70 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/java/com/talentcard/server/business/payment/PaymentFundConfirmationTests.java 241 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/java/com/talentcard/server/business/payment/PendingRefundConfirmationTests.java 22 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/java/com/talentcard/server/business/payment/RevokeVerificationFundTests.java 160 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史
talent-card-server/src/test/java/com/talentcard/server/business/payment/huifu/HuifuDelayRevertClassificationTests.java 71 ●●●●● 对比 | 查看 | 原始文档 | blame | 历史