AutoRpa/rpa_oms/README.md

96 lines
3.7 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.

# rpa_oms
订单中心四个 HTTP 口,一个 FastAPI。HTTP 收件不同步跑作业。作业在 `rpa_selection` / `rpa_cart` / `rpa_contract` / `rpa_rebate`。
口径:`docs/RPA订单中心接口开发口径_20260930.md`。DDL:`docs/ddl/rpa_oms_staging_tables.sql`。
| 口 | 方向 | 底表 | 代码 |
| --- | --- | --- | --- |
| 1 | 订单中心 → 本方 | `rpa_sales_goods_mapping_data` | `POST /api/oms/v1/sales-goods` |
| 2 | 本方 → 订单中心 | `rpa_cart_settlement_goods_data` | `app/outbound/cart_settlement.py` 取 `push_status=0` 组装报文。路径仍空,不发 HTTP |
| 3 | 订单中心 → 本方 | `rpa_purchase_contract_data` | `POST /api/oms/v1/purchase-contracts`,按对方 `fid` 幂等 |
| 4 | 本方 → 订单中心 | `rpa_contract_agreement_result` | `app/outbound/contract_agreement.py` 取 `push_status=0` 组装报文。路径仍空,不发 HTTP |
入站(1、3):
- 鉴权:header `X-Oms-Token`,环境变量 `OMS_INBOUND_TOKEN`
- 信封:`{"data":[...]}`,一批最多 100 条
- 接口 1 落表 `deal_flag=0`,请求里不跑选品
- 接口 3 落表 `process_status=0`,请求里不录合同
接口 2 出站组装:`load_cart_settlement_envelope(repo)`,同一 `omsId` 不拆批,一批最多 500 条。不改 `push_status`。
```python
from app.outbound.cart_settlement import load_cart_settlement_envelope
from app.outbound.oracle_repo import OracleCartSettlementRepo
envelope = load_cart_settlement_envelope(OracleCartSettlementRepo.from_env())
```
接口 4 出站组装:`load_contract_agreement_envelope(repo)`,同一非空 `contractNo` 不拆批,一批最多 500 条。不改 `push_status`。
```python
from app.outbound.contract_agreement import load_contract_agreement_envelope
from app.outbound.oracle_repo import OracleContractAgreementRepo
envelope = load_contract_agreement_envelope(OracleContractAgreementRepo.from_env())
```
运行时只落 / 读 Oracle。单测用内存替身,不连库:`uv run pytest -v`。
## 真库
Oracle 11.2 需要 Instant Client(thick)。密码只放本机 `rpa_oms/.env`(已 gitignore),不要写进仓库、README、命令行历史。
```bash
cd rpa_oms
uv sync --python 3.12
export OMS_INBOUND_TOKEN=dev-oms-token
export RPA_ORACLE_HOST=192.168.12.244
export RPA_ORACLE_PORT=1521
export RPA_ORACLE_SERVICE=rpa
export RPA_ORACLE_USER=rpainit
export RPA_ORACLE_PASSWORD=...
export RPA_ORACLE_THICK=1
# 如需指定 Instant Client 目录:
# export RPA_ORACLE_CLIENT_LIB=/path/to/instantclient
uv run uvicorn app.main:app --reload --port 8001
```
缺 `RPA_ORACLE_HOST` / 用户 / 密码时,收件接口回 503。
## Windows 真库
本机 Mac 打不到 `192.168.12.244`,连库测试在 Windows 上做。Python 3.12 + Instant Client(位数一致),密码不要写进仓库。
PowerShell:
```powershell
cd rpa_oms
uv sync --python 3.12
Copy-Item -LiteralPath .env.example -Destination .env
# 只编辑本机 .env 的 RPA_ORACLE_PASSWORD,不要 git add .env
.\start.ps1
```
先 `GET http://127.0.0.1:8001/health`,再把 `examples/sales_goods_batch.json` POST 两次:
1. 第一次:两条 `ACCEPTED`,表里各一行 `deal_flag=0`
2. 第二次:两条 `DUPLICATE`,表行数不变
```powershell
curl.exe -sS http://127.0.0.1:8001/api/oms/v1/sales-goods `
-H "Content-Type: application/json" `
-H "X-Oms-Token: dev-oms-token" `
--data-binary "@examples/sales_goods_batch.json"
```
接口 3 同样 POST 两次 `examples/purchase_contract_batch.json`:第一次两条 `ACCEPTED`(`process_status=0`),第二次两条 `DUPLICATE`。
```powershell
curl.exe -sS http://127.0.0.1:8001/api/oms/v1/purchase-contracts `
-H "Content-Type: application/json" `
-H "X-Oms-Token: dev-oms-token" `
--data-binary "@examples/purchase_contract_batch.json"
```