Admin:PDD 批量采集任务支持可选客户端 #74

Closed
opened 2026-08-10 00:46:01 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:需求
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 Admin 四模块可用闭环
  • 阶段:PDD 商品数据与采集任务分配

要解决什么

PDD 商品页面批量创建采集任务时目前只能创建“未指定客户端”的任务。采购员需要在已知某台客户端空闲或具备特定环境时,能够主动把本批任务交给该客户端;同时常规场景仍应保持默认不指定,让任意可领取采集任务的客户端领取。

做什么 / 不做什么

  • 做:
    • 在 PDD 批量创建采集任务的确认弹窗中增加“执行客户端”可选项。
    • 默认选择“不指定(任意客户端可领取)”。
    • 管理员可选择全部可用客户端;采购员只能选择当前绑定给自己的客户端。
    • 指定客户端时任务以 assigned 状态创建并写入 assigned_client;不指定时保持 pending 和空归属。
    • 保持现有去重、采集中状态、失败重试和事务一致性规则。
  • 不做:
    • 不改变蝦皮、顺运宝上下文中的单条采集入口。
    • 不修改 Client 四接口、不修改数据库结构。
    • 不增加自动改派;指定客户端离线时任务等待该客户端领取。

怎么做

  • admin/handler/web/pdd.go:PDD 页面加载当前账号可见的客户端;提交时解析可选客户端并传给 service。
  • admin/templates/pdd/list.html:复用现有批量确认交互,显示已选商品数量、带明确标签的客户端下拉框和默认项;支持取消与键盘操作。
  • admin/service/pdd.go:新增带操作者和可选客户端的批量创建入口;服务端校验客户端可见性,保证整批原子创建。
  • admin/repository/task.go:由 repository 按是否指定客户端写入正确的初始状态和归属字段。
  • 补充 handler/service/repository 相关测试;现有未指定入口继续使用兼容包装,避免扩大蝦皮和顺运宝入口范围。

验收标准

  • PDD 页面勾选商品后点击批量采集,会先看到含已选数量和“执行客户端”的确认弹窗。
  • 下拉框默认“不指定(任意客户端可领取)”,提交后任务仍为 pending 且 assigned_client 为空。
  • 选择可见客户端后,整批新任务为 assigned 且 assigned_client 为所选客户端。
  • 管理员可选择全部客户端;采购员只能选择当前绑定给自己的客户端。
  • 伪造不可见或不存在的客户端 ID 时整批拒绝,商品状态���任务均不产生部分写入。
  • 原有去重、已采集跳过、失败/超时重建规则保持通过。
  • 蝦皮与顺运宝的采集入口行为不变,Client 四接口契约不变。
  • 页面在 1366×768 可操作,字段有可见标签,弹窗可取消并有明确成功/失败反馈。

怎么验证

从 admin/ 执行:

gofmt -w handler/web/pdd.go service/pdd.go repository/task.go
$env:GOTOOLCHAIN="go1.23.0"; go build ./...; go test ./... -count=1; go vet ./...
Remove-Item Env:GOTOOLCHAIN

并使用管理员与采购员账号分别验证默认创建、指定创建和伪造客户端 ID。

风险和回退

  • 风险:错误的可见性校验可能让采购员把任务分配给其他人的客户端;批量事务处理不完整可能留下商品“采集中”但没有任务。
  • 控制:复用现有客户端归属可见性规则,所有权限判断在服务端完成;任务创建与商品状态更新放在同一事务,并覆盖拒绝后的零副作用测试。
  • 回退:回退本工单提交即可恢复全部任务默认未指定的行为;无数据库迁移,无需数据回滚。
## 基本信息 - 类型:需求 - 父级大工单:#14 - 所属 MVP / 版本:#15 Admin 四模块可用闭环 - 阶段:PDD 商品数据与采集任务分配 ## 要解决什么 PDD 商品页面批量创建采集任务时目前只能创建“未指定客户端”的任务。采购员需要在已知某台客户端空闲或具备特定环境时,能够主动把本批任务交给该客户端;同时常规场景仍应保持默认不指定,让任意可领取采集任务的客户端领取。 ## 做什么 / 不做什么 - 做: - 在 PDD 批量创建采集任务的确认弹窗中增加“执行客户端”可选项。 - 默认选择“不指定(任意客户端可领取)”。 - 管理员可选择全部可用客户端;采购员只能选择当前绑定给自己的客户端。 - 指定客户端时任务以 `assigned` 状态创建并写入 `assigned_client`;不指定时保持 `pending` 和空归属。 - 保持现有去重、采集中状态、失败重试和事务一致性规则。 - 不做: - 不改变蝦皮、顺运宝上下文中的单条采集入口。 - 不修改 Client 四接口、不修改数据库结构。 - 不增加自动改派;指定客户端离线时任务等待该客户端领取。 ## 怎么做 - `admin/handler/web/pdd.go`:PDD 页面加载当前账号可见的客户端;提交时解析可选客户端并传给 service。 - `admin/templates/pdd/list.html`:复用现有批量确认交互,显示已选商品数量、带明确标签的客户端下拉框和默认项;支持取消与键盘操作。 - `admin/service/pdd.go`:新增带操作者和可选客户端的批量创建入口;服务端校验客户端可见性,保证整批原子创建。 - `admin/repository/task.go`:由 repository 按是否指定客户端写入正确的初始状态和归属字段。 - 补充 handler/service/repository 相关测试;现有未指定入口继续使用兼容包装,避免扩大蝦皮和顺运宝入口范围。 ## 验收标准 - [x] PDD 页面勾选商品后点击批量采集,会先看到含已选数量和“执行客户端”的确认弹窗。 - [x] 下拉框默认“不指定(任意客户端可领取)”,提交后任务仍为 `pending` 且 `assigned_client` 为空。 - [x] 选择可见客户端后,整批新任务为 `assigned` 且 `assigned_client` 为所选客户端。 - [x] 管理员可选择全部客户端;采购员只能选择当前绑定给自己的客户端。 - [x] 伪造不可见或不存在的客户端 ID 时整批拒绝,商品状态���任务均不产生部分写入。 - [x] 原有去重、已采集跳过、失败/超时重建规则保持通过。 - [x] 蝦皮与顺运宝的采集入口行为不变,Client 四接口契约不变。 - [x] 页面在 1366×768 可操作,字段有可见标签,弹窗可取消并有明确成功/失败反馈。 ## 怎么验证 从 `admin/` 执行: ```powershell gofmt -w handler/web/pdd.go service/pdd.go repository/task.go $env:GOTOOLCHAIN="go1.23.0"; go build ./...; go test ./... -count=1; go vet ./... Remove-Item Env:GOTOOLCHAIN ``` 并使用管理员与采购员账号分别验证默认创建、指定创建和伪造客户端 ID。 ## 风险和回退 - 风险:错误的可见性校验可能让采购员把任务分配给其他人的客户端;批量事务处理不完整可能留下商品“采集中”但没有任务。 - 控制:复用现有客户端归属可见性规则,所有权限判断在服务端完成;任务创建与商品状态更新放在同一事务,并覆盖拒绝后的零副作用测试。 - 回退:回退本工单提交即可恢复全部任务默认未指定的行为;无数据库迁移,无需数据回滚。
Author
Owner

实施记录

已完成实现并提交:

  • d99c813 feat: PDD 批量采集支持可选客户端 (#74)
  • PDD 批量确认弹窗增加可选客户端,默认不指定。
  • 新增带当前账号权限校验的批量创建入口;原有未指定入口保留给蝦皮和顺运宝流程。
  • 指定时写入 assigned/assigned_client,默认仍写入 pending/NULL。
  • 不可见客户端在同一事务内拒绝,测试确认任务和商品状态均无部分写入。
  • 使用 ui-ux-pro-max 检查表单标签、默认说明、取消/焦点和提交反馈;沿用现有 Admin 视觉体系。

验证结果:

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

全部通过。未进行浏览器 1366×768 人工点击验证,也未连接真实 Client;未修改 Client API、数据库结构或真实下单开关。当前进入待验收。

## 实施记录 已完成实现并提交: - `d99c813` `feat: PDD 批量采集支持可选客户端 (#74)` - PDD 批量确认弹窗增加可选客户端,默认不指定。 - 新增带当前账号权限校验的批量创建入口;原有未指定入口保留给蝦皮和顺运宝流程。 - 指定时写入 `assigned/assigned_client`,默认仍写入 `pending/NULL`。 - 不可见客户端在同一事务内拒绝,测试确认任务和商品状态均无部分写入。 - 使用 `ui-ux-pro-max` 检查表单标签、默认说明、取消/焦点和提交反馈;沿用现有 Admin 视觉体系。 验证结果: ```powershell $env:GOTOOLCHAIN='go1.23.0' go build ./... go test ./... -count=1 go vet ./... node --check static/js/app.js ``` 全部通过。未进行浏览器 1366×768 人工点击验证,也未连接真实 Client;未修改 Client API、数据库结构或真实下单开关。当前进入待验收。
Author
Owner

完成归档

  • 归档文档:docs/task/74-pdd批量采集可选客户端.md
  • 归档提交:18f3209 docs: 归档任务 #74
  • 实现提交:d99c813

自动化验收项已回填。1366×768 浏览器人工操作与真实 Client 领取仍留给用户验收,因此工单保持开放、父工单清单保持未勾选。

## 完成归档 - 归档文档:`docs/task/74-pdd批量采集可选客户端.md` - 归档提交:`18f3209` `docs: 归档任务 #74` - 实现提交:`d99c813` 自动化验收项已回填。1366×768 浏览器人工操作与真实 Client 领取仍留给用户验收,因此工单保持开放、父工单清单保持未勾选。
Author
Owner

用户已明确验收通过。验收清单已回填,本工单关闭。

用户已明确验收通过。验收清单已回填,本工单关闭。
ila closed this issue 2026-08-10 23:22:52 +08:00
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#74