Zuncle
535106f158
fix(coupon): 修复订单超时取消时金额券未退还的bug
问题:
commit b9a40df 修复了 CancelOrder()(用户/管理员主动取消)的券退回逻辑,
去掉了 `AND status = 4` 条件,但遗漏了 order_timeout.go 中超时取消的
同一逻辑,导致次数卡包(game_pass_package)订单超时取消时金额券余额丢失。
根因:
game_pass_package 下单时,金额券(type=1)通过 applyCouponToGamePassOrder()
直接扣减 balance_amount 并保持 status=1(有余额)或 status=2(用完),
不会设置 status=4(预扣中)。而 cancelExpiredOrder() 的 UPDATE 语句带有
`WHERE id = ? AND status = 4` 条件,导致匹配不到行,退券静默失败。
生产已确认影响:用户9110的券1690(订单28229)和券1532(订单26743)
因此bug各丢失10元余额。
修复:
- 去掉 `AND status = 4` 条件,改为 `WHERE id = ?`,兼容所有券状态
- 新增幂等校验:先查 timeout_refund 流水是否已存在,防止重复退还
- 新增兜底逻辑:order_coupons 无记录时,从 user_coupon_ledger 流水
回推预扣金额,与 CancelOrder() 的修复方案完全对齐
2026-03-20 20:32:30 +08:00
..
2026-03-19 16:26:36 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-03-17 18:11:00 +08:00
2026-03-18 21:58:25 +08:00
2026-02-21 21:33:19 +08:00
2026-03-18 21:58:25 +08:00
2026-02-27 17:51:38 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-03-19 16:26:36 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-02-27 17:51:38 +08:00
2026-02-27 17:51:38 +08:00
2026-02-21 21:33:19 +08:00
2026-03-20 20:32:30 +08:00
2026-03-17 21:15:33 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-02-27 17:51:38 +08:00
2026-02-27 00:08:02 +08:00
2026-02-21 22:16:20 +08:00
2026-03-17 18:11:00 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00
2026-02-21 21:33:19 +08:00