sample_handle_id_model.txt 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. def type_cql_query():
  2. query = """
  3. MATCH (n:data_model)
  4. WHERE id(n) = $nodeId
  5. // 获取元数据节点, 数据模型
  6. WITH n
  7. OPTIONAL MATCH (n)-[:connection]->(a:meta_node)
  8. // 获取数据标准
  9. OPTIONAL MATCH (n)-[:clean_model]-(d:data_standard)-[:clean_model]->(a)
  10. // 获取数据标签
  11. OPTIONAL MATCH (n)-[:label]->(la:data_label)
  12. OPTIONAL MATCH (child) where id(child) = n.childernId
  13. OPTIONAL MATCH (ma) where id(ma) = a.master_data
  14. WITH n, a, d, la, n.childrenId AS childrenIds,ma
  15. // 遍历 childrenIds 并获取对应的子节点
  16. UNWIND childrenIds AS child_id
  17. OPTIONAL MATCH (child) WHERE id(child) = child_id
  18. // 收集子节点信息
  19. WITH n, a, d, la, collect(DISTINCT {id: id(child), name: child.name}) AS childrenId,ma
  20. // 收集元数据信息并排序
  21. WITH a, d, la, n, childrenId, ma
  22. WITH n, collect(DISTINCT {id: id(a), name: a.name, en_name: a.en_name,
  23. data_type: a.data_type, master_data: {id: id(ma), name: ma.name},
  24. data_standard: {id: id(d), name: d.name}}) AS meta_ids,
  25. properties(n) AS properties, {id: id(la), name: la.name} AS tag, childrenId
  26. // 对 meta_ids 进行排序
  27. UNWIND meta_ids AS meta_id
  28. WITH n, tag, properties, childrenId, meta_id
  29. ORDER BY meta_id.id
  30. WITH n, tag, properties, childrenId, collect(meta_id) AS sorted_meta_ids
  31. // 构建结果集
  32. WITH [{data_resource: null, resource_id: null, meta_ids: sorted_meta_ids}]AS resources,
  33. id(n) as nodeid, tag, properties, n, childrenId
  34. UNWIND resources as resource
  35. WITH nodeid, collect(resource) as results, tag, properties, n,childrenId
  36. // 合并结果集
  37. RETURN results, tag, properties, childrenId
  38. """
  39. return query
  40. # 数据模型编辑接口
  41. def handle_id_model(id):
  42. # 获取数据模型的名称,元数据名称,对应选中的数据资源名称
  43. query = type_cql_query()
  44. data_ = connect_graph.run(query, nodeId=id)
  45. res_list = []
  46. properties = {}
  47. for record in data_:
  48. res_list = record['results']
  49. properties = record['properties']
  50. properties['tag'] = record['tag']
  51. properties['childrenId'] = record['childrenId']
  52. properties.pop('id_list', None)
  53. if 'tag' not in properties:
  54. properties['tag'] = None
  55. if 'describe' not in properties:
  56. properties['describe'] = None
  57. res_dict = {"resource_selected": res_list}
  58. merged_dict = {**res_dict, **properties}
  59. response_data = {"data_model": merged_dict}
  60. return response_data