#!/usr/bin/env python3 # -*- coding: utf-8 -*- from fastapi import APIRouter, Request, Depends,Query,HTTPException from database import get_db from sqlalchemy.orm import Session from sqlalchemy import case from sqlalchemy import text from utils import * from utils.ry_system_util import * from common.security import valid_access_token import traceback router = APIRouter() @router.get('/get_video_list_by_user') async def get_video_url_by_id( db: Session = Depends(get_db), body=Depends(remove_xss_json), user_id=Depends(valid_access_token), page: int = Query(1, gt=0, description='页码'), pageSize: int = Query(10, gt=0, description='每页条目数量') ): videoIds = user_id_get_user_videoIds(db, user_id) video_list = [i.video_code_int for i in videoIds] if len(video_list)==0: video_list = [''] query = db.query(TpVideoLog) total_items = query.count() query = query.order_by( case( [(TpVideoLog.video_code_int == video_code_int, 0) for video_code_int in video_list], else_=1 ) ) videos = query.offset((page - 1) * pageSize).limit(pageSize).all() video_list = [{ "name": video.name, "invideoIds":video.video_code_int in video_list, "area": video.area, "ip": video.ip, "status": video.status, "status_lifetime": video.status_lifetime, "record_status": video.record_status, "inspection_datetime": video.inspection_datetime, "video_code_int": video.video_code_int, "video_code": video.video_code } for video in videos] return { "code": 200, "msg": "操作成功", "rows": video_list, "total": total_items, "page": page, "pageSize": pageSize, "totalPages": (total_items + pageSize - 1) // pageSize } @router.get('/get_waterlogged_all_video_info') async def get_waterlogged_all_video_info( radius:int = Query(None), db: Session = Depends(get_db), body=Depends(remove_xss_json), page: int = Query(1, gt=0, description='页码'), pageSize: int = Query(10, gt=0, description='每页条目数量'), user_id=Depends(valid_access_token)): try: if radius is None: radius=500 sql = f"""SELECT * from mid_waterlogged_roads """ waterlogged_data = db.execute(sql).all() resutl = [] for location_1 in waterlogged_data: location = f"POINT({location_1.lng} {location_1.lat})" sql = text(f"""SELECT indexcode,`name`,longitude,latitude,distance FROM ( SELECT indexcode,`name`,longitude,latitude, ST_Distance_Sphere( ST_GeomFromText(CONCAT('POINT(', longitude, ' ', latitude, ')')), ST_PointFromText('{location}') ) AS distance 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' ORDER BY distance ASC ) T""") resutl+=db.execute(sql).all() total_items = len(resutl) return { "code": 200, "msg": "成功", "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]]}, "page": page, "pageSize": pageSize, "totalPages": (total_items + pageSize - 1) // pageSize } except Exception as e: traceback.print_exc() raise HTTPException(status_code=500, detail=f"Internal server error: {str(e)}")