fix(aiot): 修复自动推送参数错误 - 使用deviceId而不是cameraId
问题: - 自动推送配置时传入错误的参数:cameraId(如:cam_xxx) - 但 writeDeviceAggregatedConfig() 期望的是 deviceId(如:edge-001) - 导致Edge端收不到配置更新通知,仍然显示"有ROI但未找到配置" 根本原因: - writeDeviceAggregatedConfig(deviceId, action) 方法: - 参数deviceId指的是Edge设备ID(edge-001) - 通过deviceId查询该设备下的所有摄像头 - 发送Redis Stream通知:device_id=deviceId - Edge端监听 device_id="edge-001" 的消息 - 但我们传入的是 cameraId="cam_xxx",导致通知发送到错误的频道 错误调用链: save() → writeDeviceAggregatedConfig(cameraId, "UPDATE") ❌ → Redis Stream: device_id="cam_xxx" ❌ → Edge监听 device_id="edge-001" ❌ 收不到! 修复方案: - 所有自动推送调用改为使用 roi.getDeviceId() - 修复的方法:save(), delete(), bindAlgo(), unbindAlgo(), updateAlgoParams() - 添加device_id为空的警告日志 - 日志中同时显示camera_id和device_id,便于调试 正确调用链: save() → writeDeviceAggregatedConfig(deviceId, "UPDATE") ✅ → Redis Stream: device_id="edge-001" ✅ → Edge监听 device_id="edge-001" ✅ 正常接收! 影响: - 现在自动推送会正确工作,无需手动推送 - Edge端能实时接收配置更新 - 新增/修改ROI后立即生效
This commit is contained in:
@@ -84,13 +84,19 @@ public class AiRoiServiceImpl implements IAiRoiService {
|
||||
}
|
||||
|
||||
// 推送配置到 Edge(新增/更新操作)
|
||||
if (cameraId != null) {
|
||||
String deviceId = roi.getDeviceId();
|
||||
if (deviceId != null && !deviceId.isEmpty()) {
|
||||
try {
|
||||
redisConfigService.writeDeviceAggregatedConfig(cameraId, "UPDATE");
|
||||
log.info("[AiRoi] {}ROI后推送配置到Edge,camera_id={}", isUpdate ? "更新" : "新增", cameraId);
|
||||
redisConfigService.writeDeviceAggregatedConfig(deviceId, "UPDATE");
|
||||
log.info("[AiRoi] {}ROI后推送配置到Edge,camera_id={}, device_id={}",
|
||||
isUpdate ? "更新" : "新增", cameraId, deviceId);
|
||||
} catch (Exception e) {
|
||||
log.error("[AiRoi] {}ROI后推送配置失败,camera_id={}", isUpdate ? "更新" : "新增", cameraId, e);
|
||||
log.error("[AiRoi] {}ROI后推送配置失败,camera_id={}, device_id={}",
|
||||
isUpdate ? "更新" : "新增", cameraId, deviceId, e);
|
||||
}
|
||||
} else {
|
||||
log.warn("[AiRoi] {}ROI但device_id为空,跳过推送配置,camera_id={}",
|
||||
isUpdate ? "更新" : "新增", cameraId);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -121,17 +127,20 @@ public class AiRoiServiceImpl implements IAiRoiService {
|
||||
AiRoi old = roiMapper.queryByRoiId(roiId);
|
||||
if (old != null) {
|
||||
String cameraId = old.getCameraId();
|
||||
String deviceId = old.getDeviceId();
|
||||
bindMapper.deleteByRoiId(roiId);
|
||||
roiMapper.deleteByRoiId(roiId);
|
||||
configLogService.addLog("ROI", roiId, toJson(old), null, null);
|
||||
// 推送配置到 Edge(删除操作)
|
||||
if (cameraId != null) {
|
||||
if (deviceId != null && !deviceId.isEmpty()) {
|
||||
try {
|
||||
redisConfigService.writeDeviceAggregatedConfig(cameraId, "UPDATE");
|
||||
log.info("[AiRoi] 删除 ROI 后推送配置到 Edge,camera_id={}", cameraId);
|
||||
redisConfigService.writeDeviceAggregatedConfig(deviceId, "UPDATE");
|
||||
log.info("[AiRoi] 删除ROI后推送配置到Edge,camera_id={}, device_id={}", cameraId, deviceId);
|
||||
} catch (Exception e) {
|
||||
log.error("[AiRoi] 删除 ROI 后推送配置失败,camera_id={}", cameraId, e);
|
||||
log.error("[AiRoi] 删除ROI后推送配置失败,camera_id={}, device_id={}", cameraId, deviceId, e);
|
||||
}
|
||||
} else {
|
||||
log.warn("[AiRoi] 删除ROI但device_id为空,跳过推送配置,camera_id={}", cameraId);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -196,12 +205,19 @@ public class AiRoiServiceImpl implements IAiRoiService {
|
||||
String roiId = bind.getRoiId();
|
||||
if (roiId != null) {
|
||||
AiRoi roi = roiMapper.queryByRoiId(roiId);
|
||||
if (roi != null && roi.getCameraId() != null) {
|
||||
if (roi != null) {
|
||||
String deviceId = roi.getDeviceId();
|
||||
if (deviceId != null && !deviceId.isEmpty()) {
|
||||
try {
|
||||
redisConfigService.writeDeviceAggregatedConfig(roi.getCameraId(), "UPDATE");
|
||||
log.info("[AiRoi] 绑定算法后推送配置到Edge,camera_id={}, algo={}", roi.getCameraId(), bind.getAlgoCode());
|
||||
redisConfigService.writeDeviceAggregatedConfig(deviceId, "UPDATE");
|
||||
log.info("[AiRoi] 绑定算法后推送配置到Edge,camera_id={}, device_id={}, algo={}",
|
||||
roi.getCameraId(), deviceId, bind.getAlgoCode());
|
||||
} catch (Exception e) {
|
||||
log.error("[AiRoi] 绑定算法后推送配置失败,camera_id={}", roi.getCameraId(), e);
|
||||
log.error("[AiRoi] 绑定算法后推送配置失败,camera_id={}, device_id={}",
|
||||
roi.getCameraId(), deviceId, e);
|
||||
}
|
||||
} else {
|
||||
log.warn("[AiRoi] 绑定算法但device_id为空,跳过推送配置,camera_id={}", roi.getCameraId());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -218,12 +234,19 @@ public class AiRoiServiceImpl implements IAiRoiService {
|
||||
// 推送配置到 Edge(解绑算法)
|
||||
if (roiId != null) {
|
||||
AiRoi roi = roiMapper.queryByRoiId(roiId);
|
||||
if (roi != null && roi.getCameraId() != null) {
|
||||
if (roi != null) {
|
||||
String deviceId = roi.getDeviceId();
|
||||
if (deviceId != null && !deviceId.isEmpty()) {
|
||||
try {
|
||||
redisConfigService.writeDeviceAggregatedConfig(roi.getCameraId(), "UPDATE");
|
||||
log.info("[AiRoi] 解绑算法后推送配置到 Edge,camera_id={}", roi.getCameraId());
|
||||
redisConfigService.writeDeviceAggregatedConfig(deviceId, "UPDATE");
|
||||
log.info("[AiRoi] 解绑算法后推送配置到Edge,camera_id={}, device_id={}",
|
||||
roi.getCameraId(), deviceId);
|
||||
} catch (Exception e) {
|
||||
log.error("[AiRoi] 解绑算法后推送配置失败,camera_id={}", roi.getCameraId(), e);
|
||||
log.error("[AiRoi] 解绑算法后推送配置失败,camera_id={}, device_id={}",
|
||||
roi.getCameraId(), deviceId, e);
|
||||
}
|
||||
} else {
|
||||
log.warn("[AiRoi] 解绑算法但device_id为空,跳过推送配置,camera_id={}", roi.getCameraId());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -242,6 +265,28 @@ public class AiRoiServiceImpl implements IAiRoiService {
|
||||
bindMapper.updateByBindId(bind);
|
||||
configLogService.addLog("BIND", bind.getBindId(), toJson(old), toJson(bind), null);
|
||||
|
||||
// 推送配置到 Edge(更新算法参数)
|
||||
String roiId = old.getRoiId();
|
||||
if (roiId != null) {
|
||||
AiRoi roi = roiMapper.queryByRoiId(roiId);
|
||||
if (roi != null) {
|
||||
String deviceId = roi.getDeviceId();
|
||||
if (deviceId != null && !deviceId.isEmpty()) {
|
||||
try {
|
||||
redisConfigService.writeDeviceAggregatedConfig(deviceId, "UPDATE");
|
||||
log.info("[AiRoi] 更新算法参数后推送配置到Edge,camera_id={}, device_id={}, bind_id={}",
|
||||
roi.getCameraId(), deviceId, bind.getBindId());
|
||||
} catch (Exception e) {
|
||||
log.error("[AiRoi] 更新算法参数后推送配置失败,camera_id={}, device_id={}",
|
||||
roi.getCameraId(), deviceId, e);
|
||||
}
|
||||
} else {
|
||||
log.warn("[AiRoi] 更新算法参数但device_id为空,跳过推送配置,camera_id={}", roi.getCameraId());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 推送配置到 Edge(更新算法参数)
|
||||
String roiId = old.getRoiId();
|
||||
if (roiId != null) {
|
||||
|
||||
Reference in New Issue
Block a user