libushang hai 3 meses
pai
achega
3f2ac1c224

+ 6 - 0
jobs/__init__.py

@@ -12,6 +12,7 @@ from .rainfall_conditions_job import proc as rainfall_proc
 from .avcon_job import proc as avcon_proc
 from .duty_job import proc as duty_proc
 from .vehicle_job import proc as vehicle_proc
+from .hkvideo_job import proc as hkvideo_proc
 
 def register_jobs(scheduler: BaseScheduler):
     scheduler.add_job(yzy_proc, next_run_time=(datetime.now() + timedelta(seconds=3)))
@@ -36,5 +37,10 @@ def register_jobs(scheduler: BaseScheduler):
     # scheduler.add_job(vehicle_proc, next_run_time=(datetime.now() + timedelta(seconds=3)))
     # scheduler.add_job(vehicle_proc, CronTrigger.from_crontab('*/5 * * * *'))
 
+    # 视频状态更新
+    scheduler.add_job(hkvideo_proc, next_run_time=(datetime.now() + timedelta(seconds=30)))
+    scheduler.add_job(hkvideo_proc, CronTrigger.from_crontab('0 1 * * *'))
+
+
 def tick():
     print(datetime.now())

+ 45 - 0
jobs/hkvideo_job.py

@@ -0,0 +1,45 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+from datetime import datetime
+from sqlalchemy.orm import Session
+from utils import *
+from utils.redis_util import *
+from models import *
+from exceptions import *
+from database import get_db_local
+from extensions import logger
+import traceback
+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)
+
+        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
+        try:
+            data = hk_video_api.indexCode(video_code)
+            if data is not None:
+                status = data['status']
+                row.status = status
+                row.update_time = datetime.now()
+                row.commit()
+        except Exception as e:
+            traceback.print_exc()
+
+            if row is not None:
+                row.status = 9
+                row.update_time = datetime.now()
+                row.commit()
+            

+ 14 - 0
models/video_base.py

@@ -144,3 +144,17 @@ class AvconUser(Base):
 
     class Config:
         orm_mode = True
+
+
+class VideoJob(Base):
+    '''
+    融合设备账号映射
+    '''
+    __tablename__ = 'tp_video_job'
+
+    video_code = Column(String, primary_key=True, comment='点位编号')
+    status = Column(Integer, nullable=True, comment='在线状态 1 在线 0 离线 9 未知')
+    update_time = Column(DateTime, default=datetime.now, nullable=True, comment='更新时间')
+
+    class Config:
+        orm_mode = True

+ 0 - 2
routers/api/videoResource/hkvideo.py

@@ -53,8 +53,6 @@ async def indexCode(
 ):
     try:
         data = hk_video_api.indexCode(code)
-        if isinstance(data,str):
-            data = json.loads(data)
         return {
             "code": 200,
             "msg": "操作成功",

+ 3 - 0
utils/hk_video_api.py

@@ -1,6 +1,7 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
 import requests
+import json
     
 def get_video_url(id: str, protocol: str):
     video_url = ""
@@ -31,6 +32,8 @@ def indexCode(id: str):
         result = response.json()
         if result['errcode'] == 0:
             data = result['data']
+            if isinstance(data,str):
+                data = json.loads(data)
     return data
 
 def controlling(id: str, action: int, command: str, speed: int, presetIndex: str):