response.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends,Query, HTTPException, status
  4. from common.security import valid_access_token
  5. from fastapi.responses import JSONResponse
  6. from sqlalchemy.orm import Session
  7. from sqlalchemy import and_, or_
  8. from pydantic import BaseModel
  9. from datetime import datetime
  10. from database import get_db
  11. from typing import List
  12. from models import *
  13. from utils import *
  14. import json
  15. import traceback
  16. from . import response
  17. router = APIRouter()
  18. @router.get('/list')
  19. async def get_emergency_response_list(
  20. planNum:str,
  21. page: int = Query(1, gt=0, description='页码'),
  22. pageSize: int = Query(5, gt=0, description='每页条目数量'),
  23. db: Session = Depends(get_db),
  24. user_id = Depends(valid_access_token)
  25. ):
  26. try:
  27. # 查询所有响应事件
  28. query = db.query(EmergencyResponse)
  29. query = query.filter(EmergencyResponse.del_flag!='2')
  30. query = query.filter(EmergencyResponse.plan_id==planNum)
  31. # 计算总条目数
  32. total_items = query.count()
  33. # 排序
  34. query = query.order_by(EmergencyResponse.response_start_time.desc())
  35. # 执行分页查询
  36. responses = query.offset((page - 1) * pageSize).limit(pageSize).all()
  37. # 将查询结果转换为列表形式的字典
  38. response_list = [
  39. {
  40. "responseId": response.response_id,
  41. "eventName": response.event_name,
  42. "eventType": response.event_type,
  43. "responseUnit": response.response_unit,
  44. "eventAddress": response.event_address,
  45. "responseLevel": response.response_level,
  46. "responseStartTime": response.response_start_time.strftime('%Y-%m-%d %H:%M:%S') if response.response_start_time else '',
  47. "responseEndTime": response.response_end_time.strftime('%Y-%m-%d %H:%M:%S') if response.response_end_time else '',
  48. }
  49. for response in responses
  50. ]
  51. # 返回结果
  52. return {
  53. "code": 200,
  54. "msg": "成功获取响应列表",
  55. "data": response_list,
  56. "total": total_items,
  57. "page": page,
  58. "pageSize": pageSize,
  59. "totalPages": (total_items + pageSize - 1) // pageSize
  60. }
  61. except Exception as e:
  62. # 处理异常
  63. traceback.print_exc()
  64. raise HTTPException(status_code=500, detail=str(e))