routes.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. from flask import request
  2. from app.api.data_flow import bp
  3. from app.core.data_flow.dataflows import DataFlowService
  4. import logging
  5. from datetime import datetime
  6. import json
  7. from app.models.result import success, failed
  8. from app.core.graph.graph_operations import MyEncoder
  9. logger = logging.getLogger(__name__)
  10. @bp.route('/get-dataflows-list', methods=['GET'])
  11. def get_dataflows():
  12. """获取数据流列表"""
  13. try:
  14. page = request.args.get('page', 1, type=int)
  15. page_size = request.args.get('page_size', 10, type=int)
  16. search = request.args.get('search', '')
  17. result = DataFlowService.get_dataflows(
  18. page=page,
  19. page_size=page_size,
  20. search=search,
  21. )
  22. res = success(result, "success")
  23. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  24. except Exception as e:
  25. logger.error(f"获取数据流列表失败: {str(e)}")
  26. res = failed(f'获取数据流列表失败: {str(e)}')
  27. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  28. @bp.route('/get-dataflow/<int:dataflow_id>', methods=['GET'])
  29. def get_dataflow(dataflow_id):
  30. """根据ID获取数据流详情"""
  31. try:
  32. result = DataFlowService.get_dataflow_by_id(dataflow_id)
  33. if result:
  34. res = success(result, "success")
  35. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  36. else:
  37. res = failed("数据流不存在", code=404)
  38. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  39. except Exception as e:
  40. logger.error(f"获取数据流详情失败: {str(e)}")
  41. res = failed(f'获取数据流详情失败: {str(e)}')
  42. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  43. @bp.route('/add-dataflow', methods=['POST'])
  44. def create_dataflow():
  45. """创建新的数据流"""
  46. try:
  47. data = request.get_json()
  48. if not data:
  49. res = failed("请求数据不能为空", code=400)
  50. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  51. result = DataFlowService.create_dataflow(data)
  52. res = success(result, "数据流创建成功")
  53. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  54. except ValueError as ve:
  55. logger.error(f"创建数据流参数错误: {str(ve)}")
  56. res = failed(f'参数错误: {str(ve)}', code=400)
  57. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  58. except Exception as e:
  59. logger.error(f"创建数据流失败: {str(e)}")
  60. res = failed(f'创建数据流失败: {str(e)}')
  61. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  62. @bp.route('/update-dataflow/<int:dataflow_id>', methods=['PUT'])
  63. def update_dataflow(dataflow_id):
  64. """更新数据流"""
  65. try:
  66. data = request.get_json()
  67. if not data:
  68. res = failed("请求数据不能为空", code=400)
  69. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  70. result = DataFlowService.update_dataflow(dataflow_id, data)
  71. if result:
  72. res = success(result, "数据流更新成功")
  73. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  74. else:
  75. res = failed("数据流不存在", code=404)
  76. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  77. except Exception as e:
  78. logger.error(f"更新数据流失败: {str(e)}")
  79. res = failed(f'更新数据流失败: {str(e)}')
  80. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  81. @bp.route('/delete-dataflow/<int:dataflow_id>', methods=['DELETE'])
  82. def delete_dataflow(dataflow_id):
  83. """删除数据流"""
  84. try:
  85. result = DataFlowService.delete_dataflow(dataflow_id)
  86. if result:
  87. res = success({}, "数据流删除成功")
  88. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  89. else:
  90. res = failed("数据流不存在", code=404)
  91. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  92. except Exception as e:
  93. logger.error(f"删除数据流失败: {str(e)}")
  94. res = failed(f'删除数据流失败: {str(e)}')
  95. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  96. @bp.route('/execute-dataflow/<int:dataflow_id>', methods=['POST'])
  97. def execute_dataflow(dataflow_id):
  98. """执行数据流"""
  99. try:
  100. data = request.get_json() or {}
  101. result = DataFlowService.execute_dataflow(dataflow_id, data)
  102. res = success(result, "数据流执行成功")
  103. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  104. except Exception as e:
  105. logger.error(f"执行数据流失败: {str(e)}")
  106. res = failed(f'执行数据流失败: {str(e)}')
  107. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  108. @bp.route('/get-dataflow-status/<int:dataflow_id>', methods=['GET'])
  109. def get_dataflow_status(dataflow_id):
  110. """获取数据流执行状态"""
  111. try:
  112. result = DataFlowService.get_dataflow_status(dataflow_id)
  113. res = success(result, "success")
  114. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  115. except Exception as e:
  116. logger.error(f"获取数据流状态失败: {str(e)}")
  117. res = failed(f'获取数据流状态失败: {str(e)}')
  118. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  119. @bp.route('/get-dataflow-logs/<int:dataflow_id>', methods=['GET'])
  120. def get_dataflow_logs(dataflow_id):
  121. """获取数据流执行日志"""
  122. try:
  123. page = request.args.get('page', 1, type=int)
  124. page_size = request.args.get('page_size', 50, type=int)
  125. result = DataFlowService.get_dataflow_logs(
  126. dataflow_id,
  127. page=page,
  128. page_size=page_size,
  129. )
  130. res = success(result, "success")
  131. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  132. except Exception as e:
  133. logger.error(f"获取数据流日志失败: {str(e)}")
  134. res = failed(f'获取数据流日志失败: {str(e)}')
  135. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  136. @bp.route('/create-script', methods=['POST'])
  137. def create_script():
  138. """使用Deepseek模型生成脚本"""
  139. try:
  140. json_data = request.get_json()
  141. if not json_data:
  142. res = failed("请求数据不能为空", code=400)
  143. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  144. # 记录接收到的数据用于调试
  145. logger.info(f"create_script接收到的数据: {json_data}")
  146. logger.info(f"json_data类型: {type(json_data)}")
  147. # 直接使用前端提交的json_data作为request_data参数
  148. script_content = DataFlowService.create_script(json_data)
  149. result_data = {
  150. 'script_content': script_content,
  151. 'format': 'txt',
  152. 'generated_at': datetime.now().isoformat()
  153. }
  154. res = success(result_data, "脚本生成成功")
  155. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  156. except ValueError as ve:
  157. logger.error(f"脚本生成参数错误: {str(ve)}")
  158. res = failed(f'参数错误: {str(ve)}', code=400)
  159. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  160. except Exception as e:
  161. logger.error(f"脚本生成失败: {str(e)}")
  162. res = failed(f'脚本生成失败: {str(e)}')
  163. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  164. @bp.route('/get-BD-list', methods=['GET'])
  165. def get_business_domain_list():
  166. """获取BusinessDomain节点列表"""
  167. try:
  168. logger.info("接收到获取BusinessDomain列表请求")
  169. # 调用服务层函数获取BusinessDomain列表
  170. bd_list = DataFlowService.get_business_domain_list()
  171. res = success(bd_list, "操作成功")
  172. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  173. except Exception as e:
  174. logger.error(f"获取BusinessDomain列表失败: {str(e)}")
  175. res = failed(f'获取BusinessDomain列表失败: {str(e)}', 500, {})
  176. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)