AutoRpa/rpa_mock/mock_orders.py

90 lines
2.9 KiB
Python

#!/usr/bin/env python3
"""
Mock 医药城/小药药订单数据生成器
用于在没有真实医药平台访问权限时,模拟 ORDER_FETCH 节点的输出
"""
import pandas as pd
from datetime import datetime, timedelta
import random
import os
# 假订单数据模板
MOCK_SUPPLIERS = [
"重庆亿昊药业",
"华润医药",
"国药控股",
"上海医药"
]
MOCK_PRODUCTS = [
{"name": "阿卡波糖片", "spec": "50mg*30片", "manufacturer": "示例制药", "approval_no": "国药准字H00000001"},
{"name": "二甲双胍片", "spec": "0.5g*60片", "manufacturer": "示例制药", "approval_no": "国药准字H00000002"},
{"name": "格列美脲片", "spec": "2mg*10片", "manufacturer": "示例制药", "approval_no": "国药准字H00000003"},
{"name": "阿托伐他汀钙片", "spec": "10mg*7片", "manufacturer": "示例制药", "approval_no": "国药准字H00000004"},
]
def generate_mock_orders(supplier_name: str, order_date: str, source_type: str = "YYC", item_count: int = 5):
"""
生成模拟订单Excel
Args:
supplier_name: 供应商名称
order_date: 订单日期 YYYY-MM-DD
source_type: 来源类型 YYC/XYY/OFFLINE
item_count: 订单明细行数
Returns:
生成的Excel文件路径
"""
rows = []
for i in range(item_count):
product = random.choice(MOCK_PRODUCTS)
rows.append({
"订单号": f"DD-{order_date.replace('-', '')}-{i+1:03d}",
"订单日期": order_date,
"供应商名称": supplier_name,
"药品通用名": product["name"],
"规格": product["spec"],
"单位": "盒",
"数量": random.randint(10, 500),
"单价": round(random.uniform(5.0, 200.0), 2),
"生产厂家": product["manufacturer"],
"批准文号": product["approval_no"],
})
df = pd.DataFrame(rows)
# 生成文件路径
output_dir = "/tmp/mock_rpa_data"
os.makedirs(output_dir, exist_ok=True)
filename = f"orders_{supplier_name}_{order_date}_{source_type}.xlsx"
filepath = os.path.join(output_dir, filename)
df.to_excel(filepath, index=False, sheet_name="订单明细")
print(f"✓ 生成模拟订单: {filepath}")
print(f" - 供应商: {supplier_name}")
print(f" - 订单日期: {order_date}")
print(f" - 明细行数: {len(rows)}")
return filepath
if __name__ == "__main__":
# 生成几个测试订单
test_date = (datetime.now() - timedelta(days=1)).strftime("%Y-%m-%d")
print("生成模拟订单数据...\n")
# 医药城订单(线上)
generate_mock_orders("重庆亿昊药业", test_date, "YYC", item_count=8)
# 小药药订单(线上)
generate_mock_orders("华润医药", test_date, "XYY", item_count=5)
# 线下手工单
generate_mock_orders("国药控股", test_date, "OFFLINE", item_count=3)
print("\n✓ 全部完成,文件位于: /tmp/mock_rpa_data/")