routes.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. from flask import request
  2. from app import app
  3. from app.models.result import success, failed
  4. from app.core.graph.graph_operations import connect_graph, MyEncoder, create_or_get_node
  5. from app.core.data_interface import interface
  6. from app.core.meta_data import translate_and_parse, get_formatted_time
  7. from app.core.llm import code_generate_standard
  8. import json
  9. # 数据标准新增 data_standard
  10. @app.route('/data/standard/add', methods=['POST'])
  11. def data_standard_add():
  12. try:
  13. # 传入请求参数
  14. receiver = request.get_json()
  15. name = receiver['name'] # 名称
  16. en_name = translate_and_parse(name) # 英文名
  17. receiver['en_name'] = en_name[0]
  18. receiver['time'] = get_formatted_time()
  19. receiver['tag'] = json.dumps(receiver['tag'], ensure_ascii=False)
  20. create_or_get_node('data_standard', **receiver)
  21. res = success('', "success")
  22. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  23. except Exception as e:
  24. res = failed({}, {"error": f"{e}"})
  25. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  26. # 数据标准详情 data_standard
  27. @app.route('/data/standard/detail', methods=['POST'])
  28. def data_standard_detail():
  29. try:
  30. # 传入请求参数
  31. receiver = request.get_json()
  32. nodeid = receiver['id'] # id
  33. cql = """MATCH (n:data_standard) where id(n) = $nodeId
  34. RETURN properties(n) as property"""
  35. # Create a session from the driver returned by connect_graph
  36. with connect_graph().session() as session:
  37. property = session.run(cql, nodeId=nodeid).evaluate()
  38. if "tag" not in property:
  39. property["tag"] = None
  40. else:
  41. property["tag"] = json.loads(property["tag"])
  42. if "describe" not in property:
  43. property["describe"] = None
  44. res = success(property, "success")
  45. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  46. except Exception as e:
  47. res = failed({}, {"error": f"{e}"})
  48. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  49. # 数据标准代码 data_standard
  50. @app.route('/data/standard/code', methods=['POST'])
  51. def data_standard_code():
  52. try:
  53. # 传入请求参数
  54. receiver = request.get_json()
  55. input = receiver['input']
  56. describe = receiver['describe']
  57. output = receiver['output']
  58. relation = {
  59. "输入参数": input,
  60. "输出参数": output
  61. }
  62. result = code_generate_standard(describe, relation)
  63. res = success(result, "success")
  64. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  65. except Exception as e:
  66. res = failed({}, {"error": f"{e}"})
  67. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  68. # 数据标准更新 data_standard 未加到接口文档
  69. @app.route('/data/standard/update', methods=['POST'])
  70. def data_standard_update():
  71. try:
  72. # 传入请求参数
  73. receiver = request.get_json()
  74. name = receiver['name'] # 名称
  75. en_name = translate_and_parse(name) # 英文名
  76. receiver['en_name'] = en_name[0]
  77. receiver['time'] = get_formatted_time()
  78. create_or_get_node('data_standard', **receiver)
  79. res = success('', "success")
  80. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  81. except Exception as e:
  82. res = failed({}, {"error": f"{e}"})
  83. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  84. # 数据标准列表展示
  85. @app.route('/data/standard/list', methods=['POST'])
  86. def data_standard_list():
  87. try:
  88. # 传入请求参数
  89. receiver = request.get_json()
  90. page = int(receiver.get('current', 1))
  91. page_size = int(receiver.get('size', 10))
  92. en_name_filter = receiver.get('en_name', None)
  93. name_filter = receiver.get('name', None)
  94. category = receiver.get('category', None)
  95. time = receiver.get('time', None)
  96. # 计算跳过的记录的数量
  97. skip_count = (page - 1) * page_size
  98. data, total = interface.standard_list(skip_count, page_size, en_name_filter,
  99. name_filter, category, time)
  100. response_data = {'records': data, 'total': total, 'size': page_size, 'current': page}
  101. res = success(response_data, "success")
  102. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  103. except Exception as e:
  104. res = failed({}, {"error": f"{e}"})
  105. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  106. # 数据标准的图谱(血缘关系Kinship+影响关系Impact+所有关系all)
  107. @app.route('/data/standard/graph/all', methods=['POST'])
  108. def data_standard_graph_all():
  109. try:
  110. # 传入请求参数
  111. receiver = request.get_json()
  112. nodeid = receiver['id']
  113. type = receiver['type'] # kinship/impact/all
  114. if type == 'kinship':
  115. result = interface.standard_kinship_graph(nodeid)
  116. elif type == 'impact':
  117. result = interface.standard_impact_graph(nodeid)
  118. else:
  119. result = interface.standard_all_graph(nodeid)
  120. return json.dumps(success(result, "success"), ensure_ascii=False, cls=MyEncoder)
  121. except Exception as e:
  122. res = failed({}, {"error": f"{e}"})
  123. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  124. # 数据标签新增 data_label
  125. @app.route('/data/label/add', methods=['POST'])
  126. def data_label_add():
  127. try:
  128. # 传入请求参数
  129. receiver = request.get_json()
  130. name = receiver['name'] # 名称
  131. en_name = translate_and_parse(name) # 英文名
  132. receiver['en_name'] = en_name[0]
  133. receiver['time'] = get_formatted_time()
  134. create_or_get_node('data_label', **receiver)
  135. res = success('', "success")
  136. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  137. except Exception as e:
  138. res = failed({}, {"error": f"{e}"})
  139. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  140. # 数据标签详情 data_label
  141. @app.route('/data/label/detail', methods=['POST'])
  142. def data_label_detail():
  143. try:
  144. # 传入请求参数
  145. receiver = request.get_json()
  146. nodeid = receiver['id'] # id
  147. cql = """MATCH (n:data_label) where id(n) = $nodeId
  148. RETURN properties(n) as property"""
  149. with connect_graph().session() as session:
  150. property = session.run(cql, nodeId=nodeid).evaluate()
  151. if "describe" not in property:
  152. property["describe"] = None
  153. res = success(property, "success")
  154. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  155. except Exception as e:
  156. res = failed({}, {"error": f"{e}"})
  157. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  158. # 数据标签列表展示(分类,名称,时间检索)
  159. @app.route('/data/label/list', methods=['POST'])
  160. def data_label_list():
  161. try:
  162. # 传入请求参数
  163. receiver = request.get_json()
  164. page = int(receiver.get('current', 1))
  165. page_size = int(receiver.get('size', 10))
  166. en_name_filter = receiver.get('en_name', None)
  167. name_filter = receiver.get('name', None)
  168. category = receiver.get('category', None)
  169. group = receiver.get('group', None)
  170. # 计算跳过的记录的数量
  171. skip_count = (page - 1) * page_size
  172. data, total = interface.label_list(skip_count, page_size, en_name_filter,
  173. name_filter, category, group)
  174. response_data = {'records': data, 'total': total, 'size': page_size, 'current': page}
  175. res = success(response_data, "success")
  176. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  177. except Exception as e:
  178. res = failed({}, {"error": f"{e}"})
  179. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  180. # 24.11.19 数据标签动态识别分组
  181. @app.route('/data/label/dynamic/identify', methods=['POST'])
  182. def data_label_dynamic_identify():
  183. try:
  184. # 传入请求参数
  185. receiver = request.get_json()
  186. name_filter = receiver.get('content', None)
  187. data = interface.dynamic_label_list(name_filter)
  188. res = success(data, "success")
  189. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  190. except Exception as e:
  191. res = failed({}, {"error": f"{e}"})
  192. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  193. # 数据标签的图谱(血缘关系Kinship+影响关系Impact+所有关系all)
  194. @app.route('/data/label/graph/all', methods=['POST'])
  195. def data_label_graph():
  196. try:
  197. # 传入请求参数
  198. receiver = request.get_json()
  199. nodeid = receiver['id']
  200. type = receiver['type'] # kinship/impact/all
  201. if type == 'kinship':
  202. result = interface.label_kinship_graph(nodeid)
  203. elif type == 'impact':
  204. result = interface.label_impact_graph(nodeid)
  205. else:
  206. result = interface.label_kinship_graph(nodeid) # 对于标签,将all和kinship都视为相同处理
  207. return json.dumps(success(result, "success"), ensure_ascii=False, cls=MyEncoder)
  208. except Exception as e:
  209. res = failed({}, {"error": f"{e}"})
  210. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  211. # 删除标签、标准、指标间的关系
  212. @app.route('/metric/label/standard/delete', methods=['POST'])
  213. def metric_label_standard_delete():
  214. try:
  215. # 传入请求参数
  216. receiver = request.get_json()
  217. sourceid = receiver['sourceid']
  218. targetid = receiver['targetid']
  219. # 查询语句,查询两个节点之间的关系
  220. cql = """
  221. MATCH (source)-[r]-(target)
  222. WHERE id(source) = $sourceid AND id(target) = $targetid
  223. DELETE r
  224. """
  225. with connect_graph().session() as session:
  226. result = session.run(cql, sourceid=sourceid, targetid=targetid)
  227. res = success("", "success")
  228. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  229. except Exception as e:
  230. res = failed({}, {"error": f"{e}"})
  231. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)