routes.py 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  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. logger = logging.getLogger(__name__)
  7. @bp.route('/get-dataflows-list', methods=['GET'])
  8. def get_dataflows():
  9. """获取数据流列表"""
  10. try:
  11. page = request.args.get('page', 1, type=int)
  12. page_size = request.args.get('page_size', 10, type=int)
  13. search = request.args.get('search', '')
  14. result = DataFlowService.get_dataflows(page=page, page_size=page_size, search=search)
  15. return jsonify({
  16. 'code': 200,
  17. 'message': 'success',
  18. 'data': result
  19. })
  20. except Exception as e:
  21. logger.error(f"获取数据流列表失败: {str(e)}")
  22. return jsonify({
  23. 'code': 500,
  24. 'message': f'获取数据流列表失败: {str(e)}',
  25. 'data': None
  26. }), 500
  27. @bp.route('/get-dataflow/<int:dataflow_id>', methods=['GET'])
  28. def get_dataflow(dataflow_id):
  29. """根据ID获取数据流详情"""
  30. try:
  31. result = DataFlowService.get_dataflow_by_id(dataflow_id)
  32. if result:
  33. return jsonify({
  34. 'code': 200,
  35. 'message': 'success',
  36. 'data': result
  37. })
  38. else:
  39. return jsonify({
  40. 'code': 404,
  41. 'message': '数据流不存在',
  42. 'data': None
  43. }), 404
  44. except Exception as e:
  45. logger.error(f"获取数据流详情失败: {str(e)}")
  46. return jsonify({
  47. 'code': 500,
  48. 'message': f'获取数据流详情失败: {str(e)}',
  49. 'data': None
  50. }), 500
  51. @bp.route('/add-dataflow', methods=['POST'])
  52. def create_dataflow():
  53. """创建新的数据流"""
  54. try:
  55. data = request.get_json()
  56. if not data:
  57. return jsonify({
  58. 'code': 400,
  59. 'message': '请求数据不能为空',
  60. 'data': None
  61. }), 400
  62. result = DataFlowService.create_dataflow(data)
  63. return jsonify({
  64. 'code': 200,
  65. 'message': '数据流创建成功',
  66. 'data': result
  67. })
  68. except Exception as e:
  69. logger.error(f"创建数据流失败: {str(e)}")
  70. return jsonify({
  71. 'code': 500,
  72. 'message': f'创建数据流失败: {str(e)}',
  73. 'data': None
  74. }), 500
  75. @bp.route('/update-dataflow/<int:dataflow_id>', methods=['PUT'])
  76. def update_dataflow(dataflow_id):
  77. """更新数据流"""
  78. try:
  79. data = request.get_json()
  80. if not data:
  81. return jsonify({
  82. 'code': 400,
  83. 'message': '请求数据不能为空',
  84. 'data': None
  85. }), 400
  86. result = DataFlowService.update_dataflow(dataflow_id, data)
  87. if result:
  88. return jsonify({
  89. 'code': 200,
  90. 'message': '数据流更新成功',
  91. 'data': result
  92. })
  93. else:
  94. return jsonify({
  95. 'code': 404,
  96. 'message': '数据流不存在',
  97. 'data': None
  98. }), 404
  99. except Exception as e:
  100. logger.error(f"更新数据流失败: {str(e)}")
  101. return jsonify({
  102. 'code': 500,
  103. 'message': f'更新数据流失败: {str(e)}',
  104. 'data': None
  105. }), 500
  106. @bp.route('/delete-dataflow/<int:dataflow_id>', methods=['DELETE'])
  107. def delete_dataflow(dataflow_id):
  108. """删除数据流"""
  109. try:
  110. result = DataFlowService.delete_dataflow(dataflow_id)
  111. if result:
  112. return jsonify({
  113. 'code': 200,
  114. 'message': '数据流删除成功',
  115. 'data': None
  116. })
  117. else:
  118. return jsonify({
  119. 'code': 404,
  120. 'message': '数据流不存在',
  121. 'data': None
  122. }), 404
  123. except Exception as e:
  124. logger.error(f"删除数据流失败: {str(e)}")
  125. return jsonify({
  126. 'code': 500,
  127. 'message': f'删除数据流失败: {str(e)}',
  128. 'data': None
  129. }), 500
  130. @bp.route('/execute-dataflow/<int:dataflow_id>', methods=['POST'])
  131. def execute_dataflow(dataflow_id):
  132. """执行数据流"""
  133. try:
  134. data = request.get_json() or {}
  135. result = DataFlowService.execute_dataflow(dataflow_id, data)
  136. return jsonify({
  137. 'code': 200,
  138. 'message': '数据流执行成功',
  139. 'data': result
  140. })
  141. except Exception as e:
  142. logger.error(f"执行数据流失败: {str(e)}")
  143. return jsonify({
  144. 'code': 500,
  145. 'message': f'执行数据流失败: {str(e)}',
  146. 'data': None
  147. }), 500
  148. @bp.route('/get-dataflow-status/<int:dataflow_id>', methods=['GET'])
  149. def get_dataflow_status(dataflow_id):
  150. """获取数据流执行状态"""
  151. try:
  152. result = DataFlowService.get_dataflow_status(dataflow_id)
  153. return jsonify({
  154. 'code': 200,
  155. 'message': 'success',
  156. 'data': result
  157. })
  158. except Exception as e:
  159. logger.error(f"获取数据流状态失败: {str(e)}")
  160. return jsonify({
  161. 'code': 500,
  162. 'message': f'获取数据流状态失败: {str(e)}',
  163. 'data': None
  164. }), 500
  165. @bp.route('/get-dataflow-logs/<int:dataflow_id>', methods=['GET'])
  166. def get_dataflow_logs(dataflow_id):
  167. """获取数据流执行日志"""
  168. try:
  169. page = request.args.get('page', 1, type=int)
  170. page_size = request.args.get('page_size', 50, type=int)
  171. result = DataFlowService.get_dataflow_logs(dataflow_id, page=page, page_size=page_size)
  172. return jsonify({
  173. 'code': 200,
  174. 'message': 'success',
  175. 'data': result
  176. })
  177. except Exception as e:
  178. logger.error(f"获取数据流日志失败: {str(e)}")
  179. return jsonify({
  180. 'code': 500,
  181. 'message': f'获取数据流日志失败: {str(e)}',
  182. 'data': None
  183. }), 500
  184. @bp.route('/create-script', methods=['POST'])
  185. def create_script():
  186. """使用Deepseek模型生成脚本"""
  187. try:
  188. json_data = request.get_json()
  189. if not json_data:
  190. return jsonify({
  191. 'code': 400,
  192. 'message': '请求数据不能为空',
  193. 'data': None
  194. }), 400
  195. # 提取文本描述
  196. request_data = json_data.get('request_data')
  197. if not request_data or not isinstance(request_data, str):
  198. return jsonify({
  199. 'code': 400,
  200. 'message': '请求数据必须是文本描述',
  201. 'data': None
  202. }), 400
  203. # 调用DataFlowService的create_script方法
  204. script_content = DataFlowService.create_script(request_data)
  205. return jsonify({
  206. 'code': 200,
  207. 'message': '脚本生成成功',
  208. 'data': {
  209. 'script_content': script_content,
  210. 'format': 'txt',
  211. 'generated_at': datetime.now().isoformat()
  212. }
  213. })
  214. except ValueError as ve:
  215. logger.error(f"脚本生成参数错误: {str(ve)}")
  216. return jsonify({
  217. 'code': 400,
  218. 'message': f'参数错误: {str(ve)}',
  219. 'data': None
  220. }), 400
  221. except Exception as e:
  222. logger.error(f"脚本生成失败: {str(e)}")
  223. return jsonify({
  224. 'code': 500,
  225. 'message': f'脚本生成失败: {str(e)}',
  226. 'data': None
  227. }), 500