|
@@ -1,58 +1,64 @@
|
|
|
-from flask import Blueprint, request,send_from_directory
|
|
|
+from flask import Blueprint, request, send_from_directory
|
|
|
import os
|
|
|
from core.dtos import ProjectTaskDto
|
|
|
from core.user_session import Permission
|
|
|
-from core.api import ResponseBase,TableResponse
|
|
|
-from services import ProjectTaskService
|
|
|
+from core.api import ResponseBase, TableResponse
|
|
|
+from services import ProjectTaskService
|
|
|
|
|
|
-project_task_api = Blueprint('project_task_api', __name__)
|
|
|
+project_task_api = Blueprint("project_task_api", __name__)
|
|
|
task_service = ProjectTaskService()
|
|
|
|
|
|
-@project_task_api.route('/list/<project_id>/<item_code>', methods=['POST'])
|
|
|
+
|
|
|
+@project_task_api.route("/list/<project_id>/<item_code>", methods=["POST"])
|
|
|
@Permission.authorize
|
|
|
-def get_page_list(project_id:str,item_code:str):
|
|
|
+def get_page_list(project_id: str, item_code: str):
|
|
|
try:
|
|
|
data = request.get_json()
|
|
|
- page = int(data.get('pageNum', 1))
|
|
|
- per_page = int(data.get('pageSize', 10))
|
|
|
- keyword = data.get('keyword')
|
|
|
- process_status = int(data.get('process_status')) if data.get('process_status') else None
|
|
|
- send_status = int(data.get('send_status')) if data.get('send_status') else None
|
|
|
- task, total_count = task_service.get_tasks_paginated( project_id, item_code, page, per_page, keyword, process_status, send_status)
|
|
|
+ page = int(data.get("pageNum", 1))
|
|
|
+ per_page = int(data.get("pageSize", 10))
|
|
|
+ keyword = data.get("keyword")
|
|
|
+ process_status = (
|
|
|
+ int(data.get("process_status")) if data.get("process_status") else None
|
|
|
+ )
|
|
|
+ send_status = int(data.get("send_status")) if data.get("send_status") else None
|
|
|
+ task, total_count = task_service.get_tasks_paginated(
|
|
|
+ project_id, item_code, page, per_page, keyword, process_status, send_status
|
|
|
+ )
|
|
|
return TableResponse.success(task, total_count)
|
|
|
except Exception as e:
|
|
|
- return ResponseBase.error(f'获取任务列表失败:{str(e)}')
|
|
|
+ return ResponseBase.error(f"获取任务列表失败:{str(e)}")
|
|
|
|
|
|
|
|
|
-@project_task_api.route('/get/<int:task_id>', methods=['POST'])
|
|
|
+@project_task_api.route("/get/<int:task_id>", methods=["POST"])
|
|
|
@Permission.authorize
|
|
|
-def get_task(task_id:int):
|
|
|
+def get_task(task_id: int):
|
|
|
try:
|
|
|
task = task_service.get_task_dto(task_id)
|
|
|
return ResponseBase.success(task.to_dict())
|
|
|
except Exception as e:
|
|
|
- return ResponseBase.error(f'获取项目失败:{str(e)}')
|
|
|
+ return ResponseBase.error(f"获取项目失败:{str(e)}")
|
|
|
|
|
|
-@project_task_api.route('/save/<int:task_id>', methods=['POST'])
|
|
|
+
|
|
|
+@project_task_api.route("/save/<int:task_id>", methods=["POST"])
|
|
|
@Permission.authorize
|
|
|
-def save_task(task_id:int):
|
|
|
+def save_task(task_id: int):
|
|
|
try:
|
|
|
# 从请求中获取表单数据
|
|
|
form_data = request.form.to_dict()
|
|
|
- budget_id = int(form_data.get('budget_id')) if form_data.get('budget_id') else 0
|
|
|
- item_id = int(form_data.get('item_id')) if form_data.get('item_id') else None
|
|
|
- project_id = form_data.get('project_id')
|
|
|
- item_code = form_data.get('item_code')
|
|
|
- task_name = form_data.get('task_name')
|
|
|
- task_desc = form_data.get('task_desc')
|
|
|
- task_sort = int(form_data.get('task_sort')) if form_data.get('task_sort') else 0
|
|
|
- run_now = form_data.get('run_now')=='true'
|
|
|
+ budget_id = int(form_data.get("budget_id")) if form_data.get("budget_id") else 0
|
|
|
+ item_id = int(form_data.get("item_id")) if form_data.get("item_id") else None
|
|
|
+ project_id = form_data.get("project_id")
|
|
|
+ item_code = form_data.get("item_code")
|
|
|
+ task_name = form_data.get("task_name")
|
|
|
+ task_desc = form_data.get("task_desc")
|
|
|
+ task_sort = int(form_data.get("task_sort")) if form_data.get("task_sort") else 0
|
|
|
+ run_now = form_data.get("run_now") == "true"
|
|
|
# delete_old = form_data.get('delete_old', 'false').lower() == 'true'
|
|
|
# 获取上传的文件
|
|
|
- files = request.files.getlist('files')
|
|
|
+ files = request.files.getlist("files")
|
|
|
# 验证必要参数
|
|
|
- if not all([ project_id, task_name]):
|
|
|
- return ResponseBase.error('缺少必要参数:project_id、task_name')
|
|
|
+ if not all([project_id, task_name]):
|
|
|
+ return ResponseBase.error("缺少必要参数:project_id、task_name")
|
|
|
# 构建任务DTO
|
|
|
task_dto = ProjectTaskDto(
|
|
|
item_id=item_id,
|
|
@@ -62,53 +68,58 @@ def save_task(task_id:int):
|
|
|
task_name=task_name,
|
|
|
task_desc=task_desc,
|
|
|
task_sort=task_sort,
|
|
|
- file_path=None
|
|
|
+ file_path=None,
|
|
|
)
|
|
|
-
|
|
|
+
|
|
|
# 保存任务
|
|
|
task = task_service.save_task(task_id, task_dto, files)
|
|
|
- msg =""
|
|
|
+ msg = ""
|
|
|
if run_now:
|
|
|
msg = task_service.start_run_task(task.id)
|
|
|
- if msg == '0':
|
|
|
- msg = '项目有正在运行的任务,已加入等待列表中'
|
|
|
+ if msg == "0":
|
|
|
+ msg = "项目有正在运行的任务,已加入等待列表中"
|
|
|
elif msg:
|
|
|
return ResponseBase.error(msg)
|
|
|
return ResponseBase.success(task.to_dict(), msg)
|
|
|
except ValueError as ve:
|
|
|
- return ResponseBase.error(f'参数格式错误:{str(ve)}')
|
|
|
+ return ResponseBase.error(f"参数格式错误:{str(ve)}")
|
|
|
except Exception as e:
|
|
|
- return ResponseBase.error(f'保存任务失败:{str(e)}')
|
|
|
+ return ResponseBase.error(f"保存任务失败:{str(e)}")
|
|
|
|
|
|
-@project_task_api.route('/delete/<int:task_id>', methods=['POST'])
|
|
|
+
|
|
|
+@project_task_api.route("/delete/<int:task_id>", methods=["POST"])
|
|
|
@Permission.authorize
|
|
|
-def delete_task(task_id:int):
|
|
|
+def delete_task(task_id: int):
|
|
|
try:
|
|
|
task = task_service.delete_task(task_id)
|
|
|
return ResponseBase.success(task)
|
|
|
except Exception as e:
|
|
|
- return ResponseBase.error(f'删除任务失败:{str(e)}')
|
|
|
+ return ResponseBase.error(f"删除任务失败:{str(e)}")
|
|
|
+
|
|
|
|
|
|
-@project_task_api.route('/download', methods=['POST'])
|
|
|
+@project_task_api.route("/download", methods=["POST"])
|
|
|
@Permission.authorize
|
|
|
def download_file():
|
|
|
- filename = request.args.get('filename', type=str)
|
|
|
+ filename = request.args.get("filename", type=str)
|
|
|
if not filename:
|
|
|
- return ResponseBase.error('文件名不能为空')
|
|
|
+ return ResponseBase.error("文件名不能为空")
|
|
|
try:
|
|
|
# 安全处理文件名
|
|
|
pure_filename = os.path.basename(filename)
|
|
|
safe_filename = os.path.basename(pure_filename)
|
|
|
- path = filename.replace(safe_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 ResponseBase.error('项目目录不存在')
|
|
|
+ return ResponseBase.error("项目目录不存在")
|
|
|
full_path = os.path.join(upload_folder, safe_filename)
|
|
|
if not os.path.exists(full_path):
|
|
|
- return ResponseBase.error('文件不存在')
|
|
|
+ return ResponseBase.error("文件不存在")
|
|
|
except Exception as e:
|
|
|
- return ResponseBase.error(f'非法文件路径{str(e)}')
|
|
|
- return send_from_directory(upload_folder.replace('\\', '/'), safe_filename, as_attachment=True)
|
|
|
+ return ResponseBase.error(f"非法文件路径{str(e)}")
|
|
|
+ return send_from_directory(
|
|
|
+ upload_folder.replace("\\", "/"), safe_filename, as_attachment=True
|
|
|
+ )
|
|
|
+
|
|
|
|
|
|
# @project_task_api.route('/start_collect/<int:task_id>', methods=['POST'])
|
|
|
# @Permission.authorize
|
|
@@ -132,40 +143,42 @@ def download_file():
|
|
|
# except Exception as e:
|
|
|
# return ResponseBase.error(f'启动处理失败:{str(e)}')
|
|
|
|
|
|
-@project_task_api.route('/start_task/<int:task_id>', methods=['POST'])
|
|
|
+
|
|
|
+@project_task_api.route("/start_task/<int:task_id>", methods=["POST"])
|
|
|
@Permission.authorize
|
|
|
-def start_task(task_id:int):
|
|
|
+def start_task(task_id: int):
|
|
|
try:
|
|
|
msg = task_service.start_run_task(task_id)
|
|
|
- if msg == '0':
|
|
|
- msg = '项目有正在运行的任务,已加入等待列表中'
|
|
|
+ if msg == "0":
|
|
|
+ msg = "项目有正在运行的任务,已加入等待列表中"
|
|
|
elif msg:
|
|
|
return ResponseBase.error(msg)
|
|
|
else:
|
|
|
- msg = '运行成功'
|
|
|
+ msg = "运行成功"
|
|
|
return ResponseBase.success(message=msg)
|
|
|
except Exception as e:
|
|
|
- return ResponseBase.error(f'运行失败:{str(e)}')
|
|
|
+ return ResponseBase.error(f"运行失败:{str(e)}")
|
|
|
+
|
|
|
|
|
|
-@project_task_api.route('/cancel_task/<int:task_id>', methods=['POST'])
|
|
|
+@project_task_api.route("/cancel_task/<int:task_id>", methods=["POST"])
|
|
|
@Permission.authorize
|
|
|
-def cancel_task(task_id:int):
|
|
|
+def cancel_task(task_id: int):
|
|
|
try:
|
|
|
msg = task_service.cancel_run_task(task_id)
|
|
|
if msg:
|
|
|
return ResponseBase.error(msg)
|
|
|
- return ResponseBase.success(message='启动采集成功')
|
|
|
+ return ResponseBase.success(message="启动采集成功")
|
|
|
except Exception as e:
|
|
|
- return ResponseBase.error(f'启动采集失败:{str(e)}')
|
|
|
+ return ResponseBase.error(f"启动采集失败:{str(e)}")
|
|
|
|
|
|
|
|
|
-@project_task_api.route('/start_send/<int:task_id>', methods=['POST'])
|
|
|
+@project_task_api.route("/start_send/<int:task_id>", methods=["POST"])
|
|
|
@Permission.authorize
|
|
|
-def start_send(task_id:int):
|
|
|
+def start_send(task_id: int):
|
|
|
try:
|
|
|
msg = task_service.start_send_task(task_id)
|
|
|
if msg:
|
|
|
return ResponseBase.error(msg)
|
|
|
- return ResponseBase.success(message='启动发送成功')
|
|
|
+ return ResponseBase.success(message="启动发送成功")
|
|
|
except Exception as e:
|
|
|
- return ResponseBase.error(f'启动发送失败:{str(e)}')
|
|
|
+ return ResponseBase.error(f"启动发送失败:{str(e)}")
|