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-05 12:50:06 +08:00
2026-02-27 17:51:38 +08:00
2026-03-20 00:57:17 +08:00
2026-03-05 12:50:06 +08:00
2026-02-27 00:08:02 +08:00
2026-03-17 16:00:23 +08:00
2026-03-05 12:50:06 +08:00
2026-02-18 23:23:34 +08:00
2026-02-27 16:07:12 +08:00
2026-02-27 16:07:12 +08:00

mini-chat

接口文档

服务地址

打包命令

MAC

CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build -ldflags "-s -w" -tags timetzdata -trimpath -o build/bindbox.exe .

export DOCKER_DEFAULT_PLATFORM=linux/amd64 docker build -t zfc931912343/bindbox-game:v1.10 . docker push zfc931912343/bindbox-game:v1.10

docker pull zfc931912343/bindbox-game:v1.10 &&docker rm -f bindbox-game && docker run -d --name bindbox-game -p 9991:9991 zfc931912343/bindbox-game:v1.10

Description
No description provided
Readme 563 MiB
Languages
Go 97.8%
HTML 1.1%
JavaScript 0.6%
Makefile 0.2%
Shell 0.2%