fix(aiot): 新增/修改ROI和算法绑定时自动推送配置到Edge

- save() 方法:新增/更新ROI后自动推送配置
- bindAlgo() 方法:绑定算法后自动推送配置
- updateAlgoParams() 方法:更新算法参数后自动推送配置

修复问题:之前只有删除操作会自动推送,导致用户必须手动推送配置才能生效
现在所有CUD操作都会自动推送,修改即生效

注意:需配合Edge端算法状态保留方案,避免频繁reload导致告警状态丢失

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-25 11:23:23 +08:00
parent 7f4d25a803
commit 20863cd232

View File

@@ -61,7 +61,10 @@ public class AiRoiServiceImpl implements IAiRoiService {
}
}
if (roi.getId() != null && roi.getId() > 0) {
boolean isUpdate = roi.getId() != null && roi.getId() > 0;
String cameraId = roi.getCameraId();
if (isUpdate) {
AiRoi old = roiMapper.queryById(roi.getId());
roiMapper.update(roi);
configLogService.addLog("ROI", roi.getRoiId(), toJson(old), toJson(roi), null);
@@ -79,6 +82,16 @@ public class AiRoiServiceImpl implements IAiRoiService {
roiMapper.add(roi);
configLogService.addLog("ROI", roi.getRoiId(), null, toJson(roi), null);
}
// 推送配置到 Edge新增/更新操作)
if (cameraId != null) {
try {
redisConfigService.writeDeviceAggregatedConfig(cameraId, "UPDATE");
log.info("[AiRoi] {}ROI后推送配置到Edgecamera_id={}", isUpdate ? "更新" : "新增", cameraId);
} catch (Exception e) {
log.error("[AiRoi] {}ROI后推送配置失败camera_id={}", isUpdate ? "更新" : "新增", cameraId, e);
}
}
}
/**
@@ -178,6 +191,20 @@ public class AiRoiServiceImpl implements IAiRoiService {
bind.setUpdateTime(now);
bindMapper.add(bind);
configLogService.addLog("BIND", bind.getBindId(), null, toJson(bind), null);
// 推送配置到 Edge绑定算法
String roiId = bind.getRoiId();
if (roiId != null) {
AiRoi roi = roiMapper.queryByRoiId(roiId);
if (roi != null && roi.getCameraId() != null) {
try {
redisConfigService.writeDeviceAggregatedConfig(roi.getCameraId(), "UPDATE");
log.info("[AiRoi] 绑定算法后推送配置到Edgecamera_id={}, algo={}", roi.getCameraId(), bind.getAlgoCode());
} catch (Exception e) {
log.error("[AiRoi] 绑定算法后推送配置失败camera_id={}", roi.getCameraId(), e);
}
}
}
}
@Override
@@ -214,6 +241,20 @@ public class AiRoiServiceImpl implements IAiRoiService {
bind.setUpdateTime(now);
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 && roi.getCameraId() != null) {
try {
redisConfigService.writeDeviceAggregatedConfig(roi.getCameraId(), "UPDATE");
log.info("[AiRoi] 更新算法参数后推送配置到Edgecamera_id={}, bind_id={}", roi.getCameraId(), bind.getBindId());
} catch (Exception e) {
log.error("[AiRoi] 更新算法参数后推送配置失败camera_id={}", roi.getCameraId(), e);
}
}
}
}
private String toJson(Object obj) {