AutoRpa/build_seq.py

161 lines
4.7 KiB
Python
Raw 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.

# coding=utf-8
"""
构建 Main.seq - 合同建单流程(输入驱动 + 状态中心回调版本)
"""
import json
import base64
def b64_apa(val):
return json.dumps({"val": base64.b64encode(str(val).encode()).decode()}, indent=4)
def b64_raw(val):
return base64.b64encode(str(val).encode()).decode()
# 单节点代码块:读取入参(input_arg / -c params / JSON 文件)→ 调用 run_contract_create
# run_contract_create 内部完成 start/complete/fail 回调、Selenium 起草与合同编号读取。
body = """\
import sys, os, json
from pathlib import Path
_CODES_DIR = Path(r'd:\\RPA\\AutoRpa\\codes')
if str(_CODES_DIR) not in sys.path:
sys.path.insert(0, str(_CODES_DIR))
from rpa_yisaiqi.contract_create_node import (
ContractCreateError, load_input_data, run_contract_create,
)
def _first(*values):
for value in values:
if value is not None and str(value).strip():
return str(value).strip()
return ""
raw = (self.input_arg or "").strip()
if raw:
data = load_input_data(raw)
elif isinstance(params, dict) and params:
nested = params.get("inputJson") or params.get("inputArg") or params.get("input")
data = load_input_data(str(nested)) if nested else dict(params)
else:
raise ContractCreateError("缺少业务入参:请通过 -i/--input 传入 JSON 字符串或文件路径,或通过 -c/--params 传入参数")
state_center_url = _first(
data.get("stateCenterUrl"), data.get("stateCenterURL"),
os.getenv("STATE_CENTER_URL"), params.get("stateCenterUrl"),
"http://127.0.0.1:8000",
)
agent_token = _first(
data.get("agentToken"), os.getenv("AGENT_TOKEN"),
params.get("agentToken"), "dev-agent-token",
)
print("=" * 60)
print("合同建单 CONTRACT_CREATE - 开始")
print("jobId=%s sourceType=%s submitMode=%s" % (
data.get("jobId"), data.get("sourceType"), data.get("submitMode")))
print("=" * 60)
result = run_contract_create(
data,
state_center_url=state_center_url,
agent_token=agent_token,
)
print(json.dumps(result, ensure_ascii=False))
"""
steps = [
("读取入参并执行合同建单", body, "读取艺赛旗入参并执行 CONTRACT_CREATE(含状态中心回调)"),
]
nodes = []
lines = []
begin_tag = "20260813100000"
nodes.append({
"NodePanelData": {
"ExpandedGroups": [], "InputProperty": {"mouse_x": 0, "mouse_y": 0},
"PubProperty": "", "RetPins": []
},
"NodeProperty": "",
"NodeUI": {
"NodeElementID": "", "NodeModel": "2", "NodePropErr": False,
"NodePx": "300", "NodePy": "200",
"NodeSubType": "EnumWidget_Begin", "NodeTag": begin_tag,
"NodeTitle": "开始"
}
})
prev_tag = begin_tag
start_x = 500
start_y = 200
space_y = 120
for i, (title, body_text, note) in enumerate(steps):
tag = f"20260813{200000 + i:06d}"
py = start_y + i * space_y
pimport_b64 = b64_raw("")
pbody_b64 = b64_raw(body_text)
props = {
"EP_CONTROL": {
"EP_CONTROL_IMPORT": json.dumps({"PImport": pimport_b64, "PBCode": pbody_b64}, indent=4)
},
"EP_Gen": {
"EP_Gen_AFTERDELAY": b64_apa("0"),
"EP_Gen_BEFOREDELAY": b64_apa("0"),
"EP_Gen_NOTE": b64_apa(note)
}
}
nodes.append({
"NodePanelData": {
"ExpandedGroups": [], "InputProperty": {"mouse_x": 0, "mouse_y": 0},
"PubProperty": "", "RetPins": []
},
"NodeProperty": props,
"NodeUI": {
"NodeElementID": "", "NodeModel": "2", "NodePropErr": False,
"NodePx": str(start_x - 15), "NodePy": str(py),
"NodeSubType": "EnumWidget_Code_Custom", "NodeTag": tag,
"NodeTitle": title
}
})
lines.append({
"LineColor": "255, 255, 255",
"LineNote": "", "LineType": 0,
"LineSplit": {"Px": "", "Py": ""},
"LineEnd": {
"Pidx": f"{tag}/EPin_Flow_In",
"Px": str(start_x - 25),
"Py": str(py + 30)
},
"LineStart": {
"Pidx": f"{prev_tag}/EPin_Flow_Out",
"Px": str(start_x - 100) if i > 0 else "415",
"Py": str(start_y + 30) if i == 0 else str(start_y + (i - 1) * space_y + 30)
},
"LineTag": f"20260813{300000 + i:06d}"
})
prev_tag = tag
center_y = start_y + len(steps) * space_y // 2
main_seq = {
"LineList": lines,
"NodeList": nodes,
"SeqTag": "Main",
"ViewCenterPx": "600",
"ViewCenterPy": str(center_y),
"ViewScaling": "1"
}
with open(r"d:\RPA\AutoRpa\Main.seq", "w", encoding="utf-8") as f:
json.dump(main_seq, f, ensure_ascii=False, indent=4)
for n in nodes:
print(f" [{n['NodeUI']['NodeSubType'].replace('EnumWidget_','').replace('_Code_Custom','CODE').replace('_Begin','START')}] {n['NodeUI']['NodeTitle']}")