From 57df6a2704d5bd785199f29fa69ad46dffd392b3 Mon Sep 17 00:00:00 2001 From: 16337 <1633794139@qq.com> Date: Thu, 2 Apr 2026 09:34:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E6=97=A5=E6=8A=A5?= =?UTF-8?q?=E6=91=84=E5=83=8F=E5=A4=B4Top5=E6=98=BE=E7=A4=BA=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E8=80=8C=E9=9D=9E=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 日报生成时直接读取IoT数据库的camera_name字段,该字段存的是 camera_code(如cam_2043d9aed65c),导致日报中摄像头名称 无法识别。 改为统一收集camera_id,通过camera_name_service批量调WVP API 解析真实名称,解析失败时降级使用camera_code。 --- app/services/daily_report_service.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/app/services/daily_report_service.py b/app/services/daily_report_service.py index 1bd4bc8..6f96a8b 100644 --- a/app/services/daily_report_service.py +++ b/app/services/daily_report_service.py @@ -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