task_view.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import json
  2. from flask import url_for, request
  3. from flask_restful import Resource
  4. from sqlalchemy import func
  5. from ..extentions import db
  6. from .models import AnalysisTask, AnalysisPdf
  7. from .ext import task_state_map
  8. from common.custom_response import generate_response
  9. class TaskView(Resource):
  10. def get(self):
  11. """
  12. 查询正在进行的任务
  13. :return:
  14. """
  15. analysis_task_running = AnalysisTask.query.filter(AnalysisTask.status == 0).first()
  16. analysis_task_pending = AnalysisTask.query.filter(AnalysisTask.status == 2).order_by(
  17. AnalysisTask.create_date.asc()).all()
  18. pending_total = db.session.query(func.count(AnalysisTask.id)).filter(AnalysisTask.status == 2).scalar()
  19. if analysis_task_running:
  20. task_nums = pending_total + 1
  21. file_name_split = analysis_task_running.file_name.split("_")
  22. new_file_name = file_name_split[-1] if file_name_split else analysis_task_running.file_name
  23. data = [
  24. {
  25. "queues": task_nums, # 正在排队的任务总数
  26. "rank": 1,
  27. "id": analysis_task_running.id,
  28. "url": url_for('analysis.uploadpdfview', filename=analysis_task_running.file_name, as_attachment=False),
  29. "fileName": new_file_name,
  30. "type": analysis_task_running.task_type,
  31. "state": task_state_map.get(analysis_task_running.status),
  32. }
  33. ]
  34. else:
  35. task_nums = pending_total
  36. data = []
  37. for n, task in enumerate(analysis_task_pending):
  38. file_name_split = task.file_name.split("_")
  39. new_file_name = file_name_split[-1] if file_name_split else task.file_name
  40. data.append({
  41. "queues": task_nums, # 正在排队的任务总数
  42. "rank": n + 2,
  43. "id": task.id,
  44. "url": url_for('analysis.uploadpdfview', filename=task.file_name, as_attachment=False),
  45. "fileName": new_file_name,
  46. "type": task.task_type,
  47. "state": task_state_map.get(task.status),
  48. })
  49. data.reverse()
  50. return generate_response(data=data, total=task_nums)
  51. class HistoricalTasksView(Resource):
  52. def get(self):
  53. """
  54. 获取任务历史记录
  55. :return:
  56. """
  57. params = request.args
  58. page_no = params.get('pageNo', 1)
  59. page_size = params.get('pageSize', 10)
  60. total = db.session.query(func.count(AnalysisTask.id)).scalar()
  61. analysis_task = AnalysisTask.query.order_by(AnalysisTask.create_date.desc()).paginate(page=int(page_no),
  62. per_page=int(page_size),
  63. error_out=False)
  64. data = []
  65. for n, task in enumerate(analysis_task):
  66. file_name_split = task.file_name.split("_")
  67. new_file_name = file_name_split[-1] if file_name_split else task.file_name
  68. data.append({
  69. "fileName": new_file_name,
  70. "id": task.id,
  71. "type": task.task_type,
  72. "state": task_state_map.get(task.status),
  73. })
  74. data = {
  75. "list": data,
  76. "total": total,
  77. "pageNo": page_no,
  78. "pageSize": page_size,
  79. }
  80. return generate_response(data=data)
  81. class DeleteTaskView(Resource):
  82. def delete(self, id):
  83. """
  84. 删除任务历史记录
  85. :return:
  86. """
  87. analysis_task = AnalysisTask.query.filter(AnalysisTask.id == id, AnalysisTask.status != 0).first()
  88. if analysis_task:
  89. analysis_pdf = AnalysisPdf.query.filter(AnalysisPdf.id == AnalysisTask.analysis_pdf_id).first()
  90. with db.auto_commit():
  91. db.session.delete(analysis_pdf)
  92. db.session.delete(analysis_task)
  93. else:
  94. return generate_response(code=400, msg="The ID is incorrect", msgZH="id不正确")
  95. return generate_response(data={"id": id})