SYB 账号下的货运单包含该账号全部店铺的数据,而客户只需要其中一部分。本工单增加店铺管理模块,并在 SYB 同步时按启用的店铺过滤。
[必须] 顺序固定为:listTotal 查总数并做容量熔断 → 翻完整页 → 校验完整性(分页行数、分页前后总数漂移、明细响应缺单)→ 再按店铺过滤 → 只为接受的货运单拉明细和入库。
[必须]
listTotal
不能先过滤再校验:非目标店铺的分页漂移会掩盖目标店铺的漏单。这条来自上游 cmautobuy 文档 §8,见 SYB-ERP-Interface-Contract。
由此产生的预期:过滤不减少列表请求,只减少明细请求和落库量。max_matches 仍按原始总数计算——实测最近 7 天 7404 张,这个数字不会因过滤变小。「过滤了就能选更大范围」不成立。
max_matches
匹配靠字符串比对,SYB 那边改个店铺名就会静默失配、数据无声消失——这是最糟糕的失败方式(不报错,只是少数据)。而同步过程本来就看得见每张货运单的 shopName。
shopName
syb_shop:
syb_shop
display_name
normalized_name
enabled
last_seen_at
deleted_at
[必须] 只做停用/软删除,不做硬删除:同步记录会引用店铺名,硬删会让历史对不上。
[必须] 店铺的增改删和启用仅管理员;其他角色只读(用户已确认)。
用户已确认「先清空已导入的数据」。判据(见工单评论):
syb_product
shopee_product
last_create_request_id IS NULL AND last_update_request_id IS NULL
[必须] 删数据是不可逆操作。执行前须用户明确确认具体语句和影响行数;本仓库不自动执行。
[待定] 已合并进人工创建档案的规格值无法回退,这部分不可逆。
[待定]
[必须] 新增模型必须同时新建 version-local 迁移文件,见 Common-Changes。
version-local
QuantUX 应用:GoAuto - 店铺管理原型(app_id 6a866921191a826306a7ef55) 导出校验:PASS,88 个控件,12 处跳转,0 运行时错误。
GoAuto - 店铺管理原型
6a866921191a826306a7ef55
PASS
(预览链接需带 MCP key,按仓库规则不写入工单,见对话中给出的地址。)
用户对两个待确认项的答复:
原型已按第 2 条更新(新增/改名弹窗的提示文案),重新导出校验仍为 PASS。
[必须] 实现时归一化函数必须与这里一致,且要有测试覆盖:" ABC店 "、"abc店"、"abc店" 必须归一到同一个键,因而不能重复添加。
" ABC店 "
"abc店"
"abc店"
用户反馈页面只能看到左边。原因是应用建在了 375×667(手机默认尺寸) 上,224px 宽的侧栏之后全被裁掉。
两处参数名写错,而且都是静默失败:
quantux_create_app
width
height
quantux_add_screen
w
h
多余参数不会报错,导出校验也照样是 PASS——因为控件确实都创建成功了,只是画布装不下。
屏幕尺寸在创建时固定,没有改尺寸的接口,所以重建了应用。
新 app_id:6a866e98191a826306a7ef78(旧的 6a866921191a826306a7ef55 已删除,链接失效)
6a866e98191a826306a7ef78
已加防护:screen() 创建后立即回读 dump 断言宽度为 1440,尺寸没生效会直接抛错。上一次连流程时的参数名错误也是同类问题,已在 qux.call 里加了工具级错误识别。
screen()
qux.call
screenSize
{"w": 1440, "h": 900}
prototypes/49/v1/index.html
cda37b4
7bd8166
1b67495
6c7a729
go test ./app/goauto/sybshop ./app/goauto/sybimport
scripts/verify.ps1 -Component server
scripts/verify.ps1 -Component web
pnpm exec playwright test tests/e2e/syb-shop-module.spec.ts
python dev_scripts/harness.py check --strict
sync --check
f92d8e7
0c7b8fb
docs/
工单保持打开,等待用户验收。
??? 2026-08-20 ???????????:Task-49-?????-SYB-??????;Wiki revision:a627417c412e44fbc6b0816f15395e131760522f??????
No dependencies set.
The note is not visible to the blocked user.
背景
SYB 账号下的货运单包含该账号全部店铺的数据,而客户只需要其中一部分。本工单增加店铺管理模块,并在 SYB 同步时按启用的店铺过滤。
硬约束:过滤必须在完整性校验之后
[必须]顺序固定为:listTotal查总数并做容量熔断 → 翻完整页 → 校验完整性(分页行数、分页前后总数漂移、明细响应缺单)→ 再按店铺过滤 → 只为接受的货运单拉明细和入库。不能先过滤再校验:非目标店铺的分页漂移会掩盖目标店铺的漏单。这条来自上游 cmautobuy 文档 §8,见 SYB-ERP-Interface-Contract。
由此产生的预期:过滤不减少列表请求,只减少明细请求和落库量。
max_matches仍按原始总数计算——实测最近 7 天 7404 张,这个数字不会因过滤变小。「过滤了就能选更大范围」不成立。店铺名不手工输入,改为自动发现
匹配靠字符串比对,SYB 那边改个店铺名就会静默失配、数据无声消失——这是最糟糕的失败方式(不报错,只是少数据)。而同步过程本来就看得见每张货运单的
shopName。shopName数据模型
syb_shop:display_namenormalized_nameenabledlast_seen_atdeleted_at[必须]只做停用/软删除,不做硬删除:同步记录会引用店铺名,硬删会让历史对不上。行为约定
[必须]没有启用任何店铺时拒绝同步,提示去店铺管理启用(用户已确认)。不做「静默全量导入」——那会让人误以为过滤生效了。[必须]拒绝发生在任何 SYB 请求之前,不浪费一次登录和验证码。[必须]明细响应里再校验一次shopName:列表通过但明细里变空或变成非允许店铺时拦住。成本几乎为零,防列表/明细不一致。权限
[必须]店铺的增改删和启用仅管理员;其他角色只读(用户已确认)。已导入数据的清理
用户已确认「先清空已导入的数据」。判据(见工单评论):
syb_product全量删除——纯导入派生,重新导入可完整重建shopee_product仅删除last_create_request_id IS NULL AND last_update_request_id IS NULL的行,即导入创建且从未被人工碰过[必须]删数据是不可逆操作。执行前须用户明确确认具体语句和影响行数;本仓库不自动执行。[待定]已合并进人工创建档案的规格值无法回退,这部分不可逆。门禁
[必须]新增模型必须同时新建version-local迁移文件,见 Common-Changes。Stage A 原型已生成
QuantUX 应用:
GoAuto - 店铺管理原型(app_id6a866921191a826306a7ef55)导出校验:
PASS,88 个控件,12 处跳转,0 运行时错误。(预览链接需带 MCP key,按仓库规则不写入工单,见对话中给出的地址。)
7 个页面
原型里表达的几个决定
待确认
原型确认结果
用户对两个待确认项的答复:
原型已按第 2 条更新(新增/改名弹窗的提示文案),重新导出校验仍为
PASS。[必须]实现时归一化函数必须与这里一致,且要有测试覆盖:" ABC店 "、"abc店"、"abc店"必须归一到同一个键,因而不能重复添加。原型重建:屏幕尺寸错误已修
用户反馈页面只能看到左边。原因是应用建在了 375×667(手机默认尺寸) 上,224px 宽的侧栏之后全被裁掉。
两处参数名写错,而且都是静默失败:
quantux_create_app的尺寸参数是width/height,我没传,于是用了默认的 375×667quantux_add_screen同样是width/height,我传的是w/h,被直接忽略多余参数不会报错,导出校验也照样是
PASS——因为控件确实都创建成功了,只是画布装不下。屏幕尺寸在创建时固定,没有改尺寸的接口,所以重建了应用。
新 app_id:
6a866e98191a826306a7ef78(旧的6a866921191a826306a7ef55已删除,链接失效)已加防护:
screen()创建后立即回读 dump 断言宽度为 1440,尺寸没生效会直接抛错。上一次连流程时的参数名错误也是同类问题,已在qux.call里加了工具级错误识别。重建后核验
screenSize{"w": 1440, "h": 900}PASS,88 控件,19 处跳转,0 运行时错误实施完成,等待用户验收
实现
syb_shop模型、version-local 迁移、软删除和店铺名规范化(去首尾空白、全半角统一、忽略大小写)。6a866e98191a826306a7ef78;本地快照:prototypes/49/v1/index.html,导出与交互检查通过。提交
cda37b4模型、迁移和规范化7bd8166店铺服务和启用名称查询1b67495店铺 API、SYB 发现和同步过滤6c7a729Admin 页面、导入前置门禁、测试、原型和文档验证
go test ./app/goauto/sybshop ./app/goauto/sybimport:通过。scripts/verify.ps1 -Component server:服务端全量测试与构建通过。scripts/verify.ps1 -Component web:lint 0 错误(30 个既有警告),生产构建通过。pnpm exec playwright test tests/e2e/syb-shop-module.spec.ts:3 条通过(管理员维护、采购员只读、无启用店铺阻止导入)。python dev_scripts/harness.py check --strict、sync --check:通过。文档
f92d8e7。0c7b8fb。docs/镜像已同步并纳入6c7a729。未验证 / 未执行
工单保持打开,等待用户验收。
??? 2026-08-20 ???????????:Task-49-?????-SYB-??????;Wiki revision:a627417c412e44fbc6b0816f15395e131760522f??????