fix(merchant): 收紧自动提现汇总的结算配置与门店范围
代码复查发现的四个问题:
- 结算卡和 token 可能来自两张不同的卡:首绑卡审核通过但没有 token 时,
bank_card_id 指向那张没有 token 的卡,提交时直接冲突,而订单已经锁定。
改成先判断首绑卡有没有 token,没有就整张换成该门店最新一张带 token 的
审核通过卡,卡 id 和 token 一定同源。
- 汇总条件没有要求和提交路径一致的结算配置:进件没有 provider_huifu_id 时
生成的记录提交不出去,订单反而被永久锁死。现在要求进件通过、子商户号非空,
缺配置就顺延到下一次任务。
- 窗口原本没有下界,首次上线会把全部历史订单一次性汇总进来。加上 30 天回看
下界(MAX_LOOKBACK_DAYS),窗口内的跳过订单仍然跨天顺延。
- 日汇总粒度与提现记录本来的门店归属不一致,多门店商户会用单个门店的 store_id
汇总全部门店的订单。改成按「商户 + 门店」汇总,唯一约束收紧为
(merchant_id, store_key, withdrawal_date),store_key 是 ifnull(store_id, 0)
生成列,避免 store_id 为 NULL 时唯一约束失效。
另外:候选查询之后状态变化的订单只跳过它自己而不是整笔失败;结果计数移到事务
提交之后;失败日志带上异常信息;AUTO_WITHDRAWAL_ENABLED 默认改为 false,手动
提现入口还在,同时开启会让同一批订单进两条记录。
测试补齐:五笔反例订单各自带有效核销记录,让每个过滤条件本身被测到;新增 30 天
回看下界、没有子商户号的进件、门店隔离三项;数据库唯一约束断言改为
DuplicateKeyException 并验证同一天另一门店不受影响。迁移 V134 新增生成列并把
唯一索引换成新定义(V133 已在共享测试库执行,按只追加规则未修改)。全量 155 项
测试仅剩 docs/agents/testing.md 记录的 3 项基线失败。