feat(t223): generate tasks from freight items
This commit is contained in:
+28
-5
@@ -257,18 +257,41 @@ Connector 未登录、找不到货运单、响应协议错误和暂时不可用
|
||||
|
||||
### `POST /api/v1/freight-items/{item_id}/procurement-request`
|
||||
|
||||
T-223 创建或重放该商品当前 revision 的采购需求。标题、SKU/规格或数量不合法时返回
|
||||
`422 FREIGHT_ITEM_NOT_PURCHASABLE`;不调用 VLM 补字段。
|
||||
T-223 创建或重放该商品当前 revision 的采购需求。ERP 数字状态不自动解释,ADMIN
|
||||
必须显式确认仍需采购:
|
||||
|
||||
```json
|
||||
{"confirm_procurement_needed":true}
|
||||
```
|
||||
|
||||
请求快照保留 title、product spec、SKU、quantity、来源 hash/revision 和当时的取消/
|
||||
采购状态。缺标题、SKU、正整数数量或来源明确取消时创建为 `BLOCKED`,不调用 VLM
|
||||
补字段;字段合格但没有受控参考图时为 `NEEDS_IMAGE`。
|
||||
|
||||
### `PUT /api/v1/procurement-requests/{id}/reference-asset`
|
||||
|
||||
绑定当前 ADMIN 已上传的 `TASK_REFERENCE` asset。asset 必须尚未属于其他任务/请求,
|
||||
内容仍走既有解码、像素、规范化和 hash 校验。
|
||||
内容仍走既有解码、像素、规范化和 hash 校验。请求体:
|
||||
|
||||
```json
|
||||
{"image_asset_id":"2bbc1bf2-30f7-497e-a52b-bcb4c61d57c3"}
|
||||
```
|
||||
|
||||
绑定成功后进入 `READY`。来源 revision/hash 或货运取消标记已变化时返回
|
||||
`409 PROCUREMENT_SOURCE_CHANGED`。
|
||||
|
||||
### `POST /api/v1/procurement-requests/{id}/purchase-task`
|
||||
|
||||
必须带 `Idempotency-Key`。只有 `READY` request 可生成任务;同一 request revision
|
||||
并发或重试返回同一 task。来源后续更新不修改已生成任务。
|
||||
必须带 `Idempotency-Key`,请求体是空 JSON 对象 `{}`。只有 `READY` request 可生成
|
||||
任务;task、`purchase_task_sources` 和 request 的 `TASK_CREATED` 状态在同一事务内
|
||||
提交。同一 request revision 即使使用不同幂等 key 重试也返回同一 task。来源后续
|
||||
更新只显示 `source_changed=true`,不修改 PENDING、CLAIMED、RUNNING 或终态任务。
|
||||
|
||||
管理 Web 在 `/freight/{id}` 内提供对应的人工确认、参考图上传和生成任务操作;写操作
|
||||
分别使用 `/freight/items/{id}/procurement-request`、
|
||||
`/freight/procurement-requests/{id}/reference` 和
|
||||
`/freight/procurement-requests/{id}/purchase-task`,均受 ADMIN session 与 CSRF
|
||||
保护。
|
||||
|
||||
## 采购任务
|
||||
|
||||
|
||||
+10
-8
@@ -5,7 +5,7 @@
|
||||
## 当前快照
|
||||
|
||||
- 日期:2026-07-28
|
||||
- 阶段:T-222 已完成,T-223 待采购需求提取与任务生成已领取
|
||||
- 阶段:T-223 已完成,T-224 ERP 日期增量同步已领取
|
||||
- Git:当前分支为 `main`;T-001 至 T-004、T-101 至 T-104、T-201 至 T-219
|
||||
均按文档提交、实现提交的顺序纳入历史
|
||||
- 生产代码:`android-buyer/` 已接入 Roubao Android 源码
|
||||
@@ -17,14 +17,16 @@
|
||||
- ERP 货运:Go 后端通过仅限 loopback、服务密钥鉴权的 Python Connector 异步按
|
||||
完整单号同步;v12 保存同步记录、货运头和全部明细,canonical hash 控制 revision,
|
||||
Admin 已有 `/freight`、`/freight/import`、`/freight/{id}` 与对应 JSON API。
|
||||
- 采购需求:v13 按货运商品 revision 保存可复核快照;ADMIN 显式确认采购、上传参考
|
||||
图后生成不可变 PENDING 任务。来源变化不会改写任务,Roubao 可沿用现有 claim 流程。
|
||||
- 本机 Android 工具:JDK 17.0.13、Command-line Tools 22.0、SDK 34、
|
||||
Build Tools 34.0.0、Platform Tools/ADB 37.0.0;用户级 SDK 环境变量已设置
|
||||
- Android Studio:未安装;`winget` 静默安装卡住后已终止,不阻塞命令行构建
|
||||
- 测试:T-219 Android Debug/Release 单元测试与构建和根 `init.ps1` 通过;
|
||||
Debug APK `1.4.16 (21)` 已覆盖安装到 PKG110
|
||||
- 后端测试:T-222 运行 `go test ./...`、`go test -race ./...`、`go vet ./...`;
|
||||
覆盖货运 migration 降级保护、严格 Connector 字段白名单、重复导入/revision、
|
||||
中断恢复、Admin API/SSR 鉴权和 PII 缺失断言
|
||||
- 后端测试:T-223 运行 `go test ./...`、`go test -race ./...`、`go vet ./...`;
|
||||
覆盖采购需求 migration 降级保护、一商品一需求、阻塞字段、图片唯一绑定、任务
|
||||
并发重放、来源变化后任务不变、Roubao claim 和 Admin API/SSR
|
||||
- 原型:4 个管理 Web 页面和 7 个 Android 页面均可离线独立打开;Playwright
|
||||
以 1440×900、390×844、360×800 验证 36 个页面/视口组合,无页面横向溢出、
|
||||
脚本错误或外部请求,Android 可见交互控件均不小于 44px
|
||||
@@ -162,8 +164,8 @@
|
||||
| `docs/tasks/T-220.md` | DONE | 顺运宝 ERP 字段契约与凭证安全基线 |
|
||||
| `docs/tasks/T-221.md` | DONE | 顺运宝精确单号 Connector |
|
||||
| `docs/tasks/T-222.md` | DONE | 货运信息存储、API 与 Admin 页面 |
|
||||
| `docs/tasks/T-223.md` | DOING | 待采购需求提取与任务生成 |
|
||||
| `docs/tasks/T-224.md` | TODO | ERP 日期增量同步 |
|
||||
| `docs/tasks/T-223.md` | DONE | 待采购需求提取与任务生成 |
|
||||
| `docs/tasks/T-224.md` | DOING | ERP 日期增量同步 |
|
||||
| `docs/design/` | 已确认 | T-202 原型索引、4 个管理页和 7 个 Android 页面 |
|
||||
| `deepseek总结.txt` | 已有 | 历史讨论摘要,不是正式需求权威 |
|
||||
| `android-buyer/` | 已有 | Roubao `main` 固定 commit 的 Android 基线 |
|
||||
@@ -176,8 +178,8 @@
|
||||
## 任务摘要
|
||||
|
||||
- 已完成:T-001 至 T-004、T-101 至 T-104、T-201 至 T-219。
|
||||
- 已完成:另含 T-220 至 T-222 ERP 契约、Connector、货运存储/API/Admin。
|
||||
- 进行中:T-223 待采购需求提取与任务生成。
|
||||
- 已完成:另含 T-220 至 T-223 ERP 契约、Connector、货运存储和采购需求生成。
|
||||
- 进行中:T-224 ERP 日期增量同步。
|
||||
- 下一步:完成 T-223 采购需求生成和 T-224 日期增量同步,再进入 T-301 P0 UI
|
||||
完整交互验收。
|
||||
|
||||
|
||||
+13
-6
@@ -4,7 +4,7 @@ title: 待采购需求提取与任务生成
|
||||
phase: 2
|
||||
deps:
|
||||
- T-222
|
||||
status: TODO
|
||||
status: DONE
|
||||
created: 2026-07-28
|
||||
context_ref: 78dc595
|
||||
work_branch: null
|
||||
@@ -50,11 +50,11 @@ Roubao 队列。
|
||||
|
||||
## 验收要点
|
||||
|
||||
- [ ] 一货运单多商品形成多条独立采购需求。
|
||||
- [ ] 缺标题/SKU/数量/图片和来源状态不明时不能生成任务。
|
||||
- [ ] 同一 revision 并发/重试只生成一个采购任务。
|
||||
- [ ] 来源变化不覆写 PENDING/CLAIMED/RUNNING/终态任务。
|
||||
- [ ] 生成任务可被现有 Roubao claim,原始字段和参考图 hash 一致。
|
||||
- [x] 一货运单多商品形成多条独立采购需求。
|
||||
- [x] 缺标题/SKU/数量/图片、明确取消或未人工确认时不能生成任务。
|
||||
- [x] 同一 revision 并发/重试只生成一个采购任务。
|
||||
- [x] 来源变化不覆写 PENDING/CLAIMED/RUNNING/终态任务。
|
||||
- [x] 生成任务可被现有 Roubao claim,原始字段和参考图 hash 一致。
|
||||
|
||||
## 边界
|
||||
|
||||
@@ -65,3 +65,10 @@ Roubao 队列。
|
||||
## 执行记录
|
||||
|
||||
- 2026-07-28:任务合约已冻结,等待 T-222。
|
||||
- 2026-07-28:新增 v13 `procurement_requests` 与不可变
|
||||
`purchase_task_sources`;来源数字状态不猜测,由 ADMIN 显式确认是否仍需采购。
|
||||
- 2026-07-28:参考图绑定、任务和来源快照采用唯一约束与单事务;ERP 更新后旧任务
|
||||
保持原始标题、SKU、数量和 asset,旧请求显示来源变化,当前 revision 可新建需求。
|
||||
- 2026-07-28:真实 Gin/SQLite SSR 流程完成确认需求、上传规范化参考图、生成 PENDING
|
||||
任务;同任务可由既有 Roubao claim。Playwright 三种视口无横向溢出、短按钮或页头
|
||||
重叠;未调用 VLM 或真实 ERP。
|
||||
|
||||
Reference in New Issue
Block a user