feat(merchant): 后台纳管外部进件商户并支持解绑
平台运营可在「财务管理 → 结算记录 → 商户进件」页签点「纳管外部进件商户」,选定我方商家 + 填汇付
商户号与入驻申请单号,先只读核验通道,再建立结算卡与进件记录并跑一次进度刷新,使外部进件商户与
自助进件商户走完全相同的收款就绪口径。进件详情页新增「解绑」(危险操作,二次确认)。
- 迁移 V157 只加一列 source(self/managed)标出来源;初始化器同步补列,供 Flyway 关闭的开发库使用。
- 纳管全程只查询、不下发:managed 记录在刷新链路里跳过延迟入账、微信业务开通与小程序配置的推进,
refreshProgress 也不走开通步骤。缘由与边界见 docs/adr/0006。
- 防绑错靠人工核对:核验接口返回通道的商户注册名称/简称/主体类型与结算卡,运营显式勾选确认后
才受理;名称不做字符串判定,只在完全没有重合字符时警示(不硬拒)。
- 结算卡与绑卡序列号从通道的商户详细信息查询取回,沿用既有的字段级加密与卡号哈希;进件记录的非空
字段由通道反填、拿不到的从商家记录取。纳管不创建商户端登录账号,缺账号/未开登录时给出提示。
- 重复纳管幂等(application_no 与 idempotency_key 由商户号 + 门店派生);同一门店已有进行中或
已通过的进件时拒绝;已被通道驳回的记录再次纳管会明确提示先解绑。同一汇付商户号可被多个商家分别
纳管(连锁各门店共用一个收款主体),只提示不拦截。
- 解绑清理进件、进度与结算卡记录(商户端收款权限由进件记录派生,随之失效),不动登录账号与门店;
该商家名下还有在途订单或待结算资金时拒绝,不切断正在进行的对账。
- 接口级测试 21 项(真实测试库 + 模拟汇付响应):纳管成功并过下单闸门、通道查不到、未勾选确认、
缺申请单号、名称完全不符、多商家共用同一商户号、幂等、门店冲突、只查询不下发、无我方申请单号仍
能收敛、解绑清理、在途资金与在途订单拦截、终态订单不拦、自助进件不可解绑、解绑后可重新纳管。
另外:测试 profile 把 hikari.minimum-idle 钉成 1。一次全量会缓存十几个 Spring 上下文、各自默认建满
10 条连接,正好吃光测试库的 max_connections=151,使靠后加载的用例整类报「Too many connections」
失败。与代码无关,缘由已记在 docs/agents/testing.md。