routes.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. from flask import request
  2. from app import app
  3. from app.model.result import success, failed
  4. from app.routes.graph_routes import MyEncoder, connect_graph
  5. from app.core.production_line import production_draw_graph
  6. import json
  7. # 生产线列表
  8. @app.route('/production/line/list', methods=['POST'])
  9. def production_line_list():
  10. """
  11. 获取生产线列表,支持分页和名称过滤
  12. Args (通过JSON请求体):
  13. current (int): 当前页码,默认为1
  14. size (int): 每页大小,默认为10
  15. name (str, optional): 名称过滤条件
  16. Returns:
  17. JSON: 包含生产线列表和分页信息的响应
  18. """
  19. try:
  20. receiver = request.get_json()
  21. page = int(receiver.get('current', 1))
  22. page_size = int(receiver.get('size', 10))
  23. name_filter = receiver.get('name', None)
  24. # 计算跳过的记录的数量
  25. skip_count = (page - 1) * page_size
  26. if name_filter:
  27. where_clause = f"n.name CONTAINS'{name_filter}'"
  28. else:
  29. where_clause = "TRUE"
  30. cql = f"""
  31. MATCH (n)
  32. WHERE (n:data_model OR n:data_resource OR n:data_metric) AND {where_clause}
  33. WITH id(n) AS id, n.name AS name, labels(n)[0] AS type,n
  34. RETURN {{
  35. id: id,
  36. name: name,
  37. type: type
  38. }} AS result,n.time as time
  39. ORDER BY time desc
  40. SKIP {skip_count}
  41. LIMIT {page_size}
  42. """
  43. data = connect_graph.run(cql).data()
  44. records = []
  45. for item in data:
  46. records.append(item['result'])
  47. # 获取总量
  48. total_query = f"MATCH (n) WHERE (n:data_model OR n:data_resource OR n:data_metric) AND {where_clause}" \
  49. f" RETURN COUNT(n) AS total"
  50. total_result = connect_graph.run(total_query).evaluate()
  51. response_data = {'records': records, 'total': total_result, 'size': page_size, 'current': page}
  52. res = success(response_data, "success")
  53. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  54. except Exception as e:
  55. res = failed({}, {"error": f"{e}"})
  56. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  57. # 根据生产线列表,传入id,绘制图谱
  58. @app.route('/production/line/graph', methods=['POST'])
  59. def production_line_graph():
  60. """
  61. 根据生产线ID绘制关系图谱
  62. Args (通过JSON请求体):
  63. id (int): 节点ID
  64. Returns:
  65. JSON: 包含图谱数据的响应
  66. """
  67. # 传入请求参数
  68. receiver = request.get_json()
  69. id = receiver['id']
  70. try:
  71. cql = """
  72. MATCH (n) where id(n) = $nodeId return labels(n)[0] as type
  73. """
  74. type = connect_graph.run(cql, nodeId=id).evaluate()
  75. data = production_draw_graph(id, type)
  76. res = success(data, "success")
  77. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  78. except Exception as e:
  79. res = failed({}, {"error": f"{e}"})
  80. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)