修复 SYB 商品页无法为已采集 PDD 商品创建采集任务 #183

Open
opened 2026-09-01 08:46:51 +08:00 by ila · 1 comment
Owner

原始需求摘要

2026-09-01 用户反馈:线上 SYB 商品搜索订单 260830NYTJEEWG 后,勾选明细无法创建采集任务;在只读分析确认根因后,用户明确要求按建议建单、修复并部署线上。

当前事实与根因

  • 订单两条明细均关联 PDD-8459;线上 PDD 商品状态为 active,没有历史或活动采集任务,存在 3 条可用采集规则。
  • 两条明细的处理阶段为 purchase_ready,页面显示“创建采购(N)”,但“创建 PDD 采集(0)”禁用。
  • SYB 页当前仅将 processStage === pdd_pending 视为采集候选;因此把采购流程阶段错误地当作采集动作资格。
  • PDD 商品页的真实采集门禁独立判断商品停用、活动采集任务与可用规则;同一个 PDD-8459 在该规则下可创建采集任务,两个页面行为不一致。
  • #162 曾明确只覆盖 pdd_pending,本问题属于后续需求缺口,不是服务端批量创建接口故障。
  • 当前会话无 Gitea MCP,按项目规则回退 Gitea API;凭据只从本机 gitea.env 读取。

目标

  1. Admin 采购预检结果显式返回与采购阶段相互独立的 PDD 采集资格及禁用原因。
  2. SYB 商品页按该资格计算“创建 PDD 采集(N)”,不再用 processStage 推断。
  3. 商品停用、已有 pending/running 采集任务或无可用采集规则时继续 fail-closed。
  4. 复用既有采集批量接口、PDD 去重、规则/设备选择与结果展示。

非目标

  • 不创建或启动真实采集任务作为自动化测试。
  • 不改变采购阶段、采购资格、规格映射、设备调度或 Android Agent。
  • 不改变服务端批量创建接口的最终校验;预检字段不能替代写入时校验。
  • 不新增页面、按钮或导航。

方案与契约

  • 在采购批量预检项中增加:
    • collectionEligible: boolean
    • collectionDisabledReason?: string
  • 服务端按 PDD 商品真实状态统一派生:存在且未停用、没有活动采集任务、至少存在一条可用采集规则时为可采集;否则返回明确原因。
  • 资格与 processStage 正交,因此 purchase_ready、color_mapping 或存在历史采购任务的 SYB 行,只要关联 PDD 满足采集门禁,均可作为采集候选。
  • 前端 isCollectionCandidate 只消费 collectionEligible === true 和有效 pddProductId;仍按 PDD ID 去重并限制最多 100 个。
  • 服务端创建时继续二次校验,避免预检与点击之间状态变化产生并发问题。

设计证据

用户于 2026-09-01 明确确认采用上述修复建议。页面不新增组件或布局,继续使用 #162 已确认的“一套选择集、两个动作独立计数、批量采集复用现有确认/结果对话框”设计,仅修正候选门禁;属于现有界面的行为缺陷修复,不需要新原型。

验收标准

  • 订单 260830NYTJEEWG 的两条明细均可勾选并计入 PDD 采集候选;两条指向同一 PDD 时按钮计数按去重后显示 1。
  • 只勾选一条时显示“创建 PDD 采集(1)”且按钮可用。
  • purchase_ready 的采购候选与创建采购行为不受影响。
  • 商品停用、已有活动采集任务、无可用规则、未关联/不存在 PDD 时不进入采集候选并返回明确原因。
  • 创建请求仍只包含去重后的采集候选 PDD ID,服务端最终门禁保持不变。
  • 服务端单元测试、Web 定向 lint、相关 E2E/单元测试及生产构建通过。
  • 最新提交推送并部署到 185.216.248.75;浏览器只读回归确认按钮资格正确,不点击最终创建。

风险与发布

  • 预检与实际创建之间仍可能发生状态变化;由既有创建接口二次校验并逐项返回失败。
  • 发布会更新服务端与 Web 静态资源并重启线上服务;用户已在本次请求中明确授权部署。发布前检查活动任务槽,失败时回滚上一 release。

文档影响

该改动使 Admin 预检契约和 SYB 批量采集业务规则发生长期变化。实施完成后更新线上 Business-Rules-and-Glossary,回读 revision,并按 Wiki-first 规则同步本地镜像与一致性检查。

## 原始需求摘要 2026-09-01 用户反馈:线上 SYB 商品搜索订单 `260830NYTJEEWG` 后,勾选明细无法创建采集任务;在只读分析确认根因后,用户明确要求按建议建单、修复并部署线上。 ## 当前事实与根因 - 订单两条明细均关联 PDD-8459;线上 PDD 商品状态为 `active`,没有历史或活动采集任务,存在 3 条可用采集规则。 - 两条明细的处理阶段为 `purchase_ready`,页面显示“创建采购(N)”,但“创建 PDD 采集(0)”禁用。 - SYB 页当前仅将 `processStage === pdd_pending` 视为采集候选;因此把采购流程阶段错误地当作采集动作资格。 - PDD 商品页的真实采集门禁独立判断商品停用、活动采集任务与可用规则;同一个 PDD-8459 在该规则下可创建采集任务,两个页面行为不一致。 - #162 曾明确只覆盖 `pdd_pending`,本问题属于后续需求缺口,不是服务端批量创建接口故障。 - 当前会话无 Gitea MCP,按项目规则回退 Gitea API;凭据只从本机 `gitea.env` 读取。 ## 目标 1. Admin 采购预检结果显式返回与采购阶段相互独立的 PDD 采集资格及禁用原因。 2. SYB 商品页按该资格计算“创建 PDD 采集(N)”,不再用 `processStage` 推断。 3. 商品停用、已有 `pending/running` 采集任务或无可用采集规则时继续 fail-closed。 4. 复用既有采集批量接口、PDD 去重、规则/设备选择与结果展示。 ## 非目标 - 不创建或启动真实采集任务作为自动化测试。 - 不改变采购阶段、采购资格、规格映射、设备调度或 Android Agent。 - 不改变服务端批量创建接口的最终校验;预检字段不能替代写入时校验。 - 不新增页面、按钮或导航。 ## 方案与契约 - 在采购批量预检项中增加: - `collectionEligible: boolean` - `collectionDisabledReason?: string` - 服务端按 PDD 商品真实状态统一派生:存在且未停用、没有活动采集任务、至少存在一条可用采集规则时为可采集;否则返回明确原因。 - 资格与 `processStage` 正交,因此 `purchase_ready`、`color_mapping` 或存在历史采购任务的 SYB 行,只要关联 PDD 满足采集门禁,均可作为采集候选。 - 前端 `isCollectionCandidate` 只消费 `collectionEligible === true` 和有效 `pddProductId`;仍按 PDD ID 去重并限制最多 100 个。 - 服务端创建时继续二次校验,避免预检与点击之间状态变化产生并发问题。 ## 设计证据 用户于 2026-09-01 明确确认采用上述修复建议。页面不新增组件或布局,继续使用 #162 已确认的“一套选择集、两个动作独立计数、批量采集复用现有确认/结果对话框”设计,仅修正候选门禁;属于现有界面的行为缺陷修复,不需要新原型。 ## 验收标准 - [ ] 订单 `260830NYTJEEWG` 的两条明细均可勾选并计入 PDD 采集候选;两条指向同一 PDD 时按钮计数按去重后显示 1。 - [ ] 只勾选一条时显示“创建 PDD 采集(1)”且按钮可用。 - [ ] `purchase_ready` 的采购候选与创建采购行为不受影响。 - [ ] 商品停用、已有活动采集任务、无可用规则、未关联/不存在 PDD 时不进入采集候选并返回明确原因。 - [ ] 创建请求仍只包含去重后的采集候选 PDD ID,服务端最终门禁保持不变。 - [ ] 服务端单元测试、Web 定向 lint、相关 E2E/单元测试及生产构建通过。 - [ ] 最新提交推送并部署到 185.216.248.75;浏览器只读回归确认按钮资格正确,不点击最终创建。 ## 风险与发布 - 预检与实际创建之间仍可能发生状态变化;由既有创建接口二次校验并逐项返回失败。 - 发布会更新服务端与 Web 静态资源并重启线上服务;用户已在本次请求中明确授权部署。发布前检查活动任务槽,失败时回滚上一 release。 ## 文档影响 该改动使 Admin 预检契约和 SYB 批量采集业务规则发生长期变化。实施完成后更新线上 `Business-Rules-and-Glossary`,回读 revision,并按 Wiki-first 规则同步本地镜像与一致性检查。
Author
Owner

实施完成,待验收

实现

  • 批量预检新增独立的 collectionEligible / collectionDisabledReason,采集资格不再依赖采购 processStage。
  • 已关联 PDD 商品未停用、没有 pending/running 采集任务且存在采集规则时,即使当前阶段为“可创建采购”也允许创建 PDD 采集任务。
  • Web 以服务端采集资格选择候选;相同 PDD 商品继续去重。

验证

  • go test ./app/goauto/...:通过。
  • pnpm exec eslint src/views/goauto/syb-products/index.vue:通过。
  • pnpm build:prod:通过(仅既有 CSS/chunk 警告)。
  • Playwright:syb-product-layout.spec.ts + syb-network-retry.spec.ts,12/12 通过。
  • git diff --check:通过。
  • Wiki:Business-Rules-and-Glossary revision 51de401da3555517a5e560ca72e064fb11bd8d89;Android-Agent-API-Contract revision 94a99754058be22ec1fbb4e2e661b91a23fc026d;sync 与 sync --check 通过。
  • Gitea MCP 当前不可用,工单与 Wiki 写入按项目规则回退 Gitea API;凭据未写入代码、日志或工单。

提交与部署

  • 提交:c07c345(已推送 main)。
  • 线上 release:/home/goauto/releases/20260901-090504-c07c345,上一版本 /home/goauto/releases/20260901-005500-dce4a4f 保留用于回滚。
  • 部署前运行中采集任务 0、风险状态采购任务 0;部署后 goauto.service=active,外部 /api/v1/health HTTP 200,Admin 首页 HTTP 200。

线上浏览器回归

订单 260830NYTJEEWG 返回 2 条“可创建采购”明细:

  • 勾选 1 条:创建采购(1)、创建 PDD 采集(1) 均可用。
  • 勾选 2 条:创建采购(2)、创建 PDD 采集(1),确认相同 PDD 去重。
  • 页面 error 日志为空;未点击创建任务,未产生采集或采购数据。

工单保持打开,等待用户验收。

## 实施完成,待验收 ### 实现 - 批量预检新增独立的 `collectionEligible` / `collectionDisabledReason`,采集资格不再依赖采购 `processStage`。 - 已关联 PDD 商品未停用、没有 `pending/running` 采集任务且存在采集规则时,即使当前阶段为“可创建采购”也允许创建 PDD 采集任务。 - Web 以服务端采集资格选择候选;相同 PDD 商品继续去重。 ### 验证 - `go test ./app/goauto/...`:通过。 - `pnpm exec eslint src/views/goauto/syb-products/index.vue`:通过。 - `pnpm build:prod`:通过(仅既有 CSS/chunk 警告)。 - Playwright:`syb-product-layout.spec.ts` + `syb-network-retry.spec.ts`,12/12 通过。 - `git diff --check`:通过。 - Wiki:`Business-Rules-and-Glossary` revision `51de401da3555517a5e560ca72e064fb11bd8d89`;`Android-Agent-API-Contract` revision `94a99754058be22ec1fbb4e2e661b91a23fc026d`;`sync` 与 `sync --check` 通过。 - Gitea MCP 当前不可用,工单与 Wiki 写入按项目规则回退 Gitea API;凭据未写入代码、日志或工单。 ### 提交与部署 - 提交:`c07c345`(已推送 `main`)。 - 线上 release:`/home/goauto/releases/20260901-090504-c07c345`,上一版本 `/home/goauto/releases/20260901-005500-dce4a4f` 保留用于回滚。 - 部署前运行中采集任务 0、风险状态采购任务 0;部署后 `goauto.service=active`,外部 `/api/v1/health` HTTP 200,Admin 首页 HTTP 200。 ### 线上浏览器回归 订单 `260830NYTJEEWG` 返回 2 条“可创建采购”明细: - 勾选 1 条:`创建采购(1)`、`创建 PDD 采集(1)` 均可用。 - 勾选 2 条:`创建采购(2)`、`创建 PDD 采集(1)`,确认相同 PDD 去重。 - 页面 error 日志为空;未点击创建任务,未产生采集或采购数据。 工单保持打开,等待用户验收。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#183