routes.py 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. from flask import request, jsonify
  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(page=page, page_size=page_size, search=search)
  18. res = success(result, "success")
  19. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  20. except Exception as e:
  21. logger.error(f"获取数据流列表失败: {str(e)}")
  22. res = failed(f'获取数据流列表失败: {str(e)}')
  23. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  24. @bp.route('/get-dataflow/<int:dataflow_id>', methods=['GET'])
  25. def get_dataflow(dataflow_id):
  26. """根据ID获取数据流详情"""
  27. try:
  28. result = DataFlowService.get_dataflow_by_id(dataflow_id)
  29. if result:
  30. res = success(result, "success")
  31. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  32. else:
  33. res = failed("数据流不存在", code=404)
  34. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  35. except Exception as e:
  36. logger.error(f"获取数据流详情失败: {str(e)}")
  37. res = failed(f'获取数据流详情失败: {str(e)}')
  38. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  39. @bp.route('/add-dataflow', methods=['POST'])
  40. def create_dataflow():
  41. """创建新的数据流"""
  42. try:
  43. data = request.get_json()
  44. if not data:
  45. res = failed("请求数据不能为空", code=400)
  46. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  47. result = DataFlowService.create_dataflow(data)
  48. res = success(result, "数据流创建成功")
  49. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  50. except ValueError as ve:
  51. logger.error(f"创建数据流参数错误: {str(ve)}")
  52. res = failed(f'参数错误: {str(ve)}', code=400)
  53. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  54. except Exception as e:
  55. logger.error(f"创建数据流失败: {str(e)}")
  56. res = failed(f'创建数据流失败: {str(e)}')
  57. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  58. @bp.route('/update-dataflow/<int:dataflow_id>', methods=['PUT'])
  59. def update_dataflow(dataflow_id):
  60. """更新数据流"""
  61. try:
  62. data = request.get_json()
  63. if not data:
  64. res = failed("请求数据不能为空", code=400)
  65. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  66. result = DataFlowService.update_dataflow(dataflow_id, data)
  67. if result:
  68. res = success(result, "数据流更新成功")
  69. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  70. else:
  71. res = failed("数据流不存在", code=404)
  72. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  73. except Exception as e:
  74. logger.error(f"更新数据流失败: {str(e)}")
  75. res = failed(f'更新数据流失败: {str(e)}')
  76. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  77. @bp.route('/delete-dataflow/<int:dataflow_id>', methods=['DELETE'])
  78. def delete_dataflow(dataflow_id):
  79. """删除数据流"""
  80. try:
  81. result = DataFlowService.delete_dataflow(dataflow_id)
  82. if result:
  83. res = success({}, "数据流删除成功")
  84. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  85. else:
  86. res = failed("数据流不存在", code=404)
  87. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  88. except Exception as e:
  89. logger.error(f"删除数据流失败: {str(e)}")
  90. res = failed(f'删除数据流失败: {str(e)}')
  91. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  92. @bp.route('/execute-dataflow/<int:dataflow_id>', methods=['POST'])
  93. def execute_dataflow(dataflow_id):
  94. """执行数据流"""
  95. try:
  96. data = request.get_json() or {}
  97. result = DataFlowService.execute_dataflow(dataflow_id, data)
  98. res = success(result, "数据流执行成功")
  99. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  100. except Exception as e:
  101. logger.error(f"执行数据流失败: {str(e)}")
  102. res = failed(f'执行数据流失败: {str(e)}')
  103. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  104. @bp.route('/get-dataflow-status/<int:dataflow_id>', methods=['GET'])
  105. def get_dataflow_status(dataflow_id):
  106. """获取数据流执行状态"""
  107. try:
  108. result = DataFlowService.get_dataflow_status(dataflow_id)
  109. res = success(result, "success")
  110. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  111. except Exception as e:
  112. logger.error(f"获取数据流状态失败: {str(e)}")
  113. res = failed(f'获取数据流状态失败: {str(e)}')
  114. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  115. @bp.route('/get-dataflow-logs/<int:dataflow_id>', methods=['GET'])
  116. def get_dataflow_logs(dataflow_id):
  117. """获取数据流执行日志"""
  118. try:
  119. page = request.args.get('page', 1, type=int)
  120. page_size = request.args.get('page_size', 50, type=int)
  121. result = DataFlowService.get_dataflow_logs(dataflow_id, page=page, page_size=page_size)
  122. res = success(result, "success")
  123. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  124. except Exception as e:
  125. logger.error(f"获取数据流日志失败: {str(e)}")
  126. res = failed(f'获取数据流日志失败: {str(e)}')
  127. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  128. @bp.route('/create-script', methods=['POST'])
  129. def create_script():
  130. """使用Deepseek模型生成脚本"""
  131. try:
  132. json_data = request.get_json()
  133. if not json_data:
  134. res = failed("请求数据不能为空", code=400)
  135. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  136. # 提取文本描述
  137. request_data = json_data.get('request_data')
  138. if not request_data or not isinstance(request_data, str):
  139. res = failed("请求数据必须是文本描述", code=400)
  140. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  141. # 调用DataFlowService的create_script方法
  142. script_content = DataFlowService.create_script(request_data)
  143. result_data = {
  144. 'script_content': script_content,
  145. 'format': 'txt',
  146. 'generated_at': datetime.now().isoformat()
  147. }
  148. res = success(result_data, "脚本生成成功")
  149. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  150. except ValueError as ve:
  151. logger.error(f"脚本生成参数错误: {str(ve)}")
  152. res = failed(f'参数错误: {str(ve)}', code=400)
  153. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)
  154. except Exception as e:
  155. logger.error(f"脚本生成失败: {str(e)}")
  156. res = failed(f'脚本生成失败: {str(e)}')
  157. return json.dumps(res, ensure_ascii=False, cls=MyEncoder)