 yml2213andCursor
|
590bf1cae3
|
fix(payment): 渠道已收款时不再把支付单回滚成支付中
租客在待支付超时或取消的最后几十秒完成付款时,订单先被取消,乐刷的支付
结果几秒后才到,入账被判定订单不可支付而拒收。原先订单推进和支付单更新
在同一个事务里,订单一报错整笔回滚,支付单停在支付中且 paid_at 为空:
钱已在渠道,系统却毫不知情。乐刷重试十次后放弃,之后既补不回入账(订单
不再是待支付),后台人工退款也发不出去(退款要求原支付单是已支付)。
日志保留期内 13 天出了 5 笔,合计 4085.60 元。
- 取消前核对渠道:超时取消、租客取消、客服关单都先查一次渠道,已收款并
已推进订单就放弃取消,让支付正常入账而不是走退款。渠道异常时按未收款
继续,避免渠道一抖订单全卡住
- 回调兜底记账:订单确实已结束时不再回滚,把支付单如实记成已支付并写入
paid_at 与渠道单号,后台人工退款从此可用。退款仍由客服人工发起
- 客服关单:待支付订单按实际已收款减已退款的差额退,补上本次事故中关单
不生成退款的直接原因
- 补齐日志上下文:回调入账失败原先只有 error="order cannot pay",现在带
支付单号、订单号、订单状态和金额;新增 ERROR「渠道已收款但订单无法入账,
需人工退款」作为唯一需人工介入的告警
Co-authored-by: Cursor <cursoragent@cursor.com>
|
2026-10-02 09:23:25 +08:00 |
|
yml2213
|
cbd5412315
|
test: 后端测试从 SQLite 全面切换到 MySQL,与生产环境对齐
测试库不再使用 SQLite 内存库,改为每个测试包独立的 MySQL 库,
表结构由 backend/migrations 的真实迁移建立。
基础设施
- 新增 internal/database/testdb.go:NewTestDB() 保持原签名(28 处调用零改动),
内部连接 MySQL 测试库,首次调用重建库并执行全部真实迁移,之后每次调用清空全表
- 库名 = 测试库基础名 + 包目录名,同包共享、跨包隔离,使 go test ./... 可并发执行
(共用一库时各包会互相 DROP/CREATE 导致 database exists)
- 新增 NewDryRunDB():MySQL 方言 + DryRun,供断言 SQL 形态的 5 处测试使用
- 新增 AutoMigrateIfMissing():只对不存在的表 AutoMigrate,
避免改动迁移定义的索引与约束
- 新增 scripts/prepare-test-db.sh:建库与通配授权,可重复执行
- 33 处 sqlite.Open 全部替换,26 个测试文件改用 MySQL
- 删除 46 处手写 SQLite 方言 DDL(AUTOINCREMENT / INTEGER PRIMARY KEY / TEXT),
表统一由真实迁移建立
- go.mod 移除 gorm.io/driver/sqlite 与 mattn/go-sqlite3
- 删除生产代码里 distribution/repository.go 的 sqlite 方言分支(strftime)
对齐环境后暴露并修复的真实问题
- DATE(col) 在 MySQL 返回 DATE 类型,使 Date string 字段变成 RFC3339 时间串,
大盘日期会带出时间部分;28 处改为 DATE_FORMAT(col, '%Y-%m-%d')
- 系统自动创建分销结算批次时 created_by 写入 0,违反指向 admin_users 的外键,
生产会直接插入失败;改为写 NULL(新增 adminRef helper)
- MySQL DATETIME 仅到秒,静默截断 Go 侧写入的时间,
导致租用时长计算与结算时点回读比对偏差;
rental_orders 的 9 个业务时间列提到 DATETIME(6)
- 测试数据补齐严格模式要求的 NOT NULL 列、修正超出列长的取值、补齐外键父记录
迁移
- 000065 的 ALTER TABLE rental_orders 一并完成业务时间列精度调整,
feature 侧不再单开迁移文件
脚本与文档
- check.sh / check-backend-coverage.sh 去掉 -p 1 串行与 SQLite 相关注释
- 更新 docs/Repository层测试补充总结.md 的测试运行说明
|
2026-09-10 14:34:01 +08:00 |
|
yml2213
|
0256bfd276
|
修复取消订单误释放商品
|
2026-08-02 16:38:02 +08:00 |
|
yml2213
|
88d74aca7d
|
重构日志与可观测性体系
新增单行文本编码器与结构化 GORM 日志,统一错误记录与请求日志策略,收紧日志文件权限并修复按天切分与压缩,支付回调参数脱敏,生产强制阿里云短信,RequestID 校验防注入,日志文案中文化。
|
2026-07-29 16:19:35 +08:00 |
|
yml2213
|
4bc25b87d8
|
修复平台代管订单流程
|
2026-07-25 19:17:19 +08:00 |
|
yml2213
|
72285ed638
|
修复超时订单重置流程
|
2026-06-19 18:36:46 +08:00 |
|
yml
|
f4361c9804
|
优化发布群租客清退与历史消息
|
2026-06-18 09:39:23 +08:00 |
|
 yml2213andClaude Opus 4.8
|
8192344027
|
优化号主交接超时卡死问题
- 号主交接超时(owner_timeout)后允许补提交交接说明,避免临时延误导致订单卡死
- 后台新增"重置交接"动作,可将超时订单恢复为待号主交接并刷新计时
- 交接超时改以进入待交接时刻为基准计算,新增 handoff_started_at 字段
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-17 04:16:31 +08:00 |
|
yml
|
a275a006eb
|
修复支付取消与成功统计
|
2026-06-14 23:58:39 +08:00 |
|
yml2213
|
607d2415a1
|
超时任务多实例优化
|
2026-06-14 03:14:43 +08:00 |
|
yml2213
|
8cbd06dca4
|
后台系统配置列表现在只返回当前真实使用的配置项
|
2026-05-27 08:40:03 +08:00 |
|
yml
|
5f6a4afcbb
|
彻底优化数据库字段
|
2026-05-24 20:49:37 +08:00 |
|
yml
|
778e08a261
|
兼容接入订单租期字段
|
2026-05-24 18:24:39 +08:00 |
|
yml
|
03e5d211dc
|
接入订单结账确认流程
|
2026-05-24 16:52:15 +08:00 |
|
yml
|
c4cfe6dd79
|
新增订单待支付与支付确认后端流程
|
2026-05-24 16:29:47 +08:00 |
|
yml2213
|
a6a1afb879
|
删掉租期相关错误东西
|
2026-05-23 14:44:32 +08:00 |
|
yml
|
6f915b37d3
|
订单超时任务系统
|
2026-05-22 18:16:05 +08:00 |
|