|
|
8a540d59ba
|
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后立即生效
|
2026-02-25 13:39:35 +08:00 |
|
|
|
4dff9b58f5
|
fix(stream-proxy): 保留用户输入的应用名,不强制覆盖为camera_code
问题:
- 新增摄像头时,应用名列显示为 camera_code(如:cam_dfc6e351b486)
- 而不是用户输入的应用名(如:大堂、停车场)
根本原因:
- StreamProxyServiceImpl.add() 方法中,第168行强制覆盖了用户输入
- streamProxy.setApp(cameraCode) 将用户输入的app替换为自动生成的cameraCode
修复方案:
- 删除强制覆盖逻辑,保留用户输入的应用名
- camera_code 和 app 各司其职:
- camera_code: 系统内部唯一标识(ROI关联)
- app: 用户可读的场景名(大堂、停车场、入口等)
影响:
- 用户输入的应用名现在会正确保存和显示
- 不影响 camera_code 的生成和使用
- app/stream 组合唯一约束依然有效
|
2026-02-25 13:31:23 +08:00 |
|
|
|
f0ac1104b5
|
chore: 将docs文件夹添加到.gitignore,移除远程追踪
- 添加 docs/ 到 .gitignore
- 从git追踪中移除docs文件夹(保留本地文件)
- docs文件夹包含的规划文档仅供本地开发使用
|
2026-02-25 11:34:06 +08:00 |
|
|
|
fba0e57777
|
docs: 配置推送和告警状态修复实施总结
|
2026-02-25 11:28:36 +08:00 |
|
|
|
20863cd232
|
fix(aiot): 新增/修改ROI和算法绑定时自动推送配置到Edge
- save() 方法:新增/更新ROI后自动推送配置
- bindAlgo() 方法:绑定算法后自动推送配置
- updateAlgoParams() 方法:更新算法参数后自动推送配置
修复问题:之前只有删除操作会自动推送,导致用户必须手动推送配置才能生效
现在所有CUD操作都会自动推送,修改即生效
注意:需配合Edge端算法状态保留方案,避免频繁reload导致告警状态丢失
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-25 11:23:23 +08:00 |
|
|
|
7f4d25a803
|
feat(aiot): 更新周界入侵参数 - 拆分入侵和消失确认时间
- 添加confirm_intrusion_seconds参数(默认5秒):入侵确认时间
- 添加confirm_clear_seconds参数(默认180秒):消失确认时间
- 更新算法描述:详细说明确认逻辑
- 保留confirm_seconds参数用于向后兼容
|
2026-02-25 09:13:33 +08:00 |
|
|
|
afc1d8d996
|
fix(aiot): 摄像头查询接口加入认证白名单
问题:service调用 /api/ai/camera/get 接口时返回401未授权
根因:新添加的摄像头查询接口需要登录认证
修复:将 /api/ai/camera/get 加入认证白名单
- 允许service服务无需token即可查询摄像头信息
- 用于告警汇总页面获取摄像头中文名称
影响文件:
- src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java:105
|
2026-02-24 13:29:25 +08:00 |
|
|
|
76399d13ce
|
feat(aiot): 添加摄像头查询接口 - 支持通过camera_code查询
新增功能:
- 新增 AiCameraController 提供 /api/ai/camera/get 接口
- 支持通过 cameraCode 参数查询 StreamProxy 摄像头信息
- 用于告警服务从WVP获取摄像头名称等详细信息
接口说明:
- 路径:GET /api/ai/camera/get
- 参数:cameraCode(摄像头编码,如:cam_xxxxxxxxxxxx)
- 返回:StreamProxy对象(包含name、gb_name、app等字段)
使用场景:
- 告警汇总/device-summary API需要获取摄像头中文名称
- 前端vite代理:/admin-api/aiot/device/camera/get → WVP /api/ai/camera/get
技术细节:
- 使用StreamProxyMapper.selectByCameraCode查询
- 返回WVPResult封装的响应
|
2026-02-24 09:34:06 +08:00 |
|
|
|
e72abd3d28
|
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>
|
2026-02-20 22:37:10 +08:00 |
|
|
|
c7a6bf5ef9
|
feat(aiot): 告警详情和列表显示摄像头名称
- AiAlert添加cameraName字段
- Mapper查询时LEFT JOIN wvp_stream_proxy表获取gb_name
- 通过camera_code关联查询
- 优先显示cameraName,降级显示cameraId
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-14 22:54:43 +08:00 |
|
|
|
66e3ab4b74
|
feat(aiot): 告警详情显示ROI名称而非bbox坐标
- AiAlert实体类添加roiName字段
- Mapper查询时LEFT JOIN wvp_ai_roi表获取ROI名称
- 前端详情页显示'检测区域:ROI名称',删除'(bbox)'
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-14 22:49:10 +08:00 |
|
|
|
67b28f6290
|
fix(aiot): 配置推送超时保持10秒 - Edge改为异步启动摄像头
Edge端已改为异步启动摄像头,配置写入SQLite后立即返回响应,
因此云端保持10秒超时即可
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-14 22:33:57 +08:00 |
|
|
|
fb8cf8ae5d
|
fix(aiot): 修复编译错误 - 使用getGbName()替代getName()
StreamProxy继承自CommonGBChannel,名称字段是gbName而非name
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-14 13:41:43 +08:00 |
|
|
|
835c16a365
|
fix(aiot): 配置推送改用camera_code查询StreamProxy
问题:昨天更新AiRedisConfigServiceImpl使用camera_code后,
忘记同步更新AiConfigServiceImpl,导致推送时仍用旧的app/stream
分割逻辑,无法识别cam_xxx格式的camera_code,推送空配置
修复:
- 使用 streamProxyMapper.selectByCameraCode 替代 selectOneByAppAndStream
- 移除 camera_id 按 "/" 分割的逻辑
- 支持新的 camera_code 格式(cam_xxx)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-14 12:13:12 +08:00 |
|
|
|
be35710c01
|
test(intrusion): 验证自动告警处理功能实现
完成周界入侵自动告警处理功能的全面测试验证,包括Edge端、Backend端和Frontend端。
## 测试内容
### Edge端验证 (ai_edge/algorithms.py)
- ✅ IntrusionAlgorithm状态机实现 (4个状态)
- ✅ 入侵确认: 5s持续有人 → 触发告警
- ✅ 消失确认: 5s持续无人 → 发送alarm_resolve
- ✅ 告警追踪: _last_alarm_id正确回填 (main.py)
- ✅ 冷却期: 300s内不重复告警
- ✅ 日志记录: 所有状态转换有日志
- ✅ 状态查询: get_state()方法完整
- ✅ 重置方法: reset()方法正确
### Backend端验证 (AiAlgorithmServiceImpl.java)
- ✅ 算法描述包含自动解除说明
- ✅ confirm_seconds参数双重用途说明
- ✅ 参数Schema格式正确
### Frontend端验证 (AlgorithmParamEditor.vue)
- ✅ confirm_seconds标签: "确认时间(秒)"
- ✅ confirm_seconds说明: 涵盖入侵确认+消失确认
- ✅ cooldown_seconds标签和说明准确
- ✅ UI组件正确渲染
## 测试文档
新增3个测试文档:
1. intrusion_auto_resolve_test_report.md - 完整测试报告
2. intrusion_test_checklist.md - 详细测试清单
3. intrusion_test_quick_guide.md - 快速测试指南
## 测试结论
✅ 代码审查通过
✅ 功能实现完整
✅ 日志记录充分
✅ 参数配置正确
✅ UI显示友好
建议: 可进入实际环境测试阶段
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-14 10:56:04 +08:00 |
|
|
|
5da85b54ea
|
docs(aiot): 更新周界入侵算法描述 - 说明自动告警处理机制
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-14 10:35:30 +08:00 |
|
|
|
dfb2c2410d
|
chore: 更新 .gitignore - 排除测试文件、临时脚本和运行时数据
新增忽略规则:
- 测试文件: test_*.html, test_*.md, *_validation.md
- 运行时数据: docker/volumes/, docker/wvp/config/
- 构建产物: src/main/resources/static/
- 临时文件: nul, binlog_*.txt
- 开发工具: .claude/, .trae/
- 批处理脚本: *.bat
- 临时Python脚本: generate_*.py
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-14 09:30:37 +08:00 |
|
|
|
7e0795be78
|
refactor(aiot): 算法抽帧频率改为固定展示,不允许用户配置
- 离岗检测:固定 3帧/秒
- 周界入侵:固定 1帧/秒
- 从 paramSchema 中删除 frame_rate 参数
- 在算法描述中添加固定帧率说明
- 帧率配置统一在边缘端管理
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-14 09:01:20 +08:00 |
|
|
|
363978b1f4
|
feat(aiot): 添加算法抽帧频率配置参数
为离岗检测和周界入侵算法添加frame_rate参数:
- 类型:float(浮点数,支持小数帧率)
- 可选值:10.0, 5.0, 3.0, 1.0, 0.33, 0.1, 0.03
- 离岗检测默认:3帧/秒(中频)
- 周界入侵默认:1帧/秒(标准)
抽帧频率说明(物业场景优化):
- 10帧/秒:高频检测,快速移动场景
- 5帧/秒:中高频,正常人员活动
- 3帧/秒:中频,人员离岗、聚集(推荐)
- 1帧/秒:标准频率,周界入侵(推荐)
- 1帧/3秒(0.33):低频,慢速场景
- 1帧/10秒(0.1):极低频,车辆检测
- 1帧/30秒(0.03):超低频,垃圾堆放等静态检测
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-13 17:14:54 +08:00 |
|
|
|
828ab0a29e
|
refactor(aiot): 简化离岗检测参数配置,固定技术细节参数
用户只需配置核心参数:
- leave_countdown_sec: 离岗倒计时(默认300秒)
- working_hours: 工作时间段
固定参数(使用默认值,前端不展示):
- confirm_on_duty_sec: 10秒(在岗确认时间)
- confirm_leave_sec: 30秒(离岗确认时间)
优点:
- 简化用户配置,只需关注核心业务参数
- 技术细节参数固定,避免用户误配置
- 界面更简洁,降低学习成本
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-13 17:01:34 +08:00 |
|
|
|
fea089b349
|
refactor(aiot): 删除离岗检测算法的cooldown_sec参数
原因:状态机已保证必须回岗后才能再次告警
- ALARMED状态会一直等待人回岗
- 必须回到ON_DUTY状态后,人再次离开才能重新告警
- cooldown_sec参数是冗余的,移除简化配置
离岗检测算法参数(简化后):
- confirm_on_duty_sec: 在岗确认时间
- confirm_leave_sec: 离岗确认时间
- leave_countdown_sec: 离岗倒计时
- working_hours: 工作时间段
注:其他算法(如intrusion)仍保留cooldown_seconds
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-13 16:59:12 +08:00 |
|
|
|
1d5341b331
|
fix(aiot): 添加离岗检测算法的离岗倒计时参数
- 添加 leave_countdown_sec 参数到离岗检测算法 schema
- 默认值:300秒(5分钟)
- 作用:确认离岗后,倒计时结束才触发告警
- 与 confirm_leave_sec(离岗确认)和 cooldown_sec(告警冷却)区分
算法流程:
1. 持续离开 confirm_leave_sec(30秒)→ 确认离岗
2. 倒计时 leave_countdown_sec(300秒)→ 触发告警
3. 告警后 cooldown_sec(600秒)内不再重复告警
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-13 16:56:03 +08:00 |
|
|
|
e3401192ac
|
fix(aiot): 修复删除操作配置推送问题
问题:删除摄像头/ROI/算法绑定后,Edge节点的SQLite数据库仍保留旧配置
原因:删除操作只修改MySQL,未推送配置更新到Edge
影响:告警汇总显示已删除摄像头的历史告警
修复内容:
- AiRoiServiceImpl: 在delete()和unbindAlgo()后推送配置
- StreamProxyServiceImpl: 在delete()后推送配置
- 确保MySQL删除后,配置通过Redis Stream推送到Edge清理SQLite
修复效果:
✅ 删除后自动推送配置更新
✅ Edge节点同步清理本地数据
✅ 告警汇总不再显示已删除设备
|
2026-02-13 15:24:36 +08:00 |
|
|
|
b2c2159967
|
docs(aiot): 添加为现有摄像头生成camera_code的执行指南
- 详细的SQL执行步骤和验证方法
- 常见问题解答和回滚方案
- 确保旧摄像头数据兼容性
|
2026-02-13 13:30:58 +08:00 |
|
|
|
18e44e7d8b
|
docs: camera_code全链路改造完整文档
添加完整的改造文档,包括:
- 改造背景与目标
- 核心变更说明(概念模型、camera_code设计规范)
- 数据模型变更(数据库Schema、Java实体类)
- 数据流变更(摄像头创建、ROI截图、配置推送、前端数据流)
- 修改文件清单(后端StreamProxy模块、AIoT模块、前端文件)
- Git提交记录(12个提交的详细说明)
- 部署步骤(数据库迁移、后端部署、前端部署、验证)
- 测试验证(单元测试、集成测试、E2E测试、性能测试)
- 注意事项(数据一致性、向后兼容、性能影响、安全、回滚风险)
- FAQ常见问题(10个问题及解答)
- 附录(技术文档、Redis配置示例、API对照表、故障排查指南)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-13 11:49:50 +08:00 |
|
|
|
87c75608f1
|
docs: camera_code改造测试报告
添加完整的测试报告文档,包括:
- 测试概述与环境要求
- 数据库迁移验证步骤
- 功能测试用例(摄像头创建、ROI截图、配置推送)
- 数据一致性测试
- 异常测试场景
- 性能测试
- 集成测试场景
- 回归测试
- 测试清单与风险评估
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-13 11:49:39 +08:00 |
|
|
|
450afb8112
|
feat(aiot): 配置推送使用camera_code查询StreamProxy
- 修改 buildFlatConfig 方法,使用 camera_code 查询 StreamProxy
- 注入 StreamProxyMapper 依赖
- 优先使用 StreamProxy 的 srcUrl 作为 rtsp_url
- 添加 camera_code 字段,保留 camera_id 字段向后兼容
- 当 StreamProxy 不存在时,降级使用 MediaServer 构建 URL
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-13 11:09:50 +08:00 |
|
|
|
6d1e1d0bc3
|
feat(aiot): snap接口改用cameraCode参数查询StreamProxy
- 修改 AiRoiController.getSnap 方法参数从 app/stream 改为 cameraCode
- 注入 IStreamProxyService 服务
- 通过 streamProxyService.getStreamProxyByCameraCode() 查询 StreamProxy
- 从 StreamProxy 对象获取 app 和 stream 字段
- 增加参数校验,未找到对应代理时返回 404
- 更新日志输出包含 cameraCode 信息
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-13 11:07:13 +08:00 |
|
|
|
3792a30616
|
feat(streamProxy): 实现camera_code自动生成和查询逻辑
核心变更:
1. 新增 generateCameraCode() 方法:生成格式为 cam_xxxxxxxxxxxx 的唯一编码
2. 修改 add() 方法:
- 自动生成 camera_code 并设置 app = camera_code
- 实现重试机制(最多3次)处理唯一键冲突
- 确保 ZLM URL 路径为纯 ASCII,避免中文编码问题
3. 实现 getStreamProxyByCameraCode() 方法:根据 camera_code 查询代理对象
技术细节:
- 添加 UUID 和 DuplicateKeyException 依赖
- 使用事务确保数据一致性
- 空值检查防止空指针异常
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-13 11:02:12 +08:00 |
|
|
|
754677e11d
|
feat(streamProxy): Service接口新增getStreamProxyByCameraCode方法
- 在 IStreamProxyService 接口中新增 getStreamProxyByCameraCode(String cameraCode) 方法
- 支持根据 camera_code 查询拉流代理对象
- 为后续前端改造提供接口支持
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-13 11:02:01 +08:00 |
|
|
|
2b61113bab
|
feat(streamProxy): Provider增加camera_code的SQL处理
1. StreamProxyMapper.add: INSERT语句增加camera_code字段
2. StreamProxyMapper.update: 确认不更新camera_code(永不修改原则)
3. StreamProxyProvider.selectAll: 查询条件增加camera_code模糊匹配
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-13 10:59:22 +08:00 |
|
|
|
2e89c2a625
|
feat(streamProxy): Mapper新增selectByCameraCode查询方法
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-13 10:57:02 +08:00 |
|
|
|
b542432dc4
|
feat(streamProxy): StreamProxy增加cameraCode字段
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-13 10:52:59 +08:00 |
|
|
|
0c80377264
|
fix(aiot): 迁移脚本增加camera_code格式验证
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-13 10:47:59 +08:00 |
|
|
|
7312912178
|
feat(aiot): 添加camera_code字段迁移脚本 - 解决摄像头标识问题
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-13 10:46:08 +08:00 |
|
|
|
1ca13b5cc9
|
docs(aiot): 添加告警时间字段语义说明和迁移脚本
添加 alarm_event 表字段语义说明文档
字段说明:
- event_time: 告警触发时间
- first_frame_time: 离开ROI时间
- last_frame_time: 回岗时间 (NULL = still away)
- duration_ms: 持续时长 (NULL = still away)
包含验证SQL查询和部署说明
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-02-13 09:56:32 +08:00 |
|
|
|
346e0fc5fe
|
feat(aiot): 数据库schema更新 - 添加离岗倒计时参数
问题描述:
- 离岗检测算法param_schema缺少leave_countdown_sec参数
- 部分默认值不符合业务需求
修改内容:
1. 初始化-mysql-aiot.sql (Line 76)
- leave_post算法新增参数:
"leave_countdown_sec": {"type":"int","default":300,"min":0}
- 修正默认值:
confirm_leave_sec: 10 → 30秒
cooldown_sec: 300 → 600秒
2. 新增迁移脚本:迁移-添加离岗倒计时参数.sql
- UPDATE wvp_ai_algorithm表的param_schema
- 适用于已部署的生产环境数据库升级
参数说明:
- confirm_on_duty_sec: 上岗确认期(默认10秒)
- confirm_leave_sec: 离岗确认期(默认30秒)
- leave_countdown_sec: 离岗倒计时(默认300秒=5分钟)
- cooldown_sec: 告警冷却期(默认600秒=10分钟)
业务流程:
人离开 → 30s确认离岗 → 300s倒计时 → 触发告警
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
|
2026-02-12 15:06:59 +08:00 |
|
|
|
197f484482
|
fix(aiot): 更新离岗检测 confirm_leave_sec 默认值为30秒
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-11 10:01:25 +08:00 |
|
|
|
fe844ad123
|
feat(aiot): 全量配置推送 + ZLM mediaServerId 修正 + 告警参数更新
- 新增 push-all 接口,支持一次性推送全部 ROI 和算法配置到 Edge
- 修复 ZLM mediaServerId 不匹配(polaris → zlmediakit-local)
- 告警算法默认参数更新:离岗冷却 300→600s,入侵冷却 120→300s
- 启用 Edge HTTP 直推(ai.service.enabled=true, url=127.0.0.1:9001)
- 新增 queryAll 方法支持全量 ROI 和绑定查询
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-11 09:57:09 +08:00 |
|
|
|
53d0b2bb1f
|
feat(aiot): 实现配置直推Edge - Redis Stream聚合配置下发
- 新增 writeDeviceAggregatedConfig/buildFlatConfig 聚合配置写入
- pushConfig 增加设备聚合配置推送步骤
- rollback 三方法增加 Stream 通知和 deviceId 回填修复
- AiRoiServiceImpl 新增 resolveDeviceId 自动关联边缘设备
- Mapper 层新增设备查询/回填/清理方法
- 新增 backfill-device-id 数据修复端点
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-10 15:21:19 +08:00 |
|
|
|
e8c3b32249
|
fix: 增加Redis配置key过期时间到7天
- 原1小时过期导致边缘服务重启后无法获取配置
- 增加到7天确保配置在边缘服务离线期间不会丢失
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-02-05 16:56:57 +08:00 |
|
|
|
87b19683fb
|
feat: 隐藏控制台、分屏监控、用户管理菜单
- 控制台、分屏监控、用户管理设为 hidden
- 默认跳转改为通道列表
- 保留组织结构和摄像头配置
- 后续对接 AIOT 主平台时再启用
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-02-05 15:16:59 +08:00 |
|
|
|
849d74d16a
|
chore: 移除人群聚集检测算法预置
- SQL初始化脚本移除 crowd_detection
- Java预置算法移除 crowd_detection
- 与边缘端保持一致,仅保留2个算法
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-02-05 15:16:49 +08:00 |
|
|
|
826586b921
|
refactor(web): 移除独立算法配置页面
- 注释掉 /algorithmConfig 路由
- 算法调配功能已集成到摄像头配置的 ROI 选区中
- ROI配置页面通过 RoiAlgorithmBind 组件支持完整的算法绑定
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-02-05 14:30:25 +08:00 |
|
|
|
b6dc39a021
|
chore(docker): 新增EMQX MQTT Broker配置
- 添加EMQX docker-compose配置
- 用于本地开发和测试环境
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-02-05 13:33:07 +08:00 |
|
|
|
9160998609
|
chore(config): 更新MQTT和Redis配置
- 配置MQTT告警订阅主题
- 配置Redis连接参数
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-02-05 13:32:31 +08:00 |
|
|
|
81bcc277a0
|
feat(aiot): AiConfigController新增版本管理API
- 新增配置版本列表查询
- 新增配置快照详情查询
- 新增配置回滚接口
- 新增推送前预览接口
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-02-05 13:32:23 +08:00 |
|
|
|
3848a517b9
|
feat(aiot): MqttService支持告警和心跳订阅
- 订阅 edge/alert/# 接收AI告警
- 订阅 edge/alert/heartbeat/# 接收设备心跳
- 告警入库并触发通知
- 心跳更新设备状态
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-02-05 13:32:16 +08:00 |
|
|
|
0a6931e093
|
feat(aiot): AiConfigService支持Redis配置同步
- 新增 pushConfigToRedis 方法
- pushConfig 改为通过 Redis 推送配置
- 支持配置快照生成
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-02-05 13:32:07 +08:00 |
|
|
|
44170f2d9a
|
feat(aiot): 新增方案B Controller
- AiAlertController: AI告警查询和统计API
- AiAlgoTemplateController: 算法模板管理API
- AiEdgeDeviceController: 边缘设备状态查询API
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
2026-02-05 13:31:58 +08:00 |
|