2025-08-13 15:27:04 +08:00
|
|
|
|
s = {
|
|
|
|
|
"inputParams": [],
|
|
|
|
|
"outputParams": [],
|
|
|
|
|
"rootBlock": {
|
|
|
|
|
"id": -1,
|
|
|
|
|
"name": "-1",
|
|
|
|
|
"blockType": "RootBp",
|
|
|
|
|
"inputParams": {},
|
|
|
|
|
"children": {
|
|
|
|
|
"default": [
|
|
|
|
|
{
|
|
|
|
|
"id": 9,
|
|
|
|
|
"name": "b5",
|
|
|
|
|
"blockType": "GetIdleCrowdedSiteBp",
|
|
|
|
|
"children": {},
|
|
|
|
|
"inputParams": {
|
|
|
|
|
"groupName": {
|
|
|
|
|
"value": "[\"AS2_2\"]",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"filled": {
|
|
|
|
|
"value": "true",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"content": {
|
|
|
|
|
"value": "",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"lock": {
|
|
|
|
|
"value": "",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"retry": {
|
|
|
|
|
"value": "false",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"retryPeriod": {
|
|
|
|
|
"value": "",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"retryNum": {
|
|
|
|
|
"value": "",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"refTaskDefId": "",
|
|
|
|
|
"selected": True,
|
|
|
|
|
"expanded": True,
|
|
|
|
|
"label": "获取密集库位"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": 10,
|
|
|
|
|
"name": "b6",
|
|
|
|
|
"blockType": "GetIdleCrowdedSiteBp",
|
|
|
|
|
"children": {},
|
|
|
|
|
"inputParams": {
|
|
|
|
|
"groupName": {
|
|
|
|
|
"value": "AS2_2",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"filled": {
|
|
|
|
|
"value": "true",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"content": {
|
|
|
|
|
"value": "",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"lock": {
|
|
|
|
|
"value": "",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"retry": {
|
|
|
|
|
"value": "true",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"retryPeriod": {
|
|
|
|
|
"value": "",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"retryNum": {
|
|
|
|
|
"value": "",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"refTaskDefId": "",
|
|
|
|
|
"selected": True,
|
|
|
|
|
"expanded": True,
|
|
|
|
|
"label": "获取密集库位"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"id": 11,
|
|
|
|
|
"name": "b7",
|
|
|
|
|
"blockType": "CSelectAgvBp",
|
|
|
|
|
"children": {
|
|
|
|
|
"default": [
|
|
|
|
|
{
|
|
|
|
|
"id": 9,
|
|
|
|
|
"name": "b8",
|
|
|
|
|
"blockType": "CAgvOperationBp",
|
|
|
|
|
"children": {},
|
|
|
|
|
"inputParams": {
|
|
|
|
|
"targetSiteLabel": {
|
|
|
|
|
"value": "AP1",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"spin": {
|
|
|
|
|
"value": True,
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"task": {
|
|
|
|
|
"value": "",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"refTaskDefId": "",
|
|
|
|
|
"selected": True,
|
|
|
|
|
"expanded": True,
|
|
|
|
|
"label": "机器人通用动作"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"inputParams": {
|
|
|
|
|
"priority": {
|
|
|
|
|
"value": "",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"vehicle": {
|
|
|
|
|
"value": "",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"group": {
|
|
|
|
|
"value": "",
|
|
|
|
|
"type": "Simple",
|
|
|
|
|
"required": True
|
|
|
|
|
},
|
|
|
|
|
"keyRoute": {
|
|
|
|
|
"value": "blocks.b5.siteId",
|
|
|
|
|
"type": "Expression",
|
|
|
|
|
"required": True
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"refTaskDefId": "",
|
|
|
|
|
"selected": True,
|
|
|
|
|
"expanded": True,
|
|
|
|
|
"label": "选择执行机器人"
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"selected": True,
|
|
|
|
|
"refTaskDefId": "",
|
|
|
|
|
"expanded": True
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
import json
|
2025-07-14 10:29:37 +08:00
|
|
|
|
|
|
|
|
|
|
2025-08-13 15:27:04 +08:00
|
|
|
|
def check_task_def_select_agv(detail_json: str) -> int:
|
|
|
|
|
"""
|
|
|
|
|
检查任务定义详情中是否包含SELECT_AGV块类型
|
|
|
|
|
|
|
|
|
|
Args:
|
|
|
|
|
detail_json: 任务定义详情JSON字符串
|
|
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
int: 存在返回1,不存在返回0
|
|
|
|
|
"""
|
|
|
|
|
# from services.execution.handlers.model.block_name import RobotBlockName
|
|
|
|
|
try:
|
|
|
|
|
# 解析JSON字符串
|
|
|
|
|
print("---")
|
|
|
|
|
if not detail_json:
|
|
|
|
|
return 0
|
|
|
|
|
print("========")
|
|
|
|
|
detail = json.loads(detail_json)
|
|
|
|
|
if not detail:
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
# 选择AGV块类型常量
|
|
|
|
|
SELECT_AGV_TYPE = "CSelectAgvBp"
|
|
|
|
|
# print(SELECT_AGV_TYPE, "---")
|
|
|
|
|
# 检查根块
|
|
|
|
|
root_block = detail.get("rootBlock")
|
|
|
|
|
if not root_block:
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
# 递归检查块类型
|
|
|
|
|
def check_block(block):
|
|
|
|
|
# 检查当前块类型
|
|
|
|
|
if block.get("blockType") == SELECT_AGV_TYPE:
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
# 递归检查子块
|
|
|
|
|
children = block.get("children", {})
|
|
|
|
|
for child_key, child_list in children.items():
|
|
|
|
|
if isinstance(child_list, list):
|
|
|
|
|
for child in child_list:
|
|
|
|
|
if check_block(child):
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
# 从根块开始检查
|
|
|
|
|
if check_block(root_block):
|
|
|
|
|
return 1
|
|
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
|
|
|
|
|
except json.JSONDecodeError:
|
|
|
|
|
# logger.error(f"解析任务定义详情JSON失败: {detail_json[:100]}...")
|
|
|
|
|
return 0
|
|
|
|
|
except Exception as e:
|
|
|
|
|
# logger.error(f"检查任务定义中SELECT_AGV类型异常: {str(e)}")
|
|
|
|
|
return 0
|
|
|
|
|
# import VWED任务模块接口文/
|
|
|
|
|
ds = check_task_def_select_agv(json.dumps(s))
|
|
|
|
|
print(ds)
|