Files
cmroubao/docs/tasks/T-222.md
T

69 lines
2.5 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.
---
id: T-222
title: 货运信息存储 API 与 Admin 页面
phase: 2
deps:
- T-221
status: DOING
created: 2026-07-28
context_ref: 78dc595
work_branch: null
write_paths:
- backend-api/cmd/**
- backend-api/internal/config/**
- backend-api/internal/domain/**
- backend-api/internal/usecase/**
- backend-api/internal/repository/sqlite/**
- backend-api/internal/transport/httpapi/**
- backend-api/internal/transport/webui/**
- backend-api/migrations/**
- docs/api.md
- docs/routes.md
- docs/tasks/T-222.md
- docs/current-state.md
---
## 问题 / 背景
现有 `purchase_tasks.source_ref` 只能防止任务重复创建,无法表示 ERP 同步、货运头、
多商品明细、来源版本和待处理异常。需要独立货运数据层,Admin 先查看来源事实,再
进入采购需求生成。
## 关联需求与交互
- 功能:F-011
- 用户故事:US-011
- 交互:IX-012
- 架构/API:`erp_sync_runs`、`freight_orders`、`freight_order_items`
## 方案
1. 新增 migration,按 creator scope 保存同步记录、货运单和商品明细。
2. 唯一键分别为 `(creator, source_system, external_stock_id)` 和
`(freight_order_id, external_item_id)`;重复响应按 canonical hash 幂等 upsert。
3. 只保存采购和审计必要字段;不保存收件人姓名、电话、详细地址、Cookie/JWT 或
未裁剪原始响应。
4. Admin 创建“按单号导入”同步记录,由后台有界调用 loopback Connector;请求返回
job id,不把验证码/ERP 延迟绑定到浏览器长请求。
5. 新增 `/freight` 列表、`/freight/import` 和 `/freight/{id}` 详情;页面展示来源
单号、店铺、ERP 时间、状态、明细数量、同步状态和可修复异常。
6. 进程重启时遗留 RUNNING job 转稳定失败;失败不写半批货运数据。
## 验收要点
- [ ] migration up/down/up 和降级保护通过。
- [ ] 重复导入不重复货运单/明细,来源变化产生版本/hash 更新和审计时间。
- [ ] 多商品、空详情、重复外部 ID、超限及 connector 失败均有集成测试。
- [ ] Admin API/SSR 鉴权、CSRF、no-store、响应式页面和 PII 缺失断言通过。
- [ ] `go test ./...`、race、vet 和根验证通过。
## 边界
- 不在本任务生成采购任务。
- 不自动下载 `productThumb`,只保存非秘密 ERP 引用。
- 不按 ERP 数字状态自动判断“应采购”,状态枚举确认属于 T-223。
## 执行记录
- 2026-07-28:任务合约已冻结;T-221 完成后领取。