4.9 KiB
rpa_contract
合同班。从表 3 领取、按 supplierId 合单、调页面录入、写表 4。接口 4 组包在 rpa_oms,本班不推、不改 push_status。
| 读 | 表 3 rpa_purchase_contract_data(process_status=0;跳过 contractEntryStatus=0 且已有 contractNo 的协议重录行) |
| 写 | 表 4 rpa_contract_agreement_result(actionCode=1,提交成功 contractStatus=1 起草) |
| 口 | 口 3 收件在 rpa_oms;口 4 组包在 oms,path 空 |
一天两班(中午、下午)。启动瞬间冻结本班名单(process_status 0→3)。按 supplierId 合单;头字段取该班该供应商第一行。下午同一供应商另开一份。
口径:docs/RPA订单中心接口开发口径_20260930.md 第 4 节;合单细节见 docs/合同系统录入流程.md。
测试环境
地址:http://contract-test.gzmpc.com:8080/
账密只认环境变量 CONTRACT_USERNAME / CONTRACT_PASSWORD,缺则入口失败。不要把密码写进仓库。
客商必须是合同系统里真实存在的操作码,占位符搜不到。例如 DW0100046361 / 重庆亿昊药业有限公司。
页面步骤
脚本直达起草/模板 URL。修一步只打开对应文件;contract_flow_steps.py 是对外入口。
- 打开合同系统并登录(
contract_login.pyS02–S05) - 进起草,套非格式采购协议模板(直达
FORM_PAGE_URL) - 签约方:客户编码、客户名称(
contract_form.pyS06) - 尽调:页面正文含「未尽调」则本单失败,不提交
- 基础信息:合同版本类型、合同类别、结算类型、合同背景概述、合同性质=主合同(S07)
- 金额与日期:签订日 / 开始日 / 结束日用接口 3 第一行三日期(JSON 干跑未给则回退
orderDate)(S08) - 货品明细:弹窗按操作码搜,找不到则本单失败(
contract_goods.pyS09) - 付款与标志:这期一律账期,不勾预付款;页面「账期支付」对应选项「电汇」(S10)
- 挂合同正文(
contract_upload.pyS11);点提交(contract_submit.pyS12),不要只点暂存 - 按 fdId 从详情读正式合同号(
contract_number.pyS13)
选择器、工具栏、fdId 在 contract_common.py。
运行
JSON 干跑(不领表):
cd rpa_contract
uv sync --python 3.12
uv run pytest tests/test_job.py::test_job_merges_same_supplier_and_writes_table4 -q
uv run python main.py --input-json examples/contract_create_input_dry_run.json
班次(领表 3):
uv run python run_batch.py
submitMode=dry_run 跑到提交前,不点提交。真起草用 examples/contract_draft_yyc.json / examples/contract_draft_xyy.json。
运维
怎么跑
cd rpa_contract
uv sync --python 3.12
uv run python run_batch.py
Oracle 空缺时补 rpa_oms/.env。连接从 rpa_oracle 池取,班次默认池大小 1。缺 RPA_ORACLE_HOST / 用户 / 密码时入口失败,文案「数据库不可用」。合同系统账密用 CONTRACT_USERNAME / CONTRACT_PASSWORD。未捕获异常原文进 rpa_shift_error_audit,Windows 上先执行 docs/ddl/rpa_oms_staging_tables.sql 里这张表。
JSON 干跑(不领表):
uv run python main.py --input-json examples/contract_create_input_dry_run.json
看哪张表哪几列
- 表 3
rpa_purchase_contract_data:process_status(0 待领,3 处理中,1 成功,2 失败)、process_time、process_result、supplier_id、contract_entry_status、contract_no - 表 4
rpa_contract_agreement_result:action_code=1、contract_status(1 起草成功,3 失败)、contract_no、contract_fail_reason、push_status=0
崩溃改回 SQL
停在 3 且未过 30 分钟租约:
UPDATE rpa_purchase_contract_data
SET process_status = 0
WHERE process_status = 3 AND fid = :fid;
过期的 3 下一班会再领,不必改。协议重录行(contract_entry_status=0 且已有 contract_no)本班不领。
原因列 vs 日志原文
表 3 process_result / 表 4 contract_fail_reason:尽调写「客户未尽调」,页面 NodeError 写业务文案,未捕获异常写 PAGE_FAILED。异常原文打本机日志,不进这两列。
点名命令
cd rpa_contract
uv run pytest tests/test_job.py::test_job_merges_same_supplier_and_writes_table4 -q
uv run pytest tests/test_job.py::test_job_marks_diligence_fail -q
uv run pytest tests/test_oracle_repo.py::test_from_env_without_user_raises -q
uv run pytest tests/test_job.py::test_claim_reclaims_expired_status_3 tests/test_job.py::test_claim_skips_fresh_status_3 -q
uv run pytest tests/test_flow_gates.py -q
页面验收只看控制台 ACCEPT SUMMARY 或 screenshots/ 下 ACCEPT.txt,禁止读 png。
本期不做
向订单中心发 HTTP、改 push_status。返利在 rpa_rebate/。点击顺序和选择器本段不改。