123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- import os
- from flask import Blueprint, request, jsonify, send_from_directory
- from models.project_data import SubProjectModel
- from routes.route_base import ResponseBase,TableResponse
- from services.service_project import ProjectService
- from views.views_base import BaseView
- sub_project_api = Blueprint('sub_project_api', __name__)
- ProjectService = ProjectService()
- @sub_project_api.route('list/<int:project_id>', methods=['POST'])
- @BaseView.login_required
- def get_page_list(project_id:int):
- try:
- data = request.get_json()
- page = int(data.get('pageNum', 1))
- per_page = int(data.get('pageSize', 10))
- keyword = data.get('keyword', None)
- status = data.get('status', None)
- status = int(status) if status else None
- projects, total_count = ProjectService.get_all_sub_project_paginated(project_id,page, per_page, keyword,status)
- return jsonify(TableResponse.success(projects, total_count))
- except Exception as e:
- return jsonify(TableResponse.error(f'获取工程列表失败:{str(e)}'))
- @sub_project_api.route('/get/<int:sub_id>', methods=['POST'])
- @BaseView.login_required
- def get(sub_id:int):
- try:
- sub_project = ProjectService.get_sub_project_by_id(sub_id)
- return jsonify(ResponseBase.success(sub_project.to_dict()))
- except Exception as e:
- return jsonify(ResponseBase.error(f'获取工程失败:{str(e)}'))
- @sub_project_api.route('/save/<int:project_id>/<int:sub_id>', methods=['POST'])
- @BaseView.login_required
- def save_sub_project(project_id:int,sub_id:int):
- try:
- data = request.get_json()
- sub_project = SubProjectModel(**data)
- sub_project.id = sub_id
- sub_project.project_id = project_id
- ProjectService.save_sub_project(sub_project, request.files.getlist('files'), delete_old=True)
- return jsonify(ResponseBase.success())
- except Exception as e:
- return jsonify(ResponseBase.error(f'保存工程失败:{str(e)}'))
- @sub_project_api.route('/delete/<int:sub_id>', methods=['POST'])
- @BaseView.login_required
- def delete_sub_project(sub_id:int):
- try:
- ProjectService.delete_sub_project(sub_id)
- return jsonify(ResponseBase.success())
- except Exception as e:
- return jsonify(ResponseBase.error(f'删除工程失败:{str(e)}'))
- @sub_project_api.route('/download', methods=['GET'])
- @BaseView.login_required
- def download_file():
- filename = request.args.get('filename', type=str)
- if not filename:
- return jsonify(ResponseBase.error('文件名不能为空')),400
- try:
- # 安全处理文件名
- pure_filename = os.path.basename(filename)
- safe_filename = os.path.basename(pure_filename)
- path = filename.replace(safe_filename, '')
- upload_folder = os.path.abspath(os.path.join(os.getcwd(), path))
- if not os.path.exists(upload_folder):
- return jsonify(ResponseBase.error('项目目录不存在')),400
- full_path = os.path.join(upload_folder, safe_filename)
- if not os.path.exists(full_path):
- return jsonify(ResponseBase.error('文件不存在')),400
- except Exception as e:
- utils.get_logger().error(f'路径构建失败:{str(e)}')
- return jsonify(ResponseBase.error( f'非法文件路径{str(e)}')),400
- return send_from_directory(upload_folder.replace('\\', '/'), safe_filename, as_attachment=True)
- @sub_project_api.route('/start_task/<int:sub_id>', methods=['POST'])
- @BaseView.login_required
- def start_task(sub_id:int):
- try:
- result, err_msg = ProjectService.start_sub_project_task(sub_id)
- return jsonify(ResponseBase.json_response(result, err_msg))
- except Exception as e:
- return jsonify(ResponseBase.error(f'启动任务失败:{str(e)}'))
- @sub_project_api.route('/start_process/<int:sub_id>', methods=['POST'])
- @BaseView.login_required
- def start_process(sub_id:int):
- try:
- result, err_msg = ProjectService.start_process_sub_project(sub_id)
- return jsonify(ResponseBase.json_response(result, err_msg))
- except Exception as e:
- return jsonify(ResponseBase.error(f'处理数据失败:{str(e)}'))
- @sub_project_api.route('/start_send/<int:sub_id>', methods=['POST'])
- @BaseView.login_required
- def start_send(sub_id:int):
- try:
- result, err_msg = ProjectService.start_send_sub_project(sub_id)
- return jsonify(ResponseBase.json_response(result, err_msg))
- except Exception as e:
- return jsonify(ResponseBase.error(f'发送数据失败:{str(e)}'))
|