QAUP_Management/doc/design/电子围栏准入检测架构方案.md

6.8 KiB
Raw Permalink Blame History

电子围栏准入检测架构优化方案 (仅针对无人车)

📋 总体设计

核心原则

  1. 职责分离Area负责空间数据Rule负责业务逻辑
  2. 规则驱动所有准入检测通过SpatialRule统一管理
  3. 事件驱动:基于事件的异步处理机制
  4. 🎯 业务范围限定仅针对无人车进行电子围栏检测和告警

🏗️ 架构设计

1. 数据模型重构

1.1 简化Area模型

@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模型 (专注无人车)

@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 规则配置结构 (无人车专用)

{
  "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 电子围栏检测服务 (无人车专用)

@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 规则执行引擎 (针对无人车优化)

@Service  
public class UnmannedVehicleRuleEngine {
    
    /**
     * 执行无人车准入控制规则
     */
    public RuleExecutionResult executeAccessRules(MovingObject unmannedVehicle, AirportArea area, List<SpatialRule> 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 事件类型定义 (无人车专用)

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 事件处理流程 (仅处理无人车事件)

@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. 易于扩展:新增规则类型只需扩展配置,无需修改代码

🎯 预期效果

  • 功能完整性:支持复杂的电子围栏准入检测需求
  • 性能提升:优化的空间查询和规则执行
  • 维护性:清晰的架构设计,易于理解和维护
  • 扩展性:支持未来新的业务需求