feat(merchant): 新增商户端收款能力自查与手动核实接口
商户端此前没有任何接口暴露通道商户状态与最近核实时间,商户只能靠「下单被拒」感知。
- GET /api/merchant/payment-readiness:只读,不查通道;reason 直接复用下单闸门抛出的那句话,
保证页面与「下单被拒」逐字一致;只返回派生结果(ready/reason/verifiedAt/verifyAvailable/
nextVerifyAt),不下发 merchant_stat 等通道原始值。
- POST /api/merchant/payment-readiness/verify:手动查一次通道,受冷却保护。冷却用一个 UPDATE
兼做判定与占位,抢到窗口的那次才查询,成功与失败都推进冷却——capability_verified_at 失败不推进
(会被连点),updated_at 是 MySQL 的 on-update 列(会被无关 UPDATE 重置),都不能当节流依据。
- 新增列 capability_sync_until(V148,并同步进 MerchantOnboardingSchemaInitializer:
开发库 Flyway 关着,只写迁移会让本地的列永远不存在)。
- merchantVerify 刻意不加 @Transactional:冷却窗口要在通道查询之前落库,且查询不能夹在持有
该行锁的事务里。
- 两个端点放在 MerchantSettlementService 复用既有 store(principal) 门店校验,控制器不加新依赖。