AutoRpa/rpa_mock/order_fetch_mock.py

107 lines
3.5 KiB
Python
Raw Permalink 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.

#!/usr/bin/env python3
"""
ORDER_FETCH 节点 Mock 实现
模拟从医药城/小药药导出订单,实际返回本地生成的假数据
"""
import requests
import hashlib
from pathlib import Path
from mock_orders import generate_mock_orders
from datetime import datetime, timedelta
STATE_CENTER_URL = "http://localhost:8000" # 状态中心地址
AGENT_TOKEN = "dev-agent-token-12345" # 开发令牌(和state_center的配置一致)
def calculate_file_hash(filepath: str) -> str:
"""计算文件SHA256哈希"""
sha256 = hashlib.sha256()
with open(filepath, 'rb') as f:
for chunk in iter(lambda: f.read(4096), b''):
sha256.update(chunk)
return f"sha256:{sha256.hexdigest()}"
def mock_order_fetch(job_id: str, order_date: str, source_type: str = "YYC"):
"""
模拟 ORDER_FETCH 节点执行
Args:
job_id: 单据ID
order_date: 订单日期
source_type: 来源类型 YYC/XYY/OFFLINE
"""
print(f"\n{'='*60}")
print(f"🤖 [Mock RPA] ORDER_FETCH 开始执行")
print(f" Job ID: {job_id}")
print(f" 订单日期: {order_date}")
print(f" 来源: {source_type}")
print(f"{'='*60}\n")
# 1. 调用 start 回调
print("📞 调用状态中心 /start 回调...")
start_resp = requests.post(
f"{STATE_CENTER_URL}/api/jobs/{job_id}/nodes/ORDER_FETCH/start",
headers={"X-Agent-Token": AGENT_TOKEN},
json={
"attemptNo": 1,
"executorRunId": f"MOCK-RUN-{datetime.now().strftime('%Y%m%d%H%M%S')}",
"executorPlatform": "mock-rpa",
"operator": "mock-script"
}
)
print(f" 响应: {start_resp.status_code} - {start_resp.json()}\n")
# 2. 生成假订单数据
print("📦 生成模拟订单数据...")
supplier_name = "重庆亿昊药业" if source_type == "YYC" else "华润医药"
excel_path = generate_mock_orders(supplier_name, order_date, source_type, item_count=8)
print()
# 3. 计算文件哈希
file_hash = calculate_file_hash(excel_path)
# 4. 调用 complete 回调
print("📞 调用状态中心 /complete 回调...")
order_nos = [f"DD-{order_date.replace('-', '')}-{i+1:03d}" for i in range(8)]
complete_resp = requests.post(
f"{STATE_CENTER_URL}/api/jobs/{job_id}/nodes/ORDER_FETCH/complete",
headers={"X-Agent-Token": AGENT_TOKEN},
json={
"attemptNo": 1,
"executorRunId": f"MOCK-RUN-{datetime.now().strftime('%Y%m%d%H%M%S')}",
"executorPlatform": "mock-rpa",
"operator": "mock-script",
"summary": {
"orderCount": 8,
"supplierList": [supplier_name],
"orderNoList": order_nos
},
"artifacts": [
{
"artifactType": "SOURCE_EXCEL",
"storagePath": excel_path,
"fileHash": file_hash
}
]
}
)
print(f" 响应: {complete_resp.status_code}")
result = complete_resp.json()
print(f" next_node: {result.get('next_node')}")
print(f" job_status: {result.get('job_status')}\n")
print(f"✅ ORDER_FETCH 完成!下一节点: {result.get('next_node')}\n")
return result
if __name__ == "__main__":
# 示例:模拟昨天的医药城订单
yesterday = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
job_id = f"YYC-重庆亿昊药业-{yesterday.replace('-', '')}-001"
mock_order_fetch(job_id, yesterday, "YYC")