feat(t227): query ERP directly from Go

This commit is contained in:
QiuSW
2026-07-29 10:05:25 +08:00
parent a5a61c05d0
commit a822edd1b2
10 changed files with 682 additions and 97 deletions
+11 -34
View File
@@ -164,28 +164,10 @@ T-203 成功返回 `201`。使用相同 `Idempotency-Key` 和相同图片内容
受鉴权的文件流。只能读取用户有权查看的任务资产;不返回服务端文件路径。
## ERP Connector 与货运信息
## Go ERP 会话与货运信息
Connector 是 loopback 内部服务,不复用 ADMIN/BUYER 凭证。除 `/health` 外要求
`X-API-Key`,密钥至少 32 字节并由两进程环境变量注入;请求和响应不得写 body 日志。
### Connector `POST /v1/freight/query`
```json
{"mode":"ORDER_NUMBER","order_number":"完整单号"}
```
或按 Asia/Shanghai 自然日闭区间查询,单次最多 7 天:
```json
{
"mode":"CREATED_RANGE",
"created_from":"2026-07-22",
"created_to":"2026-07-28"
}
```
成功返回最小化规范结构:
顺运宝仅由 Go API 进程直连;浏览器不复用 ERP 凭证,也不接收 Cookie、JWT、用户资料或
原始响应。货运同步只接收以下最小化规范结构:
```json
{
@@ -267,7 +249,7 @@ T-224 增加:
从成功水位前回看 10 分钟对应的自然日开始,后端再按最多 7 天切窗。
响应 `202`,返回 sync id/status。订单号不进入 URL、事件 message 或访问日志;数据库
只保存规范值及用于审计/检索的受控字段,不保存 Connector 密钥。
只保存规范值及用于审计/检索的受控字段,不保存 ERP 凭证、Cookie 或 JWT。
### `GET /api/v1/freight-syncs/{sync_id}`
@@ -283,24 +265,19 @@ T-224 增加:
### `GET /api/v1/freight-orders`
返回当前 ADMIN creator 最近更新的货运单并支持 `limit`(1..100)。响应不包含
收件人字段或 Connector 原文;列表筛选和 cursor 后置,不属于本次日期同步闭环。
收件人字段或 ERP 原文;列表筛选和 cursor 后置,不属于本次日期同步闭环。
### `GET /api/v1/freight-orders/{id}`
T-222 返回货运头、全部当前商品明细和 revision/hash 状态。T-223 再增加采购需求和
已生成 task 引用。不存在和跨 creator 统一 404;响应 `Cache-Control: no-store`。
T-222 精确单号同步需要 Go 后端配置:
- `CMROUBAO_ERP_CONNECTOR_URL`:默认 `http://127.0.0.1:8091`,只接受 HTTP
loopback origin。
- `CMROUBAO_ERP_CONNECTOR_API_KEY`:与 Connector 的
`SHUNYUNBAO_SERVICE_API_KEY` 相同,至少 32 UTF-8 字节;未设置时后端可启动,
但同步任务稳定失败为 `ERP_CONNECTOR_NOT_CONFIGURED`。
Connector 未登录、找不到货运单、响应协议错误和暂时不可用分别落为
`ERP_SESSION_REQUIRED`、`ERP_FREIGHT_NOT_FOUND`、`ERP_RESPONSE_INVALID` 和
`ERP_CONNECTOR_UNAVAILABLE`,不返回 ERP 原始错误 body。
T-227 的后台 worker 使用当前 Go 内存会话,按 `listTotal -> list 分页 -> listByStock`
查询。每次先校验会话;列表最多 100 条、每页 20 条,详情每批最多 100 个外部 stock ID。
未配置、未登录、找不到货运单、响应协议错误和暂时不可用分别落为
`ERP_NOT_CONFIGURED`、`ERP_SESSION_REQUIRED`、`ERP_FREIGHT_NOT_FOUND`、
`ERP_RESPONSE_INVALID` 和 `ERP_UNAVAILABLE`,不返回 ERP 原始错误 body。旧 Python
Connector 仅在仓库中等待 T-228 删除,不再是运行时依赖。
### `POST /api/v1/freight-items/{item_id}/procurement-request`