2026-08-07 17:14:12 +08:00
|
|
|
|
# 31 Admin:采集结果增加店铺名与价格采样粒度
|
|
|
|
|
|
|
|
|
|
|
|
- 类型:需求
|
|
|
|
|
|
- 父级大工单:#14
|
|
|
|
|
|
- 所属 MVP / 版本:#15 / MVP
|
2026-08-09 10:19:11 +08:00
|
|
|
|
- 状态:验收通过
|
2026-08-07 17:14:12 +08:00
|
|
|
|
- 日期: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)`
|