# 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']}")