fix(aiot): 修复摄像头名称显示问题 - 三级降级策略

问题分析:
1. 部分告警显示camera_code而非摄像头名称
   - cam_1f0e3dad9990 显示为 cam_1f0e3dad9990
   - cam_c51ce410c124 显示为 cam_c51ce410c124
   - cam_6f4922f45568 显示为 cam_6f4922f45568
2. 部分摄像头显示带流ID后缀
   - 大堂吧台3/012 应显示为 大堂吧台3

根本原因:
- 数据库中这3个摄像头的gb_name字段为空
- 原降级逻辑使用app字段(值为camera_code)
- 导致显示camera_code而非实际名称

修复方案 - 三级降级策略:
1. 优先使用gb_name去除流ID后缀:SUBSTRING_INDEX(gb_name, '/', 1)
2. gb_name为空时使用name字段(摄像头名称如'大堂吧台1')
3. name也为空时才使用app字段

SQL修改:
COALESCE(SUBSTRING_INDEX(sp.gb_name, '/', 1), sp.name, sp.app) AS camera_name

修复效果:
- cam_1f0e3dad9990 → 大堂吧台3 ✓
- cam_c51ce410c124 → 大堂吧台1 ✓
- cam_6f4922f45568 → 大堂吧台2 ✓
- 大堂吧台3/012 → 大堂吧台3 ✓

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-20 21:53:10 +08:00
parent c7a6bf5ef9
commit e72abd3d28

View File

@@ -15,7 +15,9 @@ public interface AiAlertMapper {
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
int add(AiAlert alert);
@Select("SELECT a.*, r.name AS roi_name, sp.gb_name AS camera_name FROM wvp_ai_alert a " +
@Select("SELECT a.*, r.name AS roi_name, " +
"COALESCE(SUBSTRING_INDEX(sp.gb_name, '/', 1), sp.name, sp.app) AS camera_name " +
"FROM wvp_ai_alert a " +
"LEFT JOIN wvp_ai_roi r ON a.roi_id = r.roi_id " +
"LEFT JOIN wvp_stream_proxy sp ON a.camera_id = sp.camera_code " +
"WHERE a.alert_id=#{alertId}")
@@ -26,7 +28,9 @@ public interface AiAlertMapper {
AiAlert queryByAlertId(@Param("alertId") String alertId);
@Select(value = {"<script>" +
"SELECT a.*, r.name AS roi_name, sp.gb_name AS camera_name FROM wvp_ai_alert a " +
"SELECT a.*, r.name AS roi_name, " +
"COALESCE(SUBSTRING_INDEX(sp.gb_name, '/', 1), sp.name, sp.app) AS camera_name " +
"FROM wvp_ai_alert a " +
"LEFT JOIN wvp_ai_roi r ON a.roi_id = r.roi_id " +
"LEFT JOIN wvp_stream_proxy sp ON a.camera_id = sp.camera_code " +
"WHERE 1=1 " +