SYB 商品动态处理阶段与全量筛选 #80

Closed
opened 2026-08-25 09:25:11 +08:00 by ila · 5 comments
Owner

需求来源

  • 提出时间:2026-08-25
  • 用户需求:参考 D:\chengma\cmautobuy\admin,在 SYB 商品页增加简短、常用的动态“处理阶段”,并按确认方案建工单后实施。
  • 用户确认的阶段:待人工处理、未关联 PDD、PDD 待采集、PDD 采集中、PDD 采集失败、颜色待匹配、可创建采购、已创建任务、采购成功、待人工核对。

当前事实

  • SYB 商品目前只持久化解析状态 success/uncertain/failed;“人工已确认”是独立标记。
  • 列表“采购准备”通过批量预检异步计算,只覆盖当前页,尚不能按业务处理阶段对全量结果筛选。
  • PDD 采集、规格映射和采购任务均有各自事实表;把阶段固化到 syb_products 会随关联事实变化而过期。
  • 参考项目同样不在 SYB 商品主表保存阶段,而是根据关联和任务事实动态派生“处理阶段 + 下一步”。

目标与方案

  1. 保留现有“解析状态”筛选,新增服务端参数 processStage 和页面“处理阶段”下拉框。
  2. 处理阶段由服务端动态派生,不新增数据库字段、不执行数据库迁移。
  3. 服务端必须对完整查询结果进行阶段筛选后再分页,不能只过滤当前页。
  4. 列表现有“采购准备”列改为“处理阶段”,显示唯一主状态、简短原因和现有下一步入口。
  5. 内部采购任务状态映射为采购员能理解的阶段,不向 SYB 页面暴露 pending/running/order_submit_started 等程序状态。
  6. 采购支付、物流、回填仍只在采购管理处理,不进入 SYB 主阶段。

阶段定义与优先级

按下列顺序选出每行唯一主阶段:

  1. 待人工核对:最新任务为 order_result_unknown,可能已下单,禁止自动重试。
  2. 采购成功:最新有效任务已取得 PDD 订单号和下单时间;不代表已支付。
  3. 已创建任务:存在尚未结束的采购任务。
  4. 待人工处理:SYB 解析失败、蝦皮关联缺失/失效、数量或必要基础数据异常。
  5. 未关联 PDD:蝦皮商品没有有效 PDD 关联。
  6. PDD 待采集:已关联商品,但 PDD 档案尚无可用采集数据且没有活动采集任务。
  7. PDD 采集中:对应 PDD 商品存在活动采集任务。
  8. PDD 采集失败:最近采集失败且没有更新后的可用商品数据。
  9. 颜色待匹配:PDD 商品可用,但目标颜色没有有效的已确认/唯一确定性映射。
  10. 可创建采购:当前采购预检通过。

失败或取消的旧采购任务不是独立主阶段;当前前置条件仍满足时恢复为“可创建采购”,旧任务继续在采购管理留痕和重试。

设计证据(复用现有页面)

本次复用现有 SYB 商品页筛选、标签、原因文字和下一步链接,不新增页面或主要流程:

已选择 | 店铺 | 多行订单号 | 解析状态 | 处理阶段 | 查询 | 重置 | 创建采购
-----------------------------------------------------------------------
订单号 | 虾皮商品 | 颜色尺码 | 数量 | 解析状态 | 处理阶段       | 操作
...                                             [状态标签]
                                                简短原因
                                                [下一步]

交互状态:

  • 正常:下拉框包含“全部”和 10 个已确认阶段。
  • 加载:列表使用现有 loading;阶段筛选随主列表请求完成,不再依赖前端过滤。
  • 空:显示现有空表格状态。
  • 失败:保留统一可读请求失败提示。
  • 权限:沿用 SYB 商品页权限;采购人员和管理员均可查看,创建采购按钮继续受现有权限与预检约束。
  • 禁用:不可创建行不能被采购批量选择;状态标签不改变现有支付、重试和创建订单权限。

该改动属于现有页面小范围扩展,明确复用现有规范,采用以上低保真设计证据,无需 QuantUX 或新增 HTML 快照。

依赖与影响

  • 依赖现有 SYB 列表、PDD 商品/采集任务、蝦皮规格映射及采购任务批量预检。
  • 影响 Server、Web 和长期业务规则;Android、Agent API、采购执行规则无变化。
  • 不与同时修改 SYB 列表查询和采购预检的任务并行。
  • 无数据库迁移、无真实采购、无创建订单或支付动作。

验收标准

  • 页面显示 10 个简短处理阶段,且每行只有一个主阶段。
  • “处理阶段”筛选在服务端对全量结果生效,分页总数和翻页结果准确。
  • “解析状态”和“处理阶段”可组合筛选,店铺与多订单号筛选不回归。
  • 订单结果未知优先显示“待人工核对”;已创建订单显示“采购成功”;活动任务显示“已创建任务”。
  • 缺基础数据、缺 PDD、待/正在/失败采集、颜色待匹配和可采购均正确分类。
  • “采购成功”不被解释为已支付;支付、物流和回填状态不进入本列。
  • 批量创建采购仍只允许预检合格行,并在提交时重新校验。
  • Server 定向单元测试、Web 定向测试/构建和 Harness 检查通过。

验证计划

  • Server 表驱动测试覆盖 10 个阶段、优先级、组合筛选、总数和分页。
  • Web 测试覆盖下拉参数、标签/操作展示和原有采购选择行为。
  • 运行相关 Go 测试、Web lint/build,以及 python dev_scripts/harness.py check --strict。
  • 不触发真实 SYB 同步、PDD 采集、采购或支付。

风险

  • 动态阶段涉及跨表查询;实现必须批量查询/聚合并保证索引可用,禁止逐行 N+1。
  • “PDD 采集失败”与已有可用商品数据的优先级必须明确,避免旧失败任务覆盖更新后的商品档案。
  • 页面阶段是工作引导,不替代采购任务审计和状态机事实。

文档影响

有长期业务规则影响:Wiki-first 更新《Business Rules and Glossary》,记录处理阶段、动态派生原则和“采购成功不等于支付”;在线回读 revision 后同步本地只读镜像。API 查询参数若纳入长期管理端契约,则同步更新相应 Wiki 页面。

## 需求来源 - 提出时间:2026-08-25 - 用户需求:参考 `D:\chengma\cmautobuy\admin`,在 SYB 商品页增加简短、常用的动态“处理阶段”,并按确认方案建工单后实施。 - 用户确认的阶段:待人工处理、未关联 PDD、PDD 待采集、PDD 采集中、PDD 采集失败、颜色待匹配、可创建采购、已创建任务、采购成功、待人工核对。 ## 当前事实 - SYB 商品目前只持久化解析状态 `success/uncertain/failed`;“人工已确认”是独立标记。 - 列表“采购准备”通过批量预检异步计算,只覆盖当前页,尚不能按业务处理阶段对全量结果筛选。 - PDD 采集、规格映射和采购任务均有各自事实表;把阶段固化到 `syb_products` 会随关联事实变化而过期。 - 参考项目同样不在 SYB 商品主表保存阶段,而是根据关联和任务事实动态派生“处理阶段 + 下一步”。 ## 目标与方案 1. 保留现有“解析状态”筛选,新增服务端参数 `processStage` 和页面“处理阶段”下拉框。 2. 处理阶段由服务端动态派生,不新增数据库字段、不执行数据库迁移。 3. 服务端必须对完整查询结果进行阶段筛选后再分页,不能只过滤当前页。 4. 列表现有“采购准备”列改为“处理阶段”,显示唯一主状态、简短原因和现有下一步入口。 5. 内部采购任务状态映射为采购员能理解的阶段,不向 SYB 页面暴露 `pending/running/order_submit_started` 等程序状态。 6. 采购支付、物流、回填仍只在采购管理处理,不进入 SYB 主阶段。 ### 阶段定义与优先级 按下列顺序选出每行唯一主阶段: 1. **待人工核对**:最新任务为 `order_result_unknown`,可能已下单,禁止自动重试。 2. **采购成功**:最新有效任务已取得 PDD 订单号和下单时间;不代表已支付。 3. **已创建任务**:存在尚未结束的采购任务。 4. **待人工处理**:SYB 解析失败、蝦皮关联缺失/失效、数量或必要基础数据异常。 5. **未关联 PDD**:蝦皮商品没有有效 PDD 关联。 6. **PDD 待采集**:已关联商品,但 PDD 档案尚无可用采集数据且没有活动采集任务。 7. **PDD 采集中**:对应 PDD 商品存在活动采集任务。 8. **PDD 采集失败**:最近采集失败且没有更新后的可用商品数据。 9. **颜色待匹配**:PDD 商品可用,但目标颜色没有有效的已确认/唯一确定性映射。 10. **可创建采购**:当前采购预检通过。 失败或取消的旧采购任务不是独立主阶段;当前前置条件仍满足时恢复为“可创建采购”,旧任务继续在采购管理留痕和重试。 ## 设计证据(复用现有页面) 本次复用现有 SYB 商品页筛选、标签、原因文字和下一步链接,不新增页面或主要流程: ```text 已选择 | 店铺 | 多行订单号 | 解析状态 | 处理阶段 | 查询 | 重置 | 创建采购 ----------------------------------------------------------------------- 订单号 | 虾皮商品 | 颜色尺码 | 数量 | 解析状态 | 处理阶段 | 操作 ... [状态标签] 简短原因 [下一步] ``` 交互状态: - 正常:下拉框包含“全部”和 10 个已确认阶段。 - 加载:列表使用现有 loading;阶段筛选随主列表请求完成,不再依赖前端过滤。 - 空:显示现有空表格状态。 - 失败:保留统一可读请求失败提示。 - 权限:沿用 SYB 商品页权限;采购人员和管理员均可查看,创建采购按钮继续受现有权限与预检约束。 - 禁用:不可创建行不能被采购批量选择;状态标签不改变现有支付、重试和创建订单权限。 该改动属于现有页面小范围扩展,明确复用现有规范,采用以上低保真设计证据,无需 QuantUX 或新增 HTML 快照。 ## 依赖与影响 - 依赖现有 SYB 列表、PDD 商品/采集任务、蝦皮规格映射及采购任务批量预检。 - 影响 Server、Web 和长期业务规则;Android、Agent API、采购执行规则无变化。 - 不与同时修改 SYB 列表查询和采购预检的任务并行。 - 无数据库迁移、无真实采购、无创建订单或支付动作。 ## 验收标准 - [ ] 页面显示 10 个简短处理阶段,且每行只有一个主阶段。 - [ ] “处理阶段”筛选在服务端对全量结果生效,分页总数和翻页结果准确。 - [ ] “解析状态”和“处理阶段”可组合筛选,店铺与多订单号筛选不回归。 - [ ] 订单结果未知优先显示“待人工核对”;已创建订单显示“采购成功”;活动任务显示“已创建任务”。 - [ ] 缺基础数据、缺 PDD、待/正在/失败采集、颜色待匹配和可采购均正确分类。 - [ ] “采购成功”不被解释为已支付;支付、物流和回填状态不进入本列。 - [ ] 批量创建采购仍只允许预检合格行,并在提交时重新校验。 - [ ] Server 定向单元测试、Web 定向测试/构建和 Harness 检查通过。 ## 验证计划 - Server 表驱动测试覆盖 10 个阶段、优先级、组合筛选、总数和分页。 - Web 测试覆盖下拉参数、标签/操作展示和原有采购选择行为。 - 运行相关 Go 测试、Web lint/build,以及 `python dev_scripts/harness.py check --strict`。 - 不触发真实 SYB 同步、PDD 采集、采购或支付。 ## 风险 - 动态阶段涉及跨表查询;实现必须批量查询/聚合并保证索引可用,禁止逐行 N+1。 - “PDD 采集失败”与已有可用商品数据的优先级必须明确,避免旧失败任务覆盖更新后的商品档案。 - 页面阶段是工作引导,不替代采购任务审计和状态机事实。 ## 文档影响 有长期业务规则影响:Wiki-first 更新《Business Rules and Glossary》,记录处理阶段、动态派生原则和“采购成功不等于支付”;在线回读 revision 后同步本地只读镜像。API 查询参数若纳入长期管理端契约,则同步更新相应 Wiki 页面。
Author
Owner

实施完成,待用户验收

实现

  • 新增 10 个面向采购员的动态处理阶段:待人工处理、未关联 PDD、PDD 待采集、PDD 采集中、PDD 采集失败、颜色待匹配、可创建采购、已创建任务、采购成功、待人工核对。
  • 阶段由 SYB、蝦皮、PDD、最新采集任务和最新采购任务批量派生,没有给 syb_product 增加字段,也没有数据库迁移。
  • 批量采购预检返回阶段、简短原因和下一步;原有“列表先显示、当前页采购准备异步加载”快路径保留,预检不调用 AI。
  • SYB 列表新增 processStage 查询参数;选择阶段时先对完整基础查询结果分批派生和筛选,再计算总数与分页,避免只过滤当前页和超大 IN 参数。
  • 页面增加“处理阶段”下拉框,“采购准备”列改为“处理阶段”,继续复用现有标签、原因和下一步链接。
  • “采购成功”明确表示已取得订单号和下单时间,不代表已支付;order_result_unknown 优先显示“待人工核对”。

验证

  • .\scripts\verify.ps1 -Component server:通过(全量 Go 测试和服务端构建)。
  • .\scripts\verify.ps1 -Component web:通过(依赖锁定、lint 0 error/30 条存量 warning、生产构建)。
  • pnpm exec playwright test tests/e2e/syb-product-layout.spec.ts --reporter=line:3/3 通过。
  • pnpm exec playwright test syb- --reporter=line:与本工单相关的 13 项通过;另 1 个存量 syb-shop-module 用例仍寻找 #75 已删除的“从 SYB 导入”按钮,超时失败,与本次改动无关,未混入 #80。
  • python dev_scripts/harness.py sync、sync --check、check --strict:通过。执行时显式使用当前 https://git.ilapage.cn,因为当前 Codex 进程继承的系统 GITEA_URL 仍是旧地址;仓库忽略的 gitea.env 已是正确地址。
  • 未执行真实 SYB 同步、PDD 采集、采购、创建订单或支付。

文档与提交

  • Wiki《Business Rules and Glossary》已在线更新并回读,revision:73e38d6204acee7b6ea2c2eb9e9c918e807dbf3a。
  • 本地核心镜像已同步并检查一致。
  • 提交:0794dc5 feat(#80): add SYB product process stages
  • 已推送到 origin/main。
  • 工作区仅剩用户原有未跟踪文件 gitea.zip,未修改、未提交。

请按 SYB 商品页的阶段显示、组合筛选、分页总数和下一步入口进行人工验收。

## 实施完成,待用户验收 ### 实现 - 新增 10 个面向采购员的动态处理阶段:待人工处理、未关联 PDD、PDD 待采集、PDD 采集中、PDD 采集失败、颜色待匹配、可创建采购、已创建任务、采购成功、待人工核对。 - 阶段由 SYB、蝦皮、PDD、最新采集任务和最新采购任务批量派生,没有给 `syb_product` 增加字段,也没有数据库迁移。 - 批量采购预检返回阶段、简短原因和下一步;原有“列表先显示、当前页采购准备异步加载”快路径保留,预检不调用 AI。 - SYB 列表新增 `processStage` 查询参数;选择阶段时先对完整基础查询结果分批派生和筛选,再计算总数与分页,避免只过滤当前页和超大 `IN` 参数。 - 页面增加“处理阶段”下拉框,“采购准备”列改为“处理阶段”,继续复用现有标签、原因和下一步链接。 - “采购成功”明确表示已取得订单号和下单时间,不代表已支付;`order_result_unknown` 优先显示“待人工核对”。 ### 验证 - `.\scripts\verify.ps1 -Component server`:通过(全量 Go 测试和服务端构建)。 - `.\scripts\verify.ps1 -Component web`:通过(依赖锁定、lint 0 error/30 条存量 warning、生产构建)。 - `pnpm exec playwright test tests/e2e/syb-product-layout.spec.ts --reporter=line`:3/3 通过。 - `pnpm exec playwright test syb- --reporter=line`:与本工单相关的 13 项通过;另 1 个存量 `syb-shop-module` 用例仍寻找 #75 已删除的“从 SYB 导入”按钮,超时失败,与本次改动无关,未混入 #80。 - `python dev_scripts/harness.py sync`、`sync --check`、`check --strict`:通过。执行时显式使用当前 `https://git.ilapage.cn`,因为当前 Codex 进程继承的系统 `GITEA_URL` 仍是旧地址;仓库忽略的 `gitea.env` 已是正确地址。 - 未执行真实 SYB 同步、PDD 采集、采购、创建订单或支付。 ### 文档与提交 - Wiki《Business Rules and Glossary》已在线更新并回读,revision:`73e38d6204acee7b6ea2c2eb9e9c918e807dbf3a`。 - 本地核心镜像已同步并检查一致。 - 提交:`0794dc5 feat(#80): add SYB product process stages` - 已推送到 `origin/main`。 - 工作区仅剩用户原有未跟踪文件 `gitea.zip`,未修改、未提交。 请按 SYB 商品页的阶段显示、组合筛选、分页总数和下一步入口进行人工验收。
Author
Owner

验收中发现的“查看 PDD 商品”错误跳转已拆分为 #81,并在提交 66ea01c 中修复,当前等待用户页面验收。#80 保持待验收。

验收中发现的“查看 PDD 商品”错误跳转已拆分为 #81,并在提交 `66ea01c` 中修复,当前等待用户页面验收。#80 保持待验收。
Author
Owner

验收中发现的“未关联 PDD 却显示去匹配”已拆分为 #82,并在提交 7b488e2 中修复:未关联显示“去关联”并直接打开 PDD 选择器,颜色待匹配才显示“去匹配”。当前等待用户验收。

验收中发现的“未关联 PDD 却显示去匹配”已拆分为 #82,并在提交 `7b488e2` 中修复:未关联显示“去关联”并直接打开 PDD 选择器,颜色待匹配才显示“去匹配”。当前等待用户验收。
Author
Owner

子工单 #83(PDD 商品页单商品定位模式)已完成实现并推送,提交 0991fd2,当前保持待用户验收。专项 Playwright 2/2、完整 Web 验证、Harness 严格检查及 Wiki 镜像检查均通过。

子工单 #83(PDD 商品页单商品定位模式)已完成实现并推送,提交 `0991fd2`,当前保持待用户验收。专项 Playwright 2/2、完整 Web 验证、Harness 严格检查及 Wiki 镜像检查均通过。
Author
Owner

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。

用户于 2026-08-28 明确确认本工单验收通过。按项目流程记录验收结论并关闭工单;本次仅更新工单状态,无新增长期文档事实,不重复同步 Wiki。
ila closed this issue 2026-08-28 15:07:25 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#80