161 lines
4.7 KiB
Python
161 lines
4.7 KiB
Python
# 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']}")
|