docs/admin/01
05
tasks 是一张表,用 task_type 区分采集和采购。但「采购任务」页只查 task_type = 'purchase'——采集任务建出来了,界面上哪儿都看不到。
tasks
task_type
task_type = 'purchase'
#18 做完后这个缺口会立刻暴露:操作员在 PDD 商品页点了「创建采集任务」, 然后就只能盯着 pdd_products.collect_status 猜。
pdd_products.collect_status
collect_status 只能告诉你「这个商品采到没有」,看不出任务本身怎么了:
collect_status
collect_msg
做:
docs/admin/05
不做(各自独立工单):
01
[建议]
两种任务的业务字段完全不同——采购有订单号/颜色尺码/数量/价格上限, 采集只有 PDD 链接。并列会让采集任务行有一半是空列,很难看也没信息量。
改成固定列 + 一列「目标」用一句话概括:
☐ │ 任务编号 │ 类型 │ 目标 │ 状态 │ 客户端 │ 更新时间 ☐ │ PDD-20260807-01 │ 采集 │ PDD 737116531267 │ 已领取 │ 办公室-01 │ 15:20 ☐ │ PDD-20260807-02 │ 采购 │ SO-001 · 黑色/M · 2件 · ≤¥42.00 │ 待领取 │ — │ 15:22
task_id
PDD <pdd_goods_id>
<order_no> · <颜色/尺码> · <数量>件 · ≤<价格上限>
assigned_client
—
[必须] 目标列所需字段全在 tasks 表上(pdd_goods_id / order_no / pdd_options / quantity / max_price_cent),不需要 join。
[必须]
pdd_goods_id
order_no
pdd_options
quantity
max_price_cent
[建议] 采集任务的目标可以 join pdd_products 取标题显示得更友好, 但 join 失败或商品已软删除时必须能退回显示 pdd_goods_id,不能空着。
pdd_products
[必须] 价格上限显示成 ¥42.00,底层是整数分。
¥42.00
现在只有「订单号搜索」。但这个页面最常被问的问题是**「有没有卡住的任务」**, 不是「订单 SO-001 怎么样了」。
[类型▾ 全部] [状态▾ 全部] 关键词[____________] [搜索] [删除]
排查场景需要的信息表格里放不下:
┌──────────────────────────────────────────────┐ │ 任务 PDD-20260807-01 │ ├──────────────────────────────────────────────┤ │ 类型 采集 │ │ 状态 已领取 │ │ 分配客户端 办公室-01 │ │ 领取时间 2026-08-07 15:20:31 │ │ 完成时间 — │ ├──────────────────────────────────────────────┤ │ 执行参数 │ │ PDD 链接 https://mobile.yangkeduo.com/... │ │ 目标规格 黑色 / M (采购任务才有) │ │ 数量 2 (采购任务才有) │ │ 价格上限 ¥42.00 (采购任务才有) │ ├──────────────────────────────────────────────┤ │ 错误 │ │ 错误码 PDD_PAGE_TIMEOUT │ │ 错误说明 商品页加载超时 │ ├──────────────────────────────────────────────┤ │ [关闭] │ └──────────────────────────────────────────────┘
[必须] 只读。本工单不做改派、重试、取消。
[必须] 采购任务才有的字段,在采集任务的弹窗里整段隐藏,不要显示空行。
[建议] result_data(Client 提交的完整结果)默认折叠,提供展开查看。 展开前不得包含凭据——按 docs/admin/06 §7,结果里本来就不该有 token。
result_data
docs/admin/06
共 42 条 · 待分配 3 · 待领取 5 · 已领取 2 · 成功 30 · 需人工 1 · 失败 1
[必须] 统计要跟随当前筛选。筛了「采集」就只统计采集任务, 否则数字和表格对不上,操作员会困惑。
docs/admin/01 §4.3「采购任务模块」→「采集采购模块」,导航文字同步。
[必须] 名字是「采集采购」,不是「任务」。用户明确指定。 它直接点出这一页装的是哪两类任务,比泛称「任务」更能让操作员一眼知道点进去看什么。
[必须] 路由 /tasks 和 objectName 不变,避免无谓改动—— 改路由会让已有的书签和文档里的链接全失效,而这一项没有任何收益。
/tasks
objectName
admin/repository/task.go
admin/service/task.go
admin/handler/web/others.go
TaskList
TaskDelete
admin/templates/task/list.html
admin/templates/task/detail_modal.html
admin/templates/partials/header.html
admin/static/js/app.js
docs/admin/01-requirements.md
docs/admin/05-ui-specification.md
列表
<nil>
详情弹窗
统计
其他
go vet
gofmt -l .
go test ./...
cd D:\chengma\cmautobuy\admin go vet ./... gofmt -l . go test ./... -count=1 go run .
手工走一遍:
不需要真机。
回退:改动集中在 admin/,git revert 即可,无表结构变更。
admin/
git revert
原方案写的是改名为「任务」,用户明确指定用「采集采购」。已更新正文。
理由:直接点出这一页装的是哪两类任务,比泛称「任务」更能让操作员一眼知道点进去看什么。
路由 /tasks 和 objectName 仍然不变。
原工单写着「依赖 #18,两者都要改 docs/admin/01 §4 和 05,避免同文件冲突」。#18 已于今日验收关闭,可以开工。
在 PDD 商品页勾选商品、点「创建采集任务」后,采购任务页看不到任何新增。查证:任务确实建成功了(库里 2 条 collect 任务,assigned_client 为 NULL、状态 pending),但 TaskList 目前是骨架——var rows []gin.H 从不查库,页面永远为空;且它的 TODO 写的是只查 task_type = 'purchase',采集任务本就不在范围内。
collect
pending
var rows []gin.H
f0d7da3
fbfa2fc
docs/task/19-admin-采集采购页.md
go vet / gofmt -l . 无输出;go test ./... -count=1 → repository 1.347s / service 3.208s 全过。新增 25 个用例。
go test ./... -count=1
端到端(curl):
/tasks COL-8020a8729f111c15 | 采集 | PDD 737116531267 | 待分配 | — PUR-001 | 采购 | SO-001 · M/黑色 · 2件 · ≤¥42.00 | 待分配 | — 共 2 条 · 待分配 2 · 待领取 0 · ... /tasks?type=collect → 共 1 条 /tasks?type=purchase → 共 1 条 /tasks?type=purchase&status=cancelled → 共 0 条 +「查看全部」入口
重点复验三项,全部通过:
第一次:模块枚举没跟上(main.go 包注释、00-getting-started.md 的模块表少了一整行 PDD 商品)。
main.go
00-getting-started.md
第二次:我给的检查命令是 grep -rn "四个模块",但过期说法还有「四个页面」这个变体,实现照做无误。第二次改成直接列 6 处确切行号,并点明 pdd/list.html:5 和归档文档里的「四个」是对的、不许改,一轮解决。
grep -rn "四个模块"
pdd/list.html:5
其中 06-quality-security.md 第 60、153 行最要紧:那是验证清单,写着「跑一遍四个页面断言 200」,照做的人只会测四个,PDD 页永远不在回归范围里。
06-quality-security.md
purchase
M/黑色
黑色/M
改派任务、重试/取消任务顺延后续工单;采购任务创建入口属顺运宝模块。
用户确认验收通过。归档状态已更新(3fdab7b)。
3fdab7b
遗留:改派任务、重试/取消任务顺延后续工单;采购任务创建入口属顺运宝模块。
No dependencies set.
The note is not visible to the blocked user.
基本信息
docs/admin/01§4 和05,避免同文件冲突)要解决什么
tasks是一张表,用task_type区分采集和采购。但「采购任务」页只查task_type = 'purchase'——采集任务建出来了,界面上哪儿都看不到。#18 做完后这个缺口会立刻暴露:操作员在 PDD 商品页点了「创建采集任务」,
然后就只能盯着
pdd_products.collect_status猜。collect_status只能告诉你「这个商品采到没有」,看不出任务本身怎么了:collect_msg只有一句话,看不到是哪次尝试、哪个客户端、什么错误码做什么 / 不做什么
做:
docs/admin/01§4.3 和docs/admin/05不做(各自独立工单):
01§4.3 现有的[建议]项顺延到后续工单)怎么做
列不要按类型并列,用「目标」概括
两种任务的业务字段完全不同——采购有订单号/颜色尺码/数量/价格上限,
采集只有 PDD 链接。并列会让采集任务行有一半是空列,很难看也没信息量。
改成固定列 + 一列「目标」用一句话概括:
task_idPDD <pdd_goods_id>;采购:<order_no> · <颜色/尺码> · <数量>件 · ≤<价格上限>docs/admin/01§6.2assigned_client;无主任务显示—(#17 之后采集任务默认无主)[必须]目标列所需字段全在tasks表上(pdd_goods_id/order_no/pdd_options/quantity/max_price_cent),不需要 join。[建议]采集任务的目标可以 joinpdd_products取标题显示得更友好,但 join 失败或商品已软删除时必须能退回显示
pdd_goods_id,不能空着。[必须]价格上限显示成¥42.00,底层是整数分。筛选比搜索更常用
现在只有「订单号搜索」。但这个页面最常被问的问题是**「有没有卡住的任务」**,
不是「订单 SO-001 怎么样了」。
双击打开只读详情弹窗
排查场景需要的信息表格里放不下:
[必须]只读。本工单不做改派、重试、取消。[必须]采购任务才有的字段,在采集任务的弹窗里整段隐藏,不要显示空行。[建议]result_data(Client 提交的完整结果)默认折叠,提供展开查看。展开前不得包含凭据——按
docs/admin/06§7,结果里本来就不该有 token。底部状态条
[必须]统计要跟随当前筛选。筛了「采集」就只统计采集任务,否则数字和表格对不上,操作员会困惑。
模块改名
docs/admin/01§4.3「采购任务模块」→「采集采购模块」,导航文字同步。[必须]名字是「采集采购」,不是「任务」。用户明确指定。它直接点出这一页装的是哪两类任务,比泛称「任务」更能让操作员一眼知道点进去看什么。
[必须]路由/tasks和objectName不变,避免无谓改动——改路由会让已有的书签和文档里的链接全失效,而这一项没有任何收益。
预计修改文件
admin/repository/task.goadmin/service/task.goadmin/handler/web/others.goTaskList实现;TaskDelete实现admin/templates/task/list.htmladmin/templates/task/detail_modal.htmladmin/templates/partials/header.htmladmin/static/js/app.jsdocs/admin/01-requirements.mddocs/admin/05-ui-specification.md验收标准
列表
¥42.00—,不是空白或<nil>详情弹窗
统计
其他
go vet/gofmt -l ./go test ./...全过怎么验证
手工走一遍:
/tasks,应看到一条采集任务,状态「待分配」,客户端—不需要真机。
风险和回退
result_data可能很大回退:改动集中在
admin/,git revert即可,无表结构变更。工单变更:模块名定为「采集采购」
原方案写的是改名为「任务」,用户明确指定用「采集采购」。已更新正文。
理由:直接点出这一页装的是哪两类任务,比泛称「任务」更能让操作员一眼知道点进去看什么。
路由
/tasks和objectName仍然不变。依赖已解除
原工单写着「依赖 #18,两者都要改
docs/admin/01§4 和05,避免同文件冲突」。#18 已于今日验收关闭,可以开工。触发场景(用户实际遇到)
在 PDD 商品页勾选商品、点「创建采集任务」后,采购任务页看不到任何新增。查证:任务确实建成功了(库里 2 条
collect任务,assigned_client为 NULL、状态pending),但TaskList目前是骨架——var rows []gin.H从不查库,页面永远为空;且它的 TODO 写的是只查task_type = 'purchase',采集任务本就不在范围内。实施完成,待验收
f0d7da3feat: 采集采购页,采集与采购统一展示 (#19)fbfa2fcdocs: 归档任务 #19docs/task/19-admin-采集采购页.md验证结果(架构角色亲自复跑,Go 1.23.0)
go vet/gofmt -l .无输出;go test ./... -count=1→ repository 1.347s / service 3.208s 全过。新增 25 个用例。端到端(curl):
重点复验三项,全部通过:
—,不是空白或<nil>审查打回两次,两次都是我的检查指令给窄了
第一次:模块枚举没跟上(
main.go包注释、00-getting-started.md的模块表少了一整行 PDD 商品)。第二次:我给的检查命令是
grep -rn "四个模块",但过期说法还有「四个页面」这个变体,实现照做无误。第二次改成直接列 6 处确切行号,并点明pdd/list.html:5和归档文档里的「四个」是对的、不许改,一轮解决。其中
06-quality-security.md第 60、153 行最要紧:那是验证清单,写着「跑一遍四个页面断言 200」,照做的人只会测四个,PDD 页永远不在回归范围里。未验证到的部分
purchase任务是手工插库的M/黑色),确定但与工单示意图的黑色/M不同——pdd_options是裸 map 无顺序信息,按键名排序是合理兜底遗留
改派任务、重试/取消任务顺延后续工单;采购任务创建入口属顺运宝模块。
验收通过,关闭
用户确认验收通过。归档状态已更新(
3fdab7b)。f0d7da3docs/task/19-admin-采集采购页.md遗留:改派任务、重试/取消任务顺延后续工单;采购任务创建入口属顺运宝模块。