|
@@ -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,
|