videoinfo.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from fastapi import APIRouter, Request, Depends,Query,HTTPException
  4. from database import get_db
  5. from sqlalchemy.orm import Session
  6. from sqlalchemy import case
  7. from sqlalchemy import text
  8. from utils import *
  9. from utils.ry_system_util import *
  10. from common.security import valid_access_token
  11. import traceback
  12. router = APIRouter()
  13. @router.get('/get_video_list_by_user')
  14. async def get_video_url_by_id(
  15. db: Session = Depends(get_db),
  16. body=Depends(remove_xss_json),
  17. user_id=Depends(valid_access_token),
  18. page: int = Query(1, gt=0, description='页码'),
  19. pageSize: int = Query(10, gt=0, description='每页条目数量')
  20. ):
  21. videoIds = user_id_get_user_videoIds(db, user_id)
  22. video_list = [i.video_code_int for i in videoIds]
  23. if len(video_list)==0:
  24. video_list = ['']
  25. query = db.query(TpVideoLog)
  26. total_items = query.count()
  27. query = query.order_by(
  28. case(
  29. [(TpVideoLog.video_code_int == video_code_int, 0) for video_code_int in video_list],
  30. else_=1
  31. )
  32. )
  33. videos = query.offset((page - 1) * pageSize).limit(pageSize).all()
  34. video_list = [{
  35. "name": video.name,
  36. "invideoIds":video.video_code_int in video_list,
  37. "area": video.area,
  38. "ip": video.ip,
  39. "status": video.status,
  40. "status_lifetime": video.status_lifetime,
  41. "record_status": video.record_status,
  42. "inspection_datetime": video.inspection_datetime,
  43. "video_code_int": video.video_code_int,
  44. "video_code": video.video_code
  45. } for video in videos]
  46. return {
  47. "code": 200,
  48. "msg": "操作成功",
  49. "rows": video_list,
  50. "total": total_items,
  51. "page": page,
  52. "pageSize": pageSize,
  53. "totalPages": (total_items + pageSize - 1) // pageSize
  54. }
  55. @router.get('/get_waterlogged_all_video_info')
  56. async def get_waterlogged_all_video_info(
  57. radius:int = Query(None),
  58. db: Session = Depends(get_db),
  59. body=Depends(remove_xss_json),
  60. page: int = Query(1, gt=0, description='页码'),
  61. pageSize: int = Query(10, gt=0, description='每页条目数量'),
  62. user_id=Depends(valid_access_token)):
  63. try:
  64. if radius is None:
  65. radius=500
  66. sql = f"""SELECT * from mid_waterlogged_roads """
  67. waterlogged_data = db.execute(sql).all()
  68. resutl = []
  69. for location_1 in waterlogged_data:
  70. location = f"POINT({location_1.lng} {location_1.lat})"
  71. sql = text(f"""SELECT indexcode,`name`,longitude,latitude,distance FROM (
  72. SELECT indexcode,`name`,longitude,latitude,
  73. ST_Distance_Sphere(
  74. ST_GeomFromText(CONCAT('POINT(', longitude, ' ', latitude, ')')),
  75. ST_PointFromText('{location}')
  76. ) AS distance
  77. FROM tp_video_base where longitude is not null and latitude is not null and ST_Distance_Sphere(ST_GeomFromText(CONCAT('POINT(', longitude, ' ', latitude, ')')),ST_GeomFromText(CONCAT('{location}'))) <= '{radius}' and `status`='ON'
  78. ORDER BY distance ASC ) T""")
  79. resutl+=db.execute(sql).all()
  80. total_items = len(resutl)
  81. return {
  82. "code": 200,
  83. "msg": "成功",
  84. "data": {"list":[{"indexcode":info.indexcode,"name":info.name,"longitude":info.longitude,"latitude":info.latitude,"distance":info.distance} for info in resutl[(page - 1) * pageSize:(page - 1) * pageSize+pageSize]]},
  85. "page": page,
  86. "pageSize": pageSize,
  87. "totalPages": (total_items + pageSize - 1) // pageSize
  88. }
  89. except Exception as e:
  90. traceback.print_exc()
  91. raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")