__init__.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. import json
  2. import random
  3. from sqlalchemy import create_engine, select
  4. from utils.StripTagsHTMLParser import *
  5. from sqlalchemy.orm import Session
  6. import traceback
  7. from models import *
  8. from common.db import db_task
  9. from common.security import valid_access_token
  10. from datetime import datetime, timedelta
  11. from fastapi import APIRouter, Depends,HTTPException,Response,Query
  12. from database import get_db
  13. from pydantic import BaseModel
  14. router = APIRouter()
  15. @router.post('/create')
  16. async def create_task(
  17. request: Request,
  18. db: Session = Depends(get_db),
  19. body=Depends(remove_xss_json),
  20. user_id=Depends(valid_access_token)):
  21. try:
  22. # 验证必需的字段
  23. required_fields = ['task_description', 'unit_name', 'registrar']
  24. missing_fields = [field for field in required_fields if field not in body]
  25. if missing_fields:
  26. raise HTTPException(status_code=401, detail=f"Missing required fields: {', '.join(missing_fields)}")
  27. # eventId = db_event_management.get_next_event_id(db)
  28. task_id =db_task.get_next_event_id(db)
  29. task_base = TaskRegistration(
  30. **body,
  31. task_id = task_id
  32. )
  33. db.add(task_base)
  34. db.commit()
  35. return {
  36. "code": 200,
  37. "msg": "任务创建成功",
  38. "data": task_id
  39. }
  40. except Exception as e:
  41. db.rollback()
  42. traceback.print_exc()
  43. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  44. class TaskQuery(BaseModel):
  45. task_id: str = None
  46. task_description: str = None
  47. unit_name: str = None
  48. registrar: str = None
  49. creation_time: str = None
  50. processing_status: str = None
  51. @router.post('/select')
  52. @router.get('/select')
  53. async def select_tasks(
  54. request: Request,
  55. db: Session = Depends(get_db),
  56. query: TaskQuery = Depends(),
  57. user_id=Depends(valid_access_token),
  58. pageNum: int = Query(1, gt=0, description="页码"),
  59. pageSize: int = Query(10, gt=0, le=100, description="每页大小")):
  60. try:
  61. data_query = db.query(TaskRegistration).filter(TaskRegistration.del_flag != '2')
  62. if query.task_id:
  63. data_query = data_query.filter(TaskRegistration.task_id == query.task_id)
  64. if query.task_description:
  65. data_query = data_query.filter(TaskRegistration.task_description == query.task_description)
  66. if query.unit_name:
  67. data_query = data_query.filter(TaskRegistration.unit_name == query.unit_name)
  68. if query.registrar:
  69. data_query = data_query.filter(TaskRegistration.registrar == query.registrar)
  70. if query.creation_time:
  71. data_query = data_query.filter(TaskRegistration.creation_time == query.creation_time)
  72. if query.processing_status:
  73. data_query = data_query.filter(TaskRegistration.processing_status == query.processing_status)
  74. # 计算分页的偏移量
  75. offset = (pageNum - 1) * pageSize
  76. # 应用分页
  77. data_query = data_query.offset(offset).limit(pageSize)
  78. tasks = data_query.all()
  79. total_count = data_query.count()
  80. return {
  81. "code": 200,
  82. "msg": "任务查询成功",
  83. "data": tasks,
  84. "total": total_count,
  85. "pages": (total_count + pageSize - 1) // pageSize,
  86. "current_page": pageNum,
  87. "page_size": pageSize
  88. }
  89. except Exception as e:
  90. db.rollback()
  91. traceback.print_exc()
  92. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  93. @router.put('/update')
  94. async def update_task_status(
  95. request: Request,
  96. db: Session = Depends(get_db),
  97. user_id=Depends(valid_access_token)): # 确保用户已验证
  98. try:
  99. body = await request.json()
  100. task_id_to_use = body.get('task_id')
  101. processing_status = body.get('processing_status')
  102. if not task_id_to_use:
  103. return Response(content="Missing required parameter 'task_id'", status_code=400)
  104. if processing_status not in ['已完成', '未完成']:
  105. return Response(content="processing_status must be '已完成' or '未完成'", status_code=400)
  106. # 查询要更新的任务
  107. # data_query = db.query(TaskRegistration).filter(TaskRegistration.del_flag != '2')
  108. task_entry = db.query(TaskRegistration).filter(TaskRegistration.task_id == task_id_to_use).first()
  109. print(task_entry)
  110. print(not task_entry)
  111. if not task_entry:
  112. raise HTTPException(status_code=404, detail="任务不存在")
  113. # 更新任务状态
  114. task_entry.processing_status = processing_status
  115. task_entry.update_time = datetime.now() # 更新时间
  116. # 提交数据库事务
  117. db.commit()
  118. return {
  119. "code": 200,
  120. "msg": "任务状态更新成功",
  121. "data": {
  122. "task_id": task_id_to_use,
  123. "processing_status": task_entry.processing_status,
  124. "update_time": task_entry.update_time.isoformat()
  125. }
  126. }
  127. except Exception as e:
  128. db.rollback()
  129. raise HTTPException(status_code=500, detail=str(e))
  130. @router.delete('/delete')
  131. async def delete_task(
  132. request: Request,
  133. db: Session = Depends(get_db),
  134. user_id=Depends(valid_access_token)): # 确保用户已验证
  135. try:
  136. body = await request.json()
  137. task_id_to_use = body.get('taskID')
  138. if not task_id_to_use:
  139. raise HTTPException(status_code=400, detail="Missing required parameter 'taskID'")
  140. # 查询要删除的任务
  141. task_entry = db.query(TaskRegistration).filter(TaskRegistration.task_id == task_id_to_use).first()
  142. if not task_entry:
  143. raise HTTPException(status_code=404, detail="任务不存在")
  144. # 将找到的任务的 del_flag 改为 '2'
  145. task_entry.del_flag = '2'
  146. try:
  147. db.commit()
  148. return {
  149. "code": 200,
  150. "msg": "任务删除成功",
  151. "data": {
  152. "task_id": task_entry.task_id
  153. }
  154. }
  155. except Exception as e:
  156. db.rollback()
  157. raise HTTPException(status_code=500, detail=f"An error occurred while deleting the task: {str(e)}")
  158. except HTTPException as e:
  159. # 如果捕获到HTTP异常,直接抛出
  160. raise e
  161. except Exception as e:
  162. db.rollback()
  163. raise HTTPException(status_code=500, detail=f"An unexpected error occurred: {str(e)}")