refactor(video): 预置 AI 算法改为 SQL 种子数据,移除 @PostConstruct 初始化
原 AiAlgorithmServiceImpl.initPresetAlgorithms() 在 @PostConstruct 里插入 4 条预置算法,带来两个问题: 1. 启动时无登录上下文,MP 自动填充 creator 失效 → 启动失败 2. 算法清单硬编码在 Java 代码,迭代要重编译发布 改为 video.sql 种子数据管理: - video.sql 的预置算法 INSERT 扩展为 4 条(leave_post / intrusion / illegal_parking / vehicle_congestion),参数 schema 与边缘端对齐 - 使用 ON DUPLICATE KEY UPDATE 保证幂等:新库初始化 + 存量库升级 都走同一条语句,param_schema / description 会被自动校正 - 保留用户侧可修改的字段(is_active / global_params)不被覆盖 代码层: - 删除 initPresetAlgorithms() 方法与 PRESET_ALGORITHMS 静态 Map - 删除 SYSTEM_USER 常量 - 删除 @PostConstruct / HashMap 相关 import - 保留 syncFromEdge() 作为边缘端主动同步的运行时入口 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -935,12 +935,30 @@ CREATE TABLE `video_ai_algo_template` (
|
||||
-- ============================================================================
|
||||
|
||||
-- 预置算法(与 FastAPI 边缘端保持一致)
|
||||
-- 幂等:已存在则更新 name/target_class/param_schema/description,保持 is_active 与用户设置
|
||||
INSERT INTO `video_ai_algorithm` (`algo_code`, `algo_name`, `target_class`, `param_schema`, `description`, `is_active`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `tenant_id`) VALUES
|
||||
('leave_post', '离岗检测', 'person',
|
||||
'{"confirm_on_duty_sec":{"type":"int","default":10,"min":1},"confirm_leave_sec":{"type":"int","default":30,"min":1},"leave_countdown_sec":{"type":"int","default":300,"min":0},"cooldown_sec":{"type":"int","default":600,"min":0},"working_hours":{"type":"list","default":[]}}',
|
||||
'检测人员是否在岗,支持工作时间段配置', 1, 'system', NOW(), 'system', NOW(), b'0', 0),
|
||||
'{"leave_countdown_sec":{"type":"int","default":300,"min":0},"working_hours":{"type":"list","default":[]}}',
|
||||
'检测人员是否在岗,支持工作时间段配置。算法抽帧频率:3帧/秒(固定)',
|
||||
1, '1', NOW(), '1', NOW(), b'0', 0),
|
||||
('intrusion', '周界入侵检测', 'person',
|
||||
'{"cooldown_seconds":{"type":"int","default":120,"min":0},"confirm_seconds":{"type":"int","default":5,"min":1}}',
|
||||
'检测人员进入指定区域', 1, 'system', NOW(), 'system', NOW(), b'0', 0);
|
||||
'{"cooldown_seconds":{"type":"int","default":300,"min":0},"confirm_seconds":{"type":"int","default":5,"min":1},"confirm_intrusion_seconds":{"type":"int","default":5,"min":1},"confirm_clear_seconds":{"type":"int","default":180,"min":1}}',
|
||||
'检测人员进入指定区域。算法抽帧频率:1帧/秒(固定)。持续检测到人5秒触发告警,持续无人180秒自动结束告警。消失确认期间短暂有人(<5秒)不影响倒计时。',
|
||||
1, '1', NOW(), '1', NOW(), b'0', 0),
|
||||
('illegal_parking', '车辆违停检测', 'car,truck,bus,motorcycle',
|
||||
'{"confirm_vehicle_sec":{"type":"int","default":15,"min":5},"parking_countdown_sec":{"type":"int","default":300,"min":60},"confirm_clear_sec":{"type":"int","default":30,"min":10},"cooldown_sec":{"type":"int","default":600,"min":0}}',
|
||||
'检测禁停区域内是否有车辆违规停放。确认车辆停留15秒后开始5分钟倒计时,超时触发告警。车辆离开30秒后自动结束告警。',
|
||||
1, '1', NOW(), '1', NOW(), b'0', 0),
|
||||
('vehicle_congestion', '车辆拥堵检测', 'car,truck,bus,motorcycle',
|
||||
'{"count_threshold":{"type":"int","default":3,"min":1},"confirm_congestion_sec":{"type":"int","default":60,"min":10},"confirm_clear_sec":{"type":"int","default":120,"min":10},"cooldown_sec":{"type":"int","default":600,"min":0}}',
|
||||
'检测区域内车辆是否拥堵。当平均车辆数达到阈值并持续60秒触发告警,车辆减少并持续120秒后自动结束告警。',
|
||||
1, '1', NOW(), '1', NOW(), b'0', 0)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
`algo_name` = VALUES(`algo_name`),
|
||||
`target_class` = VALUES(`target_class`),
|
||||
`param_schema` = VALUES(`param_schema`),
|
||||
`description` = VALUES(`description`),
|
||||
`updater` = VALUES(`updater`),
|
||||
`update_time` = NOW();
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
Reference in New Issue
Block a user