feat: 按允许店铺筛选顺运宝同步 (#196)

This commit is contained in:
chengma
2026-08-12 18:48:31 +08:00
parent 4089033453
commit 8a8fff8480
17 changed files with 720 additions and 30 deletions
+18
View File
@@ -113,6 +113,9 @@ SQLite 同一时刻只允许一个写事务,连接放太开会互相抢锁、
v13(#172)新增 `task_sequences`,把存量 `tasks.task_id` 按类型和创建时间确定性改为
`cjN` / `cgN`,同步更新领取历史和顺运宝来源外键。历史 SQLite migrations
保持冻结,不追加 v12/v13 生产表结构。
v14(#196)新增 `syb_allowed_shops` 全局店铺准入表;`syb_sync_runs` 增加
`accepted_stock_count`、`shop_skipped_count` 和 `shop_filter_hash`。旧同步记录回填为
“接受数=原始货运单数、店铺跳过=0”;历史顺运宝货运单不删除。
**v3 为什么丢弃旧 `sku_mappings` 数据(见 #20):** 新主键需要 `pdd_option_key`,
这是 Go 的 `service.OptionKey()` 用 `json.Marshal` 算出来的规范化键,SQL 语句
@@ -517,6 +520,21 @@ CREATE TABLE syb_sync_state (
`[必须]` 本表不保存顺运宝 Cookie、token、密码、验证码、收件信息或原始响应。
失败原因最多保留 500 个字符,并在页面输出时由模板转义。
v14 起,`stock_count` 继续表示通过完整性校验的**原始货运单数**,避免改变旧字段
语义;`accepted_stock_count` 是店铺准入后最终接受的货运单数,
`shop_skipped_count` 是店铺为空、未启用或明细店铺变化而跳过的货运单数。
`shop_filter_hash` 保存同步开始时启用店铺排序后计算的 SHA-256,只用于判断两次同步
是否使用同一份快照,不保存 Cookie、密码或原始响应。
### 5.3 `syb_allowed_shops` 同步店铺准入(MySQL v14)
每个店铺只保留一条全局记录。`normalized_name` 是去除首尾空白后的名称并使用
`utf8mb4_bin` 唯一约束;匹配不做模糊、正则或大小写折叠。停用代替硬删除,方便
恢复和审计。同步开始时一次读取所有 `enabled=1` 的名称作为不可变快照。
`[必须]` 没有任何启用店铺时同步关闭失败,不请求顺运宝、不推进游标。该表只控制
后续同步是否入库,不自动删除历史 `syb_orders`。
## 6. `spec_mappings` 顺运宝规格映射
"这个蝦皮商品的这条顺运宝规格 = 当前拼多多商品的那个规格",**匹配一次,以后复用**。