# 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" ```