""" 组件详细配置文件 包含各种组件类型及其子组件的配置信息 """ from typing import Dict, List, Any, Optional class ScriptComponentConfig: """脚本组件配置""" # 脚本组件类型 RUN_SCRIPT = "run_script" # 运行脚本 SET_VARIABLES = "set_variables" # 设置task.variables # 脚本组件详细配置 @classmethod def get_components(cls) -> List[Dict[str, Any]]: """获取脚本组件列表""" return [ { "type": "script", "sub_type": cls.RUN_SCRIPT, "name": "运行脚本", "description": "执行JavaScript代码并返回结果", "icon": "code", # 图标名称,前端可用 "params": [ { "name": "function_name", "label": "函数名", "type": "string", "required": False, "description": "定义脚本中的主函数名称", "value_types": [ { "type": "simple", "label": "简单值", "default": True }, { "type": "expression", "label": "表达式", "default": False } ] }, { "name": "params", "label": "函数参数", "type": "array", "required": False, "description": "传递给脚本的参数", "value_types": [ { "type": "simple", "label": "简单值", "default": True }, { "type": "expression", "label": "表达式", "default": False } ] } ] }, { "type": "script", "sub_type": cls.SET_VARIABLES, "name": "设置task.variables", "description": "设置和管理任务变量", "icon": "variable", "params": [ { "name": "function_name", "label": "函数名", "type": "string", "required": False, "description": "定义脚本中的主函数名称", "value_types": [ { "type": "simple", "label": "简单值", "default": True }, { "type": "expression", "label": "表达式", "default": False } ] }, { "name": "params", "label": "函数参数", "type": "array", "required": False, "description": "传递给脚本的参数", "value_types": [ { "type": "simple", "label": "简单值", "default": True }, { "type": "expression", "label": "表达式", "default": False } ] } ] } ] class HttpComponentConfig: """HTTP请求组件配置""" # HTTP请求组件类型 HTTP_REQUEST = "http_request" # HTTP请求 # HTTP请求组件详细配置 @classmethod def get_components(cls) -> List[Dict[str, Any]]: """获取HTTP请求组件列表""" return [ { "type": "http", "sub_type": cls.HTTP_REQUEST, "name": "HTTP请求", "description": "发送HTTP请求并处理响应", "icon": "http", "params": [ { "name": "method", "label": "请求方法", "type": "select", "options": ["GET", "POST", "PUT", "DELETE", "PATCH"], "required": True, "description": "HTTP请求方法" }, { "name": "url", "label": "请求URL", "type": "string", "required": True, "description": "请求的目标URL" }, { "name": "headers", "label": "请求头", "type": "object", "required": False, "description": "HTTP请求头" }, { "name": "body", "label": "请求体", "type": "object", "required": False, "description": "HTTP请求体" }, { "name": "timeout", "label": "超时时间", "type": "number", "required": False, "description": "请求超时时间(毫秒)" } ] } ] class FlowComponentConfig: """流程控制组件配置""" # 流程控制组件类型 IF = "if" # 条件判断 IF_ELSE = "if_else" # 条件分支 FOR_EACH = "for_each" # 循环遍历 WHILE = "while" # 条件循环 # 流程控制组件详细配置 @classmethod def get_components(cls) -> List[Dict[str, Any]]: """获取流程控制组件列表""" return [ { "type": "flow", "sub_type": cls.IF, "name": "条件判断", "description": "根据条件执行不同的操作", "icon": "branch", "params": [ { "name": "condition", "label": "条件表达式", "type": "expression", "required": True, "description": "条件判断表达式" } ] }, { "type": "flow", "sub_type": cls.IF_ELSE, "name": "条件分支", "description": "根据条件执行不同的分支", "icon": "branch-multiple", "params": [ { "name": "condition", "label": "条件表达式", "type": "expression", "required": True, "description": "条件判断表达式" } ] }, { "type": "flow", "sub_type": cls.FOR_EACH, "name": "循环遍历", "description": "遍历数组或对象的每个元素", "icon": "loop", "params": [ { "name": "collection", "label": "集合表达式", "type": "expression", "required": True, "description": "要遍历的数组或对象" }, { "name": "item_name", "label": "元素变量名", "type": "string", "required": True, "description": "当前元素的变量名" }, { "name": "index_name", "label": "索引变量名", "type": "string", "required": False, "description": "当前索引的变量名" } ] }, { "type": "flow", "sub_type": cls.WHILE, "name": "条件循环", "description": "当条件为真时重复执行", "icon": "loop-circular", "params": [ { "name": "condition", "label": "条件表达式", "type": "expression", "required": True, "description": "循环条件表达式" } ] } ] class SubtaskComponentConfig: """子任务组件配置""" # 子任务组件类型 SUBTASK = "subtask" # 子任务 # 子任务组件详细配置 @classmethod def get_components(cls) -> List[Dict[str, Any]]: """获取子任务组件列表""" return [ { "type": "subtask", "sub_type": cls.SUBTASK, "name": "子任务", "description": "执行已定义的任务作为子任务", "icon": "subtask", "params": [ { "name": "task_id", "label": "选择子任务", "type": "select", "required": True, "description": "选择要执行的子任务(从已创建的任务中选择)", "data_source": "available_subtasks", # 指示前端从API返回的available_subtasks字段获取数据 "display_field": "name", # 显示任务名称 "value_field": "task_id" # 使用任务ID作为值 }, { "name": "params", "label": "任务参数", "type": "object", "required": False, "description": "传递给子任务的参数" }, { "name": "wait_complete", "label": "等待完成", "type": "boolean", "required": False, "default": True, "description": "是否等待子任务完成后再继续执行" } ] } ] # 组件配置管理类 class ComponentDetailConfig: """组件详细配置管理""" # 组件类型中文名称映射 @classmethod def get_component_type_names(cls) -> Dict[str, str]: """获取组件类型的中文名称映射""" return { # 基础类型 "script": "脚本", "http": "HTTP请求", "flow": "流程", "robot": "机器人调度", "site": "库位", "device": "设备", "subtask": "子任务", "task": "任务", "basic": "基础", # 脚本组件 "run_script": "运行脚本", "set_task_variables": "设置任务变量", "runscript": "运行脚本", "settaskvariables": "设置任务变量", # HTTP请求组件 "http_get_request": "GET请求", "http_post_request": "POST请求", "httpgetrequest": "GET请求", "httppostrequest": "POST请求", # 流程控制组件 "if": "条件判断", "if_else": "条件分支", "if_else_if": "多条件分支", "for_each": "循环遍历", "while": "条件循环", "break": "跳出循环", "return": "返回", "delay": "延时", "parallel_execute": "并行执行", "serial_execute": "串行执行", "throw_exception": "抛出异常", "foreach": "循环遍历", "ifelse": "条件分支", "ifelseif": "多条件分支", "parallelexecute": "并行执行", "serialexecute": "串行执行", "throwexception": "抛出异常", # 机器人调度组件 "select_robot": "选择机器人", "get_robot_position": "获取机器人位置", "robot_action": "机器人动作", "change_robot_destination": "更改机器人目的地", "get_robot_battery": "获取机器人电量", "get_robot_pgv_code": "获取机器人PGV码", "changerobotdestination": "更改机器人目的地", "getrobotbattery": "获取机器人电量", "getrobotpgvcode": "获取机器人PGV码", "getrobotposition": "获取机器人位置", "robotaction": "机器人动作", "selectrobot": "选择机器人", # 库位组件 "batch_set_site": "批量设置库位", "get_dense_site": "获取密集库位", "query_site": "查询库位", "lock_site": "锁定库位", "unlock_site": "解锁库位", "get_locked_sites_by_task": "获取任务锁定的库位", "get_site_extension_property": "获取库位扩展属性", "set_site_extension_property": "设置库位扩展属性", "set_site_goods": "设置库位货物", "set_site_empty": "设置库位为空", "set_site_occupied": "设置库位为占用", "set_site_tag": "设置库位标签", "batchsetsite": "批量设置库位", "getdensesite": "获取密集库位", "getlockedsitesbytask": "获取任务锁定的库位", "getsiteextensionproperty": "获取库位扩展属性", "locksite": "锁定库位", "querysite": "查询库位", "setsiteempty": "设置库位为空", "setsiteextensionproperty": "设置库位扩展属性", "setsitegoods": "设置库位货物", "setsiteoccupied": "设置库位为占用", "setsitetag": "设置库位标签", "unlocksite": "解锁库位", # 任务组件 "cache_data": "缓存数据", "clear_cache_data": "清除缓存数据", "get_cache_data": "获取缓存数据", "set_task_status": "设置任务状态", "jump_to_block": "跳转到块", "get_task_input_param": "获取任务输入参数", "cachedata": "缓存数据", "clearcachedata": "清除缓存数据", "getcachedata": "获取缓存数据", "gettaskinputparam": "获取任务输入参数", "jumptoblock": "跳转到块", "settaskstatus": "设置任务状态", # 基础组件 "check_task_instance_id_exists": "检查任务实例ID是否存在", "create_unique_id": "创建唯一ID", "current_timestamp": "当前时间戳", "current_time": "当前时间", "execute_sql": "执行SQL", "query_sql": "查询SQL", "string_md5_encrypt": "字符串MD5加密", "string_to_json_array": "字符串转JSON数组", "string_to_json_object": "字符串转JSON对象", "print": "打印", "checktaskinstanceidexists": "检查任务实例ID是否存在", "createuniqueid": "创建唯一ID", "currenttime": "当前时间", "currenttimestamp": "当前时间戳", "executesql": "执行SQL", "querysql": "查询SQL", "stringmd5encrypt": "字符串MD5加密", "stringtojsonarray": "字符串转JSON数组", "stringtojsonobject": "字符串转JSON对象", # 设备组件 "wait_modbus_value": "等待Modbus值", "write_modbus_value": "写入Modbus值", "waitmodbusvalue": "等待Modbus值", "writemodbusvalue": "写入Modbus值" } @classmethod def get_all_components(cls) -> List[Dict[str, Any]]: """获取所有组件详细配置""" all_components = [] # 添加子任务组件(放在第一位) all_components.extend(SubtaskComponentConfig.get_components()) # 添加脚本组件 all_components.extend(ScriptComponentConfig.get_components()) # 添加HTTP请求组件 all_components.extend(HttpComponentConfig.get_components()) # 添加流程控制组件 all_components.extend(FlowComponentConfig.get_components()) # 可以继续添加其他类型的组件... return all_components @classmethod def get_components_by_type(cls, component_type: str) -> List[Dict[str, Any]]: """根据组件类型获取组件列表""" all_components = cls.get_all_components() return [comp for comp in all_components if comp["type"] == component_type]