def METHOD_NAME(self, nodes_attr, pipeline_tree=None, with_subprocess=False):
    """
    @summary: 将独立存储的节点属性还原到任务树中
    @param nodes_attr: 有两种格式，一种是平铺的（适合所有流程节点全局ID唯一，例如任务实例），另一种是子流程属性集合包含在
        subprocess_detail 中（适合所有流程节点全局ID不唯一，例如展开子流程树的流程模板）
    @param pipeline_tree:
    @param with_subprocess: 是否递归处理子流程中
    @return:
    """
    if pipeline_tree is None:
        pipeline_tree = self.pipeline_tree
    all_nodes = get_all_nodes(pipeline_tree, with_subprocess)
    for node_id, node in all_nodes.items():
        node.update(nodes_attr.get(node_id, {}))
    if with_subprocess:
        subprocess_detail = nodes_attr.pop(PWE.subprocess_detail, {})
        for node_id, sub_nodes_attr in subprocess_detail.items():
            sub_pipeline_tree = pipeline_tree[PWE.activities][node_id][PWE.pipeline]
            self.METHOD_NAME(sub_nodes_attr, pipeline_tree=sub_pipeline_tree, with_subprocess=with_subprocess)