修复(#16): 修复订单退款状态与后台恢复冲突 (#16)

Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
2026-06-09 11:31:31 -07:00
committed by GitHub
parent 21811f4d63
commit e74958e17f
9 changed files with 302 additions and 63 deletions
+64
View File
@@ -0,0 +1,64 @@
## 关联 Issue
Closes HIF-16
## 改动摘要
拆分订单退款终态与队列 claim 临时态:退款成功后写入 `status=7``status=6` 仅保留为 worker claimed 状态,避免后台恢复任务把退款订单重新入队。
## 改动细节
- `internal/logic/admin/order/refundOrderLogic.go`:退款状态改为 `7`,重复退款优先检查 `type=24` 退款审计日志,再兼容旧的 `333` 佣金退款日志。
- `queue/logic/order/activateOrderLogic.go``queue/logic/order/stuckOrderRecoveryLogic.go`release/recovery 只按真实 `claimed(6)` 回退,不再依赖 `333` 日志猜测状态语义。
- `internal/logic/admin/order/getOrderListLogic.go`:管理端状态展示改为 `6=claimed``7=refunded`
- `internal/model/log/refund.go`:新增 `HasOrderRefundLog`,用于基于退款审计日志做幂等判断。
- `internal/logic/admin/order/refundOrderLogic_test.go``internal/model/log/refund_test.go``queue/logic/order/order_status_recovery_test.go`:补充退款写 `7`、重复退款、退款日志判断、claim release/recovery 行为测试。
## 测试计划
- [ ] `go build ./...` 通过
- [x] `go vet ./...` 通过
- [ ] `go test -race ./... -count=1` 通过
- [ ] golangci-lint 通过
- [x] 新增/修改的逻辑有对应单测覆盖
- [x] (如涉及 DB 变更)无 DB migration
- [ ] (如涉及 APIcurl / Postman 验证命令贴在下面
```
go test ./internal/logic/admin/order ./internal/model/log ./queue/logic/order
ok github.com/perfect-panel/server/internal/logic/admin/order
ok github.com/perfect-panel/server/internal/model/log
ok github.com/perfect-panel/server/queue/logic/order
go test ./...
PASS
go test -v ./...
PASS
go vet ./...
PASS
golangci-lint run --new-from-rev=origin/internal
PASS
```
说明:本地 `lefthook run pre-commit` 无法执行,因为环境缺少 `lefthook` 命令;已手动执行 hook 配置中的等价检查。全量 `golangci-lint run` 仍会失败在 internal 上已有历史 lint 问题,本分支使用 `--new-from-rev=origin/internal` 验证未新增 lint 问题。
未做 curl 验证:本地没有可用服务配置与测试数据库,且该改动主要通过事务单测覆盖退款状态与队列恢复行为。
## 风险 / 回滚
- 风险:线上若已经存在 `status=6` 表示已退款的历史订单,本改动不会自动迁移,后续查询会显示为 `claimed`。建议上线前评估历史数据,可按退款审计日志或旧 `333` 佣金退款日志筛出并迁移到 `status=7`
- 回滚:回滚本 PR 后恢复旧的 `status=6` 退款语义和 `333` 日志守卫;不涉及 schema 变更。
## Reviewer 自检清单
- [x] PR 标题符合 commitlint 规范(`修复/新功能/重构/文档/配置(#<num>): ...`
- [x] 分支命名 `fix/<num>-…` / `feat/<num>-…` / `chore/…`
- [x] 目标分支 = `internal`
- [x] 改动 scope 与 Issue 描述一致,无 scope creep
- [x] **无无关代码改动**(架构师红线)
- [x] 无密钥/凭证泄露
- [ ] CI 全绿
- [ ] 测试工程师已验收(如涉及业务逻辑)