__init__.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  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_,text,literal
  8. from sqlalchemy.sql import func
  9. from sqlalchemy.future import select
  10. from common.auth_user import *
  11. from pydantic import BaseModel
  12. from database import get_db,get_share_db
  13. from typing import List
  14. from models import *
  15. from utils import *
  16. from utils.ry_system_util import *
  17. from utils.video_util import *
  18. from collections import defaultdict
  19. import traceback
  20. from concurrent.futures import ThreadPoolExecutor, as_completed
  21. from multiprocessing import Pool, cpu_count
  22. import json
  23. import time
  24. import math
  25. router = APIRouter()
  26. @router.put("/update/{id}")
  27. async def update_info(
  28. id :str ,
  29. user_id=Depends(valid_access_token),
  30. body=Depends(remove_xss_json),
  31. db: Session = Depends(get_share_db)
  32. ):
  33. try:
  34. query = db.query(EmergencyExpertInfo)
  35. query = query.filter(EmergencyExpertInfo.id == id)
  36. update_info = query.first()
  37. if not update_info:
  38. return JSONResponse(status_code=404, content={'msg':'信息不存在','code':404})
  39. update_info.county = body['county']
  40. update_info.expert_type = body['expert_type']
  41. update_info.honorary_title = body['honorary_title']
  42. update_info.unit = body['unit']
  43. update_info.position = body['position']
  44. update_info.professional_title = body['professional_title']
  45. update_info.specialty = body['specialty']
  46. update_info.rescue_experience = body['rescue_experience']
  47. update_info.birth_date = body['birth_date']
  48. update_info.work_start_date = body['work_start_date']
  49. update_info.certificate_issue_date = body['certificate_issue_date']
  50. update_info.professional_group = body['professional_group']
  51. update_info.professional_field = body['professional_field']
  52. update_info.work_phone = body['work_phone']
  53. update_info.home_phone = body['home_phone']
  54. update_info.mobile_phone = body['mobile_phone']
  55. update_info.email = body['email']
  56. update_info.contact_address = body['contact_address']
  57. update_info.longitude = body['longitude']
  58. update_info.latitude = body['latitude']
  59. db.commit()
  60. return {"code": 200, "msg": "更新成功"}
  61. except Exception as e:
  62. traceback.print_exc()
  63. return JSONResponse(status_code=500, content={'msg': f"Internal server error: {str(e)}", 'code': 500})
  64. @router.get("/info/{id}")
  65. async def get_info(
  66. id: str,
  67. db: Session = Depends(get_share_db)
  68. ):
  69. try:
  70. query = db.query(EmergencyExpertInfo)
  71. query = query.filter(EmergencyExpertInfo.id == id)
  72. info = query.first()
  73. # pattern = db.query(TpPatternList).filter(TpPatternList.id == pattern_id).first()
  74. if not info:
  75. return JSONResponse(status_code=404, content={'msg':'信息不存在','code':404})
  76. return {"code": 200, "msg": "获取成功", "data": dict(info)}
  77. except Exception as e:
  78. traceback.print_exc()
  79. return JSONResponse(status_code=500, content={'msg': f"Internal server error: {str(e)}", 'code': 500})
  80. @router.get("/list")
  81. async def get_list_info(
  82. keyword : str = Query(None),
  83. page: int = Query(1, gt=0, description='页码'),
  84. pageSize: int = Query(5, gt=0, description='每页条目数量'),
  85. db: Session = Depends(get_share_db)
  86. ):
  87. try:
  88. query = db.query(EmergencyExpertInfo)
  89. if keyword:
  90. query = db.query(or_(EmergencyExpertInfo.name.like(f'%keyword%'),
  91. EmergencyExpertInfo.unit.like(f'%keyword%'),
  92. EmergencyExpertInfo.professional_title.like(f'%keyword%'),
  93. EmergencyExpertInfo.professional_group.like(f'%keyword%'),
  94. EmergencyExpertInfo.professional_field.like(f'%keyword%')))
  95. total_items = query.count()
  96. query = query.offset((page - 1) * pageSize).limit(pageSize)
  97. data = query.all()
  98. return {"code": 200, "msg": "获取成功", "data": [dict(info) for info in data],
  99. "total": total_items,
  100. "page": page,
  101. "pageSize": pageSize,
  102. "totalPages": (total_items + pageSize - 1) // pageSize}
  103. except Exception as e:
  104. traceback.print_exc()
  105. return JSONResponse(status_code=500, content={'msg': f"Internal server error: {str(e)}", 'code': 500})