__init__.py 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  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','event_code']
  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. event_code = db.query(EventBase).filter(EventBase.event_code == body.get('event_code')).first()
  28. if not event_code:
  29. return Response(content="事件不存在", status_code=400)
  30. task_id = db_task.get_next_event_id(db)
  31. task_base = TaskRegistration(
  32. **body,
  33. task_id=task_id
  34. )
  35. db.add(task_base)
  36. db.commit()
  37. return {
  38. "code": 200,
  39. "msg": "任务创建成功",
  40. "data": task_id
  41. }
  42. except Exception as e:
  43. db.rollback()
  44. traceback.print_exc()
  45. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  46. class TaskQuery(BaseModel):
  47. task_id: str = None
  48. task_description: str = None
  49. unit_name: str = None
  50. registrar: str = None
  51. creation_time: str = None
  52. processing_status: str = None
  53. @router.post('/select')
  54. @router.get('/select')
  55. async def select_tasks(
  56. request: Request,
  57. db: Session = Depends(get_db),
  58. query: TaskQuery = Depends(),
  59. sortBy: str = Query(None, description="排序字段"),
  60. sortOrder: str = Query(None, description="排序顺序"),
  61. user_id=Depends(valid_access_token),
  62. pageNum: int = Query(1, gt=0, description="页码"),
  63. event_code: str = Query(None, description="事件ID"),
  64. pageSize: int = Query(10, gt=0, le=100, description="每页大小")):
  65. try:
  66. missing_event_code = db.query(EventBase).filter(EventBase.event_code == event_code).first()
  67. # print(missing_event_code)
  68. if not missing_event_code:
  69. return Response(content="事件不存在", status_code=400)
  70. data_query = db.query(TaskRegistration).filter(TaskRegistration.del_flag != '2')
  71. data_query = data_query.filter(TaskRegistration.event_code == event_code)
  72. # 应用过滤条件
  73. if query.task_id:
  74. data_query = data_query.filter(TaskRegistration.task_id == query.task_id)
  75. if query.task_description:
  76. data_query = data_query.filter(TaskRegistration.task_description == query.task_description)
  77. if query.unit_name:
  78. data_query = data_query.filter(TaskRegistration.unit_name == query.unit_name)
  79. if query.registrar:
  80. data_query = data_query.filter(TaskRegistration.registrar == query.registrar)
  81. if query.creation_time:
  82. data_query = data_query.filter(TaskRegistration.creation_time == query.creation_time)
  83. if query.processing_status:
  84. data_query = data_query.filter(TaskRegistration.processing_status == query.processing_status)
  85. # print(TaskRegistration,sortBy)
  86. if sortBy:
  87. if hasattr(TaskRegistration, sortBy):
  88. print("xx")
  89. sort_attr = getattr(TaskRegistration, sortBy)
  90. data_query = data_query.order_by(sort_attr.asc() if sortOrder == 'asc' else sort_attr.desc())
  91. total_count = data_query.count()
  92. offset = (pageNum - 1) * pageSize
  93. data_query = data_query.offset(offset).limit(pageSize)
  94. tasks = data_query.all()
  95. return {
  96. "code": 200,
  97. "msg": "任务查询成功",
  98. "data": tasks,
  99. "total": total_count,
  100. "pages": (total_count + pageSize - 1) // pageSize,
  101. "current_page": pageNum,
  102. "page_size": pageSize
  103. }
  104. except Exception as e:
  105. db.rollback()
  106. traceback.print_exc()
  107. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")
  108. @router.put('/update')
  109. async def update_task_status(
  110. request: Request,
  111. db: Session = Depends(get_db),
  112. user_id=Depends(valid_access_token)):
  113. body = await request.json()
  114. task_id_to_use = body.get('task_id')
  115. processing_status = body.get('processing_status')
  116. event_code = db.query(EventBase).filter(EventBase.event_code == body.get('event_code')).first()
  117. if not event_code:
  118. return Response(content="事件不存在", status_code=400)
  119. if not task_id_to_use:
  120. return Response(content="Missing required parameter 'task_id'", status_code=400)
  121. if processing_status not in ['已完成', '处理中', '待处理','未完成']:
  122. return Response(content="processing_status must be '已完成' or '处理中' or '待处理' or '未完成'", status_code=400)
  123. task_entry = (db.query(TaskRegistration)
  124. .filter(TaskRegistration.del_flag != '2')
  125. .filter(TaskRegistration.task_id == task_id_to_use))
  126. task_entry = task_entry.first()
  127. if not task_entry:
  128. raise HTTPException(status_code=404, detail="任务不存在")
  129. task_entry.processing_status = processing_status
  130. task_entry.update_time = datetime.now()
  131. try:
  132. db.commit()
  133. return {
  134. "code": 200,
  135. "msg": "任务状态更新成功",
  136. "data": {
  137. "task_id": task_id_to_use,
  138. "processing_status": task_entry.processing_status,
  139. "update_time": task_entry.update_time.isoformat()
  140. }
  141. }
  142. except Exception as e:
  143. db.rollback()
  144. raise HTTPException(status_code=500, detail=str(e))
  145. @router.delete('/delete')
  146. async def delete_task(
  147. request: Request,
  148. db: Session = Depends(get_db),
  149. user_id=Depends(valid_access_token)):
  150. try:
  151. body = await request.json()
  152. task_id_to_use = body.get('taskID')
  153. if not task_id_to_use:
  154. raise HTTPException(status_code=400, detail="Missing required parameter 'taskID'")
  155. event_code = db.query(EventBase).filter(EventBase.event_code == body.get('event_code')).first()
  156. if not event_code:
  157. return Response(content="事件不存在", status_code=400)
  158. task_entry = db.query(TaskRegistration).filter(TaskRegistration.task_id == task_id_to_use).first()
  159. if not task_entry:
  160. raise HTTPException(status_code=404, detail="任务不存在")
  161. task_entry.del_flag = '2'
  162. try:
  163. db.commit()
  164. return {
  165. "code": 200,
  166. "msg": "任务删除成功",
  167. "data": {
  168. "task_id": task_entry.task_id
  169. }
  170. }
  171. except Exception as e:
  172. db.rollback()
  173. raise HTTPException(status_code=500, detail=f"An error occurred while deleting the task: {str(e)}")
  174. except HTTPException as e:
  175. raise e
  176. except Exception as e:
  177. db.rollback()
  178. raise HTTPException(status_code=500, detail=f"An unexpected error occurred: {str(e)}")
  179. @router.get('/selectUnit')
  180. async def select_unit(
  181. request: Request,
  182. db: Session = Depends(get_db),
  183. query: TaskQuery = Depends(),
  184. user_id=Depends(valid_access_token),
  185. ):
  186. try:
  187. data_query = db.query(TaskUnit).filter(TaskUnit.id != '2').all()
  188. return {
  189. "code": 200,
  190. "msg": "查询成功",
  191. "data": data_query
  192. }
  193. except HTTPException as e:
  194. raise e
  195. except Exception as e:
  196. db.rollback()
  197. raise HTTPException(status_code=500, detail=f"An unexpected error occurred: {str(e)}")