123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- from datetime import datetime
- from sqlalchemy.orm import Session
- from sqlalchemy import text
- from utils import *
- from utils.video_util import unitIndexCode_get_video_region_info
- from utils.redis_util import *
- from models import *
- from exceptions import *
- from database import get_db_local
- from extensions import logger
- import traceback
- import time
- from utils import hk_video_api
- def proc():
- lock_key = "hkvideo_job_proc"
- if redis_lock(lock_key):
- logger.info(datetime.now())
- db = get_db_local()
- refresh_hkvideo(db)
- refresh_hkvideo_region_list(db)
- refresh_hkvideo_list(db)
- db.close()
- redis_unlock(lock_key)
- def refresh_hkvideo(db: Session):
- rows = db.query(VideoJob).order_by(VideoJob.update_time.asc()).limit(200).all()
- for row in rows:
- video_code = row.video_code
- status = 9
- time.sleep(0.01)
- try:
- data = hk_video_api.indexCode(video_code)
- # print(video_code, data)
- if data is not None:
- status = data['status']
- except Exception as e:
- traceback.print_exc()
- row.status = status
- row.update_time = datetime.now()
- db.commit()
- update_assis_video_table(video_code, status, db)
-
- def update_assis_video_table(video_code: str, status: int, db: Session) -> None:
- pass
- # def refresh_hkvideo_list(db: Session):
- # api = hk_video_api.HikvisionAPI()
- # data = api.get_cameras()
- # if isinstance(data,dict):
- # if data['code']=='0':
- # total = data['data']['total']
- # pageSize= 1000
- # totalPages = (total + pageSize - 1) // pageSize
- # infos = []
- # for i in range(totalPages):
- # data = api.get_cameras(i+1,pageSize)
- # if data['code'] == '0':
- # list = data['data']['list']
- # for i in list:
- # infos.append(TPVideoInfo(cameraIndexCode = i['cameraIndexCode'],
- # gbIndexCode = i['gbIndexCode'],
- # name = i['name'],
- # longitude = i['longitude'],
- # latitude = i['latitude'],
- # altitude = i['altitude'],
- # pixel = i['pixel'],
- # cameraType = i['cameraType'],
- # cameraTypeName = i['cameraTypeName'],
- # installPlace = i['installPlace'],
- # updateTime = i['updateTime'],
- # createTime = i['createTime'],
- # status =i['status'],
- # statusName = i['statusName']))
- # db.execute(text(f"TRUNCATE TABLE tp_video_info;"))
- # db.add_all(infos)
- # db.commit()
- def refresh_hkvideo_list(db: Session):
- api = hk_video_api.HikvisionAPI()
- data = api.get_cameras()
- if isinstance(data, dict):
- if data['code'] == '0':
- total = data['data']['total']
- page_size = 1000
- total_pages = (total + page_size - 1) // page_size
- infos = []
- for page in range(total_pages):
- print(f'视频条数{total_pages},正在获取视频信息第{page}页')
- data = api.get_cameras(page + 1, page_size)
- if data['code'] == '0':
- camera_list = data['data']['list']
- for camera_info in camera_list:
- longitude= camera_info['longitude']
- latitude = camera_info['latitude']
- if longitude=='':
- longitude = 0.0
- if latitude=='':
- latitude = 0.0
- regionPath = ''
- region = unitIndexCode_get_video_region_info(db,camera_info['unitIndexCode'])
- if region is not None:
- regionPath = region.regionPath
- info = TPVideoInfo(
- cameraIndexCode=camera_info['cameraIndexCode'],
- gbIndexCode=camera_info['gbIndexCode'],
- name=camera_info['name'],
- longitude=longitude,
- latitude=latitude,
- altitude=camera_info['altitude'],
- pixel=camera_info['pixel'],
- cameraType=camera_info['cameraType'],
- unitIndexCode = camera_info['unitIndexCode'],
- regionPath = regionPath,
- cameraTypeName=camera_info['cameraTypeName'],
- installPlace=camera_info['installPlace'],
- updateTime=camera_info['updateTime'],
- createTime=camera_info['createTime'],
- status=camera_info['status'],
- statusName=camera_info['statusName']
- )
- infos.append(info)
- else:
- print(f"Failed to fetch cameras on page {page + 1}")
- return
- try:
- # 清空表
- db.execute(text("TRUNCATE TABLE tp_video_info;"))
- # 插入新数据
- db.add_all(infos)
- db.commit()
- except Exception as e:
- db.rollback() # 回滚事务
- print(f"Error occurred during database operations: {e}")
- else:
- print("Failed to fetch initial camera data")
- else:
- print("API response is not in the expected format")
- def refresh_hkvideo_region_list(db: Session):
- api = hk_video_api.HikvisionAPI()
- data = api.get_regions()
- if isinstance(data, dict):
- if data['code'] == '0':
- total = data['data']['total']
- page_size = 1000
- total_pages = (total + page_size - 1) // page_size
- infos = []
- for page in range(total_pages):
- print(f'视频条数{total_pages},正在获取视频信息第{page}页')
- data = api.get_regions(page + 1, page_size)
- if data['code'] == '0':
- region_list = data['data']['list']
- for cregion_info in region_list:
- if cregion_info['leaf']:
- leaf='1'
- else:
- leaf='0'
- if cregion_info['available']:
- available ='1'
- else:
- available = '0'
- info = TPVideoRegion(
- indexCode = cregion_info['indexCode'],
- regionPath = cregion_info['regionPath'],
- name = cregion_info['name'],
- parentIndexCode = cregion_info['parentIndexCode'],
- treeCode = cregion_info['treeCode'],
- externalIndexCode = cregion_info['externalIndexCode'],
- sort = cregion_info['sort'],
- updateTime = cregion_info['updateTime'],
- createTime = cregion_info['createTime'],
- status = cregion_info['status'],
- available=available,
- leaf=leaf
- )
- infos.append(info)
- else:
- print(f"Failed to fetch cameras on page {page + 1}")
- return
- try:
- # 清空表
- db.execute(text("TRUNCATE TABLE tp_video_region;"))
- # 插入新数据
- db.add_all(infos)
- db.commit()
- except Exception as e:
- db.rollback() # 回滚事务
- print(f"Error occurred during database operations: {e}")
- else:
- print("Failed to fetch initial camera data")
- else:
- print("API response is not in the expected format")
|