hkvideo_job.py 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from datetime import datetime
  4. from sqlalchemy.orm import Session
  5. from sqlalchemy import text
  6. from utils import *
  7. from utils.redis_util import *
  8. from models import *
  9. from exceptions import *
  10. from database import get_db_local
  11. from extensions import logger
  12. import traceback
  13. import time
  14. from utils import hk_video_api
  15. def proc():
  16. lock_key = "hkvideo_job_proc"
  17. if redis_lock(lock_key):
  18. logger.info(datetime.now())
  19. db = get_db_local()
  20. refresh_hkvideo(db)
  21. refresh_hkvideo_list(db)
  22. db.close()
  23. redis_unlock(lock_key)
  24. def refresh_hkvideo(db: Session):
  25. rows = db.query(VideoJob).order_by(VideoJob.update_time.asc()).limit(200).all()
  26. for row in rows:
  27. video_code = row.video_code
  28. status = 9
  29. time.sleep(0.01)
  30. try:
  31. data = hk_video_api.indexCode(video_code)
  32. # print(video_code, data)
  33. if data is not None:
  34. status = data['status']
  35. except Exception as e:
  36. traceback.print_exc()
  37. row.status = status
  38. row.update_time = datetime.now()
  39. db.commit()
  40. update_assis_video_table(video_code, status, db)
  41. def update_assis_video_table(video_code: str, status: int, db: Session) -> None:
  42. pass
  43. # def refresh_hkvideo_list(db: Session):
  44. # api = hk_video_api.HikvisionAPI()
  45. # data = api.get_cameras()
  46. # if isinstance(data,dict):
  47. # if data['code']=='0':
  48. # total = data['data']['total']
  49. # pageSize= 1000
  50. # totalPages = (total + pageSize - 1) // pageSize
  51. # infos = []
  52. # for i in range(totalPages):
  53. # data = api.get_cameras(i+1,pageSize)
  54. # if data['code'] == '0':
  55. # list = data['data']['list']
  56. # for i in list:
  57. # infos.append(TPVideoInfo(cameraIndexCode = i['cameraIndexCode'],
  58. # gbIndexCode = i['gbIndexCode'],
  59. # name = i['name'],
  60. # longitude = i['longitude'],
  61. # latitude = i['latitude'],
  62. # altitude = i['altitude'],
  63. # pixel = i['pixel'],
  64. # cameraType = i['cameraType'],
  65. # cameraTypeName = i['cameraTypeName'],
  66. # installPlace = i['installPlace'],
  67. # updateTime = i['updateTime'],
  68. # createTime = i['createTime'],
  69. # status =i['status'],
  70. # statusName = i['statusName']))
  71. # db.execute(text(f"TRUNCATE TABLE tp_video_info;"))
  72. # db.add_all(infos)
  73. # db.commit()
  74. def refresh_hkvideo_list(db: Session):
  75. api = hk_video_api.HikvisionAPI()
  76. data = api.get_cameras()
  77. if isinstance(data, dict):
  78. if data['code'] == '0':
  79. total = data['data']['total']
  80. page_size = 1000
  81. total_pages = (total + page_size - 1) // page_size
  82. infos = []
  83. for page in range(total_pages):
  84. print(f'视频条数{total_pages},正在获取视频信息第{page}页')
  85. data = api.get_cameras(page + 1, page_size)
  86. if data['code'] == '0':
  87. camera_list = data['data']['list']
  88. for camera_info in camera_list:
  89. longitude= camera_info['longitude']
  90. latitude = camera_info['latitude']
  91. if longitude=='':
  92. longitude = 0.0
  93. if latitude=='':
  94. latitude = 0.0
  95. info = TPVideoInfo(
  96. cameraIndexCode=camera_info['cameraIndexCode'],
  97. gbIndexCode=camera_info['gbIndexCode'],
  98. name=camera_info['name'],
  99. longitude=longitude,
  100. latitude=latitude,
  101. altitude=camera_info['altitude'],
  102. pixel=camera_info['pixel'],
  103. cameraType=camera_info['cameraType'],
  104. unitIndexCode = camera_info['unitIndexCode'],
  105. cameraTypeName=camera_info['cameraTypeName'],
  106. installPlace=camera_info['installPlace'],
  107. updateTime=camera_info['updateTime'],
  108. createTime=camera_info['createTime'],
  109. status=camera_info['status'],
  110. statusName=camera_info['statusName']
  111. )
  112. infos.append(info)
  113. else:
  114. print(f"Failed to fetch cameras on page {page + 1}")
  115. return
  116. try:
  117. # 清空表
  118. db.execute(text("TRUNCATE TABLE tp_video_info;"))
  119. # 插入新数据
  120. db.add_all(infos)
  121. db.commit()
  122. except Exception as e:
  123. db.rollback() # 回滚事务
  124. print(f"Error occurred during database operations: {e}")
  125. else:
  126. print("Failed to fetch initial camera data")
  127. else:
  128. print("API response is not in the expected format")
  129. def refresh_hkvideo_region_list(db: Session):
  130. api = hk_video_api.HikvisionAPI()
  131. data = api.get_regions()
  132. if isinstance(data, dict):
  133. if data['code'] == '0':
  134. total = data['data']['total']
  135. page_size = 1000
  136. total_pages = (total + page_size - 1) // page_size
  137. infos = []
  138. for page in range(total_pages):
  139. print(f'视频条数{total_pages},正在获取视频信息第{page}页')
  140. data = api.get_regions(page + 1, page_size)
  141. if data['code'] == '0':
  142. region_list = data['data']['list']
  143. for cregion_info in region_list:
  144. pass
  145. # longitude= camera_info['longitude']
  146. # latitude = camera_info['latitude']
  147. # if longitude=='':
  148. # longitude = 0.0
  149. # if latitude=='':
  150. # latitude = 0.0
  151. # info = TPVideoInfo(
  152. # cameraIndexCode=camera_info['cameraIndexCode'],
  153. # gbIndexCode=camera_info['gbIndexCode'],
  154. # name=camera_info['name'],
  155. # longitude=longitude,
  156. # latitude=latitude,
  157. # altitude=camera_info['altitude'],
  158. # pixel=camera_info['pixel'],
  159. # cameraType=camera_info['cameraType'],
  160. # unitIndexCode = camera_info['unitIndexCode'],
  161. # cameraTypeName=camera_info['cameraTypeName'],
  162. # installPlace=camera_info['installPlace'],
  163. # updateTime=camera_info['updateTime'],
  164. # createTime=camera_info['createTime'],
  165. # status=camera_info['status'],
  166. # statusName=camera_info['statusName']
  167. # )
  168. # infos.append(info)
  169. else:
  170. print(f"Failed to fetch cameras on page {page + 1}")
  171. return
  172. try:
  173. # 清空表
  174. db.execute(text("TRUNCATE TABLE tp_video_region;"))
  175. # 插入新数据
  176. db.add_all(infos)
  177. db.commit()
  178. except Exception as e:
  179. db.rollback() # 回滚事务
  180. print(f"Error occurred during database operations: {e}")
  181. else:
  182. print("Failed to fetch initial camera data")
  183. else:
  184. print("API response is not in the expected format")