From 20863cd2327df03f3ee91a5ad84b9ec516f31c7a Mon Sep 17 00:00:00 2001 From: 16337 <1633794139@qq.com> Date: Wed, 25 Feb 2026 11:23:23 +0800 Subject: [PATCH] =?UTF-8?q?fix(aiot):=20=E6=96=B0=E5=A2=9E/=E4=BF=AE?= =?UTF-8?q?=E6=94=B9ROI=E5=92=8C=E7=AE=97=E6=B3=95=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E8=87=AA=E5=8A=A8=E6=8E=A8=E9=80=81=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=88=B0Edge?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - save() 方法:新增/更新ROI后自动推送配置 - bindAlgo() 方法:绑定算法后自动推送配置 - updateAlgoParams() 方法:更新算法参数后自动推送配置 修复问题:之前只有删除操作会自动推送,导致用户必须手动推送配置才能生效 现在所有CUD操作都会自动推送,修改即生效 注意:需配合Edge端算法状态保留方案,避免频繁reload导致告警状态丢失 Co-Authored-By: Claude Opus 4.6 --- .../aiot/service/impl/AiRoiServiceImpl.java | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/genersoft/iot/vmp/aiot/service/impl/AiRoiServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/aiot/service/impl/AiRoiServiceImpl.java index 5821a4f58..05467456a 100644 --- a/src/main/java/com/genersoft/iot/vmp/aiot/service/impl/AiRoiServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/aiot/service/impl/AiRoiServiceImpl.java @@ -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后推送配置到Edge,camera_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] 绑定算法后推送配置到Edge,camera_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] 更新算法参数后推送配置到Edge,camera_id={}, bind_id={}", roi.getCameraId(), bind.getBindId()); + } catch (Exception e) { + log.error("[AiRoi] 更新算法参数后推送配置失败,camera_id={}", roi.getCameraId(), e); + } + } + } } private String toJson(Object obj) {