6.8 KiB
6.8 KiB
电子围栏准入检测架构优化方案 (仅针对无人车)
📋 总体设计
核心原则
- 职责分离:Area负责空间数据,Rule负责业务逻辑
- 规则驱动:所有准入检测通过SpatialRule统一管理
- 事件驱动:基于事件的异步处理机制
- 🎯 业务范围限定:仅针对无人车进行电子围栏检测和告警
🏗️ 架构设计
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周)
- 简化AirportArea表结构
- 完善SpatialRule表结构
- 创建数据迁移脚本
- 更新Entity类
Phase 2: 服务层开发 (2周)
- 开发GeofenceAccessControlService
- 增强RuleExecutionEngine
- 实现事件处理机制
- 集成WebSocket通知
Phase 3: 测试与优化 (1周)
- 单元测试和集成测试
- 性能优化
- 监控和日志完善
- 文档更新
📊 技术优势
- 清晰的职责分离:Area专注空间数据,Rule管理业务逻辑
- 灵活的规则配置:通过JSON配置支持复杂业务场景
- 高性能检测:空间索引 + 缓存优化
- 事件驱动架构:异步处理,高并发支持
- 易于扩展:新增规则类型只需扩展配置,无需修改代码
🎯 预期效果
- 功能完整性:支持复杂的电子围栏准入检测需求
- 性能提升:优化的空间查询和规则执行
- 维护性:清晰的架构设计,易于理解和维护
- 扩展性:支持未来新的业务需求