AutoRpa/rpa_rebate/README.md

129 lines
6.2 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_rebate
返利班。领表 4 起草行、表 3 只录协议行,按合同号查返利中心。搜到后同一班走总单 → 细单新增 → 送审;送审成功才写表 4。接口 4 组包在 `rpa_oms`,本班不推、不改 `push_status`。细单不做 Excel 导入。现行字段见 `现行模式.md`、`返利流程.md`。
| | |
| --- | --- |
| 读 | 表 4 `action_code=1 AND contract_status=1`(已有合同号、尚未回成功);表 3 `contract_entry_status=0` 且已有 `contractNo` |
| 写 | 表 4:搜到则起草行 `contractStatus=2`;送审成功插 `actionCode=2`、`agreementStatus=1`,带总单/细单号 |
| 口 | 口 4(组包在 oms,path 空) |
与合同同一天两班,建议合同班跑完再跑。查号挂在本班,不单开查状态任务。搜不到不重录合同,表 4 `process_status` 改回 `0`,留给下一班再搜。
口径:`docs/RPA订单中心接口开发口径_20260930.md` 第 5 节。
## 运行
内存替身(不连库、不开浏览器):
```bash
cd rpa_rebate
uv sync --python 3.12
uv run pytest tests/test_job.py::test_job_finds_contract_and_writes_agreement -q
uv run pytest tests/test_finder.py::test_find_flow_writes_accept_for_missing_number -q
uv run pytest tests/test_header.py::test_header_flow_writes_accept_with_order_no -q
uv run pytest tests/test_import.py::test_import_flow_writes_accept_with_success_fail -q
uv run pytest tests/test_submit.py::test_submit_flow_writes_accept_with_order_nos -q
```
页面查号(不开录协议、不连 Oracle)。账号放本机 `.env`:
```bash
cd rpa_rebate
uv run python run_find.py
```
验收看控制台 `ACCEPT SUMMARY REBATE_FIND` 或 `screenshots/REBATE_FIND/ACCEPT.txt`。默认搜哨兵号,期望 `found=no`。要搜真号:`REBATE_ACCEPT_CONTRACT_NO=合同号`。
页面总单(复用查号已登录 Chrome,不送审、不连 Oracle):
```bash
cd rpa_rebate
uv run python run_header.py
```
验收看控制台 `ACCEPT SUMMARY REBATE_HEADER` 或 `screenshots/REBATE_HEADER/ACCEPT.txt`。需要 `REBATE_ACCEPT_CONTRACT_NO`。优先表 3:供应商 MDM、货品行。计划员「廖建琦」,联系人「苏文辉」,承付「下月N号结」,承付参数 `25`,结算「电汇」,协议开始/结束当天。卡片仍在「编辑」时点总单工具栏保存。
页面细单新增(复用查号已登录 Chrome,不送审、不写 `actionCode=2`、不连 Oracle,不做 Excel):
```bash
cd rpa_rebate
uv run python run_import.py
```
验收看控制台 `ACCEPT SUMMARY REBATE_IMPORT` 或 `screenshots/REBATE_IMPORT/ACCEPT.txt`,须货品表有行。需要 `REBATE_ACCEPT_CONTRACT_NO`。表 3 有货品则按行新增;空缺再用 `REBATE_GOODS_ID` / `REBATE_QTY` / `REBATE_TAX_PRICE` / `REBATE_ORDER_NO`(或 `REBATE_IMPORT_LINES` JSON,字段 `goodsId`)。货品编码三个点按货品ID搜。细单备注=订单号,特定补偿=0,承付参数=25。不要用操作码或 MDM 码去搜。
页面送审(复用查号已登录 Chrome,不写 `actionCode=2`、不连 Oracle、不推口 4):
```bash
cd rpa_rebate
uv run python run_submit.py
```
验收看控制台 `ACCEPT SUMMARY REBATE_SUBMIT` 或 `screenshots/REBATE_SUBMIT/ACCEPT.txt`,须带总单号/细单号。需要 `REBATE_ACCEPT_CONTRACT_NO`。点完马上能看见号才回成功。
接口 4 组包(`rpa_oms`,不发 HTTP):
```bash
cd rpa_oms
uv run pytest tests/test_contract_agreement_outbound.py::test_assembles_unpushed_rows_as_document_envelope -q
```
## 运维
### 怎么跑
```bash
cd rpa_rebate
uv sync --python 3.12
uv run python run_batch.py
```
Oracle 空缺时补 `rpa_oms/.env`。连接从 `rpa_oracle` 池取,班次默认池大小 1。缺 `RPA_ORACLE_HOST` / 用户 / 密码时入口失败,文案「数据库不可用」。返利中心账密放本包 `.env`。未捕获异常原文进 `rpa_shift_error_audit`,Windows 上先执行 `docs/ddl/rpa_oms_staging_tables.sql` 里这张表。
### 看哪张表哪几列
- 表 4 `rpa_contract_agreement_result`:`action_code=1` 且 `contract_status=1` 的起草行;`process_status`(0 待查号,3 查号中,1 已回写,2 合同失败不进返利);`update_time`;`create_user_name` / `update_user_name` 固定「系统管理员」;送审成功另插 `action_code=2`、`agreement_status=1`、`agreement_id` / `agreement_dtl_id`;`push_status=0`
- 表 3 `rpa_purchase_contract_data`:只录协议行 `contract_entry_status=0` 且已有 `contract_no`;`process_status`(0 待领,3 处理中,1 成功,2 失败)、`process_time`、`process_result`
### 崩溃改回 SQL
表 4 停在 `process_status=3` 且未过 30 分钟租约。同一合同号一起改回:
```sql
UPDATE rpa_contract_agreement_result
SET process_status = 0
WHERE process_status = 3
AND TRIM(contract_no) = :contract_no;
```
表 3 只录协议行停在 3 且未过 30 分钟租约:
```sql
UPDATE rpa_purchase_contract_data
SET process_status = 0
WHERE process_status = 3 AND fid = :fid
AND NVL(contract_entry_status, -1) = 0
AND contract_no IS NOT NULL;
```
过期的 3 下一班会再领,不必改。搜不到会自动把表 4 改回 0、表 3 改回 0。
### 原因列 vs 日志原文
表 3 `process_result`:业务失败写页面文案(总单未拿到号、细单失败原因、送审失败);未捕获异常写 `HEADER_FAILED` / `IMPORT_FAILED` / `SUBMIT_FAILED` / `PAGE_FAILED`。异常原文打本机日志,不进这一列。表 4 搜不到不写失败原因,`process_status` 改回 0。
### 点名命令
```bash
cd rpa_rebate
uv run pytest tests/test_job.py::test_job_finds_contract_and_writes_agreement -q
uv run pytest tests/test_job.py::test_job_leaves_not_found_for_next_shift -q
uv run pytest tests/test_job.py::test_claim_reclaims_expired_claiming_stamp tests/test_job.py::test_claim_skips_fresh_claiming_stamp -q
uv run pytest tests/test_oracle_repo.py::test_from_env_without_user_raises -q
```
## 本期不做
货源细单ID、计划员改回订单中心、向订单中心发 HTTP、改 `push_status`。货源弹层按联系人「苏文辉」过滤,见 `返利流程.md`。页面步骤按节点拆在 `rebate_find.py` / `rebate_header.py` / `rebate_import.py` / `rebate_submit.py`,共用登录/查号/勾行/弹层在 `rebate_common.py`;`rebate_flow_steps.py` 仍是对外入口。