# 电子围栏准入检测架构优化方案 (仅针对无人车) ## 📋 总体设计 ### 核心原则 1. **职责分离**:Area负责空间数据,Rule负责业务逻辑 2. **规则驱动**:所有准入检测通过SpatialRule统一管理 3. **事件驱动**:基于事件的异步处理机制 4. **🎯 业务范围限定**:**仅针对无人车进行电子围栏检测和告警** ## 🏗️ 架构设计 ### 1. 数据模型重构 #### 1.1 简化Area模型 ```java @Entity public class AirportArea { private Long id; // 区域ID private String areaCode; // 区域编码(唯一标识) private String areaName; // 区域名称 private AreaType areaType; // 区域类型(枚举) private Geometry geometry; // 空间几何数据 private String description; // 描述信息 private Boolean active; // 是否启用 private LocalDateTime createdAt; // 创建时间 private LocalDateTime updatedAt; // 更新时间 // 移除所有业务规则相关字段 } ``` #### 1.2 增强SpatialRule模型 (专注无人车) ```java @Entity public class SpatialRule { // 现有字段保持不变,新增以下字段: private String areaCode; // 关联区域编码 private RuleCategory category; // ACCESS_CONTROL(准入控制) private String ruleConfig; // JSON配置:针对无人车的限制条件 private GeofenceAction action; // 触发动作:ALLOW/DENY/WARN // 注意:allowedVehicleTypes 应该只包含 UNMANNED_VEHICLE } ``` #### 1.3 规则配置结构 (无人车专用) ```json { "accessControl": { "vehicleType": "UNMANNED_VEHICLE", // 固定为无人车类型 "requiresPermission": true, "allowedOperationModes": ["AUTO", "MANUAL", "REMOTE"] }, "physicalLimits": { "maxSpeed": 30, // 无人车最大速度限制 "maxHeight": 3.0, // 无人车最大高度限制 "maxWeight": 5.0 // 无人车最大载重限制 }, "timeRestrictions": { "activeHours": "06:00-22:00", "activeDays": ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"] }, "safetyRequirements": { "minBatteryLevel": 20, // 最低电量要求 "requiresOperatorPresence": false // 是否需要操作员在场 } } ``` ### 2. 服务层架构 #### 2.1 电子围栏检测服务 (无人车专用) ```java @Service public class UnmannedVehicleGeofenceService { /** * 检测无人车是否可以进入指定区域 * 注意:仅处理无人车类型的车辆 */ public AccessCheckResult checkAreaAccess(MovingObject vehicle, String areaCode) { // 前置检查:必须是无人车 if (vehicle.getObjectType() != MovingObject.ObjectType.UNMANNED_VEHICLE) { log.debug("跳过非无人车的围栏检测: {}", vehicle.getObjectId()); return AccessCheckResult.skip(); } // 1. 获取区域信息 // 2. 查询适用的规则 // 3. 执行规则检查 // 4. 返回检测结果 } /** * 实时监控无人车位置变化 */ public void monitorUnmannedVehicleLocation(MovingObject vehicle) { // 类型检查:只处理无人车 if (vehicle.getObjectType() != MovingObject.ObjectType.UNMANNED_VEHICLE) { return; // 静默跳过 } // 1. 检测进入/离开事件 // 2. 触发准入检测 // 3. 发布事件 } } ``` #### 2.2 规则执行引擎 (针对无人车优化) ```java @Service public class UnmannedVehicleRuleEngine { /** * 执行无人车准入控制规则 */ public RuleExecutionResult executeAccessRules(MovingObject unmannedVehicle, AirportArea area, List rules) { // 验证输入:确保是无人车 validateUnmannedVehicle(unmannedVehicle); // 1. 过滤适用于无人车的规则 // 2. 按优先级排序规则 // 3. 依次执行规则检查 // 4. 汇总执行结果 } private void validateUnmannedVehicle(MovingObject vehicle) { if (vehicle.getObjectType() != MovingObject.ObjectType.UNMANNED_VEHICLE) { throw new IllegalArgumentException("规则引擎只处理无人车类型"); } } } ``` ### 3. 事件处理机制 #### 3.1 事件类型定义 (无人车专用) ```java public enum UnmannedVehicleGeofenceEventType { UNMANNED_VEHICLE_ENTRY_REQUEST, // 无人车区域进入请求 UNMANNED_VEHICLE_ENTRY_APPROVED, // 无人车进入批准 UNMANNED_VEHICLE_ENTRY_DENIED, // 无人车进入拒绝 UNMANNED_VEHICLE_EXIT, // 无人车离开区域 UNMANNED_VEHICLE_RULE_VIOLATION, // 无人车规则违反 UNMANNED_VEHICLE_ACCESS_WARNING // 无人车准入警告 } ``` #### 3.2 事件处理流程 (仅处理无人车事件) ```java @EventListener public class UnmannedVehicleGeofenceEventHandler { @Async public void handleUnmannedVehicleEntryRequest(UnmannedVehicleEntryRequestEvent event) { // 确保事件来源是无人车 if (event.getVehicleType() != MovingObject.ObjectType.UNMANNED_VEHICLE) { log.warn("收到非无人车的围栏事件,忽略处理: {}", event); return; } // 1. 执行准入检测 // 2. 记录检测结果 // 3. 发送WebSocket通知 (仅无人车事件) // 4. 记录审计日志 } @Async public void handleUnmannedVehicleViolation(UnmannedVehicleViolationEvent event) { // 处理无人车违规事件 // 1. 记录违规信息 // 2. 触发告警通知 // 3. 可能的自动处理措施 (如减速指令) } } ``` ## 🔧 实施步骤 ### Phase 1: 数据模型重构 (1周) 1. 简化AirportArea表结构 2. 完善SpatialRule表结构 3. 创建数据迁移脚本 4. 更新Entity类 ### Phase 2: 服务层开发 (2周) 1. 开发GeofenceAccessControlService 2. 增强RuleExecutionEngine 3. 实现事件处理机制 4. 集成WebSocket通知 ### Phase 3: 测试与优化 (1周) 1. 单元测试和集成测试 2. 性能优化 3. 监控和日志完善 4. 文档更新 ## 📊 技术优势 1. **清晰的职责分离**:Area专注空间数据,Rule管理业务逻辑 2. **灵活的规则配置**:通过JSON配置支持复杂业务场景 3. **高性能检测**:空间索引 + 缓存优化 4. **事件驱动架构**:异步处理,高并发支持 5. **易于扩展**:新增规则类型只需扩展配置,无需修改代码 ## 🎯 预期效果 - **功能完整性**:支持复杂的电子围栏准入检测需求 - **性能提升**:优化的空间查询和规则执行 - **维护性**:清晰的架构设计,易于理解和维护 - **扩展性**:支持未来新的业务需求