Admin:统一顺运宝单条采集任务的客户端选择 #174

Closed
opened 2026-08-12 09:50:26 +08:00 by ila · 3 comments
Owner

基本信息

  • 类型:缺陷
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 Admin 四模块可用闭环
  • 阶段:顺运宝采集任务创建交互一致性
  • 当前状态:已验收

要解决什么

顺运宝列表顶部批量创建 PDD 采集任务已经可以选择执行客户端,但以下两条单条创建路径没有客户端选择:

  1. 双击商品标题打开商品处理详情,点击“创建采集任务”;
  2. 列表“处理阶段/下一步”点击“创建采集任务”后进入同一个详情弹窗再提交。

根因是详情模板 /syb/collect-pdd 表单没有 client_id,详情 Handler 没加载当前账号可见客户端,提交 Handler 又固定调用传空客户端的单条包装函数。因此任务总是以无主 pending 创建。后端批量 Service 本身已支持可选客户端并校验当前账号可见范围。

做什么 / 不做什么

做:

  • 商品详情的创建/重新创建采集任务区域增加“执行客户端”下拉框。
  • 默认选���“不指定(任意客户端可领取)”。
  • 下拉项仅展示当前登录账号可见的客户端,显示名称、编号和状态。
  • 单条提交复用既有批量 Service,传入单个 syb_id 和 client_id。
  • 保持指定客户端时为 assigned,不指定时为 pending。
  • 保持筛选、页码、CSRF、阶段重新校验及错误提示行为不变。

不做:

  • 不修改数据库结构、任务编号、Client 领取接口或任务状态集合。
  • 不强制指定客户端,不改变列表顶部批量创建的默认值和行为。
  • 不改变采购任务创建流程。

怎么做

  1. SybDetail 查询当前账号可见客户端,并把列表传给 syb/detail_modal。
  2. 在详情创建采集表单中使用可见 <label> 和原生 <select>;首项为“不指定(任意客户端可领取)”,并提供指定/不指定含义的辅助文字。
  3. SybCollectPdd 读取 client_id,调用 CreateSybPddCollectTasksForUser(db, actor, []string{sybID}, clientID),复用现有可见范围校验、阶段校验、事务和来源关联。
  4. 增加 Handler、Service 和模板回归测试:客户端列表渲染、默认空值、指定/不指定落库、越权客户端整次拒绝。
  5. 更新 Admin 界面规范中顺运宝详情的客户端指派规则。

预计修改:

  • admin/handler/web/others.go
  • admin/templates/syb/detail_modal.html
  • admin/handler/web/others_test.go
  • admin/service/shopee_pdd_test.go(按需要补充)
  • admin/main_test.go 或模板专项测试
  • docs/admin/05-ui-specification.md

验收标准

  • 商品详情在可创建或重新创建采集任务时显示“执行客户端”下拉框。
  • 默认值为“不指定(任意客户端可领取)”,不指定时任务为 pending 且 assigned_client 为空。
  • 指定当前账号可见客户端时任务为 assigned,assigned_client 为所选客户端。
  • 采购员看不到其他账号的客户端;伪造不可见 client_id 时不创建任务并返回明确提示。
  • 列表顶部批量创建客户端选择和行为保持不变。
  • 详情提交保留当前筛选和页码,CSRF、阶段及重复创建保护不退化。
  • 固定 Go 1.23.0 go vet ./...、go build ./...、go test ./... -count=1 通过。
  • 最新 Admin 部署生产后,本机与公网登录页 HTTP 200,启动日志无新增错误。

怎么验证

Set-Location admin
$env:GOTOOLCHAIN='go1.23.0'
go vet ./...
go build ./...
go test ./... -count=1

网页验收:登录���购员账号,分别从商品详情和列表“下一步”进入单条创建;验证不指定、指定本人可见客户端以及伪造不可见客户端三种情况。

风险和回退

  • 风险:详情是局部 HTML 请求,若没有按当前用户重新查询客户端可能泄露其他采购员的客户端。控制:服务端按 currentUser 查询可见范围,提交时再次校验。
  • 风险:单条入口与批量入口逻辑再次漂移。控制:单条 Handler 直接复用同一个批量 Service,不新增第二套创建逻辑。
  • 回退:本任务不改数据库;回退对应提交并重新部署上一版 Admin 即可,已创建任务保持不变。
## 基本信息 - 类型:缺陷 - 父级大工单:#14 - 所属 MVP / 版本:#15 Admin 四模块可用闭环 - 阶段:顺运宝采集任务创建交互一致性 - 当前状态:已验收 ## 要解决什么 顺运宝列表顶部批量创建 PDD 采集任务已经可以选择执行客户端,但以下两条单条创建路径没有客户端选择: 1. 双击商品标题打开商品处理详情,点击“创建采集任务”; 2. 列表“处理阶段/下一步”点击“创建采集任务”后进入同一个详情弹窗再提交。 根因是详情模板 `/syb/collect-pdd` 表单没有 `client_id`,详情 Handler 没加载当前账号可见客户端,提交 Handler 又固定调用传空客户端的单条包装函数。因此任务总是以无主 `pending` 创建。后端批量 Service 本身已支持可选客户端并校验当前账号可见范围。 ## 做什么 / 不做什么 做: - 商品详情的创建/重新创建采集任务区域增加“执行客户端”下拉框。 - 默认选���“不指定(任意客户端可领取)”。 - 下拉项仅展示当前登录账号可见的客户端,显示名称、编号和状态。 - 单条提交复用既有批量 Service,传入单个 `syb_id` 和 `client_id`。 - 保持指定客户端时为 `assigned`,不指定时为 `pending`。 - 保持筛选、页码、CSRF、阶段重新校验及错误提示行为不变。 不做: - 不修改数据库结构、任务编号、Client 领取接口或任务状态集合。 - 不强制指定客户端,不改变列表顶部批量创建的默认值和行为。 - 不改变采购任务创建流程。 ## 怎么做 1. `SybDetail` 查询当前账号可见客户端,并把列表传给 `syb/detail_modal`。 2. 在详情创建采集表单中使用可见 `<label>` 和原生 `<select>`;首项为“不指定(任意客户端可领取)”,并提供指定/不指定含义的辅助文字。 3. `SybCollectPdd` 读取 `client_id`,调用 `CreateSybPddCollectTasksForUser(db, actor, []string{sybID}, clientID)`,复用现有可见范围校验、阶段校验、事务和来源关联。 4. 增加 Handler、Service 和模板回归测试:客户端列表渲染、默认空值、指定/不指定落库、越权客户端整次拒绝。 5. 更新 Admin 界面规范中顺运宝详情的客户端指派规则。 预计修改: - `admin/handler/web/others.go` - `admin/templates/syb/detail_modal.html` - `admin/handler/web/others_test.go` - `admin/service/shopee_pdd_test.go`(按需要补充) - `admin/main_test.go` 或模板专项测试 - `docs/admin/05-ui-specification.md` ## 验收标准 - [x] 商品详情在可创建或重新创建采集任务时显示“执行客户端”下拉框。 - [x] 默认值为“不指定(任意客户端可领取)”,不指定时任务为 `pending` 且 `assigned_client` 为空。 - [x] 指定当前账号可见客户端时任务为 `assigned`,`assigned_client` 为所选客户端。 - [x] 采购员看不到其他账号的客户端;伪造不可见 `client_id` 时不创建任务并返回明确提示。 - [x] 列表顶部批量创建客户端选择和行为保持不变。 - [x] 详情提交保留当前筛选和页码,CSRF、阶段及重复创建保护不退化。 - [x] 固定 Go 1.23.0 `go vet ./...`、`go build ./...`、`go test ./... -count=1` 通过。 - [x] 最新 Admin 部署生产后,本机与公网登录页 HTTP 200,启动日志无新增错误。 ## 怎么验证 ```powershell Set-Location admin $env:GOTOOLCHAIN='go1.23.0' go vet ./... go build ./... go test ./... -count=1 ``` 网页验收:登录���购员账号,分别从商品详情和列表“下一步”进入单条创建;验证不指定、指定本人可见客户端以及伪造不可见客户端三种情况。 ## 风险和回退 - 风险:详情是局部 HTML 请求,若没有按当前用户重新查询客户端可能泄露其他采购员的客户端。控制:服务端按 `currentUser` 查询可见范围,提交时再次校验。 - 风险:单条入口与批量入口逻辑再次漂移。控制:单条 Handler 直接复用同一个批量 Service,不新增第二套创建逻辑。 - 回退:本任务不改数据库;回退对应提交并重新部署上一版 Admin 即可,已创建任务保持不变。
Author
Owner

已完成代码实现与本地验证,进入生产部署:

  • 实现提交:f693d2a(详情加载当前账号可见客户端,单条入口复用批量 Service,补充模板和真实 MySQL 服务测试)
  • 归档提交:354aa6b
  • 归档文档:docs/task/174-顺运宝单条采集客户端选择.md
  • 验证:固定 Go 1.23.0 的 go vet ./...、go build ./...、go test ./... -count=1 全部通过;指定/不指定/不可见客户端场景通过临时 MySQL 8 数据库验证。

生产部署与健康检查结果将在完成后继续回写。

已完成代码实现与本地验证,进入生产部署: - 实现提交:`f693d2a`(详情加载当前账号可见客户端,单条入口复用批量 Service,补充模板和真实 MySQL 服务测试) - 归档提交:`354aa6b` - 归档文档:`docs/task/174-顺运宝单条采集客户端选择.md` - 验证:固定 Go 1.23.0 的 `go vet ./...`、`go build ./...`、`go test ./... -count=1` 全部通过;指定/不指定/不可见客户端场景通过临时 MySQL 8 数据库验证。 生产部署与健康检查结果将在完成后继续回写。
Author
Owner

生产部署完成,工单保持“待验收”:

  • 当前版本:354aa6b(功能实现提交 f693d2a)
  • 生产二进制 SHA-256:df269f163ec8b565553a0b436bc807e3383a9cc468480ae932a0f106db6b5bf1
  • 数据库:schema v13;切换前没有执行中的采购任务
  • 健康检查:服务 active,服务器本机登录页 200,公网 https://buy.833729.com/login 200,开发机访问公网 200
  • 启动检查:新一轮启动日志中 panic/fatal/迁移失败/数据库连接失败/进程失败 为 0
  • 回退保障:切换前备份 /opt/cmautobuy/backups/autobuy-before-354aa6b-retry-20260812T020301Z.sql.gz 已通过 gzip 完整性检查;上一版 e80e021 保留

发布过程说明:首次暂存版本误将 config.yaml、data 链接到服务器上不存在的 /opt/cmautobuy/shared/,程序报“无法确定 data 目录”并退出。已立即回退到 e80e021 恢复公网 200;随后按正常版本的实际结构修正为 /opt/cmautobuy/config.yaml 与 /opt/cmautobuy/data,在旁路端口验证 200 后重新备份、切换并完成上述检查。该问题属于发布目录配置,不涉及代码或数据库迁移。

生产部署完成,工单保持“待验收”: - 当前版本:`354aa6b`(功能实现提交 `f693d2a`) - 生产二进制 SHA-256:`df269f163ec8b565553a0b436bc807e3383a9cc468480ae932a0f106db6b5bf1` - 数据库:schema v13;切换前没有执行中的采购任务 - 健康检查:服务 `active`,服务器本机登录页 200,公网 `https://buy.833729.com/login` 200,开发机访问公网 200 - 启动检查:新一轮启动日志中 `panic/fatal/迁移失败/数据库连接失败/进程失败` 为 0 - 回退保障:切换前备份 `/opt/cmautobuy/backups/autobuy-before-354aa6b-retry-20260812T020301Z.sql.gz` 已通过 gzip 完整性检查;上一版 `e80e021` 保留 发布过程说明:首次暂存版本误将 `config.yaml`、`data` 链接到服务器上不存在的 `/opt/cmautobuy/shared/`,程序报“无法确定 data 目录”并退出。已立即回退到 `e80e021` 恢复公网 200;随后按正常版本的实际结构修正为 `/opt/cmautobuy/config.yaml` 与 `/opt/cmautobuy/data`,在旁路端口验证 200 后重新备份、切换并完成上述检查。该问题属于发布目录配置,不涉及代码或数据库迁移。
Author
Owner

用户于 2026-08-13 明确验收通过。工单已完成归档,现关闭工单。

用户于 2026-08-13 明确验收通过。工单已完成归档,现关闭工单。
ila closed this issue 2026-08-13 15:55:59 +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#174