ソースを参照

视频查询接口调整。

baoyubo 7 ヶ月 前
コミット
1dfb8a40d0
1 ファイル変更47 行追加18 行削除
  1. 47 18
      routers/api/videoResource/videoinfo.py

+ 47 - 18
routers/api/videoResource/videoinfo.py

@@ -14,31 +14,60 @@ router = APIRouter()
 
 @router.get('/get_video_list_by_user')
 async def get_video_url_by_id(
-
+    longitude:float = Query(None,  description='经度'),
+    latitude:float = Query(None,  description='纬度'),
     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='每页条目数量')
 ):
+    if longitude is not None and latitude is not None:
+        location = f"""ST_Distance_Sphere(
+        ST_GeomFromText(CONCAT('POINT(', longitude, ' ', latitude, ')')), 
+        ST_PointFromText('POINT({longitude} {latitude})'))"""
+        orddis = 'distance'
+    else:
+        location = 0
+        orddis = ''
     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()
+        video = ''
+    else:
+        video = ""
+        for i in video_list:
+            video += f"WHEN '{i}' THEN 0 \n"
 
-    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 = []
-    for video in videos:
-        videoBase = db.query(TpVideoBase).filter(TpVideoBase.indexcode==video.video_code_int).first()
+        video = f"""CASE video_code_int
+    {video}
+    ELSE 1
+END """
+    if orddis != '' and video !='':
+        video += ','
+    sql  = f"""SELECT T1.indexcode,T2.`name`,T1.longitude,T1.latitude,
+        {location} AS distance,T2.area,T2.ip,T2.`status`,T2.status_lifetime,T2.record_status,T2.inspection_datetime,T2.video_code_int,T2.video_code
+    FROM tp_video_base T1 RIGHT JOIN tp_video_log T2 on T1.indexcode=T2.video_code_int  where  T1.longitude is not NULL
+    ORDER BY {video} {orddis} """
+    totalsql = f'select count(*) from ({sql})t'
+    print(video_list)
 
+    total_items = db.execute(totalsql).first()[0]
+
+    lim = f"limit  {pageSize*(page-1)}, {pageSize};"
+    videos = db.execute(sql+lim).all()
+    # 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_list1 = []
+    for video in videos:
         videoInfo = {
             "name": video.name,
             "invideoIds": video.video_code_int in video_list,
@@ -50,14 +79,14 @@ async def get_video_url_by_id(
             "inspection_datetime": video.inspection_datetime,
             "video_code_int": video.video_code_int,
             "video_code": video.video_code,
-            "longitude":videoBase.longitude,
-            "latitude":videoBase.latitude
+            "longitude":video.longitude,
+            "latitude":video.latitude
         }
-        video_list.append(videoInfo)
+        video_list1.append(videoInfo)
     return {
             "code": 200,
             "msg": "操作成功",
-            "rows": video_list,
+            "rows": video_list1,
             "total": total_items,
             "page": page,
             "pageSize": pageSize,