route_sub_project.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import os
  2. from flask import Blueprint, request, jsonify, send_from_directory
  3. from models.project_data import SubProjectModel
  4. from routes.route_base import ResponseBase,TableResponse
  5. from services.service_project import ProjectService
  6. from views.views_base import BaseView
  7. sub_project_api = Blueprint('sub_project_api', __name__)
  8. ProjectService = ProjectService()
  9. @sub_project_api.route('list/<int:project_id>', methods=['POST'])
  10. @BaseView.login_required
  11. def get_page_list(project_id:int):
  12. try:
  13. data = request.get_json()
  14. page = int(data.get('pageNum', 1))
  15. per_page = int(data.get('pageSize', 10))
  16. keyword = data.get('keyword', None)
  17. status = data.get('status', None)
  18. status = int(status) if status else None
  19. projects, total_count = ProjectService.get_all_sub_project_paginated(project_id,page, per_page, keyword,status)
  20. return jsonify(TableResponse.success(projects, total_count))
  21. except Exception as e:
  22. return jsonify(TableResponse.error(f'获取工程列表失败:{str(e)}'))
  23. @sub_project_api.route('/get/<int:sub_id>', methods=['POST'])
  24. @BaseView.login_required
  25. def get(sub_id:int):
  26. try:
  27. sub_project = ProjectService.get_sub_project_by_id(sub_id)
  28. return jsonify(ResponseBase.success(sub_project.to_dict()))
  29. except Exception as e:
  30. return jsonify(ResponseBase.error(f'获取工程失败:{str(e)}'))
  31. @sub_project_api.route('/save/<int:project_id>/<int:sub_id>', methods=['POST'])
  32. @BaseView.login_required
  33. def save_sub_project(project_id:int,sub_id:int):
  34. try:
  35. data = request.get_json()
  36. sub_project = SubProjectModel(**data)
  37. sub_project.id = sub_id
  38. sub_project.project_id = project_id
  39. ProjectService.save_sub_project(sub_project, request.files.getlist('files'), delete_old=True)
  40. return jsonify(ResponseBase.success())
  41. except Exception as e:
  42. return jsonify(ResponseBase.error(f'保存工程失败:{str(e)}'))
  43. @sub_project_api.route('/delete/<int:sub_id>', methods=['POST'])
  44. @BaseView.login_required
  45. def delete_sub_project(sub_id:int):
  46. try:
  47. ProjectService.delete_sub_project(sub_id)
  48. return jsonify(ResponseBase.success())
  49. except Exception as e:
  50. return jsonify(ResponseBase.error(f'删除工程失败:{str(e)}'))
  51. @sub_project_api.route('/download', methods=['GET'])
  52. @BaseView.login_required
  53. def download_file():
  54. filename = request.args.get('filename', type=str)
  55. if not filename:
  56. return jsonify(ResponseBase.error('文件名不能为空')),400
  57. try:
  58. # 安全处理文件名
  59. pure_filename = os.path.basename(filename)
  60. safe_filename = os.path.basename(pure_filename)
  61. path = filename.replace(safe_filename, '')
  62. upload_folder = os.path.abspath(os.path.join(os.getcwd(), path))
  63. if not os.path.exists(upload_folder):
  64. return jsonify(ResponseBase.error('项目目录不存在')),400
  65. full_path = os.path.join(upload_folder, safe_filename)
  66. if not os.path.exists(full_path):
  67. return jsonify(ResponseBase.error('文件不存在')),400
  68. except Exception as e:
  69. utils.get_logger().error(f'路径构建失败:{str(e)}')
  70. return jsonify(ResponseBase.error( f'非法文件路径{str(e)}')),400
  71. return send_from_directory(upload_folder.replace('\\', '/'), safe_filename, as_attachment=True)
  72. @sub_project_api.route('/start_task/<int:sub_id>', methods=['POST'])
  73. @BaseView.login_required
  74. def start_task(sub_id:int):
  75. try:
  76. result, err_msg = ProjectService.start_sub_project_task(sub_id)
  77. return jsonify(ResponseBase.json_response(result, err_msg))
  78. except Exception as e:
  79. return jsonify(ResponseBase.error(f'启动任务失败:{str(e)}'))
  80. @sub_project_api.route('/start_process/<int:sub_id>', methods=['POST'])
  81. @BaseView.login_required
  82. def start_process(sub_id:int):
  83. try:
  84. result, err_msg = ProjectService.start_process_sub_project(sub_id)
  85. return jsonify(ResponseBase.json_response(result, err_msg))
  86. except Exception as e:
  87. return jsonify(ResponseBase.error(f'处理数据失败:{str(e)}'))
  88. @sub_project_api.route('/start_send/<int:sub_id>', methods=['POST'])
  89. @BaseView.login_required
  90. def start_send(sub_id:int):
  91. try:
  92. result, err_msg = ProjectService.start_send_sub_project(sub_id)
  93. return jsonify(ResponseBase.json_response(result, err_msg))
  94. except Exception as e:
  95. return jsonify(ResponseBase.error(f'发送数据失败:{str(e)}'))