AutoRpa/rpa_contract/README.md

4.9 KiB
Raw Permalink Blame History

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 是对外入口。

  1. 打开合同系统并登录(contract_login.py S02–S05)
  2. 进起草,套非格式采购协议模板(直达 FORM_PAGE_URL)
  3. 签约方:客户编码、客户名称(contract_form.py S06)
  4. 尽调:页面正文含「未尽调」则本单失败,不提交
  5. 基础信息:合同版本类型、合同类别、结算类型、合同背景概述、合同性质=主合同(S07)
  6. 金额与日期:签订日 / 开始日 / 结束日用接口 3 第一行三日期(JSON 干跑未给则回退 orderDate)(S08)
  7. 货品明细:弹窗按操作码搜,找不到则本单失败(contract_goods.py S09)
  8. 付款与标志:这期一律账期,不勾预付款;页面「账期支付」对应选项「电汇」(S10)
  9. 挂合同正文(contract_upload.py S11);点提交(contract_submit.py S12),不要只点暂存
  10. 按 fdId 从详情读正式合同号(contract_number.py S13)

选择器、工具栏、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/。点击顺序和选择器本段不改。