AutoRpa/rpa_yisaiqi/runners/mock.py

61 lines
2.3 KiB
Python

"""Mock runners for Mac-side state-machine verification."""
from __future__ import annotations
import uuid
from typing import Any
from ..runtime.errors import NodeError
def run(node_code: str, job: dict[str, Any], client: Any) -> dict[str, Any]:
if node_code == "ORDER_FETCH":
return run_order_fetch(job, client)
if node_code == "OCR_EXTRACT":
return {"summary": {"ocr": "mock"}}
if node_code == "CONTRACT_CREATE":
contract_no = f"HT{str(job.get('order_date') or '').replace('-', '')}{uuid.uuid4().hex[:5].upper()}"
return {"businessRefs": {"contractSystemNo": contract_no}, "summary": {"sourceType": job.get("source_type")}}
if node_code == "REBATE_HEADER":
return {"businessRefs": {"rebateOrderNo": f"FL-{uuid.uuid4().hex[:8].upper()}"}}
if node_code == "REBATE_IMPORT":
return {"summary": {"imported": 1, "failed": 0}}
if node_code == "REBATE_SUBMIT":
return {"summary": {"submitted": True}}
if node_code == "M5_CREATE_ORDER":
return {"businessRefs": {"m5OrderNo": f"M5-{uuid.uuid4().hex[:8].upper()}"}, "summary": {"autoSave": False}}
if node_code == "ARCHIVE_JOB":
return {"summary": {"archived": True}}
raise NodeError(f"no mock runner for {node_code}")
def run_order_fetch(job: dict[str, Any], client: Any) -> dict[str, Any]:
order_date = str(job.get("order_date") or "2026-08-12")
order_no = f"DD-{order_date.replace('-', '')}-001"
rows = [
{
"orderNo": order_no,
"rawProductName": "阿卡波糖片",
"platformProductCode": "YP-001",
"spec": "50mg*30片",
"manufacturer": "示例制药",
"approvalNo": "国药准字H00000001",
"qty": 100,
"unitPrice": 25.5,
"sourceRowNo": 1,
}
]
if hasattr(client, "ingest_items"):
client.ingest_items(job["job_id"], rows, replace=True)
return {
"summary": {
"orderCount": 1,
"supplierList": [job.get("supplier_name")],
"orderNoList": [order_no],
},
"artifacts": [{
"artifactType": "SOURCE_EXCEL",
"storagePath": f"/tmp/mock_rpa_data/orders_{job.get('supplier_name')}_{order_date}.xlsx",
"fileHash": "sha256:mock-order-excel",
}],
}