# 121 Admin:允许已采集 PDD 商品明确重新采集 - 类型:缺陷 - 父级大工单:#14 - 所属 MVP / 版本:#15 Admin 四模块可用闭环 - 状态:已完成 - 日期:2026-08-10 - Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/121 ## 背景与目标 PDD 商品详情虽然显示“重新采集”,但原先复用普通批量采集入口。普通入口会按既有规则 跳过已采集商品,因此不会创建任务,“采集采购”模块也没有对应记录。本任务让详情页的 明确重新采集操作可以创建任务,同时保留批量入口的防误重采规则。 ## 最终方案 - 增加独立的 `/pdd/recollect` Web 入口和单商品 Service 方法。 - Repository 使用条件更新原子占用状态,允许 `collected`、`pending`、`failed` 和超时 `collecting` 进入采集中;未超时的 `collecting` 不重复建任务。 - 重新采集只更新状态并插入任务,不清空标题、店铺、规格、价格和采集时间;Client 成功 提交后继续由原有结果提交逻辑覆盖。 - 详情弹窗允许选择当前账号可见的 Client,默认不指定;服务端重新校验可见范围。 - 普通批量 `/pdd/collect` 及其“已采集商品跳过”规则保持不变。 实现与建单方案一致,无数据库迁移,不改变 Client 四接口。 ## 改了哪些 - `admin/repository/pdd.go`:增加重新采集专用的原子状态占用方法。 - `admin/service/pdd.go`:增加单商品重新采集事务编排、权限校验和任务创建。 - `admin/handler/web/pdd.go`、`admin/handler/web/web.go`:增加详情重采处理器和路由,并加载可选 Client。 - `admin/templates/pdd/edit_modal.html`:详情按钮改用独立入口,增加执行客户端选择和旧结果保留提示。 - `admin/service/pdd_page_test.go`、`admin/main_test.go`:增加重采成功、防重复、越权回滚和模板入口测试。 - `docs/admin/01-requirements.md`、`docs/admin/05-ui-specification.md`:记录稳定业务和界面规则。 ## 验收结果 | 验收标准 | 结果 | |---|---| | 已采集商品明确重采时创建一条任务并进入采集中 | 通过 | | 任务创建后旧标题、规格、价格和采集时间仍保留 | 通过 | | 连续点击不会产生第二条未超时任务 | 通过 | | 失败和超时状态仍可按状态条件重新创建 | 通过 | | 普通批量入口继续跳过已采集商品 | 通过 | | 不可见 Client 被拒绝且状态、任务完整回滚 | 通过 | | 不修改数据库结构和 Client 四接口 | 通过 | | Go build、test、vet 通过 | 通过 | ## 测试 - 执行的命令:`GOTOOLCHAIN=go1.23.0 go build ./...`、`go test ./... -count=1`、`go vet ./...`、`git diff --check` - 结果:Admin 全部包构建成功,全部自动化测试通过,vet 和差异检查无报错。 - **没验证到的部分**:未在真实浏览器中人工点击详情弹窗;未让真实 Client 领取并完成本次重新采集任务。 ## 相关提交 - `546d9ef` fix: 允许已采集 PDD 商品重新采集 (#121)