From ab9b1f30b848d1f763fd0012e7ec9e1900f7d019 Mon Sep 17 00:00:00 2001 From: yeg <1347747024@qq.com> Date: 星期四, 17 九月 2026 15:48:18 +0800 Subject: [PATCH] feat(payment): 补齐查询对等物、收口定时开关并接线后台按钮 --- docs/agents/testing.md | 21 +++++++++++++-------- 1 files changed, 13 insertions(+), 8 deletions(-) diff --git a/docs/agents/testing.md b/docs/agents/testing.md index f1a264c..5a8bd0f 100644 --- a/docs/agents/testing.md +++ b/docs/agents/testing.md @@ -75,6 +75,12 @@ - 只补缺失的 DDL(`create table if not exists`、`add column`),**不要**删表重建。手工补 DDL 正是 2026-09-17「点开收款能力就 500 / `Unknown column 'capability_sync_until'`」的解药。 +- **有一条命令可用了**:`.\scripts\apply-sql-file.ps1 -File <某个 .sql> -Yes` 用项目已有的 JDBC 驱动 + 逐条执行 SQL(默认连开发库,可 `-Database/-DatabaseHost/-Port` 覆盖;不带 `-Yes` 只打印不执行)。 + 它认得 `DELIMITER`,所以 `db/migration/V*.sql` 也能原样重放。默认指向**开发库**,别拿它去改测试库 + (测试库由 Flyway 从 `db/migration` 重建,手工 DDL 会让迁移与 history 表对不上)。 + 开发者首次拿到新列:2026-09-17 的 `V149`(支付流水两列)与 `V150`(手输核销码计数表)就是这样落地的, + 对应脚本 `scripts/dev-schema-v149-payment-attempt.sql`(写法可重复执行的那份在迁移里,两者等价)。 - 动结构之前先备份。本机**没有** mysql 客户端、也没有 Docker(README 里指向 `D:\MySQL\...` 和 `docker exec talent-card-mysql-1` 的两条老做法都已失效),要备份就在 DB 主机上做,或照 `scripts/reset-test-db.ps1` 的办法用项目已有的 JDBC 驱动写个单文件程序。 @@ -100,17 +106,16 @@ 新会话不要为了证明它们"是既有的"而重建 worktree:直接看这张表。修好其中任何一项时,请删掉对应行。 -## 环境相关失败(不是基线,别当既有失败放过) +## 环境相关失败:已修(2026-09-17) `PaymentFundConfirmationTests.aPendingConfirmationOfAVerifiedOrderIsRetriedWithoutAnotherVerification` -在测试库累计的「已核销 + 待确认」订单超过 50 条时会**必然**失败:补偿任务扫全库、`order by o.id asc -limit 50`(`PaymentFundConfirmationRetry.retry`),而用例新建的那单 id 最大、排在窗口之外,于是状态停在 -`pending`。这是测试库长期不清理累积出来的,不是代码回归——2026-09-17 实测符合条件的行为 60 条,最早一条 -09-14 就留下了,而且被处理过的行多数停在 `confirming`(仍在扫描条件内),所以不会自己排空。 +原先会随测试库累积而**必然**失败:补偿任务扫全库、`order by o.id asc limit 50`,用例新建的那单 id 最大、 +排在窗口之外。 -现象、证据与建议改法见 -[.scratch/payment-fund-confirmation-retry/issues/01](../../.scratch/payment-fund-confirmation-retry/issues/01-retry-limit-blocked-by-accumulated-leftovers.md) -(属支付链路范围,本轮只排查未修)。要么让用例自己把窗口腾出来,要么清理测试库遗留(后者只能缓解)。 +2026-09-17 已按本文件的建议修好——该用例先把**自己之外**的相关行移出扫描条件,于是它从「环境相关失败」 +变成稳定通过;同一天还把同一处扫描改为「每单只看最新一笔成功支付」,并把它扩展到 `reverting`(撤销核销 +的回退在途)状态。以后新写这类「后台任务只处理了我这条」的用例,照它的做法先腾窗口,不要再依赖测试库的 +累积状况。 ## 测试库的状态是共享的 -- Gitblit v1.7.1