Files
cmautobuy/docs/task/31-admin-pdd-店铺与价格采样粒度.md
T
2026-08-07 17:14:12 +08:00

86 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 31 Admin:采集结果增加店铺名与价格采样粒度
- 类型:需求
- 父级大工单:#14
- 所属 MVP / 版本:#15 / MVP
- 状态:已完成
- 日期:2026-08-07
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/31
## 背景与目标
原有采集结果只能保存商品标题和规格价格,无法区分同名商品来自哪家店铺,
也没有说明价格是逐个 SKU 实测还是按颜色采样后推断。
本任务让 Admin 保存并显示店铺名,同时在按颜色采样时明确标出实测价和推断价,
避免操作员和后续价格保护把推断价格误认为逐 SKU 实测价格。
## 最终方案
- 新增数据库版本 v4,通过 `ALTER TABLE` 为 `pdd_products` 添加可空的
`shop_name`。已发布的 v1/v2 和特殊 v3 迁移定义没有改写。
- 迁移顺序明确为 v1/v2 → 特殊 v3 → v4;启动自检增加 `shop_name` 列检查。
- Client 提交的 `shop_name` 落到商品表;本次没传或传空值时保留已有店铺名。
- `price_granularity` 和 `price_observed_at` 继续随完整 `pdd_data` 保存在
`skus_json`,不增加重复数据库列。
- PDD 商品列表增加“店铺”列,详情增加店铺信息。
- 当 `price_granularity` 为 `color` 时,规格表显示采样说明和“价格来源”列;
`options` 与 `price_observed_at` 完全一致的行显示“✓ 实测”,其余显示“推断”。
- 旧 Client 不传新字段时继续正常提交;非空的未知价格粒度会被拒绝。
- 为便于自动验证,把路由组装提取为 `newRouter`,使用临时数据库和
`httptest` 检查五个主页面及 PDD 详情渲染,不占用真实端口和数据库。
与建单方案的差异:v3 是不能放进纯 SQL 切片的特殊迁移,因此 v4 使用独立的
SQL 迁移列表,在 v3 完成后执行;没有为 v3 添加占位项,避免全新库跳过 v3。
## 改了哪些
- `admin/repository/db.go`、`migrate_test.go`:v4、关键列自检和三起点迁移测试。
- `admin/model/model.go`、`repository/pdd.go`:商品模型、查询和店铺名落库。
- `admin/service/submit.go`、`submit_test.go`:解析新字段、兼容旧报文并验证落库。
- `admin/service/pdd.go`、`pdd_page_test.go`:列表和详情视图、实测/推断判断。
- `admin/templates/pdd/*.html`:显示店铺、价格采样提示和文字标记。
- `admin/main.go`、`main_test.go`:可测试的路由组装和页面 HTTP 冒烟测试。
- `docs/admin/03-data-model.md`、`04-client-api.md`、`05-ui-specification.md`:
同步数据、接口和界面规范。
- `docs/client/04-admin-api-contract.md`:同步 Client 提交契约。
## 验收结果
| 验收标准 | 结果 |
|---|---|
| v4 是新增迁移,未改写已发布迁移定义 | 通过 |
| 全新库、v2 老结构库、v2 新结构库迁移后结构一致 | 通过 |
| `shop_name` 可空,老数据迁移后保持 NULL | 通过 |
| 提交店铺名后落库并在列表和详情显示 | 通过 |
| 不带店铺名的旧报文不覆盖已有值 | 通过 |
| 按颜色采样时显示说明和“✓ 实测 / 推断”文字 | 通过 |
| `price_cent` 使用实付价的规则写入两侧文档 | 通过 |
| 未知 JSON 字段和不带新字段的旧 Client 继续兼容 | 通过 |
| 五个主页面通过 HTTP 200 冒烟测试 | 通过 |
| 格式、静态检查、构建和全量测试通过 | 通过 |
## 测试
- 执行的命令:
```powershell
cd D:\chengma\cmautobuy\admin
gofmt -l .
go vet ./...
go build ./...
go test ./... -count=1
go test ./repository/ -run Migrate -v -count=1
git diff --check
```
- 结果:全部通过。自动测试验证五个主页面返回 200,并验证 PDD 详情包含店铺名、
价格采样提示、“✓ 实测”和“推断”。
- **没验证到的部分**:尚未由 #32 的真实 Client 和 Android 手机完成端到端提交;
尚未在真实浏览器中人工检查 1366×768 下新增列的视觉效果。接口、迁移和模板
渲染已通过自动测试。
## 相关提交
- `93beef8` `feat: 保存并展示 PDD 店铺与价格采样信息 (#31)`