用订单号加中文前缀拼 custom_id,例如 订单_20261112_001,提交后整批校验失败,原文是 custom_id must match ^[a-zA-Z0-9_-]{1,64}$,改成纯数字加下划线后正常。
一开始怀疑是「中文经过编码后长度翻倍 容易超限」,查了一圈,方向不对。
真正麻烦的地方在于,几个原因的现象几乎一样。custom_id 只允许字母数字下划线短横线。还有一种是长度上限是 64 字符。
还有一种情况,同一批次内 id 重复会被拒绝。
先按规则扫一遍现有 id
python check_ids.py --pattern '^[a-zA-Z0-9_-]{1,64}$' --in batch.jsonl
随后用映射表把中文前缀换成短码
python map_ids.py --map prefix.csv --in batch.jsonl --out batch_fix.jsonl
校验长度与唯一性
python check_ids.py --in batch_fix.jsonl --max 64 --unique
末了重新提交并抽样回查
python submit_batches.py --file batch_fix.jsonl --out id.json
同一份数据我导出了两份,一份留底,一份拿来试。
这类问题以前遇到过,但这次的触发条件和上次不一样。
恢复的判定其实很直接。批次通过校验进入 processing,结果里的 custom_id 能通过映射表还原成订单号。
容易忽略的是,映射表要单独存一份,结果文件只带短码,事后对账没它就还原不出业务主键。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
