修复:日报摄像头Top5显示代码而非名称
日报生成时直接读取IoT数据库的camera_name字段,该字段存的是 camera_code(如cam_2043d9aed65c),导致日报中摄像头名称 无法识别。 改为统一收集camera_id,通过camera_name_service批量调WVP API 解析真实名称,解析失败时降级使用camera_code。
This commit is contained in:
@@ -117,7 +117,7 @@ async def generate_daily_report() -> Optional[str]:
|
||||
type_count = {"SECURITY": 0, "CLEAN": 0}
|
||||
status_count = Counter()
|
||||
alarm_type_count = Counter()
|
||||
camera_counter = Counter()
|
||||
camera_code_counter = Counter() # 先按 camera_code 统计
|
||||
false_alarm_count = 0
|
||||
response_times: List[float] = []
|
||||
cleaning_type_count = Counter()
|
||||
@@ -132,10 +132,10 @@ async def generate_daily_report() -> Optional[str]:
|
||||
if sec_ext:
|
||||
if sec_ext.alarm_type:
|
||||
alarm_type_count[sec_ext.alarm_type] += 1
|
||||
if sec_ext.camera_name:
|
||||
camera_counter[sec_ext.camera_name] += 1
|
||||
elif sec_ext.camera_id:
|
||||
camera_counter[sec_ext.camera_id] += 1
|
||||
# 统一用 camera_id(即 camera_code)做 key,后续批量解析名称
|
||||
cam_key = sec_ext.camera_id or sec_ext.camera_name
|
||||
if cam_key:
|
||||
camera_code_counter[cam_key] += 1
|
||||
if sec_ext.false_alarm == 1:
|
||||
false_alarm_count += 1
|
||||
# 响应时长:dispatched → confirmed
|
||||
@@ -149,6 +149,20 @@ async def generate_daily_report() -> Optional[str]:
|
||||
if clean_ext and clean_ext.cleaning_type:
|
||||
cleaning_type_count[clean_ext.cleaning_type] += 1
|
||||
|
||||
# 批量解析摄像头名称(camera_code → 真实名称)
|
||||
camera_counter = Counter()
|
||||
if camera_code_counter:
|
||||
try:
|
||||
from app.services.camera_name_service import get_camera_name_service
|
||||
cam_svc = get_camera_name_service()
|
||||
name_map = await cam_svc.get_display_names_batch(list(camera_code_counter.keys()))
|
||||
for code, count in camera_code_counter.items():
|
||||
display_name = name_map.get(code, code)
|
||||
camera_counter[display_name] += count
|
||||
except Exception as e:
|
||||
logger.warning(f"摄像头名称解析失败,降级使用代码: {e}")
|
||||
camera_counter = camera_code_counter
|
||||
|
||||
# 环比
|
||||
if prev_total > 0:
|
||||
change_pct = (yesterday_total - prev_total) / prev_total * 100
|
||||
|
||||
Reference in New Issue
Block a user