Admin:SYB 列表支持批量重新采集已选 PDD 商品 #252

Open
opened 2026-08-17 16:07:51 +08:00 by ila · 1 comment
Owner

基本信息

  • 类型:需求 / 交互缺陷修复
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 Admin 四模块可用闭环
  • 阶段:顺运宝采购主链路 / PDD 数据刷新
  • 依赖:#121 已完成单商品明确重新采集
  • 关联:#123 PDD 商品列表批量重新采集;两处入口必须共用同一批量重采 Service,不重复实现状态和并发规则

要解决什么

顺运宝(SYB)列表的“创建采集”只处理 PDD 待采集、采集失败和采集超时商品。商品已经采集并进入规格待匹配或待采购后,即使采购员发现 PDD 颜色、尺码或可购买规格已经变化,该按钮仍会置灰。采购员只能离开 SYB 主链路,逐个进入 PDD 商品详情执行重新采集,批量处理效率低,也容易误以为批量搜索或勾选失效。

已确认生产实例:

  • 顺运宝订单号 260817JQHNCN7S 当前包含 5 条商品明细。
  • 5 条明细分别关联 5 个已经采集的 PDD 商品,因此当前均不满足普通“创建采集”的条件。
  • 这些记录存在历史采购失败,采购员确认 PDD 尺���发生变化,需要先重新采集再重新确认规格。

直接原因不是批量搜索或“全选”故障,而是当前 CanCollect 只允许待采集、失败和超时状态,已采集商品没有 SYB 批量重采入口。

做什么 / 不做什么

做什么

  • 在 SYB 列表工具栏增加独立的“重新采集”按钮,不改变普通“创建采集”的语义。
  • 用户勾选当前页 SYB 商品后,按关联的 PDD goods_id 去重;同一 PDD 商品只创建一条重采任务。
  • 只有满足以下条件的选中项才允许重采:
    • 已关联有效 PDD 商品,且 PDD 当前为已采集;
    • SYB 商品处于规格待匹配、AI 已匹配/待采购,或只有失败/取消的采购历史;
    • 不存在执行中、已成功、待人工核对的采购任务;
    • 不存在已经进入不可逆阶段的采购任务。
  • 弹窗显示“已选 SYB 商品 N 条、去重后 PDD 商品 M 个”,可选当前账号可见 Client,默认不指定。
  • 服务端按当前数据库状态重新校验资格、用户可见范围和 Client 可见范围,不能信任前端传入状态。
  • 批量创建时复用 #121 的原子防重和旧数据保留规则:旧标题、店铺、规格、价格及采集时间在新采集结果成功提交前继续可见。
  • 通过既有 task_syb_sources 保留本次选中的全部 SYB 来源;多个 SYB 明细关联同一 PDD 时只创建一条采集任务,但来源关系不能丢失。
  • 完成后明确反馈创建数、去重数及各类跳过原因。
  • 新采集结果提交后使用现有规格映射有效性判断:原选项仍存在时可以继续有效;选项变更或消失时回到“规格待匹配”,由采购员重新确认。
  • 当前生产实例预期:选中 5 条 SYB 明细,去重得到 5 个 PDD 商品,创建 5 条重采任务。

不做什么

  • 不把普通“创建采集”改成对已采集商品静默重采。
  • 不自动重采、不跨页保留选择;本次只处理当前页明确勾选的数据,当前公共分页上限为 100 条。
  • 不修改、取消或重建已有采购任务,不让新采集结果静默覆盖采购任务快照。
  • 不自动创建采购任务;新结果返回后仍需采购员核对规格和价格。
  • 不允许执行中、成功、待人工核对或已进入不可逆阶段的采购记录从 SYB 发起重采。
  • 不修改数据库结构、Client 四接口、Android 自动化、真实下单门禁或付款流程。

已确认的实现方案

  1. 在 SYB 列表 ViewModel 增加服务端计算的可重采标识和不可重采原因;前端只负责展示和初步启用按钮,最终资格由 Service 判断。
  2. 在 SYB 列表增加独立确认弹窗,提交选中的 syb_id 与可选 client_id;弹窗展示 SYB 明细数和去重后的 PDD 商品数。
  3. 增加受登录和 CSRF 保护的 SYB 批量重采 POST 路由。Handler 只做参数解析、调用 Service 和展示结构化结果。
  4. 抽取或复用与 #123 共用的批量 PDD 重采 Service:
    • 根据当前用户重新读取 SYB 明细;
    • 校验采购任务安全状态;
    • 按 PDD goods_id 去重;
    • 校验可选 Client;
    • 逐项复用 #121 的原子状态占用与任务创建;
    • 写入全部选中 SYB 来源关系;
    • 汇总创建、去重和跳过原因。
  5. 重采成功结果继续走现有 PDD 数据提交和规格映射有效性判断,不新增第二套规格失效规则。
  6. #123 继续只负责 PDD 列表的批量重采界面;先实施的一方负责抽取公共 Service,后实施的一方直接复用。

预计修改文件:

  • admin/templates/syb/list.html
  • admin/static/js/app.js
  • admin/handler/web/syb.go
  • admin/handler/web/web.go
  • admin/service/syb.go
  • admin/service/pdd.go
  • 相邻 Repository / Service / Handler / 模板测试
  • docs/admin/01-requirements.md
  • docs/admin/05-ui-specification.md
  • 完成后归档 docs/task/<工单号>-admin-syb批量重新采集pdd商品.md

验收标准

  • 普通“创建采集”规则保持不变,已采集商品不会被该按钮静默重采。
  • 勾选符合条件的已采集 SYB 商品时,“重新采集”按钮可用;没有符合条件记录时不可用并有清楚原因。
  • 确认弹窗准确显示选中的 SYB 明细数、去重后的 PDD 商品数,并支持不指定或指定当前账号可见 Client。
  • 多条 SYB 明细关联同一 PDD 商品时只创建一条采集任务,同时保留全部已选 SYB 来源关系。
  • 服务端拒绝不可见 SYB 明细、不可见 Client 和状态过期请求,不依赖前端状态保证安全。
  • 执行中、已成功、待人工核对或已进入不可逆阶段的采购记录不能从 SYB 发起重采。
  • 只有失败或取消采购历史的符合条件记录可以重采,且原失败任务和结果不被修改。
  • 连续点击、重复 syb_id、重复 PDD goods_id 和并发请求不会创建重复的有效采集任务。
  • 重采任务创建后旧 PDD 标题、店铺、规格、价格和采集时间继续可见,新结果成功提交后才更新。
  • 新采集结果中原规格消失时,相关 SYB 明细回到规格待匹配;原规格仍存在时按现有规则保持有效。
  • 完成反馈包含创建数、去重数和可读的跳过原因;部分符合条件时只处理符合项,不把跳过误报为成功。
  • 不新增数据库迁移,不改变 Client 四接口、采购任务快照、真实下单门禁和付款规则。
  • Go 1.23.0 build、test、vet 通过;前端 JavaScript 语法检查通过。

验证方式

从 admin/ 目录执行:

$env:GOTOOLCHAIN='go1.23.0'
gofmt -l .
go build ./...
go test ./... -count=1
go vet ./...
node --check static/js/app.js
Remove-Item Env:GOTOOLCHAIN

人工验证:

  1. 批量搜索订单 260817JQHNCN7S,勾选 5 条商品,确认弹窗显示 5 条 SYB、5 个 PDD,并创建 5 条重采任务。
  2. 构造多个 SYB 明细关联同一 PDD 的场景,确认只创建一条任务且任务来源保留所有已选明细。
  3. 分别验证规格待匹配、待采购、采购失败、采购执行中、采购成功、待人工核对和不可逆阶段记录的按钮状态与服务端结果。
  4. 在重采任务未完成时连续或并发重复提交,确认不产生重复有效任务。
  5. 使用管理员和采购员验证 SYB 数据、Client 候选范围及伪造越权请求。
  6. 提交“规格未变”和“规格已变”两类新采集结果,确认映射分别保持有效或回到待匹配。
  7. 重���前后查看历史采购任务,确认任务快照、状态和结果均未被改写。

风险和回退

  • 风险:采购员误把“重新采集”理解为更新已有采购任务。控制方式是独立按钮和弹窗明确说明“只刷新 PDD 数据,不更新已有采购任务;之后需要重新核对规格和价格”。
  • 风险:重采期间旧规格仍可见。页面应明确显示正在重新采集;创建采购时仍执行现有服务端状态和映射校验。
  • 风险:并发产生重复任务。必须复用 #121 的条件更新进行原子占用,只有占用成功的 PDD 商品才能插入任务。
  • 风险:相同 PDD 被多个 SYB 明细选中后来源丢失。创建任务时按 PDD 去重,但来源关系按选中的 SYB 明细完整写入。
  • 回退:回退本工单代码即可,无数据库迁移;已经创建的采集任务按现有状态继续执行,不自动删除或取消。
## 基本信息 - 类型:需求 / 交互缺陷修复 - 父级大工单:#14 - 所属 MVP / 版本:#15 Admin 四模块可用闭环 - 阶段:顺运宝采购主链路 / PDD 数据刷新 - 依赖:#121 已完成单商品明确重新采集 - 关联:#123 PDD 商品列表批量重新采集;两处入口必须共用同一批量重采 Service,不重复实现状态和并发规则 ## 要解决什么 顺运宝(SYB)列表的“创建采集”只处理 PDD 待采集、采集失败和采集超时商品。商品已经采集并进入规格待匹配或待采购后,即使采购员发现 PDD 颜色、尺码或可购买规格已经变化,该按钮仍会置灰。采购员只能离开 SYB 主链路,逐个进入 PDD 商品详情执行重新采集,批量处理效率低,也容易误以为批量搜索或勾选失效。 已确认生产实例: - 顺运宝订单号 `260817JQHNCN7S` 当前包含 5 条商品明细。 - 5 条明细分别关联 5 个已经采集的 PDD 商品,因此当前均不满足普通“创建采集”的条件。 - 这些记录存在历史采购失败,采购员确认 PDD 尺���发生变化,需要先重新采集再重新确认规格。 直接原因不是批量搜索或“全选”故障,而是当前 `CanCollect` 只允许待采集、失败和超时状态,已采集商品没有 SYB 批量重采入口。 ## 做什么 / 不做什么 ### 做什么 - 在 SYB 列表工具栏增加独立的“重新采集”按钮,不改变普通“创建采集”的语义。 - 用户勾选当前页 SYB 商品后,按关联的 PDD `goods_id` 去重;同一 PDD 商品只创建一条重采任务。 - 只有满足以下条件的选中项才允许重采: - 已关联有效 PDD 商品,且 PDD 当前为已采集; - SYB 商品处于规格待匹配、AI 已匹配/待采购,或只有失败/取消的采购历史; - 不存在执行中、已成功、待人工核对的采购任务; - 不存在已经进入不可逆阶段的采购任务。 - 弹窗显示“已选 SYB 商品 N 条、去重后 PDD 商品 M 个”,可选当前账号可见 Client,默认不指定。 - 服务端按当前数据库状态重新校验资格、用户可见范围和 Client 可见范围,不能信任前端传入状态。 - 批量创建时复用 #121 的原子防重和旧数据保留规则:旧标题、店铺、规格、价格及采集时间在新采集结果成功提交前继续可见。 - 通过既有 `task_syb_sources` 保留本次选中的全部 SYB 来源;多个 SYB 明细关联同一 PDD 时只创建一条采集任务,但来源关系不能丢失。 - 完成后明确反馈创建数、去重数及各类跳过原因。 - 新采集结果提交后使用现有规格映射有效性判断:原选项仍存在时可以继续有效;选项变更或消失时回到“规格待匹配”,由采购员重新确认。 - 当前生产实例预期:选中 5 条 SYB 明细,去重得到 5 个 PDD 商品,创建 5 条重采任务。 ### 不做什么 - 不把普通“创建采集”改成对已采集商品静默重采。 - 不自动重采、不跨页保留选择;本次只处理当前页明确勾选的数据,当前公共分页上限为 100 条。 - 不修改、取消或重建已有采购任务,不让新采集结果静默覆盖采购任务快照。 - 不自动创建采购任务;新结果返回后仍需采购员核对规格和价格。 - 不允许执行中、成功、待人工核对或已进入不可逆阶段的采购记录从 SYB 发起重采。 - 不修改数据库结构、Client 四接口、Android 自动化、真实下单门禁或付款流程。 ## 已确认的实现方案 1. 在 SYB 列表 ViewModel 增加服务端计算的可重采标识和不可重采原因;前端只负责展示和初步启用按钮,最终资格由 Service 判断。 2. 在 SYB 列表增加独立确认弹窗,提交选中的 `syb_id` 与可选 `client_id`;弹窗展示 SYB 明细数和去重后的 PDD 商品数。 3. 增加受登录和 CSRF 保护的 SYB 批量重采 POST 路由。Handler 只做参数解析、调用 Service 和展示结构化结果。 4. 抽取或复用与 #123 共用的批量 PDD 重采 Service: - 根据当前用户重新读取 SYB 明细; - 校验采购任务安全状态; - 按 PDD `goods_id` 去重; - 校验可选 Client; - 逐项复用 #121 的原子状态占用与任务创建; - 写入全部选中 SYB 来源关系; - 汇总创建、去重和跳过原因。 5. 重采成功结果继续走现有 PDD 数据提交和规格映射有效性判断,不新增第二套规格失效规则。 6. #123 继续只负责 PDD 列表的批量重采界面;先实施的一方负责抽取公共 Service,后实施的一方直接复用。 预计修改文件: - `admin/templates/syb/list.html` - `admin/static/js/app.js` - `admin/handler/web/syb.go` - `admin/handler/web/web.go` - `admin/service/syb.go` - `admin/service/pdd.go` - 相邻 Repository / Service / Handler / 模板测试 - `docs/admin/01-requirements.md` - `docs/admin/05-ui-specification.md` - 完成后归档 `docs/task/<工单号>-admin-syb批量重新采集pdd商品.md` ## 验收标准 - [ ] 普通“创建采集”规则保持不变,已采集商品不会被该按钮静默重采。 - [ ] 勾选符合条件的已采集 SYB 商品时,“重新采集”按钮可用;没有符合条件记录时不可用并有清楚原因。 - [ ] 确认弹窗准确显示选中的 SYB 明细数、去重后的 PDD 商品数,并支持不指定或指定当前账号可见 Client。 - [ ] 多条 SYB 明细关联同一 PDD 商品时只创建一条采集任务,同时保留全部已选 SYB 来源关系。 - [ ] 服务端拒绝不可见 SYB 明细、不可见 Client 和状态过期请求,不依赖前端状态保证安全。 - [ ] 执行中、已成功、待人工核对或已进入不可逆阶段的采购记录不能从 SYB 发起重采。 - [ ] 只有失败或取消采购历史的符合条件记录可以重采,且原失败任务和结果不被修改。 - [ ] 连续点击、重复 `syb_id`、重复 PDD `goods_id` 和并发请求不会创建重复的有效采集任务。 - [ ] 重采任务创建后旧 PDD 标题、店铺、规格、价格和采集时间继续可见,新结果成功提交后才更新。 - [ ] 新采集结果中原规格消失时,相关 SYB 明细回到规格待匹配;原规格仍存在时按现有规则保持有效。 - [ ] 完成反馈包含创建数、去重数和可读的跳过原因;部分符合条件时只处理符合项,不把跳过误报为成功。 - [ ] 不新增数据库迁移,不改变 Client 四接口、采购任务快照、真实下单门禁和付款规则。 - [ ] Go 1.23.0 build、test、vet 通过;前端 JavaScript 语法检查通过。 ## 验证方式 从 `admin/` 目录执行: ```powershell $env:GOTOOLCHAIN='go1.23.0' gofmt -l . go build ./... go test ./... -count=1 go vet ./... node --check static/js/app.js Remove-Item Env:GOTOOLCHAIN ``` 人工验证: 1. 批量搜索订单 `260817JQHNCN7S`,勾选 5 条商品,确认弹窗显示 5 条 SYB、5 个 PDD,并创建 5 条重采任务。 2. 构造多个 SYB 明细关联同一 PDD 的场景,确认只创建一条任务且任务来源保留所有已选明细。 3. 分别验证规格待匹配、待采购、采购失败、采购执行中、采购成功、待人工核对和不可逆阶段记录的按钮状态与服务端结果。 4. 在重采任务未完成时连续或并发重复提交,确认不产生重复有效任务。 5. 使用管理员和采购员验证 SYB 数据、Client 候选范围及伪造越权请求。 6. 提交“规格未变”和“规格已变”两类新采集结果,确认映射分别保持有效或回到待匹配。 7. 重���前后查看历史采购任务,确认任务快照、状态和结果均未被改写。 ## 风险和回退 - 风险:采购员误把“重新采集”理解为更新已有采购任务。控制方式是独立按钮和弹窗明确说明“只刷新 PDD 数据,不更新已有采购任务;之后需要重新核对规格和价格”。 - 风险:重采期间旧规格仍可见。页面应明确显示正在重新采集;创建采购时仍执行现有服务端状态和映射校验。 - 风险:并发产生重复任务。必须复用 #121 的条件更新进行原子占用,只有占用成功的 PDD 商品才能插入任务。 - 风险:相同 PDD 被多个 SYB 明细选中后来源丢失。创建任务时按 PDD 去重,但来源关系按选中的 SYB 明细完整写入。 - 回退:回退本工单代码即可,无数据库迁移;已经创建的采集任务按现有状态继续执行,不自动删除或取消。
Author
Owner

关联 #253:#252 是采购前由采购员明确批量重新采集 PDD 商品的主动刷新路径;#253 是 Client 真机采购时完整遍历后仍找不到任务尺码的运行时兜底。两者互补:#253 不按 shopee_backfill 来源提前触发,也不能替代 #252 对完整 PDD 商品数据的重新采集。

关联 #253:#252 是采购前由采购员明确批量重新采集 PDD 商品的主动刷新路径;#253 是 Client 真机采购时完整遍历后仍找不到任务尺码的运行时兜底。两者互补:#253 不按 `shopee_backfill` 来源提前触发,也不能替代 #252 对完整 PDD 商品数据的重新采集。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#252